From 77c6e28ed525c992882393289652bf5ab84ba614 Mon Sep 17 00:00:00 2001 From: Manjeet Rulhania Date: Tue, 10 Jan 2023 21:07:58 -0800 Subject: [PATCH 001/577] Disable debug flags debug flags were enabled to observe the failures and reduce flakiness. Fix: 254566067 Test: presubmit Change-Id: I0aa82283ebcdbc7154a6cb2580f93d05151e67ef --- .../permission/service/LocationAccessCheck.java | 2 +- .../privacysources/NotificationListenerCheck.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/LocationAccessCheck.java b/PermissionController/src/com/android/permissioncontroller/permission/service/LocationAccessCheck.java index 6d58d96d28..6af03ebfed 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/LocationAccessCheck.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/LocationAccessCheck.java @@ -160,7 +160,7 @@ import java.util.stream.Collectors; */ public class LocationAccessCheck { private static final String LOG_TAG = LocationAccessCheck.class.getSimpleName(); - private static final boolean DEBUG = true; + private static final boolean DEBUG = false; private static final long DEFAULT_RENOTIFY_DURATION_MILLIS = DAYS.toMillis(90); private static final String ISSUE_ID_PREFIX = "bg_location_"; private static final String ISSUE_TYPE_ID = "bg_location_privacy_issue"; diff --git a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt index e8d2724658..83222bf4a6 100644 --- a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt +++ b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt @@ -90,7 +90,7 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock private val TAG = "NotificationListenerCheck" -private const val DEBUG = true +private const val DEBUG = false const val SC_NLS_SOURCE_ID = "AndroidNotificationListener" @VisibleForTesting const val SC_NLS_DISABLE_ACTION_ID = "disable_nls_component" -- GitLab From 91132337c3a49b5c2e91c365d82a81604502997a Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 14 Feb 2023 15:58:33 -0800 Subject: [PATCH 002/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I352f67b58cfcf07488c796e09121b431633391a8 --- PermissionController/res/values-pt-rPT/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PermissionController/res/values-pt-rPT/strings.xml b/PermissionController/res/values-pt-rPT/strings.xml index b398aae571..3b5dd1aa6d 100644 --- a/PermissionController/res/values-pt-rPT/strings.xml +++ b/PermissionController/res/values-pt-rPT/strings.xml @@ -537,7 +537,7 @@ "Definições de segurança" "Autorizações" "Segurança e privacidade" - "Verificar estado" + "Rever estado" "Controlos de privacidade" "Mais definições" "Acesso à câmara" -- GitLab From f592122dd8ed8d15720aec5b3ab65090293b13f7 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 14 Feb 2023 16:03:11 -0800 Subject: [PATCH 003/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I12fe687ea0f93931af5a6c49862c59876d2522c2 --- PermissionController/res/values-af-v33/strings.xml | 3 ++- PermissionController/res/values-am-v33/strings.xml | 3 ++- PermissionController/res/values-ar-v33/strings.xml | 3 ++- PermissionController/res/values-as-v33/strings.xml | 3 ++- PermissionController/res/values-az-v33/strings.xml | 3 ++- PermissionController/res/values-b+sr+Latn-v33/strings.xml | 3 ++- PermissionController/res/values-be-v33/strings.xml | 3 ++- PermissionController/res/values-bg-v33/strings.xml | 3 ++- PermissionController/res/values-bn-v33/strings.xml | 2 ++ PermissionController/res/values-bs-v33/strings.xml | 4 ++-- PermissionController/res/values-ca-v33/strings.xml | 3 ++- PermissionController/res/values-cs-v33/strings.xml | 3 ++- PermissionController/res/values-da-v33/strings.xml | 3 ++- PermissionController/res/values-de-v33/strings.xml | 3 ++- PermissionController/res/values-el-v33/strings.xml | 3 ++- PermissionController/res/values-en-rAU-v33/strings.xml | 1 + PermissionController/res/values-en-rCA-v33/strings.xml | 1 + PermissionController/res/values-en-rGB-v33/strings.xml | 1 + PermissionController/res/values-en-rIN-v33/strings.xml | 1 + PermissionController/res/values-en-rXC-v33/strings.xml | 1 + PermissionController/res/values-es-rUS-v33/strings.xml | 3 ++- PermissionController/res/values-es-v33/strings.xml | 3 ++- PermissionController/res/values-et-v33/strings.xml | 3 ++- PermissionController/res/values-eu-v33/strings.xml | 3 ++- PermissionController/res/values-fa-v33/strings.xml | 3 ++- PermissionController/res/values-fi-v33/strings.xml | 3 ++- PermissionController/res/values-fr-rCA-v33/strings.xml | 3 ++- PermissionController/res/values-fr-v33/strings.xml | 3 ++- PermissionController/res/values-gl-v33/strings.xml | 3 ++- PermissionController/res/values-gu-v33/strings.xml | 3 ++- PermissionController/res/values-hi-v33/strings.xml | 3 ++- PermissionController/res/values-hr-v33/strings.xml | 4 ++-- PermissionController/res/values-hu-v33/strings.xml | 3 ++- PermissionController/res/values-hy-v33/strings.xml | 3 ++- PermissionController/res/values-in-v33/strings.xml | 3 ++- PermissionController/res/values-is-v33/strings.xml | 3 ++- PermissionController/res/values-it-v33/strings.xml | 3 ++- PermissionController/res/values-iw-v33/strings.xml | 3 ++- PermissionController/res/values-ja-v33/strings.xml | 2 ++ PermissionController/res/values-ka-v33/strings.xml | 3 ++- PermissionController/res/values-kk-v33/strings.xml | 3 ++- PermissionController/res/values-km-v33/strings.xml | 3 ++- PermissionController/res/values-kn-v33/strings.xml | 3 ++- PermissionController/res/values-ko-v33/strings.xml | 3 ++- PermissionController/res/values-ky-v33/strings.xml | 3 ++- PermissionController/res/values-lo-v33/strings.xml | 3 ++- PermissionController/res/values-lt-v33/strings.xml | 3 ++- PermissionController/res/values-lv-v33/strings.xml | 3 ++- PermissionController/res/values-mk-v33/strings.xml | 3 ++- PermissionController/res/values-ml-v33/strings.xml | 3 ++- PermissionController/res/values-mn-v33/strings.xml | 3 ++- PermissionController/res/values-mr-v33/strings.xml | 3 ++- PermissionController/res/values-ms-v33/strings.xml | 3 ++- PermissionController/res/values-my-v33/strings.xml | 3 ++- PermissionController/res/values-nb-v33/strings.xml | 3 ++- PermissionController/res/values-ne-v33/strings.xml | 3 ++- PermissionController/res/values-nl-v33/strings.xml | 3 ++- PermissionController/res/values-or-v33/strings.xml | 3 ++- PermissionController/res/values-pa-v33/strings.xml | 3 ++- PermissionController/res/values-pl-v33/strings.xml | 3 ++- PermissionController/res/values-pt-rBR-v33/strings.xml | 3 ++- PermissionController/res/values-pt-rPT-v33/strings.xml | 4 ++-- PermissionController/res/values-pt-v33/strings.xml | 3 ++- PermissionController/res/values-ro-v33/strings.xml | 3 ++- PermissionController/res/values-ru-v33/strings.xml | 3 ++- PermissionController/res/values-si-v33/strings.xml | 3 ++- PermissionController/res/values-sk-v33/strings.xml | 3 ++- PermissionController/res/values-sl-v33/strings.xml | 3 ++- PermissionController/res/values-sq-v33/strings.xml | 3 ++- PermissionController/res/values-sr-v33/strings.xml | 3 ++- PermissionController/res/values-sv-v33/strings.xml | 3 ++- PermissionController/res/values-sw-v33/strings.xml | 3 ++- PermissionController/res/values-ta-v33/strings.xml | 3 ++- PermissionController/res/values-te-v33/strings.xml | 3 ++- PermissionController/res/values-th-v33/strings.xml | 3 ++- PermissionController/res/values-tl-v33/strings.xml | 3 ++- PermissionController/res/values-tr-v33/strings.xml | 3 ++- PermissionController/res/values-uk-v33/strings.xml | 3 ++- PermissionController/res/values-ur-v33/strings.xml | 3 ++- PermissionController/res/values-uz-v33/strings.xml | 3 ++- PermissionController/res/values-vi-v33/strings.xml | 3 ++- PermissionController/res/values-zh-rCN-v33/strings.xml | 3 ++- PermissionController/res/values-zh-rHK-v33/strings.xml | 3 ++- PermissionController/res/values-zh-rTW-v33/strings.xml | 3 ++- PermissionController/res/values-zu-v33/strings.xml | 3 ++- 85 files changed, 165 insertions(+), 81 deletions(-) diff --git a/PermissionController/res/values-af-v33/strings.xml b/PermissionController/res/values-af-v33/strings.xml index 9d216b9813..9dfdf713b7 100644 --- a/PermissionController/res/values-af-v33/strings.xml +++ b/PermissionController/res/values-af-v33/strings.xml @@ -27,7 +27,8 @@ "Lys. %1$s. Handelinge word benodig. %2$s" "Lysitem. %1$s. %2$s" "%1$s. %2$s" - + "Meer waarskuwings" + "{count,plural, =1{Vou uit om nog een waarskuwing te sien}other{Vou uit om nog # waarskuwings te sien}}" "Waarskuwing. %1$s. %2$s" diff --git a/PermissionController/res/values-am-v33/strings.xml b/PermissionController/res/values-am-v33/strings.xml index 8d5dbb6a1f..7f4ee0f183 100644 --- a/PermissionController/res/values-am-v33/strings.xml +++ b/PermissionController/res/values-am-v33/strings.xml @@ -27,7 +27,8 @@ "ዝርዝር። %1$s። እርምጃዎች ያስፈልጋሉ። %2$s" "የዝርዝር ንጥል። %1$s%2$s" "%1$s%2$s" - + "ተጨማሪ ማንቂያዎች" + "{count,plural, =1{ይዘርጉ እና አንድ ተጨማሪ ማንቂያ ይመልከቱ}one{ይዘርጉ እና # ተጨማሪ ማንቂያ ይመልከቱ}other{ይዘርጉ እና # ተጨማሪ ማንቂያዎችን ይመልከቱ}}" "ማንቂያ። %1$s%2$s" diff --git a/PermissionController/res/values-ar-v33/strings.xml b/PermissionController/res/values-ar-v33/strings.xml index 11975d2278..89bfff7c08 100644 --- a/PermissionController/res/values-ar-v33/strings.xml +++ b/PermissionController/res/values-ar-v33/strings.xml @@ -27,7 +27,8 @@ "قائمة %1$s. مطلوب اتخاذ إجراءات. %2$s" "عنصر قائمة %1$s. %2$s" "%1$s. %2$s" - + "المزيد من التنبيهات" + "{count,plural, =1{التوسيع لعرض تنبيه واحد إضافي}zero{التوسيع لعرض # تنبيه إضافي}two{التوسيع لعرض تنبيهين إضافيَين}few{التوسيع لعرض # تنبيهات إضافية}many{التوسيع لعرض # تنبيهًا إضافيًا}other{التوسيع لعرض # تنبيه إضافي}}" "تنبيه %1$s. %2$s" diff --git a/PermissionController/res/values-as-v33/strings.xml b/PermissionController/res/values-as-v33/strings.xml index d4c4f13b11..6fd7faf9ec 100644 --- a/PermissionController/res/values-as-v33/strings.xml +++ b/PermissionController/res/values-as-v33/strings.xml @@ -27,7 +27,8 @@ "সূচী। %1$s। কার্য কৰাৰ আৱশ্যক। %2$s" "সূচীৰ বস্তু। %1$s%2$s" "%1$s%2$s" - + "অধিক সতৰ্কবাৰ্তা" + "{count,plural, =1{বিস্তাৰ কৰক আৰু এটা সতৰ্কবাৰ্তা চাওক}one{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}other{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}}" "সতৰ্কতা। %1$s%2$s" diff --git a/PermissionController/res/values-az-v33/strings.xml b/PermissionController/res/values-az-v33/strings.xml index 8d562bc222..c21cdc52a7 100644 --- a/PermissionController/res/values-az-v33/strings.xml +++ b/PermissionController/res/values-az-v33/strings.xml @@ -27,7 +27,8 @@ "Siyahı. %1$s. Əməliyyat tələb olunur. %2$s" "Siyahı elementi. %1$s. %2$s" "%1$s. %2$s" - + "Daha çox siqnal" + "{count,plural, =1{Genişləndirin və daha bir xəbərdarlığa baxın}other{Genişləndirin və daha # xəbərdarlığa baxın}}" "Siqnal. %1$s. %2$s" diff --git a/PermissionController/res/values-b+sr+Latn-v33/strings.xml b/PermissionController/res/values-b+sr+Latn-v33/strings.xml index e2da9ec7bc..81af83a314 100644 --- a/PermissionController/res/values-b+sr+Latn-v33/strings.xml +++ b/PermissionController/res/values-b+sr+Latn-v33/strings.xml @@ -27,7 +27,8 @@ "Lista: %1$s. Treba da reagujete. %2$s" "Stavka liste. %1$s. %2$s" "%1$s. %2$s" - + "Još obaveštenja" + "{count,plural, =1{Proširite i vidite još jedno obaveštenje}one{Proširite i vidite još # obaveštenje}few{Proširite i vidite još # obaveštenja}other{Proširite i vidite još # obaveštenja}}" "Obaveštenje. %1$s. %2$s" diff --git a/PermissionController/res/values-be-v33/strings.xml b/PermissionController/res/values-be-v33/strings.xml index 7bf6f63a0d..395516e2a0 100644 --- a/PermissionController/res/values-be-v33/strings.xml +++ b/PermissionController/res/values-be-v33/strings.xml @@ -27,7 +27,8 @@ "Спіс. %1$s. Патрабуюцца дзеянні. %2$s" "Элемент спіса. %1$s. %2$s" "%1$s. %2$s" - + "Іншыя абвесткі" + "{count,plural, =1{Разгарніце, каб убачыць яшчэ адну абвестку}one{Разгарніце, каб убачыць яшчэ # абвестку}few{Разгарніце, каб убачыць яшчэ # абвесткі}many{Разгарніце, каб убачыць яшчэ # абвестак}other{Разгарніце, каб убачыць яшчэ # абвесткі}}" "Абвестка. %1$s. %2$s" diff --git a/PermissionController/res/values-bg-v33/strings.xml b/PermissionController/res/values-bg-v33/strings.xml index cc498115f8..cca3d1a652 100644 --- a/PermissionController/res/values-bg-v33/strings.xml +++ b/PermissionController/res/values-bg-v33/strings.xml @@ -27,7 +27,8 @@ "Списък. %1$s. Необходимо е действие. %2$s" "Списъчен елемент. %1$s. %2$s" "%1$s. %2$s" - + "Още сигнали" + "{count,plural, =1{Разгънете и вижте още един сигнал}other{Разгънете и вижте още # сигнала}}" "Сигнал. %1$s. %2$s" diff --git a/PermissionController/res/values-bn-v33/strings.xml b/PermissionController/res/values-bn-v33/strings.xml index ac9b556440..8923d7d333 100644 --- a/PermissionController/res/values-bn-v33/strings.xml +++ b/PermissionController/res/values-bn-v33/strings.xml @@ -29,6 +29,8 @@ "%1$s. %2$s" + + "{count,plural, =1{বড় করুন ও আরও একটি সতর্কতা দেখুন}one{বড় করুন ও আরও #টি সতর্কতা দেখুন}other{বড় করুন ও আরও #টি সতর্কতা দেখুন}}" "সতর্কতা। %1$s%2$s" "সতর্কতা। %1$s%2$s%3$s" diff --git a/PermissionController/res/values-bs-v33/strings.xml b/PermissionController/res/values-bs-v33/strings.xml index 15ad5f9489..27fbbdfaa2 100644 --- a/PermissionController/res/values-bs-v33/strings.xml +++ b/PermissionController/res/values-bs-v33/strings.xml @@ -27,8 +27,8 @@ "Lista. %1$s. Potrebne su radnje. %2$s" "Stavka liste. %1$s. %2$s" "%1$s. %2$s" - - + "Više upozorenja" + "Odbačena upozorenja" "{count,plural, =1{Proširite i vidite još jedno upozorenje}one{Proširite i vidite još # upozorenje}few{Proširite i vidite još # upozorenja}other{Proširite i vidite još # upozorenja}}" "Upozorenje. %1$s. %2$s" "Upozorenje. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ca-v33/strings.xml b/PermissionController/res/values-ca-v33/strings.xml index 6acf69cb69..28432191de 100644 --- a/PermissionController/res/values-ca-v33/strings.xml +++ b/PermissionController/res/values-ca-v33/strings.xml @@ -27,7 +27,8 @@ "Llista. %1$s. Accions necessàries. %2$s." "Element de llista. %1$s. %2$s." "%1$s. %2$s." - + "Més alertes" + "{count,plural, =1{Desplega i consulta 1 alerta més}many{Desplega i consulta # alertes més}other{Desplega i consulta # alertes més}}" "Alerta. %1$s. %2$s." diff --git a/PermissionController/res/values-cs-v33/strings.xml b/PermissionController/res/values-cs-v33/strings.xml index 2e993c48df..7fac14a2fe 100644 --- a/PermissionController/res/values-cs-v33/strings.xml +++ b/PermissionController/res/values-cs-v33/strings.xml @@ -27,7 +27,8 @@ "Seznam. %1$s. Jsou vyžadovány akce. %2$s" "Položka seznamu. %1$s. %2$s" "%1$s. %2$s" - + "Další upozornění" + "{count,plural, =1{Rozbalením zobrazíte jedno další upozornění}few{Rozbalením zobrazíte # další upozornění}many{Rozbalením zobrazíte # dalšího upozornění}other{Rozbalením zobrazíte # dalších upozornění}}" "Upozornění. %1$s. %2$s" diff --git a/PermissionController/res/values-da-v33/strings.xml b/PermissionController/res/values-da-v33/strings.xml index 1ffd79e75b..6aa4e042b1 100644 --- a/PermissionController/res/values-da-v33/strings.xml +++ b/PermissionController/res/values-da-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. Handling er påkrævet. %2$s" "Listepunkt. %1$s. %2$s" "%1$s. %2$s" - + "Flere underretninger" + "{count,plural, =1{Udvid for at se én yderligere advarsel}one{Udvid for at se # yderligere advarsel}other{Udvid for at se # yderligere advarsler}}" "Underretning. %1$s. %2$s" diff --git a/PermissionController/res/values-de-v33/strings.xml b/PermissionController/res/values-de-v33/strings.xml index 1cb9562fd6..86ea2b6988 100644 --- a/PermissionController/res/values-de-v33/strings.xml +++ b/PermissionController/res/values-de-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. Wichtige Informationen. %2$s" "Listeneintrag. %1$s. %2$s" "%1$s. %2$s" - + "Weitere Benachrichtigungen" + "{count,plural, =1{Maximieren und eine weitere Warnung anzeigen}other{Maximieren und # weitere Warnungen anzeigen}}" "Benachrichtigung. %1$s. %2$s" diff --git a/PermissionController/res/values-el-v33/strings.xml b/PermissionController/res/values-el-v33/strings.xml index a763be7a30..a90f553a05 100644 --- a/PermissionController/res/values-el-v33/strings.xml +++ b/PermissionController/res/values-el-v33/strings.xml @@ -27,7 +27,8 @@ "Λίστα. %1$s. Απαιτούνται ενέργειες. %2$s" "Στοιχείο λίστας. %1$s. %2$s" "%1$s. %2$s" - + "Περισσότερες ειδοποιήσεις" + "{count,plural, =1{Αναπτύξτε και δείτε μία ακόμη ειδοποίηση}other{Αναπτύξτε και δείτε # ακόμη ειδοποιήσεις}}" "Ειδοποίηση. %1$s. %2$s" diff --git a/PermissionController/res/values-en-rAU-v33/strings.xml b/PermissionController/res/values-en-rAU-v33/strings.xml index 4c9627ae49..4aa65fa53c 100644 --- a/PermissionController/res/values-en-rAU-v33/strings.xml +++ b/PermissionController/res/values-en-rAU-v33/strings.xml @@ -28,6 +28,7 @@ "List item. %1$s. %2$s" "%1$s. %2$s" "More alerts" + "Dismissed alerts" "{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}" "Alert. %1$s. %2$s" "Alert. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-en-rCA-v33/strings.xml b/PermissionController/res/values-en-rCA-v33/strings.xml index 4bb85f62c4..300c1da186 100644 --- a/PermissionController/res/values-en-rCA-v33/strings.xml +++ b/PermissionController/res/values-en-rCA-v33/strings.xml @@ -28,6 +28,7 @@ "List item. %1$s. %2$s" "%1$s. %2$s" "More alerts" + "Dismissed alerts" "{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}" "Alert. %1$s. %2$s" "Alert. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-en-rGB-v33/strings.xml b/PermissionController/res/values-en-rGB-v33/strings.xml index 4c9627ae49..4aa65fa53c 100644 --- a/PermissionController/res/values-en-rGB-v33/strings.xml +++ b/PermissionController/res/values-en-rGB-v33/strings.xml @@ -28,6 +28,7 @@ "List item. %1$s. %2$s" "%1$s. %2$s" "More alerts" + "Dismissed alerts" "{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}" "Alert. %1$s. %2$s" "Alert. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-en-rIN-v33/strings.xml b/PermissionController/res/values-en-rIN-v33/strings.xml index 4c9627ae49..4aa65fa53c 100644 --- a/PermissionController/res/values-en-rIN-v33/strings.xml +++ b/PermissionController/res/values-en-rIN-v33/strings.xml @@ -28,6 +28,7 @@ "List item. %1$s. %2$s" "%1$s. %2$s" "More alerts" + "Dismissed alerts" "{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}" "Alert. %1$s. %2$s" "Alert. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-en-rXC-v33/strings.xml b/PermissionController/res/values-en-rXC-v33/strings.xml index 2419864d2a..324b3b5366 100644 --- a/PermissionController/res/values-en-rXC-v33/strings.xml +++ b/PermissionController/res/values-en-rXC-v33/strings.xml @@ -28,6 +28,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎List item. ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎More alerts‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎Dismissed alerts‎‏‎‎‏‎" "{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎Expand and see one more alert‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎Expand and see # more alerts‎‏‎‎‏‎}}" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎Alert. ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎Alert. ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎%3$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" diff --git a/PermissionController/res/values-es-rUS-v33/strings.xml b/PermissionController/res/values-es-rUS-v33/strings.xml index e7b5a167bb..81d852e2e3 100644 --- a/PermissionController/res/values-es-rUS-v33/strings.xml +++ b/PermissionController/res/values-es-rUS-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Se requieren acciones. %2$s" "Elemento de la lista. %1$s. %2$s" "%1$s. %2$s" - + "Más alertas" + "{count,plural, =1{Expande y ve una alerta más}many{Expande y ve # de alertas más}other{Expande y ve # alertas más}}" "Alerta. %1$s. %2$s" diff --git a/PermissionController/res/values-es-v33/strings.xml b/PermissionController/res/values-es-v33/strings.xml index ac4ffa0228..0fdb1a1c36 100644 --- a/PermissionController/res/values-es-v33/strings.xml +++ b/PermissionController/res/values-es-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Acciones necesarias. %2$s." "Elemento de lista. %1$s. %2$s." "%1$s. %2$s." - + "Más alertas" + "{count,plural, =1{Ampliar para ver una alerta más}many{Ampliar para ver # alertas más}other{Ampliar para ver # alertas más}}" "Alerta. %1$s. %2$s." diff --git a/PermissionController/res/values-et-v33/strings.xml b/PermissionController/res/values-et-v33/strings.xml index c02341963b..25aaf8b481 100644 --- a/PermissionController/res/values-et-v33/strings.xml +++ b/PermissionController/res/values-et-v33/strings.xml @@ -27,7 +27,8 @@ "Loend. %1$s. Nõutavad on toimingud. %2$s" "Loendiüksus. %1$s. %2$s." "%1$s. %2$s" - + "Rohkem teavitusi" + "{count,plural, =1{Laiendage ja vaadake veel ühte hoiatust}other{Laiendage ja vaadake veel # hoiatust}}" "Hoiatus. %1$s. %2$s." diff --git a/PermissionController/res/values-eu-v33/strings.xml b/PermissionController/res/values-eu-v33/strings.xml index 4ca3022235..32fd07c0dd 100644 --- a/PermissionController/res/values-eu-v33/strings.xml +++ b/PermissionController/res/values-eu-v33/strings.xml @@ -27,7 +27,8 @@ "Zerrenda. %1$s. Zerbait egin behar duzu. %2$s" "Zerrendako elementua. %1$s. %2$s" "%1$s. %2$s" - + "Alerta gehiago" + "{count,plural, =1{Zabaldu eta ikusi beste alerta bat}other{Zabaldu eta ikusi # alerta gehiago}}" "Alerta. %1$s. %2$s" diff --git a/PermissionController/res/values-fa-v33/strings.xml b/PermissionController/res/values-fa-v33/strings.xml index 69fac1737b..196922295f 100644 --- a/PermissionController/res/values-fa-v33/strings.xml +++ b/PermissionController/res/values-fa-v33/strings.xml @@ -27,7 +27,8 @@ "فهرست. %1$s. اقداماتی لازم است. %2$s" "مورد فهرست. %1$s. %2$s" "%1$s. %2$s" - + "هشدارهای بیشتر" + "{count,plural, =1{گسترده کردن و دیدن یک هشدار دیگر}one{گسترده کردن و دیدن # هشدار دیگر}other{گسترده کردن و دیدن # هشدار دیگر}}" "هشدار. %1$s. %2$s" diff --git a/PermissionController/res/values-fi-v33/strings.xml b/PermissionController/res/values-fi-v33/strings.xml index e2782e6c8c..ea628dbdb5 100644 --- a/PermissionController/res/values-fi-v33/strings.xml +++ b/PermissionController/res/values-fi-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Toimi pian. %2$s" "Listan osa. %1$s. %2$s" "%1$s. %2$s" - + "Lisää ilmoituksia" + "{count,plural, =1{Laajenna ja katso yksi muu ilmoitus}other{Laajenna ja katso # muuta ilmoitusta}}" "Ilmoitus. %1$s. %2$s" diff --git a/PermissionController/res/values-fr-rCA-v33/strings.xml b/PermissionController/res/values-fr-rCA-v33/strings.xml index 3a07e21c8b..325510da18 100644 --- a/PermissionController/res/values-fr-rCA-v33/strings.xml +++ b/PermissionController/res/values-fr-rCA-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. Actions requises. %2$s" "Élément de la liste. %1$s. %2$s" "%1$s. %2$s" - + "Plus d\'alertes" + "{count,plural, =1{Développez et affichez une autre alerte}one{Développez et affichez # autre alerte}many{Développez et affichez # d\'autres alertes}other{Développez et affichez # autres alertes}}" "Alerte. %1$s. %2$s" diff --git a/PermissionController/res/values-fr-v33/strings.xml b/PermissionController/res/values-fr-v33/strings.xml index 65f40a8491..863f045fd3 100644 --- a/PermissionController/res/values-fr-v33/strings.xml +++ b/PermissionController/res/values-fr-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. Actions requises. %2$s." "Élément de liste. %1$s. %2$s." "%1$s : %2$s" - + "Autres alertes" + "{count,plural, =1{Développer et voir 1 autre alerte}one{Développer et voir # autre alerte}many{Développer et voir # autres alertes}other{Développer et voir # autres alertes}}" "Alerte. %1$s. %2$s" diff --git a/PermissionController/res/values-gl-v33/strings.xml b/PermissionController/res/values-gl-v33/strings.xml index 7058cb0940..9ed3e74733 100644 --- a/PermissionController/res/values-gl-v33/strings.xml +++ b/PermissionController/res/values-gl-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Cómpre realizar accións. %2$s" "Elemento da lista. %1$s. %2$s" "%1$s. %2$s" - + "Máis alertas" + "{count,plural, =1{Despregar tarxeta e ver 1 alerta máis}other{Despregar tarxeta e ver # alertas máis}}" "Alerta. %1$s. %2$s" diff --git a/PermissionController/res/values-gu-v33/strings.xml b/PermissionController/res/values-gu-v33/strings.xml index f8de2cfad1..b5a408fbd8 100644 --- a/PermissionController/res/values-gu-v33/strings.xml +++ b/PermissionController/res/values-gu-v33/strings.xml @@ -27,7 +27,8 @@ "સૂચિ. %1$s. જરૂરી પગલાં. %2$s" "આઇટમ સૂચિબદ્ધ કરો. %1$s. %2$s" "%1$s. %2$s" - + "વધુ અલર્ટ" + "{count,plural, =1{મોટું કરો અને વધુ એક અલર્ટ જુઓ}one{મોટું કરો અને વધુ # અલર્ટ જુઓ}other{મોટું કરો અને વધુ # અલર્ટ જુઓ}}" "અલર્ટ. %1$s. %2$s" diff --git a/PermissionController/res/values-hi-v33/strings.xml b/PermissionController/res/values-hi-v33/strings.xml index 80318ee3cb..ff78667ed8 100644 --- a/PermissionController/res/values-hi-v33/strings.xml +++ b/PermissionController/res/values-hi-v33/strings.xml @@ -27,7 +27,8 @@ "सूची. %1$s. ज़रूरी कार्रवाइयां. %2$s" "आइटम की सूची. %1$s. %2$s" "%1$s. %2$s" - + "ज़्यादा चेतावनियां" + "{count,plural, =1{कार्ड को बड़ा करके एक और सूचना देखें}one{कार्ड को बड़ा करके # और सूचना देखें}other{कार्ड को बड़ा करके # और सूचनाएं देखें}}" "चेतावनी. %1$s. %2$s" diff --git a/PermissionController/res/values-hr-v33/strings.xml b/PermissionController/res/values-hr-v33/strings.xml index 3bdc07b0b8..85c97e68aa 100644 --- a/PermissionController/res/values-hr-v33/strings.xml +++ b/PermissionController/res/values-hr-v33/strings.xml @@ -27,8 +27,8 @@ "Popis. %1$s. Potrebno je poduzeti radnje. %2$s" "Stavka popisa. %1$s. %2$s" "%1$s. %2$s" - - + "Više upozorenja" + "Odbačena upozorenja" "{count,plural, =1{Proširite i pogledajte još jedno upozorenje}one{Proširite i pogledajte još # upozorenje}few{Proširite i pogledajte još # upozorenja}other{Proširite i pogledajte još # upozorenja}}" "Upozorenje. %1$s. %2$s" "Upozorenje. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-hu-v33/strings.xml b/PermissionController/res/values-hu-v33/strings.xml index 75efbf5c46..0acd4d4a46 100644 --- a/PermissionController/res/values-hu-v33/strings.xml +++ b/PermissionController/res/values-hu-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Fontos teendő. %2$s" "Listaelem. %1$s. %2$s." "%1$s. %2$s" - + "Több értesítés" + "{count,plural, =1{Ha kibontja, még egy értesítést láthat}other{Ha kibontja, még # értesítést láthat}}" "Figyelmeztetés. %1$s. %2$s." diff --git a/PermissionController/res/values-hy-v33/strings.xml b/PermissionController/res/values-hy-v33/strings.xml index 25ea6747ad..3b9ccd547e 100644 --- a/PermissionController/res/values-hy-v33/strings.xml +++ b/PermissionController/res/values-hy-v33/strings.xml @@ -27,7 +27,8 @@ "Ցանկ։ %1$s։ Պահանջվում է գործողություն։ %2$s" "Ցանկի տարր։ %1$s։ %2$s" "%1$s%2$s" - + "Այլ ծանուցումներ" + "{count,plural, =1{Ծավալել և տեսնել ևս մեկ զգուշացում}one{Ծավալել և տեսնել ևս # զգուշացում}other{Ծավալել և տեսնել ևս # զգուշացում}}" "Ծանուցում: %1$s: %2$s" diff --git a/PermissionController/res/values-in-v33/strings.xml b/PermissionController/res/values-in-v33/strings.xml index ecb08f01b9..014dba5b07 100644 --- a/PermissionController/res/values-in-v33/strings.xml +++ b/PermissionController/res/values-in-v33/strings.xml @@ -27,7 +27,8 @@ "Daftar. %1$s. Diperlukan tindakan. %2$s" "Item daftar. %1$s. %2$s" "%1$s. %2$s" - + "Peringatan lainnya" + "{count,plural, =1{Luaskan untuk melihat satu peringatan lain}other{Luaskan untuk melihat # peringatan lain}}" "Notifikasi. %1$s. %2$s" diff --git a/PermissionController/res/values-is-v33/strings.xml b/PermissionController/res/values-is-v33/strings.xml index fdfc0719e0..caf5626149 100644 --- a/PermissionController/res/values-is-v33/strings.xml +++ b/PermissionController/res/values-is-v33/strings.xml @@ -27,7 +27,8 @@ "Listi. %1$s. Aðgerða þörf. %2$s" "Listaatriði. %1$s. %2$s" "%1$s. %2$s" - + "Fleiri tilkynningar" + "{count,plural, =1{Stækka og sjá eina viðvörun í viðbót}one{Stækka og sjá # viðvörun í viðbót}other{Stækka og sjá # viðvaranir í viðbót}}" "Viðvörun. %1$s. %2$s" diff --git a/PermissionController/res/values-it-v33/strings.xml b/PermissionController/res/values-it-v33/strings.xml index f63a7eb388..bd231e54bc 100644 --- a/PermissionController/res/values-it-v33/strings.xml +++ b/PermissionController/res/values-it-v33/strings.xml @@ -27,7 +27,8 @@ "Elenco. %1$s. Azioni richieste. %2$s" "Voce elenco. %1$s. %2$s" "%1$s. %2$s" - + "Altri avvisi" + "{count,plural, =1{Espandi e visualizza un altro avviso}many{Espandi e visualizza altri # avvisi}other{Espandi e visualizza altri # avvisi}}" "Avviso. %1$s. %2$s" diff --git a/PermissionController/res/values-iw-v33/strings.xml b/PermissionController/res/values-iw-v33/strings.xml index 6cb02e33bd..d52cf29250 100644 --- a/PermissionController/res/values-iw-v33/strings.xml +++ b/PermissionController/res/values-iw-v33/strings.xml @@ -27,7 +27,8 @@ "רשימה. %1$s. נדרשות פעולות. %2$s" "פריט ברשימה. %1$s. %2$s" "%1$s. %2$s" - + "התראות נוספות" + "{count,plural, =1{הרחבה וצפייה בהתראה נוספת אחת}one{הרחבה וצפייה ב-# התראות נוספות}two{הרחבה וצפייה ב-# התראות נוספות}other{הרחבה וצפייה ב-# התראות נוספות}}" "התראה. %1$s. %2$s" diff --git a/PermissionController/res/values-ja-v33/strings.xml b/PermissionController/res/values-ja-v33/strings.xml index 52ed3c4f87..3065d98616 100644 --- a/PermissionController/res/values-ja-v33/strings.xml +++ b/PermissionController/res/values-ja-v33/strings.xml @@ -28,6 +28,8 @@ "リストアイテム。%1$s%2$s" "%1$s%2$s" "その他のアラート" + + "{count,plural, =1{1 個以上のアラートを開いて表示する}other{# 個以上のアラートを開いて表示する}}" "アラート。%1$s%2$s" "アラート。%1$s%2$s%3$s" diff --git a/PermissionController/res/values-ka-v33/strings.xml b/PermissionController/res/values-ka-v33/strings.xml index 98b3641eec..75f51900a8 100644 --- a/PermissionController/res/values-ka-v33/strings.xml +++ b/PermissionController/res/values-ka-v33/strings.xml @@ -27,7 +27,8 @@ "სია. %1$s. საჭირო ქმედებები. %2$s" "სიის ერთეული. %1$s. %2$s" "%1$s. %2$s" - + "სხვა გაფრთხილებები" + "{count,plural, =1{გააფართოვეთ და ნახეთ კიდევ ერთი გაფრთხილება}other{გააფართოვეთ და იხილეთ კიდევ # გაფრთხილება}}" "გაფრთხილება. %1$s. %2$s" diff --git a/PermissionController/res/values-kk-v33/strings.xml b/PermissionController/res/values-kk-v33/strings.xml index 83a07caeec..ca75fd0699 100644 --- a/PermissionController/res/values-kk-v33/strings.xml +++ b/PermissionController/res/values-kk-v33/strings.xml @@ -27,7 +27,8 @@ "Тізім. %1$s. Әрекет жасауыңыз керек. %2$s" "Тізім элементі. %1$s. %2$s" "%1$s. %2$s" - + "Басқа хабарландырулар" + "{count,plural, =1{Тағы бір хабарландыруды жаю және көру}other{Тағы # хабарландыруды жаю және көру}}" "Хабарландыру. %1$s. %2$s" diff --git a/PermissionController/res/values-km-v33/strings.xml b/PermissionController/res/values-km-v33/strings.xml index 4ba4f2bea0..9f38d222be 100644 --- a/PermissionController/res/values-km-v33/strings.xml +++ b/PermissionController/res/values-km-v33/strings.xml @@ -27,7 +27,8 @@ "បញ្ជី។ %1$s។ សកម្មភាព​ដែលត្រូវធ្វើ។ %2$s" "រាយ​បញ្ជី​ធាតុ។ %1$s%2$s" "%1$s%2$s" - + "ការជូនដំណឹង​ច្រើនទៀត" + "{count,plural, =1{ពង្រីកដើម្បីមើលការជូនដំណឹងមួយទៀត}other{ពង្រីកដើម្បីមើលការជូនដំណឹង # ទៀត}}" "ការជូន​ដំណឹង។ %1$s%2$s" diff --git a/PermissionController/res/values-kn-v33/strings.xml b/PermissionController/res/values-kn-v33/strings.xml index 1599eea02c..6473eddbf3 100644 --- a/PermissionController/res/values-kn-v33/strings.xml +++ b/PermissionController/res/values-kn-v33/strings.xml @@ -27,7 +27,8 @@ "ಪಟ್ಟಿ. %1$s. ಅಗತ್ಯ ಕ್ರಮಗಳು. %2$s" "ಪಟ್ಟಿ ಐಟಂ. %1$s. %2$s" "%1$s. %2$s" - + "ಇನ್ನಷ್ಟು ಎಚ್ಚರಿಕೆಗಳು" + "{count,plural, =1{ವಿಸ್ತರಿಸಿ ಮತ್ತು ಇನ್ನೊಂದು ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}" "ಎಚ್ಚರಿಕೆ. %1$s. %2$s" diff --git a/PermissionController/res/values-ko-v33/strings.xml b/PermissionController/res/values-ko-v33/strings.xml index 2a7594c5fb..93d7f88841 100644 --- a/PermissionController/res/values-ko-v33/strings.xml +++ b/PermissionController/res/values-ko-v33/strings.xml @@ -27,7 +27,8 @@ "목록. %1$s. 조치 필요. %2$s" "목록 항목. %1$s. %2$s" "%1$s. %2$s" - + "알림 더보기" + "{count,plural, =1{펼쳐서 알림 1개 더보기}other{펼쳐서 알림 #개 더보기}}" "알림 %1$s. %2$s" diff --git a/PermissionController/res/values-ky-v33/strings.xml b/PermissionController/res/values-ky-v33/strings.xml index fe595b478e..4cc1e61f1e 100644 --- a/PermissionController/res/values-ky-v33/strings.xml +++ b/PermissionController/res/values-ky-v33/strings.xml @@ -27,7 +27,8 @@ "Тизме. %1$s. Чара көрүү керек. %2$s" "Тизмедеги нерсе. %1$s. %2$s" "%1$s. %2$s" - + "Дагы эскертүүлөр" + "{count,plural, =1{Дагы бир эскертүүнү көрүү үчүн жайып көрсөтүү}other{Дагы # эскертүүнү көрүү үчүн жайып көрсөтүү}}" "Эскертүү. %1$s. %2$s" diff --git a/PermissionController/res/values-lo-v33/strings.xml b/PermissionController/res/values-lo-v33/strings.xml index 86db96906b..c8437e38cb 100644 --- a/PermissionController/res/values-lo-v33/strings.xml +++ b/PermissionController/res/values-lo-v33/strings.xml @@ -27,7 +27,8 @@ "ລາຍການ. %1$s. ຕ້ອງດຳເນີນການ. %2$s" "ລາຍການລາຍຊື່. %1$s. %2$s" "%1$s. %2$s" - + "ແຈ້ງເຕືອນເພີ່ມເຕີມ" + "{count,plural, =1{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ 1 ລາຍການ}other{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ # ລາຍການ}}" "ແຈ້ງເຕືອນ. %1$s. %2$s" diff --git a/PermissionController/res/values-lt-v33/strings.xml b/PermissionController/res/values-lt-v33/strings.xml index 2072ce4ae8..8d2100f7de 100644 --- a/PermissionController/res/values-lt-v33/strings.xml +++ b/PermissionController/res/values-lt-v33/strings.xml @@ -27,7 +27,8 @@ "Sąrašas. %1$s. Būtina imtis veiksmų. %2$s" "Sąrašo elementas. %1$s. %2$s" "„%1$s“. %2$s" - + "Daugiau įspėjimų" + "{count,plural, =1{Išskleiskite ir peržiūrėkite dar vieną įspėjimą}one{Išskleiskite ir peržiūrėkite dar # įspėjimą}few{Išskleiskite ir peržiūrėkite dar # įspėjimus}many{Išskleiskite ir peržiūrėkite dar # įspėjimo}other{Išskleiskite ir peržiūrėkite dar # įspėjimų}}" "Įspėjimas. %1$s. %2$s" diff --git a/PermissionController/res/values-lv-v33/strings.xml b/PermissionController/res/values-lv-v33/strings.xml index 07c2a4b79e..7d2bd882e7 100644 --- a/PermissionController/res/values-lv-v33/strings.xml +++ b/PermissionController/res/values-lv-v33/strings.xml @@ -27,7 +27,8 @@ "Saraksts. %1$s. Nepieciešama rīcība. %2$s" "Saraksta vienums. %1$s. %2$s" "%1$s. %2$s" - + "Citi brīdinājumi" + "{count,plural, =1{Izvērsiet un skatiet vēl vienu brīdinājumu.}zero{Izvērsiet un skatiet vēl # brīdinājumus.}one{Izvērsiet un skatiet vēl # brīdinājumu.}other{Izvērsiet un skatiet vēl # brīdinājumus.}}" "Brīdinājums. %1$s. %2$s" diff --git a/PermissionController/res/values-mk-v33/strings.xml b/PermissionController/res/values-mk-v33/strings.xml index 0431c190c1..d725565b92 100644 --- a/PermissionController/res/values-mk-v33/strings.xml +++ b/PermissionController/res/values-mk-v33/strings.xml @@ -27,7 +27,8 @@ "Список. %1$s. Потребни дејства. %2$s" "Ставка на списокот. %1$s. %2$s" "%1$s. %2$s" - + "Повеќе предупредувања" + "{count,plural, =1{Проширете и видете уште едно предупредување}one{Проширете и видете уште # предупредување}other{Проширете и видете уште # предупредувањa}}" "Предупредување. %1$s. %2$s" diff --git a/PermissionController/res/values-ml-v33/strings.xml b/PermissionController/res/values-ml-v33/strings.xml index c51a5306ad..800dc48898 100644 --- a/PermissionController/res/values-ml-v33/strings.xml +++ b/PermissionController/res/values-ml-v33/strings.xml @@ -27,7 +27,8 @@ "ലിസ്റ്റ്. %1$s. നടപടികൾ ആവശ്യമാണ്. %2$s" "ലിസ്‌റ്റ് ഇനം. %1$s. %2$s" "%1$s. %2$s" - + "കൂടുതൽ മുന്നറിയിപ്പുകൾ" + "{count,plural, =1{വികസിപ്പിച്ച് ഒരു മുന്നറിയിപ്പ് കൂടി കാണുക}other{വികസിപ്പിച്ച് # മുന്നറിയിപ്പ് കൂടി കാണുക}}" "മുന്നറിയിപ്പ്. %1$s. %2$s" diff --git a/PermissionController/res/values-mn-v33/strings.xml b/PermissionController/res/values-mn-v33/strings.xml index 8a8ee45627..7b7efed445 100644 --- a/PermissionController/res/values-mn-v33/strings.xml +++ b/PermissionController/res/values-mn-v33/strings.xml @@ -27,7 +27,8 @@ "Жагсаалт. %1$s. Үйлдэл шаардлагатай. %2$s" "Жагсаалтын зүйл. %1$s. %2$s" "%1$s. %2$s" - + "Бусад сэрэмжлүүлэг" + "{count,plural, =1{Дэлгээд дахин нэг анхааруулга харах}other{Дэлгээд дахин # анхааруулга харах}}" "Сэрэмжлүүлэг. %1$s. %2$s" diff --git a/PermissionController/res/values-mr-v33/strings.xml b/PermissionController/res/values-mr-v33/strings.xml index b7c5233bce..de72b24a59 100644 --- a/PermissionController/res/values-mr-v33/strings.xml +++ b/PermissionController/res/values-mr-v33/strings.xml @@ -27,7 +27,8 @@ "सूची. %1$s. कृती आवश्‍यक. %2$s" "सूची आयटम. %1$s. %2$s" "%1$s. %2$s" - + "आणखी सूचना" + "{count,plural, =1{विस्तार करा आणि आणखी एक सूचना पहा}other{विस्तार करा आणि आणखी # सूचना पहा}}" "इशारा. %1$s. %2$s" diff --git a/PermissionController/res/values-ms-v33/strings.xml b/PermissionController/res/values-ms-v33/strings.xml index f4bdcb11d8..03593ba4ac 100644 --- a/PermissionController/res/values-ms-v33/strings.xml +++ b/PermissionController/res/values-ms-v33/strings.xml @@ -27,7 +27,8 @@ "Senarai. %1$s. Tindakan diperlukan. %2$s" "Senaraikan item. %1$s. %2$s" "%1$s. %2$s" - + "Lagi makluman" + "{count,plural, =1{Kembangkan dan lihat satu makluman lagi}other{Kembangkan dan lihat # makluman lagi}}" "Amaran. %1$s. %2$s" diff --git a/PermissionController/res/values-my-v33/strings.xml b/PermissionController/res/values-my-v33/strings.xml index 98c5da04db..84fd16f28c 100644 --- a/PermissionController/res/values-my-v33/strings.xml +++ b/PermissionController/res/values-my-v33/strings.xml @@ -27,7 +27,8 @@ "စာရင်း။ %1$s။ လုပ်ဆောင်ချက် လိုအပ်သည်။ %2$s" "အကြောင်းအရာကို စာရင်းလုပ်နိုင်သည်။ %1$s%2$s" "%1$s%2$s" - + "နောက်ထပ် သတိပေးချက်များ" + "{count,plural, =1{ချဲ့ပြီး သတိပေးချက်နောက်တစ်ခု ကြည့်ရန်}other{ချဲ့ပြီး သတိပေးချက်နောက် # ခု ကြည့်ရန်}}" "သတိပေးချက်။ %1$s%2$s" diff --git a/PermissionController/res/values-nb-v33/strings.xml b/PermissionController/res/values-nb-v33/strings.xml index 3fd17433cf..b353d15231 100644 --- a/PermissionController/res/values-nb-v33/strings.xml +++ b/PermissionController/res/values-nb-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. Handlinger kreves. %2$s" "Listeelement. %1$s. %2$s" "%1$s. %2$s" - + "Flere varsler" + "{count,plural, =1{Dobbelttrykk for å se et varsel til}other{Dobbelttrykk for å se # varsler til}}" "Varsel. %1$s. %2$s" diff --git a/PermissionController/res/values-ne-v33/strings.xml b/PermissionController/res/values-ne-v33/strings.xml index 981dbf1eca..a024428e42 100644 --- a/PermissionController/res/values-ne-v33/strings.xml +++ b/PermissionController/res/values-ne-v33/strings.xml @@ -27,7 +27,8 @@ "सूची। %1$s। कारबाही गरिनु पर्छ। %2$s" "सूचीमा रहेको वस्तु। %1$s%2$s" "%1$s%2$s" - + "थप अलर्टहरू" + "{count,plural, =1{एक्स्पान्ड गरेर थप एउटा अलर्ट हेर्नुहोस्}other{एक्स्पान्ड गरेर थप # वटा अलर्ट हेर्नुहोस्}}" "अलर्ट। %1$s%2$s" diff --git a/PermissionController/res/values-nl-v33/strings.xml b/PermissionController/res/values-nl-v33/strings.xml index fa0e72b2ab..28420b2b1f 100644 --- a/PermissionController/res/values-nl-v33/strings.xml +++ b/PermissionController/res/values-nl-v33/strings.xml @@ -27,7 +27,8 @@ "Lijst. %1$s. Acties vereist. %2$s." "Lijstitem. %1$s. %2$s." "%1$s. %2$s" - + "Meer meldingen" + "{count,plural, =1{Uitvouwen en nog 1 melding bekijken}other{Uitvouwen en nog # meldingen bekijken}}" "Melding. %1$s. %2$s" diff --git a/PermissionController/res/values-or-v33/strings.xml b/PermissionController/res/values-or-v33/strings.xml index e6dd8caeab..be6e2cabcd 100644 --- a/PermissionController/res/values-or-v33/strings.xml +++ b/PermissionController/res/values-or-v33/strings.xml @@ -27,7 +27,8 @@ "ତାଲିକା। %1$s। ପଦକ୍ଷେପ ନେବା ଆବଶ୍ୟକ। %2$s" "ତାଲିକା ଆଇଟମ। %1$s%2$s" "%1$s%2$s" - + "ଅଧିକ ଆଲର୍ଟ" + "{count,plural, =1{ବିସ୍ତାର କରି ଆଉ ଗୋଟିଏ ଆଲର୍ଟ ଦେଖନ୍ତୁ}other{ବିସ୍ତାର କରି ଆଉ #ଟି ଆଲର୍ଟ ଦେଖନ୍ତୁ}}" "ଆଲର୍ଟ। %1$s%2$s" diff --git a/PermissionController/res/values-pa-v33/strings.xml b/PermissionController/res/values-pa-v33/strings.xml index fc5bf4e33c..0f741f7820 100644 --- a/PermissionController/res/values-pa-v33/strings.xml +++ b/PermissionController/res/values-pa-v33/strings.xml @@ -27,7 +27,8 @@ "ਸੂਚੀ। %1$s. ਕਾਰਵਾਈਆਂ ਦੀ ਲੋੜ ਹੈ। %2$s" "ਸੂਚੀ ਆਈਟਮ। %1$s. %2$s" "%1$s. %2$s" - + "ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ" + "{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}" "ਸੁਚੇਤਨਾ। %1$s. %2$s" diff --git a/PermissionController/res/values-pl-v33/strings.xml b/PermissionController/res/values-pl-v33/strings.xml index 9de94e5b52..2f5bc5a871 100644 --- a/PermissionController/res/values-pl-v33/strings.xml +++ b/PermissionController/res/values-pl-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Wymagane działanie. %2$s" "Pozycja na liście. %1$s. %2$s" "%1$s. %2$s" - + "Więcej alertów" + "{count,plural, =1{Rozwiń i zobacz jeszcze 1 alert}few{Rozwiń i zobacz jeszcze # alerty}many{Rozwiń i zobacz jeszcze # alertów}other{Rozwiń i zobacz jeszcze # alertu}}" "Alert. %1$s. %2$s" diff --git a/PermissionController/res/values-pt-rBR-v33/strings.xml b/PermissionController/res/values-pt-rBR-v33/strings.xml index f270475290..23b6a1a10c 100644 --- a/PermissionController/res/values-pt-rBR-v33/strings.xml +++ b/PermissionController/res/values-pt-rBR-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Ações necessárias. %2$s" "Item da lista. %1$s. %2$s" "%1$s. %2$s" - + "Mais alertas" + "{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}" "Alerta. %1$s. %2$s" diff --git a/PermissionController/res/values-pt-rPT-v33/strings.xml b/PermissionController/res/values-pt-rPT-v33/strings.xml index 58ecb94969..31748012b6 100644 --- a/PermissionController/res/values-pt-rPT-v33/strings.xml +++ b/PermissionController/res/values-pt-rPT-v33/strings.xml @@ -27,8 +27,8 @@ "Lista. %1$s. Ações necessárias. %2$s" "Item de lista. %1$s. %2$s" "%1$s. %2$s" - - + "Mais alertas" + "Alertas ignorados" "{count,plural, =1{Expandir e ver mais um alerta}many{Expandir e ver mais # alertas}other{Expandir e ver mais # alertas}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-pt-v33/strings.xml b/PermissionController/res/values-pt-v33/strings.xml index f270475290..23b6a1a10c 100644 --- a/PermissionController/res/values-pt-v33/strings.xml +++ b/PermissionController/res/values-pt-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Ações necessárias. %2$s" "Item da lista. %1$s. %2$s" "%1$s. %2$s" - + "Mais alertas" + "{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}" "Alerta. %1$s. %2$s" diff --git a/PermissionController/res/values-ro-v33/strings.xml b/PermissionController/res/values-ro-v33/strings.xml index ed1565ba1f..03d7db92a4 100644 --- a/PermissionController/res/values-ro-v33/strings.xml +++ b/PermissionController/res/values-ro-v33/strings.xml @@ -27,7 +27,8 @@ "Listă. %1$s. Acțiuni necesare. %2$s" "Articol din listă. %1$s. %2$s" "%1$s. %2$s" - + "Mai multe alerte" + "{count,plural, =1{Extinde și mai vezi o alertă}few{Extinde și mai vezi # alerte}other{Extinde și mai vezi # de alerte}}" "Alertă. %1$s. %2$s" diff --git a/PermissionController/res/values-ru-v33/strings.xml b/PermissionController/res/values-ru-v33/strings.xml index 4858160a16..4d32c2c01c 100644 --- a/PermissionController/res/values-ru-v33/strings.xml +++ b/PermissionController/res/values-ru-v33/strings.xml @@ -27,7 +27,8 @@ "Список. %1$s. Требуется действие. %2$s" "Пункт списка. %1$s. %2$s" "%1$s, %2$s" - + "Другие оповещения" + "{count,plural, =1{Разверните, чтобы увидеть ещё одно оповещение}one{Разверните, чтобы увидеть ещё # оповещение}few{Разверните, чтобы увидеть ещё # оповещения}many{Разверните, чтобы увидеть ещё # оповещений}other{Разверните, чтобы увидеть ещё # оповещения}}" "Оповещение: %1$s. %2$s" diff --git a/PermissionController/res/values-si-v33/strings.xml b/PermissionController/res/values-si-v33/strings.xml index 0791c0541e..8ae709cf34 100644 --- a/PermissionController/res/values-si-v33/strings.xml +++ b/PermissionController/res/values-si-v33/strings.xml @@ -27,7 +27,8 @@ "ලැයිස්තුව. %1$s. ක්‍රියාමාර්ග අවශ්‍යයි. %2$s" "ලැයිස්තු අයිතමය. %1$s. %2$s" "%1$s. %2$s" - + "තවත් ඇඟවීම්" + "{count,plural, =1{පුළුල් කර තවත් එක් ඇඟවීමක් බලන්න}one{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}other{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}}" "ඇඟවීම. %1$s. %2$s" diff --git a/PermissionController/res/values-sk-v33/strings.xml b/PermissionController/res/values-sk-v33/strings.xml index ab31cdc1ea..d9c2e2372e 100644 --- a/PermissionController/res/values-sk-v33/strings.xml +++ b/PermissionController/res/values-sk-v33/strings.xml @@ -27,7 +27,8 @@ "Zoznam. %1$s. Vyžaduje sa akcia. %2$s." "Položka zoznamu. %1$s. %2$s." "%1$s. %2$s" - + "Ďalšie upozornenia" + "{count,plural, =1{Po rozbalení sa zobrazí jedno ďalšie upozornenie}few{Po rozbalení sa zobrazia # ďalšie upozornenia}many{Expand and see # more alerts}other{Po rozbalení sa zobrazí # ďalších upozornení}}" "Upozornenie. %1$s. %2$s" diff --git a/PermissionController/res/values-sl-v33/strings.xml b/PermissionController/res/values-sl-v33/strings.xml index 130a00ed36..e7b2201dba 100644 --- a/PermissionController/res/values-sl-v33/strings.xml +++ b/PermissionController/res/values-sl-v33/strings.xml @@ -27,7 +27,8 @@ "Seznam. %1$s. Potrebno je ukrepanje. %2$s" "Element na seznamu. %1$s. %2$s" "%1$s. %2$s" - + "Več opozoril" + "{count,plural, =1{Razširi in prikaži še eno opozorilo}one{Razširi in prikaži še # opozorilo}two{Razširi in prikaži še # opozorili}few{Razširi in prikaži še # opozorila}other{Razširi in prikaži še # opozoril}}" "Opozorilo. %1$s. %2$s" diff --git a/PermissionController/res/values-sq-v33/strings.xml b/PermissionController/res/values-sq-v33/strings.xml index 45927c9441..bf267319cf 100644 --- a/PermissionController/res/values-sq-v33/strings.xml +++ b/PermissionController/res/values-sq-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Nevojiten veprime. %2$s" "Artikulli i listës. %1$s. %2$s" "%1$s. %2$s" - + "Sinjalizime të tjera" + "{count,plural, =1{Zgjero dhe shiko një sinjalizim tjetër}other{Zgjero dhe shiko # sinjalizime të tjera}}" "Sinjalizim. %1$s. %2$s" diff --git a/PermissionController/res/values-sr-v33/strings.xml b/PermissionController/res/values-sr-v33/strings.xml index 67fb03c25f..4ae2f1acce 100644 --- a/PermissionController/res/values-sr-v33/strings.xml +++ b/PermissionController/res/values-sr-v33/strings.xml @@ -27,7 +27,8 @@ "Листа: %1$s. Треба да реагујете. %2$s" "Ставка листе. %1$s. %2$s" "%1$s. %2$s" - + "Још обавештења" + "{count,plural, =1{Проширите и видите још једно обавештење}one{Проширите и видите још # обавештење}few{Проширите и видите још # обавештења}other{Проширите и видите још # обавештења}}" "Обавештење. %1$s. %2$s" diff --git a/PermissionController/res/values-sv-v33/strings.xml b/PermissionController/res/values-sv-v33/strings.xml index 408c889edd..c612191bca 100644 --- a/PermissionController/res/values-sv-v33/strings.xml +++ b/PermissionController/res/values-sv-v33/strings.xml @@ -27,7 +27,8 @@ "Lista. %1$s. Åtgärder krävs. %2$s" "Post i listan. %1$s. %2$s" "%1$s. %2$s" - + "Fler varningar" + "{count,plural, =1{Utöka för att visa en varning till}other{Utöka för att visa # varningar till}}" "Varning. %1$s. %2$s" diff --git a/PermissionController/res/values-sw-v33/strings.xml b/PermissionController/res/values-sw-v33/strings.xml index a0bf405c30..c0f8d82490 100644 --- a/PermissionController/res/values-sw-v33/strings.xml +++ b/PermissionController/res/values-sw-v33/strings.xml @@ -27,7 +27,8 @@ "Orodha. %1$s. Unahitaji kuchukua hatua. %2$s" "Kipengee cha orodha. %1$s. %2$s" "%1$s. %2$s" - + "Arifa zaidi" + "{count,plural, =1{Panua na uangalie arifa moja zaidi}other{Panua na uangalie arifa # zaidi}}" "Arifa. %1$s. %2$s" diff --git a/PermissionController/res/values-ta-v33/strings.xml b/PermissionController/res/values-ta-v33/strings.xml index 9ee5c46af5..3c3ddec5a6 100644 --- a/PermissionController/res/values-ta-v33/strings.xml +++ b/PermissionController/res/values-ta-v33/strings.xml @@ -27,7 +27,8 @@ "பட்டியல். %1$s. நடவடிக்கைகள் தேவை. %2$s" "பட்டியல் ஆவணம். %1$s. %2$s" "%1$s. %2$s" - + "கூடுதல் விழிப்பூட்டல்கள்" + "{count,plural, =1{விரிவாக்கி மேலும் ஒரு விழிப்பூட்டலைப் பாருங்கள்}other{விரிவாக்கி மேலும் # விழிப்பூட்டல்களைப் பாருங்கள்}}" "விழிப்பூட்டல். %1$s. %2$s" diff --git a/PermissionController/res/values-te-v33/strings.xml b/PermissionController/res/values-te-v33/strings.xml index 3057f69004..45ce9fadc0 100644 --- a/PermissionController/res/values-te-v33/strings.xml +++ b/PermissionController/res/values-te-v33/strings.xml @@ -27,7 +27,8 @@ "లిస్ట్. %1$s. మీ చర్య అవసరం. %2$s" "లిస్ట్ ఐటెమ్. %1$s. %2$s" "%1$s. %2$s" - + "మరిన్ని అలర్ట్‌లు" + "{count,plural, =1{విస్తరించి, మరొక అలర్ట్‌ను చూడండి}other{విస్తరించి, మరో # అలర్ట్‌లను చూడండి}}" "అలర్ట్. %1$s. %2$s" diff --git a/PermissionController/res/values-th-v33/strings.xml b/PermissionController/res/values-th-v33/strings.xml index a776a20429..efbf933b31 100644 --- a/PermissionController/res/values-th-v33/strings.xml +++ b/PermissionController/res/values-th-v33/strings.xml @@ -27,7 +27,8 @@ "รายการ %1$s จำเป็นต้องดำเนินการ %2$s" "รายการย่อย %1$s %2$s" "%1$s %2$s" - + "การแจ้งเตือนเพิ่มเติม" + "{count,plural, =1{ขยายและดูการแจ้งเตือนอีก 1 รายการ}other{ขยายและดูการแจ้งเตือนอีก # รายการ}}" "การแจ้งเตือน %1$s %2$s" diff --git a/PermissionController/res/values-tl-v33/strings.xml b/PermissionController/res/values-tl-v33/strings.xml index db045b3930..1054311298 100644 --- a/PermissionController/res/values-tl-v33/strings.xml +++ b/PermissionController/res/values-tl-v33/strings.xml @@ -27,7 +27,8 @@ "Listahan. %1$s. Mga kailangang pagkilos. %2$s" "Item sa listahan. %1$s. %2$s" "%1$s. %2$s" - + "Higit pang alerto" + "{count,plural, =1{I-expand at makakita ng isa pang alerto}one{I-expand at makakita ng # pang alerto}other{I-expand at makakita ng # pang alerto}}" "Alerto. %1$s. %2$s" diff --git a/PermissionController/res/values-tr-v33/strings.xml b/PermissionController/res/values-tr-v33/strings.xml index d0bd721f56..ebbac5891e 100644 --- a/PermissionController/res/values-tr-v33/strings.xml +++ b/PermissionController/res/values-tr-v33/strings.xml @@ -27,7 +27,8 @@ "Liste. %1$s. İşlem gerekiyor. %2$s" "Liste öğesi. %1$s. %2$s" "%1$s. %2$s" - + "Daha fazla uyarı" + "{count,plural, =1{Genişletip bir uyarıyı daha görün}other{Genişletip # uyarıyı daha görün}}" "Uyarı. %1$s. %2$s" diff --git a/PermissionController/res/values-uk-v33/strings.xml b/PermissionController/res/values-uk-v33/strings.xml index 60832d36f6..baa60eaca1 100644 --- a/PermissionController/res/values-uk-v33/strings.xml +++ b/PermissionController/res/values-uk-v33/strings.xml @@ -27,7 +27,8 @@ "Список. %1$s. Потрібно виконати дії. %2$s" "Пункт списку. %1$s. %2$s" "%1$s. %2$s" - + "Більше сповіщень" + "{count,plural, =1{Розгорніть і перегляньте ще одне сповіщення}one{Розгорніть і перегляньте ще # сповіщення}few{Розгорніть і перегляньте ще # сповіщення}many{Розгорніть і перегляньте ще # сповіщень}other{Розгорніть і перегляньте ще # сповіщення}}" "Сповіщення. %1$s. %2$s" diff --git a/PermissionController/res/values-ur-v33/strings.xml b/PermissionController/res/values-ur-v33/strings.xml index 64e14ed542..e77759f67c 100644 --- a/PermissionController/res/values-ur-v33/strings.xml +++ b/PermissionController/res/values-ur-v33/strings.xml @@ -27,7 +27,8 @@ "فہرست۔ %1$s۔ کاروائی درکار ہے۔ %2$s" "فہرست آئٹم۔ %1$s۔ %2$s" "%1$s۔ %2$s" - + "مزید الرٹس" + "{count,plural, =1{پھیلائیں اور ایک اور الرٹ دیکھیں}other{پھیلائیں اور # مزید الرٹس دیکھیں}}" "الرٹ۔ %1$s۔ %2$s" diff --git a/PermissionController/res/values-uz-v33/strings.xml b/PermissionController/res/values-uz-v33/strings.xml index 2db9c30905..5801a3a146 100644 --- a/PermissionController/res/values-uz-v33/strings.xml +++ b/PermissionController/res/values-uz-v33/strings.xml @@ -27,7 +27,8 @@ "Roʻyxat. %1$s. Amallar bajarish zarur. %2$s" "Roʻyxat bandi. %1$s. %2$s" "%1$s. %2$s" - + "Boshqa ogohlantirishlar" + "{count,plural, =1{Kengaytirish va yana bitta ogohlantirishni ochish}other{Kengaytirish va yana # ta ogohlantirishni ochish}}" "Ogohlantirish. %1$s. %2$s" diff --git a/PermissionController/res/values-vi-v33/strings.xml b/PermissionController/res/values-vi-v33/strings.xml index b6bc1736eb..1904c0f728 100644 --- a/PermissionController/res/values-vi-v33/strings.xml +++ b/PermissionController/res/values-vi-v33/strings.xml @@ -27,7 +27,8 @@ "Danh sách. %1$s. Việc cần làm. %2$s" "Mục trong danh sách. %1$s. %2$s" "%1$s. %2$s" - + "Cảnh báo khác" + "{count,plural, =1{Mở rộng và xem một cảnh báo khác}other{Mở rộng và xem # cảnh báo khác}}" "Cảnh báo. %1$s. %2$s" diff --git a/PermissionController/res/values-zh-rCN-v33/strings.xml b/PermissionController/res/values-zh-rCN-v33/strings.xml index 613a7eebbe..c5deeb0d6c 100644 --- a/PermissionController/res/values-zh-rCN-v33/strings.xml +++ b/PermissionController/res/values-zh-rCN-v33/strings.xml @@ -27,7 +27,8 @@ "列表。%1$s。需要采取行动。%2$s" "列表项。%1$s%2$s" "%1$s%2$s" - + "更多提醒" + "{count,plural, =1{展开并查看另外一项提醒}other{展开并查看另外 # 项提醒}}" "警报。%1$s%2$s" diff --git a/PermissionController/res/values-zh-rHK-v33/strings.xml b/PermissionController/res/values-zh-rHK-v33/strings.xml index a95f88ecb0..65892c5add 100644 --- a/PermissionController/res/values-zh-rHK-v33/strings.xml +++ b/PermissionController/res/values-zh-rHK-v33/strings.xml @@ -27,7 +27,8 @@ "清單。%1$s。需採取的行動。%2$s" "清單項目。%1$s%2$s" "%1$s%2$s" - + "更多警示" + "{count,plural, =1{展開即可查看多一個警示}other{展開即可查看多 # 個警示}}" "警示。%1$s%2$s" diff --git a/PermissionController/res/values-zh-rTW-v33/strings.xml b/PermissionController/res/values-zh-rTW-v33/strings.xml index 2f72d809a1..0261867165 100644 --- a/PermissionController/res/values-zh-rTW-v33/strings.xml +++ b/PermissionController/res/values-zh-rTW-v33/strings.xml @@ -27,7 +27,8 @@ "清單。%1$s。敬請採取行動。%2$s" "清單項目。%1$s%2$s" "%1$s%2$s" - + "更多警示" + "{count,plural, =1{展開並查看另外 1 則快訊}other{展開並查看另外 # 則快訊}}" "警示。%1$s%2$s" diff --git a/PermissionController/res/values-zu-v33/strings.xml b/PermissionController/res/values-zu-v33/strings.xml index cdc3a14cc7..0fa4465b49 100644 --- a/PermissionController/res/values-zu-v33/strings.xml +++ b/PermissionController/res/values-zu-v33/strings.xml @@ -27,7 +27,8 @@ "Uhlu. %1$s. Izenzo ezidingekayo. %2$s" "Faka into ohlwini %1$s. %2$s" "%1$s. %2$s" - + "Ezinye izexwayiso" + "{count,plural, =1{Nweba futhi ubone esinye isexwayiso}one{Nweba futhi ubone ezinye izexwayiso ezingu-#}other{Nweba futhi ubone ezinye izexwayiso ezingu-#}}" "Isexwayiso. %1$s. %2$s" -- GitLab From f313160a8cd609d1806dd09bbb31315f881be15c Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 14 Feb 2023 16:10:30 -0800 Subject: [PATCH 004/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I30d85a570e5e3e107b435b794ee57da40cf6acc9 --- SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-pt/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml index 7e9a66ef9f..40bd68add9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml @@ -17,7 +17,7 @@ - "Verificando" + "Verifican&#173;do" "Verificando configurações do dispositivo…" "Tudo certo" "Nenhum problema encontrado" diff --git a/SafetyCenter/Resources/shared_res/values-pt/strings.xml b/SafetyCenter/Resources/shared_res/values-pt/strings.xml index 7e9a66ef9f..40bd68add9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt/strings.xml @@ -17,7 +17,7 @@ - "Verificando" + "Verifican&#173;do" "Verificando configurações do dispositivo…" "Tudo certo" "Nenhum problema encontrado" -- GitLab From fa7f6949a96e3753448187efae6c9a9499c406a8 Mon Sep 17 00:00:00 2001 From: Shriya Gupta Date: Sat, 18 Feb 2023 08:30:51 +0000 Subject: [PATCH 005/577] Add codename check for VanillaIceCream Since the new VIC codename has been added in ag/21274507, we need to have a codename check for V to ensure that T tests are not run on higher versions. Once the U version is no longer in pre-release, both of these checks can be removed. Tracking it in b/258228790. Bug: 269792738 Test: atest CtsSafetyCenterTestCases SafetyCenterFunctionalTestCases Change-Id: I728e8dd66804f43d2b5fefe4fd6cd00ed9d943f4 (cherry picked from commit 2c77b77e9fd19db8a3b2f1f7b57a8a1739648450) --- .../safetycenter/cts/SafetyCenterIssueTest.kt | 4 ++++ .../safetycenter/cts/SafetyCenterManagerTest.kt | 1 + .../safetycenter/cts/SafetySourceIssueTest.kt | 13 +++++++++++++ .../functional/SafetyCenterManagerTest.kt | 1 + .../functional/ui/SafetyCenterActivityTest.kt | 2 ++ 5 files changed, 21 insertions(+) diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt index 14bfaae73d..8d44f27363 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt @@ -250,6 +250,7 @@ class SafetyCenterIssueTest { fun getGroupId_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val issue = SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") .build() @@ -274,6 +275,7 @@ class SafetyCenterIssueTest { fun setGroupId_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val exception = assertFailsWith(UnsupportedOperationException::class) { @@ -374,6 +376,7 @@ class SafetyCenterIssueTest { fun action_getConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") assertFailsWith(UnsupportedOperationException::class) { action1.confirmationDialogDetails } } @@ -383,6 +386,7 @@ class SafetyCenterIssueTest { fun action_setConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") assertFailsWith(UnsupportedOperationException::class) { SafetyCenterIssue.Action.Builder("action_id", "Action label", pendingIntent1) .setConfirmationDialogDetails( diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 5a33b33776..8c771770b4 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -1604,6 +1604,7 @@ class SafetyCenterManagerTest { fun refreshSafetySources_versionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) val exception = diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt index cf9f37245e..4749c36167 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt @@ -122,6 +122,7 @@ class SafetySourceIssueTest { fun action_getConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val action = Action.Builder("action_id", "Action label", pendingIntent1).build() assertFailsWith(UnsupportedOperationException::class) { action.confirmationDialogDetails } @@ -132,6 +133,7 @@ class SafetySourceIssueTest { fun action_setConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") assertFailsWith(UnsupportedOperationException::class) { Action.Builder("action_id", "Action label", pendingIntent1) .setConfirmationDialogDetails( @@ -673,6 +675,7 @@ class SafetySourceIssueTest { fun getAttributionTitle_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -692,6 +695,7 @@ class SafetySourceIssueTest { fun setAttributionTitle_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -919,6 +923,7 @@ class SafetySourceIssueTest { fun getDeduplicationId_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -938,6 +943,7 @@ class SafetySourceIssueTest { fun setDeduplicationId_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1017,6 +1023,7 @@ class SafetySourceIssueTest { fun getCustomNotification_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1038,6 +1045,7 @@ class SafetySourceIssueTest { fun setCustomNotification_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1094,6 +1102,7 @@ class SafetySourceIssueTest { fun getNotificationBehavior_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1135,6 +1144,7 @@ class SafetySourceIssueTest { fun setNotificationBehavior_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1191,6 +1201,7 @@ class SafetySourceIssueTest { fun getIssueActionability_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1232,6 +1243,7 @@ class SafetySourceIssueTest { fun setIssueActionability_withVersionLessThanU_throwsUnsupportedOperationException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1356,6 +1368,7 @@ class SafetySourceIssueTest { fun build_withUIssueCategoryValueOnT_throwsIllegalArgumentException() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val builder = SafetySourceIssue.Builder( "Issue id", diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt index 1f5cb72c6a..cbb34680e3 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -949,6 +949,7 @@ class SafetyCenterManagerTest { fun getSafetyCenterData_attributionNotSetBySourceOnTiramisu_returnsNullAttributionTitle() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") + assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.informationWithIssue) diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 75b74d36bb..3e476f5c41 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -927,6 +927,7 @@ class SafetyCenterActivityTest { fun issueCard_attributionNotSetBySourceOnTiramisu_doesNotDisplayAttributionTitle() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(CODENAME == "UpsideDownCake") + assumeFalse(CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) val data = safetySourceTestData.recommendationWithGeneralIssue @@ -1412,6 +1413,7 @@ class SafetyCenterActivityTest { fun launchSafetyCenter_enableSubpagesFlagOnT_stillShowsExpandAndCollapseEntries() { // TODO(b/258228790): Remove after U is no longer in pre-release assumeFalse(CODENAME == "UpsideDownCake") + assumeFalse(CODENAME == "VanillaIceCream") SafetyCenterFlags.showSubpages = true val sourceTestData = safetySourceTestData.information -- GitLab From cf41023250eeac6f243d30601f402fd6f67b86db Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 21 Feb 2023 05:26:15 -0800 Subject: [PATCH 006/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ib482326852cbc2bf4a8a4e1c6d3ab1abf99b0d68 --- .../res/values-af-car/strings.xml | 21 ++++++ .../res/values-af-v33/strings.xml | 3 +- .../res/values-af-v34/strings.xml | 26 ++++++++ .../res/values-af/strings.xml | 41 +++++++++++- .../res/values-am-car/strings.xml | 21 ++++++ .../res/values-am-v33/strings.xml | 3 +- .../res/values-am-v34/strings.xml | 26 ++++++++ .../res/values-am/strings.xml | 41 +++++++++++- .../res/values-ar-car/strings.xml | 21 ++++++ .../res/values-ar-v33/strings.xml | 3 +- .../res/values-ar-v34/strings.xml | 26 ++++++++ .../res/values-ar/strings.xml | 41 +++++++++++- .../res/values-as-v33/strings.xml | 3 +- .../res/values-as/strings.xml | 65 ++++++++++++++++++- .../res/values-az-car/strings.xml | 21 ++++++ .../res/values-az-v33/strings.xml | 3 +- .../res/values-az-v34/strings.xml | 26 ++++++++ .../res/values-az/strings.xml | 41 +++++++++++- .../res/values-b+sr+Latn-car/strings.xml | 21 ++++++ .../res/values-b+sr+Latn-v33/strings.xml | 3 +- .../res/values-b+sr+Latn-v34/strings.xml | 25 +++++++ .../res/values-b+sr+Latn/strings.xml | 33 +++++++++- .../res/values-be-car/strings.xml | 21 ++++++ .../res/values-be-v33/strings.xml | 3 +- .../res/values-be-v34/strings.xml | 26 ++++++++ .../res/values-be/strings.xml | 41 +++++++++++- .../res/values-bg-car/strings.xml | 21 ++++++ .../res/values-bg-v33/strings.xml | 3 +- .../res/values-bg-v34/strings.xml | 26 ++++++++ .../res/values-bg/strings.xml | 41 +++++++++++- .../res/values-bn-car/strings.xml | 21 ++++++ .../res/values-bn-v33/strings.xml | 6 +- .../res/values-bn-v34/strings.xml | 26 ++++++++ .../res/values-bn/strings.xml | 41 +++++++++++- .../res/values-bs-car/strings.xml | 21 ++++++ .../res/values-bs-v34/strings.xml | 25 +++++++ .../res/values-bs/strings.xml | 33 +++++++++- .../res/values-ca-car/strings.xml | 21 ++++++ .../res/values-ca-v33/strings.xml | 3 +- .../res/values-ca-v34/strings.xml | 26 ++++++++ .../res/values-ca/strings.xml | 41 +++++++++++- .../res/values-cs-v33/strings.xml | 3 +- .../res/values-cs/strings.xml | 65 ++++++++++++++++++- .../res/values-da-car/strings.xml | 21 ++++++ .../res/values-da-v33/strings.xml | 3 +- .../res/values-da-v34/strings.xml | 26 ++++++++ .../res/values-da/strings.xml | 41 +++++++++++- .../res/values-de-car/strings.xml | 21 ++++++ .../res/values-de-v33/strings.xml | 3 +- .../res/values-de-v34/strings.xml | 26 ++++++++ .../res/values-de/strings.xml | 41 +++++++++++- .../res/values-el-v33/strings.xml | 3 +- .../res/values-el/strings.xml | 65 ++++++++++++++++++- .../res/values-en-rAU-car/strings.xml | 21 ++++++ .../res/values-en-rAU-v34/strings.xml | 25 +++++++ .../res/values-en-rAU/strings.xml | 33 +++++++++- .../res/values-en-rCA-car/strings.xml | 21 ++++++ .../res/values-en-rCA-v34/strings.xml | 25 +++++++ .../res/values-en-rCA/strings.xml | 33 +++++++++- .../res/values-en-rGB-car/strings.xml | 21 ++++++ .../res/values-en-rGB-v34/strings.xml | 25 +++++++ .../res/values-en-rGB/strings.xml | 33 +++++++++- .../res/values-en-rIN-car/strings.xml | 21 ++++++ .../res/values-en-rIN-v34/strings.xml | 25 +++++++ .../res/values-en-rIN/strings.xml | 33 +++++++++- .../res/values-en-rXC-car/strings.xml | 21 ++++++ .../res/values-en-rXC-v34/strings.xml | 25 +++++++ .../res/values-en-rXC/strings.xml | 33 +++++++++- .../res/values-es-car/strings.xml | 21 ++++++ .../res/values-es-rUS-v33/strings.xml | 3 +- .../res/values-es-rUS/strings.xml | 65 ++++++++++++++++++- .../res/values-es-v33/strings.xml | 3 +- .../res/values-es-v34/strings.xml | 26 ++++++++ .../res/values-es/strings.xml | 41 +++++++++++- .../res/values-et-car/strings.xml | 21 ++++++ .../res/values-et-v33/strings.xml | 3 +- .../res/values-et-v34/strings.xml | 26 ++++++++ .../res/values-et/strings.xml | 41 +++++++++++- .../res/values-eu-car/strings.xml | 21 ++++++ .../res/values-eu-v33/strings.xml | 3 +- .../res/values-eu-v34/strings.xml | 26 ++++++++ .../res/values-eu/strings.xml | 41 +++++++++++- .../res/values-fa-car/strings.xml | 21 ++++++ .../res/values-fa-v33/strings.xml | 3 +- .../res/values-fa-v34/strings.xml | 26 ++++++++ .../res/values-fa/strings.xml | 41 +++++++++++- .../res/values-fi-car/strings.xml | 21 ++++++ .../res/values-fi-v33/strings.xml | 3 +- .../res/values-fi-v34/strings.xml | 26 ++++++++ .../res/values-fi/strings.xml | 41 +++++++++++- .../res/values-fr-rCA-v33/strings.xml | 3 +- .../res/values-fr-rCA/strings.xml | 65 ++++++++++++++++++- .../res/values-fr-v33/strings.xml | 3 +- .../res/values-fr/strings.xml | 65 ++++++++++++++++++- .../res/values-gl-v33/strings.xml | 3 +- .../res/values-gl/strings.xml | 65 ++++++++++++++++++- .../res/values-gu-car/strings.xml | 21 ++++++ .../res/values-gu-v33/strings.xml | 3 +- .../res/values-gu-v34/strings.xml | 26 ++++++++ .../res/values-gu/strings.xml | 41 +++++++++++- .../res/values-hi-car/strings.xml | 21 ++++++ .../res/values-hi-v33/strings.xml | 3 +- .../res/values-hi-v34/strings.xml | 26 ++++++++ .../res/values-hi/strings.xml | 41 +++++++++++- .../res/values-hr-car/strings.xml | 21 ++++++ .../res/values-hr-v34/strings.xml | 25 +++++++ .../res/values-hr/strings.xml | 33 +++++++++- .../res/values-hu-car/strings.xml | 21 ++++++ .../res/values-hu-v33/strings.xml | 3 +- .../res/values-hu-v34/strings.xml | 26 ++++++++ .../res/values-hu/strings.xml | 41 +++++++++++- .../res/values-hy-v33/strings.xml | 3 +- .../res/values-hy/strings.xml | 65 ++++++++++++++++++- .../res/values-in-car/strings.xml | 21 ++++++ .../res/values-in-v33/strings.xml | 3 +- .../res/values-in-v34/strings.xml | 26 ++++++++ .../res/values-in/strings.xml | 41 +++++++++++- .../res/values-is-car/strings.xml | 21 ++++++ .../res/values-is-v33/strings.xml | 3 +- .../res/values-is-v34/strings.xml | 26 ++++++++ .../res/values-is/strings.xml | 41 +++++++++++- .../res/values-it-car/strings.xml | 21 ++++++ .../res/values-it-v33/strings.xml | 3 +- .../res/values-it-v34/strings.xml | 25 +++++++ .../res/values-it/strings.xml | 33 +++++++++- .../res/values-iw-car/strings.xml | 21 ++++++ .../res/values-iw-v33/strings.xml | 3 +- .../res/values-iw-v34/strings.xml | 26 ++++++++ .../res/values-iw/strings.xml | 41 +++++++++++- .../res/values-ja-car/strings.xml | 21 ++++++ .../res/values-ja-v33/strings.xml | 3 +- .../res/values-ja-v34/strings.xml | 26 ++++++++ .../res/values-ja/strings.xml | 41 +++++++++++- .../res/values-ka-v33/strings.xml | 3 +- .../res/values-ka/strings.xml | 65 ++++++++++++++++++- .../res/values-kk-v33/strings.xml | 3 +- .../res/values-kk/strings.xml | 65 ++++++++++++++++++- .../res/values-km-v33/strings.xml | 3 +- .../res/values-km/strings.xml | 65 ++++++++++++++++++- .../res/values-kn-car/strings.xml | 21 ++++++ .../res/values-kn-v33/strings.xml | 3 +- .../res/values-kn-v34/strings.xml | 26 ++++++++ .../res/values-kn/strings.xml | 41 +++++++++++- .../res/values-ko-car/strings.xml | 21 ++++++ .../res/values-ko-v33/strings.xml | 3 +- .../res/values-ko-v34/strings.xml | 26 ++++++++ .../res/values-ko/strings.xml | 41 +++++++++++- .../res/values-ky-car/strings.xml | 21 ++++++ .../res/values-ky-v33/strings.xml | 3 +- .../res/values-ky-v34/strings.xml | 26 ++++++++ .../res/values-ky/strings.xml | 41 +++++++++++- .../res/values-lo-car/strings.xml | 21 ++++++ .../res/values-lo-v33/strings.xml | 3 +- .../res/values-lo-v34/strings.xml | 26 ++++++++ .../res/values-lo/strings.xml | 41 +++++++++++- .../res/values-lt-car/strings.xml | 21 ++++++ .../res/values-lt-v33/strings.xml | 3 +- .../res/values-lt-v34/strings.xml | 26 ++++++++ .../res/values-lt/strings.xml | 41 +++++++++++- .../res/values-lv-car/strings.xml | 21 ++++++ .../res/values-lv-v33/strings.xml | 3 +- .../res/values-lv-v34/strings.xml | 26 ++++++++ .../res/values-lv/strings.xml | 41 +++++++++++- .../res/values-mk-v33/strings.xml | 3 +- .../res/values-mk/strings.xml | 65 ++++++++++++++++++- .../res/values-ml-car/strings.xml | 21 ++++++ .../res/values-ml-v33/strings.xml | 3 +- .../res/values-ml-v34/strings.xml | 25 +++++++ .../res/values-ml/strings.xml | 33 +++++++++- .../res/values-mn-car/strings.xml | 21 ++++++ .../res/values-mn-v33/strings.xml | 3 +- .../res/values-mn-v34/strings.xml | 26 ++++++++ .../res/values-mn/strings.xml | 41 +++++++++++- .../res/values-mr-car/strings.xml | 21 ++++++ .../res/values-mr-v33/strings.xml | 3 +- .../res/values-mr-v34/strings.xml | 26 ++++++++ .../res/values-mr/strings.xml | 41 +++++++++++- .../res/values-ms-car/strings.xml | 21 ++++++ .../res/values-ms-v33/strings.xml | 3 +- .../res/values-ms-v34/strings.xml | 26 ++++++++ .../res/values-ms/strings.xml | 41 +++++++++++- .../res/values-my-v33/strings.xml | 3 +- .../res/values-my/strings.xml | 65 ++++++++++++++++++- .../res/values-nb-car/strings.xml | 21 ++++++ .../res/values-nb-v33/strings.xml | 3 +- .../res/values-nb-v34/strings.xml | 26 ++++++++ .../res/values-nb/strings.xml | 41 +++++++++++- .../res/values-ne-car/strings.xml | 21 ++++++ .../res/values-ne-v33/strings.xml | 3 +- .../res/values-ne-v34/strings.xml | 26 ++++++++ .../res/values-ne/strings.xml | 41 +++++++++++- .../res/values-nl-v33/strings.xml | 3 +- .../res/values-nl/strings.xml | 65 ++++++++++++++++++- .../res/values-or-car/strings.xml | 21 ++++++ .../res/values-or-v33/strings.xml | 3 +- .../res/values-or-v34/strings.xml | 26 ++++++++ .../res/values-or/strings.xml | 41 +++++++++++- .../res/values-pa-car/strings.xml | 21 ++++++ .../res/values-pa-v33/strings.xml | 3 +- .../res/values-pa-v34/strings.xml | 26 ++++++++ .../res/values-pa/strings.xml | 41 +++++++++++- .../res/values-pl-v33/strings.xml | 3 +- .../res/values-pl/strings.xml | 65 ++++++++++++++++++- .../res/values-pt-rBR-v33/strings.xml | 3 +- .../res/values-pt-rBR/strings.xml | 65 ++++++++++++++++++- .../res/values-pt-rPT-car/strings.xml | 21 ++++++ .../res/values-pt-rPT-v34/strings.xml | 26 ++++++++ .../res/values-pt-rPT/strings.xml | 41 +++++++++++- .../res/values-pt-v33/strings.xml | 3 +- .../res/values-pt/strings.xml | 65 ++++++++++++++++++- .../res/values-ro-v33/strings.xml | 3 +- .../res/values-ro/strings.xml | 65 ++++++++++++++++++- .../res/values-ru-v33/strings.xml | 3 +- .../res/values-ru/strings.xml | 65 ++++++++++++++++++- .../res/values-si-v33/strings.xml | 3 +- .../res/values-si/strings.xml | 65 ++++++++++++++++++- .../res/values-sk-car/strings.xml | 21 ++++++ .../res/values-sk-v33/strings.xml | 3 +- .../res/values-sk-v34/strings.xml | 26 ++++++++ .../res/values-sk/strings.xml | 41 +++++++++++- .../res/values-sl-v33/strings.xml | 3 +- .../res/values-sl/strings.xml | 65 ++++++++++++++++++- .../res/values-sq-v33/strings.xml | 3 +- .../res/values-sq/strings.xml | 65 ++++++++++++++++++- .../res/values-sr-car/strings.xml | 21 ++++++ .../res/values-sr-v33/strings.xml | 3 +- .../res/values-sr-v34/strings.xml | 25 +++++++ .../res/values-sr/strings.xml | 33 +++++++++- .../res/values-sv-car/strings.xml | 21 ++++++ .../res/values-sv-v33/strings.xml | 3 +- .../res/values-sv-v34/strings.xml | 26 ++++++++ .../res/values-sv/strings.xml | 41 +++++++++++- .../res/values-sw-v33/strings.xml | 3 +- .../res/values-sw/strings.xml | 65 ++++++++++++++++++- .../res/values-ta-car/strings.xml | 21 ++++++ .../res/values-ta-v33/strings.xml | 3 +- .../res/values-ta-v34/strings.xml | 26 ++++++++ .../res/values-ta/strings.xml | 41 +++++++++++- .../res/values-te-car/strings.xml | 21 ++++++ .../res/values-te-v33/strings.xml | 3 +- .../res/values-te-v34/strings.xml | 26 ++++++++ .../res/values-te/strings.xml | 41 +++++++++++- .../res/values-th-car/strings.xml | 21 ++++++ .../res/values-th-v33/strings.xml | 3 +- .../res/values-th-v34/strings.xml | 25 +++++++ .../res/values-th/strings.xml | 33 +++++++++- .../res/values-tl-car/strings.xml | 21 ++++++ .../res/values-tl-v33/strings.xml | 3 +- .../res/values-tl-v34/strings.xml | 26 ++++++++ .../res/values-tl/strings.xml | 41 +++++++++++- .../res/values-tr-v33/strings.xml | 3 +- .../res/values-tr/strings.xml | 65 ++++++++++++++++++- .../res/values-uk-v33/strings.xml | 3 +- .../res/values-uk/strings.xml | 65 ++++++++++++++++++- .../res/values-ur-car/strings.xml | 21 ++++++ .../res/values-ur-v33/strings.xml | 3 +- .../res/values-ur-v34/strings.xml | 26 ++++++++ .../res/values-ur/strings.xml | 41 +++++++++++- .../res/values-uz-car/strings.xml | 21 ++++++ .../res/values-uz-v33/strings.xml | 3 +- .../res/values-uz-v34/strings.xml | 25 +++++++ .../res/values-uz/strings.xml | 33 +++++++++- .../res/values-vi-car/strings.xml | 21 ++++++ .../res/values-vi-v33/strings.xml | 3 +- .../res/values-vi-v34/strings.xml | 26 ++++++++ .../res/values-vi/strings.xml | 41 +++++++++++- .../res/values-zh-rCN-v33/strings.xml | 3 +- .../res/values-zh-rCN/strings.xml | 65 ++++++++++++++++++- .../res/values-zh-rHK-car/strings.xml | 21 ++++++ .../res/values-zh-rHK-v33/strings.xml | 3 +- .../res/values-zh-rHK-v34/strings.xml | 26 ++++++++ .../res/values-zh-rHK/strings.xml | 41 +++++++++++- .../res/values-zh-rTW-v33/strings.xml | 3 +- .../res/values-zh-rTW/strings.xml | 65 ++++++++++++++++++- .../res/values-zu-v33/strings.xml | 3 +- .../res/values-zu/strings.xml | 65 ++++++++++++++++++- 276 files changed, 6712 insertions(+), 241 deletions(-) create mode 100644 PermissionController/res/values-af-car/strings.xml create mode 100644 PermissionController/res/values-af-v34/strings.xml create mode 100644 PermissionController/res/values-am-car/strings.xml create mode 100644 PermissionController/res/values-am-v34/strings.xml create mode 100644 PermissionController/res/values-ar-car/strings.xml create mode 100644 PermissionController/res/values-ar-v34/strings.xml create mode 100644 PermissionController/res/values-az-car/strings.xml create mode 100644 PermissionController/res/values-az-v34/strings.xml create mode 100644 PermissionController/res/values-b+sr+Latn-car/strings.xml create mode 100644 PermissionController/res/values-b+sr+Latn-v34/strings.xml create mode 100644 PermissionController/res/values-be-car/strings.xml create mode 100644 PermissionController/res/values-be-v34/strings.xml create mode 100644 PermissionController/res/values-bg-car/strings.xml create mode 100644 PermissionController/res/values-bg-v34/strings.xml create mode 100644 PermissionController/res/values-bn-car/strings.xml create mode 100644 PermissionController/res/values-bn-v34/strings.xml create mode 100644 PermissionController/res/values-bs-car/strings.xml create mode 100644 PermissionController/res/values-bs-v34/strings.xml create mode 100644 PermissionController/res/values-ca-car/strings.xml create mode 100644 PermissionController/res/values-ca-v34/strings.xml create mode 100644 PermissionController/res/values-da-car/strings.xml create mode 100644 PermissionController/res/values-da-v34/strings.xml create mode 100644 PermissionController/res/values-de-car/strings.xml create mode 100644 PermissionController/res/values-de-v34/strings.xml create mode 100644 PermissionController/res/values-en-rAU-car/strings.xml create mode 100644 PermissionController/res/values-en-rAU-v34/strings.xml create mode 100644 PermissionController/res/values-en-rCA-car/strings.xml create mode 100644 PermissionController/res/values-en-rCA-v34/strings.xml create mode 100644 PermissionController/res/values-en-rGB-car/strings.xml create mode 100644 PermissionController/res/values-en-rGB-v34/strings.xml create mode 100644 PermissionController/res/values-en-rIN-car/strings.xml create mode 100644 PermissionController/res/values-en-rIN-v34/strings.xml create mode 100644 PermissionController/res/values-en-rXC-car/strings.xml create mode 100644 PermissionController/res/values-en-rXC-v34/strings.xml create mode 100644 PermissionController/res/values-es-car/strings.xml create mode 100644 PermissionController/res/values-es-v34/strings.xml create mode 100644 PermissionController/res/values-et-car/strings.xml create mode 100644 PermissionController/res/values-et-v34/strings.xml create mode 100644 PermissionController/res/values-eu-car/strings.xml create mode 100644 PermissionController/res/values-eu-v34/strings.xml create mode 100644 PermissionController/res/values-fa-car/strings.xml create mode 100644 PermissionController/res/values-fa-v34/strings.xml create mode 100644 PermissionController/res/values-fi-car/strings.xml create mode 100644 PermissionController/res/values-fi-v34/strings.xml create mode 100644 PermissionController/res/values-gu-car/strings.xml create mode 100644 PermissionController/res/values-gu-v34/strings.xml create mode 100644 PermissionController/res/values-hi-car/strings.xml create mode 100644 PermissionController/res/values-hi-v34/strings.xml create mode 100644 PermissionController/res/values-hr-car/strings.xml create mode 100644 PermissionController/res/values-hr-v34/strings.xml create mode 100644 PermissionController/res/values-hu-car/strings.xml create mode 100644 PermissionController/res/values-hu-v34/strings.xml create mode 100644 PermissionController/res/values-in-car/strings.xml create mode 100644 PermissionController/res/values-in-v34/strings.xml create mode 100644 PermissionController/res/values-is-car/strings.xml create mode 100644 PermissionController/res/values-is-v34/strings.xml create mode 100644 PermissionController/res/values-it-car/strings.xml create mode 100644 PermissionController/res/values-it-v34/strings.xml create mode 100644 PermissionController/res/values-iw-car/strings.xml create mode 100644 PermissionController/res/values-iw-v34/strings.xml create mode 100644 PermissionController/res/values-ja-car/strings.xml create mode 100644 PermissionController/res/values-ja-v34/strings.xml create mode 100644 PermissionController/res/values-kn-car/strings.xml create mode 100644 PermissionController/res/values-kn-v34/strings.xml create mode 100644 PermissionController/res/values-ko-car/strings.xml create mode 100644 PermissionController/res/values-ko-v34/strings.xml create mode 100644 PermissionController/res/values-ky-car/strings.xml create mode 100644 PermissionController/res/values-ky-v34/strings.xml create mode 100644 PermissionController/res/values-lo-car/strings.xml create mode 100644 PermissionController/res/values-lo-v34/strings.xml create mode 100644 PermissionController/res/values-lt-car/strings.xml create mode 100644 PermissionController/res/values-lt-v34/strings.xml create mode 100644 PermissionController/res/values-lv-car/strings.xml create mode 100644 PermissionController/res/values-lv-v34/strings.xml create mode 100644 PermissionController/res/values-ml-car/strings.xml create mode 100644 PermissionController/res/values-ml-v34/strings.xml create mode 100644 PermissionController/res/values-mn-car/strings.xml create mode 100644 PermissionController/res/values-mn-v34/strings.xml create mode 100644 PermissionController/res/values-mr-car/strings.xml create mode 100644 PermissionController/res/values-mr-v34/strings.xml create mode 100644 PermissionController/res/values-ms-car/strings.xml create mode 100644 PermissionController/res/values-ms-v34/strings.xml create mode 100644 PermissionController/res/values-nb-car/strings.xml create mode 100644 PermissionController/res/values-nb-v34/strings.xml create mode 100644 PermissionController/res/values-ne-car/strings.xml create mode 100644 PermissionController/res/values-ne-v34/strings.xml create mode 100644 PermissionController/res/values-or-car/strings.xml create mode 100644 PermissionController/res/values-or-v34/strings.xml create mode 100644 PermissionController/res/values-pa-car/strings.xml create mode 100644 PermissionController/res/values-pa-v34/strings.xml create mode 100644 PermissionController/res/values-pt-rPT-car/strings.xml create mode 100644 PermissionController/res/values-pt-rPT-v34/strings.xml create mode 100644 PermissionController/res/values-sk-car/strings.xml create mode 100644 PermissionController/res/values-sk-v34/strings.xml create mode 100644 PermissionController/res/values-sr-car/strings.xml create mode 100644 PermissionController/res/values-sr-v34/strings.xml create mode 100644 PermissionController/res/values-sv-car/strings.xml create mode 100644 PermissionController/res/values-sv-v34/strings.xml create mode 100644 PermissionController/res/values-ta-car/strings.xml create mode 100644 PermissionController/res/values-ta-v34/strings.xml create mode 100644 PermissionController/res/values-te-car/strings.xml create mode 100644 PermissionController/res/values-te-v34/strings.xml create mode 100644 PermissionController/res/values-th-car/strings.xml create mode 100644 PermissionController/res/values-th-v34/strings.xml create mode 100644 PermissionController/res/values-tl-car/strings.xml create mode 100644 PermissionController/res/values-tl-v34/strings.xml create mode 100644 PermissionController/res/values-ur-car/strings.xml create mode 100644 PermissionController/res/values-ur-v34/strings.xml create mode 100644 PermissionController/res/values-uz-car/strings.xml create mode 100644 PermissionController/res/values-uz-v34/strings.xml create mode 100644 PermissionController/res/values-vi-car/strings.xml create mode 100644 PermissionController/res/values-vi-v34/strings.xml create mode 100644 PermissionController/res/values-zh-rHK-car/strings.xml create mode 100644 PermissionController/res/values-zh-rHK-v34/strings.xml diff --git a/PermissionController/res/values-af-car/strings.xml b/PermissionController/res/values-af-car/strings.xml new file mode 100644 index 0000000000..e831e3e5a3 --- /dev/null +++ b/PermissionController/res/values-af-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "As ’n app ’n paar maande lank nie gebruik is nie:\n\n• Word toestemmings verwyder om jou data te beskerm\n• Word tydelike lêers verwyder om spasie beskikbaar te maak" + diff --git a/PermissionController/res/values-af-v33/strings.xml b/PermissionController/res/values-af-v33/strings.xml index 9dfdf713b7..34b62a0c7d 100644 --- a/PermissionController/res/values-af-v33/strings.xml +++ b/PermissionController/res/values-af-v33/strings.xml @@ -28,8 +28,7 @@ "Lysitem. %1$s. %2$s" "%1$s. %2$s" "Meer waarskuwings" - - + "Waarskuwings wat toegemaak is" "{count,plural, =1{Vou uit om nog een waarskuwing te sien}other{Vou uit om nog # waarskuwings te sien}}" "Waarskuwing. %1$s. %2$s" "Waarskuwing. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-af-v34/strings.xml b/PermissionController/res/values-af-v34/strings.xml new file mode 100644 index 0000000000..2ee4a4acbf --- /dev/null +++ b/PermissionController/res/values-af-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sekuriteit en privaatheid" + "Kontroles" + "Data" + + + "Apptoestemmings en databestuur" + diff --git a/PermissionController/res/values-af/strings.xml b/PermissionController/res/values-af/strings.xml index b9bfa7efa7..bd6a6584f2 100644 --- a/PermissionController/res/values-af/strings.xml +++ b/PermissionController/res/values-af/strings.xml @@ -591,5 +591,44 @@ "Wys ’n boodskap wanneer programme toegang het tot teks, prente of ander inhoud wat jy gekopieer het" "Wys wagwoorde" "Wys karakters kortliks terwyl jy tik" - "Hierdie app het verklaar dat dit dalk liggingdata met derde party sal deel" + "Hierdie app het verklaar dat dit jou liggingdata met derde partye kan deel" + + + "Waar datadelinginligting vandaan kom" + + + "Hierdie app kan liggingdata deel vir:" + + + "Datadeling verskil" + "Datapraktyke kan verskil op grond van jou appweergawe en -gebruik, streek en ouderdom. ""Meer oor datadeling" + "Jou liggingdata" + "Verander hierdie app se toegang in ""privaatheidinstellings" + "Appfunksies" + + + "Ontwikkelaarkommunikasie" + "Reklame of bemarking" + "Bedrogvoorkoming, sekuriteit en voldoening" + + + "Rekeningbestuur" + "Dataveiligheid" + "Liggingdata sal dalk gedeel word" + "Hierdie app het verklaar dat dit jou liggingdata met derde partye kan deel" + "Datadelingopdaterings vir ligging" + "Gaan apps na wat die manier waarop hulle jou liggingdata kan deel, verander het" + "Hierdie apps het die manier waarop hulle jou liggingdata kan deel, verander. Hulle het dit dalk nie voorheen gedeel nie, of kan dit nou vir reklame- of bemarkingdoeleindes deel." + + + "Kom meer te wete oor datadeling" + + + + + "{count,plural, =0{In die afgelope dag opgedateer}=1{In die afgelope dag opgedateer}other{In die afgelope # dae opgedateer}}" + "Geen opdaterings op hierdie tydstip nie" + "Datadelingopdaterings" + "Sommige apps het die manier waarop hulle jou liggingdata kan deel, verander" + "Instellings" diff --git a/PermissionController/res/values-am-car/strings.xml b/PermissionController/res/values-am-car/strings.xml new file mode 100644 index 0000000000..2243056ee4 --- /dev/null +++ b/PermissionController/res/values-am-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "አንድ መተግበሪያ ለጥቂት ወራት ጥቅም ላይ ካልዋለ፦\n\n• ውሂብዎን ለመጠበቅ ፈቃዶች ይወገዳሉ\n• ጊዜያዊ ፋይሎች ቦታ ለማስለቀቅ ይወገዳሉ" + diff --git a/PermissionController/res/values-am-v33/strings.xml b/PermissionController/res/values-am-v33/strings.xml index 7f4ee0f183..0d070d02be 100644 --- a/PermissionController/res/values-am-v33/strings.xml +++ b/PermissionController/res/values-am-v33/strings.xml @@ -28,8 +28,7 @@ "የዝርዝር ንጥል። %1$s%2$s" "%1$s%2$s" "ተጨማሪ ማንቂያዎች" - - + "የተሰናበቱ ማንቂያዎች" "{count,plural, =1{ይዘርጉ እና አንድ ተጨማሪ ማንቂያ ይመልከቱ}one{ይዘርጉ እና # ተጨማሪ ማንቂያ ይመልከቱ}other{ይዘርጉ እና # ተጨማሪ ማንቂያዎችን ይመልከቱ}}" "ማንቂያ። %1$s%2$s" "ማንቂያ። %1$s%2$s%3$s" diff --git a/PermissionController/res/values-am-v34/strings.xml b/PermissionController/res/values-am-v34/strings.xml new file mode 100644 index 0000000000..db2c82019e --- /dev/null +++ b/PermissionController/res/values-am-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "ደህንነት እና ግላዊነት" + "መቆጣጠሪያዎች" + "ውሂብ" + + + "የመተግበሪያ ፈቃዶች እና ውሂብ አስተዳደር" + diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml index cda973561c..c25f812ce7 100644 --- a/PermissionController/res/values-am/strings.xml +++ b/PermissionController/res/values-am/strings.xml @@ -591,5 +591,44 @@ "መተግበሪያዎች ጽሑፍን፣ ምስሎችን ወይም እርስዎ የቀዱትን ሌላ ይዘት ሲደርሱ መልዕክት አሳይ" "የይለፍ ቃላትን አሳይ" "እርስዎ በሚተይቡበት ጊዜ ቁምፊዎችን በአጭሩ ያሳይ" - "ይህ መተግበሪያ የአካባቢ ውሂብን ከሦስተኛ ወገኖች ጋር ሊያጋራ እንደሚችል ገልጿል" + "ይህ መተግበሪያ የአካባቢ ውሂብዎን ከሦስተኛ ወገኖች ጋር ሊያጋራ እንደሚችል ገልጿል" + + + "የውሂብ ማጋራት መረጃ ከየት እንደሚመጣ" + + + "መተግበሪያው የአካባቢ ውሂብን ለሚከተሉት ሊያጋራ ይችላል፦" + + + "የውሂብ ማጋራት ይለያያል" + "የውሂብ ልማዶች በመተግበሪያዎ ስሪት፣ አጠቃቀምዎ፣ ክልልዎ እና እድሜዎ መሰረት ሊለያዩ ይችላሉ። ""ስለውሂብ ማጋራት ተጨማሪ" + "የእርስዎ የአካባቢ ውሂብ" + "የዚህን መተግበሪያ መዳረሻ በ""ግላዊነት ቅንብሮች"" ውስጥ ይለውጡ" + "የመተግበሪያ ተግባራዊነት" + + + "የገንቢ ተግባቦት" + "ማስታወቂያ ወይም የገበያ ሥራ" + "ማጭበርበርን መከላከል፣ ደህንነት እና ተገዥነት" + + + "የመለያ አስተዳደር" + "የውሂብ ደህንነት" + "የአካባቢ ውሂብ ሊጋራ ይችላል" + "ይህ መተግበሪያ የአካባቢ ውሂብዎን ከሦስተኛ ወገኖች ጋር ሊያጋራ እንደሚችል ገልጿል" + "የአካባቢ የውሂብ ማጋራት ዝማኔዎች" + "የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ የለወጡ መተግበሪያዎችን ይገምግሙ" + "እነዚህ መተግበሪያዎች የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ ለውጠዋል። ከዚህ በፊት አጋርተውት ላይሆን ይችላል፣ ወይም አሁን ለማስታወቂያ ወይም የገበያ ሥራ ዓላማዎች ሊያጋሩት ይችላሉ።" + + + "ስለውሂብ ማጋራት የበለጠ ይወቁ" + + + + + "{count,plural, =0{ባለፈው ቀን ውስጥ የተዘመነ}=1{ባለፈው ቀን ውስጥ የተዘመነ}one{ባለፈው # ቀን ውስጥ የተዘመነ}other{ባለፉት # ቀናት ውስጥ የተዘመነ}}" + "በዚህ ጊዜ ምንም ዝማኔዎች የሉም" + "የውሂብ ማጋራት ዝማኔዎች" + "አንዳንድ መተግበሪያዎች የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ ለውጠዋል" + "ቅንብሮች" diff --git a/PermissionController/res/values-ar-car/strings.xml b/PermissionController/res/values-ar-car/strings.xml new file mode 100644 index 0000000000..dab1c0bcfc --- /dev/null +++ b/PermissionController/res/values-ar-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "في حال عدم استخدام تطبيق لبضعة أشهر:\n\n• تتم إزالة الأذونات لحماية بياناتك.\n• تتم إزالة الملفات المؤقتة لإخلاء بعض المساحة." + diff --git a/PermissionController/res/values-ar-v33/strings.xml b/PermissionController/res/values-ar-v33/strings.xml index 89bfff7c08..0fb49d8d81 100644 --- a/PermissionController/res/values-ar-v33/strings.xml +++ b/PermissionController/res/values-ar-v33/strings.xml @@ -28,8 +28,7 @@ "عنصر قائمة %1$s. %2$s" "%1$s. %2$s" "المزيد من التنبيهات" - - + "التنبيهات التي تم إغلاقها" "{count,plural, =1{التوسيع لعرض تنبيه واحد إضافي}zero{التوسيع لعرض # تنبيه إضافي}two{التوسيع لعرض تنبيهين إضافيَين}few{التوسيع لعرض # تنبيهات إضافية}many{التوسيع لعرض # تنبيهًا إضافيًا}other{التوسيع لعرض # تنبيه إضافي}}" "تنبيه %1$s. %2$s" "تنبيه %1$s. %2$s %3$s" diff --git a/PermissionController/res/values-ar-v34/strings.xml b/PermissionController/res/values-ar-v34/strings.xml new file mode 100644 index 0000000000..249905ac4b --- /dev/null +++ b/PermissionController/res/values-ar-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "الأمان والخصوصية" + "عناصر التحكّم" + "البيانات" + + + "أذونات التطبيق وإدارة البيانات" + diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml index 0b889ad89d..d69e0bb967 100644 --- a/PermissionController/res/values-ar/strings.xml +++ b/PermissionController/res/values-ar/strings.xml @@ -591,5 +591,44 @@ "عرض رسالة عندما يصل التطبيق إلى نص أو صور أو محتوى آخر تم نسخه." "عرض كلمات المرور" "عرض الأحرف لفترة وجيزة أثناء الكتابة" - "وضَّح هذا التطبيق أنه يمكنه مشاركة بيانات الموقع الجغرافي مع جهات خارجية." + "وضَّح هذا التطبيق أنّه قد يشارك بيانات الموقع الجغرافي مع جهات خارجية." + + + "من أين تأتي معلومات مشاركة البيانات؟" + + + "قد يشارك التطبيق بيانات الموقع الجغرافي لـ:" + + + "تختلف مشاركة البيانات" + "قد تختلف الممارسات المتعلقة بالبيانات حسب إصدار تطبيقك وآلية استخدامك له ومنطقتك وعمرك. ""مزيد من المعلومات عن مشاركة البيانات" + "بيانات موقعك الجغرافي" + "يمكنك تغيير إمكانية وصول هذا التطبيق في ""إعدادات الخصوصية""." + "وظائف التطبيق" + + + "مراسلات المطوّر" + "الإعلان أو التسويق" + "منع الاحتيال والأمان والامتثال" + + + "إدارة الحساب" + "أمان البيانات" + "قد تتم مشاركة بيانات الموقع الجغرافي." + "وضَّح هذا التطبيق أنّه قد يشارك بيانات الموقع الجغرافي مع جهات خارجية." + "تعديلات مشاركة بيانات الموقع الجغرافي" + "راجِع التطبيقات التي غيّرت الطريقة التي قد تشارك بها بيانات موقعك الجغرافي." + "غيّرت هذه التطبيقات الطريقة التي قد تشارك بها بيانات موقعك الجغرافي. ربما لم تشارك هذه التطبيقات بياناتك من قبل، أو قد تشاركها الآن لأغراض إعلانية أو تسويقية." + + + "التعرّف على مشاركة البيانات" + + + + + "{count,plural, =0{تم التعديل خلال آخر 24 ساعة}=1{تم التعديل خلال آخر 24 ساعة}two{تم التعديل خلال آخر يومَين}few{تم التعديل خلال آخر # أيام}many{تم التعديل خلال آخر # يومًا}other{تم التعديل خلال آخر # يوم}}" + "ما مِن تعديلات في الوقت الحالي." + "تعديلات مشاركة البيانات" + "غيّرت بعض التطبيقات الطريقة التي قد تشارك بها بيانات موقعك الجغرافي." + "الإعدادات" diff --git a/PermissionController/res/values-as-v33/strings.xml b/PermissionController/res/values-as-v33/strings.xml index 6fd7faf9ec..9999da4991 100644 --- a/PermissionController/res/values-as-v33/strings.xml +++ b/PermissionController/res/values-as-v33/strings.xml @@ -28,8 +28,7 @@ "সূচীৰ বস্তু। %1$s%2$s" "%1$s%2$s" "অধিক সতৰ্কবাৰ্তা" - - + "অগ্ৰাহ্য কৰা সতৰ্কবাৰ্তা" "{count,plural, =1{বিস্তাৰ কৰক আৰু এটা সতৰ্কবাৰ্তা চাওক}one{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}other{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}}" "সতৰ্কতা। %1$s%2$s" "সতৰ্কতা। %1$s%2$s%3$s" diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml index 00146ec593..2767c700a0 100644 --- a/PermissionController/res/values-as/strings.xml +++ b/PermissionController/res/values-as/strings.xml @@ -591,5 +591,68 @@ "এপে আপুনি প্ৰতিলিপি কৰা পাঠ, প্ৰতিচ্ছবি অথবা অন্য সমল এক্সেছ কৰিলে এটা বাৰ্তা দেখুৱাওক" "পাছৱৰ্ডবোৰ দেখুৱাওক" "আপুনি টাইপ কৰাৰ লগে লগে বৰ্ণসমূহ খন্তেকৰ বাবে দেখুৱাওক" - "এই এপ্‌টোৱে তৃতীয় পক্ষৰ সৈতে অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পাৰে বুলি জনাইছে" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-az-car/strings.xml b/PermissionController/res/values-az-car/strings.xml new file mode 100644 index 0000000000..270b9305ce --- /dev/null +++ b/PermissionController/res/values-az-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tətbiq bir neçə ay istifadə edilmirsə:\n\n• Datanı qorumaq üçün icazələr silinir\n• Yer boşaltmaq üçün müvəqqəti fayllar silinir" + diff --git a/PermissionController/res/values-az-v33/strings.xml b/PermissionController/res/values-az-v33/strings.xml index c21cdc52a7..84908b8429 100644 --- a/PermissionController/res/values-az-v33/strings.xml +++ b/PermissionController/res/values-az-v33/strings.xml @@ -28,8 +28,7 @@ "Siyahı elementi. %1$s. %2$s" "%1$s. %2$s" "Daha çox siqnal" - - + "Qapadılmış xəbərdarlıqlar" "{count,plural, =1{Genişləndirin və daha bir xəbərdarlığa baxın}other{Genişləndirin və daha # xəbərdarlığa baxın}}" "Siqnal. %1$s. %2$s" "Siqnal. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-az-v34/strings.xml b/PermissionController/res/values-az-v34/strings.xml new file mode 100644 index 0000000000..66ff6df15f --- /dev/null +++ b/PermissionController/res/values-az-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Təhlükəsizlik və məxfilik" + "Nizamlayıcılar" + "Data" + + + "Tətbiq icazələri və data idarəetməsi" + diff --git a/PermissionController/res/values-az/strings.xml b/PermissionController/res/values-az/strings.xml index b054fe8c84..eafcbdd1c4 100644 --- a/PermissionController/res/values-az/strings.xml +++ b/PermissionController/res/values-az/strings.xml @@ -591,5 +591,44 @@ "Tətbiq kopyalanmış mətn, şəkil və ya digər kontent işlədəndə bildiriş göstərilsin" "Parolları göstərin" "Yazarkən simvollar qısa müddət göstərilsin" - "Bu tətbiq məkan datasını üçüncü tərəflərlə paylaşa biləcəyini bildirib" + "Bu tətbiq məkan datasını üçüncü tərəflərlə paylaşa biləcəyini bildirib" + + + "Data paylaşma məlumatı haradan əldə edilir" + + + "Tətbiq məkan datasını bunun üçün paylaşa bilər:" + + + "Data paylaşma dəyişə bilər" + "Data praktikaları tətbiq versiyası, istifadə, region və yaşınıza görə dəyişə bilər. ""Data paylaşma haqqında ətraflı" + "Məkan datanız" + "Bu tətbiqin girişini ""məxfilik ayarlarında"" dəyişin" + "Tətbiq funksionallığı" + + + "Developer kommunikasiyaları" + "Reklam və ya marketinq" + "Dələduzluğun qarşısının alınması, güvənlik və uyğunluq" + + + "Hesabın idarə edilməsi" + "Data təhlükəsizliyi" + "Məkan datası paylaşıla bilər" + "Bu tətbiq məkan datasını üçüncü tərəflərlə paylaşa biləcəyini bildirib" + "Məkan üzrə data paylaşma yenilikləri" + "Məkan datasını paylaşma üsulunu dəyişən tətbiqləri nəzərdən keçirin" + "Bu tətbiqlər məkan datasını paylaşma üsulunu dəyişib. Ola bilsin ki, onu daha öncə paylaşmayıblar və ya indi reklam, yaxud marketinq məqsədləri üçün paylaşırlar." + + + "Data paylaşması haqqında məlumat əldə edin" + + + + + "{count,plural, =0{Son gün ərzində yenilənib}=1{Son gün ərzində yenilənib}other{# gün ərzində yenilənib}}" + "Hazırda yenilik yoxdur" + "Data paylaşma yenilikləri" + "Bəzi tətbiqlər məkan datasını paylaşma üsulunu dəyişib" + "Ayarlar" diff --git a/PermissionController/res/values-b+sr+Latn-car/strings.xml b/PermissionController/res/values-b+sr+Latn-car/strings.xml new file mode 100644 index 0000000000..23b3ac1ddb --- /dev/null +++ b/PermissionController/res/values-b+sr+Latn-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ako ne koristite aplikaciju nekoliko meseci:\n\n• dozvole se uklanjaju da bi se zaštitili podaci\n• privremeni fajlovi se uklanjaju da bi se oslobodio prostor" + diff --git a/PermissionController/res/values-b+sr+Latn-v33/strings.xml b/PermissionController/res/values-b+sr+Latn-v33/strings.xml index 81af83a314..dc7f106ec2 100644 --- a/PermissionController/res/values-b+sr+Latn-v33/strings.xml +++ b/PermissionController/res/values-b+sr+Latn-v33/strings.xml @@ -28,8 +28,7 @@ "Stavka liste. %1$s. %2$s" "%1$s. %2$s" "Još obaveštenja" - - + "Odbačena obaveštenja" "{count,plural, =1{Proširite i vidite još jedno obaveštenje}one{Proširite i vidite još # obaveštenje}few{Proširite i vidite još # obaveštenja}other{Proširite i vidite još # obaveštenja}}" "Obaveštenje. %1$s. %2$s" "Obaveštenje. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-b+sr+Latn-v34/strings.xml b/PermissionController/res/values-b+sr+Latn-v34/strings.xml new file mode 100644 index 0000000000..c72db3c33d --- /dev/null +++ b/PermissionController/res/values-b+sr+Latn-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Bezbednost i privatnost" + "Kontrole" + "Podaci" + "Povezivanje zdravlja" + "Dozvole za aplikacije i upravljanje podacima" + diff --git a/PermissionController/res/values-b+sr+Latn/strings.xml b/PermissionController/res/values-b+sr+Latn/strings.xml index 813b9a16f8..694818f88c 100644 --- a/PermissionController/res/values-b+sr+Latn/strings.xml +++ b/PermissionController/res/values-b+sr+Latn/strings.xml @@ -591,5 +591,36 @@ "Prikazuje poruku kada aplikacije pristupaju tekstu, slikama ili drugom sadržaju koji ste kopirali" "Prikazuj lozinke" "Prikazuje znakove nakratko dok kucate" - "Ova aplikacija navodi da može da deli podatke sa trećim stranama" + "Ova aplikacija navodi da može da deli podatke o lokaciji sa trećim stranama" + "Deljenje podataka i lokacija" + "Odakle informacije o deljenju podataka potiču" + "Programer je naveo informacije o tome kako ova aplikacija deli podatke za: ""%1$s"". On može da ažurira te informacije tokom vremena." + "Aplikacija može da deli podatke o lokaciji za:" + "%1$s" + "Deljenje podataka varira" + "Prakse za podatke mogu da se razlikuju u zavisnosti od verzije aplikacije, korišćenja, regiona i uzrasta. ""Još o deljenju podataka" + "Podaci o lokaciji" + "Promenite pristup ove aplikacije u ""podešavanjima privatnosti" + "Funkcije aplikacije" + "Analitika" + "Poruke programera" + "Oglašavanje ili marketing" + "Sprečavanje prevara, bezbednost i usaglašenost" + "Personalizacija" + "Upravljanje nalogom" + "Bezbednost podataka" + "Podaci o lokaciji mogu da se dele" + "Ova aplikacija navodi da može da deli podatke o lokaciji sa trećim stranama" + "Ažuriranja deljenja podataka za lokaciju" + "Pregledajte aplikacije koje su promenile način na koji mogu da dele podatke o lokaciji" + "Aplikacije su promenile način na koji mogu da dele podatke o lokaciji. Možda ih nisu delile ranije ili ih sada dele u svrhe oglašavanja ili marketinga." + "Programeri ovih aplikacija su pružili podatke o praksama za deljenje podataka prodavnici aplikacija. Mogu da ih ažuriraju tokom vremena.\n\nPrakse za deljenje podataka mogu da se razlikuju u zavisnosti od verzije aplikacije, korišćenja, regiona i uzrasta." + "Saznajte više o deljenju podataka" + "Podaci o lokaciji se sada dele sa trećim stranama" + "Podaci o lokaciji se sada dele sa trećim stranama u svrhu oglašavanja ili marketinga" + "{count,plural, =0{Ažurirano tokom prethodnog dana}=1{Ažurirano tokom prethodnog dana}one{Ažurirano tokom prethodnog # dana}few{Ažurirano tokom prethodna # dana}other{Ažurirano tokom prethodnih # dana}}" + "Trenutno nema ažuriranja" + "Ažuriranja za deljenje podataka" + "Neke aplikacije su promenile način na koji mogu da dele podatke o lokaciji" + "Podešavanja" diff --git a/PermissionController/res/values-be-car/strings.xml b/PermissionController/res/values-be-car/strings.xml new file mode 100644 index 0000000000..ad6fd6801f --- /dev/null +++ b/PermissionController/res/values-be-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Калі праграма не выкарыстоўвалася некалькі месяцаў:\n\n• у мэтах абароны вашых даных выдаляюцца дазволы;\n• для вызвалення месца выдаляюцца часовыя файлы." + diff --git a/PermissionController/res/values-be-v33/strings.xml b/PermissionController/res/values-be-v33/strings.xml index 395516e2a0..8dc212803a 100644 --- a/PermissionController/res/values-be-v33/strings.xml +++ b/PermissionController/res/values-be-v33/strings.xml @@ -28,8 +28,7 @@ "Элемент спіса. %1$s. %2$s" "%1$s. %2$s" "Іншыя абвесткі" - - + "Адхіленыя абвесткі" "{count,plural, =1{Разгарніце, каб убачыць яшчэ адну абвестку}one{Разгарніце, каб убачыць яшчэ # абвестку}few{Разгарніце, каб убачыць яшчэ # абвесткі}many{Разгарніце, каб убачыць яшчэ # абвестак}other{Разгарніце, каб убачыць яшчэ # абвесткі}}" "Абвестка. %1$s. %2$s" "Абвестка. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-be-v34/strings.xml b/PermissionController/res/values-be-v34/strings.xml new file mode 100644 index 0000000000..bcbdf5fcd1 --- /dev/null +++ b/PermissionController/res/values-be-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Бяспека і прыватнасць" + "Налады" + "Даныя" + + + "Дазволы праграм і кіраванне данымі" + diff --git a/PermissionController/res/values-be/strings.xml b/PermissionController/res/values-be/strings.xml index 1db3fef72c..3cb003d6a4 100644 --- a/PermissionController/res/values-be/strings.xml +++ b/PermissionController/res/values-be/strings.xml @@ -591,5 +591,44 @@ "Паказваць паведамленне, калі праграмы атрымліваюць доступ да тэксту, відарысаў ці іншага змесціва, якое вы скапіравалі" "Паказваць паролі" "Падчас уводу сімвалаў на кароткі час паказваць іх" - "Гэта праграма можа абагульваць даныя пра месцазнаходжанне з трэцімі бакамі" + "Гэта праграма можа абагульваць даныя пра месцазнаходжанне з трэцімі бакамі" + + + "Адкуль бярэцца інфармацыя пра абагульванне даных" + + + "Праграма можа абагульваць геаданыя для наступнага:" + + + "Абагульванне даных залежыць ад розных умоў" + "Практыкі збору і апрацоўкі даных залежаць ад версіі праграмы, яе выкарыстання, месца пражывання і ўзросту карыстальніка. ""Больш пра абагульванне даных" + "Даныя пра ваша месцазнаходжанне" + "Змяніць доступ праграмы можна ў ""наладах прыватнасці" + "Функцыі праграмы" + + + "Сувязь з распрацоўшчыкам" + "Рэклама і маркетынг" + "Прадухіленне махлярства, бяспека і адпаведнасць патрабаванням" + + + "Кіраванне ўліковымі запісамі" + "Бяспека даных" + "Дазвол на абагульванне даных пра месцазнаходжанне" + "Гэта праграма можа абагульваць даныя пра месцазнаходжанне з трэцімі бакамі" + "Змяненні ў абагульванні даных пра месцазнаходжанне" + "Праглядзець праграмы, для якіх быў зменены спосаб абагульвання даных пра месцазнаходжанне" + "Для гэтых праграм спосаб абагульвання даных пра месцазнаходжанне змяніўся. Магчыма, яны раней увогуле не абагульвалі такія даныя альбо цяпер пачалі іх абагульваць у мэтах рэкламы ці маркетынгу." + + + "Даведацца пра абагульванне даных" + + + + + "{count,plural, =0{Абнаўленні за апошні дзень}=1{Абнаўленні за апошні дзень}one{Абнаўленні за # дзень}few{Абнаўленні за # дні}many{Абнаўленні за # дзён}other{Абнаўленні за # дня}}" + "Змяненняў пакуль няма" + "Змяненні ў абагульванні даных" + "Для некаторых праграм спосаб абагульвання даных пра месцазнаходжанне змяніўся" + "Налады" diff --git a/PermissionController/res/values-bg-car/strings.xml b/PermissionController/res/values-bg-car/strings.xml new file mode 100644 index 0000000000..8890dd615d --- /dev/null +++ b/PermissionController/res/values-bg-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ако дадено приложение не бъде използвано в продължение на няколко месеца:\n\n• разрешенията ще бъдат премахнати с цел защита на данните ви;\n• временните файлове ще бъдат премахнати, за да се освободи място." + diff --git a/PermissionController/res/values-bg-v33/strings.xml b/PermissionController/res/values-bg-v33/strings.xml index cca3d1a652..0f1c5c1a6a 100644 --- a/PermissionController/res/values-bg-v33/strings.xml +++ b/PermissionController/res/values-bg-v33/strings.xml @@ -28,8 +28,7 @@ "Списъчен елемент. %1$s. %2$s" "%1$s. %2$s" "Още сигнали" - - + "Отхвърлени сигнали" "{count,plural, =1{Разгънете и вижте още един сигнал}other{Разгънете и вижте още # сигнала}}" "Сигнал. %1$s. %2$s" "Сигнал. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-bg-v34/strings.xml b/PermissionController/res/values-bg-v34/strings.xml new file mode 100644 index 0000000000..83534f4045 --- /dev/null +++ b/PermissionController/res/values-bg-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Сигурност и поверителност" + "Контроли" + "Данни" + + + "Разрешения за приложението и управление на данните" + diff --git a/PermissionController/res/values-bg/strings.xml b/PermissionController/res/values-bg/strings.xml index 369c042116..fd5b44e54e 100644 --- a/PermissionController/res/values-bg/strings.xml +++ b/PermissionController/res/values-bg/strings.xml @@ -591,5 +591,44 @@ "Показване на съобщение, когато приложенията осъществяват достъп до копирани от вас текст, изображения или друго съдържание" "Показване на паролите" "Кратко показване на знаците, докато пишете" - "Това приложение посочи, че може да споделя с трети страни данни за местоположението" + "Това приложение посочи, че може да споделя с трети страни данни за местоположението ви" + + + "Източници на информацията за споделянето на данни" + + + "Прилож. може да споделя данни за местопол. с цел:" + + + "Споделянето на данни варира" + "Практиките за поверителност може да варират в зависимост от версията на приложението, употребата от ваша страна, региона и възрастта ви. ""Още за споделянето на данни" + "Данни за местоположението ви" + "Променете достъпа на това приложение от ""настройките за поверителност" + "функционалност на прилож.;" + + + "получаване на съобщения от програмиста;" + "рекламиране или маркетинг;" + "предотвратяване на измами, сигурност и спазване на изискванията;" + + + "управление на профила." + "Безопасност на данните" + "Възможно е да бъдат споделяни данни за местоположението" + "Това приложение посочи, че може да споделя с трети страни данни за местоположението ви" + "Актуализации за споделянето на данни за местоположението" + "Прегледайте приложенията, променили начина, по който могат да споделят данни за местоположението ви" + "Тези приложения са променили начина, по който могат да споделят данни за местоположението ви. Може да не са ги споделяли преди или вече да го правят с рекламни или маркетингови цели." + + + "Научете повече за споделянето на данни" + + + + + "{count,plural, =0{Актуализирано през последния ден}=1{Актуализирано през последния ден}other{Актуализирано през последните # дни}}" + "Понастоящем няма актуализации" + "Актуализации за споделянето на данни" + "Някои приложения са променили начина, по който могат да споделят данни за местоположението ви" + "Настройки" diff --git a/PermissionController/res/values-bn-car/strings.xml b/PermissionController/res/values-bn-car/strings.xml new file mode 100644 index 0000000000..395bb93685 --- /dev/null +++ b/PermissionController/res/values-bn-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "কোনও অ্যাপ কয়েক মাসের জন্য ব্যবহার করা না হলে:\n\n• আপনার ডেটা সুরক্ষিত রাখতে অ্যাপগুলির অনুমতি সরিয়ে নেওয়া হয়\n• স্পেস খালি করতে, অস্থায়ী ফাইল সরিয়ে দেওয়া হয়" + diff --git a/PermissionController/res/values-bn-v33/strings.xml b/PermissionController/res/values-bn-v33/strings.xml index 8923d7d333..d1ffe6b860 100644 --- a/PermissionController/res/values-bn-v33/strings.xml +++ b/PermissionController/res/values-bn-v33/strings.xml @@ -27,10 +27,8 @@ "তালিকা। %1$s। ব্যবস্থা নিতে হবে। %2$s" "আইটেম তালিকাভুক্ত করুন। %1$s%2$s" "%1$s. %2$s" - - - - + "আরও সতর্কতা" + "বাতিল করা সতর্কতা" "{count,plural, =1{বড় করুন ও আরও একটি সতর্কতা দেখুন}one{বড় করুন ও আরও #টি সতর্কতা দেখুন}other{বড় করুন ও আরও #টি সতর্কতা দেখুন}}" "সতর্কতা। %1$s%2$s" "সতর্কতা। %1$s%2$s%3$s" diff --git a/PermissionController/res/values-bn-v34/strings.xml b/PermissionController/res/values-bn-v34/strings.xml new file mode 100644 index 0000000000..6dd4e8680d --- /dev/null +++ b/PermissionController/res/values-bn-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "নিরাপত্তা এবং গোপনীয়তা" + "নিয়ন্ত্রণ" + "ডেটা" + + + "অ্যাপের অনুমতি ও ডেটা ম্যানেজমেন্ট" + diff --git a/PermissionController/res/values-bn/strings.xml b/PermissionController/res/values-bn/strings.xml index 17d6a87996..b83bdae222 100644 --- a/PermissionController/res/values-bn/strings.xml +++ b/PermissionController/res/values-bn/strings.xml @@ -591,5 +591,44 @@ "আপনার কপি করা টেক্সট, ছবি বা অন্যান্য কন্টেন্ট অ্যাপ অ্যাক্সেস করলে মেসেজ দেখায়" "পাসওয়ার্ড দেখুন" "টাইপ করার সময় অক্ষরগুলি কয়েক মুহূর্তের জন্য দেখুন" - "এই অ্যাপ, থার্ড-পার্টির সাথে লোকেশন ডেটা শেয়ার করার অনুমতি চাইতে পারে" + "এই অ্যাপ জানিয়েছে যে, এটি থার্ড পার্টির সাথে আপনার লোকেশন ডেটা শেয়ার করতে পারে" + + + "ডেটা শেয়ারিং সম্পর্কিত তথ্য কোথা থেকে পাওয়া যায়" + + + "অ্যাপটি এগুলির জন্য লোকেশন ডেটা শেয়ার করতে পারে:" + + + "ডেটা শেয়ারিংয়ের ক্ষেত্রে হওয়া পরিবর্তন" + "অ্যাপের ভার্সন, ব্যবহার, অঞ্চল ও ব্যবহারকারীর বয়সের উপর ভিত্তি করে ডেটা ব্যবহার ও ম্যানেজ করার বিষয়টি পরিবর্তিত হতে পারে। ""ডেটা শেয়ারিংয়ের ব্যাপারে আরও জানুন" + "আপনার লোকেশন ডেটা" + "গোপনীয়তা সেটিংস"" বিকল্প থেকে এই অ্যাপের অ্যাক্সেস করার অনুমতি পরিবর্তন করুন" + "অ্যাপের কার্যকারিতা" + + + "ডেভেলপারের কথোপকথন" + "বিজ্ঞাপন বা মার্কেটিং" + "প্রতারণা প্রতিরোধ, নিরাপত্তা ও শর্ত মেনে চলা" + + + "অ্যাকাউন্ট ম্যানেজমেন্ট" + "ডেটা সুরক্ষা" + "লোকেশন ডেটা শেয়ার করা হতে পারে" + "এই অ্যাপ জানিয়েছে যে, এটি থার্ড পার্টির সাথে আপনার লোকেশন ডেটা শেয়ার করতে পারে" + "লোকেশনের জন্য ডেটা শেয়ারিং সম্পর্কিত আপডেট" + "যেসব অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে, সেগুলি পর্যালোচনা করুন" + "এইসব অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে। এগুলি আগে হয়ত শেয়ার করেনি অথবা এখন বিজ্ঞাপন বা মার্কেটিং সংক্রান্ত উদ্দেশ্যে শেয়ার করতে পারে।" + + + "ডেটা শেয়ারিংয়ের ব্যাপারে জানুন" + + + + + "{count,plural, =0{গতকালের মধ্যে আপডেট করা হয়েছে}=1{গতকালের মধ্যে আপডেট করা হয়েছে}one{# দিনের মধ্যে আপডেট করা হয়েছে}other{# দিনের মধ্যে আপডেট করা হয়েছে}}" + "এই মুহূর্তে কোনও আপডেট পাওয়া যায়নি" + "ডেটা শেয়ারিং সংক্রান্ত আপডেট" + "কিছু অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে" + "সেটিংস" diff --git a/PermissionController/res/values-bs-car/strings.xml b/PermissionController/res/values-bs-car/strings.xml new file mode 100644 index 0000000000..d228223410 --- /dev/null +++ b/PermissionController/res/values-bs-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ako se aplikacija ne koristi nekoliko mjeseci:\n\n• Dopuštenja se uklanjaju radi zaštite vaših podataka\n• Privremene datoteke uklanjaju se radi oslobađanja prostora" + diff --git a/PermissionController/res/values-bs-v34/strings.xml b/PermissionController/res/values-bs-v34/strings.xml new file mode 100644 index 0000000000..38499a5c3c --- /dev/null +++ b/PermissionController/res/values-bs-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Sigurnost i privatnost" + "Kontrole" + "Podaci" + "Health Connect" + "Dopuštenja aplikacije i upravljanje podacima" + diff --git a/PermissionController/res/values-bs/strings.xml b/PermissionController/res/values-bs/strings.xml index 02359c3ac1..f876562cad 100644 --- a/PermissionController/res/values-bs/strings.xml +++ b/PermissionController/res/values-bs/strings.xml @@ -591,5 +591,36 @@ "Vidite poruku kada aplikacije pristupe tekstu, slikama ili drugom sadržaju koji ste kopirali" "Prikaži lozinke" "Kratko prikazivanje znakova dok pišete" - "Aplikacija je navela da može dijeliti podatke o lokaciji s trećim stranama" + "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Dijeljenje podataka i lokacija" + "Odakle potječe dijeljenje informacija" + "Razvojni programer je usluzi ""%1$s"" poslao informacije o načinu na koji aplikacija dijeli podatke. Te informacije s vremenom može ažurirati." + "Aplikacija može dijeliti podatke o lokaciji u ove svrhe:" + "%1$s" + "Dijeljenje podataka može se razlikovati" + "Postupanje s podacima može se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi. ""Više o dijeljenju podataka" + "Vaši podaci o lokaciji" + "Promijenite pristup aplikacije u ""postavkama privatnosti" + "funkcije aplikacije" + "Analitika" + "komunikacije s razvojnim programerom" + "oglašavanje ili marketing" + "sprječavanje prijevara, sigurnost i usklađenost" + "Prilagodba" + "upravljanje računom" + "Sigurnost podataka" + "Podaci o lokaciji mogu se dijeliti" + "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Ažuriranja dijeljenja podataka za lokaciju" + "Pregledajte aplikacije koje su promijenile način na koji mogu dijeliti vaše podatke o lokaciji" + "Ove su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji. Ranije ih možda nisu dijelile ili ih sada mogu dijeliti u svrhe oglašavanja ili marketinga." + "Razvojni programeri tih aplikacija su trgovini aplikacija poslali podatke o praksama dijeljenja podataka. S vremenom ih mogu ažurirati.\n\nPrakse dijeljenja podataka mogu se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi." + "Saznajte više o dijeljenju podataka" + "Podaci o lokaciji sada se dijele s trećim stranama" + "Podaci o lokaciji sada se dijele s trećim stranama radi oglašavanja ili marketinga" + "{count,plural, =0{Ažurirano tijekom posljednjeg dana}=1{Ažurirano tijekom posljednjeg dana}one{Ažurirano tijekom posljednjeg # dana}few{Ažurirano tijekom posljednja # dana}other{Ažurirano tijekom posljednjih # dana}}" + "Trenutačno nema promjena" + "Ažuriranja dijeljenja podataka" + "Neke su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji" + "Postavke" diff --git a/PermissionController/res/values-ca-car/strings.xml b/PermissionController/res/values-ca-car/strings.xml new file mode 100644 index 0000000000..ad537e592c --- /dev/null +++ b/PermissionController/res/values-ca-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Si una aplicació no s\'utilitza durant uns mesos:\n\n• Se suprimeixen els permisos per protegir les teves dades.\n• Se suprimeixen els fitxers temporals per alliberar espai." + diff --git a/PermissionController/res/values-ca-v33/strings.xml b/PermissionController/res/values-ca-v33/strings.xml index 28432191de..515f920bb5 100644 --- a/PermissionController/res/values-ca-v33/strings.xml +++ b/PermissionController/res/values-ca-v33/strings.xml @@ -28,8 +28,7 @@ "Element de llista. %1$s. %2$s." "%1$s. %2$s." "Més alertes" - - + "Alertes ignorades" "{count,plural, =1{Desplega i consulta 1 alerta més}many{Desplega i consulta # alertes més}other{Desplega i consulta # alertes més}}" "Alerta. %1$s. %2$s." "Alerta. %1$s. %2$s. %3$s." diff --git a/PermissionController/res/values-ca-v34/strings.xml b/PermissionController/res/values-ca-v34/strings.xml new file mode 100644 index 0000000000..ce31619dd0 --- /dev/null +++ b/PermissionController/res/values-ca-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Seguretat i privadesa" + "Controls" + "Dades" + + + "Permisos de l\'aplicació i gestió de dades" + diff --git a/PermissionController/res/values-ca/strings.xml b/PermissionController/res/values-ca/strings.xml index 0afe6d9693..b632e8f95e 100644 --- a/PermissionController/res/values-ca/strings.xml +++ b/PermissionController/res/values-ca/strings.xml @@ -591,5 +591,44 @@ "Mostra un missatge quan les aplicacions accedeixen al text, a les imatges o a qualsevol altre contingut que hagis copiat" "Mostra les contrasenyes" "Mostra els caràcters breument mentre escrius" - "Aquesta aplicació ha indicat que és possible que comparteixi dades d\'ubicació amb tercers" + "Aquesta aplicació ha indicat que és possible que comparteixi les teves dades d\'ubicació amb tercers" + + + "D\'on prové la informació de la compartició de dades" + + + "L\'aplicació pot compartir dades d\'ubicació per a:" + + + "La compartició de dades varia" + "Les pràctiques relacionades amb les dades poden variar segons la versió de l\'aplicació, l\'ús que se\'n fa, la regió i l\'edat. ""Més informació sobre la compartició de dades" + "Les teves dades d\'ubicació" + "Canvia l\'accés d\'aquesta aplicació a la ""configuració de privadesa" + "Funcionalitat de l\'aplicació" + + + "Comunicacions del desenvolupador" + "Publicitat o màrqueting" + "Prevenció de fraus, seguretat i compliment" + + + "Gestió del compte" + "Seguretat de les dades" + "Pot ser que les dades d\'ubicació es comparteixin" + "Aquesta aplicació ha indicat que és possible que comparteixi les teves dades d\'ubicació amb tercers" + "Actualitzacions en la compartició de dades per a la ubicació" + "Revisa les aplicacions que han canviat la manera en què poden compartir les teves dades d\'ubicació" + "Aquestes aplicacions han canviat la manera en què poden compartir les teves dades d\'ubicació. Pot ser que no les hagin compartit abans o que ara les comparteixin amb finalitats publicitàries o de màrqueting." + + + "Informació sobre la compartició de dades" + + + + + "{count,plural, =0{S\'ha actualitzat durant el darrer dia}=1{S\'ha actualitzat durant el darrer dia}many{S\'ha actualitzat durant els # darrers dies}other{S\'ha actualitzat durant els # darrers dies}}" + "En aquest moment no hi ha cap actualització" + "Actualitzacions de compartició de dades" + "Algunes aplicacions han canviat la manera en què poden compartir les teves dades d\'ubicació" + "Configuració" diff --git a/PermissionController/res/values-cs-v33/strings.xml b/PermissionController/res/values-cs-v33/strings.xml index 7fac14a2fe..491f480cdd 100644 --- a/PermissionController/res/values-cs-v33/strings.xml +++ b/PermissionController/res/values-cs-v33/strings.xml @@ -28,8 +28,7 @@ "Položka seznamu. %1$s. %2$s" "%1$s. %2$s" "Další upozornění" - - + "Zavřená upozornění" "{count,plural, =1{Rozbalením zobrazíte jedno další upozornění}few{Rozbalením zobrazíte # další upozornění}many{Rozbalením zobrazíte # dalšího upozornění}other{Rozbalením zobrazíte # dalších upozornění}}" "Upozornění. %1$s. %2$s" "Upozornění. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index 31a34ab514..2b645f5157 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -591,5 +591,68 @@ "Zobrazovat zprávu, když aplikace použijí text, obrázky nebo jiný obsah, který jste zkopírovali" "Zobrazovat hesla" "Při psaní se budou krátce zobrazovat zadané znaky" - "Tato aplikace uvedla, že může sdílet údaje o poloze se třetími stranami" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-da-car/strings.xml b/PermissionController/res/values-da-car/strings.xml new file mode 100644 index 0000000000..e34c53402a --- /dev/null +++ b/PermissionController/res/values-da-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Hvis en app ikke bruges i et par måneder, sker følgende:\n\n• Tilladelser fjernes for at beskytte dine data\n• Midlertidige filer fjernes for at frigøre plads" + diff --git a/PermissionController/res/values-da-v33/strings.xml b/PermissionController/res/values-da-v33/strings.xml index 6aa4e042b1..4c6fb7353f 100644 --- a/PermissionController/res/values-da-v33/strings.xml +++ b/PermissionController/res/values-da-v33/strings.xml @@ -28,8 +28,7 @@ "Listepunkt. %1$s. %2$s" "%1$s. %2$s" "Flere underretninger" - - + "Lukkede underretninger" "{count,plural, =1{Udvid for at se én yderligere advarsel}one{Udvid for at se # yderligere advarsel}other{Udvid for at se # yderligere advarsler}}" "Underretning. %1$s. %2$s" "Underretning. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-da-v34/strings.xml b/PermissionController/res/values-da-v34/strings.xml new file mode 100644 index 0000000000..d14766954f --- /dev/null +++ b/PermissionController/res/values-da-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sikkerhed og privatliv" + "Styringselementer" + "Data" + + + "Apptilladelser og administration af data" + diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml index d7e2be6253..17b0aaaccf 100644 --- a/PermissionController/res/values-da/strings.xml +++ b/PermissionController/res/values-da/strings.xml @@ -591,5 +591,44 @@ "Vis en meddelelse, når apps får adgang til tekst, billeder eller andet indhold, du har kopieret" "Vis adgangskoder" "Vis kort tegnene, mens du skriver" - "Denne app har angivet, at den muligvis deler lokationsdata med tredjeparter" + "Denne app har angivet, at den muligvis deler dine lokationsdata med tredjeparter" + + + "Hvor oplysninger om datadeling stammer fra" + + + "Denne app deler muligvis lokationsdata for:" + + + "Datadeling varierer" + "Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder. ""Flere oplysninger om datadeling" + "Dine lokationsdata" + "Skift denne apps adgang i ""privatlivsindstillingerne" + "Appfunktionalitet" + + + "Kommunikation fra udvikleren" + "Annoncering eller marketing" + "Sikkerhed, overholdelse og forebyggelse af svindel" + + + "Kontoadministration" + "Datasikkerhed" + "Lokationsdata deles muligvis" + "Denne app har angivet, at den muligvis deler dine lokationsdata med tredjeparter" + "Opdateringer om deling af lokationsdata" + "Gennemse apps, der har ændret måden, hvorpå de kan dele dine lokationsdata" + "Disse apps har ændret den måde, hvorpå de kan dele dine lokationsdata. De har muligvis ikke delt dataene før eller kan nu anvende dem til annoncering eller marketing." + + + "Få flere oplysninger om deling af data" + + + + + "{count,plural, =0{Opdateret inden for den seneste dag}=1{Opdateret inden for den seneste dag}one{Opdateret for maks. # dag siden}other{Opdateret inden for de seneste # dage}}" + "Der er på nuværende tidspunkt ikke nogen opdateringer" + "Opdateringer om datadeling" + "Nogle apps har ændret måden, hvorpå de kan dele dine lokationsdata" + "Indstillinger" diff --git a/PermissionController/res/values-de-car/strings.xml b/PermissionController/res/values-de-car/strings.xml new file mode 100644 index 0000000000..6f93442cff --- /dev/null +++ b/PermissionController/res/values-de-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wenn du eine App mehrere Monate nicht verwendest, geschieht Folgendes:\n\n• Zum Schutz deiner Daten werden die Berechtigungen entfernt\n• Temporäre Dateien werden gelöscht, um Speicherplatz freizugeben" + diff --git a/PermissionController/res/values-de-v33/strings.xml b/PermissionController/res/values-de-v33/strings.xml index 86ea2b6988..aee450b658 100644 --- a/PermissionController/res/values-de-v33/strings.xml +++ b/PermissionController/res/values-de-v33/strings.xml @@ -28,8 +28,7 @@ "Listeneintrag. %1$s. %2$s" "%1$s. %2$s" "Weitere Benachrichtigungen" - - + "Ausgeblendete Benachrichtigungen" "{count,plural, =1{Maximieren und eine weitere Warnung anzeigen}other{Maximieren und # weitere Warnungen anzeigen}}" "Benachrichtigung. %1$s. %2$s" "Benachrichtigung. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-de-v34/strings.xml b/PermissionController/res/values-de-v34/strings.xml new file mode 100644 index 0000000000..a379754654 --- /dev/null +++ b/PermissionController/res/values-de-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sicherheit & Datenschutz" + "Einstellungen" + "Daten" + + + "App-Berechtigungen und Datenmanagement" + diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml index 5be137a5f6..3ff9d0ee4d 100644 --- a/PermissionController/res/values-de/strings.xml +++ b/PermissionController/res/values-de/strings.xml @@ -591,5 +591,44 @@ "Eine Meldung wird angezeigt, wenn Apps auf Text, Bilder oder andere Inhalte zugreifen, die du kopiert hast" "Passwörter anzeigen" "Zeichen während der Eingabe kurz anzeigen" - "In dieser App wurde angegeben, dass sie eventuell Standortdaten an Dritte weitergibt" + "In dieser App wurde angegeben, dass sie eventuell deine Standortdaten an Dritte weitergibt" + + + "Ursprung der Informationen zur Datenweitergabe" + + + "Die Weitergabe von Standortdaten ist erlaubt für:" + + + "Datenweitergabe variiert" + "Die Datenweitergabe kann je nach App-Version, Verwendung, Region und Alter des Nutzers variieren. ""Weitere Informationen zur Datenweitergabe" + "Deine Standortdaten" + "Du kannst den Zugriff dieser App in den ""Datenschutzeinstellungen"" ändern" + "Funktionen der App" + + + "Mitteilungen des Entwicklers" + "Werbung oder Marketing" + "Betrugsprävention, Sicherheit und Compliance" + + + "Kontoverwaltung" + "Datensicherheit" + "Standortdaten werden eventuell weitergegeben" + "In dieser App wurde angegeben, dass sie eventuell deine Standortdaten an Dritte weitergibt" + "Aktualisierung der Weitergabe von Standortdaten" + "Apps ansehen, in denen die Art der Weitergabe deiner Standortdaten geändert wurde" + "Bei diesen Apps hat sich die Art der Weitergabe deiner Standortdaten geändert. Möglicherweise wurden sie zuvor nicht weitergegeben oder werden jetzt zu Werbe- oder Marketingzwecken weitergegeben." + + + "Informationen zur Datenweitergabe" + + + + + "{count,plural, =0{Gestern aktualisiert}=1{Gestern aktualisiert}other{Innerhalb von # Tagen aktualisiert}}" + "Aktuell keine Änderungen" + "Aktualisierungen zur Datenweitergabe" + "Bei manchen Apps hat sich die Art der Weitergabe deiner Standortdaten geändert" + "Einstellungen" diff --git a/PermissionController/res/values-el-v33/strings.xml b/PermissionController/res/values-el-v33/strings.xml index a90f553a05..a3c5f306ed 100644 --- a/PermissionController/res/values-el-v33/strings.xml +++ b/PermissionController/res/values-el-v33/strings.xml @@ -28,8 +28,7 @@ "Στοιχείο λίστας. %1$s. %2$s" "%1$s. %2$s" "Περισσότερες ειδοποιήσεις" - - + "Ειδοποιήσεις που παραβλέφθηκαν" "{count,plural, =1{Αναπτύξτε και δείτε μία ακόμη ειδοποίηση}other{Αναπτύξτε και δείτε # ακόμη ειδοποιήσεις}}" "Ειδοποίηση. %1$s. %2$s" "Ειδοποίηση. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml index ca42ed63e5..23ce648605 100644 --- a/PermissionController/res/values-el/strings.xml +++ b/PermissionController/res/values-el/strings.xml @@ -591,5 +591,68 @@ "Να εμφανίζεται ένα μήνυμα όταν οι εφαρμογές αποκτούν πρόσβαση σε κείμενο, εικόνες ή άλλο περιεχόμενο που έχετε αντιγράψει" "Εμφάνιση κωδικών πρόσβασης" "Σύντομη εμφάνιση χαρακτήρων κατά την πληκτρολόγηση" - "Αυτή η εφαρμογή έχει δηλώσει ότι ενδέχεται να κοινοποιήσει δεδομένα τοποθεσίας σε τρίτα μέρη." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-en-rAU-car/strings.xml b/PermissionController/res/values-en-rAU-car/strings.xml new file mode 100644 index 0000000000..b748d8e412 --- /dev/null +++ b/PermissionController/res/values-en-rAU-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "If an app is unused for a few months:\n\n• Permissions are removed to protect your data\n• Temporary files are removed to free up space" + diff --git a/PermissionController/res/values-en-rAU-v34/strings.xml b/PermissionController/res/values-en-rAU-v34/strings.xml new file mode 100644 index 0000000000..9ed0938365 --- /dev/null +++ b/PermissionController/res/values-en-rAU-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Security & privacy" + "Controls" + "Data" + "Health Connect" + "App permissions and data management" + diff --git a/PermissionController/res/values-en-rAU/strings.xml b/PermissionController/res/values-en-rAU/strings.xml index fe19dfba37..120063af45 100644 --- a/PermissionController/res/values-en-rAU/strings.xml +++ b/PermissionController/res/values-en-rAU/strings.xml @@ -591,5 +591,36 @@ "Show a message when apps access text, images or other content that you’ve copied" "Show passwords" "Display characters briefly as you type" - "This app stated that it may share location data with third parties" + "This app stated that it may share your location data with third parties" + "Data sharing and location" + "Where data sharing info comes from" + "The developer provided info to ""%1$s"" about how this app shares data. It may update this info over time." + "The app may share location data for:" + "%1$s" + "Data sharing varies" + "Data practices may vary based on your app version, use, region and age. ""More about data sharing" + "Your location data" + "Change this app’s access in ""privacy settings" + "App functionality" + "Analytics" + "Developer communications" + "Advertising or marketing" + "Fraud prevention, security and compliance" + "Personalisation" + "Account management" + "Data safety" + "Location data may be shared" + "This app stated that it may share your location data with third parties" + "Data sharing updates for location" + "Review apps that changed the way that they may share your location data" + "These apps have changed the way that they may share your location data. They may not have shared it before or may now share it for advertising or marketing purposes." + "The developers of these apps provided info about their data-sharing practices to an app store. They may update it over time.\n\nData sharing practices may vary based on your app version, use, region and age." + "Learn about data sharing" + "Your location data is now shared with third parties" + "Your location data is now shared with third parties for advertising or marketing" + "{count,plural, =0{Updated within the last day}=1{Updated within the last day}other{Updated within # days}}" + "No updates at this time" + "Data sharing updates" + "Some apps changed the way that they may share your location data" + "Settings" diff --git a/PermissionController/res/values-en-rCA-car/strings.xml b/PermissionController/res/values-en-rCA-car/strings.xml new file mode 100644 index 0000000000..b748d8e412 --- /dev/null +++ b/PermissionController/res/values-en-rCA-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "If an app is unused for a few months:\n\n• Permissions are removed to protect your data\n• Temporary files are removed to free up space" + diff --git a/PermissionController/res/values-en-rCA-v34/strings.xml b/PermissionController/res/values-en-rCA-v34/strings.xml new file mode 100644 index 0000000000..9ed0938365 --- /dev/null +++ b/PermissionController/res/values-en-rCA-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Security & privacy" + "Controls" + "Data" + "Health Connect" + "App permissions and data management" + diff --git a/PermissionController/res/values-en-rCA/strings.xml b/PermissionController/res/values-en-rCA/strings.xml index f2de9a7cb9..ea38cf28e7 100644 --- a/PermissionController/res/values-en-rCA/strings.xml +++ b/PermissionController/res/values-en-rCA/strings.xml @@ -591,5 +591,36 @@ "Show a message when apps access text, images, or other content you’ve copied" "Show passwords" "Display characters briefly as you type" - "This app stated it may share location data with third parties" + "This app stated it may share your location data with third parties" + "Data sharing and location" + "Where data sharing info comes from" + "The developer provided info to ""%1$s"" about how this app shares data. It may update this info over time." + "The app may share location data for:" + "%1$s" + "Data sharing varies" + "Data practices may vary based on your app version, use, region, and age. ""More about data sharing" + "Your location data" + "Change this app’s access in ""privacy settings" + "App functionality" + "Analytics" + "Developer communications" + "Advertising or marketing" + "Fraud prevention, security, and compliance" + "Personalization" + "Account management" + "Data safety" + "Location data may be shared" + "This app stated it may share your location data with third parties" + "Data sharing updates for location" + "Review apps that changed the way they may share your location data" + "These apps have changed the way they may share your location data. They may not have shared it before, or may now share it for advertising or marketing purposes." + "The developers of these apps provided info about their data sharing practices to an app store. They may update it over time.\n\nData sharing practices may vary based on your app version, use, region, and age." + "Learn about data sharing" + "Your location data is now shared with third parties" + "Your location data is now shared with third parties for advertising or marketing" + "{count,plural, =0{Updated within the last day}=1{Updated within the last day}other{Updated within # days}}" + "No updates at this time" + "Data sharing updates" + "Some apps changed the way they may share your location data" + "Settings" diff --git a/PermissionController/res/values-en-rGB-car/strings.xml b/PermissionController/res/values-en-rGB-car/strings.xml new file mode 100644 index 0000000000..b748d8e412 --- /dev/null +++ b/PermissionController/res/values-en-rGB-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "If an app is unused for a few months:\n\n• Permissions are removed to protect your data\n• Temporary files are removed to free up space" + diff --git a/PermissionController/res/values-en-rGB-v34/strings.xml b/PermissionController/res/values-en-rGB-v34/strings.xml new file mode 100644 index 0000000000..9ed0938365 --- /dev/null +++ b/PermissionController/res/values-en-rGB-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Security & privacy" + "Controls" + "Data" + "Health Connect" + "App permissions and data management" + diff --git a/PermissionController/res/values-en-rGB/strings.xml b/PermissionController/res/values-en-rGB/strings.xml index 9a506b6104..2ffb58b5ad 100644 --- a/PermissionController/res/values-en-rGB/strings.xml +++ b/PermissionController/res/values-en-rGB/strings.xml @@ -591,5 +591,36 @@ "Show a message when apps access text, images or other content that you’ve copied" "Show passwords" "Display characters briefly as you type" - "This app stated that it may share location data with third parties" + "This app stated that it may share your location data with third parties" + "Data sharing and location" + "Where data sharing info comes from" + "The developer provided info to ""%1$s"" about how this app shares data. It may update this info over time." + "The app may share location data for:" + "%1$s" + "Data sharing varies" + "Data practices may vary based on your app version, use, region and age. ""More about data sharing" + "Your location data" + "Change this app’s access in ""privacy settings" + "App functionality" + "Analytics" + "Developer communications" + "Advertising or marketing" + "Fraud prevention, security and compliance" + "Personalisation" + "Account management" + "Data safety" + "Location data may be shared" + "This app stated that it may share your location data with third parties" + "Data sharing updates for location" + "Review apps that changed the way that they may share your location data" + "These apps have changed the way that they may share your location data. They may not have shared it before or may now share it for advertising or marketing purposes." + "The developers of these apps provided info about their data-sharing practices to an app store. They may update it over time.\n\nData sharing practices may vary based on your app version, use, region and age." + "Learn about data sharing" + "Your location data is now shared with third parties" + "Your location data is now shared with third parties for advertising or marketing" + "{count,plural, =0{Updated within the last day}=1{Updated within the last day}other{Updated within # days}}" + "No updates at this time" + "Data sharing updates" + "Some apps changed the way that they may share your location data" + "Settings" diff --git a/PermissionController/res/values-en-rIN-car/strings.xml b/PermissionController/res/values-en-rIN-car/strings.xml new file mode 100644 index 0000000000..b748d8e412 --- /dev/null +++ b/PermissionController/res/values-en-rIN-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "If an app is unused for a few months:\n\n• Permissions are removed to protect your data\n• Temporary files are removed to free up space" + diff --git a/PermissionController/res/values-en-rIN-v34/strings.xml b/PermissionController/res/values-en-rIN-v34/strings.xml new file mode 100644 index 0000000000..9ed0938365 --- /dev/null +++ b/PermissionController/res/values-en-rIN-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Security & privacy" + "Controls" + "Data" + "Health Connect" + "App permissions and data management" + diff --git a/PermissionController/res/values-en-rIN/strings.xml b/PermissionController/res/values-en-rIN/strings.xml index 9a506b6104..2ffb58b5ad 100644 --- a/PermissionController/res/values-en-rIN/strings.xml +++ b/PermissionController/res/values-en-rIN/strings.xml @@ -591,5 +591,36 @@ "Show a message when apps access text, images or other content that you’ve copied" "Show passwords" "Display characters briefly as you type" - "This app stated that it may share location data with third parties" + "This app stated that it may share your location data with third parties" + "Data sharing and location" + "Where data sharing info comes from" + "The developer provided info to ""%1$s"" about how this app shares data. It may update this info over time." + "The app may share location data for:" + "%1$s" + "Data sharing varies" + "Data practices may vary based on your app version, use, region and age. ""More about data sharing" + "Your location data" + "Change this app’s access in ""privacy settings" + "App functionality" + "Analytics" + "Developer communications" + "Advertising or marketing" + "Fraud prevention, security and compliance" + "Personalisation" + "Account management" + "Data safety" + "Location data may be shared" + "This app stated that it may share your location data with third parties" + "Data sharing updates for location" + "Review apps that changed the way that they may share your location data" + "These apps have changed the way that they may share your location data. They may not have shared it before or may now share it for advertising or marketing purposes." + "The developers of these apps provided info about their data-sharing practices to an app store. They may update it over time.\n\nData sharing practices may vary based on your app version, use, region and age." + "Learn about data sharing" + "Your location data is now shared with third parties" + "Your location data is now shared with third parties for advertising or marketing" + "{count,plural, =0{Updated within the last day}=1{Updated within the last day}other{Updated within # days}}" + "No updates at this time" + "Data sharing updates" + "Some apps changed the way that they may share your location data" + "Settings" diff --git a/PermissionController/res/values-en-rXC-car/strings.xml b/PermissionController/res/values-en-rXC-car/strings.xml new file mode 100644 index 0000000000..3061269d19 --- /dev/null +++ b/PermissionController/res/values-en-rXC-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎If an app is unused for a few months:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎• Permissions are removed to protect your data‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎• Temporary files are removed to free up space‎‏‎‎‏‎" + diff --git a/PermissionController/res/values-en-rXC-v34/strings.xml b/PermissionController/res/values-en-rXC-v34/strings.xml new file mode 100644 index 0000000000..93d4018a95 --- /dev/null +++ b/PermissionController/res/values-en-rXC-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎Security & privacy‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎Controls‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎Data‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎Health Connect‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎App permissions and data management‎‏‎‎‏‎" + diff --git a/PermissionController/res/values-en-rXC/strings.xml b/PermissionController/res/values-en-rXC/strings.xml index 28888e35d8..bb3a5cdd18 100644 --- a/PermissionController/res/values-en-rXC/strings.xml +++ b/PermissionController/res/values-en-rXC/strings.xml @@ -591,5 +591,36 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎Show a message when apps access text, images, or other content you’ve copied‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎Show passwords‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎Display characters briefly as you type‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‎This app stated it may share location data with third parties‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎This app stated it may share your location data with third parties‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎Data sharing and location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎Where data sharing info comes from‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎The developer provided info to ‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎%1$s‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎ about how this app shares data. It may update this info over time.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎The app may share location data for:‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎%1$s‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎Data sharing varies‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎Data practices may vary based on your app version, use, region, and age. ‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎More about data sharing‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎Your location data‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎Change this app’s access in ‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎privacy settings‎‏‎‎‏‏‎""‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎App functionality‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎Analytics‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎Developer communications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎Advertising or marketing‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎Fraud prevention, security, and compliance‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎Personalization‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎Account management‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎Data safety‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎Location data may be shared‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎This app stated it may share your location data with third parties‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎Data sharing updates for location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎Review apps that changed the way they may share your location data‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎These apps have changed the way they may share your location data. They may not have shared it before, or may now share it for advertising or marketing purposes.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎The developers of these apps provided info about their data sharing practices to an app store. They may update it over time.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Data sharing practices may vary based on your app version, use, region, and age.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎Learn about data sharing‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎Your location data is now shared with third parties‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎Your location data is now shared with third parties for advertising or marketing‎‏‎‎‏‎" + "{count,plural, =0{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Updated within the last day‎‏‎‎‏‎}=1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Updated within the last day‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Updated within # days‎‏‎‎‏‎}}" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎No updates at this time‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎Data sharing updates‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎Some apps changed the way they may share your location data‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎Settings‎‏‎‎‏‎" diff --git a/PermissionController/res/values-es-car/strings.xml b/PermissionController/res/values-es-car/strings.xml new file mode 100644 index 0000000000..19639d89ae --- /dev/null +++ b/PermissionController/res/values-es-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Si una aplicación lleva varios meses sin usarse:\n\n• Se le quitan los permisos para proteger tus datos\n• Se eliminan sus archivos temporales para liberar espacio" + diff --git a/PermissionController/res/values-es-rUS-v33/strings.xml b/PermissionController/res/values-es-rUS-v33/strings.xml index 81d852e2e3..378eb3f290 100644 --- a/PermissionController/res/values-es-rUS-v33/strings.xml +++ b/PermissionController/res/values-es-rUS-v33/strings.xml @@ -28,8 +28,7 @@ "Elemento de la lista. %1$s. %2$s" "%1$s. %2$s" "Más alertas" - - + "Alertas descartadas" "{count,plural, =1{Expande y ve una alerta más}many{Expande y ve # de alertas más}other{Expande y ve # alertas más}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index 7369dc1989..52e2f212c8 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -591,5 +591,68 @@ "Mostrar un mensaje cuando las apps accedan a textos, imágenes y otro contenido que hayas copiado" "Mostrar contraseñas" "Mostrar caracteres brevemente mientras escribes" - "Esta app indicó que podría compartir datos de ubicación con terceros" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-es-v33/strings.xml b/PermissionController/res/values-es-v33/strings.xml index 0fdb1a1c36..9e75ccc9d8 100644 --- a/PermissionController/res/values-es-v33/strings.xml +++ b/PermissionController/res/values-es-v33/strings.xml @@ -28,8 +28,7 @@ "Elemento de lista. %1$s. %2$s." "%1$s. %2$s." "Más alertas" - - + "Alertas ignoradas" "{count,plural, =1{Ampliar para ver una alerta más}many{Ampliar para ver # alertas más}other{Ampliar para ver # alertas más}}" "Alerta. %1$s. %2$s." "Alerta. %1$s. %2$s. %3$s." diff --git a/PermissionController/res/values-es-v34/strings.xml b/PermissionController/res/values-es-v34/strings.xml new file mode 100644 index 0000000000..58e5bad86f --- /dev/null +++ b/PermissionController/res/values-es-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Seguridad y privacidad" + "Controles" + "Datos" + + + "Permisos de aplicaciones y gestión de datos" + diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index 3a0100aeac..c674ce4677 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -591,5 +591,44 @@ "Muestra un mensaje cuando las aplicaciones acceden a texto, imágenes u otro contenido que has copiado" "Mostrar contraseñas" "Muestra los caracteres brevemente mientras escribes" - "Esta aplicación ha indicado que puede compartir datos de ubicación con terceros" + "Esta aplicación ha indicado que es posible que comparta tus datos de ubicación con terceros" + + + "De dónde procede la información de compartición de datos" + + + "La app puede compartir datos de ubicación para:" + + + "La compartición de datos varía" + "Las prácticas relacionadas con datos varían en función de la versión de la aplicación, el modo en que la utilices, la región donde la uses y tu edad. ""Más información sobre la compartición de datos" + "Tus datos de ubicación" + "Cambia el acceso de esta aplicación en la ""configuración de privacidad" + "Funcionalidad de la aplicación" + + + "Comunicaciones del desarrollador" + "Publicidad o marketing" + "Prevención de fraudes, seguridad y cumplimiento" + + + "Gestión de cuentas" + "Seguridad de los datos" + "Tus datos de ubicación pueden compartirse" + "Esta aplicación ha indicado que es posible que comparta tus datos de ubicación con terceros" + "Cambios en la compartición de datos de ubicación" + "Consulta las aplicaciones que han cambiado la forma en la que pueden compartir tus datos de ubicación" + "Estas aplicaciones han cambiado la forma en la que pueden compartir tus datos de ubicación. Puede que no los hayan compartido antes, o que ahora lo hagan con fines publicitarios o de marketing." + + + "Más información sobre la compartición de datos" + + + + + "{count,plural, =0{Se ha actualizado en el último día}=1{Se ha actualizado en el último día}many{Se ha actualizado en los últimos # días}other{Se ha actualizado en los últimos # días}}" + "No hay novedades por el momento" + "Actualizaciones de compartición de datos" + "Algunas aplicaciones han cambiado la forma en la que pueden compartir tus datos de ubicación" + "Ajustes" diff --git a/PermissionController/res/values-et-car/strings.xml b/PermissionController/res/values-et-car/strings.xml new file mode 100644 index 0000000000..32043559c2 --- /dev/null +++ b/PermissionController/res/values-et-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Kui rakendust mõned kuud ei kasutata, juhtub järgmine.\n\n• Teie andmete kaitsmiseks eemaldatakse load.\n• Ruumi vabastamiseks eemaldatakse ajutised failid." + diff --git a/PermissionController/res/values-et-v33/strings.xml b/PermissionController/res/values-et-v33/strings.xml index 25aaf8b481..c9f32f251b 100644 --- a/PermissionController/res/values-et-v33/strings.xml +++ b/PermissionController/res/values-et-v33/strings.xml @@ -28,8 +28,7 @@ "Loendiüksus. %1$s. %2$s." "%1$s. %2$s" "Rohkem teavitusi" - - + "Hoiatused, millest on loobutud" "{count,plural, =1{Laiendage ja vaadake veel ühte hoiatust}other{Laiendage ja vaadake veel # hoiatust}}" "Hoiatus. %1$s. %2$s." "Hoiatus. %1$s. %2$s. %3$s." diff --git a/PermissionController/res/values-et-v34/strings.xml b/PermissionController/res/values-et-v34/strings.xml new file mode 100644 index 0000000000..6998773dd5 --- /dev/null +++ b/PermissionController/res/values-et-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Turvalisus ja privaatsus" + "Juhtelemendid" + "Andmed" + + + "Rakenduse load ja andmehaldus" + diff --git a/PermissionController/res/values-et/strings.xml b/PermissionController/res/values-et/strings.xml index 65ff6b6cc0..311c787b32 100644 --- a/PermissionController/res/values-et/strings.xml +++ b/PermissionController/res/values-et/strings.xml @@ -591,5 +591,44 @@ "Kui rakendused pääsevad juurde kopeeritud tekstile, piltidele või muule sisule, kuvatakse teade" "Kuva paroolid" "Sisestamisel kuvatakse hetkeks tähemärgid" - "See rakendus andis teada, et võib asukohaandmeid jagada kolmandate osapooltega" + "See rakendus andis teada, et võib jagada teie asukohaandmeid kolmandate osapooltega." + + + "Andmete jagamise teabe päritolu" + + + "Rakendus võib asukohaandmeid jagada järgmiseks." + + + "Andmete jagamine võib olla erinev" + "Andmetöötlustavad võivad oleneda teie piirkonnast ja vanusest ning rakenduse versioonist ja kasutusest. ""Lisateave andmete jagamise kohta" + "Teie asukohaandmed" + "Selle rakenduse juurdepääsu saate muuta ""privaatsusseadetes" + "Rakenduse funktsioonid" + + + "Teave arendajalt" + "Reklaamimine või turundus" + "Pettuste vältimine, turvalisus ja eeskirjade järgimine" + + + "Kontohaldus" + "Andmete ohutus" + "Asukohaandmeid võidakse jagada" + "See rakendus andis teada, et võib jagada teie asukohaandmeid kolmandate osapooltega." + "Andmete jagamise värskendused asukoha kohta" + "Vaadake üle rakendused, mis on muutnud teie asukohaandmete jagamise viisi" + "Need rakendused on muutnud teie asukohaandmete jagamise viisi. Võib-olla ei jaganud nad neid varem või hakkasid neid nüüd jagama reklaami- või turunduseesmärgil." + + + "Teave andmete jagamise kohta" + + + + + "{count,plural, =0{Värskendatud viimase päeva jooksul}=1{Värskendatud viimase päeva jooksul}other{Värskendatud # päeva jooksul}}" + "Hetkel värskendused puuduvad" + "Andmete jagamise värskendused" + "Mõni rakendus on muutnud teie asukohaandmete jagamise viisi" + "Seaded" diff --git a/PermissionController/res/values-eu-car/strings.xml b/PermissionController/res/values-eu-car/strings.xml new file mode 100644 index 0000000000..c3fe213b04 --- /dev/null +++ b/PermissionController/res/values-eu-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Aplikazio bat hilabete batzuez erabili ez bada:\n\n• Baimenak kenduko zaizkio zure datuak babesteko.\n• Aldi baterako fitxategiak kenduko dira tokia egiteko." + diff --git a/PermissionController/res/values-eu-v33/strings.xml b/PermissionController/res/values-eu-v33/strings.xml index 32fd07c0dd..6d5909c18e 100644 --- a/PermissionController/res/values-eu-v33/strings.xml +++ b/PermissionController/res/values-eu-v33/strings.xml @@ -28,8 +28,7 @@ "Zerrendako elementua. %1$s. %2$s" "%1$s. %2$s" "Alerta gehiago" - - + "Baztertutako alertak" "{count,plural, =1{Zabaldu eta ikusi beste alerta bat}other{Zabaldu eta ikusi # alerta gehiago}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-eu-v34/strings.xml b/PermissionController/res/values-eu-v34/strings.xml new file mode 100644 index 0000000000..1a514d2e82 --- /dev/null +++ b/PermissionController/res/values-eu-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Segurtasuna eta pribatutasuna" + "Kontrolatzeko aukerak" + "Datuak" + + + "Aplikazio-baimenak eta datuen kudeaketa" + diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index dd525b9aa4..2b4076aacd 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -591,5 +591,44 @@ "Erakutsi mezu bat aplikazio batek kopiatu dituzun testuak, irudiak edo edukiak atzitzen dituenean" "Erakutsi pasahitzak" "Idatzi ahala, erakutsi karaktereak laburki" - "Agian hirugarrenekin kokapen-datuak partekatuko dituela adierazi du aplikazioaren garatzaileak" + "Agian hirugarrenekin kokapen-datuak partekatuko dituela adierazi du aplikazioaren garatzaileak" + + + "Nondik dator datuak partekatzeko moduei buruzko informazioa?" + + + "Baliteke aplikazioak hauetarako partekatzea kokapen-datuak:" + + + "Datuak partekatzeko moduak hauen araberakoak dira:" + "Litekeena da datuen inguruko jardunbideak aplikazioaren bertsioaren, erabileraren, lurraldearen eta adinaren araberakoak izatea. ""Datuak partekatzeko moduei buruzko informazio gehiago" + "Kokapen-datuak" + "Aldatu aplikazioaren sarbidea ""pribatutasun-ezarpenetan" + "aplikazioaren funtzioak" + + + "garatzaileen komunikazioak" + "publizitatea edo marketina" + "iruzur-saihestea, segurtasuna eta arau-gordetzea" + + + "kontuaren kudeaketa" + "Datuen babesa" + "Baliteke kokapen-datuak partekatzea" + "Agian hirugarrenekin kokapen-datuak partekatuko dituela adierazi du aplikazioaren garatzaileak" + "Kokapen-datuak partekatzeko jardunbideen inguruko berritasunak" + "Berrikusi kokapen-datuak partekatzeko modua aldatu duten aplikazioak" + "Kokapen-datuak partekatzeko modua aldatu dute aplikazio hauek. Agian ez zuten daturik partekatzen lehen, edo baliteke orain publizitate- edo marketin-helburuetarako partekatzea." + + + "Lortu datuak partekatzeko jardunbideei buruzko informazio gehiago" + + + + + "{count,plural, =0{Atzo jaso ziren berritasunak}=1{Atzo jaso ziren berritasunak}other{Azken # egunetan eguneratuta}}" + "Une honetan, ez dago berritasunik" + "Datuak partekatzeko moduen inguruko berritasunak" + "Kokapen-datuak partekatzeko modua aldatu dute aplikazio batzuek" + "Ezarpenak" diff --git a/PermissionController/res/values-fa-car/strings.xml b/PermissionController/res/values-fa-car/strings.xml new file mode 100644 index 0000000000..64e7a1cf14 --- /dev/null +++ b/PermissionController/res/values-fa-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "اگر برنامه‌ای برای چند ماه استفاده نشود:\n\n• برای محافظت از داده‌هایتان، اجازه‌ها برداشته می‌شوند\n• برای آزادسازی فضا، فایل‌های موقت حذف می‌شوند" + diff --git a/PermissionController/res/values-fa-v33/strings.xml b/PermissionController/res/values-fa-v33/strings.xml index 196922295f..cf0975e4a7 100644 --- a/PermissionController/res/values-fa-v33/strings.xml +++ b/PermissionController/res/values-fa-v33/strings.xml @@ -28,8 +28,7 @@ "مورد فهرست. %1$s. %2$s" "%1$s. %2$s" "هشدارهای بیشتر" - - + "هشدارهای ردشده" "{count,plural, =1{گسترده کردن و دیدن یک هشدار دیگر}one{گسترده کردن و دیدن # هشدار دیگر}other{گسترده کردن و دیدن # هشدار دیگر}}" "هشدار. %1$s. %2$s" "هشدار. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-fa-v34/strings.xml b/PermissionController/res/values-fa-v34/strings.xml new file mode 100644 index 0000000000..efc196b468 --- /dev/null +++ b/PermissionController/res/values-fa-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "امنیت و حریم خصوصی" + "کنترل‌ها" + "داده‌ها" + + + "اجازه‌های برنامه و مدیریت داده" + diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index e9ca316e00..60637c97d0 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -591,5 +591,44 @@ "وقتی برنامه‌ها به نوشتار، تصویر، یا محتوای دیگری که کپی کرده‌اید دسترسی پیدا می‌کنند، پیامی نشان داده می‌شود" "نمایش گذرواژه‌ها" "همان‌طور که تایپ می‌کنید، نویسه‌ها را برای مدت کوتاهی نشان می‌دهد" - "این برنامه اعلام کرده است که ممکن است داده‌های مکان را با اشخاص ثالث هم‌رسانی کند" + "این برنامه اعلام کرده است که ممکن است داده‌های مکانتان را با اشخاص ثالث هم‌رسانی کند" + + + "اطلاعات هم‌رسانی داده از کجا می‌آید" + + + "برنامه شاید داده‌های مکان را به این دلایل هم‌رسانی کند:" + + + "روش‌های هم‌رسانی داده متفاوت است" + "شیوه‌های مدیریت داده ممکن است براساس نسخه برنامه، نحوه استفاده، منطقه، و سن کاربر متفاوت باشد. ""اطلاعات بیشتر درباره هم‌رسانی داده‌ها" + "داده‌های مکان شما" + "دسترسی این برنامه را در ""تنظیمات حریم خصوصی"" تغییر دهید" + "قابلیت‌های برنامه" + + + "ارتباطات توسعه‌دهنده برنامه" + "تبلیغات یا بازاریابی" + "تبعیت از خط‌مشی‌ها، امنیت، و جلوگیری از تقلب" + + + "مدیریت حساب" + "ایمنی داده" + "داده‌های مکان ممکن است هم‌رسانی شود" + "این برنامه اعلام کرده است که ممکن است داده‌های مکانتان را با اشخاص ثالث هم‌رسانی کند" + "به‌روزرسانی‌های مربوط به هم‌رسانی داده‌های مکان" + "برنامه‌هایی که روش هم‌رسانی داده‌های مکان شما را تغییر داده‌اند مرور کنید" + "این برنامه‌ها روش هم‌رسانی داده‌های مکان شما را تغییر داده‌اند. شاید قبلاً آن را هم‌رسانی نکرده باشند، یا شاید اکنون آن را برای اهداف تبلیغاتی یا بازاریابی هم‌رسانی کنند." + + + "آشنایی با هم‌رسانی داده‌ها" + + + + + "{count,plural, =0{در روز گذشته به‌روزرسانی شده است}=1{در روز گذشته به‌روزرسانی شده است}one{در # روز به‌روزرسانی شده است}other{در # روز به‌روزرسانی شده است}}" + "درحال‌حاضر هیچ به‌روزرسانی‌ای وجود ندارد" + "به‌روزرسانی‌های هم‌رسانی داده" + "برخی‌از برنامه‌ها روش هم‌رسانی داده‌های مکان شما را تغییر داده‌اند" + "تنظیمات" diff --git a/PermissionController/res/values-fi-car/strings.xml b/PermissionController/res/values-fi-car/strings.xml new file mode 100644 index 0000000000..440c8ebf1f --- /dev/null +++ b/PermissionController/res/values-fi-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Jos sovellusta ei käytetä muutamaan kuukauteen:\n\n• Luvat poistetaan datasi suojaamiseksi\n• Väliaikaiset tiedostot poistetaan tilan vapauttamiseksi" + diff --git a/PermissionController/res/values-fi-v33/strings.xml b/PermissionController/res/values-fi-v33/strings.xml index ea628dbdb5..8fbf8b8c5a 100644 --- a/PermissionController/res/values-fi-v33/strings.xml +++ b/PermissionController/res/values-fi-v33/strings.xml @@ -28,8 +28,7 @@ "Listan osa. %1$s. %2$s" "%1$s. %2$s" "Lisää ilmoituksia" - - + "Hylätyt hälytykset" "{count,plural, =1{Laajenna ja katso yksi muu ilmoitus}other{Laajenna ja katso # muuta ilmoitusta}}" "Ilmoitus. %1$s. %2$s" "Ilmoitus. %1$s. %2$s %3$s" diff --git a/PermissionController/res/values-fi-v34/strings.xml b/PermissionController/res/values-fi-v34/strings.xml new file mode 100644 index 0000000000..b2a1923896 --- /dev/null +++ b/PermissionController/res/values-fi-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Tietoturva ja yksityisyys" + "Asetukset" + "Data" + + + "Sovellusluvat ja datan ylläpito" + diff --git a/PermissionController/res/values-fi/strings.xml b/PermissionController/res/values-fi/strings.xml index c84f2e4d1f..2c7a518f2c 100644 --- a/PermissionController/res/values-fi/strings.xml +++ b/PermissionController/res/values-fi/strings.xml @@ -591,5 +591,44 @@ "Näytä viesti, kun sovellukset käyttävät kopioimaasi tekstiä, kuvia tai muuta sisältöä" "Näytä salasanat" "Näytä kirjaimet hetkellisesti, kun kirjoitat" - "Sovellus on ilmoittanut, että se saattaa jakaa sijaintitietoja kolmansille osapuolille" + "Sovellus on ilmoittanut, että se saattaa jakaa sijaintitietoja kolmansille osapuolille" + + + "Mistä datan jakotiedot tulevat" + + + "Sijaintitietoja voidaan jakaa näihin tarkoituksiin" + + + "Datan jakaminen vaihtelee" + "Datakäytännöt voivat vaihdella sovellusversion, käytön, alueen ja iän mukaan. ""Lisätietoa datan jakamisesta" + "Sijaintitietosi" + "Muuta tämän sovelluksen pääsyoikeuksia ""yksityisyysasetuksissa" + "Sovelluksen toiminnot" + + + "Viestit kehittäjältä" + "Mainonta tai markkinointi" + "Petosten estäminen, tietoturva ja sääntöjenmukaisuus" + + + "Tiliasioiden hoitaminen" + "Dataturvallisuus" + "Sijaintitietoja voidaan jakaa" + "Sovellus on ilmoittanut, että se saattaa jakaa sijaintitietoja kolmansille osapuolille" + "Sijaintidatan jakamisen päivitykset" + "Tarkista sovellukset, jotka ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja" + "Nämä sovellukset ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja. Ne eivät ehkä ole jakaneet niitä aiemmin tai ne saattavat nyt jakaa niitä mainonta- tai markkinointitarkoituksiin." + + + "Lue lisää datan jakamisesta" + + + + + "{count,plural, =0{Päivitetty viime päivän aikana}=1{Päivitetty viime päivän aikana}other{Päivitetty # viime päivän aikana}}" + "Ei päivityksiä tällä hetkellä" + "Datan jaon päivitykset" + "Jotkin sovellukset ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja" + "Asetukset" diff --git a/PermissionController/res/values-fr-rCA-v33/strings.xml b/PermissionController/res/values-fr-rCA-v33/strings.xml index 325510da18..5886e77c26 100644 --- a/PermissionController/res/values-fr-rCA-v33/strings.xml +++ b/PermissionController/res/values-fr-rCA-v33/strings.xml @@ -28,8 +28,7 @@ "Élément de la liste. %1$s. %2$s" "%1$s. %2$s" "Plus d\'alertes" - - + "Alertes ignorées" "{count,plural, =1{Développez et affichez une autre alerte}one{Développez et affichez # autre alerte}many{Développez et affichez # d\'autres alertes}other{Développez et affichez # autres alertes}}" "Alerte. %1$s. %2$s" "Alerte. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml index de785009a1..2ac734074b 100644 --- a/PermissionController/res/values-fr-rCA/strings.xml +++ b/PermissionController/res/values-fr-rCA/strings.xml @@ -591,5 +591,68 @@ "Afficher un message lorsque les applications accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés" "Afficher les mots de passe" "Afficher les caractères brièvement pendant la saisie" - "Cette application indique qu\'elle peut partager des données de localisation avec des tiers" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-fr-v33/strings.xml b/PermissionController/res/values-fr-v33/strings.xml index 863f045fd3..37538c35a6 100644 --- a/PermissionController/res/values-fr-v33/strings.xml +++ b/PermissionController/res/values-fr-v33/strings.xml @@ -28,8 +28,7 @@ "Élément de liste. %1$s. %2$s." "%1$s : %2$s" "Autres alertes" - - + "Alertes ignorées" "{count,plural, =1{Développer et voir 1 autre alerte}one{Développer et voir # autre alerte}many{Développer et voir # autres alertes}other{Développer et voir # autres alertes}}" "Alerte. %1$s. %2$s" "Alerte. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml index 19ff27d2de..80d0e8dadd 100644 --- a/PermissionController/res/values-fr/strings.xml +++ b/PermissionController/res/values-fr/strings.xml @@ -591,5 +591,68 @@ "Afficher un message lorsque les applis accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés" "Afficher les mots de passe" "Afficher brièvement les caractères pendant la saisie" - "Cette appli a indiqué qu\'elle peut partager des données de localisation avec des tiers" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-gl-v33/strings.xml b/PermissionController/res/values-gl-v33/strings.xml index 9ed3e74733..85c1477bc8 100644 --- a/PermissionController/res/values-gl-v33/strings.xml +++ b/PermissionController/res/values-gl-v33/strings.xml @@ -28,8 +28,7 @@ "Elemento da lista. %1$s. %2$s" "%1$s. %2$s" "Máis alertas" - - + "Alertas pechadas" "{count,plural, =1{Despregar tarxeta e ver 1 alerta máis}other{Despregar tarxeta e ver # alertas máis}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-gl/strings.xml b/PermissionController/res/values-gl/strings.xml index ac3f1454f3..335e50d95d 100644 --- a/PermissionController/res/values-gl/strings.xml +++ b/PermissionController/res/values-gl/strings.xml @@ -591,5 +591,68 @@ "Mostra unha mensaxe cando as aplicacións acceden ao texto, ás imaxes ou ao contido que copiaches" "Mostrar contrasinais" "Mostra os caracteres brevemente mentres escribes" - "A aplicación indicou que é posible que comparta datos de localización con terceiros" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-gu-car/strings.xml b/PermissionController/res/values-gu-car/strings.xml new file mode 100644 index 0000000000..279dfd2209 --- /dev/null +++ b/PermissionController/res/values-gu-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "જો થોડા મહિના માટે કોઈ ઍપનો ઉપયોગ કરવામાં ન આવે, તો:\n\n• તમારો ડેટા સુરક્ષિત રાખવા માટે પરવાનગીઓ કાઢી લેવામાં આવે છે\n• સ્પેસ ખાલી કરવા માટે, હંગામી ફાઇલો કાઢી નાખવામાં આવે છે" + diff --git a/PermissionController/res/values-gu-v33/strings.xml b/PermissionController/res/values-gu-v33/strings.xml index b5a408fbd8..03b69095f4 100644 --- a/PermissionController/res/values-gu-v33/strings.xml +++ b/PermissionController/res/values-gu-v33/strings.xml @@ -28,8 +28,7 @@ "આઇટમ સૂચિબદ્ધ કરો. %1$s. %2$s" "%1$s. %2$s" "વધુ અલર્ટ" - - + "છોડી દીધેલા અલર્ટ" "{count,plural, =1{મોટું કરો અને વધુ એક અલર્ટ જુઓ}one{મોટું કરો અને વધુ # અલર્ટ જુઓ}other{મોટું કરો અને વધુ # અલર્ટ જુઓ}}" "અલર્ટ. %1$s. %2$s" "અલર્ટ. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-gu-v34/strings.xml b/PermissionController/res/values-gu-v34/strings.xml new file mode 100644 index 0000000000..4b1e266953 --- /dev/null +++ b/PermissionController/res/values-gu-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "સુરક્ષા અને પ્રાઇવસી" + "નિયંત્રણો" + "ડેટા" + + + "ઍપ પરવાનગીઓ અને ડેટા મેનેજમેન્ટ" + diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml index ac90db800e..87cd0d3f33 100644 --- a/PermissionController/res/values-gu/strings.xml +++ b/PermissionController/res/values-gu/strings.xml @@ -591,5 +591,44 @@ "જ્યારે ઍપ તમે કૉપિ કરેલી ટેક્સ્ટ, છબીઓ કે અન્ય કન્ટેન્ટનો ઍક્સેસ કરે, ત્યારે મેસેજ બતાવો" "પાસવર્ડ બતાવો" "તમે ટાઇપ કરો ત્યારે થોડા સમય માટે અક્ષરો બતાવો" - "આ ઍપ દ્વારા જણાવવામાં આવ્યું છે કે તે ત્રીજા પક્ષો સાથે લોકેશન ડેટા શેર કરી શકે છે" + "આ ઍપ દ્વારા જણાવવામાં આવ્યું છે કે તે ત્રીજા પક્ષો સાથે તમારો લોકેશન ડેટા શેર કરી શકે છે" + + + "ડેટા શેરિંગ સંબંધિત માહિતી ક્યાંથી આવે છે" + + + "ઍપ આ માટે લોકેશન ડેટા શેર કરી શકે છે:" + + + "ડેટા શેરિંગમાં ફેરફાર થતો રહે છે" + "તમારી ઍપનું વર્ઝન, તેનો ઉપયોગ, ઉપયોગ કરવાનો પ્રદેશ અને તમારી ઉંમરના આધારે ડેટાના નિયમો કદાચ અલગ-અલગ હોઈ શકે છે. ""ડેટા શેરિંગ વિશે વધુ" + "તમારો લોકેશન ડેટા" + "પ્રાઇવસી સેટિંગ""માં જઈને આ ઍપનો ઍક્સેસ બદલો" + "ઍપની કાર્યક્ષમતા" + + + "ડેવલપર સાથેની વાતચીતો" + "જાહેરાત અથવા માર્કેટિંગ" + "કપટ અટકાવવું, સુરક્ષા અને અનુપાલન" + + + "એકાઉન્ટ મેનેજમેન્ટ" + "ડેટા સલામતી" + "લોકેશન ડેટા શેર કરવામાં આવી શકે છે" + "આ ઍપ દ્વારા જણાવવામાં આવ્યું છે કે તે ત્રીજા પક્ષો સાથે તમારો લોકેશન ડેટા શેર કરી શકે છે" + "લોકેશન માટે ડેટા શેરિંગ સંબંધિત અપડેટ" + "તે ઍપનું રિવ્યૂ કરો જેમણે તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલી છે" + "આ ઍપ દ્વારા તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલવામાં આવી હોઈ શકે છે. તેઓએ તેને પહેલાં શેર કર્યો ન હોય એવું બની શકે છે અથવા હવે તેને જાહેરાત અથવા માર્કેટિંગ હેતુઓ માટે શેર કરી શકે છે." + + + "ડેટા શેરિંગ વિશે જાણો" + + + + + "{count,plural, =0{છેલ્લા દિવસમાં કરેલી અપડેટ}=1{છેલ્લા દિવસમાં કરેલી અપડેટ}one{# દિવસમાં કરેલી અપડેટ}other{# દિવસમાં કરેલી અપડેટ}}" + "અત્યારે કોઈ અપડેટ નથી" + "ડેટા શેરિંગ સંબંધિત અપડેટ" + "કેટલીક ઍપ દ્વારા તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલવામાં આવી હોઈ શકે છે" + "સેટિંગ" diff --git a/PermissionController/res/values-hi-car/strings.xml b/PermissionController/res/values-hi-car/strings.xml new file mode 100644 index 0000000000..ae37eae3f4 --- /dev/null +++ b/PermissionController/res/values-hi-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "अगर कुछ महीनों से किसी ऐप्लिकेशन का इस्तेमाल न किया गया हो, तो:\n\n• आपके डेटा को सुरक्षित रखने के लिए, उस ऐप्लिकेशन को दी गई अनुमतियां हटा दी जाती हैं\n• मेमोरी खाली करने के लिए, डिवाइस पर कुछ समय के लिए सेव की गई फ़ाइलें हटा दी जाती हैं" + diff --git a/PermissionController/res/values-hi-v33/strings.xml b/PermissionController/res/values-hi-v33/strings.xml index ff78667ed8..968b1112c6 100644 --- a/PermissionController/res/values-hi-v33/strings.xml +++ b/PermissionController/res/values-hi-v33/strings.xml @@ -28,8 +28,7 @@ "आइटम की सूची. %1$s. %2$s" "%1$s. %2$s" "ज़्यादा चेतावनियां" - - + "खारिज किए गए अलर्ट" "{count,plural, =1{कार्ड को बड़ा करके एक और सूचना देखें}one{कार्ड को बड़ा करके # और सूचना देखें}other{कार्ड को बड़ा करके # और सूचनाएं देखें}}" "चेतावनी. %1$s. %2$s" "चेतावनी. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-hi-v34/strings.xml b/PermissionController/res/values-hi-v34/strings.xml new file mode 100644 index 0000000000..665ece8bb9 --- /dev/null +++ b/PermissionController/res/values-hi-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "सुरक्षा और निजता" + "कंट्रोल" + "डेटा" + + + "ऐप्लिकेशन अनुमतियां और डेटा मैनेजमेंट" + diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index ab9fe4b4ec..1a1286ac07 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -591,5 +591,44 @@ "जब कोई ऐप्लिकेशन आपके कॉपी किए गए टेक्स्ट, इमेज या अन्य कॉन्टेंट को ऐक्सेस करे, तो मैसेज से इसकी सूचना पाएं" "पासवर्ड दिखाएं" "टाइप करते समय वर्ण दिखाएं" - "इस ऐप्लिकेशन ने बताया है कि यह जगह की जानकारी का डेटा, तीसरे पक्ष के साथ शेयर कर सकता है" + "इस ऐप्लिकेशन में बताया गया है कि यह तीसरे पक्ष के साथ जगह की जानकारी का डेटा शेयर कर सकता है" + + + "डेटा शेयर करने के तरीके की जानकारी यहां से मिलती है" + + + "ऐप जगह की जानकारी का डेटा इनके लिए शेयर करता है:" + + + "डेटा शेयर करने के अलग-अलग तरीके" + "डेटा शेयर करने के तरीके अलग-अलग हो सकते हैं. ये आपकी जगह, उम्र, ऐप्लिकेशन के वर्शन, और उसके इस्तेमाल के हिसाब से तय किए जाते हैं. ""डेटा शेयर करने के तरीके के बारे में ज़्यादा जानकारी" + "आपकी जगह की जानकारी का डेटा" + "निजता सेटिंग"" में जाकर, इस ऐप्लिकेशन को दी गई अनुमति में बदलाव किया जा सकता है" + "ऐप फ़ंक्शनैलिटी" + + + "डेवलपर कम्यूनिकेशन" + "विज्ञापन या मार्केटिंग" + "धोखाधड़ी रोकना, सुरक्षा, और नीतियों का पालन" + + + "खाते का मैनेजमेंट" + "डेटा की सुरक्षा" + "जगह की जानकारी का डेटा शेयर किया जा सकता है" + "इस ऐप्लिकेशन में बताया गया है कि यह तीसरे पक्ष के साथ जगह की जानकारी का डेटा शेयर कर सकता है" + "जगह की जानकारी का डेटा शेयर करने के तरीके के बारे में अपडेट" + "ऐसे ऐप्लिकेशन देखें जिन्होंने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है" + "इन ऐप्लिकेशन ने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है. ऐसा हो सकता है कि ये ऐप्लिकेशन पहले जगह की जानकारी का डेटा शेयर न करते हों या फिर अब विज्ञापन या मार्केटिंग के लिए यह डेटा शेयर किया हो." + + + "डेटा शेयर करने की नीतियों के बारे में जानें" + + + + + "{count,plural, =0{कल अपडेट किया गया}=1{कल अपडेट किया गया}one{# दिन के अंदर अपडेट किया गया}other{# दिनों के अंदर अपडेट किया गया}}" + "फ़िलहाल, कोई अपडेट उपलब्ध नहीं है" + "डेटा शेयर करने के तरीके के बारे में अपडेट" + "कुछ ऐप्लिकेशन ने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है" + "सेटिंग" diff --git a/PermissionController/res/values-hr-car/strings.xml b/PermissionController/res/values-hr-car/strings.xml new file mode 100644 index 0000000000..d228223410 --- /dev/null +++ b/PermissionController/res/values-hr-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ako se aplikacija ne koristi nekoliko mjeseci:\n\n• Dopuštenja se uklanjaju radi zaštite vaših podataka\n• Privremene datoteke uklanjaju se radi oslobađanja prostora" + diff --git a/PermissionController/res/values-hr-v34/strings.xml b/PermissionController/res/values-hr-v34/strings.xml new file mode 100644 index 0000000000..38499a5c3c --- /dev/null +++ b/PermissionController/res/values-hr-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Sigurnost i privatnost" + "Kontrole" + "Podaci" + "Health Connect" + "Dopuštenja aplikacije i upravljanje podacima" + diff --git a/PermissionController/res/values-hr/strings.xml b/PermissionController/res/values-hr/strings.xml index 9783f0210d..d9a73c18ac 100644 --- a/PermissionController/res/values-hr/strings.xml +++ b/PermissionController/res/values-hr/strings.xml @@ -591,5 +591,36 @@ "Primite poruku kad aplikacije pristupe tekstu, slikama ili drugom kopiranom sadržaju" "Prikaži zaporke" "Nakratko prikaži znakove tijekom unosa" - "Aplikacija je navela da može dijeliti podatke o lokaciji s trećim stranama" + "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Dijeljenje podataka i lokacija" + "Odakle potječe dijeljenje informacija" + "Razvojni programer je usluzi ""%1$s"" poslao informacije o načinu na koji aplikacija dijeli podatke. Te informacije s vremenom može ažurirati." + "Aplikacija može dijeliti podatke o lokaciji u ove svrhe:" + "%1$s" + "Dijeljenje podataka može se razlikovati" + "Postupanje s podacima može se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi. ""Više o dijeljenju podataka" + "Vaši podaci o lokaciji" + "Promijenite pristup aplikacije u ""postavkama privatnosti" + "funkcije aplikacije" + "Analitika" + "komunikacije s razvojnim programerom" + "oglašavanje ili marketing" + "sprječavanje prijevara, sigurnost i usklađenost" + "Prilagodba" + "upravljanje računom" + "Sigurnost podataka" + "Podaci o lokaciji mogu se dijeliti" + "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Ažuriranja dijeljenja podataka za lokaciju" + "Pregledajte aplikacije koje su promijenile način na koji mogu dijeliti vaše podatke o lokaciji" + "Ove su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji. Ranije ih možda nisu dijelile ili ih sada mogu dijeliti u svrhe oglašavanja ili marketinga." + "Razvojni programeri tih aplikacija su trgovini aplikacija poslali podatke o praksama dijeljenja podataka. S vremenom ih mogu ažurirati.\n\nPrakse dijeljenja podataka mogu se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi." + "Saznajte više o dijeljenju podataka" + "Podaci o lokaciji sada se dijele s trećim stranama" + "Podaci o lokaciji sada se dijele s trećim stranama radi oglašavanja ili marketinga" + "{count,plural, =0{Ažurirano tijekom posljednjeg dana}=1{Ažurirano tijekom posljednjeg dana}one{Ažurirano tijekom posljednjeg # dana}few{Ažurirano tijekom posljednja # dana}other{Ažurirano tijekom posljednjih # dana}}" + "Trenutačno nema promjena" + "Ažuriranja dijeljenja podataka" + "Neke su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji" + "Postavke" diff --git a/PermissionController/res/values-hu-car/strings.xml b/PermissionController/res/values-hu-car/strings.xml new file mode 100644 index 0000000000..afcda69806 --- /dev/null +++ b/PermissionController/res/values-hu-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ha nem használja néhány hónapig az adott alkalmazást:\n\n• Az adatok védelme érdekében eltávolítjuk az engedélyeket.\n• Tárhely felszabadítása érdekében eltávolítjuk az ideiglenes fájlokat." + diff --git a/PermissionController/res/values-hu-v33/strings.xml b/PermissionController/res/values-hu-v33/strings.xml index 0acd4d4a46..c5af47ac66 100644 --- a/PermissionController/res/values-hu-v33/strings.xml +++ b/PermissionController/res/values-hu-v33/strings.xml @@ -28,8 +28,7 @@ "Listaelem. %1$s. %2$s." "%1$s. %2$s" "Több értesítés" - - + "Elvetett értesítések" "{count,plural, =1{Ha kibontja, még egy értesítést láthat}other{Ha kibontja, még # értesítést láthat}}" "Figyelmeztetés. %1$s. %2$s." "Figyelmeztetés. %1$s. %2$s. %3$s." diff --git a/PermissionController/res/values-hu-v34/strings.xml b/PermissionController/res/values-hu-v34/strings.xml new file mode 100644 index 0000000000..d56054f471 --- /dev/null +++ b/PermissionController/res/values-hu-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Biztonság és adatvédelem" + "Vezérlők" + "Adatok" + + + "Alkalmazásengedélyek és adatkezelés" + diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index c842a9d100..a0e93eae49 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -591,5 +591,44 @@ "Üzenet megjelenítése, amikor alkalmazások férnek hozzá a vágólapra másolt szövegekhez, képekhez vagy más tartalmakhoz" "Jelszavak mutatása" "Gépelés közben rövid ideig megjeleníti a karaktereket" - "Az alkalmazás jelezte, hogy megoszthat helyadatokat harmadik felekkel" + "Az alkalmazás jelezte, hogy megoszthatja az Ön helyadatait harmadik felekkel" + + + "Az adatmegosztással kapcsolatos információ forrása" + + + "Az app helyadatokat oszthat meg az alábbi célból:" + + + "Az adatmegosztás változik" + "Az adatkezelési gyakorlat az alkalmazásverziótól, az alkalmazáshasználattól, a régiótól és életkortól függően változhat. ""További információ az adatmegosztásról""." + "Helyadatok" + "Az alkalmazás hozzáférésének módosítása az ""adatvédelmi beállításokban" + "Alkalmazásfunkciók" + + + "Fejlesztői közlemények" + "Hirdetés vagy marketing" + "Csalásmegelőzés, biztonság és megfelelőség" + + + "Fiókkezelés" + "Adatbiztonság" + "Az alkalmazás megoszthat helyadatokat" + "Az alkalmazás jelezte, hogy megoszthatja az Ön helyadatait harmadik felekkel" + "A helyadatok megosztását érintő frissítések" + "Áttekintheti az appokat, amelyek módosították, hogy miként oszthatják meg a helyadatait" + "Ezek az alkalmazások módosították, hogy miként oszthatják meg az Ön helyadatait. Előfordulhat, hogy korábban nem osztották meg az adatokat, illetve ezentúl hirdetési vagy marketing célokra oszthatják meg őket." + + + "További információ az adatmegosztásról" + + + + + "{count,plural, =0{Módosítva az elmúlt napon}=1{Módosítva az elmúlt napon}other{Módosítva # napon belül}}" + "Jelenleg nincs módosítás" + "Adatmegosztási frissítések" + "Egyes alkalmazások módosították, hogy miként oszthatják meg az Ön helyadatait" + "Beállítások" diff --git a/PermissionController/res/values-hy-v33/strings.xml b/PermissionController/res/values-hy-v33/strings.xml index 3b9ccd547e..4f3754c9c3 100644 --- a/PermissionController/res/values-hy-v33/strings.xml +++ b/PermissionController/res/values-hy-v33/strings.xml @@ -28,8 +28,7 @@ "Ցանկի տարր։ %1$s։ %2$s" "%1$s%2$s" "Այլ ծանուցումներ" - - + "Անտեսված ծանուցումներ" "{count,plural, =1{Ծավալել և տեսնել ևս մեկ զգուշացում}one{Ծավալել և տեսնել ևս # զգուշացում}other{Ծավալել և տեսնել ևս # զգուշացում}}" "Ծանուցում: %1$s: %2$s" "Ծանուցում: %1$s: %2$s: %3$s" diff --git a/PermissionController/res/values-hy/strings.xml b/PermissionController/res/values-hy/strings.xml index 306a3ba79e..5dfc280b9e 100644 --- a/PermissionController/res/values-hy/strings.xml +++ b/PermissionController/res/values-hy/strings.xml @@ -591,5 +591,68 @@ "Ցուցադրել հաղորդագրություն, երբ հավելվածներին հասանելի են դառնում ձեր պատճենած տեքստը, պատկերները կամ այլ բովանդակություն" "Ցուցադրել գաղտնաբառերը" "Տեքստ մուտքագրելիս կարճ ժամանակով ցուցադրել գրանշանները" - "Այս հավելվածը կարող է երրորդ կողմերի հետ կիսվել տեղադրության տվյալներով" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-in-car/strings.xml b/PermissionController/res/values-in-car/strings.xml new file mode 100644 index 0000000000..eb89e86ac0 --- /dev/null +++ b/PermissionController/res/values-in-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Jika aplikasi tidak digunakan selama beberapa bulan:\n\n• Izin akan dihapus untuk melindungi data Anda\n• File sementara akan dihapus untuk mengosongkan ruang penyimpanan" + diff --git a/PermissionController/res/values-in-v33/strings.xml b/PermissionController/res/values-in-v33/strings.xml index 014dba5b07..5ed7c755e5 100644 --- a/PermissionController/res/values-in-v33/strings.xml +++ b/PermissionController/res/values-in-v33/strings.xml @@ -28,8 +28,7 @@ "Item daftar. %1$s. %2$s" "%1$s. %2$s" "Peringatan lainnya" - - + "Peringatan yang ditutup" "{count,plural, =1{Luaskan untuk melihat satu peringatan lain}other{Luaskan untuk melihat # peringatan lain}}" "Notifikasi. %1$s. %2$s" "Notifikasi. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-in-v34/strings.xml b/PermissionController/res/values-in-v34/strings.xml new file mode 100644 index 0000000000..bead32a1a5 --- /dev/null +++ b/PermissionController/res/values-in-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Keamanan & privasi" + "Kontrol" + "Data" + + + "Izin aplikasi dan pengelolaan data" + diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml index 204422995e..d8d424a351 100644 --- a/PermissionController/res/values-in/strings.xml +++ b/PermissionController/res/values-in/strings.xml @@ -591,5 +591,44 @@ "Menampilkan pesan saat aplikasi mengakses teks, gambar, atau konten lainnya yang telah Anda salin" "Tampilkan sandi" "Menampilkan karakter sejenak saat Anda mengetik" - "Aplikasi ini menyatakan bahwa aplikasi mungkin membagikan data lokasi ke pihak ketiga" + "Aplikasi ini menyatakan bahwa aplikasi mungkin membagikan data lokasi Anda kepada pihak ketiga" + + + "Asal info berbagi data" + + + "Aplikasi mungkin membagikan data lokasi untuk:" + + + "Berbagi data berbeda-beda" + "Praktik data dapat berbeda-beda berdasarkan versi aplikasi, penggunaan, wilayah, dan usia Anda. ""Selengkapnya tentang berbagi data" + "Data lokasi Anda" + "Ubah akses aplikasi ini di ""setelan privasi" + "Fungsi aplikasi" + + + "Komunikasi developer" + "Iklan atau pemasaran" + "Pencegahan penipuan, keamanan, dan kepatuhan" + + + "Pengelolaan akun" + "Keamanan data" + "Data lokasi mungkin dibagikan" + "Aplikasi ini menyatakan bahwa aplikasi mungkin membagikan data lokasi Anda kepada pihak ketiga" + "Pembaruan berbagi data untuk lokasi" + "Tinjau aplikasi yang mengubah caranya untuk dapat membagikan data lokasi Anda" + "Aplikasi ini telah mengubah caranya untuk dapat membagikan data lokasi Anda. Aplikasi mungkin sebelumnya tidak membagikan data, atau mungkin kini membagikan data untuk tujuan iklan atau pemasaran." + + + "Pelajari berbagi data" + + + + + "{count,plural, =0{Diperbarui kemarin}=1{Diperbarui kemarin}other{Diperbarui dalam # hari}}" + "Tidak ada pembaruan saat ini" + "Pembaruan berbagi data" + "Beberapa aplikasi dapat mengubah cara berbagi data lokasi Anda" + "Setelan" diff --git a/PermissionController/res/values-is-car/strings.xml b/PermissionController/res/values-is-car/strings.xml new file mode 100644 index 0000000000..a264ba6495 --- /dev/null +++ b/PermissionController/res/values-is-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ef forrit er ekki notað í nokkra mánuði:\n\n• Heimildir eru fjarlægðar til að vernda gögnin þín\n• Tímabundnar skrár eru fjarlægðar til að losa um pláss" + diff --git a/PermissionController/res/values-is-v33/strings.xml b/PermissionController/res/values-is-v33/strings.xml index caf5626149..20826e01be 100644 --- a/PermissionController/res/values-is-v33/strings.xml +++ b/PermissionController/res/values-is-v33/strings.xml @@ -28,8 +28,7 @@ "Listaatriði. %1$s. %2$s" "%1$s. %2$s" "Fleiri tilkynningar" - - + "Hunsaðar viðvaranir" "{count,plural, =1{Stækka og sjá eina viðvörun í viðbót}one{Stækka og sjá # viðvörun í viðbót}other{Stækka og sjá # viðvaranir í viðbót}}" "Viðvörun. %1$s. %2$s" "Viðvörun. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-is-v34/strings.xml b/PermissionController/res/values-is-v34/strings.xml new file mode 100644 index 0000000000..6baf41d3f0 --- /dev/null +++ b/PermissionController/res/values-is-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Öryggi og persónuvernd" + "Stýringar" + "Gögn" + + + "Forritsheimildir og gagnaumsjón" + diff --git a/PermissionController/res/values-is/strings.xml b/PermissionController/res/values-is/strings.xml index f3ec424ce9..6c2bb41eda 100644 --- a/PermissionController/res/values-is/strings.xml +++ b/PermissionController/res/values-is/strings.xml @@ -591,5 +591,44 @@ "Birta skilaboð þegar forrit fá aðgang að texta, myndum eða öðru efni sem þú hefur afritað" "Sýna aðgangsorð" "Birta stafi í stutta stund þegar þú skrifar" - "Þetta forrit gaf til kynna að það kunni að deila staðsetningargögnum með þriðju aðilum" + "Þetta forrit gaf til kynna að það kunni að deila staðsetningargögnum frá þér með þriðju aðilum" + + + "Hvaðan koma upplýsingar um gagnadeilingu" + + + "Forritið kann að deila staðsetningargögnum til að:" + + + "Gagnadeiling er mismunandi" + "Gagnameðhöndlun getur verið breytileg miðað við útgáfu forritsins, notkun, svæði og aldur notandans. ""Nánar um gagnadeilingu" + "Staðsetningargögnin þín" + "Breyttu aðgangi þessa forrits í ""persónuverndarstillingunum" + "Forritseiginleikar" + + + "Samskipti við þróunaraðila" + "Auglýsingar eða markaðssetning" + "Svikavörn, öryggi og reglufylgni" + + + "Reikningsstjórnun" + "Gagnaöryggi" + "Staðsetningargögnum kann að vera deilt" + "Þetta forrit gaf til kynna að það kunni að deila staðsetningargögnum frá þér með þriðju aðilum" + "Uppfærslur um gagnadeilingu varðandi staðsetningu" + "Yfirfarðu forrit sem breyttu því hvernig þau geta deilt staðsetningargögnunum þínum" + "Deiling staðsetningargagna hefur breyst í þessum forritum. Þau hafa hugsanlega ekki deilt gögnunum áður eða deila þeim nú í auglýsinga- eða markaðssetningartilgangi." + + + "Nánar um gagnadeilingu" + + + + + "{count,plural, =0{Uppfært innan síðasta sólarhrings}=1{Uppfært innan síðasta sólarhrings}one{Uppfært innan # dags}other{Uppfært innan # daga}}" + "Engar uppfærslur eins og er" + "Gagnadeilingaruppfærslur" + "Deiling staðsetningargagna hefur breyst í sumum forritum" + "Stillingar" diff --git a/PermissionController/res/values-it-car/strings.xml b/PermissionController/res/values-it-car/strings.xml new file mode 100644 index 0000000000..613b22478c --- /dev/null +++ b/PermissionController/res/values-it-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Se un\'app non viene usata per alcuni mesi:\n\n• Vengono rimosse le autorizzazioni per proteggere i tuoi dati\n• Vengono rimossi i file temporanei per liberare spazio" + diff --git a/PermissionController/res/values-it-v33/strings.xml b/PermissionController/res/values-it-v33/strings.xml index bd231e54bc..58b4f144fb 100644 --- a/PermissionController/res/values-it-v33/strings.xml +++ b/PermissionController/res/values-it-v33/strings.xml @@ -28,8 +28,7 @@ "Voce elenco. %1$s. %2$s" "%1$s. %2$s" "Altri avvisi" - - + "Avvisi chiusi" "{count,plural, =1{Espandi e visualizza un altro avviso}many{Espandi e visualizza altri # avvisi}other{Espandi e visualizza altri # avvisi}}" "Avviso. %1$s. %2$s" "Avviso. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-it-v34/strings.xml b/PermissionController/res/values-it-v34/strings.xml new file mode 100644 index 0000000000..264dbe3db1 --- /dev/null +++ b/PermissionController/res/values-it-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Sicurezza e privacy" + "Controlli" + "Dati" + "Connessione Salute" + "Autorizzazioni app e gestione dei dati" + diff --git a/PermissionController/res/values-it/strings.xml b/PermissionController/res/values-it/strings.xml index e6ded96f7a..8037fa945e 100644 --- a/PermissionController/res/values-it/strings.xml +++ b/PermissionController/res/values-it/strings.xml @@ -591,5 +591,36 @@ "Viene mostrato un messaggio quando le app accedono a testo, immagini o altri contenuti che hai copiato" "Mostra password" "Mostra brevemente i caratteri durante la digitazione" - "Questa app ha dichiarato che potrebbe condividere dati sulla posizione con terze parti" + "Questa app ha dichiarato che potrebbe condividere i tuoi dati sulla posizione con terze parti" + "Condivisione dei dati e posizione" + "Da dove provengono le informazioni sulla condivisione dei dati" + "Lo sviluppatore ha fornito informazioni relative alla modalità di condivisione dei dati in questa app su ""%1$s"". Le informazioni potrebbero essere aggiornate nel tempo." + "L\'app può condividere dati sulla posizione per:" + "%1$s" + "La condivisione dei dati varia" + "Le pratiche relative ai dati potrebbero variare in base alla versione e all\'utilizzo dell\'app, alla regione e all\'età. ""Scopri di più sulla condivisione dei dati" + "I tuoi dati sulla posizione" + "Cambia l\'accesso di questa app nelle ""impostazioni della privacy" + "Funzionalità dell\'app" + "Dati e analisi" + "Comunicazioni dello sviluppatore" + "Pubblicità o marketing" + "Prevenzione di attività fraudolente, sicurezza e conformità" + "Personalizzazione" + "Gestione dell\'account" + "Sicurezza dei dati" + "Potrebbero essere condivisi dati sulla posizione" + "Questa app ha dichiarato che potrebbe condividere i tuoi dati sulla posizione con terze parti" + "Aggiornamenti relativi alla condivisione dei dati sulla posizione" + "Controlla le app che hanno cambiato la modalità di condivisione dei tuoi dati sulla posizione" + "Le app che seguono hanno cambiato la modalità di condivisione dei tuoi dati sulla posizione. Potrebbero non averli condivisi in precedenza oppure ora potrebbero condividerli per scopi pubblicitari o di marketing." + "Gli sviluppatori di queste app hanno fornito informazioni relative alle loro prassi di condivisione dei dati su uno store. Le informazioni potrebbero essere aggiornate nel tempo.\n\nLe prassi di condivisione dei dati potrebbero variare in base alla versione e all\'utilizzo dell\'app, alla regione e all\'età." + "Scopri di più sulla condivisione dei dati" + "Ora i tuoi dati sulla posizione vengono condivisi con terze parti" + "Ora i tuoi dati sulla posizione vengono condivisi con terze parti per scopi pubblicitari o di marketing" + "{count,plural, =0{App aggiornate nelle ultime 24 ore}=1{App aggiornate nelle ultime 24 ore}many{App aggiornate negli ultimi # giorni}other{App aggiornate negli ultimi # giorni}}" + "Nessun aggiornamento al momento" + "Aggiornamenti relativi alla condivisione dei dati" + "Alcune app hanno cambiato la modalità di condivisione dei tuoi dati sulla posizione" + "Impostazioni" diff --git a/PermissionController/res/values-iw-car/strings.xml b/PermissionController/res/values-iw-car/strings.xml new file mode 100644 index 0000000000..bd035f2357 --- /dev/null +++ b/PermissionController/res/values-iw-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "אם האפליקציה לא בשימוש במשך מספר חודשים:\n\n• ההרשאות יוסרו כדי להגן על הנתונים שלך\n• הקבצים הזמניים יוסרו כדי לפנות מקום באחסון" + diff --git a/PermissionController/res/values-iw-v33/strings.xml b/PermissionController/res/values-iw-v33/strings.xml index d52cf29250..27f3ae8720 100644 --- a/PermissionController/res/values-iw-v33/strings.xml +++ b/PermissionController/res/values-iw-v33/strings.xml @@ -28,8 +28,7 @@ "פריט ברשימה. %1$s. %2$s" "%1$s. %2$s" "התראות נוספות" - - + "התראות שנסגרו" "{count,plural, =1{הרחבה וצפייה בהתראה נוספת אחת}one{הרחבה וצפייה ב-# התראות נוספות}two{הרחבה וצפייה ב-# התראות נוספות}other{הרחבה וצפייה ב-# התראות נוספות}}" "התראה. %1$s. %2$s" "התראה. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-iw-v34/strings.xml b/PermissionController/res/values-iw-v34/strings.xml new file mode 100644 index 0000000000..c9cb6e2f58 --- /dev/null +++ b/PermissionController/res/values-iw-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "אבטחה ופרטיות" + "אמצעי בקרה" + "נתונים" + + + "הרשאות הניתנות לאפליקציה וניהול נתונים" + diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml index 4f9e55d13f..cec9760cea 100644 --- a/PermissionController/res/values-iw/strings.xml +++ b/PermissionController/res/values-iw/strings.xml @@ -591,5 +591,44 @@ "הצגת הודעה בזמן גישה של אפליקציות לטקסט, לתמונות או לכל תוכן אחר שהעתקת" "הצגת סיסמאות" "התווים יופיעו לפרקי זמן קצרים בזמן ההקלדה" - "האפליקציה הזו הצהירה שהיא עשויה לשתף נתוני מיקום עם צדדים שלישיים" + "מפתחי האפליקציה הזו הצהירו שהאפליקציה עשויה לשתף את נתוני המיקום שלך עם צדדים שלישיים" + + + "מהיכן מגיע המידע לגבי שיתוף הנתונים" + + + "האפליקציה עשויה לשתף את נתוני המיקום למטרות הבאות:" + + + "שיתוף הנתונים עשוי להיות שונה" + "נוהלי הטיפול בנתונים עשויים להשתנות בהתאם לגרסת האפליקציה, לשימוש בה, לאזור ולגיל המשתמש. ""מידע נוסף על שיתוף נתונים" + "נתוני המיקום שלך" + "אפשר לשנות את רמת הגישה של האפליקציה הזו ב""הגדרות הפרטיות" + "תכונות האפליקציה" + + + "הודעות מהמפתחים" + "פרסום או שיווק" + "אבטחה, תאימות ומניעת הונאות" + + + "ניהול החשבון" + "אבטחת נתונים" + "ייתכן שנתוני המיקום ישותפו" + "מפתחי האפליקציה הזו הצהירו שהאפליקציה עשויה לשתף את נתוני המיקום שלך עם צדדים שלישיים" + "עדכונים לגבי שיתוף נתוני מיקום" + "בדיקת אפליקציות שהשתנה האופן שבו הן עשויות לשתף את נתוני המיקום" + "באפליקציות האלה, השתנה האופן שבו הן עשויות לשתף את נתוני המיקום שלך. יכול להיות שהן לא שיתפו את הנתונים האלה בעבר, או שעכשיו הן משתפות את נתוני המיקום לצורכי פרסום ושיווק." + + + "מידע נוסף על שיתוף נתונים" + + + + + "{count,plural, =0{עודכנו ביום האחרון}=1{עודכנו ביום האחרון}one{עודכנו ב-# הימים האחרונים}two{עודכנו ביומיים (#) האחרונים}other{עודכנו ב-# הימים האחרונים}}" + "אין עדכונים כרגע" + "עדכונים לגבי שיתוף הנתונים" + "בחלק מהאפליקציות, השתנה האופן שבו הן עשויות לשתף את נתוני המיקום שלך" + "הגדרות" diff --git a/PermissionController/res/values-ja-car/strings.xml b/PermissionController/res/values-ja-car/strings.xml new file mode 100644 index 0000000000..28b5f9f4f8 --- /dev/null +++ b/PermissionController/res/values-ja-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "数か月使用されていないアプリがある場合:\n\n• データを保護するため、権限が削除されます\n• 空き容量を増やすため、一時ファイルが削除されます" + diff --git a/PermissionController/res/values-ja-v33/strings.xml b/PermissionController/res/values-ja-v33/strings.xml index 3065d98616..1f2c431029 100644 --- a/PermissionController/res/values-ja-v33/strings.xml +++ b/PermissionController/res/values-ja-v33/strings.xml @@ -28,8 +28,7 @@ "リストアイテム。%1$s%2$s" "%1$s%2$s" "その他のアラート" - - + "削除されたアラート" "{count,plural, =1{1 個以上のアラートを開いて表示する}other{# 個以上のアラートを開いて表示する}}" "アラート。%1$s%2$s" "アラート。%1$s%2$s%3$s" diff --git a/PermissionController/res/values-ja-v34/strings.xml b/PermissionController/res/values-ja-v34/strings.xml new file mode 100644 index 0000000000..29c9c13902 --- /dev/null +++ b/PermissionController/res/values-ja-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "セキュリティとプライバシー" + "管理" + "データ" + + + "アプリの権限とデータ管理" + diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml index f4d9955584..9920559bf2 100644 --- a/PermissionController/res/values-ja/strings.xml +++ b/PermissionController/res/values-ja/strings.xml @@ -591,5 +591,44 @@ "クリップボードにコピーしたテキストや画像などにアプリがアクセスすると、メッセージで通知する" "パスワードの表示" "入力した文字を短い間表示する" - "このアプリは、位置情報をサードパーティと共有する可能性があります" + "このアプリは位置情報をサードパーティと共有することがあります" + + + "データ共有情報の提供元" + + + "このアプリが位置情報を共有する目的" + + + "さまざまなデータ共有方法" + "データの取り扱いは、アプリのバージョンや使用方法、ユーザーの年齢やお住まいの地域によって異なることがあります。""データ共有の詳細" + "ユーザーの位置情報" + "このアプリのアクセス権は""プライバシー設定""で変更できます" + "アプリの機能" + + + "デベロッパーによる情報伝達" + "広告、マーケティング" + "不正行為防止、セキュリティ、コンプライアンス" + + + "アカウント管理" + "データ セーフティ" + "位置情報が共有されることがあります" + "このアプリは位置情報をサードパーティと共有することがあります" + "位置情報を共有する方法の更新" + "位置情報を共有する方法が変更されたアプリを確認できます" + "これらのアプリで、位置情報を共有する方法が変更されました。以前は共有していなかったか、広告またはマーケティングの目的で共有されるようになった可能性があります。" + + + "データ共有の詳細" + + + + + "{count,plural, =0{更新日: 過去 1 日以内}=1{更新日: 過去 1 日以内}other{更新日: # 日以内}}" + "現時点で更新はありません" + "データ共有に関する更新" + "位置情報を共有する方法が変更されたアプリがあります" + "設定" diff --git a/PermissionController/res/values-ka-v33/strings.xml b/PermissionController/res/values-ka-v33/strings.xml index 75f51900a8..106c5c1135 100644 --- a/PermissionController/res/values-ka-v33/strings.xml +++ b/PermissionController/res/values-ka-v33/strings.xml @@ -28,8 +28,7 @@ "სიის ერთეული. %1$s. %2$s" "%1$s. %2$s" "სხვა გაფრთხილებები" - - + "დახურული გაფრთხილებები" "{count,plural, =1{გააფართოვეთ და ნახეთ კიდევ ერთი გაფრთხილება}other{გააფართოვეთ და იხილეთ კიდევ # გაფრთხილება}}" "გაფრთხილება. %1$s. %2$s" "გაფრთხილება. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml index a6742cad57..2e50149dd1 100644 --- a/PermissionController/res/values-ka/strings.xml +++ b/PermissionController/res/values-ka/strings.xml @@ -591,5 +591,68 @@ "როდესაც აპებს თქვენ მიერ კოპირებულ ტექსტზე, სურათებზე ან სხვა კონტენტზე აქვთ წვდომა, გამოჩნდება შეტყობინება" "პაროლების ჩვენება" "აკრეფისას სიმბოლოების ხანმოკლედ გამოჩენა" - "ამ აპის თანახმად, მან შესაძლოა გაუზიაროს მდებარეობის მონაცემები მესამე მხარეს" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-kk-v33/strings.xml b/PermissionController/res/values-kk-v33/strings.xml index ca75fd0699..63aaae5da9 100644 --- a/PermissionController/res/values-kk-v33/strings.xml +++ b/PermissionController/res/values-kk-v33/strings.xml @@ -28,8 +28,7 @@ "Тізім элементі. %1$s. %2$s" "%1$s. %2$s" "Басқа хабарландырулар" - - + "Жабылған хабарландырулар" "{count,plural, =1{Тағы бір хабарландыруды жаю және көру}other{Тағы # хабарландыруды жаю және көру}}" "Хабарландыру. %1$s. %2$s" "Хабарландыру. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml index 33aef0c079..c73ca1965d 100644 --- a/PermissionController/res/values-kk/strings.xml +++ b/PermissionController/res/values-kk/strings.xml @@ -591,5 +591,68 @@ "Қолданбалар көшірілген мәтінді, суреттерді немесе басқа контентті пайдаланған кезде хабар көрсету" "Құпия сөздерді көрсету" "Таңбалар терілген кезде аз уақыт көрсетіледі." - "Бұл қолданба геодеректі үшінші тараптармен бөлісуі мүмкін екенін мәлімдеді." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-km-v33/strings.xml b/PermissionController/res/values-km-v33/strings.xml index 9f38d222be..787f6f095c 100644 --- a/PermissionController/res/values-km-v33/strings.xml +++ b/PermissionController/res/values-km-v33/strings.xml @@ -28,8 +28,7 @@ "រាយ​បញ្ជី​ធាតុ។ %1$s%2$s" "%1$s%2$s" "ការជូនដំណឹង​ច្រើនទៀត" - - + "ការជូន​ដំណឹងដែលបានច្រានចោល" "{count,plural, =1{ពង្រីកដើម្បីមើលការជូនដំណឹងមួយទៀត}other{ពង្រីកដើម្បីមើលការជូនដំណឹង # ទៀត}}" "ការជូន​ដំណឹង។ %1$s%2$s" "ការជូន​ដំណឹង។ %1$s%2$s%3$s" diff --git a/PermissionController/res/values-km/strings.xml b/PermissionController/res/values-km/strings.xml index 7bce05e905..b591b16a67 100644 --- a/PermissionController/res/values-km/strings.xml +++ b/PermissionController/res/values-km/strings.xml @@ -591,5 +591,68 @@ "បង្ហាញសារ នៅពេលកម្មវិធីចូលប្រើអត្ថបទ រូបភាព ឬខ្លឹមសារផ្សេងទៀតដែលអ្នកបានចម្លង" "បង្ហាញ​ពាក្យ​សម្ងាត់" "បង្ហាញ​តួអក្សរ​មួយភ្លែត​ខណៈ​ពេល​អ្នក​វាយ​បញ្ចូល" - "កម្មវិធីនេះបានបញ្ជាក់ថា វាអាចចែករំលែកទិន្នន័យទីតាំងជាមួយភាគីទីបី" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-kn-car/strings.xml b/PermissionController/res/values-kn-car/strings.xml new file mode 100644 index 0000000000..bdccd22c57 --- /dev/null +++ b/PermissionController/res/values-kn-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ಆ್ಯಪ್ ಒಂದನ್ನು ಕೆಲ ತಿಂಗಳ ಕಾಲ ಬಳಸದೇ ಇದ್ದರೆ:\n\n• ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸಲು ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ\n• ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು ತಾತ್ಕಾಲಿಕ ಫೈಲ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ" + diff --git a/PermissionController/res/values-kn-v33/strings.xml b/PermissionController/res/values-kn-v33/strings.xml index 6473eddbf3..f59ef274e8 100644 --- a/PermissionController/res/values-kn-v33/strings.xml +++ b/PermissionController/res/values-kn-v33/strings.xml @@ -28,8 +28,7 @@ "ಪಟ್ಟಿ ಐಟಂ. %1$s. %2$s" "%1$s. %2$s" "ಇನ್ನಷ್ಟು ಎಚ್ಚರಿಕೆಗಳು" - - + "ವಜಾಗೊಳಿಸಿದ ಎಚ್ಚರಿಕೆಗಳು" "{count,plural, =1{ವಿಸ್ತರಿಸಿ ಮತ್ತು ಇನ್ನೊಂದು ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}" "ಎಚ್ಚರಿಕೆ. %1$s. %2$s" "ಎಚ್ಚರಿಕೆ. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-kn-v34/strings.xml b/PermissionController/res/values-kn-v34/strings.xml new file mode 100644 index 0000000000..65bc478111 --- /dev/null +++ b/PermissionController/res/values-kn-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "ಭದ್ರತೆ ಮತ್ತು ಗೌಪ್ಯತೆ" + "ಕಂಟ್ರೋಲ್‌ಗಳು" + "ಡೇಟಾ" + + + "ಆ್ಯಪ್ ಅನುಮತಿಗಳು ಮತ್ತು ಡೇಟಾ ನಿರ್ವಹಣೆ" + diff --git a/PermissionController/res/values-kn/strings.xml b/PermissionController/res/values-kn/strings.xml index 0dab7a111d..1ff5fa00b6 100644 --- a/PermissionController/res/values-kn/strings.xml +++ b/PermissionController/res/values-kn/strings.xml @@ -591,5 +591,44 @@ "ನೀವು ನಕಲಿಸಿರುವ ಪಠ್ಯ, ಚಿತ್ರಗಳು ಅಥವಾ ಇತರ ವಿಷಯವನ್ನು ಆ್ಯಪ್‌ಗಳು ಪ್ರವೇಶಿಸಿದಾಗ ಸಂದೇಶವೊಂದನ್ನು ತೋರಿಸಿ" "ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ತೋರಿಸಿ" "ನೀವು ಟೈಪ್ ಮಾಡಿದಂತೆ ಅಕ್ಷರಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಪ್ರದರ್ಶಿಸಿ" - "ಈ ಆ್ಯಪ್ ಥರ್ಡ್ ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಎಂದು ಉಲ್ಲೇಖಿಸಿದೆ" + "ಈ ಆ್ಯಪ್, ಥರ್ಡ್-ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಎಂದು ತಿಳಿಸಿದೆ" + + + "ಡೇಟಾ ಹಂಚಿಕೆಯ ಮಾಹಿತಿಯು ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ" + + + "ಆ್ಯಪ್, ಇವುಗಳಿಗಾಗಿ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು:" + + + "ಡೇಟಾ ಹಂಚಿಕೆ ಬದಲಾಗುತ್ತದೆ" + "ನಿಮ್ಮ ಆ್ಯಪ್‌ನ ಆವೃತ್ತಿ, ಬಳಕೆ, ಪ್ರದೇಶ ಮತ್ತು ವಯಸ್ಸನ್ನು ಆಧರಿಸಿ ಡೇಟಾ ನಿರ್ವಹಣಾ ಅಭ್ಯಾಸಗಳು ಬದಲಾಗಬಹುದು. ""ಡೇಟಾ ಹಂಚಿಕೆಯ ಕುರಿತು ಇನ್ನಷ್ಟು" + "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾ" + "ಗೌಪ್ಯತೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ"" ಈ ಆ್ಯಪ್‌ನ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಬದಲಾಯಿಸಿ" + "ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆ" + + + "ಡೆವಲಪರ್ ಸಂವಹನಗಳು" + "ಜಾಹೀರಾತು ಅಥವಾ ಮಾರ್ಕೆಟಿಂಗ್" + "ವಂಚನೆ ತಡೆಗಟ್ಟುವಿಕೆ, ಭದ್ರತೆ ಮತ್ತು ಅನುಸರಣೆ" + + + "ಖಾತೆಯ ನಿರ್ವಹಣೆ" + "ಡೇಟಾ ಸುರಕ್ಷತೆ" + "ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು" + "ಈ ಆ್ಯಪ್, ಥರ್ಡ್-ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಎಂದು ತಿಳಿಸಿದೆ" + "ಸ್ಥಳಕ್ಕಾಗಿ ಡೇಟಾ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ ಕುರಿತ ಅಪ್‌ಡೇಟ್‌ಗಳು" + "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ತಾವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ" + "ಈ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಅವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿವೆ. ಅವರು ಇದನ್ನು ಮೊದಲು ಹಂಚಿಕೊಂಡಿಲ್ಲದಿರಬಹುದು ಅಥವಾ ಈಗ ಅದನ್ನು ಜಾಹೀರಾತು ಅಥವಾ ಮಾರ್ಕೆಟಿಂಗ್ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಹಂಚಿಕೊಳ್ಳಬಹುದು." + + + "ಡೇಟಾ ಹಂಚಿಕೆಯ ಬಗ್ಗೆ ತಿಳಿಯಿರಿ" + + + + + "{count,plural, =0{ಕೊನೆಯ ದಿನದೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}=1{ಕೊನೆಯ ದಿನದೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}one{# ದಿನಗಳೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}other{# ದಿನಗಳೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}}" + "ಈ ಸಮಯದಲ್ಲಿ ಯಾವುದೇ ಅಪ್‌ಡೇಟ್‌ಗಳಿಲ್ಲ" + "ಡೇಟಾ ಹಂಚಿಕೆ ಅಪ್‌ಡೇಟ್‌ಗಳು" + "ಕೆಲವು ಆ್ಯಪ್‌ಗಳು, ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಅವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿವೆ" + "ಸೆಟ್ಟಿಂಗ್‌ಗಳು" diff --git a/PermissionController/res/values-ko-car/strings.xml b/PermissionController/res/values-ko-car/strings.xml new file mode 100644 index 0000000000..6493943a9f --- /dev/null +++ b/PermissionController/res/values-ko-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "앱을 몇 개월간 사용하지 않는 경우 다음 사항이 적용됩니다.\n\n• 데이터 보호를 위해 권한이 삭제됨\n• 여유 공간 확보를 위해 임시 파일이 삭제됨" + diff --git a/PermissionController/res/values-ko-v33/strings.xml b/PermissionController/res/values-ko-v33/strings.xml index 93d7f88841..b1fa2851f9 100644 --- a/PermissionController/res/values-ko-v33/strings.xml +++ b/PermissionController/res/values-ko-v33/strings.xml @@ -28,8 +28,7 @@ "목록 항목. %1$s. %2$s" "%1$s. %2$s" "알림 더보기" - - + "닫은 알림" "{count,plural, =1{펼쳐서 알림 1개 더보기}other{펼쳐서 알림 #개 더보기}}" "알림 %1$s. %2$s" "알림 %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ko-v34/strings.xml b/PermissionController/res/values-ko-v34/strings.xml new file mode 100644 index 0000000000..12cde7970a --- /dev/null +++ b/PermissionController/res/values-ko-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "보안 및 개인 정보 보호" + "관리" + "데이터" + + + "앱 권한 및 데이터 관리" + diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index f4df7f8d6d..fdb4b62e0c 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -591,5 +591,44 @@ "앱이 복사된 텍스트, 이미지 또는 기타 콘텐츠에 액세스할 때 메시지 표시" "비밀번호 표시" "입력할 때 잠깐 표시" - "앱에서 위치 데이터를 서드 파티와 공유할 수 있다고 명시했습니다." + "앱에서 위치 데이터를 서드 파티와 공유할 수 있다고 명시했습니다." + + + "데이터 공유 정보 출처" + + + "이 앱은 다음 목적으로 위치 데이터를 공유할 수 있습니다." + + + "데이터 공유 변동" + "데이터 관행은 앱 버전, 데이터 사용 방식, 사용자의 지역과 연령에 따라 다를 수 있습니다. ""데이터 공유 자세히 알아보기" + "내 위치 데이터" + "개인 정보 보호 설정""에서 앱의 액세스 권한 변경" + "앱 기능" + + + "개발자 커뮤니케이션" + "광고 또는 마케팅" + "사기 예방, 보안, 규정 준수" + + + "계정 관리" + "데이터 보안" + "위치 데이터가 공유될 수 있습니다." + "앱에서 위치 데이터를 서드 파티와 공유할 수 있다고 명시했습니다." + "위치 정보를 위한 데이터 공유 방법 업데이트" + "위치 데이터 공유 방법이 변경된 앱을 검토합니다." + "이러한 앱에서 위치 데이터 공유 방법이 변경되었습니다. 이전에 위치 데이터를 공유한 적이 없거나 이제 광고나 마케팅 목적으로 공유될 수 있습니다." + + + "데이터 공유 자세히 알아보기" + + + + + "{count,plural, =0{1일 이내에 업데이트됨}=1{1일 이내에 업데이트됨}other{#일 이내에 업데이트됨}}" + "현재 업데이트 없음" + "데이터 공유 업데이트" + "일부 앱에서 위치 데이터 공유 방법이 변경되었습니다." + "설정" diff --git a/PermissionController/res/values-ky-car/strings.xml b/PermissionController/res/values-ky-car/strings.xml new file mode 100644 index 0000000000..c7fbcf805c --- /dev/null +++ b/PermissionController/res/values-ky-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Эгер колдонмо бир нече ай колдонулбаса:\n\n• Маалыматыңызды коргоо үчүн уруксаттар жоюлат\n• Орун бошотуу үчүн убактылуу файлдар өчүрүлөт" + diff --git a/PermissionController/res/values-ky-v33/strings.xml b/PermissionController/res/values-ky-v33/strings.xml index 4cc1e61f1e..9332bcb294 100644 --- a/PermissionController/res/values-ky-v33/strings.xml +++ b/PermissionController/res/values-ky-v33/strings.xml @@ -28,8 +28,7 @@ "Тизмедеги нерсе. %1$s. %2$s" "%1$s. %2$s" "Дагы эскертүүлөр" - - + "Жабылган эскертүүлөр" "{count,plural, =1{Дагы бир эскертүүнү көрүү үчүн жайып көрсөтүү}other{Дагы # эскертүүнү көрүү үчүн жайып көрсөтүү}}" "Эскертүү. %1$s. %2$s" "Эскертүү. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ky-v34/strings.xml b/PermissionController/res/values-ky-v34/strings.xml new file mode 100644 index 0000000000..5cd03d54e3 --- /dev/null +++ b/PermissionController/res/values-ky-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Коопсуздук жана купуялык" + "Башкаруу элементтери" + "Маалымат" + + + "Колдонмонун уруксаттары жана маалыматтарды тескөө" + diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index b2520a5512..8b22cbf6fc 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -591,5 +591,44 @@ "Колдонмолор көчүрүлгөн текстти, сүрөттөрдү же башка нерселерди пайдаланганда билдирүүлөр көрүнөт" "Сырсөз көрүнсүн" "Сырсөз терилип жатканда символдор бир саамга көрүнөт" - "Бул колдонмо жайгашкан жер тууралуу маалыматты үчүнчү тараптар менен бөлүшүүгө уруксат сурап жатат" + "Бул колдонмо турган жериңиз тууралуу маалыматты үчүнчү тараптар менен бөлүшүүсү мүмкүн" + + + "Дайын-даректерди бөлүшүү тууралуу маалымат кайдан алынат" + + + "Колдонмо турган жериңиз тууралуу маалыматты төмөнкүлөр үчүн бөлүшүшү мүмкүн:" + + + "Маалымат ар кандай жолдор менен бөлүшүлөт" + "Дайын-даректерди иштетүү жолдору колдонмоңуздун версиясы, колдонулушу, аймак жана курагыңызга жараша айырмаланышы мүмкүн. ""Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" + "Турган жериңиз" + "Бул колдонмонун кирүү мүмкүнчүлүгүн ""купуялык параметрлеринен"" өзгөртүңүз" + "Колдонмонун функциялары" + + + "Иштеп чыгуучу менен байланышуу" + "Жарнамалоо же маркетинг" + "Шылуундуктан коргонуу, коопсуздук жана шайкештик" + + + "Аккаунтту тескөө" + "Маалыматтардын коопсуздугу" + "Турган жериңиз тууралуу маалымат бөлүшүлүп жатышы мүмкүн" + "Бул колдонмо турган жериңиз тууралуу маалыматты үчүнчү тараптар менен бөлүшүүсү мүмкүн" + "Турган жериңиз тууралуу маалыматты бөлүшүү ыкмасын жаңыртуу" + "Жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрткөн колдонмолорду карап чыгыңыз" + "Бул колдонмолор жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрттү. Алар бул маалыматты мурда бөлүшпөй же азыр жарнамалоо же маркетинг максаттарында бөлүшүшү мүмкүн." + + + "Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" + + + + + "{count,plural, =0{Кечээ жаңыртылды}=1{Кечээ жаңыртылды}other{# күн мурда жаңыртылды}}" + "Азырынча жаңыртуулар жок" + "Маалыматты бөлүшүү жаңыртуулары" + "Айрым колдонмолор турган жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрттү" + "Параметрлер" diff --git a/PermissionController/res/values-lo-car/strings.xml b/PermissionController/res/values-lo-car/strings.xml new file mode 100644 index 0000000000..35e5d69290 --- /dev/null +++ b/PermissionController/res/values-lo-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ຫາກບໍ່ມີການໃຊ້ແອັບເປັນເວລາສອງສາມເດືອນ, ລະບົບຈະດຳເນີນການຕໍ່ໄປນີ້:\n\n• ການອະນຸຍາດຈະຖືກລຶບອອກເພື່ອປົກປ້ອງຂໍ້ມູນຂອງທ່ານ\n• ລຶບໄຟລ໌ຊົ່ວຄາວອອກເພື່ອສ້າງພື້ນທີ່ຫວ່າງ" + diff --git a/PermissionController/res/values-lo-v33/strings.xml b/PermissionController/res/values-lo-v33/strings.xml index c8437e38cb..49110d6e18 100644 --- a/PermissionController/res/values-lo-v33/strings.xml +++ b/PermissionController/res/values-lo-v33/strings.xml @@ -28,8 +28,7 @@ "ລາຍການລາຍຊື່. %1$s. %2$s" "%1$s. %2$s" "ແຈ້ງເຕືອນເພີ່ມເຕີມ" - - + "ປິດການແຈ້ງເຕືອນແລ້ວ" "{count,plural, =1{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ 1 ລາຍການ}other{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ # ລາຍການ}}" "ແຈ້ງເຕືອນ. %1$s. %2$s" "ແຈ້ງເຕືອນ. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-lo-v34/strings.xml b/PermissionController/res/values-lo-v34/strings.xml new file mode 100644 index 0000000000..eb4cbefd32 --- /dev/null +++ b/PermissionController/res/values-lo-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "ຄວາມປອດໄພ ແລະ ຄວາມເປັນສ່ວນຕົວ" + "ການຄວບຄຸມ" + "ຂໍ້ມູນ" + + + "ການອະນຸຍາດແອັບ ແລະ ການຈັດການຂໍ້ມູນ" + diff --git a/PermissionController/res/values-lo/strings.xml b/PermissionController/res/values-lo/strings.xml index e287c44298..45a43af700 100644 --- a/PermissionController/res/values-lo/strings.xml +++ b/PermissionController/res/values-lo/strings.xml @@ -591,5 +591,44 @@ "ສະແດງຂໍ້ຄວາມເມື່ອແອັບເຂົ້າເຖິງຂໍ້ຄວາມ, ຮູບພາບ ຫຼື ເນື້ອຫາອື່ນທີ່ທ່ານສຳເນົາໄວ້" "ສະແດງລະຫັດຜ່ານ" "ສະແດງຕົວອັກສອນເປັນເວລາສັ້ນໆໃນເວລາພິມ" - "ແອັບນີ້ລະບຸວ່າມັນອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ກັບພາກສ່ວນທີສາມ" + "ແອັບນີ້ລະບຸວ່າມັນອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ກັບພາກສ່ວນທີສາມ" + + + "ແຫຼ່ງທີ່ມາຂອງລາຍລະອຽດການແບ່ງປັນຂໍ້ມູນ" + + + "ແອັບນີ້ອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຍ້ອນເຫດຜົນຕໍ່ໄປນີ້:" + + + "ການແບ່ງປັນຂໍ້ມູນອາດແຕກຕ່າງກັນໄປ" + "ການເຝິກແອບຂໍ້ມູນອາດແຕກຕ່າງກັນໄປຕາມເວີຊັນຂອງແອັບ, ການນຳໃຊ້, ພາກພື້ນ ແລະ ອາຍຸຂອງທ່ານ. ""ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການແບ່ງປັນຂໍ້ມູນ" + "ຂໍ້ມູນສະຖານທີ່ຂອງທ່ານ" + "ປ່ຽນສິດເຂົ້າເຖິງຂອງແອັບນີ້ໃນ ""ການຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວ" + "ຟັງຊັນການນຳໃຊ້ແອັບ" + + + "ການສື່ສານຂອງນັກພັດທະນາ" + "ການໂຄສະນາ ຫຼື ການຕະຫຼາດ" + "ການປ້ອງກັນການສໍ້ໂກງ, ຄວາມປອດໄພ ແລະ ການປະຕິບັດຕາມ" + + + "ການຈັດການບັນຊີ" + "ຄວາມປອດໄພຂອງຂໍ້ຄວາມ" + "ອາດມີການແບ່ງປັນຂໍ້ມູນສະຖານທີ່" + "ແອັບນີ້ລະບຸວ່າມັນອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ກັບພາກສ່ວນທີສາມ" + "ການອັບເດດການແບ່ງປັນຂໍ້ມູນສະຖານທີ່" + "ກວດສອບແອັບທີ່ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານ" + "ແອັບເຫຼົ່ານີ້ໄດ້ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານແລ້ວ. ແອັບເຫຼົ່ານີ້ອາດບໍ່ເຄີຍແບ່ງປັນຂໍ້ມູນມາກ່ອນ ຫຼື ອາດແບ່ງປັນຂໍ້ມູນເພື່ອຈຸດປະສົງໃນການໂຄສະນາ ຫຼື ການຕະຫຼາດ." + + + "ສຶກສາກ່ຽວກັບການແບ່ງປັນຂໍ້ມູນ" + + + + + "{count,plural, =0{ໄດ້ອັບເດດພາຍໃນມື້ທີ່ຜ່ານມາ}=1{ໄດ້ອັບເດດພາຍໃນມື້ທີ່ຜ່ານມາ}other{ໄດ້ອັບເດດພາຍໃນ # ມື້ທີ່ຜ່ານມາ}}" + "ບໍ່ມີການອັບເດດໃນຂະນະນີ້" + "ການອັບເດດການແບ່ງປັນຂໍ້ມູນ" + "ບາງແອັບໄດ້ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານແລ້ວ" + "ການຕັ້ງຄ່າ" diff --git a/PermissionController/res/values-lt-car/strings.xml b/PermissionController/res/values-lt-car/strings.xml new file mode 100644 index 0000000000..7f6fa2de10 --- /dev/null +++ b/PermissionController/res/values-lt-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Jei programa nenaudojama kelis mėnesius:\n\n• pašalinami leidimai siekiant apsaugoti jūsų duomenis;\n• pašalinami laikinieji failai siekiant atlaisvinti vietos" + diff --git a/PermissionController/res/values-lt-v33/strings.xml b/PermissionController/res/values-lt-v33/strings.xml index 8d2100f7de..c23757a3b5 100644 --- a/PermissionController/res/values-lt-v33/strings.xml +++ b/PermissionController/res/values-lt-v33/strings.xml @@ -28,8 +28,7 @@ "Sąrašo elementas. %1$s. %2$s" "„%1$s“. %2$s" "Daugiau įspėjimų" - - + "Atsisakyta įspėjimų" "{count,plural, =1{Išskleiskite ir peržiūrėkite dar vieną įspėjimą}one{Išskleiskite ir peržiūrėkite dar # įspėjimą}few{Išskleiskite ir peržiūrėkite dar # įspėjimus}many{Išskleiskite ir peržiūrėkite dar # įspėjimo}other{Išskleiskite ir peržiūrėkite dar # įspėjimų}}" "Įspėjimas. %1$s. %2$s" "Įspėjimas. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-lt-v34/strings.xml b/PermissionController/res/values-lt-v34/strings.xml new file mode 100644 index 0000000000..32f0e13b49 --- /dev/null +++ b/PermissionController/res/values-lt-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sauga ir privatumas" + "Valdikliai" + "Duomenys" + + + "Programų leidimai ir duomenų valdymas" + diff --git a/PermissionController/res/values-lt/strings.xml b/PermissionController/res/values-lt/strings.xml index 76beded904..5e48f72ebd 100644 --- a/PermissionController/res/values-lt/strings.xml +++ b/PermissionController/res/values-lt/strings.xml @@ -591,5 +591,44 @@ "Rodyti pranešimą, kai programos pasiekia nukopijuotą tekstą, vaizdus ar kitą turinį" "Rodyti slaptažodžius" "Trumpai rodyti simbolius vedant tekstą" - "Ši programa nurodė, kad gali bendrinti vietovės duomenis su trečiosiomis šalimis" + "Ši programa nurodė, kad gali bendrinti vietovės duomenis su trečiosiomis šalimis" + + + "Iš kur gaunama duomenų bendrinimo informacija" + + + "Programoje bendrinami vietovės duomenys" + + + "Duomenų bendrinimas skiriasi" + "Duomenų praktika gali skirtis, atsižvelgiant į jūsų programos versiją, naudojimą, regioną ir amžių. ""Daugiau apie duomenų bendrinimą" + "Jūsų vietovės duomenys" + "Keiskite šios programos prieigą ""privatumo nustatymuose" + "Programos funkcijos" + + + "Kūrėjų komunikacija" + "Reklamavimas ar rinkodara" + "Apsauga nuo apgaulių, sauga ir taisyklių laikymasis" + + + "Paskyros valdymas" + "Duomenų sauga" + "Vietovės duomenys gali būti bendrinami" + "Ši programa nurodė, kad gali bendrinti vietovės duomenis su trečiosiomis šalimis" + "Duomenų bendrinimo atnaujinimai pagal vietovę" + "Peržiūrėkite programas, kuriose pakeisti vietovės duomenų bendrinimo metodai" + "Šiose programose pakeisti vietovės duomenų bendrinimo metodai Gali būti, kad anksčiau jie nebuvo bendrinami, arba dabar jie gali būti bendrinami reklamavimo ar rinkodaros tikslais." + + + "Sužinokite apie duomenų bendrinimą" + + + + + "{count,plural, =0{Atnaujinta per pastarąją dieną}=1{Atnaujinta per pastarąją dieną}one{Atnaujinta per pastarąją # dieną}few{Atnaujinta per pastarąsias # dienas}many{Atnaujinta per pastarąsias # dienos}other{Atnaujinta per pastarąsias # dienų}}" + "Šiuo metu nėra naujinių" + "Duomenų bendrinimo naujiniai" + "Kai kuriose programose pakeisti vietovės duomenų bendrinimo metodai" + "Nustatymai" diff --git a/PermissionController/res/values-lv-car/strings.xml b/PermissionController/res/values-lv-car/strings.xml new file mode 100644 index 0000000000..037c2047b3 --- /dev/null +++ b/PermissionController/res/values-lv-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ja kāda lietotne nav izmantota vairākus mēnešus:\n\n• tiek noņemtas atļaujas, lai aizsargātu jūsu datus;\n• tiek noņemti pagaidu faili, lai atbrīvotu vietu." + diff --git a/PermissionController/res/values-lv-v33/strings.xml b/PermissionController/res/values-lv-v33/strings.xml index 7d2bd882e7..04c57ed1a9 100644 --- a/PermissionController/res/values-lv-v33/strings.xml +++ b/PermissionController/res/values-lv-v33/strings.xml @@ -28,8 +28,7 @@ "Saraksta vienums. %1$s. %2$s" "%1$s. %2$s" "Citi brīdinājumi" - - + "Noraidītie brīdinājumi" "{count,plural, =1{Izvērsiet un skatiet vēl vienu brīdinājumu.}zero{Izvērsiet un skatiet vēl # brīdinājumus.}one{Izvērsiet un skatiet vēl # brīdinājumu.}other{Izvērsiet un skatiet vēl # brīdinājumus.}}" "Brīdinājums. %1$s. %2$s" "Brīdinājums. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-lv-v34/strings.xml b/PermissionController/res/values-lv-v34/strings.xml new file mode 100644 index 0000000000..fb20fc666c --- /dev/null +++ b/PermissionController/res/values-lv-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Drošība un konfidencialitāte" + "Vadīklas" + "Dati" + + + "Lietotņu atļaujas un datu pārvaldība" + diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml index 2f6d14649f..7e5312d62b 100644 --- a/PermissionController/res/values-lv/strings.xml +++ b/PermissionController/res/values-lv/strings.xml @@ -591,5 +591,44 @@ "Rādīt ziņojumu, kad lietotnes piekļūst jūsu nokopētajam tekstam, attēliem vai citam saturam" "Rādīt paroles" "Rakstot tiek īslaicīgi rādītas rakstzīmes" - "Lietotne norādīja, ka tā var kopīgot atrašanās vietas datus ar trešajām pusēm." + "Lietotne norādīja, ka tā var kopīgot atrašanās vietas datus ar trešajām pusēm." + + + "Datu kopīgošanas informācijas avots" + + + "Atrašanās vietas datu kopīgošanas nolūki lietotnē" + + + "Datu kopīgošana var atšķirties" + "Datu apstrāde var atšķirties atkarībā no lietotnes versijas un izmantojuma, kā arī jūsu reģiona un vecuma. ""Uzziniet vairāk par datu kopīgošanu." + "Jūsu atrašanās vietas dati" + "Varat mainīt šīs lietotnes piekļuvi ""konfidencialitātes iestatījumos""." + "Lietotnes funkcionalitāte" + + + "Izstrādātāja saziņa" + "Reklamēšana vai mārketings" + "Krāpšanas novēršana, drošība un atbilstības nodrošināšana" + + + "Konta pārvaldība" + "Datu drošība" + "Atrašanās vietas dati var tikt kopīgoti" + "Lietotne norādīja, ka tā var kopīgot atrašanās vietas datus ar trešajām pusēm." + "Atjauninājumi atrašanās vietas datu kopīgošanā" + "Pārskatiet lietotnes, kurās ir mainīti atrašanās vietas datu kopīgošanas veidi." + "Šajās lietotnēs ir mainīti atrašanās vietas datu kopīgošanas veidi. Varbūt tās iepriekš nekopīgoja šādus datus, bet varbūt tagad tos kopīgo reklamēšanas vai mārketinga nolūkos." + + + "Uzzināt vairāk par datu kopīgošanu" + + + + + "{count,plural, =0{Atjaunināta pēdējās diennakts laikā}=1{Atjaunināta pēdējās diennakts laikā}zero{Atjaunināta pēdējo # dienu laikā}one{Atjaunināta pēdējo # dienu laikā}other{Atjaunināta pēdējo # dienu laikā}}" + "Šobrīd nav atjauninājumu" + "Datu kopīgošanas atjauninājumi" + "Dažās lietotnēs tika mainīti atrašanās vietas datu kopīgošanas veidi." + "Iestatījumi" diff --git a/PermissionController/res/values-mk-v33/strings.xml b/PermissionController/res/values-mk-v33/strings.xml index d725565b92..35431e7198 100644 --- a/PermissionController/res/values-mk-v33/strings.xml +++ b/PermissionController/res/values-mk-v33/strings.xml @@ -28,8 +28,7 @@ "Ставка на списокот. %1$s. %2$s" "%1$s. %2$s" "Повеќе предупредувања" - - + "Отфрлени известувања" "{count,plural, =1{Проширете и видете уште едно предупредување}one{Проширете и видете уште # предупредување}other{Проширете и видете уште # предупредувањa}}" "Предупредување. %1$s. %2$s" "Предупредување. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-mk/strings.xml b/PermissionController/res/values-mk/strings.xml index 6ee8550dd9..0150255049 100644 --- a/PermissionController/res/values-mk/strings.xml +++ b/PermissionController/res/values-mk/strings.xml @@ -591,5 +591,68 @@ "Нека се прикажува известување кога апликациите пристапуваат до текст, слики или други содржини што сте ги копирале" "Прикажувај ги лозинките" "Прикажувај ги знаците накратко додека пишувам" - "Апликацијава изјави дека можеби ќе споделува податоци за локацијата со трети страни" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-ml-car/strings.xml b/PermissionController/res/values-ml-car/strings.xml new file mode 100644 index 0000000000..e1323c605c --- /dev/null +++ b/PermissionController/res/values-ml-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ഒരു ആപ്പ് കുറച്ച് മാസങ്ങളായി ഉപയോഗിച്ചിട്ടില്ലെങ്കിൽ:\n\n• നിങ്ങളുടെ ഡാറ്റ സംരക്ഷിക്കാൻ അനുമതികൾ നീക്കം ചെയ്യും\n• ഇടമുണ്ടാക്കാൻ താൽക്കാലിക ഫയലുകൾ നീക്കം ചെയ്യും" + diff --git a/PermissionController/res/values-ml-v33/strings.xml b/PermissionController/res/values-ml-v33/strings.xml index 800dc48898..ecb6d449ae 100644 --- a/PermissionController/res/values-ml-v33/strings.xml +++ b/PermissionController/res/values-ml-v33/strings.xml @@ -28,8 +28,7 @@ "ലിസ്‌റ്റ് ഇനം. %1$s. %2$s" "%1$s. %2$s" "കൂടുതൽ മുന്നറിയിപ്പുകൾ" - - + "ഡിസ്‌മിസ് ചെയ്‌ത മുന്നറിയിപ്പുകൾ" "{count,plural, =1{വികസിപ്പിച്ച് ഒരു മുന്നറിയിപ്പ് കൂടി കാണുക}other{വികസിപ്പിച്ച് # മുന്നറിയിപ്പ് കൂടി കാണുക}}" "മുന്നറിയിപ്പ്. %1$s. %2$s" "മുന്നറിയിപ്പ്. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ml-v34/strings.xml b/PermissionController/res/values-ml-v34/strings.xml new file mode 100644 index 0000000000..f32a1da1fa --- /dev/null +++ b/PermissionController/res/values-ml-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "സുരക്ഷയും സ്വകാര്യതയും" + "നിയന്ത്രണങ്ങൾ" + "ഡാറ്റ" + "Health Connect" + "ആപ്പ് അനുമതികളും ഡാറ്റ മാനേജ് ചെയ്യലും" + diff --git a/PermissionController/res/values-ml/strings.xml b/PermissionController/res/values-ml/strings.xml index 33b2ba2522..4436bd8da0 100644 --- a/PermissionController/res/values-ml/strings.xml +++ b/PermissionController/res/values-ml/strings.xml @@ -591,5 +591,36 @@ "നിങ്ങൾ പകർത്തിയ ടെക്‌സ്‌റ്റോ ചിത്രങ്ങളോ മറ്റ് ഉള്ളടക്കമോ ആപ്പുകൾ ആക്‌സസ് ചെയ്യുമ്പോൾ ഒരു സന്ദേശം കാണിക്കുക" "പാസ്‌വേ‌ഡുകൾ കാണിക്കുക" "ടൈപ്പ് ചെയ്യുന്ന അക്ഷരങ്ങൾ പ്രദർശിപ്പിക്കുക" - "മൂന്നാം കക്ഷികളുമായി ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാമെന്ന് ഈ ആപ്പ് പ്രസ്താവിക്കുന്നു" + "മൂന്നാം കക്ഷികളുമായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാമെന്ന് ഈ ആപ്പ് വ്യക്തമാക്കിയിട്ടുണ്ട്" + "ഡാറ്റ പങ്കിടലും ലൊക്കേഷനും" + "ഡാറ്റ പങ്കിടുന്നതിനെ കുറിച്ചുള്ള വിവരങ്ങൾ ലഭിക്കുന്നത് എവിടെ നിന്നാണ്" + "ഈ ആപ്പ് എങ്ങനെയാണ് ഡാറ്റ പങ്കിടുന്നത് എന്നതിനെ കുറിച്ച് ഡെവലപ്പർ ""%1$s"" എന്നതിൽ വിവരങ്ങൾ നൽകിയിട്ടുണ്ട്. കാലക്രമേണ അവർ ഈ വിവരങ്ങൾ അപ്ഡേറ്റ് ചെയ്തേക്കാം." + "ഇവയ്ക്ക് ഈ ആപ്പ് ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാം:" + "%1$s" + "ഡാറ്റ പങ്കിടുന്നത് വ്യത്യാസപ്പെടുന്നു" + "ഡാറ്റ പങ്കിടുന്ന രീതികൾ നിങ്ങളുടെ പ്രായവും ആപ്പിന്റെ പതിപ്പും ഉപയോഗവും പ്രദേശവും അടിസ്ഥാനമാക്കി വ്യത്യാസപ്പെടാം. ""ഡാറ്റ പങ്കിടുന്നതിനെ കുറിച്ച് കൂടുതൽ" + "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ" + "സ്വകാര്യതാ ക്രമീകരണത്തിൽ"" പോയി ഈ ആപ്പിന്റെ ആക്‌സസ് മാറ്റുക" + "ആപ്പ് ഫംഗ്ഷണാലിറ്റി" + "അനലിറ്റിക്‌സ്" + "ഡെവലപ്പർ നടത്തുന്ന ആശയവിനിമയങ്ങൾ" + "പരസ്യം ചെയ്യൽ അല്ലെങ്കിൽ മാർക്കറ്റിംഗ്" + "വഞ്ചന തടയൽ, സുരക്ഷ, നയം പാലിക്കൽ" + "വ്യക്തിപരമാക്കൽ" + "അക്കൗണ്ട് മാനേജ് ചെയ്യൽ" + "ഡാറ്റാ സുരക്ഷ" + "ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാം" + "മൂന്നാം കക്ഷികളുമായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാമെന്ന് ഈ ആപ്പ് വ്യക്തമാക്കിയിട്ടുണ്ട്" + "ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്നത് സംബന്ധിച്ച അപ്‌ഡേറ്റുകൾ" + "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്ന രീതി മാറ്റിയ ആപ്പുകൾ അവലോകനം ചെയ്യുക" + "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്ന രീതി ഈ ആപ്പുകൾ മാറ്റി. അവ ഇത് മുമ്പ് പങ്കിട്ടിട്ടുണ്ടാകില്ല, അല്ലെങ്കിൽ ഇപ്പോൾ പരസ്യം ചെയ്യൽ, മാർക്കറ്റിംഗ് എന്നിവയുമായി ബന്ധപ്പെട്ട ആവശ്യങ്ങൾക്ക് പങ്കിട്ടേക്കാം." + "ഡാറ്റ പങ്കിടുന്ന രീതികളുടെ വിവരങ്ങൾ ഈ ആപ്പുകളുടെ ഡെവലപ്പർമാർ ആപ്പ് സ്‌റ്റോറിൽ നൽകിയിട്ടുണ്ട്. കാലക്രമേണ അവർ ഇത് അപ്ഡേറ്റ് ചെയ്തേക്കാം.\n\nനിങ്ങളുടെ പ്രായവും ആപ്പിന്റെ പതിപ്പും ഉപയോഗവും പ്രദേശവും അടിസ്ഥാനമാക്കി, ഡാറ്റ പങ്കിടുന്ന രീതികൾ വ്യത്യാസപ്പെടാം." + "ഡാറ്റ പങ്കിടുന്നതിനെ കുറിച്ച് അറിയുക" + "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ ഇപ്പോൾ മൂന്നാം കക്ഷികളുമായി പങ്കിടുന്നു" + "പരസ്യം ചെയ്യൽ, മാർക്കറ്റിംഗ് എന്നിവയുമായി ബന്ധപ്പെട്ട ആവശ്യങ്ങൾക്കായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ ഇപ്പോൾ മൂന്നാം കക്ഷികളുമായി പങ്കിടുന്നു" + "{count,plural, =0{കഴിഞ്ഞ ദിവസം അപ്ഡേറ്റ് ചെയ്തവ}=1{കഴിഞ്ഞ ദിവസം അപ്ഡേറ്റ് ചെയ്തവ}other{# ദിവസത്തിനുള്ളിൽ അപ്ഡേറ്റ് ചെയ്തവ}}" + "ഇപ്പോൾ അപ്ഡേറ്റുകളൊന്നുമില്ല" + "ഡാറ്റ പങ്കിടുന്നത് സംബന്ധിച്ച അപ്‌ഡേറ്റുകൾ" + "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്ന രീതി ചില ആപ്പുകൾ മാറ്റി" + "ക്രമീകരണം" diff --git a/PermissionController/res/values-mn-car/strings.xml b/PermissionController/res/values-mn-car/strings.xml new file mode 100644 index 0000000000..28fa83b359 --- /dev/null +++ b/PermissionController/res/values-mn-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Хэрэв аппыг хэдэн сарын турш ашиглаагүй бол:\n\n• Таны өгөгдлийг хамгаалахын тулд зөвшөөрлийг хасна\n• Сул зай гаргахын тулд түр зуурын файлуудыг хасна" + diff --git a/PermissionController/res/values-mn-v33/strings.xml b/PermissionController/res/values-mn-v33/strings.xml index 7b7efed445..8b43f22ece 100644 --- a/PermissionController/res/values-mn-v33/strings.xml +++ b/PermissionController/res/values-mn-v33/strings.xml @@ -28,8 +28,7 @@ "Жагсаалтын зүйл. %1$s. %2$s" "%1$s. %2$s" "Бусад сэрэмжлүүлэг" - - + "Сэрэмжлүүлгийг хаасан" "{count,plural, =1{Дэлгээд дахин нэг анхааруулга харах}other{Дэлгээд дахин # анхааруулга харах}}" "Сэрэмжлүүлэг. %1$s. %2$s" "Сэрэмжлүүлэг. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-mn-v34/strings.xml b/PermissionController/res/values-mn-v34/strings.xml new file mode 100644 index 0000000000..00f6849196 --- /dev/null +++ b/PermissionController/res/values-mn-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Аюулгүй байдал болон нууцлал" + "Тохиргоо" + "Өгөгдөл" + + + "Аппын зөвшөөрөл болон өгөгдлийн удирдлага" + diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml index 48953504b3..9061456079 100644 --- a/PermissionController/res/values-mn/strings.xml +++ b/PermissionController/res/values-mn/strings.xml @@ -591,5 +591,44 @@ "Аппууд таны хуулсан текст, зураг эсвэл бусад контентод хандах үед мессеж харуулах" "Нууц үгнүүдийг харуулах" "Таныг бичиж явцад тэмдэгтүүдийг түр үзүүлэх" - "Энэ апп байршлын өгөгдлийг гуравдагч талуудтай хуваалцаж болохыг мэдэгдсэн" + "Энэ апп таны байршлын өгөгдлийг гуравдагч талуудтай хуваалцаж магадгүйг мэдэгдсэн" + + + "Өгөгдөл хуваалцах мэдээллийг хаанаас авдаг вэ?" + + + "Апп байршлын өгөгдлийг дараах зорилгоор хуваалцана:" + + + "Өгөгдөл хуваалцах нь ялгаатай" + "Өгөгдлийн практик нь таны аппын хувилбар, хэрэглээ, бүс нутаг болон наснаас хамаарч янз бүр байж болно. ""Өгөгдөл хуваалцах тухай дэлгэрэнгүй" + "Таны байршлын өгөгдөл" + "Энэ аппын хандалтыг ""нууцлалын тохиргоонд"" өөрчилнө үү" + "Аппын ажиллагаа" + + + "Хөгжүүлэгчийн харилцаа холбоо" + "Сурталчилгаа эсвэл маркетинг" + "Залилангаас урьдчилан сэргийлэх, аюулгүй байдал болон дагаж мөрдөх үүрэг" + + + "Бүртгэлийн удирдлага" + "Өгөгдлийн аюулгүй байдал" + "Байршлын өгөгдлийг хуваалцаж магадгүй" + "Энэ апп таны байршлын өгөгдлийг гуравдагч талуудтай хуваалцаж магадгүйг мэдэгдсэн" + "Байршлын өгөгдөл хуваалцах шинэчлэлтүүд" + "Таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн аппуудыг шалгана уу" + "Эдгээр апп таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн. Тэд үүнийг өмнө нь хуваалцаагүй байж магадгүй эсвэл одоо үүнийг сурталчилгаа, маркетингийн зорилгоор хуваалцаж болзошгүй." + + + "Өгөгдөл хуваалцах талаар мэдэж авах" + + + + + "{count,plural, =0{Сүүлийн өдөрт шинэчилсэн}=1{Сүүлийн өдөрт шинэчилсэн}other{# хоногийн дотор шинэчилсэн}}" + "Одоогоор ямар ч шинэчлэлт алга" + "Өгөгдөл хуваалцах тухай шинэчлэлт" + "Зарим апп таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн" + "Тохиргоо" diff --git a/PermissionController/res/values-mr-car/strings.xml b/PermissionController/res/values-mr-car/strings.xml new file mode 100644 index 0000000000..aa75fcaa14 --- /dev/null +++ b/PermissionController/res/values-mr-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "एखादे ॲप काही महिन्यांसाठी वापरले गेले नसल्यास:\n\n• तुमच्या डेटाचे संरक्षण करण्यासाठी परवानग्या काढून टाकल्या जातात\n• जागा मोकळी करण्याकरिता तात्पुरत्या फाइल काढून टाकल्या जातात" + diff --git a/PermissionController/res/values-mr-v33/strings.xml b/PermissionController/res/values-mr-v33/strings.xml index de72b24a59..64bad3fd3a 100644 --- a/PermissionController/res/values-mr-v33/strings.xml +++ b/PermissionController/res/values-mr-v33/strings.xml @@ -28,8 +28,7 @@ "सूची आयटम. %1$s. %2$s" "%1$s. %2$s" "आणखी सूचना" - - + "डिसमिस केलेल्या सूचना" "{count,plural, =1{विस्तार करा आणि आणखी एक सूचना पहा}other{विस्तार करा आणि आणखी # सूचना पहा}}" "इशारा. %1$s. %2$s" "इशारा. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-mr-v34/strings.xml b/PermissionController/res/values-mr-v34/strings.xml new file mode 100644 index 0000000000..7054e74479 --- /dev/null +++ b/PermissionController/res/values-mr-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "सुरक्षा आणि गोपनीयता" + "नियंत्रणे" + "डेटा" + + + "अ‍ॅप परवानग्या आणि डेटा व्यवस्थापन" + diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml index 258b72a3a2..aa93ef547c 100644 --- a/PermissionController/res/values-mr/strings.xml +++ b/PermissionController/res/values-mr/strings.xml @@ -591,5 +591,44 @@ "तुम्ही कॉपी केलेला मजकूर, इमेज किंवा इतर आशय ॲप्स अ‍ॅक्सेस करतात तेव्हा, मेसेज दाखवा" "पासवर्ड दाखवा" "तुम्ही टाइप कराल त्‍याप्रमाणे वर्ण थोडक्‍यात डिस्प्ले करा" - "हे अ‍ॅप तृतीय पक्षांसोबत स्थान डेटा शेअर करू शकते असे या अ‍ॅपने नमूद केले आहे" + "हे अ‍ॅप तृतीय पक्षांसोबत तुमचा स्थान डेटा शेअर करू शकते असे या अ‍ॅपने नमूद केले आहे" + + + "डेटा शेअरिंग माहिती कुठून मिळते" + + + "अ‍ॅप पुढील गोष्टींसाठी स्‍थान डेटा शेअर करू शकते:" + + + "डेटा शेअरिंग बदलते" + "तुमच्या अ‍ॅपची आवृत्ती, वापर, प्रदेश आणि वय यांनुसार डेटाविषयक कार्यपद्धती बदलू शकतात. ""डेटा शेअरिंगबद्दल आणखी माहिती" + "तुमचा स्थान डेटा" + "गोपनीयता सेटिंग्ज"" मध्ये या अ‍ॅपचा अ‍ॅक्सेस बदला" + "अ‍ॅपची कार्यक्षमता" + + + "डेव्हलपर संवाद" + "जाहिरात किंवा मार्केटिंग" + "घोटाळा प्रतिबंध, सुरक्षा आणि पालन" + + + "खाते व्यवस्थापन" + "डेटासंबंधित सुरक्षितता" + "स्‍थान डेटा शेअर केला जाऊ शकतो" + "हे अ‍ॅप तृतीय पक्षांसोबत तुमचा स्थान डेटा शेअर करू शकते असे या अ‍ॅपने नमूद केले आहे" + "स्थानासाठी डेटा शेअरिंगसंबंधित अपडेट" + "ज्या अ‍ॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली अशा अ‍ॅप्सचे पुनरावलोकन करा" + "या अ‍ॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली आहे. त्यांनी तो पूर्वी शेअर केलेला नसू शकतो किंवा आता जाहिरात करणे अथवा मार्केटिंग उद्देशांसाठी शेअर करू शकतात." + + + "डेटा शेअरिंगबद्दल जाणून घ्या" + + + + + "{count,plural, =0{Updated within the last day}=1{मागील एका दिवसामध्ये अपडेट केले}other{मागील # दिवसांमध्ये अपडेट केले}}" + "यावेळी कोणतीही अपडेट नाहीत" + "डेटा शेअरिंगचे अपडेट" + "काही अ‍ॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली" + "सेटिंग्ज" diff --git a/PermissionController/res/values-ms-car/strings.xml b/PermissionController/res/values-ms-car/strings.xml new file mode 100644 index 0000000000..4fe9ba2f6d --- /dev/null +++ b/PermissionController/res/values-ms-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Jika apl tidak digunakan selama beberapa bulan:\n\n• Kebenaran akan dialih keluar untuk melindungi data anda\n• Fail sementara akan dialih keluar untuk mengosongkan ruang" + diff --git a/PermissionController/res/values-ms-v33/strings.xml b/PermissionController/res/values-ms-v33/strings.xml index 03593ba4ac..0d334c96fa 100644 --- a/PermissionController/res/values-ms-v33/strings.xml +++ b/PermissionController/res/values-ms-v33/strings.xml @@ -28,8 +28,7 @@ "Senaraikan item. %1$s. %2$s" "%1$s. %2$s" "Lagi makluman" - - + "Makluman yang diketepikan" "{count,plural, =1{Kembangkan dan lihat satu makluman lagi}other{Kembangkan dan lihat # makluman lagi}}" "Amaran. %1$s. %2$s" "Amaran. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ms-v34/strings.xml b/PermissionController/res/values-ms-v34/strings.xml new file mode 100644 index 0000000000..49bbe3f88a --- /dev/null +++ b/PermissionController/res/values-ms-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Keselamatan & privasi" + "Kawalan" + "Data" + + + "Kebenaran apl dan pengurusan data" + diff --git a/PermissionController/res/values-ms/strings.xml b/PermissionController/res/values-ms/strings.xml index 5e9fef07e5..e426f9491c 100644 --- a/PermissionController/res/values-ms/strings.xml +++ b/PermissionController/res/values-ms/strings.xml @@ -591,5 +591,44 @@ "Tunjukkan mesej apabila apl mengakses teks, imej atau kandungan lain yang telah anda salin" "Tunjukkan kata laluan" "Paparkan aksara seketika sambil anda menaip" - "Apl ini menyatakan bahawa data lokasi mungkin dikongsi dengan pihak ketiga" + "Apl ini menyatakan bahawa data lokasi anda mungkin dikongsi dengan pihak ketiga" + + + "Sumber maklumat perkongsian data" + + + "Apl ini mungkin berkongsi data lokasi untuk:" + + + "Perkongsian data berbeza-beza" + "Amalan privasi data mungkin berbeza-beza berdasarkan versi apl, penggunaan, rantau dan umur anda. ""Lagi tentang perkongsian data" + "Data lokasi anda" + "Tukar akses apl ini dalam ""tetapan privasi" + "Fungsi apl" + + + "Komunikasi pembangun" + "Pengiklanan atau pemasaran" + "Pencegahan penipuan, keselamatan dan pematuhan" + + + "Pengurusan akaun" + "Keselamatan data" + "Data lokasi mungkin dikongsi" + "Apl ini menyatakan bahawa data lokasi anda mungkin dikongsi dengan pihak ketiga" + "Kemaskinian perkongsian data untuk lokasi" + "Semak apl yang mengubah cara apl boleh berkongsi data lokasi anda" + "Apl ini telah mengubah cara apl boleh berkongsi data lokasi anda. Apl mungkin tidak berkongsi data lokasi sebelum ini atau mungkin berkongsi data lokasi sekarang untuk tujuan pengiklanan atau pemasaran." + + + "Ketahui tentang perkongsian data" + + + + + "{count,plural, =0{Dikemaskinikan pada hari terakhir}=1{Dikemaskinikan pada hari terakhir}other{Dikemaskinikan dalam masa # hari}}" + "Tiada kemaskinian pada masa ini" + "Kemaskinian perkongsian data" + "Sesetengah apl mengubah cara apl itu boleh berkongsi data lokasi anda" + "Tetapan" diff --git a/PermissionController/res/values-my-v33/strings.xml b/PermissionController/res/values-my-v33/strings.xml index 84fd16f28c..ea73a5ded9 100644 --- a/PermissionController/res/values-my-v33/strings.xml +++ b/PermissionController/res/values-my-v33/strings.xml @@ -28,8 +28,7 @@ "အကြောင်းအရာကို စာရင်းလုပ်နိုင်သည်။ %1$s%2$s" "%1$s%2$s" "နောက်ထပ် သတိပေးချက်များ" - - + "ပယ်ထားသော သတိပေးချက်များ" "{count,plural, =1{ချဲ့ပြီး သတိပေးချက်နောက်တစ်ခု ကြည့်ရန်}other{ချဲ့ပြီး သတိပေးချက်နောက် # ခု ကြည့်ရန်}}" "သတိပေးချက်။ %1$s%2$s" "သတိပေးချက်။ %1$s%2$s%3$s" diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index 0d17f9edbc..c7dbc1a995 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -591,5 +591,68 @@ "အက်ပ်များက သင်မိတ္တူကူးထားသော စာသား၊ ပုံများ (သို့) အခြားအကြောင်းအရာကို သုံးသောအခါ အကြောင်းကြားပါ" "စကားဝှက်များပြရန်" "စာရိုက်သည့်အခါ အက္ခရာများကို ခဏတာပြသည်" - "ဤအက်ပ်က ၎င်းသည် ဒေတာကို ပြင်ပအဖွဲ့များနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-nb-car/strings.xml b/PermissionController/res/values-nb-car/strings.xml new file mode 100644 index 0000000000..f8e3075b87 --- /dev/null +++ b/PermissionController/res/values-nb-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Dette skjer hvis en app ikke brukes på noen måneder:\n\n• Tillatelser fjernes for å beskytte dataene dine.\n• Midlertidige filer fjernes for å frigjøre plass." + diff --git a/PermissionController/res/values-nb-v33/strings.xml b/PermissionController/res/values-nb-v33/strings.xml index b353d15231..b01e224e27 100644 --- a/PermissionController/res/values-nb-v33/strings.xml +++ b/PermissionController/res/values-nb-v33/strings.xml @@ -28,8 +28,7 @@ "Listeelement. %1$s. %2$s" "%1$s. %2$s" "Flere varsler" - - + "Avviste varsler" "{count,plural, =1{Dobbelttrykk for å se et varsel til}other{Dobbelttrykk for å se # varsler til}}" "Varsel. %1$s. %2$s" "Varsel. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-nb-v34/strings.xml b/PermissionController/res/values-nb-v34/strings.xml new file mode 100644 index 0000000000..5cc56cf3b3 --- /dev/null +++ b/PermissionController/res/values-nb-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sikkerhet og personvern" + "Kontroller" + "Data" + + + "Apptillatelser og dataadministering" + diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml index b2d11a57d5..90061e10f4 100644 --- a/PermissionController/res/values-nb/strings.xml +++ b/PermissionController/res/values-nb/strings.xml @@ -591,5 +591,44 @@ "Vis en melding når apper bruker tekst, bilder eller annet innhold du har kopiert" "Vis passord" "Vis tegnene et øyeblikk mens du skriver" - "Denne appen har oppgitt at den kan dele posisjonsdata med tredjeparter" + "Denne appen har oppgitt at den kan dele posisjonsdataene dine med tredjeparter" + + + "Hvor kommer informasjon om datadeling fra?" + + + "Appen kan dele posisjonsdata for" + + + "Datadeling varierer" + "Databehandling kan variere basert på appversjon, bruk, region og alder. ""Mer informasjon om datadeling" + "Posisjonsdataene dine" + "Du kan endre tilgangen denne appen har, i ""personverninnstillingene" + "appfunksjonalitet" + + + "utviklerkommunikasjon" + "annonsering eller markedsføring" + "forebygging av svindel, sikkerhet og overholdelse av regler" + + + "kontoadministrasjon" + "Datasikkerhet" + "Posisjonsdata kan deles" + "Denne appen har oppgitt at den kan dele posisjonsdataene dine med tredjeparter" + "Oppdatering av datadeling for posisjon" + "Gjennomgå apper som har endret hvordan de deler posisjonsdataene dine" + "Disse appene har endret hvordan de kan dele posisjonsdataene dine. De har muligens ikke delt dem før eller kan nå dele dem for annonsering eller markedsføring." + + + "Finn ut mer om datadeling" + + + + + "{count,plural, =0{Oppdatert i løpet av den siste dagen}=1{Oppdatert i løpet av den siste dagen}other{Oppdatert i løpet av de siste # dagene}}" + "Ingen oppdateringer for øyeblikket" + "Oppdateringer av datadeling" + "Noen apper har endret hvordan de kan dele posisjonsdataene dine" + "Innstillinger" diff --git a/PermissionController/res/values-ne-car/strings.xml b/PermissionController/res/values-ne-car/strings.xml new file mode 100644 index 0000000000..e19812c05c --- /dev/null +++ b/PermissionController/res/values-ne-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "कुनै एप केही महिनादेखि चलाइएको छैन भने:\n\n• तपाईंको जानकारी सुरक्षित राख्न उक्त एपलाई दिइएका अनुमति रद्द गरिन्छन्\n• ठाउँ खाली गर्न अस्थायी फाइलहरू हटाइन्छन्" + diff --git a/PermissionController/res/values-ne-v33/strings.xml b/PermissionController/res/values-ne-v33/strings.xml index a024428e42..89a3361b9a 100644 --- a/PermissionController/res/values-ne-v33/strings.xml +++ b/PermissionController/res/values-ne-v33/strings.xml @@ -28,8 +28,7 @@ "सूचीमा रहेको वस्तु। %1$s%2$s" "%1$s%2$s" "थप अलर्टहरू" - - + "खारेज गरिएका अलर्टहरू" "{count,plural, =1{एक्स्पान्ड गरेर थप एउटा अलर्ट हेर्नुहोस्}other{एक्स्पान्ड गरेर थप # वटा अलर्ट हेर्नुहोस्}}" "अलर्ट। %1$s%2$s" "अलर्ट। %1$s%2$s%3$s" diff --git a/PermissionController/res/values-ne-v34/strings.xml b/PermissionController/res/values-ne-v34/strings.xml new file mode 100644 index 0000000000..444fa8c4c0 --- /dev/null +++ b/PermissionController/res/values-ne-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "सुरक्षा तथा गोपनीयता" + "कन्ट्रोलहरू" + "जानकारी" + + + "एपलाई दिइएका अनुमति र जानकारीको व्यवस्थापन" + diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index 0ee6fe4b9d..f84521a8c6 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -591,5 +591,44 @@ "मैले कपी गरेका टेक्स्ट, फोटो वा अन्य सामग्री एपहरूले प्रयोग गर्दा म्यासेज देखाइयोस्" "पासवर्डहरू देखाइयोस्" "टाइप गर्दै गर्दा वर्णहरू झलक्क देखाइयोस्" - "यो एपले यसले लोकेसन डेटा तेस्रो पक्षसँग सेयर गर्न सक्छ भन्ने जानकारी दिएको छ" + "यो एपले यसले तपाईंको लोकेसन डेटा तेस्रो पक्षसँग सेयर गर्न सक्छ भन्ने जानकारी दिएको छ" + + + "जानकारी सेयर गर्नेसम्बन्धी अभ्यासको स्रोत" + + + "यो एपले निम्न प्रयोजनका लागि लोकेसन सेयर गर्न सक्छ:" + + + "जानकारी सेयर गर्नेसम्बन्धी अभ्यास फरक हुन सक्छ" + "एपको संस्करण, प्रयोगसम्बन्धी जानकारी, तपाईं बसोबास गर्ने क्षेत्र र तपाईंको उमेरका आधारमा जानकारीको व्यवस्थापनसम्बन्धी अभ्यासहरू फरक हुन सक्छन्। ""जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा थप जानकारी" + "तपाईंको लोकेसन डेटा" + "गोपनीयतासम्बन्धी सेटिङ""मा गई यो एपलाई दिइएको अनुमति परिवर्तन गर्नुहोस्" + "एपका सुविधा उपलब्ध गराउने" + + + "विकासकर्ताबाट जानकारी प्राप्त गर्ने" + "विज्ञापन वा मार्केटिङ गर्ने" + "ठगी रोक्ने, जानकारी सुरक्षित राख्ने र नीति पालना गर्ने" + + + "खाता व्यवस्थापन गर्ने" + "जानकारीको सुरक्षा" + "लोकेसन डेटा सेयर गरिन सक्छ" + "यो एपले यसले तपाईंको लोकेसन डेटा तेस्रो पक्षसँग सेयर गर्न सक्छ भन्ने जानकारी दिएको छ" + "लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी" + "तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका एपहरूको समीक्षा गर्नुहोस्" + "यी एपहरूले तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका छन्। यी एपहरूले यसअघि तपाईंको लोकेसन डेटा सेयर नगरेका हुन सक्छन् तर अब भने विज्ञापन तथा मार्केटिङ गर्ने प्रयोजनका लागि तपाईंको लोकेसन डेटा सेयर गर्न सक्छन्।" + + + "जानकारी सेयर गर्नेसम्बन्धी नीतिका बारेमा जान्नुहोस्" + + + + + "{count,plural, =0{पछिल्लो एक दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}=1{पछिल्लो एक दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}other{पछिल्ला # दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}}" + "अहिले कुनै अद्यावधिक जानकारी उपलब्ध छैन" + "जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी" + "केही एपहरूले तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका छन्" + "सेटिङ" diff --git a/PermissionController/res/values-nl-v33/strings.xml b/PermissionController/res/values-nl-v33/strings.xml index 28420b2b1f..bef2f5dddd 100644 --- a/PermissionController/res/values-nl-v33/strings.xml +++ b/PermissionController/res/values-nl-v33/strings.xml @@ -28,8 +28,7 @@ "Lijstitem. %1$s. %2$s." "%1$s. %2$s" "Meer meldingen" - - + "Gesloten meldingen" "{count,plural, =1{Uitvouwen en nog 1 melding bekijken}other{Uitvouwen en nog # meldingen bekijken}}" "Melding. %1$s. %2$s" "Melding. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-nl/strings.xml b/PermissionController/res/values-nl/strings.xml index 8d153e0c67..fc1f5a6b35 100644 --- a/PermissionController/res/values-nl/strings.xml +++ b/PermissionController/res/values-nl/strings.xml @@ -591,5 +591,68 @@ "Toon een bericht als apps toegang hebben tot tekst, afbeeldingen of andere content die je hebt gekopieerd" "Wachtwoorden tonen" "Tekens kort tonen terwijl je typt" - "Deze app geeft aan dat locatiegegevens kunnen worden gedeeld met derden" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-or-car/strings.xml b/PermissionController/res/values-or-car/strings.xml new file mode 100644 index 0000000000..def387b830 --- /dev/null +++ b/PermissionController/res/values-or-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ଯଦି କୌଣସି ଆପକୁ କିଛି ମାସ ପାଇଁ ବ୍ୟବହାର କରାଯାଇନାହିଁ, ତେବେ:\n\n• ଆପଣଙ୍କ ଡାଟାକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯାଏ\n• ସ୍ପେସ ଖାଲି କରିବା ପାଇଁ ଅସ୍ଥାୟୀ ଫାଇଲଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯାଏ" + diff --git a/PermissionController/res/values-or-v33/strings.xml b/PermissionController/res/values-or-v33/strings.xml index be6e2cabcd..e07d2d33d2 100644 --- a/PermissionController/res/values-or-v33/strings.xml +++ b/PermissionController/res/values-or-v33/strings.xml @@ -28,8 +28,7 @@ "ତାଲିକା ଆଇଟମ। %1$s%2$s" "%1$s%2$s" "ଅଧିକ ଆଲର୍ଟ" - - + "ଖାରଜ କରାଯାଇଥିବା ଆଲର୍ଟଗୁଡ଼ିକ" "{count,plural, =1{ବିସ୍ତାର କରି ଆଉ ଗୋଟିଏ ଆଲର୍ଟ ଦେଖନ୍ତୁ}other{ବିସ୍ତାର କରି ଆଉ #ଟି ଆଲର୍ଟ ଦେଖନ୍ତୁ}}" "ଆଲର୍ଟ। %1$s%2$s" "ଆଲର୍ଟ। %1$s%2$s%3$s" diff --git a/PermissionController/res/values-or-v34/strings.xml b/PermissionController/res/values-or-v34/strings.xml new file mode 100644 index 0000000000..0348578bc9 --- /dev/null +++ b/PermissionController/res/values-or-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "ସୁରକ୍ଷା ଏବଂ ଗୋପନୀୟତା" + "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ" + "ଡାଟା" + + + "ଆପ ଅନୁମତି ଏବଂ ଡାଟା ପରିଚାଳନା" + diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml index 7446f3a663..498af8e8de 100644 --- a/PermissionController/res/values-or/strings.xml +++ b/PermissionController/res/values-or/strings.xml @@ -591,5 +591,44 @@ "ଯେତେବେଳେ ଆପଣ କପି କରିଥିବା ଟେକ୍ସଟ, ଇମେଜ କିମ୍ବା ଅନ୍ୟ ବିଷୟବସ୍ତୁକୁ ଆପ୍ସ ଆକ୍ସେସ କରେ, ସେତେବେଳେ ଏକ ମେସେଜ ଦେଖାନ୍ତୁ" "ପାସୱାର୍ଡଗୁଡ଼ିକ ଦେଖାନ୍ତୁ" "ଆପଣ ଟାଇପ କରିବା ସମୟରେ କେରେକ୍ଟରଗୁଡ଼ିକୁ କିଛି ସମୟ ପାଇଁ ଡିସପ୍ଲେ କରନ୍ତୁ" - "ଏହି ଆପ ଉଲ୍ଲେଖ କରିଛି ଯେ ଏହା ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ" + "ଏହି ଆପ ଉଲ୍ଲେଖ କରିଛି ଯେ ଏହା ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ" + + + "ଡାଟା ସେୟାରିଂ ସୂଚନା କେଉଁଠାରୁ ଆସିଥାଏ" + + + "ଏଥିପାଇଁ ଆପଟି ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ:" + + + "ଡାଟା ସେୟାରିଂ ଭିନ୍ନ ହୋଇଥାଏ" + "ଆପଣଙ୍କ ଆପର ସଂସ୍କରଣ, ବ୍ୟବହାର, ଅଞ୍ଚଳ ଏବଂ ବୟସ ଆଧାରରେ ଡାଟା କାର୍ଯ୍ୟପଦ୍ଧତିଗୁଡ଼ିକ ଭିନ୍ନ ହୋଇପାରେ। ""ଡାଟା ସେୟାରିଂ ବିଷୟରେ ଅଧିକ" + "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା" + "ଗୋପନୀୟତା ସେଟିଂସ""ରେ ଏହି ଆପର ଆକ୍ସେସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" + "ଆପ କାର୍ଯ୍ୟକ୍ଷମତା" + + + "ଡେଭେଲପର କମ୍ୟୁନିକେସନ" + "ବିଜ୍ଞାପନ କିମ୍ବା ମାର୍କେଟିଂ" + "ଠକାମୀର ପ୍ରତିରୋଧ, ସୁରକ୍ଷା ଏବଂ ଅନୁପାଳନ" + + + "ଆକାଉଣ୍ଟ ପରିଚାଳନା" + "ଡାଟା ସୁରକ୍ଷା" + "ଲୋକେସନ ଡାଟା ସେୟାର କରାଯାଇପାରେ" + "ଏହି ଆପ ଉଲ୍ଲେଖ କରିଛି ଯେ ଏହା ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ" + "ଲୋକେସନ ପାଇଁ ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ" + "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଥିବା ଆପ୍ସର ସମୀକ୍ଷା କରନ୍ତୁ" + "ଏହି ଆପ୍ସ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଛି। ସେଗୁଡ଼ିକ ଏହାକୁ ପୂର୍ବରୁ ସେୟାର କରିନଥାଇପାରେ କିମ୍ବା ବର୍ତ୍ତମାନ ଏହାକୁ ବିଜ୍ଞାପନ ବା ମାର୍କେଟିଂ ଉଦ୍ଦେଶ୍ୟରେ ସେୟାର କରିପାରେ।" + + + "ଡାଟା ସେୟାରିଂ ବିଷୟରେ ଜାଣନ୍ତୁ" + + + + + "{count,plural, =0{ଶେଷ ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}=1{ଶେଷ ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}other{# ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}}" + "ଏହି ସମୟରେ କୌଣସି ଅପଡେଟ ନାହିଁ" + "ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ" + "କିଛି ଆପ୍ସ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଛି" + "ସେଟିଂସ" diff --git a/PermissionController/res/values-pa-car/strings.xml b/PermissionController/res/values-pa-car/strings.xml new file mode 100644 index 0000000000..e6ce4dfe3f --- /dev/null +++ b/PermissionController/res/values-pa-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ਜੇ ਕਿਸੇ ਐਪ ਨੂੰ ਕੁਝ ਮਹੀਨਿਆਂ ਤੱਕ ਵਰਤਿਆ ਨਹੀਂ ਜਾਂਦਾ ਹੈ, ਤਾਂ:\n\n• ਤੁਹਾਡੇ ਡਾਟੇ ਦੀ ਸੁਰੱਖਿਆ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ\n• ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ ਅਸਥਾਈ ਫ਼ਾਈਲਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ" + diff --git a/PermissionController/res/values-pa-v33/strings.xml b/PermissionController/res/values-pa-v33/strings.xml index 0f741f7820..ffd95815cc 100644 --- a/PermissionController/res/values-pa-v33/strings.xml +++ b/PermissionController/res/values-pa-v33/strings.xml @@ -28,8 +28,7 @@ "ਸੂਚੀ ਆਈਟਮ। %1$s. %2$s" "%1$s. %2$s" "ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ" - - + "ਖਾਰਜ ਕੀਤੀਆਂ ਗਈਆਂ ਸੁਚੇਤਨਾਵਾਂ" "{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}" "ਸੁਚੇਤਨਾ। %1$s. %2$s" "ਸੁਚੇਤਨਾ। %1$s. %2$s%3$s" diff --git a/PermissionController/res/values-pa-v34/strings.xml b/PermissionController/res/values-pa-v34/strings.xml new file mode 100644 index 0000000000..a6b1c77b86 --- /dev/null +++ b/PermissionController/res/values-pa-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ" + "ਕੰਟਰੋਲ" + "ਡਾਟਾ" + + + "ਐਪ ਇਜਾਜ਼ਤਾਂ ਅਤੇ ਡਾਟਾ ਪ੍ਰਬੰਧਨ" + diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml index 6d78f81ee9..2a15041e44 100644 --- a/PermissionController/res/values-pa/strings.xml +++ b/PermissionController/res/values-pa/strings.xml @@ -591,5 +591,44 @@ "ਜਦੋਂ ਐਪਾਂ ਲਿਖਤ, ਚਿੱਤਰ ਜਾਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਾਪੀ ਕੀਤੀ ਹੋਰ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਦੀਆਂ ਹਨ, ਤਾਂ ਕੋਈ ਸੁਨੇਹਾ ਦਿਖਾਓ" "ਪਾਸਵਰਡ ਦਿਖਾਓ" "ਟਾਈਪ ਕਰਨ ਵੇਲੇ ਅੱਖਰ-ਚਿੰਨ੍ਹਾਂ ਨੂੰ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਦਿਖਾਓ" - "ਇਸ ਐਪ ਨੇ ਸਪਸ਼ਟ ਕੀਤਾ ਕਿ ਇਹ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ" + "ਇਸ ਐਪ ਨੇ ਸਪਸ਼ਟ ਕੀਤਾ ਕਿ ਇਹ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ" + + + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਜਾਣਕਾਰੀ ਕਿੱਥੋਂ ਆਉਂਦੀ ਹੈ" + + + "ਐਪ ਇਸ ਲਈ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ:" + + + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਵੱਖ-ਵੱਖ ਹੁੰਦਾ ਹੈ" + "ਡਾਟਾ ਵਿਹਾਰ ਤੁਹਾਡੀ ਐਪ ਦੇ ਵਰਜਨ, ਵਰਤੋਂ, ਖੇਤਰ ਅਤੇ ਉਮਰ ਦੇ ਮੁਤਾਬਕ ਵੱਖ-ਵੱਖ ਹੋ ਸਕਦੇ ਹਨ। ""ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਬਾਰੇ ਹੋਰ" + "ਤੁਹਾਡਾ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ" + "ਪਰਦੇਦਾਰੀ ਸੈਟਿੰਗਾਂ"" ਵਿੱਚ ਇਸ ਐਪ ਦੀ ਪਹੁੰਚ ਨੂੰ ਬਦਲੋ" + "ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ" + + + "ਵਿਕਾਸਕਾਰ ਸੰਚਾਰ" + "ਵਿਗਿਆਪਨ ਜਾਂ ਮਾਰਕੀਟਿੰਗ" + "ਧੋਖਾਧੜੀ ਦੀ ਰੋਕਥਾਮ, ਸੁਰੱਖਿਆ ਅਤੇ ਪਾਲਣਾ" + + + "ਖਾਤਾ ਪ੍ਰਬੰਧਨ" + "ਡਾਟਾ ਸੁਰੱਖਿਆ" + "ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ" + "ਇਸ ਐਪ ਨੇ ਸਪਸ਼ਟ ਕੀਤਾ ਕਿ ਇਹ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ" + "ਟਿਕਾਣੇ ਲਈ ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ" + "ਉਨ੍ਹਾਂ ਐਪਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ ਜਿਨ੍ਹਾਂ ਨੇ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ" + "ਇਨ੍ਹਾਂ ਐਪਾਂ ਨੇ ਉਨ੍ਹਾਂ ਵੱਲੋਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ। ਉਨ੍ਹਾਂ ਨੇ ਸ਼ਾਇਦ ਇਸਨੂੰ ਪਹਿਲਾਂ ਸਾਂਝਾ ਨਾ ਕੀਤਾ ਹੋਵੇ, ਜਾਂ ਉਹ ਸ਼ਾਇਦ ਹੁਣ ਵਿਗਿਆਪਨ ਜਾਂ ਮਾਰਕੀਟਿੰਗ ਸੰਬੰਧੀ ਉਦੇਸ਼ਾਂ ਲਈ ਹੁਣ ਇਸਨੂੰ ਸਾਂਝਾ ਕਰਨ।" + + + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਬਾਰੇ ਜਾਣੋ" + + + + + "{count,plural, =0{ਪਿਛਲੇ ਦਿਨ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}=1{ਪਿਛਲੇ ਦਿਨ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}other{ਪਿਛਲੇ # ਦਿਨਾਂ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}}" + "ਇਸ ਸਮੇਂ ਕੋਈ ਅੱਪਡੇਟ ਨਹੀਂ" + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ" + "ਕੁਝ ਐਪਾਂ ਨੇ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ" + "ਸੈਟਿੰਗਾਂ" diff --git a/PermissionController/res/values-pl-v33/strings.xml b/PermissionController/res/values-pl-v33/strings.xml index 2f5bc5a871..8b36d98f0b 100644 --- a/PermissionController/res/values-pl-v33/strings.xml +++ b/PermissionController/res/values-pl-v33/strings.xml @@ -28,8 +28,7 @@ "Pozycja na liście. %1$s. %2$s" "%1$s. %2$s" "Więcej alertów" - - + "Odrzucone alerty" "{count,plural, =1{Rozwiń i zobacz jeszcze 1 alert}few{Rozwiń i zobacz jeszcze # alerty}many{Rozwiń i zobacz jeszcze # alertów}other{Rozwiń i zobacz jeszcze # alertu}}" "Alert. %1$s. %2$s" "Alert. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml index dda7cfd69c..2a3bc29490 100644 --- a/PermissionController/res/values-pl/strings.xml +++ b/PermissionController/res/values-pl/strings.xml @@ -591,5 +591,68 @@ "Pokazuj komunikat, gdy aplikacja uzyskuje dostęp do skopiowanego tekstu, obrazów lub innych treści" "Pokazuj hasła" "Wpisywane znaki są przez chwilę wyświetlane" - "Ta aplikacja deklaruje, że może udostępniać dane o lokalizacji osobom trzecim" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-pt-rBR-v33/strings.xml b/PermissionController/res/values-pt-rBR-v33/strings.xml index 23b6a1a10c..8e7c6e4985 100644 --- a/PermissionController/res/values-pt-rBR-v33/strings.xml +++ b/PermissionController/res/values-pt-rBR-v33/strings.xml @@ -28,8 +28,7 @@ "Item da lista. %1$s. %2$s" "%1$s. %2$s" "Mais alertas" - - + "Alertas dispensados" "{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-pt-rBR/strings.xml b/PermissionController/res/values-pt-rBR/strings.xml index 1558cdcc46..2acadd5ce5 100644 --- a/PermissionController/res/values-pt-rBR/strings.xml +++ b/PermissionController/res/values-pt-rBR/strings.xml @@ -591,5 +591,68 @@ "Mostrar uma mensagem quando os apps acessarem textos, imagens ou outros conteúdos copiados" "Mostrar senhas" "Mostrar os caracteres rapidamente enquanto você digita" - "Este app declarou que pode compartilhar dados de local com terceiros" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-pt-rPT-car/strings.xml b/PermissionController/res/values-pt-rPT-car/strings.xml new file mode 100644 index 0000000000..e0f169c6a1 --- /dev/null +++ b/PermissionController/res/values-pt-rPT-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Se uma app não for usada durante alguns meses:\n\n• As autorizações são removidas para proteger os seus dados\n• Os ficheiros temporários são removidos para libertar espaço" + diff --git a/PermissionController/res/values-pt-rPT-v34/strings.xml b/PermissionController/res/values-pt-rPT-v34/strings.xml new file mode 100644 index 0000000000..5ed4c03c03 --- /dev/null +++ b/PermissionController/res/values-pt-rPT-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Segurança e privacidade" + "Controlos" + "Dados" + + + "Autorizações da app e gestão de dados" + diff --git a/PermissionController/res/values-pt-rPT/strings.xml b/PermissionController/res/values-pt-rPT/strings.xml index 3b5dd1aa6d..529766999b 100644 --- a/PermissionController/res/values-pt-rPT/strings.xml +++ b/PermissionController/res/values-pt-rPT/strings.xml @@ -591,5 +591,44 @@ "Apresente uma mensagem quando as apps acedem a texto, imagens ou outro conteúdo que copiou" "Mostrar palavras-passe" "Apresente rapidamente os carateres ao escrever" - "Esta app declarou que pode partilhar dados de localização com terceiros" + "Esta app declarou que pode partilhar os seus dados de localização com terceiros" + + + "Qual é a origem das informações da partilha de dados" + + + "A app pode partilhar dados de localização para:" + + + "A partilha de dados varia" + "As práticas de dados podem variar consoante a versão da app, a utilização, a região e a idade. ""Mais informações sobre a partilha de dados" + "Os seus dados de localização" + "Altere o acesso desta app nas ""definições de privacidade" + "Funcionalidade da app" + + + "Comunicações do programador" + "Publicidade ou marketing" + "Prevenção de fraudes, segurança e conformidade" + + + "Gestão da conta" + "Segurança dos dados" + "Os dados de localização podem ser partilhados" + "Esta app declarou que pode partilhar os seus dados de localização com terceiros" + "Atualizações da partilha de dados para a localização" + "Reveja apps que mudaram a forma como podem partilhar os seus dados de localização" + "Estas apps mudaram a forma como podem partilhar os seus dados de localização. Podem não os ter partilhado antes ou podem partilhá-los agora para fins de publicidade ou marketing." + + + "Saiba mais sobre a partilha de dados" + + + + + "{count,plural, =0{Atualizado no último dia}=1{Atualizado no último dia}many{Atualizado em # de dias}other{Atualizado em # dias}}" + "Nenhuma atualização neste momento" + "Atualizações da partilha de dados" + "Algumas apps alteraram a forma como podem partilhar os seus dados de localização" + "Definições" diff --git a/PermissionController/res/values-pt-v33/strings.xml b/PermissionController/res/values-pt-v33/strings.xml index 23b6a1a10c..8e7c6e4985 100644 --- a/PermissionController/res/values-pt-v33/strings.xml +++ b/PermissionController/res/values-pt-v33/strings.xml @@ -28,8 +28,7 @@ "Item da lista. %1$s. %2$s" "%1$s. %2$s" "Mais alertas" - - + "Alertas dispensados" "{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}" "Alerta. %1$s. %2$s" "Alerta. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-pt/strings.xml b/PermissionController/res/values-pt/strings.xml index 1558cdcc46..2acadd5ce5 100644 --- a/PermissionController/res/values-pt/strings.xml +++ b/PermissionController/res/values-pt/strings.xml @@ -591,5 +591,68 @@ "Mostrar uma mensagem quando os apps acessarem textos, imagens ou outros conteúdos copiados" "Mostrar senhas" "Mostrar os caracteres rapidamente enquanto você digita" - "Este app declarou que pode compartilhar dados de local com terceiros" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-ro-v33/strings.xml b/PermissionController/res/values-ro-v33/strings.xml index 03d7db92a4..79af235dd8 100644 --- a/PermissionController/res/values-ro-v33/strings.xml +++ b/PermissionController/res/values-ro-v33/strings.xml @@ -28,8 +28,7 @@ "Articol din listă. %1$s. %2$s" "%1$s. %2$s" "Mai multe alerte" - - + "Alerte respinse" "{count,plural, =1{Extinde și mai vezi o alertă}few{Extinde și mai vezi # alerte}other{Extinde și mai vezi # de alerte}}" "Alertă. %1$s. %2$s" "Alertă. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml index 39f115a52b..3530a89918 100644 --- a/PermissionController/res/values-ro/strings.xml +++ b/PermissionController/res/values-ro/strings.xml @@ -591,5 +591,68 @@ "Afișează un mesaj când aplicațiile accesează text, imagini sau alte tipuri de conținut pe care le-ai copiat" "Afișează parolele" "Caracterele se afișează pentru scurt timp, pe măsură ce tastezi" - "Aplicația afirmă că poate trimite terților date privind locațiile" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-ru-v33/strings.xml b/PermissionController/res/values-ru-v33/strings.xml index 4d32c2c01c..eb06d08e68 100644 --- a/PermissionController/res/values-ru-v33/strings.xml +++ b/PermissionController/res/values-ru-v33/strings.xml @@ -28,8 +28,7 @@ "Пункт списка. %1$s. %2$s" "%1$s, %2$s" "Другие оповещения" - - + "Закрытые оповещения" "{count,plural, =1{Разверните, чтобы увидеть ещё одно оповещение}one{Разверните, чтобы увидеть ещё # оповещение}few{Разверните, чтобы увидеть ещё # оповещения}many{Разверните, чтобы увидеть ещё # оповещений}other{Разверните, чтобы увидеть ещё # оповещения}}" "Оповещение: %1$s. %2$s" "Оповещение: %1$s (%2$s). %3$s" diff --git a/PermissionController/res/values-ru/strings.xml b/PermissionController/res/values-ru/strings.xml index 694120728d..2bf239d0ae 100644 --- a/PermissionController/res/values-ru/strings.xml +++ b/PermissionController/res/values-ru/strings.xml @@ -591,5 +591,68 @@ "Показывать уведомления, когда приложения обращаются к скопированному тексту, изображениям или другому контенту" "Показывать пароли" "Ненадолго показывать символы при вводе" - "Это приложение может передавать третьим лицам данные о местоположении." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-si-v33/strings.xml b/PermissionController/res/values-si-v33/strings.xml index 8ae709cf34..f519d02d31 100644 --- a/PermissionController/res/values-si-v33/strings.xml +++ b/PermissionController/res/values-si-v33/strings.xml @@ -28,8 +28,7 @@ "ලැයිස්තු අයිතමය. %1$s. %2$s" "%1$s. %2$s" "තවත් ඇඟවීම්" - - + "අස් කළ ඇඟවීම්" "{count,plural, =1{පුළුල් කර තවත් එක් ඇඟවීමක් බලන්න}one{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}other{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}}" "ඇඟවීම. %1$s. %2$s" "ඇඟවීම. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-si/strings.xml b/PermissionController/res/values-si/strings.xml index f4b089d72a..e13f6266d1 100644 --- a/PermissionController/res/values-si/strings.xml +++ b/PermissionController/res/values-si/strings.xml @@ -591,5 +591,68 @@ "යෙදුම් ඔබ පිටපත් කර ඇති පාඨ, රූප හෝ වෙනත් අන්තර්ගතය වෙත ප්‍රවේශ වන විට පණිවුඩයක් පෙන්වන්න" "මුරපද පෙන්වන්න" "ඔබ ටයිප් කරන විට අනුලකුණු කෙටියෙන් පෙන්වන්න" - "මෙම යෙදුම තෙවන පාර්ශ්වයන් සමග ස්ථාන දත්ත බෙදා ගත හැකි බව ප්‍රකාශ කර ඇත" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-sk-car/strings.xml b/PermissionController/res/values-sk-car/strings.xml new file mode 100644 index 0000000000..230f491632 --- /dev/null +++ b/PermissionController/res/values-sk-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ak aplikácia nebola použitá niekoľko mesiacov:\n\n• povolenia budú z dôvodu ochrany vašich údajov odstránené;\n• dočasné súbory budú odstránené, aby sa uvoľnilo miesto." + diff --git a/PermissionController/res/values-sk-v33/strings.xml b/PermissionController/res/values-sk-v33/strings.xml index d9c2e2372e..9d18d251b3 100644 --- a/PermissionController/res/values-sk-v33/strings.xml +++ b/PermissionController/res/values-sk-v33/strings.xml @@ -28,8 +28,7 @@ "Položka zoznamu. %1$s. %2$s." "%1$s. %2$s" "Ďalšie upozornenia" - - + "Odmietnuté upozornenia" "{count,plural, =1{Po rozbalení sa zobrazí jedno ďalšie upozornenie}few{Po rozbalení sa zobrazia # ďalšie upozornenia}many{Expand and see # more alerts}other{Po rozbalení sa zobrazí # ďalších upozornení}}" "Upozornenie. %1$s. %2$s" "Upozornenie. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sk-v34/strings.xml b/PermissionController/res/values-sk-v34/strings.xml new file mode 100644 index 0000000000..8693dc621b --- /dev/null +++ b/PermissionController/res/values-sk-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Zabezpečenie a ochrana súkromia" + "Ovládanie" + "Údaje" + + + "Správa povolení a údajov aplikácie" + diff --git a/PermissionController/res/values-sk/strings.xml b/PermissionController/res/values-sk/strings.xml index 30afcc7157..1c4ce6ba9b 100644 --- a/PermissionController/res/values-sk/strings.xml +++ b/PermissionController/res/values-sk/strings.xml @@ -591,5 +591,44 @@ "Zobrazovať správu, keď sa aplikácie získajú pristup k textu, obrázkom alebo inému obsahu, ktorý ste skopírovali" "Zobrazovať heslá" "Pri písaní nakrátko zobrazovať zadávané znaky" - "V tejto aplikácii bolo uvedené, že môže zdieľať údaje o polohe s tretími stranami" + "V tejto aplikácii je uvedené, že môže zdieľať údaje o polohe s tretími stranami" + + + "Odkiaľ informácie o zdieľaní údajov pochádzajú" + + + "Aplikácia môže zdieľať údaje o polohe na účely:" + + + "Zdieľanie údajov sa líši" + "Nakladanie s údajmi sa môže líšiť v závislosti od verzie a používania aplikácie, ako aj regiónu a veku používateľa. ""Ďalšie informácie o zdieľaní údajov" + "Údaje o vašej polohe" + "Prístup tejto aplikácie môžete zmeniť v ""nastaveniach ochrany súkromia" + "Funkcie aplikácie" + + + "Komunikácie vývojára" + "Reklama alebo marketing" + "Prevencia podvodov, zabezpečenie a dodržiavanie pravidiel" + + + "Správa účtu" + "Zabezpečenie údajov" + "Môžu sa zdieľať údaje o polohe" + "V tejto aplikácii je uvedené, že môže zdieľať údaje o polohe s tretími stranami" + "Aktualizácie zdieľania údajov o polohe" + "Skontrolujte aplikácie, ktoré zmenili spôsob zdieľania údajov o vašej polohe" + "Tieto aplikácie zmenili spôsob zdieľania údajov o vašej polohe. Možno ich v minulosti nezdieľali alebo ich teraz zdieľajú na účely reklamy a marketingu." + + + "Ďalšie informácie o zdieľaní údajov" + + + + + "{count,plural, =0{Aktualizované v priebehu uplynulého dňa}=1{Aktualizované v priebehu uplynulého dňa}few{Aktualizované v priebehu uplynulých # dní}many{Aktualizované v priebehu uplynulej # dňa}other{Aktualizované v priebehu uplynulých # dní}}" + "Momentálne nie sú k dispozícii žiadne aktualizácie" + "Aktualizácie zdieľania údajov" + "Niektoré aplikácie zmenili spôsob zdieľania údajov o polohe" + "Nastavenia" diff --git a/PermissionController/res/values-sl-v33/strings.xml b/PermissionController/res/values-sl-v33/strings.xml index e7b2201dba..0e9a645527 100644 --- a/PermissionController/res/values-sl-v33/strings.xml +++ b/PermissionController/res/values-sl-v33/strings.xml @@ -28,8 +28,7 @@ "Element na seznamu. %1$s. %2$s" "%1$s. %2$s" "Več opozoril" - - + "Opuščena opozorila" "{count,plural, =1{Razširi in prikaži še eno opozorilo}one{Razširi in prikaži še # opozorilo}two{Razširi in prikaži še # opozorili}few{Razširi in prikaži še # opozorila}other{Razširi in prikaži še # opozoril}}" "Opozorilo. %1$s. %2$s" "Opozorilo. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sl/strings.xml b/PermissionController/res/values-sl/strings.xml index b43f71cd62..8619ec9710 100644 --- a/PermissionController/res/values-sl/strings.xml +++ b/PermissionController/res/values-sl/strings.xml @@ -591,5 +591,68 @@ "Pokaži sporočilo, ko aplikacije dostopijo do besedila, slik ali drugih vsebin, ki ste jih kopirali." "Pokaži gesla" "Za trenutek prikaži znake med vnašanjem." - "Ta aplikacija navaja, da bo lokacijske podatke morda delila s tretjimi osebami." + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-sq-v33/strings.xml b/PermissionController/res/values-sq-v33/strings.xml index bf267319cf..061624d76e 100644 --- a/PermissionController/res/values-sq-v33/strings.xml +++ b/PermissionController/res/values-sq-v33/strings.xml @@ -28,8 +28,7 @@ "Artikulli i listës. %1$s. %2$s" "%1$s. %2$s" "Sinjalizime të tjera" - - + "Sinjalizime të shpërfillura" "{count,plural, =1{Zgjero dhe shiko një sinjalizim tjetër}other{Zgjero dhe shiko # sinjalizime të tjera}}" "Sinjalizim. %1$s. %2$s" "Sinjalizim. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sq/strings.xml b/PermissionController/res/values-sq/strings.xml index 8fbd4aa483..02cc776d48 100644 --- a/PermissionController/res/values-sq/strings.xml +++ b/PermissionController/res/values-sq/strings.xml @@ -591,5 +591,68 @@ "Shfaq një mesazh kur aplikacionet qasen te tekstet, imazhet ose përmbajtje të tjera që ke kopjuar" "Shfaq fjalëkalimet" "Shfaq karakteret shkurtimisht kur shkruan" - "Ky aplikacion deklaroi se mund të ndajë të dhënat e vendndodhjes me palë të treta" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-sr-car/strings.xml b/PermissionController/res/values-sr-car/strings.xml new file mode 100644 index 0000000000..02a58d69aa --- /dev/null +++ b/PermissionController/res/values-sr-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ако не користите апликацију неколико месеци:\n\n• дозволе се уклањају да би се заштитили подаци\n• привремени фајлови се уклањају да би се ослободио простор" + diff --git a/PermissionController/res/values-sr-v33/strings.xml b/PermissionController/res/values-sr-v33/strings.xml index 4ae2f1acce..924e529b88 100644 --- a/PermissionController/res/values-sr-v33/strings.xml +++ b/PermissionController/res/values-sr-v33/strings.xml @@ -28,8 +28,7 @@ "Ставка листе. %1$s. %2$s" "%1$s. %2$s" "Још обавештења" - - + "Одбачена обавештења" "{count,plural, =1{Проширите и видите још једно обавештење}one{Проширите и видите још # обавештење}few{Проширите и видите још # обавештења}other{Проширите и видите још # обавештења}}" "Обавештење. %1$s. %2$s" "Обавештење. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sr-v34/strings.xml b/PermissionController/res/values-sr-v34/strings.xml new file mode 100644 index 0000000000..1d75e2b46e --- /dev/null +++ b/PermissionController/res/values-sr-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Безбедност и приватност" + "Контроле" + "Подаци" + "Повезивање здравља" + "Дозволе за апликације и управљање подацима" + diff --git a/PermissionController/res/values-sr/strings.xml b/PermissionController/res/values-sr/strings.xml index 6c9be2d478..ef573f87ff 100644 --- a/PermissionController/res/values-sr/strings.xml +++ b/PermissionController/res/values-sr/strings.xml @@ -591,5 +591,36 @@ "Приказује поруку када апликације приступају тексту, сликама или другом садржају који сте копирали" "Приказуј лозинке" "Приказује знакове накратко док куцате" - "Ова апликација наводи да може да дели податке са трећим странама" + "Ова апликација наводи да може да дели податке о локацији са трећим странама" + "Дељење података и локација" + "Одакле информације о дељењу података потичу" + "Програмер је навео информације о томе како ова апликација дели податке за: ""%1$s"". Он може да ажурира те информације током времена." + "Апликација може да дели податке о локацији за:" + "%1$s" + "Дељење података варира" + "Праксе за податке могу да се разликују у зависности од верзије апликације, коришћења, региона и узраста. ""Још о дељењу података" + "Подаци о локацији" + "Промените приступ ове апликације у ""подешавањима приватности" + "Функције апликације" + "Аналитика" + "Поруке програмера" + "Оглашавање или маркетинг" + "Спречавање превара, безбедност и усаглашеност" + "Персонализација" + "Управљање налогом" + "Безбедност података" + "Подаци о локацији могу да се деле" + "Ова апликација наводи да може да дели податке о локацији са трећим странама" + "Ажурирања дељења података за локацију" + "Прегледајте апликације које су промениле начин на који могу да деле податке о локацији" + "Апликације су промениле начин на који могу да деле податке о локацији. Можда их нису делиле раније или их сада деле у сврхе оглашавања или маркетинга." + "Програмери ових апликација су пружили податке о праксама за дељење података продавници апликација. Могу да их ажурирају током времена.\n\nПраксе за дељење података могу да се разликују у зависности од верзије апликације, коришћења, региона и узраста." + "Сазнајте више о дељењу података" + "Подаци о локацији се сада деле са трећим странама" + "Подаци о локацији се сада деле са трећим странама у сврху оглашавања или маркетинга" + "{count,plural, =0{Ажурирано током претходног дана}=1{Ажурирано током претходног дана}one{Ажурирано током претходног # дана}few{Ажурирано током претходна # дана}other{Ажурирано током претходних # дана}}" + "Тренутно нема ажурирања" + "Ажурирања за дељење података" + "Неке апликације су промениле начин на који могу да деле податке о локацији" + "Подешавања" diff --git a/PermissionController/res/values-sv-car/strings.xml b/PermissionController/res/values-sv-car/strings.xml new file mode 100644 index 0000000000..56ab6d1f77 --- /dev/null +++ b/PermissionController/res/values-sv-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Följande händer om en app inte används på några månader:\n\n• Behörigheter tas bort för att skydda din data\n• Tillfälliga filer tas bort för att frigöra lagringsutrymme" + diff --git a/PermissionController/res/values-sv-v33/strings.xml b/PermissionController/res/values-sv-v33/strings.xml index c612191bca..10545756e7 100644 --- a/PermissionController/res/values-sv-v33/strings.xml +++ b/PermissionController/res/values-sv-v33/strings.xml @@ -28,8 +28,7 @@ "Post i listan. %1$s. %2$s" "%1$s. %2$s" "Fler varningar" - - + "Ignorerade varningar" "{count,plural, =1{Utöka för att visa en varning till}other{Utöka för att visa # varningar till}}" "Varning. %1$s. %2$s" "Varning. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sv-v34/strings.xml b/PermissionController/res/values-sv-v34/strings.xml new file mode 100644 index 0000000000..b2915c68ec --- /dev/null +++ b/PermissionController/res/values-sv-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Säkerhet och integritet" + "Kontroller" + "Data" + + + "Appbehörigheter och datahantering" + diff --git a/PermissionController/res/values-sv/strings.xml b/PermissionController/res/values-sv/strings.xml index 58c69cd507..78bebd13f0 100644 --- a/PermissionController/res/values-sv/strings.xml +++ b/PermissionController/res/values-sv/strings.xml @@ -591,5 +591,44 @@ "Visa ett meddelande när appar får åtkomst till text, bilder eller annat som du har kopierat" "Visa lösenord" "Visa tecknen en kort stund medan du skriver" - "Appen har angett att den kan dela platsdata med tredje part" + "Appen har angett att den kan dela din platsdata med tredje part" + + + "Härifrån kommer informationen om datadelning" + + + "Appen kan dela platsdata för följande:" + + + "Datadelningen varierar" + "Rutiner för data kan variera efter appversion, användning, region och din ålder. ""Läs mer om datadelning" + "Din platsdata" + "Ändra appens åtkomst i ""integritetsinställningarna" + "Appfunktioner" + + + "Kommunikation från utvecklaren" + "Annonsering eller marknadsföring" + "Säkerhet, efterlevnad och att förhindra bedrägeri" + + + "Kontohantering" + "Datasäkerhet" + "Platsdata kan delas" + "Appen har angett att den kan dela din platsdata med tredje part" + "Uppdatering av datadelning för plats" + "Granska appar som har ändrat hur de kan dela din platsdata" + "Dessa appar har ändrat hur de kan dela din platsdata. De kanske inte har delat datan tidigare eller så delas den nu i annons och marknadsföringssyfte." + + + "Läs mer om datadelning" + + + + + "{count,plural, =0{Uppdaterades under den senaste dagen}=1{Uppdaterades under den senaste dagen}other{Uppdaterades under de senaste # dagarna}}" + "Inga uppdateringar just nu" + "Uppdateringar av datadelning" + "En del appar har ändrat hur de kan dela din platsdata" + "Inställningar" diff --git a/PermissionController/res/values-sw-v33/strings.xml b/PermissionController/res/values-sw-v33/strings.xml index c0f8d82490..be451600df 100644 --- a/PermissionController/res/values-sw-v33/strings.xml +++ b/PermissionController/res/values-sw-v33/strings.xml @@ -28,8 +28,7 @@ "Kipengee cha orodha. %1$s. %2$s" "%1$s. %2$s" "Arifa zaidi" - - + "Arifa zilizoondolewa" "{count,plural, =1{Panua na uangalie arifa moja zaidi}other{Panua na uangalie arifa # zaidi}}" "Arifa. %1$s. %2$s" "Arifa. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml index 7024e384eb..d51e4bd6da 100644 --- a/PermissionController/res/values-sw/strings.xml +++ b/PermissionController/res/values-sw/strings.xml @@ -591,5 +591,68 @@ "Onyesha ujumbe programu zinapofikia maandishi, picha au maudhui mengine uliyonakili" "Onyesha manenosiri" "Onyesha herufi kwa muda mfupi unapoandika" - "Maelezo ya programu yanasema kuwa inaweza kushiriki data na kampuni za wengine" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-ta-car/strings.xml b/PermissionController/res/values-ta-car/strings.xml new file mode 100644 index 0000000000..7cfc02e748 --- /dev/null +++ b/PermissionController/res/values-ta-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ஓர் ஆப்ஸைச் சில மாதங்கள் பயன்படுத்தாமல் இருந்தால்:\n\n• உங்கள் தரவைப் பாதுகாக்க அனுமதிகள் அகற்றப்படும்\n• சேமிப்பிடத்தைக் காலியாக்க தற்காலிக ஃபைல்கள் அகற்றப்படும்" + diff --git a/PermissionController/res/values-ta-v33/strings.xml b/PermissionController/res/values-ta-v33/strings.xml index 3c3ddec5a6..ac32862f28 100644 --- a/PermissionController/res/values-ta-v33/strings.xml +++ b/PermissionController/res/values-ta-v33/strings.xml @@ -28,8 +28,7 @@ "பட்டியல் ஆவணம். %1$s. %2$s" "%1$s. %2$s" "கூடுதல் விழிப்பூட்டல்கள்" - - + "நிராகரிக்கப்பட்ட விழிப்பூட்டல்கள்" "{count,plural, =1{விரிவாக்கி மேலும் ஒரு விழிப்பூட்டலைப் பாருங்கள்}other{விரிவாக்கி மேலும் # விழிப்பூட்டல்களைப் பாருங்கள்}}" "விழிப்பூட்டல். %1$s. %2$s" "விழிப்பூட்டல். %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-ta-v34/strings.xml b/PermissionController/res/values-ta-v34/strings.xml new file mode 100644 index 0000000000..fdb1d7a79b --- /dev/null +++ b/PermissionController/res/values-ta-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "பாதுகாப்பும் தனியுரிமையும்" + "கட்டுப்பாடுகள்" + "தரவு" + + + "ஆப்ஸ் அனுமதிகளும் தரவு நிர்வாகமும்" + diff --git a/PermissionController/res/values-ta/strings.xml b/PermissionController/res/values-ta/strings.xml index 151ba13919..ab5c75120f 100644 --- a/PermissionController/res/values-ta/strings.xml +++ b/PermissionController/res/values-ta/strings.xml @@ -591,5 +591,44 @@ "நீங்கள் நகலெடுத்த வார்த்தைகளையோ படங்களையோ பிறவற்றையோ ஆப்ஸ் அணுகும்போது ஓர் அறிவிப்பைக் காட்டும்" "கடவுச்சொற்களைக் காட்டுதல்" "டைப் செய்யும்போதே எழுத்துகளைச் சற்று நேரம் காட்டும்" - "மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவைப் பகிரலாம் என இந்த ஆப்ஸ் குறிப்பிடுகிறது" + "இந்த ஆப்ஸில் குறிப்பிட்டுள்ளபடி மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவை இது பகிரலாம்" + + + "தரவுப் பகிர்வு குறித்த தகவல்கள் எங்கிருந்து பெறப்படுகின்றன?" + + + "ஆப்ஸ் இவற்றுக்காக இருப்பிடத் தரவைப் பகிரக்கூடும்:" + + + "தரவுப் பகிர்வு வேறுபடுகிறது" + "உங்கள் ஆப்ஸ் பதிப்பு, உபயோகம், பிராந்தியம், வயது ஆகியவற்றின் அடிப்படையில் தரவு நடைமுறைகள் மாறுபடக்கூடும். ""தரவுப் பகிர்வு குறித்த கூடுதல் தகவல்கள்" + "உங்கள் இருப்பிடத் தரவு" + "இந்த ஆப்ஸுக்கான அணுகலை ""தனியுரிமை அமைப்புகளில்"" மாற்றலாம்" + "ஆப்ஸ் செயல்பாடுகள்" + + + "டெவெலப்பர் தகவல்தொடர்புகள்" + "விளம்பரப்படுத்தல் அல்லது மார்க்கெட்டிங்" + "மோசடித் தடுப்பு, பாதுகாப்பு மற்றும் இணக்கம்" + + + "கணக்கு நிர்வாகம்" + "தரவுப் பாதுகாப்பு" + "இருப்பிடத் தரவு பகிரப்பட்டிருக்கலாம்" + "இந்த ஆப்ஸில் குறிப்பிட்டுள்ளபடி மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவை இது பகிரலாம்" + "இருப்பிடத்திற்கான தரவுப் பகிர்வு குறித்த அறிவிப்புகள்" + "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தை மாற்றிய ஆப்ஸ் எவை எனப் பாருங்கள்" + "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தை இந்த ஆப்ஸ் மாற்றியுள்ளன. இதற்குமுன் அவற்றைப் பகிராமல் இருந்திருக்கலாம் அல்லது விளம்பரப்படுத்தல், மார்கெட்டிங் போன்ற நோக்கங்களுக்காக இப்போது பகிரக்கூடும்." + + + "தரவுப் பகிர்வு குறித்துத் தெரிந்துகொள்ளுங்கள்" + + + + + "{count,plural, =0{கடைசி நாளுக்குள் புதுப்பிக்கப்பட்டது}=1{கடைசி நாளுக்குள் புதுப்பிக்கப்பட்டது}other{# நாட்களுக்குள் புதுப்பிக்கப்பட்டது}}" + "இப்போது அறிவிப்புகள் எதுவும் இல்லை" + "தரவுப் பகிர்வு குறித்த அறிவிப்புகள்" + "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தைச் சில ஆப்ஸ் மாற்றியுள்ளன" + "அமைப்புகள்" diff --git a/PermissionController/res/values-te-car/strings.xml b/PermissionController/res/values-te-car/strings.xml new file mode 100644 index 0000000000..deb3eb2ba5 --- /dev/null +++ b/PermissionController/res/values-te-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ఏదైనా యాప్‌ను కొన్ని నెలల పాటు ఉపయోగించకుంటే:\n\n• మీ డేటాను రక్షించడానికి అనుమతులు తీసివేయబడతాయి\n• స్పేస్‌ను ఖాళీ చేయడానికి తాత్కాలిక ఫైల్స్ తీసివేయబడతాయి" + diff --git a/PermissionController/res/values-te-v33/strings.xml b/PermissionController/res/values-te-v33/strings.xml index 45ce9fadc0..0cbe89163b 100644 --- a/PermissionController/res/values-te-v33/strings.xml +++ b/PermissionController/res/values-te-v33/strings.xml @@ -28,8 +28,7 @@ "లిస్ట్ ఐటెమ్. %1$s. %2$s" "%1$s. %2$s" "మరిన్ని అలర్ట్‌లు" - - + "విస్మరించబడిన అలర్ట్‌లు" "{count,plural, =1{విస్తరించి, మరొక అలర్ట్‌ను చూడండి}other{విస్తరించి, మరో # అలర్ట్‌లను చూడండి}}" "అలర్ట్. %1$s. %2$s" "అలర్ట్. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-te-v34/strings.xml b/PermissionController/res/values-te-v34/strings.xml new file mode 100644 index 0000000000..47f689d47a --- /dev/null +++ b/PermissionController/res/values-te-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "సెక్యూరిటీ & గోప్యత" + "కంట్రోల్స్" + "డేటా" + + + "యాప్ అనుమతులు, డేటా మేనేజ్‌మెంట్" + diff --git a/PermissionController/res/values-te/strings.xml b/PermissionController/res/values-te/strings.xml index a886ef244e..e6b342c703 100644 --- a/PermissionController/res/values-te/strings.xml +++ b/PermissionController/res/values-te/strings.xml @@ -591,5 +591,44 @@ "మీరు కాపీ చేసిన టెక్స్ట్, ఇమేజ్‌లను లేదా ఇతర కంటెంట్‌ను యాప్‌లు యాక్సెస్ చేసినప్పుడు మెసేజ్‌ను చూపుతుంది" "పాస్‌వర్డ్‌లను చూపిస్తుంది" "మీరు టైప్ చేస్తున్నప్పుడు అక్షరాలను క్లుప్తంగా చూపిస్తుంది" - "ఈ యాప్, అది లొకేషన్ డేటాను థర్డ్-పార్టీలతో షేర్ చేయవచ్చని పేర్కొంది" + "మీ లొకేషన్ డేటాను ఈ యాప్, థర్డ్-పార్టీలతో షేర్ చేయవచ్చని అది పేర్కొంది" + + + "డేటా షేరింగ్‌కు సంబంధించిన సమాచారం ఎక్కడి నుంచి వస్తుంది" + + + "లొకేషన్ డేటాను యాప్ వీటి కోసం షేర్ చేయవచ్చు:" + + + "డేటా షేరింగ్ మారుతూ ఉంటుంది" + "మీ యాప్ వెర్షన్, వినియోగం, ప్రాంతం ఇంకా వయస్సు ఆధారంగా డేటా ప్రాక్టీసులు మారవచ్చు. ""డేటా షేరింగ్ గురించిన మరింత సమాచారం" + "మీ లొకేషన్ డేటా" + "గోప్యతా సెట్టింగ్‌ల""కు వెళ్లడం ద్వారా ఈ యాప్‌నకు యాక్సెస్‌ను మార్చండి" + "యాప్ ఫంక్షనాలిటీ" + + + "డెవలపర్ కమ్యూనికేషన్స్" + "అడ్వర్టయిజింగ్ లేదా మార్కెటింగ్" + "మోసాన్ని అరికట్టడం, సెక్యూరిటీ ఇంకా అనుకూలత" + + + "ఖాతా మేనేజ్‌మెంట్" + "డేటా భద్రత" + "లొకేషన్ డేటా షేర్ చేయబడవచ్చు" + "మీ లొకేషన్ డేటాను ఈ యాప్, థర్డ్-పార్టీలతో షేర్ చేయవచ్చని అది పేర్కొంది" + "లొకేషన్‌కు సంబంధించిన డేటా షేరింగ్ అప్‌డేట్‌లు" + "మీ లొకేషన్ డేటాను షేర్ చేసే విధానాన్ని మార్చిన యాప్‌లను రివ్యూ చేయండి" + "ఈ యాప్‌లు మీరు మీ లొకేషన్ డేటాను షేర్ చేసే విధానాన్ని మార్చాయి. వారు దీన్ని ఇంతకు ముందు షేర్ చేసి ఉండకపోవచ్చు, లేదా ఇప్పుడు అడ్వర్టయిజింగ్ లేదా మార్కెటింగ్ ప్రయోజనాల కోసం షేర్ చేయవచ్చు." + + + "డేటా షేరింగ్ గురించి తెలుసుకోండి" + + + + + "{count,plural, =0{చివరి రోజున అప్‌డేట్ చేయబడింది}=1{చివరి రోజున అప్‌డేట్ చేయబడింది}other{గత # రోజుల్లో అప్‌డేట్ చేయబడింది}}" + "ఈ సమయంలో ఎటువంటి అప్‌డేట్‌లూ లేవు" + "డేటా షేరింగ్ అప్‌డేట్‌లు" + "కొన్ని యాప్‌లు మీ లొకేషన్ డేటాను షేర్ చేసే విధానాన్ని మార్చాయి" + "సెట్టింగ్‌లు" diff --git a/PermissionController/res/values-th-car/strings.xml b/PermissionController/res/values-th-car/strings.xml new file mode 100644 index 0000000000..73a17d4665 --- /dev/null +++ b/PermissionController/res/values-th-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ระบบจะดำเนินการต่อไปนี้หากไม่มีการใช้แอปเป็นเวลา 2-3 เดือน\n\n• นำสิทธิ์ออกเพื่อปกป้องข้อมูลของคุณ\n• นำไฟล์ชั่วคราวออกเพื่อเพิ่มพื้นที่ว่าง" + diff --git a/PermissionController/res/values-th-v33/strings.xml b/PermissionController/res/values-th-v33/strings.xml index efbf933b31..734bd38cdd 100644 --- a/PermissionController/res/values-th-v33/strings.xml +++ b/PermissionController/res/values-th-v33/strings.xml @@ -28,8 +28,7 @@ "รายการย่อย %1$s %2$s" "%1$s %2$s" "การแจ้งเตือนเพิ่มเติม" - - + "การแจ้งเตือนที่ปิดไป" "{count,plural, =1{ขยายและดูการแจ้งเตือนอีก 1 รายการ}other{ขยายและดูการแจ้งเตือนอีก # รายการ}}" "การแจ้งเตือน %1$s %2$s" "การแจ้งเตือน %1$s %2$s %3$s" diff --git a/PermissionController/res/values-th-v34/strings.xml b/PermissionController/res/values-th-v34/strings.xml new file mode 100644 index 0000000000..378c2662fd --- /dev/null +++ b/PermissionController/res/values-th-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "ความปลอดภัยและความเป็นส่วนตัว" + "การควบคุม" + "ข้อมูล" + "Health Connect" + "สิทธิ์ของแอปและการจัดการข้อมูล" + diff --git a/PermissionController/res/values-th/strings.xml b/PermissionController/res/values-th/strings.xml index 453eaa9110..20d78475d1 100644 --- a/PermissionController/res/values-th/strings.xml +++ b/PermissionController/res/values-th/strings.xml @@ -591,5 +591,36 @@ "แสดงข้อความเมื่อแอปเข้าถึงข้อความ รูปภาพ หรือเนื้อหาอื่นๆ ที่คุณคัดลอก" "แสดงรหัสผ่าน" "แสดงอักขระชั่วครู่ขณะพิมพ์" - "แอปนี้ระบุว่าแอปอาจแชร์ข้อมูลตำแหน่งกับองค์กรบุคคลที่สามของแอป" + "แอปนี้ระบุว่าอาจแชร์ข้อมูลตำแหน่งของคุณกับบุคคลที่สาม" + "การแชร์ข้อมูลและตำแหน่ง" + "แหล่งที่มาของรายละเอียดการแชร์ข้อมูล" + "นักพัฒนาแอปได้ให้ข้อมูลไว้ใน ""%1$s"" เกี่ยวกับวิธีที่แอปนี้แชร์ข้อมูล โดยอาจอัปเดตข้อมูลนี้เมื่อเวลาผ่านไป" + "แอปอาจแชร์ข้อมูลตำแหน่งเพื่อวัตถุประสงค์ต่อไปนี้" + "%1$s" + "การแชร์ข้อมูลแตกต่างกันไปตามปัจจัยต่างๆ" + "วิธีจัดการข้อมูลอาจแตกต่างกันไปตามเวอร์ชันแอป การใช้งาน ภูมิภาค และอายุของผู้ใช้ ""รายละเอียดเพิ่มเติมเกี่ยวกับการแชร์ข้อมูล" + "ข้อมูลตำแหน่งของคุณ" + "เปลี่ยนสิทธิ์เข้าถึงของแอปนี้ใน""การตั้งค่าความเป็นส่วนตัว" + "ฟังก์ชันการทำงานของแอป" + "การวิเคราะห์" + "การสื่อสารจากนักพัฒนาแอป" + "การโฆษณาหรือการตลาด" + "การป้องกันการประพฤติมิชอบ การรักษาความปลอดภัย และการปฏิบัติตามข้อกำหนด" + "การปรับเปลี่ยนในแบบของคุณ" + "การจัดการบัญชี" + "ความปลอดภัยของข้อมูล" + "อาจมีการแชร์ข้อมูลตำแหน่ง" + "แอปนี้ระบุว่าอาจแชร์ข้อมูลตำแหน่งของคุณกับบุคคลที่สาม" + "การอัปเดตการแชร์ข้อมูลตำแหน่ง" + "ตรวจสอบแอปที่เปลี่ยนแปลงวิธีที่อาจใช้แชร์ข้อมูลตำแหน่งของคุณ" + "แอปต่อไปนี้ได้เปลี่ยนแปลงวิธีที่แอปอาจแชร์ข้อมูลตำแหน่งของคุณ โดยที่แอปอาจไม่เคยแชร์มาก่อน หรืออาจแชร์ในตอนนี้เพื่อวัตถุประสงค์ในการโฆษณาหรือการตลาดก็ได้" + "นักพัฒนาแอปเหล่านี้ได้ให้ข้อมูลเกี่ยวกับแนวทางปฏิบัติในการแชร์ข้อมูลไว้ใน App Store นักพัฒนาแอปอาจอัปเดตข้อมูลนี้เมื่อเวลาผ่านไป\n\nแนวทางปฏิบัติในการแชร์ข้อมูลอาจแตกต่างกันไปตามเวอร์ชันของแอป การใช้งาน ภูมิภาค และอายุ" + "ดูรายละเอียดเกี่ยวกับการแชร์ข้อมูล" + "มีการแชร์ข้อมูลตำแหน่งกับบุคคลที่สามในขณะนี้" + "มีการแชร์ข้อมูลตำแหน่งกับบุคคลที่สามเพื่อวัตถุประสงค์ในการโฆษณาหรือการตลาดในขณะนี้" + "{count,plural, =0{อัปเดตภายในวันที่ผ่านมา}=1{อัปเดตภายในวันที่ผ่านมา}other{อัปเดตภายใน # วันที่ผ่านมา}}" + "ยังไม่มีข้อมูลอัปเดตในขณะนี้" + "การอัปเดตการแชร์ข้อมูล" + "มีบางแอปเปลี่ยนแปลงวิธีที่แอปอาจแชร์ข้อมูลตำแหน่งของคุณ" + "การตั้งค่า" diff --git a/PermissionController/res/values-tl-car/strings.xml b/PermissionController/res/values-tl-car/strings.xml new file mode 100644 index 0000000000..5f4111db55 --- /dev/null +++ b/PermissionController/res/values-tl-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Kung hindi ginamit ang isang app sa loob ng ilang buwan:\n\n• Aalisin ang mga pahintulot para maprotektahan ang iyong data\n• Aalisin ang mga pansamantalang file para magbakante ng space" + diff --git a/PermissionController/res/values-tl-v33/strings.xml b/PermissionController/res/values-tl-v33/strings.xml index 1054311298..c09a03a08f 100644 --- a/PermissionController/res/values-tl-v33/strings.xml +++ b/PermissionController/res/values-tl-v33/strings.xml @@ -28,8 +28,7 @@ "Item sa listahan. %1$s. %2$s" "%1$s. %2$s" "Higit pang alerto" - - + "Mga na-dismiss na alerto" "{count,plural, =1{I-expand at makakita ng isa pang alerto}one{I-expand at makakita ng # pang alerto}other{I-expand at makakita ng # pang alerto}}" "Alerto. %1$s. %2$s" "Alerto. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-tl-v34/strings.xml b/PermissionController/res/values-tl-v34/strings.xml new file mode 100644 index 0000000000..aa73fba6dc --- /dev/null +++ b/PermissionController/res/values-tl-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Seguridad at privacy" + "Mga Kontrol" + "Data" + + + "Mga pahintulot sa app at pamamahala ng data" + diff --git a/PermissionController/res/values-tl/strings.xml b/PermissionController/res/values-tl/strings.xml index abecb502d8..9ea4993793 100644 --- a/PermissionController/res/values-tl/strings.xml +++ b/PermissionController/res/values-tl/strings.xml @@ -591,5 +591,44 @@ "Magpakita ng mensahe kapag ina-access ng mga app ang text, mga larawan, o iba pang content na nakopya mo" "Ipakita ang mga password" "Ipakita sandali ang mga character habang nagta-type ka" - "Isinaad ng app na ito na puwede nitong ibahagi ang data ng lokasyon sa mga third party" + "Isinaad ng app na ito na puwede nitong ibahagi ang iyong data ng lokasyon sa mga third party" + + + "Saan nanggagaling ang impormasyon sa pagbabahagi ng data" + + + "Puwedeng magbahagi ng data ng lokasyon para sa:" + + + "Nag-iiba ang pagbabahagi ng data" + "Posibleng mag-iba ang mga kagawian sa data batay sa iyong bersyon ng app, paggamit, rehiyon, at edad. ""Higit pa tungkol sa pagbabahagi ng data" + "Iyong data ng lokasyon" + "Palitan ang access ng app na ito sa ""mga setting ng privacy" + "Functionality ng app" + + + "Mga komunikasyon ng developer" + "Pag-advertise o marketing" + "Pag-iwas sa panloloko, seguridad, at pagsunod" + + + "Pamamahala sa account" + "Kaligtasan ng data" + "Puwedeng ibahagi ang data ng lokasyon" + "Isinaad ng app na ito na puwede nitong ibahagi ang iyong data ng lokasyon sa mga third party" + "Mga update sa pagbabahagi ng data para sa lokasyon" + "Suriin ang mga app na nagbago ng paraan kung paano nila posibleng ibahagi ang iyong data ng lokasyon" + "Binago ng mga app na ito ang paraan kung paano posibleng ibahagi ng mga ito ang iyong data ng lokasyon. Posibleng hindi pa nila ito ibinahagi noon, o ibinabahagi nila ito ngayon para sa mga layunin sa pag-advertise o marketing." + + + "Matuto tungkol sa pagbabahagi ng data" + + + + + "{count,plural, =0{Na-update sa loob ng huling araw}=1{Na-update sa loob ng huling araw}one{Na-update sa loob ng # araw}other{Na-update sa loob ng # na araw}}" + "Walang update sa ngayon" + "Update sa pagbabahagi ng data" + "Binago ng ilang app ang paraan kung paano posibleng ibahagi ng mga ito ang iyong data ng lokasyon" + "Mga Setting" diff --git a/PermissionController/res/values-tr-v33/strings.xml b/PermissionController/res/values-tr-v33/strings.xml index ebbac5891e..a5e8f19f9c 100644 --- a/PermissionController/res/values-tr-v33/strings.xml +++ b/PermissionController/res/values-tr-v33/strings.xml @@ -28,8 +28,7 @@ "Liste öğesi. %1$s. %2$s" "%1$s. %2$s" "Daha fazla uyarı" - - + "Reddedilen uyarılar" "{count,plural, =1{Genişletip bir uyarıyı daha görün}other{Genişletip # uyarıyı daha görün}}" "Uyarı. %1$s. %2$s" "Uyarı. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-tr/strings.xml b/PermissionController/res/values-tr/strings.xml index d88f6ce031..ac2c418602 100644 --- a/PermissionController/res/values-tr/strings.xml +++ b/PermissionController/res/values-tr/strings.xml @@ -591,5 +591,68 @@ "Uygulamalar kopyaladığınız metne, resimlere veya diğer içeriklere eriştiğinde mesaj gösterilsin." "Şifreleri göster" "Yazarken karakterleri kısa süreliğine göster" - "Bu uygulama, konum verilerini üçüncü taraflarla paylaşabileceğini belirtti" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-uk-v33/strings.xml b/PermissionController/res/values-uk-v33/strings.xml index baa60eaca1..64a0ef73dc 100644 --- a/PermissionController/res/values-uk-v33/strings.xml +++ b/PermissionController/res/values-uk-v33/strings.xml @@ -28,8 +28,7 @@ "Пункт списку. %1$s. %2$s" "%1$s. %2$s" "Більше сповіщень" - - + "Закриті сповіщення" "{count,plural, =1{Розгорніть і перегляньте ще одне сповіщення}one{Розгорніть і перегляньте ще # сповіщення}few{Розгорніть і перегляньте ще # сповіщення}many{Розгорніть і перегляньте ще # сповіщень}other{Розгорніть і перегляньте ще # сповіщення}}" "Сповіщення. %1$s. %2$s" "Сповіщення. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml index e45d537908..65471870a3 100644 --- a/PermissionController/res/values-uk/strings.xml +++ b/PermissionController/res/values-uk/strings.xml @@ -591,5 +591,68 @@ "З’являтиметься сповіщення, коли будь-який додаток отримуватиме доступ до скопійованого вами тексту, зображень чи іншого контенту" "Показувати паролі" "Ненадовго показувати символи під час введення" - "Цей додаток зазначає, що може передавати дані про місцезнаходження третім особам" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-ur-car/strings.xml b/PermissionController/res/values-ur-car/strings.xml new file mode 100644 index 0000000000..e9fc1c7c9c --- /dev/null +++ b/PermissionController/res/values-ur-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "اگر کوئی ایپ کچھ ماہ تک استعمال نہیں ہوتی ہے تو:\n\n• آپ کے ڈیٹا کی حفاظت کرنے کیے لیے اجازتوں کو ہٹا دیا جاتا ہے\n• اسپیس خالی کرنے کے لیے عارضی فائلز کو ہٹا دیا جاتا ہے" + diff --git a/PermissionController/res/values-ur-v33/strings.xml b/PermissionController/res/values-ur-v33/strings.xml index e77759f67c..2d0e21ab8a 100644 --- a/PermissionController/res/values-ur-v33/strings.xml +++ b/PermissionController/res/values-ur-v33/strings.xml @@ -28,8 +28,7 @@ "فہرست آئٹم۔ %1$s۔ %2$s" "%1$s۔ %2$s" "مزید الرٹس" - - + "برخاست کردہ الرٹس" "{count,plural, =1{پھیلائیں اور ایک اور الرٹ دیکھیں}other{پھیلائیں اور # مزید الرٹس دیکھیں}}" "الرٹ۔ %1$s۔ %2$s" "الرٹ۔ %1$s۔ %2$s۔ %3$s" diff --git a/PermissionController/res/values-ur-v34/strings.xml b/PermissionController/res/values-ur-v34/strings.xml new file mode 100644 index 0000000000..fb545f0d82 --- /dev/null +++ b/PermissionController/res/values-ur-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "سیکیورٹی اور رازداری" + "کنٹرولز" + "ڈیٹا" + + + "ایپ کی اجازتیں اور ڈیٹا مینجمنٹ" + diff --git a/PermissionController/res/values-ur/strings.xml b/PermissionController/res/values-ur/strings.xml index 556f104e87..18da776935 100644 --- a/PermissionController/res/values-ur/strings.xml +++ b/PermissionController/res/values-ur/strings.xml @@ -591,5 +591,44 @@ "ایپس کے آپ کے کاپی کردہ ٹیکسٹ، تصاویر یا دیگر مواد تک رسائی حاصل کرنے پر پیغام دکھائیں" "پاس ورڈز دکھائیں" "ٹائپ کرتے وقت حروف کو مختصر طور پر ڈسپلے کریں" - "اس ایپ نے بتایا ہے کہ یہ مقام کے ڈیٹا کا اشتراک فریقین ثالث کے ساتھ کر سکتی ہے" + "اس ایپ نے بتایا ہے کہ یہ آپ کے مقام کے ڈیٹا کا اشتراک فریقین ثالث کے ساتھ کر سکتی ہے" + + + "ڈیٹا کے اشتراک کی معلومات کا ذریعہ" + + + "ایپ ذیل کے لیے مقام کے ڈیٹا کا اشتراک کر سکتی ہے:" + + + "ڈیٹا کا اشتراک مختلف ہوتا ہے" + "آپ کے ایپ ورژن، استعمال، علاقے اور عمر کی بنیاد پر ڈیٹا پریکٹسز مختلف ہو سکتے ہیں۔ ""ڈیٹا کے اشتراک کے بارے میں مزید" + "آپ کے مقام کا ڈیٹا" + "رازداری کی ترتیبات"" میں اس ایپ کی رسائی کو تبدیل کریں" + "ایپ کی فعالیت" + + + "ڈیولپر سے مواصلات" + "تشہیر یا مارکیٹنگ" + "دھوکے سے بچاؤ، سیکیورٹی اور تعمیل" + + + "اکاؤنٹ کا نظم و نسق" + "ڈیٹا کی حفاظت" + "مقام کے ڈیٹا کا اشتراک کیا جا سکتا ہے" + "اس ایپ نے بتایا ہے کہ یہ آپ کے مقام کے ڈیٹا کا اشتراک فریقین ثالث کے ساتھ کر سکتی ہے" + "مقام کیلئے ڈیٹا کے اشتراک کی اپ ڈیٹس" + "ان ایپس کا جائزہ لیں جنہوں نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا" + "ان ایپس نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا ہے۔ ہو سکتا ہے کہ انہوں نے پہلے اس کا اشتراک نہ کیا ہو یا ممکنہ طور پر اب تشہیر یا مارکیٹنگ کے مقاصد کے لیے اس کا اشتراک کر سکتی ہیں۔" + + + "ڈیٹا کے اشتراک کے بارے میں جانیں" + + + + + "{count,plural, =0{آخری دن سے پہلے اپ ڈیٹ کی گئی}=1{آخری دن سے پہلے اپ ڈیٹ کی گئی}other{# دن سے پہلے اپ ڈیٹ کی گئی}}" + "اس وقت کوئی اپ ڈیٹ نہیں ہے" + "ڈیٹا کے اشتراک کی اپ ڈیٹس" + "کچھ ایپس نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا" + "ترتیبات" diff --git a/PermissionController/res/values-uz-car/strings.xml b/PermissionController/res/values-uz-car/strings.xml new file mode 100644 index 0000000000..7654f1115b --- /dev/null +++ b/PermissionController/res/values-uz-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ilova bir necha oy ishlatilmasa:\n\n• Maxfiyligingizni himoyalash uchun ruxsatlar bekor qilinadi\n• Boʻsh joy ochish uchun vaqtinchalik fayllar tozalab tashlanadi" + diff --git a/PermissionController/res/values-uz-v33/strings.xml b/PermissionController/res/values-uz-v33/strings.xml index 5801a3a146..c3cda9e032 100644 --- a/PermissionController/res/values-uz-v33/strings.xml +++ b/PermissionController/res/values-uz-v33/strings.xml @@ -28,8 +28,7 @@ "Roʻyxat bandi. %1$s. %2$s" "%1$s. %2$s" "Boshqa ogohlantirishlar" - - + "Ogohlantirishlar yopildi" "{count,plural, =1{Kengaytirish va yana bitta ogohlantirishni ochish}other{Kengaytirish va yana # ta ogohlantirishni ochish}}" "Ogohlantirish. %1$s. %2$s" "Ogohlantirish. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-uz-v34/strings.xml b/PermissionController/res/values-uz-v34/strings.xml new file mode 100644 index 0000000000..902ec3bc94 --- /dev/null +++ b/PermissionController/res/values-uz-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Xavfsizlik va maxfiylik" + "Boshqaruv" + "Maʼlumotlar" + "Health Connect" + "Ilova ruxsatlari va maʼlumotlar boshqaruvi" + diff --git a/PermissionController/res/values-uz/strings.xml b/PermissionController/res/values-uz/strings.xml index 3a32a979d2..0ab71caefa 100644 --- a/PermissionController/res/values-uz/strings.xml +++ b/PermissionController/res/values-uz/strings.xml @@ -591,5 +591,36 @@ "Ilovalar siz nusxa olgan matn, rasmlar yoki boshqa kontentdan foydalanganda xabar chiqarish" "Parollar ochiq tursin" "Parolni kiritishda belgilar qisqa muddat ochiq turadi" - "Bu ilovaning maʼlumotlarini begonalarga ulashishi mumkinligi xabar berildi" + "Bu ilova tashqariga joylashuv axborotini ulashishi mumkinligi aniqlandi" + "Maʼlumotlar ulashuvi va joylashuv axboroti" + "Maʼlumotlar ulashuvi haqidagi axborot manbasi" + "Dasturchi ""%1$s"" ga bu ilovadagi maʼlumotlar qanday ulashilishi haqida axborot bergan. Bu axborot keyinchalik yangilanishi mumkin." + "Ilova joylashuv axborotini quyidagicha ulashadi:" + "%1$s" + "Maʼlumotlarning turlicha ulashuvi" + "Axborot bilan ishlash amaliyotlari ilova versiyasi, foydalanish, hudud va yoshga qarab farq qilishi mumkin. ""Maʼlumotlar ulashuvi haqida batafsil" + "Joylashuvingiz axboroti" + "Bu ilovaning ""maxfiylik sozlamalariga"" ruxsatini oʻzgartiring" + "Ilova funksiyalari" + "Analitika" + "Dasturchidan axborot" + "Reklama yoki marketing" + "Firibgarlikning oldini olish, xavfsizlik va unga rioya qilish" + "Moslashtirish" + "Hisob boshqaruvi" + "Maʼlumotlar xavfsizligi" + "Joylashuv axboroti ulashilishi mumkin" + "Bu ilova tashqariga joylashuv axborotini ulashishi mumkinligi aniqlandi" + "Joylashuv axboroti ulashuvidagi oʻzgarishlar" + "Joylashuv axboroti ulashuviga oʻzgartirish kiritgan ilovalarni tekshiring" + "Quyidagi ilovalarda joylashuv axboroti ulashuvi oʻzgardi. Avval ulashilmagan boʻlishi yoki endi reklama va marketing maqsadlarida ulashilishi mumkin" + "Quyidagi ilovalar dasturchilari ilova doʻkoniga maʼlumotlar qanday ulashilishi haqida axborot bergan. Bu axborot keyinchalik yangilanishi mumkin.\n\nMaʼlumotlar ilova versiyasi, foydalanishi, mamlakat va yosh asosida ulashiladi." + "Maʼlumotlar ulashuvi haqida batafsil" + "Joylashuvingiz axboroti endi tashqariga ulashilmoqda" + "Joylashuvingiz axboroti endi reklama yoki marketing maqsadlarida tashqariga ulashilmoqda" + "{count,plural, =0{Oxirgi bir kunda yangilandi}=1{Oxirgi bir kunda yangilandi}other{Oxirgi # kunda yangilandi}}" + "Hozircha yangilanishlar mavjud emas" + "Axborot ulashuvi yangilanishi" + "Ayrim ilovalarda joylashuv axboroti ulashuvi oʻzgardi" + "Sozlamalar" diff --git a/PermissionController/res/values-vi-car/strings.xml b/PermissionController/res/values-vi-car/strings.xml new file mode 100644 index 0000000000..43c2c0b21a --- /dev/null +++ b/PermissionController/res/values-vi-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Nếu bạn không dùng một ứng dụng trong một vài tháng, thì hệ thống sẽ:\n\n• Xoá các quyền để bảo vệ dữ liệu của bạn\n• Xoá các tệp tạm thời để giải phóng dung lượng" + diff --git a/PermissionController/res/values-vi-v33/strings.xml b/PermissionController/res/values-vi-v33/strings.xml index 1904c0f728..23b53d0acd 100644 --- a/PermissionController/res/values-vi-v33/strings.xml +++ b/PermissionController/res/values-vi-v33/strings.xml @@ -28,8 +28,7 @@ "Mục trong danh sách. %1$s. %2$s" "%1$s. %2$s" "Cảnh báo khác" - - + "Cảnh báo bị loại bỏ" "{count,plural, =1{Mở rộng và xem một cảnh báo khác}other{Mở rộng và xem # cảnh báo khác}}" "Cảnh báo. %1$s. %2$s" "Cảnh báo. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-vi-v34/strings.xml b/PermissionController/res/values-vi-v34/strings.xml new file mode 100644 index 0000000000..9c3c4ad65c --- /dev/null +++ b/PermissionController/res/values-vi-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Tính bảo mật và quyền riêng tư" + "Các chế độ kiểm soát" + "Dữ liệu" + + + "Quản lý dữ liệu và quyền cho ứng dụng" + diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index 51427c699d..d3ad9233bd 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -591,5 +591,44 @@ "Hiện thông báo khi có ứng dụng truy cập vào văn bản, hình ảnh hoặc nội dung khác mà bạn đã sao chép" "Hiển thị mật khẩu" "Hiển thị các ký tự ngắn gọn khi bạn nhập" - "Nhà phát triển nêu rõ ứng dụng này có thể chia sẻ dữ liệu vị trí với bên thứ ba" + "Nhà phát triển nêu rõ rằng ứng dụng này có thể chia sẻ dữ liệu vị trí với bên thứ ba" + + + "Nguồn cung cấp thông tin về cách thức chia sẻ dữ liệu" + + + "Ứng dụng này có thể chia sẻ dữ liệu vị trí cho:" + + + "Nhiều cách thức chia sẻ dữ liệu" + "Cách thức xử lý dữ liệu có thể thay đổi tuỳ theo phiên bản ứng dụng, cách sử dụng, khu vực và độ tuổi của bạn. ""Tìm hiểu thêm về chế độ chia sẻ dữ liệu" + "Dữ liệu vị trí của bạn" + "Thay đổi quyền truy cập của ứng dụng này trong ""chế độ cài đặt quyền riêng tư" + "Chức năng của ứng dụng" + + + "Thông tin liên lạc của nhà phát triển" + "Quảng cáo hoặc tiếp thị" + "Chống lừa đảo, bảo mật và tuân thủ quy định" + + + "Quản lý tài khoản" + "An toàn dữ liệu" + "Dữ liệu vị trí có thể được chia sẻ" + "Nhà phát triển nêu rõ rằng ứng dụng này có thể chia sẻ dữ liệu vị trí với bên thứ ba" + "Nội dung cập nhật về cách thức chia sẻ dữ liệu vị trí" + "Xem xét những ứng dụng đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn" + "Những ứng dụng này đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn. Có thể những ứng dụng này trước đây chưa từng chia sẻ dữ liệu vị trí, nhưng bây giờ mới chia sẻ dữ liệu đó nhằm mục đích quảng cáo hoặc tiếp thị." + + + "Tìm hiểu về chế độ chia sẻ dữ liệu" + + + + + "{count,plural, =0{Cập nhật trong ngày vừa qua}=1{Cập nhật trong ngày vừa qua}other{Cập nhật trong # ngày vừa qua}}" + "Hiện không có nội dung cập nhật nào" + "Nội dung cập nhật về cách thức chia sẻ dữ liệu" + "Một số ứng dụng đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn" + "Cài đặt" diff --git a/PermissionController/res/values-zh-rCN-v33/strings.xml b/PermissionController/res/values-zh-rCN-v33/strings.xml index c5deeb0d6c..4137818d0d 100644 --- a/PermissionController/res/values-zh-rCN-v33/strings.xml +++ b/PermissionController/res/values-zh-rCN-v33/strings.xml @@ -28,8 +28,7 @@ "列表项。%1$s%2$s" "%1$s%2$s" "更多提醒" - - + "忽略的提醒" "{count,plural, =1{展开并查看另外一项提醒}other{展开并查看另外 # 项提醒}}" "警报。%1$s%2$s" "警报。%1$s%2$s%3$s" diff --git a/PermissionController/res/values-zh-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml index 92ef59eaf3..7ec840e39f 100644 --- a/PermissionController/res/values-zh-rCN/strings.xml +++ b/PermissionController/res/values-zh-rCN/strings.xml @@ -591,5 +591,68 @@ "系统会在应用访问您复制的文字、图片或其他内容时显示一条消息" "显示密码" "输入时短暂显示字符" - "此应用已声明它可能会与第三方共享位置数据" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-zh-rHK-car/strings.xml b/PermissionController/res/values-zh-rHK-car/strings.xml new file mode 100644 index 0000000000..fae91ec109 --- /dev/null +++ b/PermissionController/res/values-zh-rHK-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "如果您在過去幾個月未曾使用應用程式,系統將會:\n\n• 移除權限以保護您的資料\n• 移除暫存檔案以騰出空間" + diff --git a/PermissionController/res/values-zh-rHK-v33/strings.xml b/PermissionController/res/values-zh-rHK-v33/strings.xml index 65892c5add..2af0afce25 100644 --- a/PermissionController/res/values-zh-rHK-v33/strings.xml +++ b/PermissionController/res/values-zh-rHK-v33/strings.xml @@ -28,8 +28,7 @@ "清單項目。%1$s%2$s" "%1$s%2$s" "更多警示" - - + "已關閉的警示" "{count,plural, =1{展開即可查看多一個警示}other{展開即可查看多 # 個警示}}" "警示。%1$s%2$s" "警示。%1$s%2$s%3$s" diff --git a/PermissionController/res/values-zh-rHK-v34/strings.xml b/PermissionController/res/values-zh-rHK-v34/strings.xml new file mode 100644 index 0000000000..82d6caef43 --- /dev/null +++ b/PermissionController/res/values-zh-rHK-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "安全性和私隱權" + "控制項" + "資料" + + + "應用程式權限和資料管理" + diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml index 9ae4b0b700..68ac4555a6 100644 --- a/PermissionController/res/values-zh-rHK/strings.xml +++ b/PermissionController/res/values-zh-rHK/strings.xml @@ -591,5 +591,44 @@ "系統會在應用程式存取您複製的文字、圖片或其他內容時顯示訊息" "顯示密碼" "輸入時短暫顯示字元" - "此應用程式表明可能會與第三方分享位置資料" + "此應用程式表明可能會與第三方分享您的位置資料" + + + "資料分享的資料來源" + + + "應用程式可能分享位置資料作以下用途:" + + + "資料分享方式差異" + "資料處理方法可因應用程式版本、使用情況、所在地區和年齡而異。""進一步瞭解資料分享" + "您的位置資料" + "如要變更此應用程式的存取權,請前往""私隱權設定" + "應用程式功能" + + + "開發人員通訊" + "廣告或市場推廣" + "預防欺詐、安全和合規" + + + "帳戶管理" + "資料安全" + "系統可能會分享位置資料" + "此應用程式表明可能會與第三方分享您的位置資料" + "位置資料分享更新" + "查看已變更位置資料分享方式的應用程式" + "這些應用程式已變更位置資料分享方式。它們可能未曾分享位置資料,或現在可能分享這些資料作廣告或市場推廣用途。" + + + "進一步瞭解資料分享" + + + + + "{count,plural, =0{於過去一天內更新}=1{於過去一天內更新}other{於過去 # 天內更新}}" + "目前沒有更新" + "資料分享更新" + "部分應用程式已變更位置資料分享方式" + "設定" diff --git a/PermissionController/res/values-zh-rTW-v33/strings.xml b/PermissionController/res/values-zh-rTW-v33/strings.xml index 0261867165..8d136da4a6 100644 --- a/PermissionController/res/values-zh-rTW-v33/strings.xml +++ b/PermissionController/res/values-zh-rTW-v33/strings.xml @@ -28,8 +28,7 @@ "清單項目。%1$s%2$s" "%1$s%2$s" "更多警示" - - + "已關閉的警示" "{count,plural, =1{展開並查看另外 1 則快訊}other{展開並查看另外 # 則快訊}}" "警示。%1$s%2$s" "警示。%1$s%2$s%3$s" diff --git a/PermissionController/res/values-zh-rTW/strings.xml b/PermissionController/res/values-zh-rTW/strings.xml index e1e236a5f3..23ccdeb494 100644 --- a/PermissionController/res/values-zh-rTW/strings.xml +++ b/PermissionController/res/values-zh-rTW/strings.xml @@ -591,5 +591,68 @@ "系統會在應用程式存取你複製的文字、圖片或其他內容時顯示通知訊息" "顯示密碼" "輸入密碼時,短暫顯示剛輸入的字元" - "這個應用程式表示可能會將位置資料分享給第三方" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PermissionController/res/values-zu-v33/strings.xml b/PermissionController/res/values-zu-v33/strings.xml index 0fa4465b49..e03c2f4d4d 100644 --- a/PermissionController/res/values-zu-v33/strings.xml +++ b/PermissionController/res/values-zu-v33/strings.xml @@ -28,8 +28,7 @@ "Faka into ohlwini %1$s. %2$s" "%1$s. %2$s" "Ezinye izexwayiso" - - + "Chitha izexwayiso" "{count,plural, =1{Nweba futhi ubone esinye isexwayiso}one{Nweba futhi ubone ezinye izexwayiso ezingu-#}other{Nweba futhi ubone ezinye izexwayiso ezingu-#}}" "Isexwayiso. %1$s. %2$s" "Isexwayiso. %1$s. %2$s. %3$s" diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml index b11ea9115a..14c58df290 100644 --- a/PermissionController/res/values-zu/strings.xml +++ b/PermissionController/res/values-zu/strings.xml @@ -591,5 +591,68 @@ "Bonisa umlayezo uma ama-app wakho afinyelela umbhalo, izithombe, noma okunye okuqukethwe okukopishile" "Bonisa amaphasiwedi" "Bonisa izinhlamvu kancane njengoba uthayipha" - "Le-app ithi ingabelana ngedatha yendawo nezinkampani engahlangene ngqo" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- GitLab From aebc0e304ac3be7a3b1f67b3df4be6fa4804ff2e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 21 Feb 2023 05:28:24 -0800 Subject: [PATCH 007/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ic24dcc41659c226d335af781619c9169c8aff64d --- .../Resources/res/values-af-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-am-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ar-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-as-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-az-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-b+sr+Latn-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-be-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-bg-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-bn-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-bs-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-ca-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-cs-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-da-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-de-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-el-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-en-rAU-v34/strings.xml | 31 ++++++++++++++ .../res/values-en-rCA-v34/strings.xml | 31 ++++++++++++++ .../res/values-en-rGB-v34/strings.xml | 31 ++++++++++++++ .../res/values-en-rIN-v34/strings.xml | 31 ++++++++++++++ .../res/values-en-rXC-v34/strings.xml | 31 ++++++++++++++ .../res/values-es-rUS-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-es-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-et-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-eu-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-fa-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-fi-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-fr-rCA-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-fr-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-gl-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-gu-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-hi-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-hr-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-hu-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-hy-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-in-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-is-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-it-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-iw-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ja-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ka-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-kk-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-km-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-kn-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ko-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ky-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-lo-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-lt-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-lv-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-mk-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ml-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-mn-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-mr-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ms-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-my-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-nb-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ne-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-nl-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-or-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-pa-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-pl-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-pt-rBR-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-pt-rPT-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-pt-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ro-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ru-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-si-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-sk-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-sl-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-sq-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-sr-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-sv-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-sw-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ta-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-te-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-th-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-tl-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-tr-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-uk-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-ur-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-uz-v34/strings.xml | 31 ++++++++++++++ .../Resources/res/values-vi-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-zh-rCN-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-zh-rHK-v34/strings.xml | 41 +++++++++++++++++++ .../res/values-zh-rTW-v34/strings.xml | 41 +++++++++++++++++++ .../Resources/res/values-zu-v34/strings.xml | 41 +++++++++++++++++++ 85 files changed, 3355 insertions(+) create mode 100644 SafetyCenter/Resources/res/values-af-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-am-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ar-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-as-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-az-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-b+sr+Latn-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-be-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-bg-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-bn-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-bs-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ca-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-cs-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-da-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-de-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-el-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-en-rCA-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-en-rXC-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-es-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-et-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-eu-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-fa-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-fi-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-fr-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-gl-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-gu-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-hi-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-hr-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-hu-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-hy-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-in-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-is-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-it-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-iw-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ja-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ka-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-kk-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-km-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-kn-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ko-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ky-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-lo-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-lt-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-lv-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-mk-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ml-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-mn-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-mr-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ms-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-my-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-nb-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ne-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-nl-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-or-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-pa-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-pl-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-pt-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ro-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ru-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-si-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sk-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sl-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sq-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sr-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sv-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-sw-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ta-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-te-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-th-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-tl-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-tr-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-uk-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-ur-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-uz-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-vi-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml create mode 100644 SafetyCenter/Resources/res/values-zu-v34/strings.xml diff --git a/SafetyCenter/Resources/res/values-af-v34/strings.xml b/SafetyCenter/Resources/res/values-af-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-af-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-am-v34/strings.xml b/SafetyCenter/Resources/res/values-am-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-am-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ar-v34/strings.xml b/SafetyCenter/Resources/res/values-ar-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ar-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-as-v34/strings.xml b/SafetyCenter/Resources/res/values-as-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-as-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-az-v34/strings.xml b/SafetyCenter/Resources/res/values-az-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-az-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-b+sr+Latn-v34/strings.xml b/SafetyCenter/Resources/res/values-b+sr+Latn-v34/strings.xml new file mode 100644 index 0000000000..b57f584045 --- /dev/null +++ b/SafetyCenter/Resources/res/values-b+sr+Latn-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Povezivanje zdravlja" + "zdravlje, povezivanje zdravlja" + "Ažuriranja deljenja podataka za lokaciju" + "podaci, deljenje podataka, ažuriranja deljenja podataka, ažuriranja deljenja podataka za lokaciju, deljenje" + "Privatnost sa oglasima" + "Prilagodite informacije koje aplikacije koriste da bi vam prikazivale oglase" + "oglasi, privatnost sa oglasima, zaštićeno okruženje privatnosti, teme oglasa, oglasi koje predlažu aplikacije, merenje oglasa" + "Biometrija za posao" + "Još podešavanja" + "Šifrovanje, akreditivi i drugo" + + diff --git a/SafetyCenter/Resources/res/values-be-v34/strings.xml b/SafetyCenter/Resources/res/values-be-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-be-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-bg-v34/strings.xml b/SafetyCenter/Resources/res/values-bg-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-bg-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-bn-v34/strings.xml b/SafetyCenter/Resources/res/values-bn-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-bn-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-bs-v34/strings.xml b/SafetyCenter/Resources/res/values-bs-v34/strings.xml new file mode 100644 index 0000000000..4ab3828692 --- /dev/null +++ b/SafetyCenter/Resources/res/values-bs-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Zdravlje, Health Connect" + "Ažuriranja dijeljenja podataka za lokaciju" + "podaci, dijeljenje podataka, ažuriranja dijeljenja podataka, ažuriranja dijeljenja podataka za lokaciju, dijeljenje" + "Zaštita privatnosti u online oglašavanju" + "Prilagodite podatke koje aplikacije koriste da bi vam prikazivale oglase" + "oglasi, zaštita privatnosti u online oglašavanju, privacy sandbox, teme oglasa, oglasi koje predlažu aplikacije, mjerenje oglasa" + "Biometrijski podaci za posao" + "Više postavki" + "Šifriranje, vjerodajnice i drugo" + + diff --git a/SafetyCenter/Resources/res/values-ca-v34/strings.xml b/SafetyCenter/Resources/res/values-ca-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ca-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-cs-v34/strings.xml b/SafetyCenter/Resources/res/values-cs-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-cs-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-da-v34/strings.xml b/SafetyCenter/Resources/res/values-da-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-da-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-de-v34/strings.xml b/SafetyCenter/Resources/res/values-de-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-de-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-el-v34/strings.xml b/SafetyCenter/Resources/res/values-el-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-el-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml new file mode 100644 index 0000000000..a361163ab4 --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "Data sharing updates for location" + "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" + "Ads privacy" + "Customise info apps use to show you ads" + "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" + "Biometrics for work" + "More settings" + "Encryption, credentials and more" + + diff --git a/SafetyCenter/Resources/res/values-en-rCA-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rCA-v34/strings.xml new file mode 100644 index 0000000000..90ffcde492 --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rCA-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "Data sharing updates for location" + "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" + "Ads privacy" + "Customize info apps use to show you ads" + "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" + "Biometrics for work" + "More settings" + "Encryption, credentials, and more" + + diff --git a/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml new file mode 100644 index 0000000000..a361163ab4 --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "Data sharing updates for location" + "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" + "Ads privacy" + "Customise info apps use to show you ads" + "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" + "Biometrics for work" + "More settings" + "Encryption, credentials and more" + + diff --git a/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml new file mode 100644 index 0000000000..a361163ab4 --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "Data sharing updates for location" + "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" + "Ads privacy" + "Customise info apps use to show you ads" + "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" + "Biometrics for work" + "More settings" + "Encryption, credentials and more" + + diff --git a/SafetyCenter/Resources/res/values-en-rXC-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rXC-v34/strings.xml new file mode 100644 index 0000000000..787114d5ee --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rXC-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎Health Connect‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎Health, Health Connect‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎Data sharing updates for location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎Ads privacy‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎Customize info apps use to show you ads‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎Biometrics for work‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎More settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎Encryption, credentials, and more‎‏‎‎‏‎" + + diff --git a/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml b/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-es-v34/strings.xml b/SafetyCenter/Resources/res/values-es-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-es-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-et-v34/strings.xml b/SafetyCenter/Resources/res/values-et-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-et-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-eu-v34/strings.xml b/SafetyCenter/Resources/res/values-eu-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-eu-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-fa-v34/strings.xml b/SafetyCenter/Resources/res/values-fa-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-fa-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-fi-v34/strings.xml b/SafetyCenter/Resources/res/values-fi-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-fi-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml b/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-fr-v34/strings.xml b/SafetyCenter/Resources/res/values-fr-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-fr-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-gl-v34/strings.xml b/SafetyCenter/Resources/res/values-gl-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-gl-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-gu-v34/strings.xml b/SafetyCenter/Resources/res/values-gu-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-gu-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-hi-v34/strings.xml b/SafetyCenter/Resources/res/values-hi-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-hi-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-hr-v34/strings.xml b/SafetyCenter/Resources/res/values-hr-v34/strings.xml new file mode 100644 index 0000000000..4ab3828692 --- /dev/null +++ b/SafetyCenter/Resources/res/values-hr-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Zdravlje, Health Connect" + "Ažuriranja dijeljenja podataka za lokaciju" + "podaci, dijeljenje podataka, ažuriranja dijeljenja podataka, ažuriranja dijeljenja podataka za lokaciju, dijeljenje" + "Zaštita privatnosti u online oglašavanju" + "Prilagodite podatke koje aplikacije koriste da bi vam prikazivale oglase" + "oglasi, zaštita privatnosti u online oglašavanju, privacy sandbox, teme oglasa, oglasi koje predlažu aplikacije, mjerenje oglasa" + "Biometrijski podaci za posao" + "Više postavki" + "Šifriranje, vjerodajnice i drugo" + + diff --git a/SafetyCenter/Resources/res/values-hu-v34/strings.xml b/SafetyCenter/Resources/res/values-hu-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-hu-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-hy-v34/strings.xml b/SafetyCenter/Resources/res/values-hy-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-hy-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-in-v34/strings.xml b/SafetyCenter/Resources/res/values-in-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-in-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-is-v34/strings.xml b/SafetyCenter/Resources/res/values-is-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-is-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-it-v34/strings.xml b/SafetyCenter/Resources/res/values-it-v34/strings.xml new file mode 100644 index 0000000000..60cc5e92f3 --- /dev/null +++ b/SafetyCenter/Resources/res/values-it-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Connessione Salute" + "Salute, Connessione Salute" + "Aggiornamenti alla condivisione dei dati per la posizione" + "Dati, Condivisione dei dati, Aggiornamenti alla condivisione dei dati, Aggiornamenti alla condivisione dei dati per la posizione, Condivisione" + "Privacy per gli annunci" + "Personalizza le informazioni usate dalle app per mostrarti annunci" + "annunci, privacy per gli annunci, privacy sandbox, argomenti degli annunci, annunci suggeriti dalle app, misurazione degli annunci" + "Biometria per il lavoro" + "Altre impostazioni" + "Crittografia, credenziali e altro" + + diff --git a/SafetyCenter/Resources/res/values-iw-v34/strings.xml b/SafetyCenter/Resources/res/values-iw-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-iw-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ja-v34/strings.xml b/SafetyCenter/Resources/res/values-ja-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ja-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ka-v34/strings.xml b/SafetyCenter/Resources/res/values-ka-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ka-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-kk-v34/strings.xml b/SafetyCenter/Resources/res/values-kk-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-kk-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-km-v34/strings.xml b/SafetyCenter/Resources/res/values-km-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-km-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-kn-v34/strings.xml b/SafetyCenter/Resources/res/values-kn-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-kn-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ko-v34/strings.xml b/SafetyCenter/Resources/res/values-ko-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ko-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ky-v34/strings.xml b/SafetyCenter/Resources/res/values-ky-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ky-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-lo-v34/strings.xml b/SafetyCenter/Resources/res/values-lo-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-lo-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-lt-v34/strings.xml b/SafetyCenter/Resources/res/values-lt-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-lt-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-lv-v34/strings.xml b/SafetyCenter/Resources/res/values-lv-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-lv-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-mk-v34/strings.xml b/SafetyCenter/Resources/res/values-mk-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-mk-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ml-v34/strings.xml b/SafetyCenter/Resources/res/values-ml-v34/strings.xml new file mode 100644 index 0000000000..046bbcf0bf --- /dev/null +++ b/SafetyCenter/Resources/res/values-ml-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്നത് സംബന്ധിച്ച അപ്‌ഡേറ്റുകൾ" + "ഡാറ്റ, ഡാറ്റ പങ്കിടൽ, ഡാറ്റ പങ്കിടൽ അപ്‌ഡേറ്റുകൾ, ലൊക്കേഷനുമായി ബന്ധപ്പെട്ട ഡാറ്റ പങ്കിടൽ അപ്ഡേറ്റുകൾ, പങ്കിടൽ" + "പരസ്യവുമായി ബന്ധപ്പെട്ട സ്വകാര്യത" + "നിങ്ങളെ പരസ്യങ്ങൾ കാണിക്കുന്നതിന് ആപ്പുകൾ ഉപയോഗിക്കുന്ന വിവരങ്ങൾ ഇഷ്ടാനുസൃതമാക്കുക" + "പരസ്യങ്ങൾ, പരസ്യവുമായി ബന്ധപ്പെട്ട സ്വകാര്യത, സ്വകാര്യതാ സാൻഡ്ബോക്‌സ്, പരസ്യത്തിന്റെ വിഷയങ്ങൾ, ആപ്പ് നിർദ്ദേശിക്കുന്ന പരസ്യങ്ങൾ, ആഡ് മെഷർമെന്റ്" + "വർക്ക് ആപ്പുകൾക്കുള്ള ബയോമെട്രിക്‌സ്" + "കൂടുതൽ ക്രമീകരണം" + "എൻക്രിപ്ഷൻ, ക്രെഡൻഷ്യലുകൾ എന്നിവയും മറ്റും" + + diff --git a/SafetyCenter/Resources/res/values-mn-v34/strings.xml b/SafetyCenter/Resources/res/values-mn-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-mn-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-mr-v34/strings.xml b/SafetyCenter/Resources/res/values-mr-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-mr-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ms-v34/strings.xml b/SafetyCenter/Resources/res/values-ms-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ms-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-my-v34/strings.xml b/SafetyCenter/Resources/res/values-my-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-my-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-nb-v34/strings.xml b/SafetyCenter/Resources/res/values-nb-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-nb-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ne-v34/strings.xml b/SafetyCenter/Resources/res/values-ne-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ne-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-nl-v34/strings.xml b/SafetyCenter/Resources/res/values-nl-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-nl-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-or-v34/strings.xml b/SafetyCenter/Resources/res/values-or-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-or-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-pa-v34/strings.xml b/SafetyCenter/Resources/res/values-pa-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-pa-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-pl-v34/strings.xml b/SafetyCenter/Resources/res/values-pl-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-pl-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-pt-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ro-v34/strings.xml b/SafetyCenter/Resources/res/values-ro-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ro-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ru-v34/strings.xml b/SafetyCenter/Resources/res/values-ru-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ru-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-si-v34/strings.xml b/SafetyCenter/Resources/res/values-si-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-si-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-sk-v34/strings.xml b/SafetyCenter/Resources/res/values-sk-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sk-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-sl-v34/strings.xml b/SafetyCenter/Resources/res/values-sl-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sl-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-sq-v34/strings.xml b/SafetyCenter/Resources/res/values-sq-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sq-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-sr-v34/strings.xml b/SafetyCenter/Resources/res/values-sr-v34/strings.xml new file mode 100644 index 0000000000..efa6075fa5 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sr-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Повезивање здравља" + "здравље, повезивање здравља" + "Ажурирања дељења података за локацију" + "подаци, дељење података, ажурирања дељења података, ажурирања дељења података за локацију, дељење" + "Приватност са огласима" + "Прилагодите информације које апликације користе да би вам приказивале огласе" + "огласи, приватност са огласима, заштићено окружење приватности, теме огласа, огласи које предлажу апликације, мерење огласа" + "Биометрија за посао" + "Још подешавања" + "Шифровање, акредитиви и друго" + + diff --git a/SafetyCenter/Resources/res/values-sv-v34/strings.xml b/SafetyCenter/Resources/res/values-sv-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sv-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-sw-v34/strings.xml b/SafetyCenter/Resources/res/values-sw-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-sw-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ta-v34/strings.xml b/SafetyCenter/Resources/res/values-ta-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ta-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-te-v34/strings.xml b/SafetyCenter/Resources/res/values-te-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-te-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-th-v34/strings.xml b/SafetyCenter/Resources/res/values-th-v34/strings.xml new file mode 100644 index 0000000000..bd9f8d9ebd --- /dev/null +++ b/SafetyCenter/Resources/res/values-th-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "สุขภาพ, Health Connect" + "การอัปเดตการแชร์ข้อมูลตำแหน่ง" + "ข้อมูล, การแชร์ข้อมูล, การอัปเดตการแชร์ข้อมูล, การอัปเดตการแชร์ข้อมูลตำแหน่ง, การแชร์" + "ความเป็นส่วนตัวเกี่ยวกับโฆษณา" + "ปรับแต่งข้อมูลที่แอปใช้เพื่อแสดงโฆษณาต่อคุณ" + "โฆษณา, ความเป็นส่วนตัวเกี่ยวกับโฆษณา, Privacy Sandbox, หัวข้อโฆษณา, โฆษณาที่แอปแนะนำ, การวัดผลโฆษณา" + "ข้อมูลไบโอเมตริกสำหรับงาน" + "การตั้งค่าเพิ่มเติม" + "การเข้ารหัส ข้อมูลเข้าสู่ระบบ และอื่นๆ" + + diff --git a/SafetyCenter/Resources/res/values-tl-v34/strings.xml b/SafetyCenter/Resources/res/values-tl-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-tl-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-tr-v34/strings.xml b/SafetyCenter/Resources/res/values-tr-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-tr-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-uk-v34/strings.xml b/SafetyCenter/Resources/res/values-uk-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-uk-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-ur-v34/strings.xml b/SafetyCenter/Resources/res/values-ur-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-ur-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-uz-v34/strings.xml b/SafetyCenter/Resources/res/values-uz-v34/strings.xml new file mode 100644 index 0000000000..21bb552a6a --- /dev/null +++ b/SafetyCenter/Resources/res/values-uz-v34/strings.xml @@ -0,0 +1,31 @@ + + + + + "Health Connect" + "Health, Health Connect" + "Joylashuv axboroti ulashuvida oʻzgarishlar" + "Maʼlumotlar, maʼlumotlar ulashuvi, maʼlumotlar ulashuvi yangilanishi, joylashuv axboroti ulashuvida oʻzgarishlar, ulashuv" + "Reklamada maxfiylik" + "Ilovalar reklamalarni taqdim etish uchun qanday maʼlumotlardan foydalanishi mumkinligini belgilang" + "reklama, reklamada maxfiylik, maxfiylik sinovi, reklama mavzulari, ilova taklif qiladigan reklama, reklama hisoblanishi" + "Ishga oid ilovalarda biometriya" + "Boshqa sozlamalar" + "Shifrlash, hisob maʼlumotlari va boshqalar" + + diff --git a/SafetyCenter/Resources/res/values-vi-v34/strings.xml b/SafetyCenter/Resources/res/values-vi-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-vi-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SafetyCenter/Resources/res/values-zu-v34/strings.xml b/SafetyCenter/Resources/res/values-zu-v34/strings.xml new file mode 100644 index 0000000000..3e36d42c84 --- /dev/null +++ b/SafetyCenter/Resources/res/values-zu-v34/strings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + -- GitLab From 57d99f69f6f87cc19745ec5d70ef0fcf8bd2f025 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 21 Feb 2023 05:29:29 -0800 Subject: [PATCH 008/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ibebfb72fd85661f5fac5d564ec4b3224ff26c070 --- SafetyCenter/Resources/shared_res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SafetyCenter/Resources/shared_res/values-es/strings.xml b/SafetyCenter/Resources/shared_res/values-es/strings.xml index 015e7a5aa2..df61a35072 100644 --- a/SafetyCenter/Resources/shared_res/values-es/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-es/strings.xml @@ -17,7 +17,7 @@ - "Analizan&#173;do" + "Analizan­do" "Comprobando los ajustes del dispositivo…" "Todo correcto" "No se ha encontrado ningún problema" -- GitLab From 95c597fd86ccc30bc01bfbe1444396f41aa26042 Mon Sep 17 00:00:00 2001 From: Manjeet Rulhania Date: Tue, 21 Feb 2023 18:09:17 -0800 Subject: [PATCH 009/577] Add logs for auto revoke permission policy Some of the hibernation tests are flaky, adding logs to determine the root cause for the flake. Bug: 267618595 Test: build Change-Id: I25d05cbacb4728b9556db1e464ea8eae02fe137b --- .../service/AutoRevokePermissions.kt | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt index 6aaa5e4683..533896c659 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt @@ -83,6 +83,9 @@ suspend fun revokeAppPermissions( // For each autorevoke-eligible app... userApps.forEachInParallel(Main) { pkg: LightPackageInfo -> if (pkg.grantedPermissions.isEmpty()) { + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "${pkg.packageName}: no granted permissions") + } return@forEachInParallel } val packageName = pkg.packageName @@ -96,9 +99,20 @@ suspend fun revokeAppPermissions( return@forEachInParallel } val targetSdk = pkg.targetSdkVersion - val pkgPermGroups: Map> = + val pkgPermGroups: Map>? = PackagePermissionsLiveData[packageName, user] - .getInitializedValue() ?: return@forEachInParallel + .getInitializedValue() + + if (pkgPermGroups == null || pkgPermGroups.isEmpty()) { + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "$packageName: no permission groups found.") + } + return@forEachInParallel + } + + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "$packageName: perm groups: ${pkgPermGroups.keys}.") + } // Determine which permGroups are revocable val revocableGroups = mutableSetOf() @@ -125,6 +139,10 @@ suspend fun revokeAppPermissions( } } + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "$packageName: initial revocable groups: $revocableGroups") + } + // Mark any groups that split from an install-time permission as unrevocable for (fromPerm in pkgPermGroups[PackagePermissionsLiveData.NON_RUNTIME_NORMAL_PERMS] ?: emptyList()) { @@ -148,6 +166,9 @@ suspend fun revokeAppPermissions( } } + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "$packageName: final revocable groups: $revocableGroups") + } // For each revocable group, revoke all of its permissions val anyPermsRevoked = AtomicBoolean(false) pkgPermGroups.entries @@ -161,6 +182,9 @@ suspend fun revokeAppPermissions( val revocablePermissions = group.permissions.keys.toList() if (revocablePermissions.isEmpty()) { + if (DEBUG_AUTO_REVOKE) { + DumpableLog.i(LOG_TAG, "$packageName: revocable permissions empty") + } return@forEachInParallel } -- GitLab From 8374cf94ef114ffa5beebe604d38557b9db5c212 Mon Sep 17 00:00:00 2001 From: Shriya Gupta Date: Thu, 16 Feb 2023 09:35:45 +0000 Subject: [PATCH 010/577] Handle disabled entries in subpages Bug: 268645516 Test: atest SafetyCenterSubpagesTest Change-Id: I482423fa073fd2c27b000cae71d2250f9274d81a --- .../ui/SafetySubpageEntryPreference.kt | 11 ++++- .../ui/view/SafetyEntryCommonViewsManager.kt | 44 ++++++++++++------- .../safetycenter/ui/view/SafetyEntryView.kt | 16 +++++-- .../functional/ui/SafetyCenterSubpagesTest.kt | 25 +++++++++-- 4 files changed, 72 insertions(+), 24 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetySubpageEntryPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetySubpageEntryPreference.kt index 3a7b462624..5f91d066eb 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetySubpageEntryPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetySubpageEntryPreference.kt @@ -23,10 +23,12 @@ import android.safetycenter.SafetyCenterEntry.IconAction.ICON_ACTION_TYPE_GEAR import android.text.TextUtils import android.util.Log import android.widget.ImageView +import android.widget.TextView import androidx.annotation.RequiresApi import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import com.android.permissioncontroller.R +import com.android.permissioncontroller.safetycenter.ui.view.SafetyEntryCommonViewsManager.Companion.changeEnabledState import com.android.settingslib.widget.TwoTargetPreference /** @@ -56,7 +58,8 @@ class SafetySubpageEntryPreference( R.layout.preference_entry_icon_action_gear_widget } else { R.layout.preference_entry_icon_action_info_widget - }) + } + ) } } @@ -72,8 +75,10 @@ class SafetySubpageEntryPreference( false } } + setEnabled(true) } else { Log.w(TAG, "Pending intent is null for $entry") + setEnabled(false) } } @@ -92,6 +97,10 @@ class SafetySubpageEntryPreference( } } } + + val titleView = holder.findViewById(android.R.id.title) as? TextView? + val summaryView = holder.findViewById(android.R.id.summary) as? TextView? + changeEnabledState(entry.isEnabled, titleView, summaryView) } override fun shouldHideSecondTarget(): Boolean = entry.iconAction == null diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt index f72a66e659..0f3a751f29 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt @@ -28,8 +28,8 @@ import com.android.permissioncontroller.safetycenter.ui.SeverityIconPicker internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) { - private val titleView: TextView? by lazy { rootEntryView?.findViewById(R.id.title) } - private val summaryView: TextView? by lazy { rootEntryView?.findViewById(R.id.summary) } + val titleView: TextView? by lazy { rootEntryView?.findViewById(R.id.title) } + val summaryView: TextView? by lazy { rootEntryView?.findViewById(R.id.summary) } private val iconView: ImageView? by lazy { rootEntryView?.findViewById(R.id.icon) } private val iconFrame: View? by lazy { rootEntryView?.findViewById(R.id.icon_frame) } private val emptySpace: View? by lazy { rootEntryView?.findViewById(R.id.empty_space) } @@ -43,25 +43,17 @@ internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) { titleView?.text = title summaryView?.showText(summary) - iconView?.setImageResource(SeverityIconPicker.selectIconResId( - severityLevel, severityUnspecifiedIconType)) + iconView?.setImageResource( + SeverityIconPicker.selectIconResId(severityLevel, severityUnspecifiedIconType) + ) - val hideIcon = (severityLevel == ENTRY_SEVERITY_LEVEL_UNSPECIFIED && + val hideIcon = + (severityLevel == ENTRY_SEVERITY_LEVEL_UNSPECIFIED && severityUnspecifiedIconType == SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ICON) iconFrame?.visibility = if (hideIcon) LinearLayout.GONE else LinearLayout.VISIBLE emptySpace?.visibility = if (hideIcon) LinearLayout.VISIBLE else LinearLayout.GONE } - fun changeEnabledState(isEnabled: Boolean) { - if (isEnabled) { - titleView?.alpha = 1f - summaryView?.alpha = 1f - } else { - titleView?.alpha = 0.4f - summaryView?.alpha = 0.4f - } - } - private fun TextView.showText(text: CharSequence?) { if (text != null && text.isNotEmpty()) { visibility = View.VISIBLE @@ -70,4 +62,24 @@ internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) { visibility = View.GONE } } -} \ No newline at end of file + + companion object { + + /** + * Change opacity to make some entries to look disabled but still be clickable + * + * @param isEnabled whether the [android.safetycenter.SafetyCenterEntry] is enabled + * @param titleView view displaying the title text of the entry + * @param summaryView view displaying the summary text of the entry + */ + fun changeEnabledState(isEnabled: Boolean, titleView: TextView?, summaryView: TextView?) { + if (isEnabled) { + titleView?.alpha = 1f + summaryView?.alpha = 1f + } else { + titleView?.alpha = 0.4f + summaryView?.alpha = 0.4f + } + } + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt index e7317fe8e9..7e0240ead0 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt @@ -32,6 +32,7 @@ import com.android.permissioncontroller.safetycenter.ui.Action import com.android.permissioncontroller.safetycenter.ui.PendingIntentSender import com.android.permissioncontroller.safetycenter.ui.PositionInCardList import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterViewModel +import com.android.permissioncontroller.safetycenter.ui.view.SafetyEntryCommonViewsManager.Companion.changeEnabledState @RequiresApi(Build.VERSION_CODES.TIRAMISU) internal class SafetyEntryView @@ -80,7 +81,11 @@ constructor( private fun showEntryDetails(entry: SafetyCenterEntry) { commonEntryView?.showDetails( - entry.title, entry.summary, entry.severityLevel, entry.severityUnspecifiedIconType) + entry.title, + entry.summary, + entry.severityLevel, + entry.severityUnspecifiedIconType + ) } private fun TextView.showText(text: CharSequence?) { @@ -145,7 +150,8 @@ constructor( paddingStart, paddingTop, context.resources.getDimensionPixelSize(R.dimen.sc_entry_padding_end), - paddingBottom) + paddingBottom + ) } } @@ -167,7 +173,11 @@ constructor( // otherwise be sent to the parent and cause the entry group to collapse. isClickable = true isEnabled = entry.pendingIntent != null - commonEntryView?.changeEnabledState(entry.isEnabled) + changeEnabledState( + entry.isEnabled, + commonEntryView?.titleView, + commonEntryView?.summaryView + ) } private fun setContentDescription(entry: SafetyCenterEntry, isGroupEntry: Boolean) { diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt index fba3b1a8ea..29f6bc895f 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt @@ -337,12 +337,12 @@ class SafetyCenterSubpagesTest { } @Test - fun entryListWithSingleSource_clickingSourceWithNullPendingIntent_doesNothing() { - safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceInvalidIntentConfig) + fun entryListWithSingleSource_clickingAnUnclickableDisabledEntry_doesNothing() { + val config = safetyCenterTestConfigs.singleSourceInvalidIntentConfig + safetyCenterTestHelper.setConfig(config) val sourceTestData = safetySourceTestData.informationWithNullIntent safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, sourceTestData) - val sourcesGroup = - safetyCenterTestConfigs.singleSourceInvalidIntentConfig.safetySourcesGroups.first() + val sourcesGroup = config.safetySourcesGroups.first() context.launchSafetyCenterActivity { openPageAndExit(context.getString(sourcesGroup.titleResId)) { @@ -354,6 +354,23 @@ class SafetyCenterSubpagesTest { } } + @Test + fun entryListWithSingleSource_clickingAClickableDisabledEntry_redirectsToDifferentScreen() { + val config = safetyCenterTestConfigs.singleSourceConfig + safetyCenterTestHelper.setConfig(config) + val sourceTestData = safetySourceTestData.unspecifiedDisabledWithTestActivityRedirect + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, sourceTestData) + val sourcesGroup = config.safetySourcesGroups.first() + + context.launchSafetyCenterActivity { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { + waitDisplayed(By.text(sourceTestData.status!!.title.toString())) { it.click() } + + waitButtonDisplayed("Exit test activity") { it.click() } + } + } + } + @Test fun entryListWithSingleSource_updateSafetySourceData_displayedDataIsUpdated() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) -- GitLab From d7b0dee474dd329fe265644571ed441c5c7d7fd7 Mon Sep 17 00:00:00 2001 From: Joe Castro Date: Thu, 23 Feb 2023 02:11:05 +0000 Subject: [PATCH 011/577] Fixing compiler warnings for PermissionController project Test: atest Bug: 195346174 Change-Id: Ic1c1098dab6aed52695c31dc6632c38f8e2b0caf --- PermissionController/Android.bp | 11 +++++-- .../auto/DrivingDecisionReminderService.kt | 1 + .../incident/ConfirmationActivity.java | 2 -- .../incident/Formatting.java | 2 ++ .../incident/PendingList.java | 1 + .../incident/ReportDetails.java | 2 +- .../data/BroadcastReceiverLiveData.kt | 3 +- .../data/LauncherPackagesLiveData.kt | 1 + .../data/LightPackageInfoLiveData.kt | 1 + .../permission/data/LightPermInfoLiveData.kt | 4 ++- .../permission/data/OpUsageLiveData.kt | 1 + .../PreinstalledUserPackageInfosLiveData.kt | 1 + .../permission/data/ServiceLiveData.kt | 3 +- .../data/SmartUpdateMediatorLiveData.kt | 20 +++++-------- .../data/UserPackageInfosLiveData.kt | 1 + .../model/livedatatypes/LightPackageInfo.kt | 1 + .../model/livedatatypes/LightPermGroupInfo.kt | 6 ++-- .../model/v34/AppDataSharingUpdate.kt | 2 +- .../service/AutoRevokePermissions.kt | 13 ++++----- .../service/PermissionChangeStorageImpl.kt | 4 ++- .../PermissionControllerServiceModel.kt | 4 +-- .../RuntimePermissionsUpgradeController.kt | 16 ++-------- .../service/SplitPermissionIndex.kt | 4 +-- .../service/v33/SafetyCenterQsTileService.kt | 1 + .../v34/SafetyLabelChangesJobService.kt | 7 ++--- .../permission/ui/UnusedAppsFragment.kt | 12 ++++---- .../AutoReviewPermissionDecisionsFragment.kt | 2 ++ ...eviewPermissionDecisionsViewAllFragment.kt | 1 + .../ui/auto/AutoUnusedAppsFragment.kt | 2 ++ .../AutoPermissionUsageDetailsFragment.kt | 3 +- .../dashboard/AutoPermissionUsageFragment.kt | 1 + .../GrantPermissionsViewHandlerImpl.kt | 1 + .../ui/handheld/HandheldUnusedAppsFragment.kt | 1 + .../HandheldUnusedAppsWrapperFragment.kt | 1 + .../ui/handheld/UnusedAppPreference.kt | 4 +-- .../v34/AppDataSharingUpdatesFragment.kt | 3 +- .../ui/model/AllAppPermissionsViewModel.kt | 2 +- .../ui/model/AppPermissionViewModel.kt | 25 ++++++++-------- .../ui/model/GrantPermissionsViewModel.kt | 29 ++++++++++--------- .../ui/model/PermissionAppsViewModel.kt | 5 ++-- .../ui/model/ReviewOngoingUsageViewModel.kt | 12 ++------ .../ui/model/UnusedAppsViewModel.kt | 3 +- .../v31/PermissionUsageDetailsViewModel.kt | 3 +- .../PermissionUsageDetailsViewModelLegacy.kt | 5 ++-- .../ui/model/v31/PermissionUsageViewModel.kt | 2 +- .../v31/PermissionUsageViewModelLegacy.kt | 1 + .../ui/television/TvUnusedAppsFragment.kt | 2 ++ .../ui/widget/SafetyProtectionSectionView.kt | 2 +- .../permission/utils/AndroidUtils.kt | 10 ++----- .../permission/utils/KotlinUtils.kt | 14 ++++----- .../permission/utils/PermissionMapping.kt | 1 + .../NotificationListenerCheck.kt | 2 +- .../safetycenter/ui/SafetyGroupPreference.kt | 14 ++++----- .../ui/model/PrivacyControlsViewModel.kt | 1 + .../ui/model/SafetyCenterQsViewModel.kt | 9 +++--- .../AppsSafetyLabelHistoryPersistence.kt | 2 +- service/Android.bp | 1 + 57 files changed, 149 insertions(+), 139 deletions(-) diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp index 14170e5135..9b20819f0a 100644 --- a/PermissionController/Android.bp +++ b/PermissionController/Android.bp @@ -38,7 +38,7 @@ genrule { tools: ["stats-log-api-gen"], cmd: "$(location stats-log-api-gen) --java $(out) --module permissioncontroller" + " --javaPackage com.android.permissioncontroller" + - " --javaClass PermissionControllerStatsLog --minApiLevel 29", + " --javaClass PermissionControllerStatsLog --minApiLevel 30", out: ["com/android/permissioncontroller/PermissionControllerStatsLog.java"], } @@ -86,6 +86,13 @@ android_app { srcs: [":permissioncontroller-sources"], + //javacflags: ["-Werror"], + kotlincflags: [ + "-Werror", + "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi", + "-Xjvm-default=all" + ], + libs: [ "android.car-stubs", // Soong fails to automatically add this dependency because all the @@ -160,8 +167,6 @@ android_app { proguard_flags_files: ["proguard.flags"], }, - kotlincflags: ["-Xjvm-default=enable"], - apex_available: [ "//apex_available:platform", "com.android.permission", diff --git a/PermissionController/src/com/android/permissioncontroller/auto/DrivingDecisionReminderService.kt b/PermissionController/src/com/android/permissioncontroller/auto/DrivingDecisionReminderService.kt index 67c4cfac16..b62f8d721d 100644 --- a/PermissionController/src/com/android/permissioncontroller/auto/DrivingDecisionReminderService.kt +++ b/PermissionController/src/com/android/permissioncontroller/auto/DrivingDecisionReminderService.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.auto diff --git a/PermissionController/src/com/android/permissioncontroller/incident/ConfirmationActivity.java b/PermissionController/src/com/android/permissioncontroller/incident/ConfirmationActivity.java index b5beb99223..0a8196524d 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/ConfirmationActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/incident/ConfirmationActivity.java @@ -180,7 +180,6 @@ public class ConfirmationActivity extends Activity implements OnClickListener, O final int height = res.getDimensionPixelSize(R.dimen.incident_image_height); for (int i = 0; i < imagesSize; i++) { - final Drawable drawable = images.get(i); final ImageView imageView = new ImageView(this); imageView.setImageDrawable(images.get(i)); imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); @@ -256,4 +255,3 @@ public class ConfirmationActivity extends Activity implements OnClickListener, O finish(); } } - diff --git a/PermissionController/src/com/android/permissioncontroller/incident/Formatting.java b/PermissionController/src/com/android/permissioncontroller/incident/Formatting.java index e5a189bc6e..d8bcb3f8f4 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/Formatting.java +++ b/PermissionController/src/com/android/permissioncontroller/incident/Formatting.java @@ -61,6 +61,7 @@ public class Formatting { /** * Format the date portion of a {@link System.currentTimeMillis} as a user-visible string. */ + @SuppressWarnings("JavaUtilDate") String getDate(long wallTimeMs) { return mDateFormat.format(new Date(wallTimeMs)); } @@ -68,6 +69,7 @@ public class Formatting { /** * Format the time portion of a {@link System.currentTimeMillis} as a user-visible string. */ + @SuppressWarnings("JavaUtilDate") String getTime(long wallTimeMs) { return mTimeFormat.format(new Date(wallTimeMs)); } diff --git a/PermissionController/src/com/android/permissioncontroller/incident/PendingList.java b/PermissionController/src/com/android/permissioncontroller/incident/PendingList.java index 898d9b500f..dead300d7c 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/PendingList.java +++ b/PermissionController/src/com/android/permissioncontroller/incident/PendingList.java @@ -297,6 +297,7 @@ class PendingList { /** * Get the sort key for the order of our notifications. */ + @SuppressWarnings("JavaUtilDate") private String getSortKey(long timestamp) { return sDateFormatter.format(new Date(timestamp)); } diff --git a/PermissionController/src/com/android/permissioncontroller/incident/ReportDetails.java b/PermissionController/src/com/android/permissioncontroller/incident/ReportDetails.java index d19ef460a4..90cc171319 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/ReportDetails.java +++ b/PermissionController/src/com/android/permissioncontroller/incident/ReportDetails.java @@ -110,7 +110,7 @@ public class ReportDetails { /** * Read images from the IncidentMinimal. * - * @throw ParseException if there was an error reading them. + * @throws ParseException if there was an error reading them. */ private static void parseImages(ArrayList result, IncidentMinimal incident, Resources res) throws ParseException { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/BroadcastReceiverLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/BroadcastReceiverLiveData.kt index bc4bd12d2f..0a296d9778 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/BroadcastReceiverLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/BroadcastReceiverLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data @@ -77,7 +78,7 @@ class BroadcastReceiverLiveData( if (resolveInfo?.activityInfo?.permission != permission) { return@mapNotNull null } - val packageName = resolveInfo?.activityInfo?.packageName + val packageName = resolveInfo.activityInfo?.packageName if (!isReceiverEnabled(packageName)) { if (DEBUG_HIBERNATION_POLICY) { DumpableLog.i(LOG_TAG, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/LauncherPackagesLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/LauncherPackagesLiveData.kt index f0d8118214..b512c7e4a1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/LauncherPackagesLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/LauncherPackagesLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt index 675e5ef75a..2f26fedd1a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPermInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPermInfoLiveData.kt index 0aa77a5bc2..6f33cb1993 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPermInfoLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPermInfoLiveData.kt @@ -46,8 +46,10 @@ class LightPermInfoLiveData private constructor( * Callback from the PackageBroadcastReceiver. * *

Package updates might change permission properties + * + * Note: packageName is unused. */ - override fun onPackageUpdate(ignored: String) { + override fun onPackageUpdate(packageName: String) { updateAsync() } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/OpUsageLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/OpUsageLiveData.kt index a5b2542508..805d497c47 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/OpUsageLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/OpUsageLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/PreinstalledUserPackageInfosLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/PreinstalledUserPackageInfosLiveData.kt index bd7dfeb5ef..b4205acffe 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/PreinstalledUserPackageInfosLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/PreinstalledUserPackageInfosLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/ServiceLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/ServiceLiveData.kt index 138418c266..6d59fd585f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/ServiceLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/ServiceLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data @@ -167,7 +168,7 @@ class ServiceLiveData( if (resolveInfo?.serviceInfo?.permission != permission) { return@mapNotNull null } - val packageName = resolveInfo?.serviceInfo?.packageName + val packageName = resolveInfo.serviceInfo?.packageName if (!isServiceEnabled(packageName)) { if (DEBUG_HIBERNATION_POLICY) { DumpableLog.i(LOG_TAG, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt index cca2667218..c1a8f5abd3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt @@ -61,8 +61,6 @@ abstract class SmartUpdateMediatorLiveData(private val isStaticVal: Boolean = private val sources = mutableListOf>() - private val stacktraceExceptionMessage = "Caller of coroutine" - @MainThread override fun setValue(newValue: T?) { ensureMainThread() @@ -126,17 +124,15 @@ abstract class SmartUpdateMediatorLiveData(private val isStaticVal: Boolean = } override fun addSource(source: LiveData, onChanged: Observer) { - addSourceWithError(source, onChanged) + addSourceWithStackTraceAttribution(source, onChanged, + IllegalStateException().getStackTrace()) } - private fun addSourceWithError( + private fun addSourceWithStackTraceAttribution( source: LiveData, onChanged: Observer, - e: IllegalStateException? = null + stackTrace: Array ) { - // Get the stacktrace of the call to addSource, so it isn't lost in any errors - val exception = e ?: IllegalStateException(stacktraceExceptionMessage) - GlobalScope.launch(Main.immediate) { if (source is SmartUpdateMediatorLiveData) { if (source in sources) { @@ -147,8 +143,8 @@ abstract class SmartUpdateMediatorLiveData(private val isStaticVal: Boolean = try { super.addSource(source, onChanged) } catch (ex: IllegalStateException) { - val other = ex as java.lang.Throwable - throw other.initCause(exception) + ex.setStackTrace(stackTrace) + throw ex } } } @@ -189,7 +185,7 @@ abstract class SmartUpdateMediatorLiveData(private val isStaticVal: Boolean = val removed = toRemove.map { have.remove(it) }.toMutableList() - val stackTraceException = java.lang.IllegalStateException(stacktraceExceptionMessage) + val stackTrace = IllegalStateException().getStackTrace() GlobalScope.launch(Main.immediate) { // If any state got out of sorts before this coroutine ran, correct it @@ -212,7 +208,7 @@ abstract class SmartUpdateMediatorLiveData(private val isStaticVal: Boolean = update() } } - addSourceWithError(liveData, observer, stackTraceException) + addSourceWithStackTraceAttribution(liveData, observer, stackTrace) } } return toAdd to toRemove diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/UserPackageInfosLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/UserPackageInfosLiveData.kt index 92ee77d8e6..36586e7cce 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/UserPackageInfosLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/UserPackageInfosLiveData.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.data diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt index d76593ba58..0f6b6c000c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.model.livedatatypes diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPermGroupInfo.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPermGroupInfo.kt index c73f242049..6aff2f3c91 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPermGroupInfo.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPermGroupInfo.kt @@ -41,11 +41,11 @@ data class LightPermGroupInfo( val isSinglePermGroup: Boolean ) { - constructor(pII: PackageItemInfo): this(pII.name, pII.packageName, pII.labelRes, pII.icon, + constructor(pII: PackageItemInfo) : this(pII.name, pII.packageName, pII.labelRes, pII.icon, 0, pII is PermissionInfo) - constructor(pGI: PermissionGroupInfo): this(pGI.name, pGI.packageName, pGI.labelRes, pGI.icon, - pGI.descriptionRes, pGI is PermissionInfo) + constructor(pGI: PermissionGroupInfo) : this(pGI.name, pGI.packageName, pGI.labelRes, pGI.icon, + pGI.descriptionRes, false) /** * Gets the PackageItemInfo for this permission group from the system. diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/v34/AppDataSharingUpdate.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/v34/AppDataSharingUpdate.kt index ab0de7205b..2f6d921f8b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/v34/AppDataSharingUpdate.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/model/v34/AppDataSharingUpdate.kt @@ -60,7 +60,7 @@ data class AppDataSharingUpdate( val categoryUpdateMap = mutableMapOf() for (category in categories) { - var categoryUpdateType: DataSharingUpdateType? = null + var categoryUpdateType: DataSharingUpdateType? val beforeSharesData = safetyLabelBefore.sharesData(category) val beforeSharesDataForAds = safetyLabelBefore.sharesDataForAdsPurpose(category) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt index 533896c659..4e4006de44 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/AutoRevokePermissions.kt @@ -81,12 +81,12 @@ suspend fun revokeAppPermissions( val pkgPermChanges = PermissionChangeStorageImpl.getInstance().loadEvents() .associateBy { it.packageName } // For each autorevoke-eligible app... - userApps.forEachInParallel(Main) { pkg: LightPackageInfo -> + userApps.forEachInParallel(Main) forEachInParallelOuter@ { pkg: LightPackageInfo -> if (pkg.grantedPermissions.isEmpty()) { if (DEBUG_AUTO_REVOKE) { DumpableLog.i(LOG_TAG, "${pkg.packageName}: no granted permissions") } - return@forEachInParallel + return@forEachInParallelOuter } val packageName = pkg.packageName val pkgPermChange = pkgPermChanges[packageName] @@ -96,7 +96,7 @@ suspend fun revokeAppPermissions( DumpableLog.i(LOG_TAG, "Not revoking because permissions were changed " + "recently for package $packageName") } - return@forEachInParallel + return@forEachInParallelOuter } val targetSdk = pkg.targetSdkVersion val pkgPermGroups: Map>? = @@ -107,7 +107,7 @@ suspend fun revokeAppPermissions( if (DEBUG_AUTO_REVOKE) { DumpableLog.i(LOG_TAG, "$packageName: no permission groups found.") } - return@forEachInParallel + return@forEachInParallelOuter } if (DEBUG_AUTO_REVOKE) { @@ -173,8 +173,7 @@ suspend fun revokeAppPermissions( val anyPermsRevoked = AtomicBoolean(false) pkgPermGroups.entries .filter { revocableGroups.contains(it.key) } - .forEachInParallel(Main) { (groupName, _) -> - + .forEachInParallel(Main) forEachInParallelInner@ { (groupName, _) -> val group: LightAppPermGroup = LightAppPermGroupLiveData[packageName, groupName, user] .getInitializedValue()!! @@ -185,7 +184,7 @@ suspend fun revokeAppPermissions( if (DEBUG_AUTO_REVOKE) { DumpableLog.i(LOG_TAG, "$packageName: revocable permissions empty") } - return@forEachInParallel + return@forEachInParallelInner } if (DEBUG_AUTO_REVOKE) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionChangeStorageImpl.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionChangeStorageImpl.kt index eac97fed19..bdcf833fca 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionChangeStorageImpl.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionChangeStorageImpl.kt @@ -25,6 +25,7 @@ import com.android.permissioncontroller.PermissionControllerApplication import com.android.permissioncontroller.hibernation.getUnusedThresholdMs import com.android.permissioncontroller.permission.data.PermissionChange import com.android.permissioncontroller.permission.utils.Utils +import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -90,6 +91,7 @@ class PermissionChangeStorageImpl( return PermissionChangeStorageImpl(PermissionControllerApplication.get()) } + @OptIn(DelicateCoroutinesApi::class) fun recordPermissionChange(packageName: String) { GlobalScope.launch(Dispatchers.IO) { getInstance().storeEvent(PermissionChange(packageName, System.currentTimeMillis())) @@ -162,7 +164,7 @@ class PermissionChangeStorageImpl( ?: throw IllegalArgumentException( "Could not parse date $changeDate on package $packageName") if (truncateToDay) { - changeTime = dateFormat.parse(dateFormat.format(Date(changeTime))).time + changeTime = dateFormat.parse(dateFormat.format(Date(changeTime)))!!.time } change = PermissionChange(packageName, changeTime) } catch (e: XmlPullParserException) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt index 0689e86e6d..49a4658988 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt @@ -291,9 +291,7 @@ class PermissionControllerServiceModel(private val service: PermissionController val unusedAppsCount = Transformations.map(getUnusedPackages()) { it?.size ?: 0 } - observeAndCheckForLifecycleState(unusedAppsCount) { unusedAppsCount -> - callback.accept(unusedAppsCount ?: 0) - } + observeAndCheckForLifecycleState(unusedAppsCount) { count -> callback.accept(count ?: 0) } } /** diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt index 4ddbd68598..97f817cffa 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt @@ -76,7 +76,7 @@ internal object RuntimePermissionsUpgradeController { } if (currentVersion != upgradedVersion) { - permissionManager!!.runtimePermissionsVersion = LATEST_VERSION + permissionManager.runtimePermissionsVersion = LATEST_VERSION } onComplete.run() } @@ -283,7 +283,6 @@ internal object RuntimePermissionsUpgradeController { val bgGroups = mutableListOf() val storageGroups = mutableListOf() - val bgMicGroups = mutableListOf() for (group in permGroupProviders!!.mapNotNull { it.value }) { when (group.permGroupName) { @@ -299,9 +298,6 @@ internal object RuntimePermissionsUpgradeController { permission_group.READ_MEDIA_VISUAL -> { storageGroups.add(group) } - permission_group.MICROPHONE -> { - bgMicGroups.add(group) - } } } @@ -318,7 +314,7 @@ internal object RuntimePermissionsUpgradeController { } value = UpgradeData(preinstalledPkgInfoProvider.value!!, restrictedPermissions, - pkgInfoProvider.value!!, bgGroups, storageGroups, bgMicGroups) + pkgInfoProvider.value!!, bgGroups, storageGroups) } } } @@ -338,7 +334,7 @@ internal object RuntimePermissionsUpgradeController { val (newVersion, upgradeExemptions, grants) = onUpgradeLockedDataLoaded(currentVersion, upgradeData.pkgs, upgradeData.restrictedPermissions, upgradeData.bgGroups, upgradeData.storageGroups, - upgradeData.bgMicGroups, isDeviceUpgrading) + isDeviceUpgrading) // Do not run in parallel. Measurements have shown that this is slower than sequential for (exemption in (preinstalledAppExemptions union upgradeExemptions)) { @@ -358,7 +354,6 @@ internal object RuntimePermissionsUpgradeController { restrictedPermissions: Set, bgApps: List, storageAndMediaAppPermGroups: List, - bgMicApps: List, isDeviceUpgrading: Boolean ): Triple, List> { val exemptions = mutableListOf() @@ -565,11 +560,6 @@ internal object RuntimePermissionsUpgradeController { * Storage groups that need to be inspected by {@link #onUpgradeLockedDataLoaded} */ val storageGroups: List, - /** - * Background Microphone groups that need to be inspected by - * {@link #onUpgradeLockedDataLoaded} - */ - val bgMicGroups: List ) /** diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/SplitPermissionIndex.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/SplitPermissionIndex.kt index c55651cc08..115200b2f6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/SplitPermissionIndex.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/SplitPermissionIndex.kt @@ -41,11 +41,11 @@ class SplitPermissionIndex() { val newPermGroup = PermissionMapping.getGroupOfPlatformPermission(newPerm) if (newPermGroup != null) { permToGroupSplits.add(SplitPermissionIndexEntry( - oldPerm, splitPerm.targetSdk, newPermGroup!!)) + oldPerm, splitPerm.targetSdk, newPermGroup)) } if (oldPermGroup != null && newPermGroup != null) { groupToGroupSplits.add(SplitPermissionIndexEntry( - oldPermGroup!!, splitPerm.targetSdk, newPermGroup!!)) + oldPermGroup, splitPerm.targetSdk, newPermGroup)) } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt index bd38b4df58..6ffd894ce6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.service.v33 diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt index c15741d565..f8584048ee 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt @@ -111,8 +111,7 @@ class SafetyLabelChangesJobService : JobService() { } private fun isContextInProfileUser(context: Context): Boolean { - val userManager: UserManager = - (context.getSystemService(UserManager::class.java) as UserManager?)!! + val userManager: UserManager = context.getSystemService(UserManager::class.java)!! return userManager.isProfile } } @@ -350,7 +349,7 @@ class SafetyLabelChangesJobService : JobService() { private suspend fun getAllPackagesGrantedLocation(): Set> = SinglePermGroupPackagesUiInfoLiveData[Manifest.permission_group.LOCATION] .getInitializedValue(staleOk = false, forceUpdate = true) - .filter { (packageKey, appPermGroupUiInfo) -> appPermGroupUiInfo.isPermissionGranted() } + .filter { (_, appPermGroupUiInfo) -> appPermGroupUiInfo.isPermissionGranted() } .keys private fun AppPermGroupUiInfo.isPermissionGranted() = @@ -390,7 +389,7 @@ class SafetyLabelChangesJobService : JobService() { .filter { it.containsLocationCategoryUpdate() } .map { it.packageName } val packageNamesWithLocationGranted: List = - getAllPackagesGrantedLocation().map { (packageName, user) -> packageName } + getAllPackagesGrantedLocation().map { (packageName, _) -> packageName } val packageNamesWithLocationGrantedAndUpdates = packageNamesWithLocationDataSharingUpdates.intersect(packageNamesWithLocationGranted) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt index 48ac04ae56..68fb493eb8 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/UnusedAppsFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui @@ -131,10 +132,7 @@ class UnusedAppsFragment : Fragment() override fun onStart() { super.onStart() - val ab = activity?.actionBar - if (ab != null) { - ab!!.setElevation(ELEVATION_HIGH) - } + activity?.actionBar?.setElevation(ELEVATION_HIGH) } override fun onActivityCreated(savedInstanceState: Bundle?) { @@ -147,6 +145,7 @@ class UnusedAppsFragment : Fragment() } } + @Suppress("UNCHECKED_CAST") private fun requirePreferenceFragment(): PF { return requireParentFragment() as PF } @@ -175,6 +174,7 @@ class UnusedAppsFragment : Fragment() infoMsgCategory?.addPreference(footerPreference) } + @Suppress("UNCHECKED_CAST") private fun updatePackages(categorizedPackages: Map>) { val preferenceFragment: PF = requirePreferenceFragment() if (preferenceFragment.preferenceScreen == null) { @@ -262,9 +262,7 @@ class UnusedAppsFragment : Fragment() preferenceFragment.setEmptyState(allCategoriesEmpty) if (isFirstLoad) { - if (categorizedPackages.any { (_, packages) -> - packages!!.isNotEmpty() - }) { + if (categorizedPackages.any { (_, packages) -> packages.isNotEmpty() }) { isFirstLoad = false } Log.i(LOG_TAG, "sessionId: $sessionId Showed Auto Revoke Page") diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsFragment.kt index 1472de4f8d..92917a342a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsFragment.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.android.permissioncontroller.permission.ui.auto import android.annotation.SuppressLint diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsViewAllFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsViewAllFragment.kt index 35eb912995..9f9471fdf3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsViewAllFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoReviewPermissionDecisionsViewAllFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.auto diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt index 0e0d8277c7..61f77c81a5 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoUnusedAppsFragment.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.android.permissioncontroller.permission.ui.auto import android.app.Application diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageDetailsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageDetailsFragment.kt index d516b8de01..eee9e8b6ea 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageDetailsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageDetailsFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.auto.dashboard @@ -203,8 +204,6 @@ class AutoPermissionUsageDetailsFragment : preferenceScreen.removeAll() setupHeaderPreferences() - val exemptedPackages = Utils.getExemptedPackages(roleManager) - val uiData = usageViewModel.buildPermissionUsageDetailsUiData( appPermissionUsages, showSystem, SHOW_7_DAYS) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageFragment.kt index 1e4c4fadf1..a21e257c37 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionUsageFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.auto.dashboard diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt index ea3c27d736..c7616f0d87 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.handheld diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt index 1c3dfe11ee..e2fdfc86ee 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.handheld diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsWrapperFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsWrapperFragment.kt index 2dce146d04..44a9f3d08d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsWrapperFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/HandheldUnusedAppsWrapperFragment.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.handheld diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/UnusedAppPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/UnusedAppPreference.kt index 6c94a304b2..dfab55ed7a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/UnusedAppPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/UnusedAppPreference.kt @@ -50,10 +50,10 @@ class UnusedAppPreference( super.onBindViewHolder(holder) val removeButton = holder.findViewById(R.id.uninstall_button) as ImageButton - removeButton?.setOnClickListener { + removeButton.setOnClickListener { removeRunnable?.run() } - removeButton?.isEnabled = removeButtonEnabled + removeButton.isEnabled = removeButtonEnabled } override fun setRemoveClickRunnable(runnable: Runnable) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt index 73b7dca77d..7180fd526c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt @@ -1,3 +1,5 @@ +@file:Suppress("DEPRECATION") + package com.android.permissioncontroller.permission.ui.handheld.v34 import android.graphics.Color @@ -131,7 +133,6 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { getString(R.string.shares_location_with_third_parties) DataSharingUpdateType.ADDS_SHARING_WITH_ADVERTISING_PURPOSE -> getString(R.string.shares_location_with_third_parties_for_advertising) - else -> throw IllegalArgumentException("Invalid DataSharingUpdateType: $type") } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt index 504cb5231b..d789f4e1eb 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt @@ -80,7 +80,7 @@ class AllAppPermissionsViewModel( value = permissions .filter { filterGroup == null || it.key == filterGroup } .filter { (it.key != Manifest.permission_group.STORAGE || - Utils.shouldShowStorage(packageInfo!!)) } + Utils.shouldShowStorage(packageInfo)) } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt index ac20a77484..0673af10dc 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model @@ -273,7 +274,7 @@ class AppPermissionViewModel( mediaStorageSupergroupPermGroups.remove(permGroupName) value = null } else { - mediaStorageSupergroupPermGroups[permGroupName] = permGroup!! + mediaStorageSupergroupPermGroups[permGroupName] = permGroup update() } } @@ -733,13 +734,13 @@ class AppPermissionViewModel( } val groupsToUpdate = expandToSupergroup(group) - for (group in groupsToUpdate) { - var newGroup = group - val oldGroup = group + for (group2 in groupsToUpdate) { + var newGroup = group2 + val oldGroup = group2 - if (shouldRevokeBackground && group.hasBackgroundGroup && - (wasBackgroundGranted || group.background.isUserFixed || - group.isOneTime != setOneTime)) { + if (shouldRevokeBackground && group2.hasBackgroundGroup && + (wasBackgroundGranted || group2.background.isUserFixed || + group2.isOneTime != setOneTime)) { newGroup = KotlinUtils .revokeBackgroundRuntimePermissions(app, newGroup, oneTime = setOneTime) @@ -750,7 +751,8 @@ class AppPermissionViewModel( } } - if (shouldRevokeForeground && (wasForegroundGranted || group.isOneTime != setOneTime)) { + if (shouldRevokeForeground && + (wasForegroundGranted || group2.isOneTime != setOneTime)) { newGroup = KotlinUtils .revokeForegroundRuntimePermissions(app, newGroup, false, setOneTime) @@ -775,7 +777,7 @@ class AppPermissionViewModel( } } - if (shouldGrantBackground && group.hasBackgroundGroup) { + if (shouldGrantBackground && group2.hasBackgroundGroup) { newGroup = KotlinUtils.grantBackgroundRuntimePermissions(app, newGroup) if (!wasBackgroundGranted) { @@ -915,10 +917,9 @@ class AppPermissionViewModel( * */ fun onDenyAnyWay(changeRequest: ChangeRequest, buttonPressed: Int, oneTime: Boolean) { - val group = lightAppPermGroup ?: return + val unexpandedGroup = lightAppPermGroup ?: return - val groupsToUpdate = expandToSupergroup(group) - for (group in groupsToUpdate) { + for (group in expandToSupergroup(unexpandedGroup)) { val wasForegroundGranted = group.foreground.isGranted val wasBackgroundGranted = group.background.isGranted var hasDefaultPermissions = false diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index b82536dd57..d1b2f7cb0f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model @@ -931,10 +932,10 @@ class GrantPermissionsViewModel( if (!alreadyRequestedStorageGroupsIfNeeded && groupName in PermissionMapping.STORAGE_SUPERGROUP_PERMISSIONS && packageInfo.targetSdkVersion <= Build.VERSION_CODES.S_V2) { - for (groupName in PermissionMapping.STORAGE_SUPERGROUP_PERMISSIONS) { - val groupPerms = appPermGroupLiveDatas[groupName] + for (storageGroupName in PermissionMapping.STORAGE_SUPERGROUP_PERMISSIONS) { + val groupPerms = appPermGroupLiveDatas[storageGroupName] ?.value?.allPermissions?.keys?.toList() - onPermissionGrantResult(groupName, groupPerms, result, true) + onPermissionGrantResult(storageGroupName, groupPerms, result, true) } return } @@ -1293,7 +1294,9 @@ class GrantPermissionsViewModel( if (activityResultCallback != null) { return } - val permissions = groupStates[READ_MEDIA_VISUAL to false]?.affectedPermissions ?: return + if (groupStates[READ_MEDIA_VISUAL to false]?.affectedPermissions == null) { + return + } activityResultCallback = Consumer { data -> val anySelected = data?.getBooleanExtra(INTENT_PHOTOS_SELECTED, true) == true if (anySelected) { @@ -1503,15 +1506,15 @@ class GrantPermissionsViewModel( * An enum that represents the type of message which should be shown- foreground, * background, upgrade, or no message. */ - enum class RequestMessage(request: Int) { - FG_MESSAGE(0), - BG_MESSAGE(1), - UPGRADE_MESSAGE(2), - NO_MESSAGE(3), - FG_FINE_LOCATION_MESSAGE(4), - FG_COARSE_LOCATION_MESSAGE(5), - STORAGE_SUPERGROUP_MESSAGE_Q_TO_S(6), - STORAGE_SUPERGROUP_MESSAGE_PRE_Q(7), + enum class RequestMessage { + FG_MESSAGE, + BG_MESSAGE, + UPGRADE_MESSAGE, + NO_MESSAGE, + FG_FINE_LOCATION_MESSAGE, + FG_COARSE_LOCATION_MESSAGE, + STORAGE_SUPERGROUP_MESSAGE_Q_TO_S, + STORAGE_SUPERGROUP_MESSAGE_PRE_Q, } fun filterPermissionsIfNeededSync( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt index cd1a936f74..1b17041b62 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model @@ -156,7 +157,7 @@ class PermissionAppsViewModel( } } - private val listener = { sensor: Int, status: Boolean -> + private val listener = { _: Int, status: Boolean -> value = status } @@ -464,7 +465,7 @@ class PermissionAppsViewModelFactory( defaultArgs: Bundle ) : AbstractSavedStateViewModelFactory(owner, defaultArgs) { - override fun create(p0: String, p1: Class, state: SavedStateHandle): T { + override fun create(p0: String, p1: Class, state: SavedStateHandle): T { state.set(SHOULD_SHOW_SYSTEM_KEY, state.get(SHOULD_SHOW_SYSTEM_KEY) ?: false) state.set(HAS_SYSTEM_APPS_KEY, state.get(HAS_SYSTEM_APPS_KEY) ?: true) state.set(SHOW_ALWAYS_ALLOWED, state.get(SHOW_ALWAYS_ALLOWED) ?: false) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt index 309b9eba14..17a1ee7a6a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model import android.Manifest @@ -139,14 +139,6 @@ class ReviewOngoingUsageViewModel( return } - // Update set of permGroupUiInfos if needed - val requiredUiInfos = permGroupUsages.value!!.flatMap { - (permissionGroupName, accesses) -> - accesses.map { access -> - Triple(access.packageName, permissionGroupName, access.user) - } - } - // Filter out system package val filteredUsages = mutableMapOf>() for ((permGroupName, usages) in permGroupUsages.value!!) { @@ -559,7 +551,7 @@ class ReviewOngoingUsageViewModelFactory( owner: SavedStateRegistryOwner, defaultArgs: Bundle ) : AbstractSavedStateViewModelFactory(owner, defaultArgs) { - override fun create(p0: String, p1: Class, state: SavedStateHandle): T { + override fun create(p0: String, p1: Class, state: SavedStateHandle): T { state.set(FIRST_OPENED_KEY, state.get(FIRST_OPENED_KEY) ?: System.currentTimeMillis()) @Suppress("UNCHECKED_CAST") diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/UnusedAppsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/UnusedAppsViewModel.kt index ad4caa0146..3c3f347a44 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/UnusedAppsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/UnusedAppsViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model @@ -68,7 +69,7 @@ class UnusedAppsViewModel(private val app: Application, private val sessionId: L val months: Int = (duration.inWholeDays / 30).toInt() - inline fun isNewlyUnused(): Boolean { + fun isNewlyUnused(): Boolean { return (this == ONE_MONTH) || (this == THREE_MONTHS) } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt index 0063e41574..e9a8053751 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model.v31 @@ -620,7 +621,7 @@ class PermissionUsageDetailsViewModel( owner: SavedStateRegistryOwner, private val permissionGroup: String, ) : AbstractSavedStateViewModelFactory(owner, Bundle()) { - override fun create( + override fun create( key: String, modelClass: Class, handle: SavedStateHandle, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelLegacy.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelLegacy.kt index 5faa186d9f..6676672002 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelLegacy.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelLegacy.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model.v31 @@ -141,7 +142,7 @@ class PermissionUsageDetailsViewModelLegacy( val proxyLabel = getProxyPackageLabel(discreteAccessClusterData) val subattributionLabel = getSubattributionLabel(discreteAccessClusterData) val showingSubattribution = - subattributionLabel != null && subattributionLabel!!.isNotEmpty() + subattributionLabel != null && subattributionLabel.isNotEmpty() val summary = buildUsageSummary(durationSummaryLabel, proxyLabel, subattributionLabel, context) @@ -376,7 +377,7 @@ class PermissionUsageDetailsViewModelLegacy( getPackageLabel( PermissionControllerApplication.get(), it.proxy!!.packageName!!, - UserHandle.getUserHandleForUid(it.proxy!!.uid)) + UserHandle.getUserHandleForUid(it.proxy.uid)) } /** Returns the attribution label for the permission access, if any. */ diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt index c50d73a0b7..2ea9138045 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt @@ -347,7 +347,7 @@ class PermissionUsageViewModel( owner: SavedStateRegistryOwner, defaultArgs: Bundle ) : AbstractSavedStateViewModelFactory(owner, defaultArgs) { - override fun create( + override fun create( key: String, modelClass: Class, handle: SavedStateHandle diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModelLegacy.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModelLegacy.kt index 8f1dacbb27..ff21a7216d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModelLegacy.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModelLegacy.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.ui.model.v31 diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/television/TvUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/television/TvUnusedAppsFragment.kt index b21b4cb88c..07e2ab08f6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/television/TvUnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/television/TvUnusedAppsFragment.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.android.permissioncontroller.permission.ui.television import android.app.Application diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/widget/SafetyProtectionSectionView.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/widget/SafetyProtectionSectionView.kt index e20067d13c..f1a1c972e9 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/widget/SafetyProtectionSectionView.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/widget/SafetyProtectionSectionView.kt @@ -62,7 +62,7 @@ class SafetyProtectionSectionView : LinearLayout { LayoutInflater.from(context).inflate(R.layout.safety_protection_section, this) val safetyProtectionDisplayTextView = requireViewById(R.id.safety_protection_display_text) - safetyProtectionDisplayTextView!!.setText(Html.fromHtml( + safetyProtectionDisplayTextView.setText(Html.fromHtml( context.getString(android.R.string.safety_protection_display_text), 0)) } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/AndroidUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/AndroidUtils.kt index 70b357ba3a..6a6623da74 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/AndroidUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/AndroidUtils.kt @@ -68,17 +68,11 @@ fun PackageManager.updatePermissionFlags( vararg flags: Pair ) { val mask = flags.fold(0, { mask, (flag, _) -> mask or flag }) - val value = flags.fold(0, { mask, (flag, flagValue) -> if (flagValue) mask or flag else mask }) + val value = flags.fold(0, + { mask2, (flag, flagValue) -> if (flagValue) mask2 or flag else mask2 }) updatePermissionFlags(permissionName, packageName, mask, value, user) } -/** - * @see UserHandle.getUid - */ -fun UserHandle.getUid(appId: Int): Int { - return identifier * 100000 + (appId % 100000) -} - /** * Gets a [ComponentInfo] from a [ResolveInfo] */ diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt index 95c0f6911b..9bbb09cb8d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.utils @@ -527,7 +528,6 @@ object KotlinUtils { * * @return The package's icon, or null, if the package does not exist */ - @JvmOverloads fun getBadgedPackageIcon( app: Application, packageName: String, @@ -774,10 +774,10 @@ object KotlinUtils { if (!newPerms.isEmpty()) { val user = UserHandle.getUserHandleForUid(group.packageInfo.uid) for (groupPerm in group.allPermissions.values) { - var permFlags = groupPerm!!.flags + var permFlags = groupPerm.flags permFlags = permFlags.clearFlag(FLAG_PERMISSION_AUTO_REVOKED) - if (groupPerm!!.flags != permFlags) { - app.packageManager.updatePermissionFlags(groupPerm!!.name, + if (groupPerm.flags != permFlags) { + app.packageManager.updatePermissionFlags(groupPerm.name, group.packageInfo.packageName, PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, permFlags, user) } @@ -1383,14 +1383,14 @@ object KotlinUtils { var resolveInfos = context.packageManager.queryIntentActivities(intentToResolve, MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE) - if (resolveInfos == null || resolveInfos.size <= 0) { + if (resolveInfos.size <= 0) { intentToResolve.removeCategory(CATEGORY_INFO) intentToResolve.addCategory(CATEGORY_LAUNCHER) intentToResolve.setPackage(packageName) resolveInfos = context.packageManager.queryIntentActivities(intentToResolve, MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE) } - return resolveInfos != null && resolveInfos.size > 0 + return resolveInfos.size > 0 } /** @@ -1489,7 +1489,7 @@ suspend fun > LD.getInitializedValue( isInitialized: LD.() -> Boolean = { value != null } ): T { return if (isInitialized()) { - value as T + value!! } else { suspendCoroutine { continuation: Continuation -> val observer = AtomicReference>() diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt index 3fde871083..c0b174c286 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.permission.utils diff --git a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt index 83222bf4a6..4e86c7d171 100644 --- a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt +++ b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerCheck.kt @@ -550,7 +550,7 @@ internal class NotificationListenerCheckInternal( .setDeleteIntent(deletePendingIntent) .setContentIntent(clickPendingIntent) - if (appLabel != null && appLabel.isNotEmpty()) { + if (appLabel.isNotEmpty()) { val appNameExtras = Bundle() appNameExtras.putString(Notification.EXTRA_SUBSTITUTE_APP_NAME, appLabel.toString()) b.addExtras(appNameExtras) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyGroupPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyGroupPreference.kt index 75e8800c16..2a9f6f7802 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyGroupPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyGroupPreference.kt @@ -59,12 +59,12 @@ class SafetyGroupPreference( onCollapsedListener) } - override fun isSameItem(other: Preference): Boolean = - other is SafetyGroupPreference && TextUtils.equals(group.id, other.group.id) + override fun isSameItem(preference: Preference): Boolean = + preference is SafetyGroupPreference && TextUtils.equals(group.id, preference.group.id) - override fun hasSameContents(other: Preference): Boolean = - other is SafetyGroupPreference && - group == other.group && - isFirstCard == other.isFirstCard && - isLastCard == other.isLastCard + override fun hasSameContents(preference: Preference): Boolean = + preference is SafetyGroupPreference && + group == preference.group && + isFirstCard == preference.isFirstCard && + isLastCard == preference.isLastCard } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt index 606bdb5b3f..be8b1e8c5e 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt @@ -107,6 +107,7 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel( sensorPrivacyManager.removeSensorPrivacyListener(this) } + @Suppress("OVERRIDE_DEPRECATION") override fun onSensorPrivacyChanged(sensor: Int, enabled: Boolean) { update() } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterQsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterQsViewModel.kt index e3e8817244..73c7da99fa 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterQsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterQsViewModel.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") package com.android.permissioncontroller.safetycenter.ui.model @@ -127,10 +128,9 @@ class SafetyCenterQsViewModel( UserHandle.getUserHandleForUid(usage.uid))] ?: return - if (group != null) { - KotlinUtils.revokeForegroundRuntimePermissions(app, group) - KotlinUtils.revokeBackgroundRuntimePermissions(app, group) - } + KotlinUtils.revokeForegroundRuntimePermissions(app, group) + KotlinUtils.revokeBackgroundRuntimePermissions(app, group) + revokedUsages.add(usage) } @@ -186,6 +186,7 @@ class SafetyCenterQsViewModel( LOCATION to SensorState(true, locationEnabled, locationEnforcedAdmin)) } + @Suppress("OVERRIDE_DEPRECATION") override fun onSensorPrivacyChanged(sensor: Int, enabled: Boolean) { update() } diff --git a/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt b/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt index 890f68e701..bd4619b3cf 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt @@ -148,7 +148,7 @@ object AppsSafetyLabelHistoryPersistence { val appInfoToOrderedSafetyLabels = safetyLabelsToAdd .groupBy { it.appInfo } - .mapValues { (appInfo, safetyLabels) -> + .mapValues { (_, safetyLabels) -> safetyLabels.sortedBy { it.receivedAt } } val currentAppHistories = currentAppsSafetyLabelHistory.appSafetyLabelHistories diff --git a/service/Android.bp b/service/Android.bp index 11ff2c1481..33cfa07a0b 100644 --- a/service/Android.bp +++ b/service/Android.bp @@ -116,6 +116,7 @@ java_sdk_library { exclude_kotlinc_generated_files: true, jarjar_rules: "jarjar-rules.txt", kotlincflags: [ + "-Werror", "-Xjvm-default=all", "-Xno-call-assertions", "-Xno-param-assertions", -- GitLab From b09d3e8673bdfaa31426aae8ee1ddb957001382e Mon Sep 17 00:00:00 2001 From: Jordan Jozwiak Date: Wed, 8 Feb 2023 18:26:29 -0800 Subject: [PATCH 012/577] Handle ACTION_MANAGE_PERMISSION_USAGE on Auto This change adds support to handle the ACTION_MANAGE_PERMISSION_USAGE subattribution flow on Auto, mirroring the phone change in Ie6a52873b295d7f202655f6b1a5b246202221d0e. Ideally this logic should be shared in a ViewModel, but that is more complicated right now due to ongoing refactors and clean-ups. For now this code lives within the UI layer, which will also make it easier to cherry-pick, if necessary. Bug: 256173612 Test: atest PrivacyDashboardSubattributionsTest Change-Id: I8f97be2b99014469a00933af7269f56691cba7d7 --- .../AutoPermissionHistoryPreference.kt | 23 ++++-- .../v31/PermissionHistoryPreference.java | 63 ++++----------- .../v31/PermissionUsageDetailsViewModel.kt | 78 +++++++++++++++++++ 3 files changed, 108 insertions(+), 56 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionHistoryPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionHistoryPreference.kt index a9bebf0008..a7cb6c340c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionHistoryPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/dashboard/AutoPermissionHistoryPreference.kt @@ -17,14 +17,17 @@ package com.android.permissioncontroller.permission.ui.auto.dashboard import android.content.Context -import android.content.Intent +import android.os.Build import android.text.format.DateFormat +import androidx.annotation.RequiresApi import androidx.preference.Preference.OnPreferenceClickListener import com.android.car.ui.preference.CarUiPreference import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModel import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModelLegacy /** Preference that displays a permission usage for an app. */ +@RequiresApi(Build.VERSION_CODES.S) class AutoPermissionHistoryPreference( context: Context, historyPreferenceData: PermissionUsageDetailsViewModelLegacy.HistoryPreferenceData @@ -46,12 +49,18 @@ class AutoPermissionHistoryPreference( } onPreferenceClickListener = OnPreferenceClickListener { - val intent = - Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS).apply { - putExtra(Intent.EXTRA_USER, historyPreferenceData.userHandle) - putExtra(Intent.EXTRA_PACKAGE_NAME, historyPreferenceData.pkgName) - } - context.startActivity(intent) + // This Intent should ideally be part of the preference data, and can be consolidated + // when the Legacy and New viewmodels are merged. + context.startActivity( + PermissionUsageDetailsViewModel.createHistoryPreferenceClickIntent( + context = context, + userHandle = historyPreferenceData.userHandle, + packageName = historyPreferenceData.pkgName, + permissionGroup = historyPreferenceData.permissionGroup, + accessEndTime = historyPreferenceData.accessEndTime, + accessStartTime = historyPreferenceData.accessStartTime, + showingAttribution = historyPreferenceData.showingAttribution, + attributionTags = historyPreferenceData.attributionTags)) true } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionHistoryPreference.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionHistoryPreference.java index 8a723be421..bcca75fcc3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionHistoryPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionHistoryPreference.java @@ -21,7 +21,6 @@ import static com.android.permissioncontroller.PermissionControllerStatsLog.PERM import static com.android.permissioncontroller.PermissionControllerStatsLog.write; import android.content.ActivityNotFoundException; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -43,9 +42,9 @@ import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; -import com.android.modules.utils.build.SdkLevel; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.compat.IntentCompat; +import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModel; import com.android.permissioncontroller.permission.utils.Utils; import java.util.ArrayList; @@ -147,14 +146,21 @@ public class PermissionHistoryPreference extends Preference { View dashLine = widget.findViewById(R.id.permission_history_dash_line); dashLine.setVisibility(mIsLastUsage ? View.GONE : View.VISIBLE); - Intent intent = getManagePermissionUsageIntent(); - if (intent == null) { - intent = getDefaultManageAppPermissionsIntent(); - } + // This Intent should ideally be part of the constructor, passed in from the ViewModel. + // It's temporarily created via a static method due to ongoing ViewModel refactoring. + Intent intent = + PermissionUsageDetailsViewModel.Companion.createHistoryPreferenceClickIntent( + mContext, + mUserHandle, + mPackageName, + mPermissionGroup, + mAccessStartTime, + mAccessEndTime, + mShowingAttribution, + mAttributionTags); - Intent finalIntent = intent; setOnPreferenceClickListener((preference) -> { - mContext.startActivityAsUser(finalIntent, mUserHandle); + mContext.startActivityAsUser(intent, mUserHandle); return true; }); } @@ -180,47 +186,6 @@ public class PermissionHistoryPreference extends Preference { } } - private Intent getDefaultManageAppPermissionsIntent() { - Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS); - intent.putExtra(Intent.EXTRA_USER, mUserHandle); - intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName); - - return intent; - } - - /** - * Get a {@link Intent#ACTION_MANAGE_PERMISSION_USAGE} intent, or null if the intent - * can't be handled. - * - * Suppressing the NewApi warning since we already have a isAtLeastT() check. - */ - @Nullable - @SuppressWarnings("NewApi") - private Intent getManagePermissionUsageIntent() { - if (!mShowingAttribution || !SdkLevel.isAtLeastT() || mPackageName == null) { - return null; - } - - Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE); - intent.setPackage(mPackageName); - intent.putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, mPermissionGroup); - intent.putExtra(Intent.EXTRA_ATTRIBUTION_TAGS, mAttributionTags.toArray(new String[0])); - intent.putExtra(Intent.EXTRA_START_TIME, mAccessStartTime); - intent.putExtra(Intent.EXTRA_END_TIME, mAccessEndTime); - intent.putExtra(IntentCompat.EXTRA_SHOWING_ATTRIBUTION, mShowingAttribution); - - ResolveInfo resolveInfo = mUserPackageManager.resolveActivity(intent, - PackageManager.ResolveInfoFlags.of(0)); - if (resolveInfo == null || resolveInfo.activityInfo == null || !Objects.equals( - resolveInfo.activityInfo.permission, - android.Manifest.permission.START_VIEW_PERMISSION_USAGE)) { - return null; - } - intent.setComponent(new ComponentName(mPackageName, resolveInfo.activityInfo.name)); - - return intent; - } - /** * Get a {@link Intent#ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD} intent, or null if the intent * can't be handled. diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt index 0063e41574..1102c95275 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt @@ -20,7 +20,10 @@ import android.Manifest import android.app.AppOpsManager import android.app.Application import android.app.role.RoleManager +import android.content.ComponentName import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager import android.content.res.Resources import android.os.Build import android.os.Bundle @@ -30,8 +33,10 @@ import androidx.lifecycle.AbstractSavedStateViewModelFactory import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.savedstate.SavedStateRegistryOwner +import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.PermissionControllerApplication import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.compat.IntentCompat import com.android.permissioncontroller.permission.data.AppPermGroupUiInfoLiveData import com.android.permissioncontroller.permission.data.LightPackageInfoLiveData import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData @@ -50,6 +55,7 @@ import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.SubattributionUtils import com.android.permissioncontroller.permission.utils.Utils import java.time.Instant +import java.util.Objects import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit.DAYS @@ -611,6 +617,78 @@ class PermissionUsageDetailsViewModel( .flatMap { group -> PermissionMapping.getPlatformPermissionNamesOfGroup(group) } .mapNotNull { permName -> AppOpsManager.permissionToOp(permName) } .toSet() + + /** Creates the [Intent] for the click action of a privacy dashboard app usage event. */ + fun createHistoryPreferenceClickIntent( + context: Context, + userHandle: UserHandle, + packageName: String, + permissionGroup: String, + accessStartTime: Long, + accessEndTime: Long, + showingAttribution: Boolean, + attributionTags: List + ): Intent { + return getManagePermissionUsageIntent( + context, + packageName, + permissionGroup, + accessStartTime, + accessEndTime, + showingAttribution, + attributionTags) + ?: getDefaultManageAppPermissionsIntent(packageName, userHandle) + } + + /** + * Gets an [Intent.ACTION_MANAGE_PERMISSION_USAGE] intent, or null if attribution shouldn't + * be shown or the intent can't be handled. + */ + private fun getManagePermissionUsageIntent( + context: Context, + packageName: String, + permissionGroup: String, + accessStartTime: Long, + accessEndTime: Long, + showingAttribution: Boolean, + attributionTags: List + ): Intent? { + // TODO(b/255992934) only location provider apps should be able to provide this intent + if (!showingAttribution || !SdkLevel.isAtLeastT()) { + return null + } + val intent = + Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE).apply { + setPackage(packageName) + putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, permissionGroup) + putExtra(Intent.EXTRA_ATTRIBUTION_TAGS, attributionTags.toTypedArray()) + putExtra(Intent.EXTRA_START_TIME, accessStartTime) + putExtra(Intent.EXTRA_END_TIME, accessEndTime) + putExtra(IntentCompat.EXTRA_SHOWING_ATTRIBUTION, showingAttribution) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + val resolveInfo = + context.packageManager.resolveActivity( + intent, PackageManager.ResolveInfoFlags.of(0)) + if (resolveInfo?.activityInfo == null || + !Objects.equals( + resolveInfo.activityInfo.permission, + Manifest.permission.START_VIEW_PERMISSION_USAGE)) { + return null + } + intent.component = ComponentName(packageName, resolveInfo.activityInfo.name) + return intent + } + + private fun getDefaultManageAppPermissionsIntent( + packageName: String, + userHandle: UserHandle + ): Intent { + return Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS).apply { + putExtra(Intent.EXTRA_USER, userHandle) + putExtra(Intent.EXTRA_PACKAGE_NAME, packageName) + } + } } /** Factory for [PermissionUsageViewModel]. */ -- GitLab From 988b73e7966704cb7039c187e8c28f3289f1a303 Mon Sep 17 00:00:00 2001 From: Roman Kalukiewicz Date: Fri, 24 Feb 2023 11:35:48 -0800 Subject: [PATCH 013/577] Update javadoc for get/setDefaultApplication API. Bug: 269619743 Test: mm Change-Id: I88b679bf2359180234e3fc9645c66f54b6f3bfa4 --- framework-s/java/android/app/role/RoleManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/framework-s/java/android/app/role/RoleManager.java b/framework-s/java/android/app/role/RoleManager.java index cb022c9b2b..14bb2586b9 100644 --- a/framework-s/java/android/app/role/RoleManager.java +++ b/framework-s/java/android/app/role/RoleManager.java @@ -466,10 +466,10 @@ public final class RoleManager { } /** - * Get package names of the applications holding the role for a default application. + * Get package name of the application holding the role for a default application. *

- * Note: Using this API requires holding - * {@code android.permission.MANAGE_DEFAULT_APPLICATIONS}. + * Only roles describing default applications can be used with this method. They can have + * at most one holder. * * @param roleName the name of the default application role to get * @@ -497,8 +497,8 @@ public final class RoleManager { /** * Set a specific application as the default application. *

- * Note: Using this API requires holding - * {@code android.permission.MANAGE_DEFAULT_APPLICATIONS}. + * Only roles describing default applications can be used with this method. They can have + * at most one holder. * * @param roleName the name of the default application role to set the role holder for * @param packageName the package name of the application to set as the default application, -- GitLab From 3998657482d4ae81f5a55fc0577b4a52b7bce467 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 27 Feb 2023 01:16:52 -0800 Subject: [PATCH 014/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ic0c674e1552cd472b7af185388fea6c4e7cd0448 --- .../res/values-af-v34/strings.xml | 3 +- .../res/values-af/strings.xml | 24 ++--- .../res/values-am/strings.xml | 21 ++-- .../res/values-ar-v34/strings.xml | 3 +- .../res/values-ar/strings.xml | 34 +++---- .../res/values-as-car/strings.xml | 21 ++++ .../res/values-as-v34/strings.xml | 25 +++++ .../res/values-as/strings.xml | 96 +++++++------------ .../res/values-az-v34/strings.xml | 3 +- .../res/values-az/strings.xml | 24 ++--- .../res/values-be-v34/strings.xml | 3 +- .../res/values-be/strings.xml | 24 ++--- .../res/values-bg-v34/strings.xml | 3 +- .../res/values-bg/strings.xml | 24 ++--- .../res/values-bn-v34/strings.xml | 3 +- .../res/values-bn/strings.xml | 24 ++--- .../res/values-bs-car/strings.xml | 2 +- .../res/values-bs-v34/strings.xml | 4 +- .../res/values-bs/strings.xml | 40 ++++---- .../res/values-ca-v34/strings.xml | 3 +- .../res/values-ca/strings.xml | 24 ++--- .../res/values-cs-car/strings.xml | 21 ++++ .../res/values-cs-v34/strings.xml | 25 +++++ .../res/values-cs/strings.xml | 96 +++++++------------ .../res/values-da-v34/strings.xml | 3 +- .../res/values-da/strings.xml | 24 ++--- .../res/values-de-car/strings.xml | 2 +- .../res/values-de-v34/strings.xml | 3 +- .../res/values-de/strings.xml | 46 ++++----- .../res/values-el-car/strings.xml | 21 ++++ .../res/values-el-v34/strings.xml | 25 +++++ .../res/values-el/strings.xml | 96 +++++++------------ .../res/values-es-rUS-car/strings.xml | 21 ++++ .../res/values-es-rUS-v34/strings.xml | 25 +++++ .../res/values-es-rUS/strings.xml | 96 +++++++------------ .../res/values-es-v34/strings.xml | 3 +- .../res/values-es/strings.xml | 36 +++---- .../res/values-et-v34/strings.xml | 3 +- .../res/values-et/strings.xml | 24 ++--- .../res/values-eu/strings.xml | 29 +++--- .../res/values-fa-v34/strings.xml | 3 +- .../res/values-fa/strings.xml | 24 ++--- .../res/values-fi-v34/strings.xml | 3 +- .../res/values-fi/strings.xml | 24 ++--- .../res/values-fr-car/strings.xml | 21 ++++ .../res/values-fr-rCA-car/strings.xml | 21 ++++ .../res/values-fr-rCA-v34/strings.xml | 26 +++++ .../res/values-fr-rCA/strings.xml | 93 ++++++------------ .../res/values-fr-v34/strings.xml | 25 +++++ .../res/values-fr/strings.xml | 96 +++++++------------ .../res/values-gl-car/strings.xml | 21 ++++ .../res/values-gl-v34/strings.xml | 25 +++++ .../res/values-gl/strings.xml | 96 +++++++------------ .../res/values-gu-v34/strings.xml | 3 +- .../res/values-gu/strings.xml | 24 ++--- .../res/values-hi-v34/strings.xml | 3 +- .../res/values-hi/strings.xml | 24 ++--- .../res/values-hu-v34/strings.xml | 3 +- .../res/values-hu/strings.xml | 24 ++--- .../res/values-hy-car/strings.xml | 21 ++++ .../res/values-hy-v34/strings.xml | 25 +++++ .../res/values-hy/strings.xml | 96 +++++++------------ .../res/values-in-v34/strings.xml | 3 +- .../res/values-in/strings.xml | 24 ++--- .../res/values-is-v34/strings.xml | 3 +- .../res/values-is/strings.xml | 24 ++--- .../res/values-iw-v34/strings.xml | 5 +- .../res/values-iw/strings.xml | 30 +++--- .../res/values-ja-v34/strings.xml | 3 +- .../res/values-ja/strings.xml | 24 ++--- .../res/values-ka-car/strings.xml | 21 ++++ .../res/values-ka-v34/strings.xml | 25 +++++ .../res/values-ka/strings.xml | 96 +++++++------------ .../res/values-kk-car/strings.xml | 21 ++++ .../res/values-kk-v34/strings.xml | 25 +++++ .../res/values-kk/strings.xml | 96 +++++++------------ .../res/values-km-car/strings.xml | 21 ++++ .../res/values-km-v34/strings.xml | 25 +++++ .../res/values-km/strings.xml | 96 +++++++------------ .../res/values-kn-v34/strings.xml | 3 +- .../res/values-kn/strings.xml | 24 ++--- .../res/values-ko-v34/strings.xml | 3 +- .../res/values-ko/strings.xml | 28 ++---- .../res/values-ky-v34/strings.xml | 3 +- .../res/values-ky/strings.xml | 24 ++--- .../res/values-lo-v34/strings.xml | 3 +- .../res/values-lo/strings.xml | 24 ++--- .../res/values-lt-v34/strings.xml | 3 +- .../res/values-lt/strings.xml | 24 ++--- .../res/values-lv-v34/strings.xml | 3 +- .../res/values-lv/strings.xml | 24 ++--- .../res/values-mk-car/strings.xml | 21 ++++ .../res/values-mk-v34/strings.xml | 25 +++++ .../res/values-mk/strings.xml | 96 +++++++------------ .../res/values-ml/strings.xml | 2 +- .../res/values-mn-v34/strings.xml | 3 +- .../res/values-mn/strings.xml | 24 ++--- .../res/values-mr-v34/strings.xml | 3 +- .../res/values-mr/strings.xml | 24 ++--- .../res/values-ms-v34/strings.xml | 3 +- .../res/values-ms/strings.xml | 24 ++--- .../res/values-my-car/strings.xml | 21 ++++ .../res/values-my-v34/strings.xml | 25 +++++ .../res/values-my/strings.xml | 96 +++++++------------ .../res/values-nb-v34/strings.xml | 3 +- .../res/values-nb/strings.xml | 24 ++--- .../res/values-ne-v34/strings.xml | 3 +- .../res/values-ne/strings.xml | 24 ++--- .../res/values-nl-car/strings.xml | 21 ++++ .../res/values-nl-v34/strings.xml | 25 +++++ .../res/values-nl/strings.xml | 96 +++++++------------ .../res/values-or-v34/strings.xml | 3 +- .../res/values-or/strings.xml | 26 ++--- .../res/values-pa-v34/strings.xml | 3 +- .../res/values-pa/strings.xml | 22 ++--- .../res/values-pl-car/strings.xml | 21 ++++ .../res/values-pl-v34/strings.xml | 25 +++++ .../res/values-pl/strings.xml | 96 +++++++------------ .../res/values-pt-car/strings.xml | 21 ++++ .../res/values-pt-rBR-car/strings.xml | 21 ++++ .../res/values-pt-rBR-v33/strings.xml | 2 +- .../res/values-pt-rBR-v34/strings.xml | 25 +++++ .../res/values-pt-rBR/strings.xml | 96 +++++++------------ .../res/values-pt-rPT-v34/strings.xml | 3 +- .../res/values-pt-rPT/strings.xml | 24 ++--- .../res/values-pt-v33/strings.xml | 2 +- .../res/values-pt-v34/strings.xml | 25 +++++ .../res/values-pt/strings.xml | 96 +++++++------------ .../res/values-ro-car/strings.xml | 21 ++++ .../res/values-ro-v34/strings.xml | 25 +++++ .../res/values-ro/strings.xml | 96 +++++++------------ .../res/values-ru-car/strings.xml | 21 ++++ .../res/values-ru-v34/strings.xml | 25 +++++ .../res/values-ru/strings.xml | 96 +++++++------------ .../res/values-si-car/strings.xml | 21 ++++ .../res/values-si-v34/strings.xml | 25 +++++ .../res/values-si/strings.xml | 96 +++++++------------ .../res/values-sk-v34/strings.xml | 3 +- .../res/values-sk/strings.xml | 24 ++--- .../res/values-sl-car/strings.xml | 21 ++++ .../res/values-sl-v34/strings.xml | 25 +++++ .../res/values-sl/strings.xml | 96 +++++++------------ .../res/values-sq-car/strings.xml | 21 ++++ .../res/values-sq-v34/strings.xml | 25 +++++ .../res/values-sq/strings.xml | 96 +++++++------------ .../res/values-sv-v34/strings.xml | 3 +- .../res/values-sv/strings.xml | 24 ++--- .../res/values-sw-car/strings.xml | 21 ++++ .../res/values-sw-v34/strings.xml | 25 +++++ .../res/values-sw/strings.xml | 96 +++++++------------ .../res/values-ta/strings.xml | 25 ++--- .../res/values-te-v34/strings.xml | 3 +- .../res/values-te/strings.xml | 24 ++--- .../res/values-th/strings.xml | 2 +- .../res/values-tl-v34/strings.xml | 3 +- .../res/values-tl/strings.xml | 24 ++--- .../res/values-tr-car/strings.xml | 21 ++++ .../res/values-tr-v34/strings.xml | 25 +++++ .../res/values-tr/strings.xml | 96 +++++++------------ .../res/values-uk-car/strings.xml | 21 ++++ .../res/values-uk-v34/strings.xml | 25 +++++ .../res/values-uk/strings.xml | 96 +++++++------------ .../res/values-ur-v34/strings.xml | 3 +- .../res/values-ur/strings.xml | 24 ++--- .../res/values-uz/strings.xml | 2 +- .../res/values-vi-v34/strings.xml | 3 +- .../res/values-vi/strings.xml | 24 ++--- .../res/values-zh-rCN-car/strings.xml | 21 ++++ .../res/values-zh-rCN-v34/strings.xml | 25 +++++ .../res/values-zh-rCN/strings.xml | 96 +++++++------------ .../res/values-zh-rHK-v34/strings.xml | 3 +- .../res/values-zh-rHK/strings.xml | 24 ++--- .../res/values-zh-rTW-car/strings.xml | 21 ++++ .../res/values-zh-rTW-v34/strings.xml | 25 +++++ .../res/values-zh-rTW/strings.xml | 96 +++++++------------ .../res/values-zu-car/strings.xml | 21 ++++ .../res/values-zu-v34/strings.xml | 25 +++++ .../res/values-zu/strings.xml | 96 +++++++------------ 178 files changed, 2638 insertions(+), 2632 deletions(-) create mode 100644 PermissionController/res/values-as-car/strings.xml create mode 100644 PermissionController/res/values-as-v34/strings.xml create mode 100644 PermissionController/res/values-cs-car/strings.xml create mode 100644 PermissionController/res/values-cs-v34/strings.xml create mode 100644 PermissionController/res/values-el-car/strings.xml create mode 100644 PermissionController/res/values-el-v34/strings.xml create mode 100644 PermissionController/res/values-es-rUS-car/strings.xml create mode 100644 PermissionController/res/values-es-rUS-v34/strings.xml create mode 100644 PermissionController/res/values-fr-car/strings.xml create mode 100644 PermissionController/res/values-fr-rCA-car/strings.xml create mode 100644 PermissionController/res/values-fr-rCA-v34/strings.xml create mode 100644 PermissionController/res/values-fr-v34/strings.xml create mode 100644 PermissionController/res/values-gl-car/strings.xml create mode 100644 PermissionController/res/values-gl-v34/strings.xml create mode 100644 PermissionController/res/values-hy-car/strings.xml create mode 100644 PermissionController/res/values-hy-v34/strings.xml create mode 100644 PermissionController/res/values-ka-car/strings.xml create mode 100644 PermissionController/res/values-ka-v34/strings.xml create mode 100644 PermissionController/res/values-kk-car/strings.xml create mode 100644 PermissionController/res/values-kk-v34/strings.xml create mode 100644 PermissionController/res/values-km-car/strings.xml create mode 100644 PermissionController/res/values-km-v34/strings.xml create mode 100644 PermissionController/res/values-mk-car/strings.xml create mode 100644 PermissionController/res/values-mk-v34/strings.xml create mode 100644 PermissionController/res/values-my-car/strings.xml create mode 100644 PermissionController/res/values-my-v34/strings.xml create mode 100644 PermissionController/res/values-nl-car/strings.xml create mode 100644 PermissionController/res/values-nl-v34/strings.xml create mode 100644 PermissionController/res/values-pl-car/strings.xml create mode 100644 PermissionController/res/values-pl-v34/strings.xml create mode 100644 PermissionController/res/values-pt-car/strings.xml create mode 100644 PermissionController/res/values-pt-rBR-car/strings.xml create mode 100644 PermissionController/res/values-pt-rBR-v34/strings.xml create mode 100644 PermissionController/res/values-pt-v34/strings.xml create mode 100644 PermissionController/res/values-ro-car/strings.xml create mode 100644 PermissionController/res/values-ro-v34/strings.xml create mode 100644 PermissionController/res/values-ru-car/strings.xml create mode 100644 PermissionController/res/values-ru-v34/strings.xml create mode 100644 PermissionController/res/values-si-car/strings.xml create mode 100644 PermissionController/res/values-si-v34/strings.xml create mode 100644 PermissionController/res/values-sl-car/strings.xml create mode 100644 PermissionController/res/values-sl-v34/strings.xml create mode 100644 PermissionController/res/values-sq-car/strings.xml create mode 100644 PermissionController/res/values-sq-v34/strings.xml create mode 100644 PermissionController/res/values-sw-car/strings.xml create mode 100644 PermissionController/res/values-sw-v34/strings.xml create mode 100644 PermissionController/res/values-tr-car/strings.xml create mode 100644 PermissionController/res/values-tr-v34/strings.xml create mode 100644 PermissionController/res/values-uk-car/strings.xml create mode 100644 PermissionController/res/values-uk-v34/strings.xml create mode 100644 PermissionController/res/values-zh-rCN-car/strings.xml create mode 100644 PermissionController/res/values-zh-rCN-v34/strings.xml create mode 100644 PermissionController/res/values-zh-rTW-car/strings.xml create mode 100644 PermissionController/res/values-zh-rTW-v34/strings.xml create mode 100644 PermissionController/res/values-zu-car/strings.xml create mode 100644 PermissionController/res/values-zu-v34/strings.xml diff --git a/PermissionController/res/values-af-v34/strings.xml b/PermissionController/res/values-af-v34/strings.xml index 2ee4a4acbf..de789405dc 100644 --- a/PermissionController/res/values-af-v34/strings.xml +++ b/PermissionController/res/values-af-v34/strings.xml @@ -20,7 +20,6 @@ "Sekuriteit en privaatheid" "Kontroles" "Data" - - + "Health Connect" "Apptoestemmings en databestuur" diff --git a/PermissionController/res/values-af/strings.xml b/PermissionController/res/values-af/strings.xml index bd6a6584f2..181ee9909c 100644 --- a/PermissionController/res/values-af/strings.xml +++ b/PermissionController/res/values-af/strings.xml @@ -592,26 +592,21 @@ "Wys wagwoorde" "Wys karakters kortliks terwyl jy tik" "Hierdie app het verklaar dat dit jou liggingdata met derde partye kan deel" - - + "Datadeling en -ligging" "Waar datadelinginligting vandaan kom" - - + "Die ontwikkelaar het inligting aan ""%1$s"" verskaf oor hoe hierdie app data deel. Hulle kan hierdie inligting mettertyd opdateer." "Hierdie app kan liggingdata deel vir:" - - + "%1$s" "Datadeling verskil" "Datapraktyke kan verskil op grond van jou appweergawe en -gebruik, streek en ouderdom. ""Meer oor datadeling" "Jou liggingdata" "Verander hierdie app se toegang in ""privaatheidinstellings" "Appfunksies" - - + "Ontledings" "Ontwikkelaarkommunikasie" "Reklame of bemarking" "Bedrogvoorkoming, sekuriteit en voldoening" - - + "Personalisering" "Rekeningbestuur" "Dataveiligheid" "Liggingdata sal dalk gedeel word" @@ -619,13 +614,10 @@ "Datadelingopdaterings vir ligging" "Gaan apps na wat die manier waarop hulle jou liggingdata kan deel, verander het" "Hierdie apps het die manier waarop hulle jou liggingdata kan deel, verander. Hulle het dit dalk nie voorheen gedeel nie, of kan dit nou vir reklame- of bemarkingdoeleindes deel." - - + "Die ontwikkelaars van hierdie apps het inligting oor hul datadelingpraktyke met ’n appwinkel gedeel. Hulle kan dit mettertyd opdateer.\n\nDatadelingpraktyke kan verskil op grond van jou appweergawe en -gebruik, streek en ouderdom." "Kom meer te wete oor datadeling" - - - - + "Jou liggingdata word nou met derde partye gedeel" + "Jou liggingdata word nou met derde partye gedeel vir reklame of bemarking" "{count,plural, =0{In die afgelope dag opgedateer}=1{In die afgelope dag opgedateer}other{In die afgelope # dae opgedateer}}" "Geen opdaterings op hierdie tydstip nie" "Datadelingopdaterings" diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml index c25f812ce7..a5cfc7b101 100644 --- a/PermissionController/res/values-am/strings.xml +++ b/PermissionController/res/values-am/strings.xml @@ -592,11 +592,9 @@ "የይለፍ ቃላትን አሳይ" "እርስዎ በሚተይቡበት ጊዜ ቁምፊዎችን በአጭሩ ያሳይ" "ይህ መተግበሪያ የአካባቢ ውሂብዎን ከሦስተኛ ወገኖች ጋር ሊያጋራ እንደሚችል ገልጿል" - - + "ውሂብ ማጋራት እና አካባቢ" "የውሂብ ማጋራት መረጃ ከየት እንደሚመጣ" - - + "ገንቢው ይህ መተግበሪያ እንዴት ውሂብ እንደሚያጋራ መረጃ ለ""%1$s"" አቅርቧል። ይህን መረጃ በጊዜ ሂደት ሊያዘምነው ይችላል።" "መተግበሪያው የአካባቢ ውሂብን ለሚከተሉት ሊያጋራ ይችላል፦" @@ -605,13 +603,11 @@ "የእርስዎ የአካባቢ ውሂብ" "የዚህን መተግበሪያ መዳረሻ በ""ግላዊነት ቅንብሮች"" ውስጥ ይለውጡ" "የመተግበሪያ ተግባራዊነት" - - + "ትንታኔ" "የገንቢ ተግባቦት" "ማስታወቂያ ወይም የገበያ ሥራ" "ማጭበርበርን መከላከል፣ ደህንነት እና ተገዥነት" - - + "ግላዊነት ማላበስ" "የመለያ አስተዳደር" "የውሂብ ደህንነት" "የአካባቢ ውሂብ ሊጋራ ይችላል" @@ -619,13 +615,10 @@ "የአካባቢ የውሂብ ማጋራት ዝማኔዎች" "የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ የለወጡ መተግበሪያዎችን ይገምግሙ" "እነዚህ መተግበሪያዎች የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ ለውጠዋል። ከዚህ በፊት አጋርተውት ላይሆን ይችላል፣ ወይም አሁን ለማስታወቂያ ወይም የገበያ ሥራ ዓላማዎች ሊያጋሩት ይችላሉ።" - - + "የእነዚህ መተግበሪያዎች ገንቢዎች ስለውሂብ ማጋራት ልማዶቻቸው ለመተግበሪያ መደብር መረጃ አቅርበዋል። በጊዜ ሂደት ሊያዘምኑት ይችላሉ።\n\nየውሂብ ማጋራት ልማዶች በመተግበሪያዎ ስሪት፣ አጠቃቀም፣ ክልል እና እድሜ መሰረት ሊለያዩ ይችላሉ።" "ስለውሂብ ማጋራት የበለጠ ይወቁ" - - - - + "የእርስዎ የአካባቢ ውሂብ አሁን ከሦስተኛ ወገኖች ጋር ተጋርቷል" + "የእርስዎ የአካባቢ ውሂብ አሁን ለማስታወቂያ ወይም የገበያ ሥራ ከሦስተኛ ወገኖች ጋር ተጋርቷል" "{count,plural, =0{ባለፈው ቀን ውስጥ የተዘመነ}=1{ባለፈው ቀን ውስጥ የተዘመነ}one{ባለፈው # ቀን ውስጥ የተዘመነ}other{ባለፉት # ቀናት ውስጥ የተዘመነ}}" "በዚህ ጊዜ ምንም ዝማኔዎች የሉም" "የውሂብ ማጋራት ዝማኔዎች" diff --git a/PermissionController/res/values-ar-v34/strings.xml b/PermissionController/res/values-ar-v34/strings.xml index 249905ac4b..370c20f673 100644 --- a/PermissionController/res/values-ar-v34/strings.xml +++ b/PermissionController/res/values-ar-v34/strings.xml @@ -20,7 +20,6 @@ "الأمان والخصوصية" "عناصر التحكّم" "البيانات" - - + "Health Connect" "أذونات التطبيق وإدارة البيانات" diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml index d69e0bb967..07c27c7aa4 100644 --- a/PermissionController/res/values-ar/strings.xml +++ b/PermissionController/res/values-ar/strings.xml @@ -591,41 +591,33 @@ "عرض رسالة عندما يصل التطبيق إلى نص أو صور أو محتوى آخر تم نسخه." "عرض كلمات المرور" "عرض الأحرف لفترة وجيزة أثناء الكتابة" - "وضَّح هذا التطبيق أنّه قد يشارك بيانات الموقع الجغرافي مع جهات خارجية." - - + "وضَّح هذا التطبيق أنّه قد يشارك بيانات موقعك الجغرافي مع جهات خارجية." + "مشاركة البيانات والموقع الجغرافي" "من أين تأتي معلومات مشاركة البيانات؟" - - - "قد يشارك التطبيق بيانات الموقع الجغرافي لـ:" - - - "تختلف مشاركة البيانات" + "‏قدَّم المطوّر معلومات لـ ""%1$s"" عن كيفية مشاركة هذا التطبيق للبيانات. قد يتم تعديل هذه المعلومات بمرور الوقت." + "قد يشارك التطبيق بيانات الموقع الجغرافي من أجل:" + "%1$s" + "اختلاف مشاركة البيانات" "قد تختلف الممارسات المتعلقة بالبيانات حسب إصدار تطبيقك وآلية استخدامك له ومنطقتك وعمرك. ""مزيد من المعلومات عن مشاركة البيانات" "بيانات موقعك الجغرافي" - "يمكنك تغيير إمكانية وصول هذا التطبيق في ""إعدادات الخصوصية""." + "يمكنك تغيير أذونات هذا التطبيق في ""إعدادات الخصوصية""." "وظائف التطبيق" - - + "الإحصاءات" "مراسلات المطوّر" "الإعلان أو التسويق" "منع الاحتيال والأمان والامتثال" - - + "التخصيص" "إدارة الحساب" "أمان البيانات" "قد تتم مشاركة بيانات الموقع الجغرافي." - "وضَّح هذا التطبيق أنّه قد يشارك بيانات الموقع الجغرافي مع جهات خارجية." + "وضَّح هذا التطبيق أنّه قد يشارك بيانات موقعك الجغرافي مع جهات خارجية." "تعديلات مشاركة بيانات الموقع الجغرافي" "راجِع التطبيقات التي غيّرت الطريقة التي قد تشارك بها بيانات موقعك الجغرافي." "غيّرت هذه التطبيقات الطريقة التي قد تشارك بها بيانات موقعك الجغرافي. ربما لم تشارك هذه التطبيقات بياناتك من قبل، أو قد تشاركها الآن لأغراض إعلانية أو تسويقية." - - + "قدَّم مطوّرو هذه التطبيقات معلومات حول الممارسات المتعلقة بمشاركة البيانات مع متجر التطبيقات. ويمكن أن يعدّلوا تلك المعلومات بمرور الوقت.\n\nقد تختلف الممارسات المتعلقة بمشاركة البيانات بناءً على إصدار تطبيقك وآلية استخدامك له ومنطقتك وعمرك." "التعرّف على مشاركة البيانات" - - - - + "تتم الآن مشاركة بيانات موقعك الجغرافي مع جهات خارجية." + "تتم الآن مشاركة بيانات موقعك الجغرافي مع جهات خارجية بهدف الإعلان أو التسويق." "{count,plural, =0{تم التعديل خلال آخر 24 ساعة}=1{تم التعديل خلال آخر 24 ساعة}two{تم التعديل خلال آخر يومَين}few{تم التعديل خلال آخر # أيام}many{تم التعديل خلال آخر # يومًا}other{تم التعديل خلال آخر # يوم}}" "ما مِن تعديلات في الوقت الحالي." "تعديلات مشاركة البيانات" diff --git a/PermissionController/res/values-as-car/strings.xml b/PermissionController/res/values-as-car/strings.xml new file mode 100644 index 0000000000..1fb516b784 --- /dev/null +++ b/PermissionController/res/values-as-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "কোনো এপ্‌ কেইমাহমান ব্যৱহাৰ নকৰাকৈ থাকিলে:\n\n• আপোনাৰ ডেটা সুৰক্ষিত কৰিবলৈ অনুমতিসমূহ আঁতৰোৱা হয়\n• ঠাই খালী কৰিবলৈ অস্থায়ী ফাইলসমূহ আঁতৰোৱা হয়" + diff --git a/PermissionController/res/values-as-v34/strings.xml b/PermissionController/res/values-as-v34/strings.xml new file mode 100644 index 0000000000..d3ed506167 --- /dev/null +++ b/PermissionController/res/values-as-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "সুৰক্ষা আৰু গোপনীয়তা" + "নিয়ন্ত্ৰণ" + "ডেটা" + "Health Connect" + "এপৰ অনুমতি আৰু ডেটা পৰিচালনা" + diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml index 2767c700a0..76b4bec803 100644 --- a/PermissionController/res/values-as/strings.xml +++ b/PermissionController/res/values-as/strings.xml @@ -591,68 +591,36 @@ "এপে আপুনি প্ৰতিলিপি কৰা পাঠ, প্ৰতিচ্ছবি অথবা অন্য সমল এক্সেছ কৰিলে এটা বাৰ্তা দেখুৱাওক" "পাছৱৰ্ডবোৰ দেখুৱাওক" "আপুনি টাইপ কৰাৰ লগে লগে বৰ্ণসমূহ খন্তেকৰ বাবে দেখুৱাওক" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "এই এপ্‌টোৱে তৃতীয় পক্ষৰ সৈতে আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পাৰে বুলি জনাইছে" + "ডেটা শ্বেয়াৰ কৰা আৰু অৱস্থান" + "ডেটা শ্বেয়াৰ কৰাৰ তথ্যখিনি ক’ৰ পৰা আহে" + "এই এপ্‌টোৱে কেনেকৈ ডেটা শ্বেয়াৰ কৰে সেই বিষয়ে বিকাশকৰ্তাই ""%1$s""ক তথ্য দিছে। এইটোৱে এই তথ্যখিনি সময়ৰ লগে লগে আপডে’ট কৰিব পাৰে।" + "এপ্‌টোৱে ইয়াৰ বাবে অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পাৰে:" + "%1$s" + "ডেটা শ্বেয়াৰ কৰা কার্যটো ভিন্ন হয়" + "ডেটা শ্বেয়াৰ কৰা কাৰ্যটো আপোনাৰ এপৰ সংস্কৰণ, ব্যৱহাৰ, অঞ্চল আৰু বয়সৰ ওপৰত ভিত্তি কৰি ভিন্ন হ’ব পাৰে। ""ডেটা শ্বেয়াৰ কৰাৰ বিষয়ে অধিক" + "আপোনাৰ অৱস্থানৰ ডেটা" + "এই এপ্‌টোৰ এক্সেছ ""গোপনীয়তাৰ ছেটিঙ""ত সলনি কৰক" + "এপৰ কাৰ্যক্ষমতা" + "বিশ্লেষণাত্মক পৰিসংখ্যা" + "বিকাশকৰ্তাৰ যোগাযোগ" + "বিজ্ঞাপন অথবা মাৰ্কেটিং" + "প্ৰৱঞ্চনা ৰোধ, সুৰক্ষা আৰু আজ্ঞানুবৰ্তিতা" + "ব্যক্তিগতকৰণ" + "একাউণ্ট পৰিচালনা" + "ডেটা সুৰক্ষা" + "অৱস্থানৰ ডেটা শ্বেয়াৰ কৰা হ’ব পাৰে" + "এই এপ্‌টোৱে তৃতীয় পক্ষৰ সৈতে আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পাৰে বুলি জনাইছে" + "অৱস্থানৰ বাবে ডেটা শ্বেয়াৰ কৰাৰ আপডে’ট" + "আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পৰাৰ ধৰণসমূহ সলনি কৰা এপ্‌সমূহ পৰ্যালোচনা কৰক" + "এই এপ্‌সমূহে আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পৰাৰ ধৰণসমূহ সলনি কৰিছে। সেইবোৰে পূৰ্বে এয়া শ্বেয়াৰ নকৰিব পাৰে অথবা এতিয়া বিজ্ঞাপন অথবা মাৰ্কেটিঙৰ উদ্দেশ্যে শ্বেয়াৰ কৰিব পাৰে।" + "সেই এপ্‌সমূহৰ বিকাশকৰ্তাই তেওঁলোকৰ ডেটা শ্বেয়াৰ কৰা কাৰ্যৰ বিষয়ে তথ্য এপ্‌ ষ্ট’ৰক দিয়ে। তেওঁলোকে সময়ৰ লগে লগে ইয়াক আপডে’ট কৰিব পাৰে।\n\nডেটা শ্বেয়াৰ কৰা কাৰ্যটো আপোনাৰ এপৰ সংস্কৰণ, ব্যৱহাৰ, অঞ্চল আৰু বয়সৰ ওপৰত ভিত্তি কৰি ভিন্ন হ’ব পাৰে।" + "ডেটা শ্বেয়াৰ কৰাৰ বিষয়ে জানক" + "আপোনাৰ অৱস্থানৰ ডেটা এতিয়া তৃতীয় পক্ষৰ সৈতে শ্বেয়াৰ কৰা হয়" + "আপোনাৰ অৱস্থানৰ ডেটা এতিয়া বিজ্ঞাপন অথবা মাৰ্কেটিঙৰ বাবে তৃতীয় পক্ষৰ সৈতে শ্বেয়াৰ কৰা হয়" + "{count,plural, =0{কালিৰ ভিতৰত আপডে’ট কৰা হৈছে}=1{কালিৰ ভিতৰত আপডে’ট কৰা হৈছে}one{# দিনৰ ভিতৰত আপডে’ট কৰা হৈছে}other{# দিনৰ ভিতৰত আপডে’ট কৰা হৈছে}}" + "এই সময়ত কোনো আপডে’ট নাই" + "ডেটা শ্বেয়াৰ কৰা সম্পৰ্কীয় আপডে’ট" + "কিছুমান এপে আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পৰাৰ ধৰণসমূহ সলনি কৰিছে" + "ছেটিং" diff --git a/PermissionController/res/values-az-v34/strings.xml b/PermissionController/res/values-az-v34/strings.xml index 66ff6df15f..d38238bcd4 100644 --- a/PermissionController/res/values-az-v34/strings.xml +++ b/PermissionController/res/values-az-v34/strings.xml @@ -20,7 +20,6 @@ "Təhlükəsizlik və məxfilik" "Nizamlayıcılar" "Data" - - + "Health Connect" "Tətbiq icazələri və data idarəetməsi" diff --git a/PermissionController/res/values-az/strings.xml b/PermissionController/res/values-az/strings.xml index eafcbdd1c4..f3d33f8aec 100644 --- a/PermissionController/res/values-az/strings.xml +++ b/PermissionController/res/values-az/strings.xml @@ -592,26 +592,21 @@ "Parolları göstərin" "Yazarkən simvollar qısa müddət göstərilsin" "Bu tətbiq məkan datasını üçüncü tərəflərlə paylaşa biləcəyini bildirib" - - + "Data paylaşımı və məkan" "Data paylaşma məlumatı haradan əldə edilir" - - + "Developer bu tətbiqin datanı necə paylaşması haqqında məlumatı bura təqdim edib: ""%1$s"". Bu məlumat zaman keçdikcə yenilənə bilər." "Tətbiq məkan datasını bunun üçün paylaşa bilər:" - - + "%1$s" "Data paylaşma dəyişə bilər" "Data praktikaları tətbiq versiyası, istifadə, region və yaşınıza görə dəyişə bilər. ""Data paylaşma haqqında ətraflı" "Məkan datanız" "Bu tətbiqin girişini ""məxfilik ayarlarında"" dəyişin" "Tətbiq funksionallığı" - - + "Analitik" "Developer kommunikasiyaları" "Reklam və ya marketinq" "Dələduzluğun qarşısının alınması, güvənlik və uyğunluq" - - + "Fərdiləşdirmə" "Hesabın idarə edilməsi" "Data təhlükəsizliyi" "Məkan datası paylaşıla bilər" @@ -619,13 +614,10 @@ "Məkan üzrə data paylaşma yenilikləri" "Məkan datasını paylaşma üsulunu dəyişən tətbiqləri nəzərdən keçirin" "Bu tətbiqlər məkan datasını paylaşma üsulunu dəyişib. Ola bilsin ki, onu daha öncə paylaşmayıblar və ya indi reklam, yaxud marketinq məqsədləri üçün paylaşırlar." - - + "Bu tətbiqlərin developerləri data paylaşımı təcrübələri haqqında məlumatı tətbiq mağazasına təqdim edib. Bu məlumat zaman keçdikcə yenilənə bilər.\n\nData paylaşımı təcrübələri tətbiq versiyası, istifadə, region və yaşa görə dəyişə bilər." "Data paylaşması haqqında məlumat əldə edin" - - - - + "Məkan datası artıq üçüncü tərəflərlə paylaşılır" + "Məkan datası artıq reklam və ya marketinq üçün üçüncü tərəflərlə paylaşılır" "{count,plural, =0{Son gün ərzində yenilənib}=1{Son gün ərzində yenilənib}other{# gün ərzində yenilənib}}" "Hazırda yenilik yoxdur" "Data paylaşma yenilikləri" diff --git a/PermissionController/res/values-be-v34/strings.xml b/PermissionController/res/values-be-v34/strings.xml index bcbdf5fcd1..e2b9c2da19 100644 --- a/PermissionController/res/values-be-v34/strings.xml +++ b/PermissionController/res/values-be-v34/strings.xml @@ -20,7 +20,6 @@ "Бяспека і прыватнасць" "Налады" "Даныя" - - + "Здароўе і спорт" "Дазволы праграм і кіраванне данымі" diff --git a/PermissionController/res/values-be/strings.xml b/PermissionController/res/values-be/strings.xml index 3cb003d6a4..b124943bf5 100644 --- a/PermissionController/res/values-be/strings.xml +++ b/PermissionController/res/values-be/strings.xml @@ -592,26 +592,21 @@ "Паказваць паролі" "Падчас уводу сімвалаў на кароткі час паказваць іх" "Гэта праграма можа абагульваць даныя пра месцазнаходжанне з трэцімі бакамі" - - + "Абагульванне даных і даныя пра месцазнаходжанне" "Адкуль бярэцца інфармацыя пра абагульванне даных" - - + "Распрацоўшчык дадаў (сюды: ""%1$s"") інфармацыю пра тое, як гэта праграма абагульвае даныя. З цягам часу гэта інфармацыя можа быць зменена." "Праграма можа абагульваць геаданыя для наступнага:" - - + "%1$s" "Абагульванне даных залежыць ад розных умоў" "Практыкі збору і апрацоўкі даных залежаць ад версіі праграмы, яе выкарыстання, месца пражывання і ўзросту карыстальніка. ""Больш пра абагульванне даных" "Даныя пра ваша месцазнаходжанне" "Змяніць доступ праграмы можна ў ""наладах прыватнасці" "Функцыі праграмы" - - + "Аналітыка" "Сувязь з распрацоўшчыкам" "Рэклама і маркетынг" "Прадухіленне махлярства, бяспека і адпаведнасць патрабаванням" - - + "Персаналізацыя" "Кіраванне ўліковымі запісамі" "Бяспека даных" "Дазвол на абагульванне даных пра месцазнаходжанне" @@ -619,13 +614,10 @@ "Змяненні ў абагульванні даных пра месцазнаходжанне" "Праглядзець праграмы, для якіх быў зменены спосаб абагульвання даных пра месцазнаходжанне" "Для гэтых праграм спосаб абагульвання даных пра месцазнаходжанне змяніўся. Магчыма, яны раней увогуле не абагульвалі такія даныя альбо цяпер пачалі іх абагульваць у мэтах рэкламы ці маркетынгу." - - + "Распрацоўшчыкі гэтых праграм дадалі ў краму праграм інфармацыю пра спосабы абагульвання даных. З цягам часу гэта інфармацыя можа быць зменена.\n\nСпосабы абагульвання даных залежаць ад версіі праграмы, яе выкарыстання, месца пражывання і ўзросту карыстальніка." "Даведацца пра абагульванне даных" - - - - + "Цяпер даныя пра месцазнаходжанне абагульваюцца з трэцімі бакамі" + "Цяпер даныя пра месцазнаходжанне абагульваюцца з трэцімі бакамі ў мэтах рэкламы ці маркетынгу" "{count,plural, =0{Абнаўленні за апошні дзень}=1{Абнаўленні за апошні дзень}one{Абнаўленні за # дзень}few{Абнаўленні за # дні}many{Абнаўленні за # дзён}other{Абнаўленні за # дня}}" "Змяненняў пакуль няма" "Змяненні ў абагульванні даных" diff --git a/PermissionController/res/values-bg-v34/strings.xml b/PermissionController/res/values-bg-v34/strings.xml index 83534f4045..9499856b70 100644 --- a/PermissionController/res/values-bg-v34/strings.xml +++ b/PermissionController/res/values-bg-v34/strings.xml @@ -20,7 +20,6 @@ "Сигурност и поверителност" "Контроли" "Данни" - - + "Health Connect" "Разрешения за приложението и управление на данните" diff --git a/PermissionController/res/values-bg/strings.xml b/PermissionController/res/values-bg/strings.xml index fd5b44e54e..e72e3b4a58 100644 --- a/PermissionController/res/values-bg/strings.xml +++ b/PermissionController/res/values-bg/strings.xml @@ -592,26 +592,21 @@ "Показване на паролите" "Кратко показване на знаците, докато пишете" "Това приложение посочи, че може да споделя с трети страни данни за местоположението ви" - - + "Споделяне на данни и достъп до местоположението" "Източници на информацията за споделянето на данни" - - + "Програмистът предостави на ""%1$s"" информация за начина, по който това приложение споделя данни. Тя може да бъде актуализирана с течение на времето." "Прилож. може да споделя данни за местопол. с цел:" - - + "%1$s" "Споделянето на данни варира" "Практиките за поверителност може да варират в зависимост от версията на приложението, употребата от ваша страна, региона и възрастта ви. ""Още за споделянето на данни" "Данни за местоположението ви" "Променете достъпа на това приложение от ""настройките за поверителност" "функционалност на прилож.;" - - + "анализ;" "получаване на съобщения от програмиста;" "рекламиране или маркетинг;" "предотвратяване на измами, сигурност и спазване на изискванията;" - - + "персонализиране;" "управление на профила." "Безопасност на данните" "Възможно е да бъдат споделяни данни за местоположението" @@ -619,13 +614,10 @@ "Актуализации за споделянето на данни за местоположението" "Прегледайте приложенията, променили начина, по който могат да споделят данни за местоположението ви" "Тези приложения са променили начина, по който могат да споделят данни за местоположението ви. Може да не са ги споделяли преди или вече да го правят с рекламни или маркетингови цели." - - + "Програмистите на тези приложения са предоставили на магазин за приложения информация относно практиките си за споделяне на данни. Възможно е тя да бъде актуализирана с течение на времето.\n\nПрактиките за споделяне на данни може да варират в зависимост от версията на приложението, употребата от ваша страна, региона и възрастта ви." "Научете повече за споделянето на данни" - - - - + "Данните за местоположението ви вече се споделят с трети страни" + "Данните за местоположението ви вече се споделят с трети страни с рекламни или маркетингови цели" "{count,plural, =0{Актуализирано през последния ден}=1{Актуализирано през последния ден}other{Актуализирано през последните # дни}}" "Понастоящем няма актуализации" "Актуализации за споделянето на данни" diff --git a/PermissionController/res/values-bn-v34/strings.xml b/PermissionController/res/values-bn-v34/strings.xml index 6dd4e8680d..a0999dc9d6 100644 --- a/PermissionController/res/values-bn-v34/strings.xml +++ b/PermissionController/res/values-bn-v34/strings.xml @@ -20,7 +20,6 @@ "নিরাপত্তা এবং গোপনীয়তা" "নিয়ন্ত্রণ" "ডেটা" - - + "Health Connect" "অ্যাপের অনুমতি ও ডেটা ম্যানেজমেন্ট" diff --git a/PermissionController/res/values-bn/strings.xml b/PermissionController/res/values-bn/strings.xml index b83bdae222..44db3f2463 100644 --- a/PermissionController/res/values-bn/strings.xml +++ b/PermissionController/res/values-bn/strings.xml @@ -592,26 +592,21 @@ "পাসওয়ার্ড দেখুন" "টাইপ করার সময় অক্ষরগুলি কয়েক মুহূর্তের জন্য দেখুন" "এই অ্যাপ জানিয়েছে যে, এটি থার্ড পার্টির সাথে আপনার লোকেশন ডেটা শেয়ার করতে পারে" - - + "ডেটা শেয়ারিং ও লোকেশন" "ডেটা শেয়ারিং সম্পর্কিত তথ্য কোথা থেকে পাওয়া যায়" - - + "কীভাবে এই অ্যাপ ডেটা শেয়ার করে, তার ব্যাপারে ডেভেলপার ""%1$s""-কে তথ্য প্রদান করেছে। ভবিষ্যতে এই তথ্য ডেভেলপার আপডেট করতে পারে।" "অ্যাপটি এগুলির জন্য লোকেশন ডেটা শেয়ার করতে পারে:" - - + "%1$s" "ডেটা শেয়ারিংয়ের ক্ষেত্রে হওয়া পরিবর্তন" "অ্যাপের ভার্সন, ব্যবহার, অঞ্চল ও ব্যবহারকারীর বয়সের উপর ভিত্তি করে ডেটা ব্যবহার ও ম্যানেজ করার বিষয়টি পরিবর্তিত হতে পারে। ""ডেটা শেয়ারিংয়ের ব্যাপারে আরও জানুন" "আপনার লোকেশন ডেটা" "গোপনীয়তা সেটিংস"" বিকল্প থেকে এই অ্যাপের অ্যাক্সেস করার অনুমতি পরিবর্তন করুন" "অ্যাপের কার্যকারিতা" - - + "অ্যানালিটিক্স" "ডেভেলপারের কথোপকথন" "বিজ্ঞাপন বা মার্কেটিং" "প্রতারণা প্রতিরোধ, নিরাপত্তা ও শর্ত মেনে চলা" - - + "পছন্দমতো সাজিয়ে নেওয়া" "অ্যাকাউন্ট ম্যানেজমেন্ট" "ডেটা সুরক্ষা" "লোকেশন ডেটা শেয়ার করা হতে পারে" @@ -619,13 +614,10 @@ "লোকেশনের জন্য ডেটা শেয়ারিং সম্পর্কিত আপডেট" "যেসব অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে, সেগুলি পর্যালোচনা করুন" "এইসব অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে। এগুলি আগে হয়ত শেয়ার করেনি অথবা এখন বিজ্ঞাপন বা মার্কেটিং সংক্রান্ত উদ্দেশ্যে শেয়ার করতে পারে।" - - + "এইসব অ্যাপের ডেভেলপার অ্যাপ স্টোরকে ডেটা শেয়ারিং ম্যানেজ করার ব্যাপারে তথ্য প্রদান করেছে। ভবিষ্যতে ডেভেলপার এটি আপডেট করতে পারে।\n\nআপনার অ্যাপের ভার্সন, ব্যবহার, অঞ্চল ও ব্যবহারকারীর বয়সের উপর ভিত্তি করে ডেটা শেয়ারিং ম্যানেজ করার বিষয়টি পরিবর্তিত হতে পারে।" "ডেটা শেয়ারিংয়ের ব্যাপারে জানুন" - - - - + "আপনার লোকেশন ডেটা এখন থার্ড পার্টির সাথে শেয়ার করা হয়েছে" + "বিজ্ঞাপন বা মার্কেটিংয়ের জন্য আপনার লোকেশন ডেটা এখন থার্ড-পার্টির সাথে শেয়ার করা হয়েছে" "{count,plural, =0{গতকালের মধ্যে আপডেট করা হয়েছে}=1{গতকালের মধ্যে আপডেট করা হয়েছে}one{# দিনের মধ্যে আপডেট করা হয়েছে}other{# দিনের মধ্যে আপডেট করা হয়েছে}}" "এই মুহূর্তে কোনও আপডেট পাওয়া যায়নি" "ডেটা শেয়ারিং সংক্রান্ত আপডেট" diff --git a/PermissionController/res/values-bs-car/strings.xml b/PermissionController/res/values-bs-car/strings.xml index d228223410..f7f2ee7f09 100644 --- a/PermissionController/res/values-bs-car/strings.xml +++ b/PermissionController/res/values-bs-car/strings.xml @@ -17,5 +17,5 @@ - "Ako se aplikacija ne koristi nekoliko mjeseci:\n\n• Dopuštenja se uklanjaju radi zaštite vaših podataka\n• Privremene datoteke uklanjaju se radi oslobađanja prostora" + "Ako se aplikacija ne koristi nekoliko mjeseci:\n\n• odobrenja se uklanjaju radi zaštite vaših podataka\n• privremeni fajlovi se uklanjaju radi oslobađanja prostora" diff --git a/PermissionController/res/values-bs-v34/strings.xml b/PermissionController/res/values-bs-v34/strings.xml index 38499a5c3c..bca6ea7090 100644 --- a/PermissionController/res/values-bs-v34/strings.xml +++ b/PermissionController/res/values-bs-v34/strings.xml @@ -20,6 +20,6 @@ "Sigurnost i privatnost" "Kontrole" "Podaci" - "Health Connect" - "Dopuštenja aplikacije i upravljanje podacima" + "Health Connect" + "Odobrenja za aplikaciju i upravljanje podacima" diff --git a/PermissionController/res/values-bs/strings.xml b/PermissionController/res/values-bs/strings.xml index f876562cad..2711b1580f 100644 --- a/PermissionController/res/values-bs/strings.xml +++ b/PermissionController/res/values-bs/strings.xml @@ -591,36 +591,36 @@ "Vidite poruku kada aplikacije pristupe tekstu, slikama ili drugom sadržaju koji ste kopirali" "Prikaži lozinke" "Kratko prikazivanje znakova dok pišete" - "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Aplikacija je navela da može dijeliti podatke o lokaciji s trećim stranama" "Dijeljenje podataka i lokacija" - "Odakle potječe dijeljenje informacija" - "Razvojni programer je usluzi ""%1$s"" poslao informacije o načinu na koji aplikacija dijeli podatke. Te informacije s vremenom može ažurirati." - "Aplikacija može dijeliti podatke o lokaciji u ove svrhe:" + "Odakle dolaze informacije o dijeljenju podataka" + "Programer je usluzi ""%1$s"" naveo informacije o tome kako ova aplikacija dijeli podatke. Programer može povremeno ažurirati ove informacije." + "Aplikacija može dijeliti podatke o lokaciji za:" "%1$s" - "Dijeljenje podataka može se razlikovati" - "Postupanje s podacima može se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi. ""Više o dijeljenju podataka" + "Dijeljenje podataka se razlikuje" + "Prakse u vezi s podacima se mogu razlikovati ovisno o verziji aplikacije, korištenju, regiji i dobi. ""Više o dijeljenju podataka" "Vaši podaci o lokaciji" "Promijenite pristup aplikacije u ""postavkama privatnosti" - "funkcije aplikacije" + "funkcionalnost aplikacije" "Analitika" - "komunikacije s razvojnim programerom" + "obavještenja programera" "oglašavanje ili marketing" - "sprječavanje prijevara, sigurnost i usklađenost" - "Prilagodba" + "sprečavanje prevara, sigurnost i usklađenost" + "Personalizacija" "upravljanje računom" "Sigurnost podataka" - "Podaci o lokaciji mogu se dijeliti" - "Aplikacija je navela da vaše podatke o lokaciji može dijeliti s trećim stranama" + "Podaci o lokaciji se mogu dijeliti" + "Aplikacija je navela da može dijeliti podatke o lokaciji s trećim stranama" "Ažuriranja dijeljenja podataka za lokaciju" - "Pregledajte aplikacije koje su promijenile način na koji mogu dijeliti vaše podatke o lokaciji" - "Ove su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji. Ranije ih možda nisu dijelile ili ih sada mogu dijeliti u svrhe oglašavanja ili marketinga." - "Razvojni programeri tih aplikacija su trgovini aplikacija poslali podatke o praksama dijeljenja podataka. S vremenom ih mogu ažurirati.\n\nPrakse dijeljenja podataka mogu se razlikovati ovisno o verziji aplikacije, upotrebi, regiji i dobi." + "Pregledajte aplikacije koje su promijenile način na koji mogu dijeliti podatke o lokaciji" + "Ove aplikacije su promijenile način na koji mogu dijeliti podatke o lokaciji. Možda ih prije nisu dijelile ili ih sada mogu dijeliti u svrhe oglašavanja ili marketinga." + "Programeri ovih aplikacija su naveli informacije o svojim praksama dijeljenja podataka u trgovini aplikacija. Mogu ih povremeno ažurirati.\n\nPrakse dijeljenja podataka se mogu razlikovati ovisno o verziji aplikacije, korištenju, regiji i dobi." "Saznajte više o dijeljenju podataka" - "Podaci o lokaciji sada se dijele s trećim stranama" - "Podaci o lokaciji sada se dijele s trećim stranama radi oglašavanja ili marketinga" - "{count,plural, =0{Ažurirano tijekom posljednjeg dana}=1{Ažurirano tijekom posljednjeg dana}one{Ažurirano tijekom posljednjeg # dana}few{Ažurirano tijekom posljednja # dana}other{Ažurirano tijekom posljednjih # dana}}" - "Trenutačno nema promjena" + "Vaši podaci o lokaciji se sada dijele s trećim stranama" + "Vaši podaci o lokaciji se sada dijele s trećim stranama u svrhu oglašavanja ili marketinga" + "{count,plural, =0{Ažurirano tokom proteklog dana}=1{Ažurirano tokom proteklog dana}one{Ažurirano tokom # dana}few{Ažurirano tokom # dana}other{Ažurirano tokom # dana}}" + "Trenutno nema ažuriranja" "Ažuriranja dijeljenja podataka" - "Neke su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji" + "Neke aplikacije mogu promijeniti način na koji mogu dijeliti podatke o lokaciji" "Postavke" diff --git a/PermissionController/res/values-ca-v34/strings.xml b/PermissionController/res/values-ca-v34/strings.xml index ce31619dd0..1d0795c1fe 100644 --- a/PermissionController/res/values-ca-v34/strings.xml +++ b/PermissionController/res/values-ca-v34/strings.xml @@ -20,7 +20,6 @@ "Seguretat i privadesa" "Controls" "Dades" - - + "Salut connectada" "Permisos de l\'aplicació i gestió de dades" diff --git a/PermissionController/res/values-ca/strings.xml b/PermissionController/res/values-ca/strings.xml index b632e8f95e..e7a26db01d 100644 --- a/PermissionController/res/values-ca/strings.xml +++ b/PermissionController/res/values-ca/strings.xml @@ -592,26 +592,21 @@ "Mostra les contrasenyes" "Mostra els caràcters breument mentre escrius" "Aquesta aplicació ha indicat que és possible que comparteixi les teves dades d\'ubicació amb tercers" - - + "Compartició de dades i ubicació" "D\'on prové la informació de la compartició de dades" - - + "El desenvolupador ha proporcionat informació a ""%1$s"" sobre com comparteix dades aquesta aplicació. És possible que actualitzi aquesta informació al llarg del temps." "L\'aplicació pot compartir dades d\'ubicació per a:" - - + "%1$s" "La compartició de dades varia" "Les pràctiques relacionades amb les dades poden variar segons la versió de l\'aplicació, l\'ús que se\'n fa, la regió i l\'edat. ""Més informació sobre la compartició de dades" "Les teves dades d\'ubicació" "Canvia l\'accés d\'aquesta aplicació a la ""configuració de privadesa" "Funcionalitat de l\'aplicació" - - + "Analítiques" "Comunicacions del desenvolupador" "Publicitat o màrqueting" "Prevenció de fraus, seguretat i compliment" - - + "Personalització" "Gestió del compte" "Seguretat de les dades" "Pot ser que les dades d\'ubicació es comparteixin" @@ -619,13 +614,10 @@ "Actualitzacions en la compartició de dades per a la ubicació" "Revisa les aplicacions que han canviat la manera en què poden compartir les teves dades d\'ubicació" "Aquestes aplicacions han canviat la manera en què poden compartir les teves dades d\'ubicació. Pot ser que no les hagin compartit abans o que ara les comparteixin amb finalitats publicitàries o de màrqueting." - - + "Els desenvolupadors d\'aquestes aplicacions han proporcionat informació sobre les seves pràctiques de compartició de dades a una botiga d\'aplicacions. És possible que actualitzin la informació al llarg del temps.\n\nLes pràctiques de compartició de dades poden variar segons la versió de l\'aplicació, l\'ús, la regió i l\'edat." "Informació sobre la compartició de dades" - - - - + "Les teves dades d\'ubicació ara es comparteixen amb tercers" + "Les teves dades d\'ubicació ara es comparteixen amb tercers per a finalitats publicitàries o de màrqueting" "{count,plural, =0{S\'ha actualitzat durant el darrer dia}=1{S\'ha actualitzat durant el darrer dia}many{S\'ha actualitzat durant els # darrers dies}other{S\'ha actualitzat durant els # darrers dies}}" "En aquest moment no hi ha cap actualització" "Actualitzacions de compartició de dades" diff --git a/PermissionController/res/values-cs-car/strings.xml b/PermissionController/res/values-cs-car/strings.xml new file mode 100644 index 0000000000..4e0e196115 --- /dev/null +++ b/PermissionController/res/values-cs-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Když aplikaci několik měsíců nepoužíváte:\n\n• Oprávnění jsou odstraněna kvůli ochraně dat\n• Dočasné soubory jsou odstraněny kvůli uvolnění místa" + diff --git a/PermissionController/res/values-cs-v34/strings.xml b/PermissionController/res/values-cs-v34/strings.xml new file mode 100644 index 0000000000..ef481a6802 --- /dev/null +++ b/PermissionController/res/values-cs-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Zabezpečení a ochrana soukromí" + "Ovládací prvky" + "Data" + "Health Connect" + "Oprávnění aplikace a správa dat" + diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index 2b645f5157..dd74f9beb8 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -591,68 +591,36 @@ "Zobrazovat zprávu, když aplikace použijí text, obrázky nebo jiný obsah, který jste zkopírovali" "Zobrazovat hesla" "Při psaní se budou krátce zobrazovat zadané znaky" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Tato aplikace uvedla, že může sdílet údaje o vaší poloze se třetími stranami" + "Sdílení dat a poloha" + "Odkud informace o sdílení dat pocházejí" + "Vývojář poskytl obchodu ""%1$s"" informace o tom, jak tato aplikace sdílí data. Tyto informace může průběžně aktualizovat." + "Možné účely sdílení údajů o poloze aplikací:" + "%1$s" + "Sdílení dat se liší" + "Způsob nakládání s daty se může lišit podle verze aplikace, způsobu používání, oblasti a věku. ""Další informace o sdílení dat" + "Údaje o vaší poloze" + "Přístup této aplikace můžete změnit v ""nastavení ochrany soukromí" + "Funkce aplikace" + "Analýzy" + "Komunikace vývojáře" + "Reklama nebo marketing" + "Prevence podvodů, zabezpečení a dodržování předpisů" + "Přizpůsobení" + "Správa účtu" + "Zabezpečení údajů" + "Mohou být sdíleny údaje o poloze" + "Tato aplikace uvedla, že může sdílet údaje o vaší poloze se třetími stranami" + "Aktualizace sdílení údajů o poloze" + "Zkontrolujte aplikace, které změnily způsob, jakým mohou sdílet údaje o vaší poloze" + "Tyto aplikace změnily způsob, jakým mohou sdílet údaje o vaší poloze. Buď je dříve nesdílely, nebo je nyní mohou sdílet pro reklamní nebo marketingové účely." + "Vývojáři těchto aplikací poskytli obchodu s aplikacemi informace o svých postupech sdílení dat. Tyto informace mohou průběžně aktualizovat.\n\nPostupy sdílení dat se mohou lišit v závislosti na verzi aplikace, použití, oblasti a věku uživatele." + "Informace o sdílení dat" + "Údaje o vaší poloze jsou nyní sdíleny se třetími stranami" + "Údaje o vaší poloze jsou nyní sdíleny se třetími stranami pro inzertní a marketingové účely" + "{count,plural, =0{Aktualizováno během posledního dne}=1{Aktualizováno během posledního dne}few{Aktualizováno během posledních # dnů}many{Aktualizováno během posledních # dne}other{Aktualizováno během posledních # dnů}}" + "Aktuálně nejsou hlášeny žádné změny" + "Aktualizace sdílení dat" + "Některé aplikace změnily způsob, kterým mohou sdílet údaje o vaší poloze" + "Nastavení" diff --git a/PermissionController/res/values-da-v34/strings.xml b/PermissionController/res/values-da-v34/strings.xml index d14766954f..7507a8bb12 100644 --- a/PermissionController/res/values-da-v34/strings.xml +++ b/PermissionController/res/values-da-v34/strings.xml @@ -20,7 +20,6 @@ "Sikkerhed og privatliv" "Styringselementer" "Data" - - + "Health Connect" "Apptilladelser og administration af data" diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml index 17b0aaaccf..c38a3e7ef4 100644 --- a/PermissionController/res/values-da/strings.xml +++ b/PermissionController/res/values-da/strings.xml @@ -592,26 +592,21 @@ "Vis adgangskoder" "Vis kort tegnene, mens du skriver" "Denne app har angivet, at den muligvis deler dine lokationsdata med tredjeparter" - - + "Datadeling og lokation" "Hvor oplysninger om datadeling stammer fra" - - + "Udvikleren gav oplysninger til ""%1$s"" om, hvordan denne app deler data. Udvikleren kan opdatere disse oplysninger senere." "Denne app deler muligvis lokationsdata for:" - - + "%1$s" "Datadeling varierer" "Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder. ""Flere oplysninger om datadeling" "Dine lokationsdata" "Skift denne apps adgang i ""privatlivsindstillingerne" "Appfunktionalitet" - - + "Analysedata" "Kommunikation fra udvikleren" "Annoncering eller marketing" "Sikkerhed, overholdelse og forebyggelse af svindel" - - + "Tilpasning" "Kontoadministration" "Datasikkerhed" "Lokationsdata deles muligvis" @@ -619,13 +614,10 @@ "Opdateringer om deling af lokationsdata" "Gennemse apps, der har ændret måden, hvorpå de kan dele dine lokationsdata" "Disse apps har ændret den måde, hvorpå de kan dele dine lokationsdata. De har muligvis ikke delt dataene før eller kan nu anvende dem til annoncering eller marketing." - - + "Udviklerne af disse apps har givet oplysninger om deres procedurer for datadeling til en appbutik. De kan opdatere procedurerne med tiden.\n\nProcedurer for datadeling kan variere afhængigt af din appversion, din brug, dit område og din alder." "Få flere oplysninger om deling af data" - - - - + "Dine lokationsdata deles nu med tredjeparter" + "Dine lokationsdata deles nu med tredjeparter med henblik på annoncering eller marketing" "{count,plural, =0{Opdateret inden for den seneste dag}=1{Opdateret inden for den seneste dag}one{Opdateret for maks. # dag siden}other{Opdateret inden for de seneste # dage}}" "Der er på nuværende tidspunkt ikke nogen opdateringer" "Opdateringer om datadeling" diff --git a/PermissionController/res/values-de-car/strings.xml b/PermissionController/res/values-de-car/strings.xml index 6f93442cff..c1f9ba7e2b 100644 --- a/PermissionController/res/values-de-car/strings.xml +++ b/PermissionController/res/values-de-car/strings.xml @@ -17,5 +17,5 @@ - "Wenn du eine App mehrere Monate nicht verwendest, geschieht Folgendes:\n\n• Zum Schutz deiner Daten werden die Berechtigungen entfernt\n• Temporäre Dateien werden gelöscht, um Speicherplatz freizugeben" + "Wenn du eine App mehrere Monate nicht verwendest, geschieht Folgendes:\n\n• Die Berechtigungen der App werden entfernt, um deine Daten zu schützen\n• Temporäre Dateien werden gelöscht, um Speicherplatz freizugeben" diff --git a/PermissionController/res/values-de-v34/strings.xml b/PermissionController/res/values-de-v34/strings.xml index a379754654..7bbf774cb1 100644 --- a/PermissionController/res/values-de-v34/strings.xml +++ b/PermissionController/res/values-de-v34/strings.xml @@ -20,7 +20,6 @@ "Sicherheit & Datenschutz" "Einstellungen" "Daten" - - + "Health Connect" "App-Berechtigungen und Datenmanagement" diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml index 3ff9d0ee4d..ebeeb13b3a 100644 --- a/PermissionController/res/values-de/strings.xml +++ b/PermissionController/res/values-de/strings.xml @@ -591,44 +591,36 @@ "Eine Meldung wird angezeigt, wenn Apps auf Text, Bilder oder andere Inhalte zugreifen, die du kopiert hast" "Passwörter anzeigen" "Zeichen während der Eingabe kurz anzeigen" - "In dieser App wurde angegeben, dass sie eventuell deine Standortdaten an Dritte weitergibt" - - + "Die App hat angegeben, dass sie deine Standortdaten an Dritte weitergeben kann" + "Datenweitergabe und Standort" "Ursprung der Informationen zur Datenweitergabe" - - - "Die Weitergabe von Standortdaten ist erlaubt für:" - - + "Der Entwickler hat ""%1$s"" Informationen darüber zur Verfügung gestellt, wie Daten über diese App weitergegeben werden. Diese Informationen können im Laufe der Zeit geändert werden." + "Die App kann Standortdaten weitergeben für:" + "%1$s" "Datenweitergabe variiert" - "Die Datenweitergabe kann je nach App-Version, Verwendung, Region und Alter des Nutzers variieren. ""Weitere Informationen zur Datenweitergabe" + "Die konkrete Datenweitergabepraxis kann von der Version und Verwendung der App, von der Region und vom Alter des Nutzers abhängen. ""Weitere Informationen zur Datenweitergabe" "Deine Standortdaten" "Du kannst den Zugriff dieser App in den ""Datenschutzeinstellungen"" ändern" "Funktionen der App" - - + "Analytics" "Mitteilungen des Entwicklers" "Werbung oder Marketing" "Betrugsprävention, Sicherheit und Compliance" - - + "Personalisierung" "Kontoverwaltung" "Datensicherheit" - "Standortdaten werden eventuell weitergegeben" - "In dieser App wurde angegeben, dass sie eventuell deine Standortdaten an Dritte weitergibt" - "Aktualisierung der Weitergabe von Standortdaten" - "Apps ansehen, in denen die Art der Weitergabe deiner Standortdaten geändert wurde" - "Bei diesen Apps hat sich die Art der Weitergabe deiner Standortdaten geändert. Möglicherweise wurden sie zuvor nicht weitergegeben oder werden jetzt zu Werbe- oder Marketingzwecken weitergegeben." - - + "Die App kann Standortdaten weitergeben" + "Die App hat angegeben, dass sie deine Standortdaten an Dritte weitergeben kann" + "Änderungen bei der Datenweitergabepraxis für Standortdaten" + "Apps ansehen, bei denen es Änderungen bei der Datenweitergabepraxis für Standortdaten gab" + "Bei diesen Apps gab es Änderungen bei der Datenweitergabepraxis für Standortdaten. Möglicherweise wurden diese Daten zuvor nicht weitergegeben oder sie werden jetzt zu Werbe- oder Marketingzwecken weitergegeben." + "Die Entwickler dieser Apps haben Informationen über ihre Praktiken zur Datenweitergabe an App-Shops zur Verfügung gestellt. Diese Praktiken können im Laufe der Zeit geändert werden.\n\nPraktiken zur Datenweitergabe können je nach App-Version, Verwendung, Region und Alter des Nutzers variieren." "Informationen zur Datenweitergabe" - - - - - "{count,plural, =0{Gestern aktualisiert}=1{Gestern aktualisiert}other{Innerhalb von # Tagen aktualisiert}}" + "Deine Standortdaten werden ab jetzt an Dritte weitergegeben" + "Deine Standortdaten werden ab jetzt zu Werbe- oder Marketingzwecken an Dritte weitergegeben" + "{count,plural, =0{Innerhalb der letzten 24 Stunden geändert}=1{Innerhalb der letzten 24 Stunden geändert}other{Innerhalb von # Tagen geändert}}" "Aktuell keine Änderungen" - "Aktualisierungen zur Datenweitergabe" - "Bei manchen Apps hat sich die Art der Weitergabe deiner Standortdaten geändert" + "Änderungen bei der Datenweitergabepraxis" + "Bei einigen Apps gab es Änderungen bei der Datenweitergabepraxis für deine Standortdaten" "Einstellungen" diff --git a/PermissionController/res/values-el-car/strings.xml b/PermissionController/res/values-el-car/strings.xml new file mode 100644 index 0000000000..605dfdf647 --- /dev/null +++ b/PermissionController/res/values-el-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Εάν μια εφαρμογή δεν χρησιμοποιηθεί για μερικούς μήνες:\n\n• Οι άδειες καταργούνται για την προστασία των δεδομένων σας\n• Τα προσωρινά αρχεία καταργούνται για την απελευθέρωση χώρου" + diff --git a/PermissionController/res/values-el-v34/strings.xml b/PermissionController/res/values-el-v34/strings.xml new file mode 100644 index 0000000000..11fa472169 --- /dev/null +++ b/PermissionController/res/values-el-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Ασφάλεια και απόρρητο" + "Στοιχεία ελέγχου" + "Δεδομένα" + "Health Connect" + "Άδειες εφαρμογής και διαχείριση δεδομένων" + diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml index 23ce648605..dd8dbf5d2b 100644 --- a/PermissionController/res/values-el/strings.xml +++ b/PermissionController/res/values-el/strings.xml @@ -591,68 +591,36 @@ "Να εμφανίζεται ένα μήνυμα όταν οι εφαρμογές αποκτούν πρόσβαση σε κείμενο, εικόνες ή άλλο περιεχόμενο που έχετε αντιγράψει" "Εμφάνιση κωδικών πρόσβασης" "Σύντομη εμφάνιση χαρακτήρων κατά την πληκτρολόγηση" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Αυτή η εφαρμογή έχει δηλώσει ότι ενδέχεται να κοινοποιήσει τα δεδομένα τοποθεσίας σας σε τρίτα μέρη" + "Κοινοποίηση δεδομένων και τοποθεσία" + "Προέλευση πληροφοριών κοινοποίησης δεδομένων" + "Ο προγραμματιστής έχει καταχωρίσει πληροφορίες στο ""%1$s"" σχετικά με το πώς αυτή η εφαρμογή κοινοποιεί δεδομένα. Αυτές οι πληροφορίες ενδέχεται να ενημερωθούν με την πάροδο του χρόνου." + "Η εφαρμ. μπορεί να κοινοποιεί δεδομ. τοποθεσ. για:" + "%1$s" + "Η κοινοποίηση δεδομένων διαφέρει" + "Οι πρακτικές απορρήτου μπορεί να διαφέρουν ανάλογα με την έκδοση και τη χρήση της εφαρμογής, καθώς και με την περιοχή και την ηλικία σας. ""Περισσότερα σχετικά με την κοινοποίηση δεδομένων" + "Τα δεδομένα τοποθεσίας σας" + "Αλλάξτε την πρόσβαση αυτής της εφαρμογής στις ""ρυθμίσεις απορρήτου" + "Λειτουργικότητα εφαρμογής" + "Αναλυτικά στοιχεία" + "Επικοινωνία προγραμματιστών" + "Διαφημίσεις ή μάρκετινγκ" + "Πρόληψη απάτης, ασφάλεια και συμμόρφωση" + "Εξατομίκευση" + "Διαχείριση λογαριασμού" + "Ασφάλεια δεδομένων" + "Τα δεδομένα τοποθεσίας ενδέχεται να κοινοποιούνται" + "Αυτή η εφαρμογή έχει δηλώσει ότι ενδέχεται να κοινοποιήσει τα δεδομένα τοποθεσίας σας σε τρίτα μέρη" + "Ενημερώσεις στην κοινοποίηση δεδομένων για την τοποθεσία" + "Ελέγξτε εφαρμογές που άλλαξαν τον τρόπο με τον οποίο ενδέχεται να κοινοποιούν τα δεδομένα τοποθεσίας" + "Αυτές οι εφαρμογές έχουν αλλάξει τον τρόπο με τον οποίο μπορούν να κοινοποιούν τα δεδομένα τοποθεσία σας. Ενδέχεται να μην τα έχουν κοινοποιήσει στο παρελθόν ή να τα κοινοποιούν τώρα για σκοπούς διαφήμισης ή μάρκετινγκ." + "Οι προγραμματιστές αυτών των εφαρμογών έχουν καταχωρίσει πληροφορίες σχετικά με τις πρακτικές κοινοποίησης δεδομένων σε ένα app store. Ενδέχεται να τις ενημερώσουν με την πάροδο του χρόνου.\n\nΟι πρακτικές κοινοποίησης δεδομένων ενδέχεται να διαφέρουν ανάλογα με την έκδοση και τη χρήση της εφαρμογής, καθώς και με την περιοχή και την ηλικία σας." + "Μάθετε σχετικά με την κοινοποίηση δεδομένων" + "Τα δεδομένα τοποθεσίας σας κοινοποιούνται πλέον σε τρίτα μέρη" + "Τα δεδομένα τοποθεσίας σας κοινοποιούνται πλέον σε τρίτα μέρη για σκοπούς διαφήμισης ή μάρκετινγκ" + "{count,plural, =0{Ενημερώθηκε εντός της τελευταίας ημέρας}=1{Ενημερώθηκε εντός της τελευταίας ημέρας}other{Ενημερώθηκε εντός # ημερών}}" + "Δεν υπάρχουν ενημερώσεις προς το παρόν" + "Ενημερώσεις κοινοποίησης δεδομένων" + "Ορισμένες εφαρμογές άλλαξαν τον τρόπο με τον οποίο ενδέχεται να κοινοποιούν τα δεδομένα τοποθεσίας σας" + "Ρυθμίσεις" diff --git a/PermissionController/res/values-es-rUS-car/strings.xml b/PermissionController/res/values-es-rUS-car/strings.xml new file mode 100644 index 0000000000..8fc6d79e55 --- /dev/null +++ b/PermissionController/res/values-es-rUS-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Si no usas una app durante algunos meses, ocurre lo siguiente:\n\n• Se quitan los permisos para proteger tus datos.\n• Se quitan los archivos temporales para liberar espacio." + diff --git a/PermissionController/res/values-es-rUS-v34/strings.xml b/PermissionController/res/values-es-rUS-v34/strings.xml new file mode 100644 index 0000000000..46da50761b --- /dev/null +++ b/PermissionController/res/values-es-rUS-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Seguridad y privacidad" + "Controles" + "Datos" + "Health Connect" + "Permisos de la app y administración de datos" + diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index 52e2f212c8..efc41ded7b 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -591,68 +591,36 @@ "Mostrar un mensaje cuando las apps accedan a textos, imágenes y otro contenido que hayas copiado" "Mostrar contraseñas" "Mostrar caracteres brevemente mientras escribes" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Esta app indicó que podría compartir tus datos de ubicación con terceros" + "Uso compartido de datos y ubicación" + "De dónde proviene la información de uso compartido de datos" + "El desarrollador brindó información a ""%1$s"" sobre el modo en que esta app comparte datos. Podría actualizarla con el tiempo." + "La app puede compartir datos de ubicación para:" + "%1$s" + "El uso compartido de datos varía" + "Las prácticas de datos pueden variar en función de la versión de la app, el uso, la región y la edad. ""Más información sobre el uso compartido de datos" + "Tus datos de ubicación" + "Puedes cambiar el acceso de esta app en la ""configuración de privacidad" + "Funciones de la app" + "Analytics" + "Comunicaciones del desarrollador" + "Publicidad o marketing" + "Seguridad, cumplimiento y prevención de fraudes" + "Personalización" + "Administración de la cuenta" + "Seguridad de los datos" + "Es posible que se compartan los datos de ubicación" + "Esta app indicó que podría compartir tus datos de ubicación con terceros" + "Actualizaciones del uso compartido de los datos de ubicación" + "Revisa las apps que cambiaron la forma en que comparten tus datos de ubicación" + "Estas apps cambiaron la forma en que podrían compartir tus datos de ubicación. Es posible que no los hayan compartido antes o que ahora los compartan con fines publicitarios o de marketing." + "Los desarrolladores de estas apps brindaron información sobre sus prácticas de uso compartido de datos a una tienda de aplicaciones. Podrían actualizarla con el tiempo.\n\nLas prácticas de uso compartido de datos pueden variar según la versión de la app, el uso, la región y la edad." + "Más información sobre el uso compartido de datos" + "Tus datos de ubicación ahora se comparten con terceros" + "Tus datos de ubicación ahora se comparten con terceros para publicidad o marketing" + "{count,plural, =0{Se actualizó en el último día}=1{Se actualizó en el último día}many{Se actualizó hace # de días}other{Se actualizó hace # días}}" + "No hay novedades por el momento" + "Actualizaciones del uso compartido de datos" + "Algunas apps cambiaron la forma en que podrían compartir tus datos de ubicación" + "Configuración" diff --git a/PermissionController/res/values-es-v34/strings.xml b/PermissionController/res/values-es-v34/strings.xml index 58e5bad86f..4a92d6ca67 100644 --- a/PermissionController/res/values-es-v34/strings.xml +++ b/PermissionController/res/values-es-v34/strings.xml @@ -20,7 +20,6 @@ "Seguridad y privacidad" "Controles" "Datos" - - + "Salud conectada" "Permisos de aplicaciones y gestión de datos" diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index c674ce4677..a856368235 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -592,43 +592,35 @@ "Mostrar contraseñas" "Muestra los caracteres brevemente mientras escribes" "Esta aplicación ha indicado que es posible que comparta tus datos de ubicación con terceros" - - - "De dónde procede la información de compartición de datos" - - + "Datos compartidos y ubicación" + "De dónde procede la información sobre cómo se comparten los datos" + "El desarrollador ha proporcionado información a ""%1$s"" sobre cómo comparte datos esta aplicación. Es posible que actualice esta información con el tiempo." "La app puede compartir datos de ubicación para:" - - - "La compartición de datos varía" - "Las prácticas relacionadas con datos varían en función de la versión de la aplicación, el modo en que la utilices, la región donde la uses y tu edad. ""Más información sobre la compartición de datos" + "%1$s" + "La forma de compartir datos varía" + "Las prácticas relacionadas con datos pueden variar según la versión de la aplicación, el modo en que la utilices, la región donde la uses y tu edad. ""Más información sobre cómo se comparten los datos" "Tus datos de ubicación" "Cambia el acceso de esta aplicación en la ""configuración de privacidad" "Funcionalidad de la aplicación" - - + "Analítica" "Comunicaciones del desarrollador" "Publicidad o marketing" "Prevención de fraudes, seguridad y cumplimiento" - - + "Personalización" "Gestión de cuentas" "Seguridad de los datos" "Tus datos de ubicación pueden compartirse" "Esta aplicación ha indicado que es posible que comparta tus datos de ubicación con terceros" - "Cambios en la compartición de datos de ubicación" + "Cambios sobre cómo se comparten los datos de ubicación" "Consulta las aplicaciones que han cambiado la forma en la que pueden compartir tus datos de ubicación" "Estas aplicaciones han cambiado la forma en la que pueden compartir tus datos de ubicación. Puede que no los hayan compartido antes, o que ahora lo hagan con fines publicitarios o de marketing." - - - "Más información sobre la compartición de datos" - - - - + "Los desarrolladores de estas aplicaciones han proporcionado información a una tienda de aplicaciones sobre sus formas de compartir datos. Es posible que la actualicen con el tiempo.\n\nLas formas en que se comparten los datos pueden variar en función de la versión de la aplicación, el modo en que la utilices, el país donde la uses y tu edad." + "Más información sobre cómo se comparten los datos" + "Tus datos de ubicación ahora se comparten con terceros" + "Tus datos de ubicación ahora se comparten con terceros para fines de publicidad o marketing" "{count,plural, =0{Se ha actualizado en el último día}=1{Se ha actualizado en el último día}many{Se ha actualizado en los últimos # días}other{Se ha actualizado en los últimos # días}}" "No hay novedades por el momento" - "Actualizaciones de compartición de datos" + "Actualizaciones sobre cómo se comparten los datos" "Algunas aplicaciones han cambiado la forma en la que pueden compartir tus datos de ubicación" "Ajustes" diff --git a/PermissionController/res/values-et-v34/strings.xml b/PermissionController/res/values-et-v34/strings.xml index 6998773dd5..bf1d209912 100644 --- a/PermissionController/res/values-et-v34/strings.xml +++ b/PermissionController/res/values-et-v34/strings.xml @@ -20,7 +20,6 @@ "Turvalisus ja privaatsus" "Juhtelemendid" "Andmed" - - + "Health Connect" "Rakenduse load ja andmehaldus" diff --git a/PermissionController/res/values-et/strings.xml b/PermissionController/res/values-et/strings.xml index 311c787b32..057d33b18d 100644 --- a/PermissionController/res/values-et/strings.xml +++ b/PermissionController/res/values-et/strings.xml @@ -592,26 +592,21 @@ "Kuva paroolid" "Sisestamisel kuvatakse hetkeks tähemärgid" "See rakendus andis teada, et võib jagada teie asukohaandmeid kolmandate osapooltega." - - + "Andmete jagamine ja asukoht" "Andmete jagamise teabe päritolu" - - + "Arendaja on esitanud rakenduste poele ""%1$s"" teavet selle kohta, kuidas see rakendus andmeid jagab. Ta võib seda teavet aja jooksul muuta." "Rakendus võib asukohaandmeid jagada järgmiseks." - - + "%1$s" "Andmete jagamine võib olla erinev" "Andmetöötlustavad võivad oleneda teie piirkonnast ja vanusest ning rakenduse versioonist ja kasutusest. ""Lisateave andmete jagamise kohta" "Teie asukohaandmed" "Selle rakenduse juurdepääsu saate muuta ""privaatsusseadetes" "Rakenduse funktsioonid" - - + "Analüüs" "Teave arendajalt" "Reklaamimine või turundus" "Pettuste vältimine, turvalisus ja eeskirjade järgimine" - - + "Isikupärastamine" "Kontohaldus" "Andmete ohutus" "Asukohaandmeid võidakse jagada" @@ -619,13 +614,10 @@ "Andmete jagamise värskendused asukoha kohta" "Vaadake üle rakendused, mis on muutnud teie asukohaandmete jagamise viisi" "Need rakendused on muutnud teie asukohaandmete jagamise viisi. Võib-olla ei jaganud nad neid varem või hakkasid neid nüüd jagama reklaami- või turunduseesmärgil." - - + "Nende rakenduste arendajad on esitanud rakenduste poele teavet oma andmejagamistavade kohta. Nad võivad neid aja jooksul muuta.\n\nAndmejagamistavad võivad oleneda teie piirkonnast ja vanusest ning rakenduse versioonist ja kasutusest." "Teave andmete jagamise kohta" - - - - + "Teie asukohaandmeid jagatakse nüüd kolmandate osapooltega" + "Teie asukohaandmeid jagatakse nüüd kolmandate osapooltega reklaami- või turunduseesmärgil" "{count,plural, =0{Värskendatud viimase päeva jooksul}=1{Värskendatud viimase päeva jooksul}other{Värskendatud # päeva jooksul}}" "Hetkel värskendused puuduvad" "Andmete jagamise värskendused" diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index 2b4076aacd..14adc68538 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -592,12 +592,10 @@ "Erakutsi pasahitzak" "Idatzi ahala, erakutsi karaktereak laburki" "Agian hirugarrenekin kokapen-datuak partekatuko dituela adierazi du aplikazioaren garatzaileak" - - + "Datuak partekatzeko moduak eta kokapena" "Nondik dator datuak partekatzeko moduei buruzko informazioa?" - - - "Baliteke aplikazioak hauetarako partekatzea kokapen-datuak:" + "Aplikazioak datuak partekatzeko dituen moduei buruzko informazioa eman du ""%1$s"" dendan garatzaileak. Baliteke denboran zehar informazio hori eguneratzea." + "Baliteke hauetarako partekatzea kokapen-datuak:" "Datuak partekatzeko moduak hauen araberakoak dira:" @@ -605,13 +603,11 @@ "Kokapen-datuak" "Aldatu aplikazioaren sarbidea ""pribatutasun-ezarpenetan" "aplikazioaren funtzioak" - - + "estatistikak" "garatzaileen komunikazioak" "publizitatea edo marketina" - "iruzur-saihestea, segurtasuna eta arau-gordetzea" - - + "iruzurra saihestea, segurtasuna eta arau-gordetzea" + "pertsonalizazioa" "kontuaren kudeaketa" "Datuen babesa" "Baliteke kokapen-datuak partekatzea" @@ -619,14 +615,11 @@ "Kokapen-datuak partekatzeko jardunbideen inguruko berritasunak" "Berrikusi kokapen-datuak partekatzeko modua aldatu duten aplikazioak" "Kokapen-datuak partekatzeko modua aldatu dute aplikazio hauek. Agian ez zuten daturik partekatzen lehen, edo baliteke orain publizitate- edo marketin-helburuetarako partekatzea." - - - "Lortu datuak partekatzeko jardunbideei buruzko informazio gehiago" - - - - - "{count,plural, =0{Atzo jaso ziren berritasunak}=1{Atzo jaso ziren berritasunak}other{Azken # egunetan eguneratuta}}" + "Datuak partekatzeko jardunbideei buruzko informazioa eman dute aplikazio-denda batean aplikazio hauen garatzaileek. Baliteke denboran zehar informazio hori eguneratzea.\n\nLitekeena da datuak partekatzeko jardunbideak aplikazioaren bertsioaren, erabileraren, lurraldearen eta adinaren araberakoak izatea." + "Datuak partekatzeko jardunbideei buruzko informazio gehiago" + "Orain, kokapen-datuak hirugarrenekin partekatzen dira" + "Orain, kokapen-datuak hirugarrenekin partekatzen dira publizitate- edo marketin-helburuetarako" + "{count,plural, =0{Atzo jaso ziren berritasunak}=1{Atzo jaso ziren berritasunak}other{Azken # egunetan jaso ziren berritasunak}}" "Une honetan, ez dago berritasunik" "Datuak partekatzeko moduen inguruko berritasunak" "Kokapen-datuak partekatzeko modua aldatu dute aplikazio batzuek" diff --git a/PermissionController/res/values-fa-v34/strings.xml b/PermissionController/res/values-fa-v34/strings.xml index efc196b468..9187da7fc3 100644 --- a/PermissionController/res/values-fa-v34/strings.xml +++ b/PermissionController/res/values-fa-v34/strings.xml @@ -20,7 +20,6 @@ "امنیت و حریم خصوصی" "کنترل‌ها" "داده‌ها" - - + "Health Connect" "اجازه‌های برنامه و مدیریت داده" diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index 60637c97d0..2866b697c9 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -592,26 +592,21 @@ "نمایش گذرواژه‌ها" "همان‌طور که تایپ می‌کنید، نویسه‌ها را برای مدت کوتاهی نشان می‌دهد" "این برنامه اعلام کرده است که ممکن است داده‌های مکانتان را با اشخاص ثالث هم‌رسانی کند" - - + "هم‌رسانی داده‌ها و مکان" "اطلاعات هم‌رسانی داده از کجا می‌آید" - - + "‏توسعه‌دهنده در ""%1$s"" اطلاعاتی درباره نحوه هم‌رسانی داده‌ها توسط این برنامه ارائه کرده است. ممکن است توسعه‌دهنده این اطلاعات را در گذر زمان به‌روز کند." "برنامه شاید داده‌های مکان را به این دلایل هم‌رسانی کند:" - - + "%1$s" "روش‌های هم‌رسانی داده متفاوت است" "شیوه‌های مدیریت داده ممکن است براساس نسخه برنامه، نحوه استفاده، منطقه، و سن کاربر متفاوت باشد. ""اطلاعات بیشتر درباره هم‌رسانی داده‌ها" "داده‌های مکان شما" "دسترسی این برنامه را در ""تنظیمات حریم خصوصی"" تغییر دهید" "قابلیت‌های برنامه" - - + "تجزیه‌وتحلیل" "ارتباطات توسعه‌دهنده برنامه" "تبلیغات یا بازاریابی" "تبعیت از خط‌مشی‌ها، امنیت، و جلوگیری از تقلب" - - + "شخصی‌سازی" "مدیریت حساب" "ایمنی داده" "داده‌های مکان ممکن است هم‌رسانی شود" @@ -619,13 +614,10 @@ "به‌روزرسانی‌های مربوط به هم‌رسانی داده‌های مکان" "برنامه‌هایی که روش هم‌رسانی داده‌های مکان شما را تغییر داده‌اند مرور کنید" "این برنامه‌ها روش هم‌رسانی داده‌های مکان شما را تغییر داده‌اند. شاید قبلاً آن را هم‌رسانی نکرده باشند، یا شاید اکنون آن را برای اهداف تبلیغاتی یا بازاریابی هم‌رسانی کنند." - - + "توسعه‌دهندگان این برنامه‌ها اطلاعاتی درباره شیوه‌هایشان برای هم‌رسانی داده‌ها در فروشگاه برنامه‌ها ارائه کرده‌اند. ممکن است این اطلاعات را در گذر زمان به‌روز کنند.\n\nشیوه‌های هم‌رسانی داده ممکن است براساس نسخه برنامه، نحوه استفاده، منطقه، و سن کاربر متفاوت باشد." "آشنایی با هم‌رسانی داده‌ها" - - - - + "داده‌های مکانتان اکنون با اشخاص ثالث هم‌رسانی می‌شود" + "داده‌های مکانتان برای اهداف تبلیغاتی یا بازاریابی اکنون با اشخاص ثالث هم‌رسانی می‌شود" "{count,plural, =0{در روز گذشته به‌روزرسانی شده است}=1{در روز گذشته به‌روزرسانی شده است}one{در # روز به‌روزرسانی شده است}other{در # روز به‌روزرسانی شده است}}" "درحال‌حاضر هیچ به‌روزرسانی‌ای وجود ندارد" "به‌روزرسانی‌های هم‌رسانی داده" diff --git a/PermissionController/res/values-fi-v34/strings.xml b/PermissionController/res/values-fi-v34/strings.xml index b2a1923896..e9a60773a5 100644 --- a/PermissionController/res/values-fi-v34/strings.xml +++ b/PermissionController/res/values-fi-v34/strings.xml @@ -20,7 +20,6 @@ "Tietoturva ja yksityisyys" "Asetukset" "Data" - - + "Health Connect" "Sovellusluvat ja datan ylläpito" diff --git a/PermissionController/res/values-fi/strings.xml b/PermissionController/res/values-fi/strings.xml index 2c7a518f2c..4b2c68a0a1 100644 --- a/PermissionController/res/values-fi/strings.xml +++ b/PermissionController/res/values-fi/strings.xml @@ -592,26 +592,21 @@ "Näytä salasanat" "Näytä kirjaimet hetkellisesti, kun kirjoitat" "Sovellus on ilmoittanut, että se saattaa jakaa sijaintitietoja kolmansille osapuolille" - - + "Datan jakaminen ja sijainti" "Mistä datan jakotiedot tulevat" - - + "%1$s"" sisältää kehittäjän lisäämiä tietoja tavoista, joilla sovellus jakaa dataa. Tietoja voidaan päivittää ajan mittaan." "Sijaintitietoja voidaan jakaa näihin tarkoituksiin" - - + "%1$s" "Datan jakaminen vaihtelee" "Datakäytännöt voivat vaihdella sovellusversion, käytön, alueen ja iän mukaan. ""Lisätietoa datan jakamisesta" "Sijaintitietosi" "Muuta tämän sovelluksen pääsyoikeuksia ""yksityisyysasetuksissa" "Sovelluksen toiminnot" - - + "Analytiikka" "Viestit kehittäjältä" "Mainonta tai markkinointi" "Petosten estäminen, tietoturva ja sääntöjenmukaisuus" - - + "Personointi" "Tiliasioiden hoitaminen" "Dataturvallisuus" "Sijaintitietoja voidaan jakaa" @@ -619,13 +614,10 @@ "Sijaintidatan jakamisen päivitykset" "Tarkista sovellukset, jotka ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja" "Nämä sovellukset ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja. Ne eivät ehkä ole jakaneet niitä aiemmin tai ne saattavat nyt jakaa niitä mainonta- tai markkinointitarkoituksiin." - - + "Näiden sovellusten kehittäjät lisäsivät sovelluskauppaan tietoa datan jakokäytännöistä. Tietoja voidaan päivittää ajan mittaan.\n\nDatan jakokäytännöt voivat vaihdella sovellusversion, käytön, alueen ja iän mukaan." "Lue lisää datan jakamisesta" - - - - + "Sijaintitietojasi jaetaan nyt kolmansille osapuolille" + "Sijaintitietojasi jaetaan nyt kolmansille osapuolille mainontaa tai markkinointia varten" "{count,plural, =0{Päivitetty viime päivän aikana}=1{Päivitetty viime päivän aikana}other{Päivitetty # viime päivän aikana}}" "Ei päivityksiä tällä hetkellä" "Datan jaon päivitykset" diff --git a/PermissionController/res/values-fr-car/strings.xml b/PermissionController/res/values-fr-car/strings.xml new file mode 100644 index 0000000000..9afb4df4bf --- /dev/null +++ b/PermissionController/res/values-fr-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Si vous n\'utilisez pas une appli pendant quelques mois :\n\n• les autorisations sont supprimées pour protéger vos données ;\n• les fichiers temporaires sont supprimés pour libérer de l\'espace." + diff --git a/PermissionController/res/values-fr-rCA-car/strings.xml b/PermissionController/res/values-fr-rCA-car/strings.xml new file mode 100644 index 0000000000..02b0a45be8 --- /dev/null +++ b/PermissionController/res/values-fr-rCA-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Si une application n\'est pas utilisée pendant quelques mois :\n\n• Les autorisations sont retirées pour protéger vos données.\n• Les fichiers temporaires sont retirés pour libérer de l\'espace de stockage." + diff --git a/PermissionController/res/values-fr-rCA-v34/strings.xml b/PermissionController/res/values-fr-rCA-v34/strings.xml new file mode 100644 index 0000000000..5bc75222e8 --- /dev/null +++ b/PermissionController/res/values-fr-rCA-v34/strings.xml @@ -0,0 +1,26 @@ + + + + + "Sécurité et confidentialité" + "Commandes" + "Données" + + + "Autorisations de l\'application et gestion des données" + diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml index 2ac734074b..d41e991a51 100644 --- a/PermissionController/res/values-fr-rCA/strings.xml +++ b/PermissionController/res/values-fr-rCA/strings.xml @@ -591,68 +591,37 @@ "Afficher un message lorsque les applications accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés" "Afficher les mots de passe" "Afficher les caractères brièvement pendant la saisie" - - - - - - - - - - + "Cette application indique qu\'elle peut partager vos données de localisation avec des tiers" + "Partage des données et localisation" + "Provenance des renseignements sur le partage des données" + "Le développeur a fourni des renseignements à ""%1$s"" sur la façon dont cette application partage les données. Il peut les mettre à jour au fil du temps." + "L\'appli peut partager des données de loc. pour :" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Les pratiques de partage de données peuvent varier" + "Les pratiques relatives aux données peuvent varier en fonction de la version de votre application, de son utilisation, de votre région et de votre âge. ""En savoir plus sur le partage des données" + "Vos données de localisation" + "Modifiez les autorisations d\'accès de cette application dans les ""paramètres de confidentialité" + "le fonctionnement de l\'appli;" + "les analyses;" + "les communications du développeur;" + "les annonces ou le marketing;" + "la prévention de la fraude, la sécurité et la conformité;" + "la personnalisation;" + "la gestion du compte." + "Sécurité des données" + "Les données de localisation peuvent être partagées" + "Cette application indique qu\'elle peut partager vos données de localisation avec des tiers" + "Mises à jour des pratiques de partage des données pour la localisation" + "Passez en revue les applications qui ont changé la façon dont elles peuvent partager vos données de localisation" + "Ces applications ont modifié la façon dont elles peuvent partager vos données de localisation. Elles peuvent ne pas les avoir partagées auparavant, ou peuvent maintenant les partager à des fins d\'annonces ou de marketing." + "Les développeurs de ces applications ont fourni des renseignements sur leurs pratiques de partage des données à une boutique d\'applications. Ils peuvent les mettre à jour au fil du temps.\n\nLes pratiques de partage des données peuvent varier en fonction de la version de votre application, de son utilisation, de votre région et de votre âge." + "En savoir plus sur le partage des données" + "Vos données de localisation sont maintenant partagées avec des tiers" + "Vos données de localisation sont maintenant partagées avec des tiers à des fins d\'annonces ou de marketing" + "{count,plural, =0{Mises à jour au cours du dernier jour}=1{Mises à jour au cours du dernier jour}one{Mises à jour il y a # jour}many{Mises à jour au cours des # de derniers jours}other{Mises à jour au cours des # derniers jours}}" + "Aucune mise à jour pour le moment" + "Mises à jour des pratiques de partage des données" + "Certaines applications ont modifié la façon dont elles peuvent partager vos données de localisation" + "Paramètres" diff --git a/PermissionController/res/values-fr-v34/strings.xml b/PermissionController/res/values-fr-v34/strings.xml new file mode 100644 index 0000000000..69b576c4ff --- /dev/null +++ b/PermissionController/res/values-fr-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Sécurité et confidentialité" + "Commandes" + "Données" + "Santé Connect" + "Autorisations de l\'application et gestion des données" + diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml index 80d0e8dadd..1c8e34424c 100644 --- a/PermissionController/res/values-fr/strings.xml +++ b/PermissionController/res/values-fr/strings.xml @@ -591,68 +591,36 @@ "Afficher un message lorsque les applis accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés" "Afficher les mots de passe" "Afficher brièvement les caractères pendant la saisie" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Cette appli a indiqué qu\'elle peut partager vos données de localisation avec des tiers" + "Partage des données et localisation" + "Origine des infos sur le partage des données" + "Le développeur a fourni des infos sur ""%1$s"" concernant la manière dont cette appli partage les données. Il peut mettre à jour ces infos au fil du temps." + "Appli peut partager données de localisation pour :" + "%1$s" + "Partage des données variable" + "La gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge. ""En savoir plus sur le partage des données" + "Vos données de localisation" + "Modifiez l\'accès de cette appli dans les ""paramètres de confidentialité" + "Fonctionnement de l\'appli" + "Données analytiques" + "Communications du développeur" + "Publicité ou marketing" + "Prévention des fraudes, sécurité et conformité" + "Personnalisation" + "Gestion du compte" + "Sécurité des données" + "Les données de localisation peuvent être partagées" + "Cette appli a indiqué qu\'elle peut partager vos données de localisation avec des tiers" + "Mises à jour du partage des données pour la localisation" + "Consulter les applis qui ont modifié la manière dont elles peuvent partager vos données de localisation" + "Ces applis ont modifié la manière dont elles peuvent partager vos données de localisation. Elles ne les partageaient peut-être pas auparavant ou peuvent désormais les partager à des fins de publicité ou de marketing." + "Les développeurs de ces applis ont fourni des infos concernant leurs pratiques de partage des données sur une plate-forme de téléchargement d\'applications. Ils peuvent mettre à jour ces infos au fil du temps.\n\nLa gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge." + "En savoir plus sur le partage des données" + "Vos données de localisation sont désormais partagées avec des tiers" + "Vos données de localisation sont désormais partagées avec des tiers à des fins de publicité ou de marketing" + "{count,plural, =0{Mise à jour au cours du dernier jour}=1{Mise à jour au cours du dernier jour}one{Mise à jour il y a # jour}many{Mise à jour il y a # jours}other{Mise à jour il y a # jours}}" + "Aucune mise à jour pour le moment" + "Mises à jour du partage des données" + "Certaines applis ont modifié la façon dont elles peuvent partager vos données de localisation" + "Paramètres" diff --git a/PermissionController/res/values-gl-car/strings.xml b/PermissionController/res/values-gl-car/strings.xml new file mode 100644 index 0000000000..f4fd66c142 --- /dev/null +++ b/PermissionController/res/values-gl-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Se non se usa unha aplicación durante uns meses:\n\n• Quítanselle os permisos para protexer os teus datos\n• Quítanse os ficheiros temporais para liberar espazo" + diff --git a/PermissionController/res/values-gl-v34/strings.xml b/PermissionController/res/values-gl-v34/strings.xml new file mode 100644 index 0000000000..eebaabdc10 --- /dev/null +++ b/PermissionController/res/values-gl-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Seguranza e privacidade" + "Controis" + "Datos" + "Saúde conectada" + "Xestión de datos e permisos da aplicación" + diff --git a/PermissionController/res/values-gl/strings.xml b/PermissionController/res/values-gl/strings.xml index 335e50d95d..1c416c2a1f 100644 --- a/PermissionController/res/values-gl/strings.xml +++ b/PermissionController/res/values-gl/strings.xml @@ -591,68 +591,36 @@ "Mostra unha mensaxe cando as aplicacións acceden ao texto, ás imaxes ou ao contido que copiaches" "Mostrar contrasinais" "Mostra os caracteres brevemente mentres escribes" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Esta aplicación indicou que é posible que comparta os teus datos de localización con terceiros" + "Uso compartido de datos e localización" + "De onde provén a información sobre o uso compartido de datos?" + "A persoa que programou esta aplicación facilitoulle información acerca de como comparte datos a ""%1$s"". Esta información podería modificarse co paso do tempo." + "A app pode compartir datos de localización para:" + "%1$s" + "As prácticas de uso compartido de datos varían" + "As prácticas relacionadas cos datos poden variar en función da versión da aplicación, o uso que lle deas, a rexión onde vivas e a idade que teñas. ""Máis información sobre o uso compartido de datos" + "Os teus datos de localización" + "Cambia o acceso desta aplicación na ""configuración de privacidade" + "Funcións da aplicación" + "Estatísticas" + "Método de comunicación do programador" + "Publicidade ou márketing" + "Prevención de fraudes, seguranza e cumprimento normativo" + "Personalización" + "Xestión da conta" + "Seguranza dos datos" + "Poderían compartirse os datos de localización" + "Esta aplicación indicou que é posible que comparta os teus datos de localización con terceiros" + "Actualizacións de uso compartido de datos para a localización" + "Revisa as aplicacións que cambiaron a forma en que poden compartir os teus datos de localización" + "Estas aplicacións cambiaron a forma en que poden compartir os teus datos de localización. É posible que non os compartisen antes ou que agora os compartan con fins publicitarios ou de márketing." + "As persoas que programaron estas aplicacións facilitaron información sobre as súas prácticas á hora de compartir datos cunha tenda de aplicacións. É posible que modifiquen esta información co paso do tempo.\n\nAs súas prácticas á hora de compartir datos poderían variar segundo a versión da aplicación, o uso que lle deas, a rexión onde vivas e a idade que teñas." + "Máis información sobre o uso compartido de datos" + "Agora, os teus datos de localización compártense con terceiros" + "Agora, os teus datos de localización compártense con terceiros con fins publicitarios ou de márketing" + "{count,plural, =0{Publicaron cambios no último día}=1{Publicaron cambios no último día}other{Publicaron cambios nos últimos # días}}" + "Nestes momentos non hai ningunha novidade" + "Actualizacións de uso compartido de datos" + "Algunhas aplicacións cambiaron a forma en que poden compartir os teus datos de localización" + "Configuración" diff --git a/PermissionController/res/values-gu-v34/strings.xml b/PermissionController/res/values-gu-v34/strings.xml index 4b1e266953..77f74630a4 100644 --- a/PermissionController/res/values-gu-v34/strings.xml +++ b/PermissionController/res/values-gu-v34/strings.xml @@ -20,7 +20,6 @@ "સુરક્ષા અને પ્રાઇવસી" "નિયંત્રણો" "ડેટા" - - + "Health Connect" "ઍપ પરવાનગીઓ અને ડેટા મેનેજમેન્ટ" diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml index 87cd0d3f33..8b54a64bd2 100644 --- a/PermissionController/res/values-gu/strings.xml +++ b/PermissionController/res/values-gu/strings.xml @@ -592,26 +592,21 @@ "પાસવર્ડ બતાવો" "તમે ટાઇપ કરો ત્યારે થોડા સમય માટે અક્ષરો બતાવો" "આ ઍપ દ્વારા જણાવવામાં આવ્યું છે કે તે ત્રીજા પક્ષો સાથે તમારો લોકેશન ડેટા શેર કરી શકે છે" - - + "ડેટા શેરિંગ અને લોકેશન" "ડેટા શેરિંગ સંબંધિત માહિતી ક્યાંથી આવે છે" - - + "ઍપના ડેવલપરે આ ઍપની ડેટા શેર કરવા વિશેની માહિતી ""%1$s""ને પૂરી પાડી છે. સમય જતાં કદાચ તે આ માહિતી અપડેટ કરી શકે છે." "ઍપ આ માટે લોકેશન ડેટા શેર કરી શકે છે:" - - + "%1$s" "ડેટા શેરિંગમાં ફેરફાર થતો રહે છે" "તમારી ઍપનું વર્ઝન, તેનો ઉપયોગ, ઉપયોગ કરવાનો પ્રદેશ અને તમારી ઉંમરના આધારે ડેટાના નિયમો કદાચ અલગ-અલગ હોઈ શકે છે. ""ડેટા શેરિંગ વિશે વધુ" "તમારો લોકેશન ડેટા" "પ્રાઇવસી સેટિંગ""માં જઈને આ ઍપનો ઍક્સેસ બદલો" "ઍપની કાર્યક્ષમતા" - - + "Analytics" "ડેવલપર સાથેની વાતચીતો" "જાહેરાત અથવા માર્કેટિંગ" "કપટ અટકાવવું, સુરક્ષા અને અનુપાલન" - - + "મનગમતું બનાવવું" "એકાઉન્ટ મેનેજમેન્ટ" "ડેટા સલામતી" "લોકેશન ડેટા શેર કરવામાં આવી શકે છે" @@ -619,13 +614,10 @@ "લોકેશન માટે ડેટા શેરિંગ સંબંધિત અપડેટ" "તે ઍપનું રિવ્યૂ કરો જેમણે તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલી છે" "આ ઍપ દ્વારા તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલવામાં આવી હોઈ શકે છે. તેઓએ તેને પહેલાં શેર કર્યો ન હોય એવું બની શકે છે અથવા હવે તેને જાહેરાત અથવા માર્કેટિંગ હેતુઓ માટે શેર કરી શકે છે." - - + "આ ઍપના ડેવલપરે ડેટા શેરિંગના તેમના નિયમો વિશે ઍપ સ્ટોરને માહિતી પૂરી પાડી છે. સમય જતાં કદાચ તેઓ તેને અપડેટ કરી શકે છે.\n\nતમારી ઍપનું વર્ઝન, તેનો ઉપયોગ, ઉપયોગ કરવાનો પ્રદેશ અને તમારી ઉંમરના આધારે ડેટા શેરિંગના નિયમો કદાચ અલગ-અલગ હોઈ શકે છે." "ડેટા શેરિંગ વિશે જાણો" - - - - + "તમારો લોકેશન ડેટા હવે ત્રીજા પક્ષો સાથે શેર કરવામાં આવ્યો છે" + "તમારો લોકેશન ડેટા હવે જાહેરાત અથવા માર્કેટિંગ માટે ત્રીજા પક્ષો સાથે શેર કરવામાં આવ્યો છે" "{count,plural, =0{છેલ્લા દિવસમાં કરેલી અપડેટ}=1{છેલ્લા દિવસમાં કરેલી અપડેટ}one{# દિવસમાં કરેલી અપડેટ}other{# દિવસમાં કરેલી અપડેટ}}" "અત્યારે કોઈ અપડેટ નથી" "ડેટા શેરિંગ સંબંધિત અપડેટ" diff --git a/PermissionController/res/values-hi-v34/strings.xml b/PermissionController/res/values-hi-v34/strings.xml index 665ece8bb9..715b6ce14d 100644 --- a/PermissionController/res/values-hi-v34/strings.xml +++ b/PermissionController/res/values-hi-v34/strings.xml @@ -20,7 +20,6 @@ "सुरक्षा और निजता" "कंट्रोल" "डेटा" - - + "Health Connect" "ऐप्लिकेशन अनुमतियां और डेटा मैनेजमेंट" diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index 1a1286ac07..b3fe317176 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -592,26 +592,21 @@ "पासवर्ड दिखाएं" "टाइप करते समय वर्ण दिखाएं" "इस ऐप्लिकेशन में बताया गया है कि यह तीसरे पक्ष के साथ जगह की जानकारी का डेटा शेयर कर सकता है" - - + "डेटा शेयर करने का तरीका और जगह की जानकारी" "डेटा शेयर करने के तरीके की जानकारी यहां से मिलती है" - - + "डेवलपर ने ""%1$s"" पर, इस ऐप्लिकेशन के डेटा शेयर करने के तरीकों की जानकारी बताई है. वह समय-समय पर इस जानकारी को अपडेट कर सकता है." "ऐप जगह की जानकारी का डेटा इनके लिए शेयर करता है:" - - + "%1$s" "डेटा शेयर करने के अलग-अलग तरीके" "डेटा शेयर करने के तरीके अलग-अलग हो सकते हैं. ये आपकी जगह, उम्र, ऐप्लिकेशन के वर्शन, और उसके इस्तेमाल के हिसाब से तय किए जाते हैं. ""डेटा शेयर करने के तरीके के बारे में ज़्यादा जानकारी" "आपकी जगह की जानकारी का डेटा" "निजता सेटिंग"" में जाकर, इस ऐप्लिकेशन को दी गई अनुमति में बदलाव किया जा सकता है" "ऐप फ़ंक्शनैलिटी" - - + "Analytics" "डेवलपर कम्यूनिकेशन" "विज्ञापन या मार्केटिंग" "धोखाधड़ी रोकना, सुरक्षा, और नीतियों का पालन" - - + "पसंद के मुताबिक सुझाव पाएं" "खाते का मैनेजमेंट" "डेटा की सुरक्षा" "जगह की जानकारी का डेटा शेयर किया जा सकता है" @@ -619,13 +614,10 @@ "जगह की जानकारी का डेटा शेयर करने के तरीके के बारे में अपडेट" "ऐसे ऐप्लिकेशन देखें जिन्होंने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है" "इन ऐप्लिकेशन ने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है. ऐसा हो सकता है कि ये ऐप्लिकेशन पहले जगह की जानकारी का डेटा शेयर न करते हों या फिर अब विज्ञापन या मार्केटिंग के लिए यह डेटा शेयर किया हो." - - + "इन ऐप्लिकेशन के डेवलपर ने किसी ऐप स्टोर पर डेटा शेयर करने के उनके तरीकों की जानकारी बताई है. वे समय-समय पर इस जानकारी को अपडेट कर सकते हैं.\n\nडेटा शेयर करने के तरीके अलग-अलग हो सकते हैं. ये आपकी जगह, उम्र, ऐप्लिकेशन के वर्शन, और उसके इस्तेमाल के हिसाब से तय किए जाते हैं." "डेटा शेयर करने की नीतियों के बारे में जानें" - - - - + "आपकी जगह की जानकारी का डेटा अब तीसरे पक्षों के साथ शेयर किया गया है" + "विज्ञापन देने या मार्केटिंग करने के लिए, आपकी जगह की जानकारी को अब तीसरे पक्षों के साथ शेयर किया जा रहा है" "{count,plural, =0{कल अपडेट किया गया}=1{कल अपडेट किया गया}one{# दिन के अंदर अपडेट किया गया}other{# दिनों के अंदर अपडेट किया गया}}" "फ़िलहाल, कोई अपडेट उपलब्ध नहीं है" "डेटा शेयर करने के तरीके के बारे में अपडेट" diff --git a/PermissionController/res/values-hu-v34/strings.xml b/PermissionController/res/values-hu-v34/strings.xml index d56054f471..ce0e4eeeef 100644 --- a/PermissionController/res/values-hu-v34/strings.xml +++ b/PermissionController/res/values-hu-v34/strings.xml @@ -20,7 +20,6 @@ "Biztonság és adatvédelem" "Vezérlők" "Adatok" - - + "Health Connect" "Alkalmazásengedélyek és adatkezelés" diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index a0e93eae49..739f739d94 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -592,26 +592,21 @@ "Jelszavak mutatása" "Gépelés közben rövid ideig megjeleníti a karaktereket" "Az alkalmazás jelezte, hogy megoszthatja az Ön helyadatait harmadik felekkel" - - + "Adatmegosztás és hely" "Az adatmegosztással kapcsolatos információ forrása" - - + "A fejlesztő információt adott meg ""%1$s"" számára arról, hogy az alkalmazás miként oszt meg adatokat. A fejlesztő idővel módosíthatja ezt az információt." "Az app helyadatokat oszthat meg az alábbi célból:" - - + "%1$s" "Az adatmegosztás változik" "Az adatkezelési gyakorlat az alkalmazásverziótól, az alkalmazáshasználattól, a régiótól és életkortól függően változhat. ""További információ az adatmegosztásról""." "Helyadatok" "Az alkalmazás hozzáférésének módosítása az ""adatvédelmi beállításokban" "Alkalmazásfunkciók" - - + "Elemzések" "Fejlesztői közlemények" "Hirdetés vagy marketing" "Csalásmegelőzés, biztonság és megfelelőség" - - + "Személyre szabás" "Fiókkezelés" "Adatbiztonság" "Az alkalmazás megoszthat helyadatokat" @@ -619,13 +614,10 @@ "A helyadatok megosztását érintő frissítések" "Áttekintheti az appokat, amelyek módosították, hogy miként oszthatják meg a helyadatait" "Ezek az alkalmazások módosították, hogy miként oszthatják meg az Ön helyadatait. Előfordulhat, hogy korábban nem osztották meg az adatokat, illetve ezentúl hirdetési vagy marketing célokra oszthatják meg őket." - - + "Ezeknek az alkalmazásoknak a fejlesztői információt adtak meg az alkalmazásboltokkal való adatmegosztási gyakorlatukról. Az információt idővel módosíthatják.\n\nAz adatmegosztási gyakorlatok az alkalmazásverziótól, a használattól, a régiótól és az életkortól függően eltérhetnek." "További információ az adatmegosztásról" - - - - + "Helyadatai mostantól harmadik felekkel vannak megosztva" + "Helyadatai mostantól hirdetési vagy marketingcélokra harmadik felekkel vannak megosztva" "{count,plural, =0{Módosítva az elmúlt napon}=1{Módosítva az elmúlt napon}other{Módosítva # napon belül}}" "Jelenleg nincs módosítás" "Adatmegosztási frissítések" diff --git a/PermissionController/res/values-hy-car/strings.xml b/PermissionController/res/values-hy-car/strings.xml new file mode 100644 index 0000000000..f708977a23 --- /dev/null +++ b/PermissionController/res/values-hy-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Եթե դուք մի քանի ամիս չեք օգտագործում հավելվածը.\n\n• Թույլտվությունները հեռացվում են՝ ձեր տվյալները պաշտպանելու համար\n• Ժամանակավոր ֆայլերը հեռացվում են՝ տարածք ազատելու համար" + diff --git a/PermissionController/res/values-hy-v34/strings.xml b/PermissionController/res/values-hy-v34/strings.xml new file mode 100644 index 0000000000..b8a49bfbc5 --- /dev/null +++ b/PermissionController/res/values-hy-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Անվտանգություն և գաղտնիություն" + "Կառավարման տարրեր" + "Տվյալներ" + "Health Connect" + "Հավելվածների թույլտվություններ և տվյալների կառավարում" + diff --git a/PermissionController/res/values-hy/strings.xml b/PermissionController/res/values-hy/strings.xml index 5dfc280b9e..716092ff64 100644 --- a/PermissionController/res/values-hy/strings.xml +++ b/PermissionController/res/values-hy/strings.xml @@ -591,68 +591,36 @@ "Ցուցադրել հաղորդագրություն, երբ հավելվածներին հասանելի են դառնում ձեր պատճենած տեքստը, պատկերները կամ այլ բովանդակություն" "Ցուցադրել գաղտնաբառերը" "Տեքստ մուտքագրելիս կարճ ժամանակով ցուցադրել գրանշանները" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Այս հավելվածը կարող է երրորդ կողմերի հետ կիսվել ձեր տեղադրության տվյալներով" + "Տվյալների փոխանցում և տեղորոշում" + "Որտեղից են վերցվում տվյալներով կիսվելու մասին տեղեկությունները" + "Մշակողը ""%1$s""-ին տրամադրել է տեղեկություններ, թե ինչպես է այս հավելվածը կիսվում տվյալներով։ Ժամանակի ընթացքում մշակողը կարող է թարմացնել այս տեղեկությունները։" + "Տեղադրության տվյալներով կիսվելու նպատակները՝" + "%1$s" + "Տվյալներով կիսվելու եղանակները տարբեր են" + "Տվյալների հավաքման, օգտագործման և մշակման կանոնները կախված են հավելվածի տարբերակից, դրա օգտագործումից, օգտատիրոջ տարիքից և բնակության երկրից։ ""Իմանալ ավելին տվյալներով կիսվելու մասին" + "Ձեր տեղադրության տվյալները" + "Դուք կարող եք փոխել այս հավելվածի թույլտվությունները ""գաղտնիության կարգավորումներում" + "Հավելվածի գործառույթներ" + "Վիճակագրություն" + "Հաղորդակցում մշակողի հետ" + "Գովազդ կամ մարքեթինգ" + "Խարդախության կանխարգելում, անվտանգություն և պահանջներին համապատասխանություն" + "Անհատականացում" + "Հաշվի կառավարում" + "Տվյալների պաշտպանություն" + "Տեղադրության տվյալները կարող են փոխանցվել" + "Այս հավելվածը կարող է երրորդ կողմերի հետ կիսվել ձեր տեղադրության տվյալներով" + "Տեղադրության մասին տվյալներով կիսվելու թույլտվության թարմացում" + "Ստուգեք հավելվածների ցանկը, որոնք փոխել են ձեր տեղադրության տվյալներով կիսվելու եղանակը" + "Այս հավելվածները փոխել են ձեր տեղադրության տվյալներով կիսվելու եղանակը։ Հնարավոր է, որ նշված հավելվածները նախկինում չեն կիսվել այդ տվյալներով կամ այժմ կիսվում են դրանցով գովազդային կամ մարքեթինգային նպատակներով։" + "Այս հավելվածների մշակողները հավելվածների խանութին տրամադրել են տեղեկություններ տվյալներով կիսվելու դրանց եղանակների մասին։ Ժամանակի ընթացքում նրանք կարող են թարմացնել այդ տեղեկությունները։\n\nՏվյալներով կիսվելու եղանակները կախված են հավելվածի տարբերակից, դրա օգտագործումից, օգտատիրոջ տարիքից և բնակության երկրից։" + "Իմանալ ավելին տվյալներով կիսվելու մասին" + "Ձեր տեղադրության տվյալներն այժմ տրամադրվում են երրորդ կողմերի" + "Ձեր տեղադրության տվյալներն այժմ տրամադրվում են երրորդ կողմերի՝ գովազդի կամ մարքեթինգային նպատակներով" + "{count,plural, =0{Թարմացվել է վերջին 1 օրվա ընթացքում}=1{Թարմացվել է վերջին 1 օրվա ընթացքում}one{Թարմացվել է վերջին # օրվա ընթացքում}other{Թարմացվել է վերջին # օրվա ընթացքում}}" + "Այս պահին թարմացումներ չկան" + "Տվյալներով կիսվելու եղանակի փոփոխություն" + "Որոշ հավելվածներ փոխել են ձեր տեղադրության տվյալներով կիսվելու եղանակը" + "Կարգավորումներ" diff --git a/PermissionController/res/values-in-v34/strings.xml b/PermissionController/res/values-in-v34/strings.xml index bead32a1a5..a44a2becee 100644 --- a/PermissionController/res/values-in-v34/strings.xml +++ b/PermissionController/res/values-in-v34/strings.xml @@ -20,7 +20,6 @@ "Keamanan & privasi" "Kontrol" "Data" - - + "Health Connect" "Izin aplikasi dan pengelolaan data" diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml index d8d424a351..7e58be365c 100644 --- a/PermissionController/res/values-in/strings.xml +++ b/PermissionController/res/values-in/strings.xml @@ -592,26 +592,21 @@ "Tampilkan sandi" "Menampilkan karakter sejenak saat Anda mengetik" "Aplikasi ini menyatakan bahwa aplikasi mungkin membagikan data lokasi Anda kepada pihak ketiga" - - + "Berbagi data dan lokasi" "Asal info berbagi data" - - + "Developer memberikan info kepada ""%1$s"" tentang cara aplikasi ini berbagi data. Developer dapat memperbarui info ini dari waktu ke waktu." "Aplikasi mungkin membagikan data lokasi untuk:" - - + "%1$s" "Berbagi data berbeda-beda" "Praktik data dapat berbeda-beda berdasarkan versi aplikasi, penggunaan, wilayah, dan usia Anda. ""Selengkapnya tentang berbagi data" "Data lokasi Anda" "Ubah akses aplikasi ini di ""setelan privasi" "Fungsi aplikasi" - - + "Analisis" "Komunikasi developer" "Iklan atau pemasaran" "Pencegahan penipuan, keamanan, dan kepatuhan" - - + "Personalisasi" "Pengelolaan akun" "Keamanan data" "Data lokasi mungkin dibagikan" @@ -619,13 +614,10 @@ "Pembaruan berbagi data untuk lokasi" "Tinjau aplikasi yang mengubah caranya untuk dapat membagikan data lokasi Anda" "Aplikasi ini telah mengubah caranya untuk dapat membagikan data lokasi Anda. Aplikasi mungkin sebelumnya tidak membagikan data, atau mungkin kini membagikan data untuk tujuan iklan atau pemasaran." - - + "Developer aplikasi ini memberikan info tentang praktik berbagi data mereka kepada app store. Developer dapat memperbaruinya dari waktu ke waktu.\n\nPraktik berbagi data mungkin berbeda-beda berdasarkan versi aplikasi, penggunaan, wilayah, dan usia Anda." "Pelajari berbagi data" - - - - + "Data lokasi Anda kini dibagikan kepada pihak ketiga" + "Data lokasi Anda kini dibagikan kepada pihak ketiga untuk tujuan iklan atau pemasaran" "{count,plural, =0{Diperbarui kemarin}=1{Diperbarui kemarin}other{Diperbarui dalam # hari}}" "Tidak ada pembaruan saat ini" "Pembaruan berbagi data" diff --git a/PermissionController/res/values-is-v34/strings.xml b/PermissionController/res/values-is-v34/strings.xml index 6baf41d3f0..bf050e5896 100644 --- a/PermissionController/res/values-is-v34/strings.xml +++ b/PermissionController/res/values-is-v34/strings.xml @@ -20,7 +20,6 @@ "Öryggi og persónuvernd" "Stýringar" "Gögn" - - + "Heilsutenging" "Forritsheimildir og gagnaumsjón" diff --git a/PermissionController/res/values-is/strings.xml b/PermissionController/res/values-is/strings.xml index 6c2bb41eda..7ed9c526a6 100644 --- a/PermissionController/res/values-is/strings.xml +++ b/PermissionController/res/values-is/strings.xml @@ -592,26 +592,21 @@ "Sýna aðgangsorð" "Birta stafi í stutta stund þegar þú skrifar" "Þetta forrit gaf til kynna að það kunni að deila staðsetningargögnum frá þér með þriðju aðilum" - - + "Gagnadeiling og staðsetning" "Hvaðan koma upplýsingar um gagnadeilingu" - - + "Þróunaraðilinn veitti ""%1$s"" upplýsingar um hvernig þetta forrit deilir gögnum. Viðkomandi kann að uppfæra þessar upplýsingar síðar meir." "Forritið kann að deila staðsetningargögnum til að:" - - + "%1$s" "Gagnadeiling er mismunandi" "Gagnameðhöndlun getur verið breytileg miðað við útgáfu forritsins, notkun, svæði og aldur notandans. ""Nánar um gagnadeilingu" "Staðsetningargögnin þín" "Breyttu aðgangi þessa forrits í ""persónuverndarstillingunum" "Forritseiginleikar" - - + "Greining" "Samskipti við þróunaraðila" "Auglýsingar eða markaðssetning" "Svikavörn, öryggi og reglufylgni" - - + "Sérstillingar" "Reikningsstjórnun" "Gagnaöryggi" "Staðsetningargögnum kann að vera deilt" @@ -619,13 +614,10 @@ "Uppfærslur um gagnadeilingu varðandi staðsetningu" "Yfirfarðu forrit sem breyttu því hvernig þau geta deilt staðsetningargögnunum þínum" "Deiling staðsetningargagna hefur breyst í þessum forritum. Þau hafa hugsanlega ekki deilt gögnunum áður eða deila þeim nú í auglýsinga- eða markaðssetningartilgangi." - - + "Þróunaraðilar þessa forrits veittu forritaverslun upplýsingar um vinnureglur sínar varðandi gagnadeilingu. Viðkomandi aðila kunna að uppfæra upplýsingarnar síðar.\n\nVinnureglur varðandi gagnadeilingu geta verið mismunandi eftir útgáfu forrits, notkun, svæði og aldri notanda." "Nánar um gagnadeilingu" - - - - + "Staðsetningargögnunum þínum er nú deilt með þriðju aðilum" + "Staðsetningargögnunum þínum er nú deilt með þriðju aðilum í auglýsinga- eða markaðssetningartilgangi" "{count,plural, =0{Uppfært innan síðasta sólarhrings}=1{Uppfært innan síðasta sólarhrings}one{Uppfært innan # dags}other{Uppfært innan # daga}}" "Engar uppfærslur eins og er" "Gagnadeilingaruppfærslur" diff --git a/PermissionController/res/values-iw-v34/strings.xml b/PermissionController/res/values-iw-v34/strings.xml index c9cb6e2f58..9aa61cf1c4 100644 --- a/PermissionController/res/values-iw-v34/strings.xml +++ b/PermissionController/res/values-iw-v34/strings.xml @@ -20,7 +20,6 @@ "אבטחה ופרטיות" "אמצעי בקרה" "נתונים" - - - "הרשאות הניתנות לאפליקציה וניהול נתונים" + "Health Connect" + "הרשאות שניתנות לאפליקציה וניהול נתונים" diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml index cec9760cea..cc57160bc2 100644 --- a/PermissionController/res/values-iw/strings.xml +++ b/PermissionController/res/values-iw/strings.xml @@ -592,41 +592,33 @@ "הצגת סיסמאות" "התווים יופיעו לפרקי זמן קצרים בזמן ההקלדה" "מפתחי האפליקציה הזו הצהירו שהאפליקציה עשויה לשתף את נתוני המיקום שלך עם צדדים שלישיים" - - - "מהיכן מגיע המידע לגבי שיתוף הנתונים" - - + "שיתוף נתונים ומיקום" + "מאיפה מגיע המידע לגבי שיתוף הנתונים" + "‏המפתחים סיפקו מידע על האופן שבו האפליקציה משתפת נתונים כאן: ""%1$s"". המידע עשוי להתעדכן עם הזמן." "האפליקציה עשויה לשתף את נתוני המיקום למטרות הבאות:" - - + "%1$s" "שיתוף הנתונים עשוי להיות שונה" "נוהלי הטיפול בנתונים עשויים להשתנות בהתאם לגרסת האפליקציה, לשימוש בה, לאזור ולגיל המשתמש. ""מידע נוסף על שיתוף נתונים" "נתוני המיקום שלך" "אפשר לשנות את רמת הגישה של האפליקציה הזו ב""הגדרות הפרטיות" "תכונות האפליקציה" - - + "ניתוח נתונים" "הודעות מהמפתחים" "פרסום או שיווק" "אבטחה, תאימות ומניעת הונאות" - - + "התאמה אישית" "ניהול החשבון" "אבטחת נתונים" "ייתכן שנתוני המיקום ישותפו" "מפתחי האפליקציה הזו הצהירו שהאפליקציה עשויה לשתף את נתוני המיקום שלך עם צדדים שלישיים" - "עדכונים לגבי שיתוף נתוני מיקום" + "עדכונים לגבי שיתוף נתונים בנוגע למיקום" "בדיקת אפליקציות שהשתנה האופן שבו הן עשויות לשתף את נתוני המיקום" "באפליקציות האלה, השתנה האופן שבו הן עשויות לשתף את נתוני המיקום שלך. יכול להיות שהן לא שיתפו את הנתונים האלה בעבר, או שעכשיו הן משתפות את נתוני המיקום לצורכי פרסום ושיווק." - - + "המפתחים של האפליקציות האלה סיפקו מידע לגבי האופן שבו הנתונים משותפים עם חנות אפליקציות. המידע עשוי להתעדכן עם הזמן.\n\nנוהלי שיתוף הנתונים עשויים להשתנות בהתאם לגרסת האפליקציה, לשימוש בה, לאזור ולגיל המשתמש." "מידע נוסף על שיתוף נתונים" - - - - - "{count,plural, =0{עודכנו ביום האחרון}=1{עודכנו ביום האחרון}one{עודכנו ב-# הימים האחרונים}two{עודכנו ביומיים (#) האחרונים}other{עודכנו ב-# הימים האחרונים}}" + "נתוני המיקום שלך משותפים עכשיו עם צדדים שלישיים" + "נתוני המיקום שלך משותפים עכשיו עם צדדים שלישיים למטרות פרסום או שיווק" + "{count,plural, =0{עודכנו ב-24 השעות האחרונות}=1{עודכנו ב-24 השעות האחרונות}one{עודכנו ב-# הימים האחרונים}two{עודכנו ביומיים (#) האחרונים}other{עודכנו ב-# הימים האחרונים}}" "אין עדכונים כרגע" "עדכונים לגבי שיתוף הנתונים" "בחלק מהאפליקציות, השתנה האופן שבו הן עשויות לשתף את נתוני המיקום שלך" diff --git a/PermissionController/res/values-ja-v34/strings.xml b/PermissionController/res/values-ja-v34/strings.xml index 29c9c13902..267a18a6ea 100644 --- a/PermissionController/res/values-ja-v34/strings.xml +++ b/PermissionController/res/values-ja-v34/strings.xml @@ -20,7 +20,6 @@ "セキュリティとプライバシー" "管理" "データ" - - + "ヘルスコネクト" "アプリの権限とデータ管理" diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml index 9920559bf2..2cdd8452e2 100644 --- a/PermissionController/res/values-ja/strings.xml +++ b/PermissionController/res/values-ja/strings.xml @@ -592,26 +592,21 @@ "パスワードの表示" "入力した文字を短い間表示する" "このアプリは位置情報をサードパーティと共有することがあります" - - + "データ共有と位置情報" "データ共有情報の提供元" - - + "デベロッパーは、このアプリがデータを共有する方法に関する情報を ""%1$s"" に提供しています。この情報は時間が経つと更新される可能性があります。" "このアプリが位置情報を共有する目的" - - + "%1$s" "さまざまなデータ共有方法" "データの取り扱いは、アプリのバージョンや使用方法、ユーザーの年齢やお住まいの地域によって異なることがあります。""データ共有の詳細" "ユーザーの位置情報" "このアプリのアクセス権は""プライバシー設定""で変更できます" "アプリの機能" - - + "分析" "デベロッパーによる情報伝達" "広告、マーケティング" "不正行為防止、セキュリティ、コンプライアンス" - - + "パーソナライズ" "アカウント管理" "データ セーフティ" "位置情報が共有されることがあります" @@ -619,13 +614,10 @@ "位置情報を共有する方法の更新" "位置情報を共有する方法が変更されたアプリを確認できます" "これらのアプリで、位置情報を共有する方法が変更されました。以前は共有していなかったか、広告またはマーケティングの目的で共有されるようになった可能性があります。" - - + "これらのアプリのデベロッパーは、データの共有方法に関する情報をアプリストアに提供しています。この情報は時間が経つと更新される可能性があります。\n\nデータの共有方法は、アプリのバージョンや使用方法、ユーザーの年齢やお住まいの地域によって異なることがあります。" "データ共有の詳細" - - - - + "位置情報がサードパーティと共有されるようになりました" + "位置情報が広告またはマーケティングのためにサードパーティと共有されるようになりました" "{count,plural, =0{更新日: 過去 1 日以内}=1{更新日: 過去 1 日以内}other{更新日: # 日以内}}" "現時点で更新はありません" "データ共有に関する更新" diff --git a/PermissionController/res/values-ka-car/strings.xml b/PermissionController/res/values-ka-car/strings.xml new file mode 100644 index 0000000000..767838aa1e --- /dev/null +++ b/PermissionController/res/values-ka-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "თუ აპი რამდენიმე თვის განმავლობაში არ გამოიყენება:\n\n• თქვენი მონაცემების დასაცავად ნებართვები ამოიშლება\n• დროებითი ფაილები ამოიშლება მეხსიერების გასათავისუფლებლად" + diff --git a/PermissionController/res/values-ka-v34/strings.xml b/PermissionController/res/values-ka-v34/strings.xml new file mode 100644 index 0000000000..742f48ec5c --- /dev/null +++ b/PermissionController/res/values-ka-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "უსაფრთხოება და კონფიდენციალურობა" + "მართვის საშუალებები" + "მონაცემები" + "Health Connect" + "აპის ნებართვები და მონაცემთა მართვა" + diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml index 2e50149dd1..de1f91a20c 100644 --- a/PermissionController/res/values-ka/strings.xml +++ b/PermissionController/res/values-ka/strings.xml @@ -591,68 +591,36 @@ "როდესაც აპებს თქვენ მიერ კოპირებულ ტექსტზე, სურათებზე ან სხვა კონტენტზე აქვთ წვდომა, გამოჩნდება შეტყობინება" "პაროლების ჩვენება" "აკრეფისას სიმბოლოების ხანმოკლედ გამოჩენა" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "ამ აპის თანახმად, მან შესაძლოა გაუზიაროს თქვენი მდებარეობის მონაცემები მესამე მხარეს" + "მონაცემთა გაზიარება და მდებარეობა" + "საიდან მოდის მონაცემთა გაზიარების ინფორმაცია" + "დეველოპერმა მიუთითა ინფორმაცია ""%1$s"" ამ აპის მიერ ინფორმაციის გაზიარების შესახებ. ეს ინფორმაცია, დროთა განმავლობაში, შესაძლოა განახლდეს." + "აპმა შესაძლოა გააზიაროს მდებარეობის მონაცემები:" + "%1$s" + "მონაცემთა გაზიარება განსხვავდება" + "მონაცემებთან მოპყრობის პრაქტიკა შეიძლება განსხვავდებოდეს თქვენი აპის ვერსიის, გამოყენების, რეგიონის და ასაკის მიხედვით. ""ვრცლად მონაცემთა გაზიარების შესახებ" + "თქვენი მდებარეობის მონაცემები" + "შეცვალეთ ამ აპის წვდომა ""კონფიდენციალურობის პარამეტრებში" + "აპის ფუნქციები" + "Analytics" + "კომუნიკაცია დეველოპერისგან" + "რეკლამირება ან მარკეტინგი" + "თაღლითობის აღკვეთა, უსაფრთხოება და დაცვა" + "პერსონალიზება" + "ანგარიშის მართვა" + "მონაცემთა უსაფრთხოება" + "მდებარეობის მონაცემები შესაძლოა გაზიარებულია" + "ამ აპის თანახმად, მან შესაძლოა გაუზიაროს თქვენი მდებარეობის მონაცემები მესამე მხარეს" + "მონაცემების გაზიარების განახლებები მდებარეობისთვის" + "გადახედეთ აპებს, რომლებშიც შეიცვალა თქვენი მდებარეობის მონაცემების გაზიარების მეთოდი" + "ამ აპებმა შეცვალა თქვენი მდებარეობის მონაცემების გაზიარების გზები. შესაძლოა, ისინი ადრე არ გაუზიარებიათ, ან გაზიარდა ახლა რეკლამირების ან მარკეტინგული მიზნით." + "ამ აპების დეველოპერებმა მისი მონაცემების გაზიარების მეთოდების შესახებ ინფორმაცია მიუთითეს აპების მაღაზიაში. დროთა განმავლობაში ის შესაძლოა განახლდეს.\n\nმონაცემთა გაზიარების მეთოდები შესაძლოა განსხვავდებოდეს აპის ვერსიის, გამოყენების, რეგიონისა და ასაკის მიხედვით." + "შეიტყვეთ მონაცემთა გაზიარების შესახებ" + "თქვენი მდებარეობის მონაცემები ახლა გაზიარებულია მესამე მხარეებთან" + "თქვენი მდებარეობის მონაცემები უკვე გაზიარებულია მესამე მხარეებთან რეკლამირებისა და მარკეტინგის მიზნით" + "{count,plural, =0{განახლდა ბოლო დღის განმავლობაში}=1{განახლდა ბოლო დღის განმავლობაში}other{განახლდა # დღის განმავლობაში}}" + "ამჟამად განახლება არ არის" + "მონაცემთა გაზიარების განახლება" + "ზოგიერთმა აპმა შეცვალა თქვენი მდებარეობის მონაცემების გაზიარების გზები" + "პარამეტრები" diff --git a/PermissionController/res/values-kk-car/strings.xml b/PermissionController/res/values-kk-car/strings.xml new file mode 100644 index 0000000000..ee8b4851d0 --- /dev/null +++ b/PermissionController/res/values-kk-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Қолданба бірнеше ай бойы пайдаланылмаса:\n\n• Деректерді қорғау үшін рұқсаттар өшіріледі.\n• Орын босату үшін уақытша файлдар жойылады." + diff --git a/PermissionController/res/values-kk-v34/strings.xml b/PermissionController/res/values-kk-v34/strings.xml new file mode 100644 index 0000000000..b41b7d2c80 --- /dev/null +++ b/PermissionController/res/values-kk-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Қауіпсіздік және құпиялық" + "Басқару элементтері" + "Деректер" + "Health Connect" + "Қолданба рұқсаттары және деректерді басқару" + diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml index c73ca1965d..fb282bc6b6 100644 --- a/PermissionController/res/values-kk/strings.xml +++ b/PermissionController/res/values-kk/strings.xml @@ -591,68 +591,36 @@ "Қолданбалар көшірілген мәтінді, суреттерді немесе басқа контентті пайдаланған кезде хабар көрсету" "Құпия сөздерді көрсету" "Таңбалар терілген кезде аз уақыт көрсетіледі." - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Бұл қолданба локация деректеріңізді үшінші тараптармен бөлісе алатынын мәлімдеді." + "Деректерді бөлісу және локация" + "Деректерді бөлісу туралы ақпарат қайдан алынады?" + "Әзірлеуші ""%1$s"" қызметінде бұл қолданбаның деректерді бөлісу жолы туралы ақпарат берді. Ол бұл ақпаратты уақыт өте келе жаңарта алады." + "Қолданбада локация деректерін бөлісу мақсаттары:" + "%1$s" + "Деректерді бөлісу әртүрлі болады" + "Деректермен жұмыс істеу тәртібі қолданбаңыздың нұсқасына, пайдаланылуына, аймағыңыз бен жасыңызға байланысты әртүрлі болуы мүмкін. ""Деректерді бөлісу туралы толық ақпарат" + "Локация деректеріңіз" + "Бұл қолданбаның пайдалану рұқсатын ""құпиялық параметрлерінде"" өзгерте аласыз." + "Қолданба функциялары" + "Аналитика" + "Әзірлеушімен байланыс құралдары" + "Жарнамалау немесе маркетинг" + "Алаяқтардан қорғау, қауіпсіздік және сәйкестік" + "Жекелендіру" + "Аккаунтты басқару" + "Дерек қауіпсіздігі" + "Локация деректері жіберілуі мүмкін." + "Бұл қолданба локация деректеріңізді үшінші тараптармен бөлісе алатынын мәлімдеді." + "Локация деректерін бөлісуге қатысты жаңалық" + "Локация деректеріңізді бөлісу жолын өзгерткен қолданбаларды қарап шығыңыз." + "Осы қолданбалар локация деректеріңізді бөлісу жолын өзгертті. Олар деректерді бұрын бөліспеген болуы мүмкін, бірақ енді жарнамалау не маркетинг мақсатында бөлісуі мүмкін." + "Бұл қолданбалардың әзірлеушілері App Store дүкенінде өздерінің деректерді бөлісу тәртібі туралы ақпарат берді. Олар уақыт өте келе оны жаңарта алады.\n\nДеректерді бөлісу тәртібі қолданбаңыздың нұсқасына, пайдаланылуына, аймағыңыз бен жасыңызға байланысты әртүрлі болуы мүмкін." + "Деректерді бөлісу туралы ақпарат" + "Енді локация деректеріңіз үшінші тараптарға жіберіледі." + "Енді геодерегіңіз жарнамалау не маркетинг мақсатында үшінші тараптарға жіберіледі." + "{count,plural, =0{Соңғы күні жаңартылды}=1{Соңғы күні жаңартылды}other{Соңғы # күн ішінде жаңартылды}}" + "Әзірге ешқандай жаңарту жоқ." + "Деректерді бөлісуге қатысты жаңалық" + "Кейбір қолданбалар локация деректеріңізді бөлісу жолын өзгертті." + "Параметрлер" diff --git a/PermissionController/res/values-km-car/strings.xml b/PermissionController/res/values-km-car/strings.xml new file mode 100644 index 0000000000..4b263ededa --- /dev/null +++ b/PermissionController/res/values-km-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "ប្រសិនបើ​កម្មវិធីណាមួយ​មិនត្រូវបានប្រើ​រយៈពេលពីរបីខែ៖\n\n• ការអនុញ្ញាតត្រូវបានដកចេញ ដើម្បីការពារ​ទិន្នន័យ​របស់អ្នក\n• ឯកសារ​បណ្ដោះអាសន្នត្រូវបាន​ដកចេញ ដើម្បីបង្កើន​ទំហំផ្ទុកទំនេរ" + diff --git a/PermissionController/res/values-km-v34/strings.xml b/PermissionController/res/values-km-v34/strings.xml new file mode 100644 index 0000000000..b1aa22e8cc --- /dev/null +++ b/PermissionController/res/values-km-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "សុវត្ថិភាព និងឯកជនភាព" + "ការគ្រប់គ្រង" + "ទិន្នន័យ" + "Health Connect" + "ការអនុញ្ញាតកម្មវិធី និងការគ្រប់គ្រង​ទិន្នន័យ" + diff --git a/PermissionController/res/values-km/strings.xml b/PermissionController/res/values-km/strings.xml index b591b16a67..c061b0d5a2 100644 --- a/PermissionController/res/values-km/strings.xml +++ b/PermissionController/res/values-km/strings.xml @@ -591,68 +591,36 @@ "បង្ហាញសារ នៅពេលកម្មវិធីចូលប្រើអត្ថបទ រូបភាព ឬខ្លឹមសារផ្សេងទៀតដែលអ្នកបានចម្លង" "បង្ហាញ​ពាក្យ​សម្ងាត់" "បង្ហាញ​តួអក្សរ​មួយភ្លែត​ខណៈ​ពេល​អ្នក​វាយ​បញ្ចូល" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "កម្មវិធីនេះ​បានបញ្ជាក់ថា វាអាចចែករំលែក​ទិន្នន័យទីតាំងរបស់អ្នក​ជាមួយភាគីទីបី" + "ការចែករំលែកទិន្នន័យ និងទីតាំង" + "កន្លែងដែលព័ត៌មាន​អំពីការចែករំលែក​ទិន្នន័យបានមកពី" + "អ្នកអភិវឌ្ឍន៍​បានផ្ដល់ព័ត៌មានដល់ ""%1$s"" អំពីរបៀបដែល​កម្មវិធីនេះ​ចែករំលែកទិន្នន័យ។ អាចនឹងធ្វើបច្ចុប្បន្នភាព​ព័ត៌មាននេះ​តាមពេលវេលា។" + "កម្មវិធីនេះ​អាចនឹងចែករំលែក​ទិន្នន័យទីតាំងសម្រាប់៖" + "%1$s" + "ភាពខុសគ្នានៃ​ការចែករំលែកទិន្នន័យ" + "ការអនុវត្ត​ចំពោះ​ទិន្នន័យ​អាចខុសគ្នាទៅតាម​កំណែកម្មវិធី ការប្រើប្រាស់ តំបន់ និង​អាយុរបស់អ្នក។ ""ច្រើនទៀតអំពី​ការចែករំលែកទិន្នន័យ" + "ទិន្នន័យ​ទីតាំង​របស់អ្នក" + "ប្ដូរសិទ្ធិចូលប្រើ​របស់កម្មវិធីនេះ​នៅក្នុង""ការកំណត់ឯកជនភាព" + "មុខងារ​កម្មវិធី" + "ស្ថិតិវិភាគ" + "ការធ្វើទំនាក់ទំនង​របស់​អ្នកអភិវឌ្ឍន៍" + "ការ​ផ្សាយ​ពាណិជ្ជកម្ម ឬការធ្វើទីផ្សារ" + "ការទប់ស្កាត់ការគៃបន្លំ សុវត្ថិភាព និងអនុលោមភាព" + "ការកំណត់​ឱ្យមានលក្ខណៈផ្ទាល់ខ្លួន" + "ការគ្រប់គ្រង​គណនី" + "សុវត្ថិភាព​ទិន្នន័យ" + "ទិន្នន័យទីតាំងអាចនឹង​ត្រូវបានចែករំលែក" + "កម្មវិធីនេះ​បានបញ្ជាក់ថា វាអាចចែករំលែក​ទិន្នន័យទីតាំងរបស់អ្នក​ជាមួយភាគីទីបី" + "បច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យសម្រាប់ទីតាំង" + "ពិនិត្យមើលកម្មវិធីដែលបានផ្លាស់ប្ដូររបៀបដែលកម្មវិធីទាំងនោះអាចចែករំលែកទិន្នន័យទីតាំងរបស់អ្នក" + "កម្មវិធីទាំងនេះ​បានផ្លាស់ប្ដូររបៀបដែលវា​អាចចែករំលែកទិន្នន័យ​ទីតាំងរបស់អ្នក។ កម្មវិធីទាំងនេះ​ប្រហែលជាមិនបានចែករំលែកទិន្នន័យទីតាំងពីមុនទេ ឬឥឡូវនេះប្រហែលជា​ចែករំលែកទិន្នន័យទីតាំងនេះ​សម្រាប់គោលបំណង​ផ្សាយពាណិជ្ជកម្ម ឬធ្វើទីផ្សារ។" + "អ្នកអភិវឌ្ឍន៍កម្មវិធីទាំងនេះ​បានផ្ដល់ព័ត៌មានអំពី​ការអនុវត្តចំពោះការចែករំលែកទិន្នន័យ​របស់ពួកគាត់​ទៅហាងកម្មវិធី។ ពួកគាត់អាចនឹង​ធ្វើបច្ចុប្បន្នភាពព័ត៌មាននេះ​តាមពេលវេលា។\n\nការអនុវត្ត​ចំពោះការចែករំលែកទិន្នន័យ​អាចខុសគ្នាទៅតាម​កំណែកម្មវិធី ការប្រើប្រាស់ តំបន់ និងអាយុ​របស់អ្នក។" + "ស្វែងយល់អំពី​ការចែករំលែកទិន្នន័យ" + "ឥឡូវនេះ ទិន្នន័យទីតាំង​របស់អ្នកត្រូវបានចែករំលែក​ជាមួយភាគីទីបី" + "ឥឡូវនេះ ទិន្នន័យទីតាំងរបស់អ្នកត្រូវបានចែករំលែកជាមួយភាគីទីបីសម្រាប់ការផ្សាយពាណិជ្ជកម្ម ឬការធ្វើទីផ្សារ" + "{count,plural, =0{បានធ្វើបច្ចុប្បន្នភាព​នៅថ្ងៃចុងក្រោយ}=1{បានធ្វើបច្ចុប្បន្នភាព​នៅថ្ងៃចុងក្រោយ}other{បានធ្វើបច្ចុប្បន្នភាពក្នុងរយៈពេល # ថ្ងៃ}}" + "គ្មានបច្ចុប្បន្នភាព​នៅពេលនេះទេ" + "បច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យ" + "កម្មវិធីមួយចំនួន​បានផ្លាស់ប្ដូររបៀបដែលវាអាចចែករំលែកទិន្នន័យ​ទីតាំងរបស់អ្នក" + "ការកំណត់" diff --git a/PermissionController/res/values-kn-v34/strings.xml b/PermissionController/res/values-kn-v34/strings.xml index 65bc478111..ad8ad03f13 100644 --- a/PermissionController/res/values-kn-v34/strings.xml +++ b/PermissionController/res/values-kn-v34/strings.xml @@ -20,7 +20,6 @@ "ಭದ್ರತೆ ಮತ್ತು ಗೌಪ್ಯತೆ" "ಕಂಟ್ರೋಲ್‌ಗಳು" "ಡೇಟಾ" - - + "Health Connect" "ಆ್ಯಪ್ ಅನುಮತಿಗಳು ಮತ್ತು ಡೇಟಾ ನಿರ್ವಹಣೆ" diff --git a/PermissionController/res/values-kn/strings.xml b/PermissionController/res/values-kn/strings.xml index 1ff5fa00b6..d9c8f020de 100644 --- a/PermissionController/res/values-kn/strings.xml +++ b/PermissionController/res/values-kn/strings.xml @@ -592,26 +592,21 @@ "ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ತೋರಿಸಿ" "ನೀವು ಟೈಪ್ ಮಾಡಿದಂತೆ ಅಕ್ಷರಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಪ್ರದರ್ಶಿಸಿ" "ಈ ಆ್ಯಪ್, ಥರ್ಡ್-ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಎಂದು ತಿಳಿಸಿದೆ" - - + "ಡೇಟಾ ಹಂಚಿಕೆ ಮತ್ತು ಸ್ಥಳ" "ಡೇಟಾ ಹಂಚಿಕೆಯ ಮಾಹಿತಿಯು ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ" - - + "ಈ ಆ್ಯಪ್‌ ಡೇಟಾವನ್ನು ಹೇಗೆ ಹಂಚಿಕೊಳ್ಳುತ್ತದೆ ಎಂಬುದರ ಕುರಿತು, ಡೆವಲಪರ್ ""%1$s"" ಗೆ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸಿದ್ದಾರೆ. ಇದು ಕಾಲಾನಂತರದಲ್ಲಿ ಈ ಮಾಹಿತಿಯನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡುತ್ತದೆ." "ಆ್ಯಪ್, ಇವುಗಳಿಗಾಗಿ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು:" - - + "%1$s" "ಡೇಟಾ ಹಂಚಿಕೆ ಬದಲಾಗುತ್ತದೆ" "ನಿಮ್ಮ ಆ್ಯಪ್‌ನ ಆವೃತ್ತಿ, ಬಳಕೆ, ಪ್ರದೇಶ ಮತ್ತು ವಯಸ್ಸನ್ನು ಆಧರಿಸಿ ಡೇಟಾ ನಿರ್ವಹಣಾ ಅಭ್ಯಾಸಗಳು ಬದಲಾಗಬಹುದು. ""ಡೇಟಾ ಹಂಚಿಕೆಯ ಕುರಿತು ಇನ್ನಷ್ಟು" "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾ" "ಗೌಪ್ಯತೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ"" ಈ ಆ್ಯಪ್‌ನ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಬದಲಾಯಿಸಿ" "ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆ" - - + "Analytics" "ಡೆವಲಪರ್ ಸಂವಹನಗಳು" "ಜಾಹೀರಾತು ಅಥವಾ ಮಾರ್ಕೆಟಿಂಗ್" "ವಂಚನೆ ತಡೆಗಟ್ಟುವಿಕೆ, ಭದ್ರತೆ ಮತ್ತು ಅನುಸರಣೆ" - - + "ವೈಯಕ್ತಿಕಗೊಳಿಸುವಿಕೆ" "ಖಾತೆಯ ನಿರ್ವಹಣೆ" "ಡೇಟಾ ಸುರಕ್ಷತೆ" "ಸ್ಥಳ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು" @@ -619,13 +614,10 @@ "ಸ್ಥಳಕ್ಕಾಗಿ ಡೇಟಾ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ ಕುರಿತ ಅಪ್‌ಡೇಟ್‌ಗಳು" "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ತಾವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ" "ಈ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಅವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿವೆ. ಅವರು ಇದನ್ನು ಮೊದಲು ಹಂಚಿಕೊಂಡಿಲ್ಲದಿರಬಹುದು ಅಥವಾ ಈಗ ಅದನ್ನು ಜಾಹೀರಾತು ಅಥವಾ ಮಾರ್ಕೆಟಿಂಗ್ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಹಂಚಿಕೊಳ್ಳಬಹುದು." - - + "ಈ ಆ್ಯಪ್‌ಗಳ ಡೆವಲಪರ್‌ಗಳು ತಮ್ಮ ಡೇಟಾ ಹಂಚಿಕೆಯ ಅಭ್ಯಾಸಗಳ ಕುರಿತು ಆ್ಯಪ್ ಸ್ಟೋರ್‌ಗೆ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸಿದ್ದಾರೆ. ಅವರು ಅದನ್ನು ಕಾಲಾನಂತರದಲ್ಲಿ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು.\n\nನಿಮ್ಮ ಆ್ಯಪ್‌ನ ಆವೃತ್ತಿ, ಬಳಕೆ, ಪ್ರದೇಶ ಮತ್ತು ವಯಸ್ಸಿನ ಆಧಾರದ ಮೇಲೆ ಡೇಟಾ ಹಂಚಿಕೆಯ ಅಭ್ಯಾಸಗಳು ಬದಲಾಗಬಹುದು." "ಡೇಟಾ ಹಂಚಿಕೆಯ ಬಗ್ಗೆ ತಿಳಿಯಿರಿ" - - - - + "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಈಗ ಥರ್ಡ್-ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ" + "ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಈಗ ಜಾಹೀರಾತು ಅಥವಾ ಮಾರ್ಕೆಟಿಂಗ್‌ಗಾಗಿ ಥರ್ಡ್-ಪಾರ್ಟಿಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ" "{count,plural, =0{ಕೊನೆಯ ದಿನದೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}=1{ಕೊನೆಯ ದಿನದೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}one{# ದಿನಗಳೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}other{# ದಿನಗಳೊಳಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ}}" "ಈ ಸಮಯದಲ್ಲಿ ಯಾವುದೇ ಅಪ್‌ಡೇಟ್‌ಗಳಿಲ್ಲ" "ಡೇಟಾ ಹಂಚಿಕೆ ಅಪ್‌ಡೇಟ್‌ಗಳು" diff --git a/PermissionController/res/values-ko-v34/strings.xml b/PermissionController/res/values-ko-v34/strings.xml index 12cde7970a..b9dc7d9824 100644 --- a/PermissionController/res/values-ko-v34/strings.xml +++ b/PermissionController/res/values-ko-v34/strings.xml @@ -20,7 +20,6 @@ "보안 및 개인 정보 보호" "관리" "데이터" - - + "헬스 커넥트" "앱 권한 및 데이터 관리" diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index fdb4b62e0c..64bacf94dc 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -592,26 +592,21 @@ "비밀번호 표시" "입력할 때 잠깐 표시" "앱에서 위치 데이터를 서드 파티와 공유할 수 있다고 명시했습니다." - - + "데이터 공유 및 위치" "데이터 공유 정보 출처" - - + "개발자가 ""%1$s""에게 이 앱의 데이터 공유 방법에 관한 정보를 제공했습니다. 이는 추후 업데이트될 수 있습니다." "이 앱은 다음 목적으로 위치 데이터를 공유할 수 있습니다." - - - "데이터 공유 변동" - "데이터 관행은 앱 버전, 데이터 사용 방식, 사용자의 지역과 연령에 따라 다를 수 있습니다. ""데이터 공유 자세히 알아보기" + "%1$s" + "다양한 데이터 공유 방식" + "데이터 방식은 앱 버전, 데이터 사용 방식, 사용자의 지역과 연령에 따라 다를 수 있습니다. ""데이터 공유 자세히 알아보기" "내 위치 데이터" "개인 정보 보호 설정""에서 앱의 액세스 권한 변경" "앱 기능" - - + "분석" "개발자 커뮤니케이션" "광고 또는 마케팅" "사기 예방, 보안, 규정 준수" - - + "맞춤설정" "계정 관리" "데이터 보안" "위치 데이터가 공유될 수 있습니다." @@ -619,13 +614,10 @@ "위치 정보를 위한 데이터 공유 방법 업데이트" "위치 데이터 공유 방법이 변경된 앱을 검토합니다." "이러한 앱에서 위치 데이터 공유 방법이 변경되었습니다. 이전에 위치 데이터를 공유한 적이 없거나 이제 광고나 마케팅 목적으로 공유될 수 있습니다." - - + "이 앱의 개발자가 앱 스토어에 데이터 공유 관행에 관한 정보를 제공했습니다. 추후 업데이트될 수 있습니다.\n\n데이터 공유 관행은 앱 버전, 데이터 사용 방식, 사용자의 지역과 연령에 따라 다를 수 있습니다." "데이터 공유 자세히 알아보기" - - - - + "이제 위치 데이터가 서드 파티와 공유됩니다." + "이제 위치 데이터가 광고 또는 마케팅을 위해 서드 파티와 공유됩니다." "{count,plural, =0{1일 이내에 업데이트됨}=1{1일 이내에 업데이트됨}other{#일 이내에 업데이트됨}}" "현재 업데이트 없음" "데이터 공유 업데이트" diff --git a/PermissionController/res/values-ky-v34/strings.xml b/PermissionController/res/values-ky-v34/strings.xml index 5cd03d54e3..fd365a9b9a 100644 --- a/PermissionController/res/values-ky-v34/strings.xml +++ b/PermissionController/res/values-ky-v34/strings.xml @@ -20,7 +20,6 @@ "Коопсуздук жана купуялык" "Башкаруу элементтери" "Маалымат" - - + "Health Connect" "Колдонмонун уруксаттары жана маалыматтарды тескөө" diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index 8b22cbf6fc..5e0fbafad7 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -592,26 +592,21 @@ "Сырсөз көрүнсүн" "Сырсөз терилип жатканда символдор бир саамга көрүнөт" "Бул колдонмо турган жериңиз тууралуу маалыматты үчүнчү тараптар менен бөлүшүүсү мүмкүн" - - + "Маалыматты бөлүшүү жана турган жер" "Дайын-даректерди бөлүшүү тууралуу маалымат кайдан алынат" - - + "Иштеп чыгуучу бул колдонмо маалыматтарды кантип бөлүшкөнүн төмөнкүгө билдирди: ""%1$s"". Ал бул маалыматты жаңыртып турушу мүмкүн." "Колдонмо турган жериңиз тууралуу маалыматты төмөнкүлөр үчүн бөлүшүшү мүмкүн:" - - + "%1$s" "Маалымат ар кандай жолдор менен бөлүшүлөт" "Дайын-даректерди иштетүү жолдору колдонмоңуздун версиясы, колдонулушу, аймак жана курагыңызга жараша айырмаланышы мүмкүн. ""Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" "Турган жериңиз" "Бул колдонмонун кирүү мүмкүнчүлүгүн ""купуялык параметрлеринен"" өзгөртүңүз" "Колдонмонун функциялары" - - + "Analytics" "Иштеп чыгуучу менен байланышуу" "Жарнамалоо же маркетинг" "Шылуундуктан коргонуу, коопсуздук жана шайкештик" - - + "Жекелештирүү" "Аккаунтту тескөө" "Маалыматтардын коопсуздугу" "Турган жериңиз тууралуу маалымат бөлүшүлүп жатышы мүмкүн" @@ -619,13 +614,10 @@ "Турган жериңиз тууралуу маалыматты бөлүшүү ыкмасын жаңыртуу" "Жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрткөн колдонмолорду карап чыгыңыз" "Бул колдонмолор жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрттү. Алар бул маалыматты мурда бөлүшпөй же азыр жарнамалоо же маркетинг максаттарында бөлүшүшү мүмкүн." - - + "Бул колдонмолорду иштеп чыгуучулар дайын-даректерди бөлүшүү тууралуу маалыматты колдонмолор дүкөнүнө беришти. Алар бул маалыматты жаңыртып турушу мүмкүн.\n\nМаалыматтарды бөлүшүү ыкмасы колдонмонун версиясына, колдонулушуна, регионго жана курагыңызга жараша айырмаланышы мүмкүн." "Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" - - - - + "Жүргөн жериңиз тууралуу маалымат үчүнчү тараптар менен бөлүшүлүп жатат" + "Жүргөн жериңизди үчүнчү тараптар жарнамалоо же маркетинг максатында билип турушат" "{count,plural, =0{Кечээ жаңыртылды}=1{Кечээ жаңыртылды}other{# күн мурда жаңыртылды}}" "Азырынча жаңыртуулар жок" "Маалыматты бөлүшүү жаңыртуулары" diff --git a/PermissionController/res/values-lo-v34/strings.xml b/PermissionController/res/values-lo-v34/strings.xml index eb4cbefd32..e7ce78aea3 100644 --- a/PermissionController/res/values-lo-v34/strings.xml +++ b/PermissionController/res/values-lo-v34/strings.xml @@ -20,7 +20,6 @@ "ຄວາມປອດໄພ ແລະ ຄວາມເປັນສ່ວນຕົວ" "ການຄວບຄຸມ" "ຂໍ້ມູນ" - - + "Health Connect" "ການອະນຸຍາດແອັບ ແລະ ການຈັດການຂໍ້ມູນ" diff --git a/PermissionController/res/values-lo/strings.xml b/PermissionController/res/values-lo/strings.xml index 45a43af700..4418e1e7f6 100644 --- a/PermissionController/res/values-lo/strings.xml +++ b/PermissionController/res/values-lo/strings.xml @@ -592,26 +592,21 @@ "ສະແດງລະຫັດຜ່ານ" "ສະແດງຕົວອັກສອນເປັນເວລາສັ້ນໆໃນເວລາພິມ" "ແອັບນີ້ລະບຸວ່າມັນອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ກັບພາກສ່ວນທີສາມ" - - + "ການແບ່ງປັນຂໍ້ມູນ ແລະ ສະຖານທີ່" "ແຫຼ່ງທີ່ມາຂອງລາຍລະອຽດການແບ່ງປັນຂໍ້ມູນ" - - + "ນັກພັດທະນາແອັບໄດ້ໃຫ້ຂໍ້ມູນໄວ້ໃນ ""%1$s"" ກ່ຽວກັບວິທີທີ່ແອັບນີ້ແບ່ງປັນຂໍ້ມູນ. ໂດຍອາດອັບເດດຂໍ້ມູນນີ້ເມື່ອເວລາຜ່ານໄປ." "ແອັບນີ້ອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຍ້ອນເຫດຜົນຕໍ່ໄປນີ້:" - - + "%1$s" "ການແບ່ງປັນຂໍ້ມູນອາດແຕກຕ່າງກັນໄປ" "ການເຝິກແອບຂໍ້ມູນອາດແຕກຕ່າງກັນໄປຕາມເວີຊັນຂອງແອັບ, ການນຳໃຊ້, ພາກພື້ນ ແລະ ອາຍຸຂອງທ່ານ. ""ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການແບ່ງປັນຂໍ້ມູນ" "ຂໍ້ມູນສະຖານທີ່ຂອງທ່ານ" "ປ່ຽນສິດເຂົ້າເຖິງຂອງແອັບນີ້ໃນ ""ການຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວ" "ຟັງຊັນການນຳໃຊ້ແອັບ" - - + "Analytics" "ການສື່ສານຂອງນັກພັດທະນາ" "ການໂຄສະນາ ຫຼື ການຕະຫຼາດ" "ການປ້ອງກັນການສໍ້ໂກງ, ຄວາມປອດໄພ ແລະ ການປະຕິບັດຕາມ" - - + "ການປັບແຕ່ງເປັນແບບສ່ວນຕົວ" "ການຈັດການບັນຊີ" "ຄວາມປອດໄພຂອງຂໍ້ຄວາມ" "ອາດມີການແບ່ງປັນຂໍ້ມູນສະຖານທີ່" @@ -619,13 +614,10 @@ "ການອັບເດດການແບ່ງປັນຂໍ້ມູນສະຖານທີ່" "ກວດສອບແອັບທີ່ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານ" "ແອັບເຫຼົ່ານີ້ໄດ້ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານແລ້ວ. ແອັບເຫຼົ່ານີ້ອາດບໍ່ເຄີຍແບ່ງປັນຂໍ້ມູນມາກ່ອນ ຫຼື ອາດແບ່ງປັນຂໍ້ມູນເພື່ອຈຸດປະສົງໃນການໂຄສະນາ ຫຼື ການຕະຫຼາດ." - - + "ນັກພັດທະນາແອັບເຫຼົ່ານີ້ໄດ້ໃຫ້ຂໍ້ມູນກ່ຽວກັບແນວທາງປະຕິບັດໃນການແບ່ງປັນຂໍ້ມູນຂອງເຂົາເຈົ້າໄວ້ໃນ App Store. ເຂົາເຈົ້າອາດອັບເດດຂໍ້ມູນເມື່ອເວລາຜ່ານໄປ.\n\nແນວທາງປະຕິບັດໃນການແບ່ງປັນຂໍ້ມູນອາດແຕກຕ່າງກັນໄປຕາມເວີຊັນຂອງແອັບ, ການນຳໃຊ້, ພາກພື້ນ ແລະ ອາຍຸຂອງທ່ານ." "ສຶກສາກ່ຽວກັບການແບ່ງປັນຂໍ້ມູນ" - - - - + "ຕອນນີ້ມີການແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານກັບພາກສ່ວນທີສາມ" + "ຕອນນີ້ມີການແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານກັບພາກສ່ວນທີສາມເພື່ອການໂຄສະນາ ຫຼື ການຕະຫຼາດແລ້ວ" "{count,plural, =0{ໄດ້ອັບເດດພາຍໃນມື້ທີ່ຜ່ານມາ}=1{ໄດ້ອັບເດດພາຍໃນມື້ທີ່ຜ່ານມາ}other{ໄດ້ອັບເດດພາຍໃນ # ມື້ທີ່ຜ່ານມາ}}" "ບໍ່ມີການອັບເດດໃນຂະນະນີ້" "ການອັບເດດການແບ່ງປັນຂໍ້ມູນ" diff --git a/PermissionController/res/values-lt-v34/strings.xml b/PermissionController/res/values-lt-v34/strings.xml index 32f0e13b49..5f16cd77a7 100644 --- a/PermissionController/res/values-lt-v34/strings.xml +++ b/PermissionController/res/values-lt-v34/strings.xml @@ -20,7 +20,6 @@ "Sauga ir privatumas" "Valdikliai" "Duomenys" - - + "Health Connect" "Programų leidimai ir duomenų valdymas" diff --git a/PermissionController/res/values-lt/strings.xml b/PermissionController/res/values-lt/strings.xml index 5e48f72ebd..cd54e3eabd 100644 --- a/PermissionController/res/values-lt/strings.xml +++ b/PermissionController/res/values-lt/strings.xml @@ -592,26 +592,21 @@ "Rodyti slaptažodžius" "Trumpai rodyti simbolius vedant tekstą" "Ši programa nurodė, kad gali bendrinti vietovės duomenis su trečiosiomis šalimis" - - + "Duomenų bendrinimas ir vietovė" "Iš kur gaunama duomenų bendrinimo informacija" - - + "Kūrėjas pateikė informacijos ""%1$s"" apie duomenų bendrinimą šioje programoje. Jis gali atnaujinti šią informaciją per laiką." "Programoje bendrinami vietovės duomenys" - - + "%1$s" "Duomenų bendrinimas skiriasi" "Duomenų praktika gali skirtis, atsižvelgiant į jūsų programos versiją, naudojimą, regioną ir amžių. ""Daugiau apie duomenų bendrinimą" "Jūsų vietovės duomenys" "Keiskite šios programos prieigą ""privatumo nustatymuose" "Programos funkcijos" - - + "Analizė" "Kūrėjų komunikacija" "Reklamavimas ar rinkodara" "Apsauga nuo apgaulių, sauga ir taisyklių laikymasis" - - + "Suasmeninimas" "Paskyros valdymas" "Duomenų sauga" "Vietovės duomenys gali būti bendrinami" @@ -619,13 +614,10 @@ "Duomenų bendrinimo atnaujinimai pagal vietovę" "Peržiūrėkite programas, kuriose pakeisti vietovės duomenų bendrinimo metodai" "Šiose programose pakeisti vietovės duomenų bendrinimo metodai Gali būti, kad anksčiau jie nebuvo bendrinami, arba dabar jie gali būti bendrinami reklamavimo ar rinkodaros tikslais." - - + "Šių programų kūrėjai pateikė informacijos apie savo duomenų bendrinimo praktikos metodus programų parduotuvėje. Jie gali ją atnaujinti per laiką.\n\nDuomenų bendrinimo praktikos metodai gali skirtis atsižvelgiant į programos versiją, naudojimą, regioną ir amžių." "Sužinokite apie duomenų bendrinimą" - - - - + "Jūsų vietovės duomenys dabar bendrinami su trečiosiomis šalimis" + "Jūsų vietovės duomenys dabar bendrinami su trečiosiomis šalimis reklamavimo arba rinkodaros tikslais" "{count,plural, =0{Atnaujinta per pastarąją dieną}=1{Atnaujinta per pastarąją dieną}one{Atnaujinta per pastarąją # dieną}few{Atnaujinta per pastarąsias # dienas}many{Atnaujinta per pastarąsias # dienos}other{Atnaujinta per pastarąsias # dienų}}" "Šiuo metu nėra naujinių" "Duomenų bendrinimo naujiniai" diff --git a/PermissionController/res/values-lv-v34/strings.xml b/PermissionController/res/values-lv-v34/strings.xml index fb20fc666c..9893147efd 100644 --- a/PermissionController/res/values-lv-v34/strings.xml +++ b/PermissionController/res/values-lv-v34/strings.xml @@ -20,7 +20,6 @@ "Drošība un konfidencialitāte" "Vadīklas" "Dati" - - + "Health Connect" "Lietotņu atļaujas un datu pārvaldība" diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml index 7e5312d62b..28d4ceedcc 100644 --- a/PermissionController/res/values-lv/strings.xml +++ b/PermissionController/res/values-lv/strings.xml @@ -592,26 +592,21 @@ "Rādīt paroles" "Rakstot tiek īslaicīgi rādītas rakstzīmes" "Lietotne norādīja, ka tā var kopīgot atrašanās vietas datus ar trešajām pusēm." - - + "Datu kopīgošana un atrašanās vieta" "Datu kopīgošanas informācijas avots" - - + "Izstrādātājs sniedza lietotņu veikalam ""%1$s"" informāciju par to, kā šajā lietotnē tiek kopīgoti dati. Laika gaitā izstrādātājs var šo informāciju atjaunināt." "Atrašanās vietas datu kopīgošanas nolūki lietotnē" - - + "%1$s" "Datu kopīgošana var atšķirties" "Datu apstrāde var atšķirties atkarībā no lietotnes versijas un izmantojuma, kā arī jūsu reģiona un vecuma. ""Uzziniet vairāk par datu kopīgošanu." "Jūsu atrašanās vietas dati" "Varat mainīt šīs lietotnes piekļuvi ""konfidencialitātes iestatījumos""." "Lietotnes funkcionalitāte" - - + "Analīze" "Izstrādātāja saziņa" "Reklamēšana vai mārketings" "Krāpšanas novēršana, drošība un atbilstības nodrošināšana" - - + "Personalizēšana" "Konta pārvaldība" "Datu drošība" "Atrašanās vietas dati var tikt kopīgoti" @@ -619,13 +614,10 @@ "Atjauninājumi atrašanās vietas datu kopīgošanā" "Pārskatiet lietotnes, kurās ir mainīti atrašanās vietas datu kopīgošanas veidi." "Šajās lietotnēs ir mainīti atrašanās vietas datu kopīgošanas veidi. Varbūt tās iepriekš nekopīgoja šādus datus, bet varbūt tagad tos kopīgo reklamēšanas vai mārketinga nolūkos." - - + "Šo lietotņu izstrādātāji sniedza kādam lietotņu veikalam informāciju par datu kopīgošanas praksi. Laika gaitā viņi var šo informāciju atjaunināt.\n\nDatu kopīgošanas prakse var atšķirties atkarībā no lietotnes versijas un izmantojuma, kā arī jūsu reģiona un vecuma." "Uzzināt vairāk par datu kopīgošanu" - - - - + "Jūsu atrašanās vietas dati tagad tiek kopīgoti ar trešajām pusēm." + "Jūsu atrašanās vietas dati tagad tiek kopīgoti ar trešajām pusēm reklamēšanas vai mārketinga nolūkos." "{count,plural, =0{Atjaunināta pēdējās diennakts laikā}=1{Atjaunināta pēdējās diennakts laikā}zero{Atjaunināta pēdējo # dienu laikā}one{Atjaunināta pēdējo # dienu laikā}other{Atjaunināta pēdējo # dienu laikā}}" "Šobrīd nav atjauninājumu" "Datu kopīgošanas atjauninājumi" diff --git a/PermissionController/res/values-mk-car/strings.xml b/PermissionController/res/values-mk-car/strings.xml new file mode 100644 index 0000000000..dfee73b031 --- /dev/null +++ b/PermissionController/res/values-mk-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ако некоја апликација не се користи неколку месеци:\n\n• дозволите се отстрануваат за да се заштитат вашите податоци\n• привремените датотеки се отстрануваат за да се ослободи простор" + diff --git a/PermissionController/res/values-mk-v34/strings.xml b/PermissionController/res/values-mk-v34/strings.xml new file mode 100644 index 0000000000..2cf96658e2 --- /dev/null +++ b/PermissionController/res/values-mk-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Безбедност и приватност" + "Контроли" + "Податоци" + "Health Connect" + "Дозволи за апликациите и управување со податоците" + diff --git a/PermissionController/res/values-mk/strings.xml b/PermissionController/res/values-mk/strings.xml index 0150255049..ed16b88be0 100644 --- a/PermissionController/res/values-mk/strings.xml +++ b/PermissionController/res/values-mk/strings.xml @@ -591,68 +591,36 @@ "Нека се прикажува известување кога апликациите пристапуваат до текст, слики или други содржини што сте ги копирале" "Прикажувај ги лозинките" "Прикажувај ги знаците накратко додека пишувам" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Апликацијава наведе дека можеби ќе ги споделува вашите податоци за локацијата со трети страни" + "Споделување податоци и локација" + "Од каде доаѓаат информациите за споделувањето податоци" + "Програмерот доставил информации до ""%1$s"" за начинот на кој апликацијава споделува податоци. Може да ги ажурира овие информации со текот на времето." + "Апл. може да споделува податоци за локацијата за:" + "%1$s" + "Споделувањето податоци варира" + "Практиките за споделување податоци може да се разликуваат според верзијата на апликацијата, користењето, регионот и вашата возраст. ""Повеќе информации за споделувањето податоци" + "Вашите податоци за локација" + "Променете го пристапот на апликацијава во ""поставките за приватност" + "Функционалност на апликацијата" + "Аналитика" + "Комуникација со програмерот" + "Рекламирање или маркетинг" + "Спречување измами, безбедност и сообразност" + "Персонализација" + "Управување со сметката" + "Безбедност на податоците" + "Можно е да се споделуваат податоците за локација" + "Апликацијава наведе дека можеби ќе ги споделува вашите податоци за локацијата со трети страни" + "Промени во споделувањето на податоците за локација" + "Прегледајте ги апликациите што го промениле начинот на кој може да ги споделуваат вашите податоци за локација" + "Овие апликации го промениле начинот на кој може да ги споделуваат вашите податоци за локација. Претходно можеби не ги споделувале или можеби сега ги споделуваат во рекламни или маркетиншки цели." + "Програмерите на овие апликации доставиле информации до продавница за апликации околу нивните практики за споделување податоци. Може да ги ажурираат со текот на времето.\n\nПрактиките за споделување податоци може да се разликуваат според верзијата на апликацијата, користењето, регионот и вашата возраст." + "Дознајте повеќе за споделувањето податоци" + "Вашите податоци за локација сега се споделуваат со трети страни" + "Вашите податоци за локација сега се споделуваат со трети страни во рекламни или маркетиншки цели" + "{count,plural, =0{Ажурирано во текот на минатиот ден}=1{Ажурирано во текот на минатиот ден}one{Ажурирано во текот на минатите # ден}other{Ажурирано во текот на минатите # дена}}" + "Во моментов нема промени" + "Промени во споделувањето податоци" + "Некои апликации го променија начинот на кој може да ги споделуваат вашите податоци за локација" + "Поставки" diff --git a/PermissionController/res/values-ml/strings.xml b/PermissionController/res/values-ml/strings.xml index 4436bd8da0..b154de53dc 100644 --- a/PermissionController/res/values-ml/strings.xml +++ b/PermissionController/res/values-ml/strings.xml @@ -617,7 +617,7 @@ "ഡാറ്റ പങ്കിടുന്ന രീതികളുടെ വിവരങ്ങൾ ഈ ആപ്പുകളുടെ ഡെവലപ്പർമാർ ആപ്പ് സ്‌റ്റോറിൽ നൽകിയിട്ടുണ്ട്. കാലക്രമേണ അവർ ഇത് അപ്ഡേറ്റ് ചെയ്തേക്കാം.\n\nനിങ്ങളുടെ പ്രായവും ആപ്പിന്റെ പതിപ്പും ഉപയോഗവും പ്രദേശവും അടിസ്ഥാനമാക്കി, ഡാറ്റ പങ്കിടുന്ന രീതികൾ വ്യത്യാസപ്പെടാം." "ഡാറ്റ പങ്കിടുന്നതിനെ കുറിച്ച് അറിയുക" "നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ ഇപ്പോൾ മൂന്നാം കക്ഷികളുമായി പങ്കിടുന്നു" - "പരസ്യം ചെയ്യൽ, മാർക്കറ്റിംഗ് എന്നിവയുമായി ബന്ധപ്പെട്ട ആവശ്യങ്ങൾക്കായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ ഇപ്പോൾ മൂന്നാം കക്ഷികളുമായി പങ്കിടുന്നു" + "പരസ്യം ചെയ്യലിനും മാർക്കറ്റിംഗിനുമായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ ഇപ്പോൾ മൂന്നാം കക്ഷികളുമായി പങ്കിടുന്നു" "{count,plural, =0{കഴിഞ്ഞ ദിവസം അപ്ഡേറ്റ് ചെയ്തവ}=1{കഴിഞ്ഞ ദിവസം അപ്ഡേറ്റ് ചെയ്തവ}other{# ദിവസത്തിനുള്ളിൽ അപ്ഡേറ്റ് ചെയ്തവ}}" "ഇപ്പോൾ അപ്ഡേറ്റുകളൊന്നുമില്ല" "ഡാറ്റ പങ്കിടുന്നത് സംബന്ധിച്ച അപ്‌ഡേറ്റുകൾ" diff --git a/PermissionController/res/values-mn-v34/strings.xml b/PermissionController/res/values-mn-v34/strings.xml index 00f6849196..4223d1c6b8 100644 --- a/PermissionController/res/values-mn-v34/strings.xml +++ b/PermissionController/res/values-mn-v34/strings.xml @@ -20,7 +20,6 @@ "Аюулгүй байдал болон нууцлал" "Тохиргоо" "Өгөгдөл" - - + "Health Connect" "Аппын зөвшөөрөл болон өгөгдлийн удирдлага" diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml index 9061456079..2a5b545702 100644 --- a/PermissionController/res/values-mn/strings.xml +++ b/PermissionController/res/values-mn/strings.xml @@ -592,26 +592,21 @@ "Нууц үгнүүдийг харуулах" "Таныг бичиж явцад тэмдэгтүүдийг түр үзүүлэх" "Энэ апп таны байршлын өгөгдлийг гуравдагч талуудтай хуваалцаж магадгүйг мэдэгдсэн" - - + "Өгөгдөл хуваалцах болон байршил" "Өгөгдөл хуваалцах мэдээллийг хаанаас авдаг вэ?" - - + "Хөгжүүлэгч энэ апп өгөгдөл хэрхэн хуваалцдаг талаарх мэдээллийг ""%1$s-д"" өгсөн. Энэ нь тухайн мэдээллийг цагийн аясаар шинэчилж магадгүй." "Апп байршлын өгөгдлийг дараах зорилгоор хуваалцана:" - - + "%1$s" "Өгөгдөл хуваалцах нь ялгаатай" "Өгөгдлийн практик нь таны аппын хувилбар, хэрэглээ, бүс нутаг болон наснаас хамаарч янз бүр байж болно. ""Өгөгдөл хуваалцах тухай дэлгэрэнгүй" "Таны байршлын өгөгдөл" "Энэ аппын хандалтыг ""нууцлалын тохиргоонд"" өөрчилнө үү" "Аппын ажиллагаа" - - + "Задлан шинжлэл" "Хөгжүүлэгчийн харилцаа холбоо" "Сурталчилгаа эсвэл маркетинг" "Залилангаас урьдчилан сэргийлэх, аюулгүй байдал болон дагаж мөрдөх үүрэг" - - + "Хувийн тохиргоо" "Бүртгэлийн удирдлага" "Өгөгдлийн аюулгүй байдал" "Байршлын өгөгдлийг хуваалцаж магадгүй" @@ -619,13 +614,10 @@ "Байршлын өгөгдөл хуваалцах шинэчлэлтүүд" "Таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн аппуудыг шалгана уу" "Эдгээр апп таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн. Тэд үүнийг өмнө нь хуваалцаагүй байж магадгүй эсвэл одоо үүнийг сурталчилгаа, маркетингийн зорилгоор хуваалцаж болзошгүй." - - + "Эдгээр аппын хөгжүүлэгчид өөрсдийн өгөгдөл хуваалцах практикийнхаа талаарх мэдээллийг апп дэлгүүрт өгсөн. Тэд тухайн мэдээллийг цагийн аясаар шинэчилж магадгүй.\n\nӨгөгдөл хуваалцах практик нь таны аппын хувилбар, хэрэглээ, бүс нутаг болон наснаас хамаарч янз бүр байж болно." "Өгөгдөл хуваалцах талаар мэдэж авах" - - - - + "Таны байршлын өгөгдлийг одоо гуравдагч талуудтай хуваалцаж байна" + "Таны байршлын өгөгдлийг одоо сурталчилгаа эсвэл маркетингийн зорилгоор гуравдагч талтай хуваалцаж байна" "{count,plural, =0{Сүүлийн өдөрт шинэчилсэн}=1{Сүүлийн өдөрт шинэчилсэн}other{# хоногийн дотор шинэчилсэн}}" "Одоогоор ямар ч шинэчлэлт алга" "Өгөгдөл хуваалцах тухай шинэчлэлт" diff --git a/PermissionController/res/values-mr-v34/strings.xml b/PermissionController/res/values-mr-v34/strings.xml index 7054e74479..1906700e3c 100644 --- a/PermissionController/res/values-mr-v34/strings.xml +++ b/PermissionController/res/values-mr-v34/strings.xml @@ -20,7 +20,6 @@ "सुरक्षा आणि गोपनीयता" "नियंत्रणे" "डेटा" - - + "Health Connect" "अ‍ॅप परवानग्या आणि डेटा व्यवस्थापन" diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml index aa93ef547c..8d44fcf819 100644 --- a/PermissionController/res/values-mr/strings.xml +++ b/PermissionController/res/values-mr/strings.xml @@ -592,26 +592,21 @@ "पासवर्ड दाखवा" "तुम्ही टाइप कराल त्‍याप्रमाणे वर्ण थोडक्‍यात डिस्प्ले करा" "हे अ‍ॅप तृतीय पक्षांसोबत तुमचा स्थान डेटा शेअर करू शकते असे या अ‍ॅपने नमूद केले आहे" - - + "डेटा शेअरिंग आणि स्थान" "डेटा शेअरिंग माहिती कुठून मिळते" - - + "हे अ‍ॅप डेटा कसे शेअर करते याबद्दल डेव्हलपरने ""%1$s"" यांना माहिती पुरवली. ते कालांतराने ही माहिती अपडेट करू शकते." "अ‍ॅप पुढील गोष्टींसाठी स्‍थान डेटा शेअर करू शकते:" - - + "%1$s" "डेटा शेअरिंग बदलते" "तुमच्या अ‍ॅपची आवृत्ती, वापर, प्रदेश आणि वय यांनुसार डेटाविषयक कार्यपद्धती बदलू शकतात. ""डेटा शेअरिंगबद्दल आणखी माहिती" "तुमचा स्थान डेटा" "गोपनीयता सेटिंग्ज"" मध्ये या अ‍ॅपचा अ‍ॅक्सेस बदला" "अ‍ॅपची कार्यक्षमता" - - + "विश्लेषण" "डेव्हलपर संवाद" "जाहिरात किंवा मार्केटिंग" "घोटाळा प्रतिबंध, सुरक्षा आणि पालन" - - + "पर्सनलायझेशन" "खाते व्यवस्थापन" "डेटासंबंधित सुरक्षितता" "स्‍थान डेटा शेअर केला जाऊ शकतो" @@ -619,13 +614,10 @@ "स्थानासाठी डेटा शेअरिंगसंबंधित अपडेट" "ज्या अ‍ॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली अशा अ‍ॅप्सचे पुनरावलोकन करा" "या अ‍ॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली आहे. त्यांनी तो पूर्वी शेअर केलेला नसू शकतो किंवा आता जाहिरात करणे अथवा मार्केटिंग उद्देशांसाठी शेअर करू शकतात." - - + "या अ‍ॅप्सच्या डेव्हलपरनी अ‍ॅप स्टोअरला त्यांच्या डेटा शेअरिंग पद्धतींबद्दल माहिती पुरवली आहे. ही माहिती ते कालांतराने अपडेट करू शकतात.\n\nतुमची अ‍ॅपची आवृत्ती, वापर, प्रदेश आणि वय या गोष्टींनुसार डेटा शेअरिंग पद्धती बदलू शकतात." "डेटा शेअरिंगबद्दल जाणून घ्या" - - - - + "तुमचा स्थान डेटा आता तृतीय पक्षांसोबत शेअर केला आहे" + "जाहिरात करणे किंवा मार्केटिंग उद्देशांसाठी तुमचा स्थान डेटा आता तृतीय पक्षांसोबत शेअर केला आहे" "{count,plural, =0{Updated within the last day}=1{मागील एका दिवसामध्ये अपडेट केले}other{मागील # दिवसांमध्ये अपडेट केले}}" "यावेळी कोणतीही अपडेट नाहीत" "डेटा शेअरिंगचे अपडेट" diff --git a/PermissionController/res/values-ms-v34/strings.xml b/PermissionController/res/values-ms-v34/strings.xml index 49bbe3f88a..d4492aa5a2 100644 --- a/PermissionController/res/values-ms-v34/strings.xml +++ b/PermissionController/res/values-ms-v34/strings.xml @@ -20,7 +20,6 @@ "Keselamatan & privasi" "Kawalan" "Data" - - + "Health Connect" "Kebenaran apl dan pengurusan data" diff --git a/PermissionController/res/values-ms/strings.xml b/PermissionController/res/values-ms/strings.xml index e426f9491c..bbd94b38d6 100644 --- a/PermissionController/res/values-ms/strings.xml +++ b/PermissionController/res/values-ms/strings.xml @@ -592,26 +592,21 @@ "Tunjukkan kata laluan" "Paparkan aksara seketika sambil anda menaip" "Apl ini menyatakan bahawa data lokasi anda mungkin dikongsi dengan pihak ketiga" - - + "Perkongsian data dan lokasi" "Sumber maklumat perkongsian data" - - + "Pembangun memberikan maklumat kepada ""%1$s"" tentang cara apl ini berkongsi data. Pembangun mungkin mengemaskinikan maklumat ini dari semasa ke semasa." "Apl ini mungkin berkongsi data lokasi untuk:" - - + "%1$s" "Perkongsian data berbeza-beza" "Amalan privasi data mungkin berbeza-beza berdasarkan versi apl, penggunaan, rantau dan umur anda. ""Lagi tentang perkongsian data" "Data lokasi anda" "Tukar akses apl ini dalam ""tetapan privasi" "Fungsi apl" - - + "Analitis" "Komunikasi pembangun" "Pengiklanan atau pemasaran" "Pencegahan penipuan, keselamatan dan pematuhan" - - + "Pemeribadian" "Pengurusan akaun" "Keselamatan data" "Data lokasi mungkin dikongsi" @@ -619,13 +614,10 @@ "Kemaskinian perkongsian data untuk lokasi" "Semak apl yang mengubah cara apl boleh berkongsi data lokasi anda" "Apl ini telah mengubah cara apl boleh berkongsi data lokasi anda. Apl mungkin tidak berkongsi data lokasi sebelum ini atau mungkin berkongsi data lokasi sekarang untuk tujuan pengiklanan atau pemasaran." - - + "Pembangun apl ini memberikan maklumat tentang amalan perkongsian data mereka kepada gedung apl. Mereka mungkin mengemaskinikan maklumat tersebut dari semasa ke semasa.\n\nAmalan perkongsian data mungkin berbeza-beza berdasarkan versi apl, penggunaan, wilayah dan umur anda." "Ketahui tentang perkongsian data" - - - - + "Data lokasi anda kini dikongsi dengan pihak ketiga" + "Data lokasi anda kini dikongsi dengan pihak ketiga untuk pengiklanan atau pemasaran" "{count,plural, =0{Dikemaskinikan pada hari terakhir}=1{Dikemaskinikan pada hari terakhir}other{Dikemaskinikan dalam masa # hari}}" "Tiada kemaskinian pada masa ini" "Kemaskinian perkongsian data" diff --git a/PermissionController/res/values-my-car/strings.xml b/PermissionController/res/values-my-car/strings.xml new file mode 100644 index 0000000000..8af77da782 --- /dev/null +++ b/PermissionController/res/values-my-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "အက်ပ်ကို လအနည်းငယ်ကြာ မသုံးပါက-\n\n• သင့်ဒေတာကို ကာကွယ်ရန် ခွင့်ပြုချက်များ ဖယ်ရှားသည်\n• နေရာလွတ်ပြုလုပ်ရန် ယာယီဖိုင်များ ဖယ်ရှားသည်" + diff --git a/PermissionController/res/values-my-v34/strings.xml b/PermissionController/res/values-my-v34/strings.xml new file mode 100644 index 0000000000..197935b0e1 --- /dev/null +++ b/PermissionController/res/values-my-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "လုံခြုံရေးနှင့် ကိုယ်ရေးအချက်အလက်လုံခြုံမှု" + "သတ်မှတ်ချက်များ" + "ဒေတာ" + "Health Connect" + "အက်ပ်ခွင့်ပြုချက်များနှင့် ဒေတာစီမံခန့်ခွဲမှု" + diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index c7dbc1a995..7176a437da 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -591,68 +591,36 @@ "အက်ပ်များက သင်မိတ္တူကူးထားသော စာသား၊ ပုံများ (သို့) အခြားအကြောင်းအရာကို သုံးသောအခါ အကြောင်းကြားပါ" "စကားဝှက်များပြရန်" "စာရိုက်သည့်အခါ အက္ခရာများကို ခဏတာပြသည်" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "ဤအက်ပ်က ၎င်းသည် သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်" + "ဒေတာမျှဝေခြင်းနှင့် တည်နေရာ" + "ဒေတာမျှဝေခြင်း အချက်အလက် ရလာသောနေရာ" + "ဆော့ဖ်ဝဲရေးသူသည် ဤအက်ပ် ဒေတာမျှဝေပုံအကြောင်း အချက်အလက်ကို ""%1$s"" သို့ ပေးထားသည်။ ၎င်းက ဤအချက်အလက်ကို အချိန်နှင့်အမျှ အပ်ဒိတ်လုပ်နိုင်သည်။" + "အက်ပ်က အောက်ပါတို့နှင့် တည်နေရာဒေတာမျှဝေနိုင်သည်-" + "%1$s" + "ဒေတာမျှဝေခြင်း ကွဲပြားပုံ" + "ဒေတာလုပ်ထုံးလုပ်နည်းများသည် သင်၏ အက်ပ်ဗားရှင်း၊ အသုံးပြုမှု၊ ဒေသနှင့် အသက်အပေါ် အခြေခံ၍ ကွဲပြားနိုင်သည်။ ""ဒေတာမျှဝေခြင်းအကြောင်း နောက်ထပ်အချက်အလက်" + "သင်၏ တည်နေရာဒေတာ" + "ဤအက်ပ်၏ သုံးခွင့်ကို ""ကိုယ်ရေးအချက်အလက်လုံခြုံမှု ဆက်တင်များ"" တွင် ပြောင်းပါ" + "အက်ပ်လုပ်ဆောင်ချက်" + "စိတ်ဖြာလေ့လာချက်" + "ဆော့ဖ်ဝဲရေးသူဆိုင်ရာ ဆက်သွယ်မှုများ" + "ကြော်ငြာခြင်း (သို့) အရောင်းမြှင့်တင်ခြင်း" + "လိမ်လည်မှု ကာကွယ်ရေး၊ လုံခြုံရေးနှင့် လိုက်နာမှု" + "ပုဂ္ဂိုလ်ရေးသီးသန့်ပြုလုပ်ခြင်း" + "အကောင့်စီမံခန့်ခွဲမှု" + "ဒေတာ ဘေးကင်းလုံခြုံရေး" + "တည်နေရာဒေတာကို မျှဝေနိုင်သည်" + "ဤအက်ပ်က ၎င်းသည် သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်" + "တည်နေရာအတွက် ဒေတာမျှဝေခြင်း အပ်ဒိတ်" + "သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သောနည်းလမ်းအား ပြောင်းထားသော အက်ပ်များကို စိစစ်ပါ" + "ဤအက်ပ်များသည် ၎င်းတို့က သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သော နည်းလမ်းကို ပြောင်းလိုက်ပါပြီ။ ၎င်းတို့သည် ဒေတာကို ယခင်က မျှဝေထားခြင်း မရှိနိုင်ပါ သို့မဟုတ် ကြော်ငြာခြင်း (သို့) အရောင်းမြှင့်တင်ခြင်းတို့အတွက် ဒေတာကို ယခုမျှဝေနိုင်သည်။" + "ဤအက်ပ်များ၏ ဆော့ဖ်ဝဲရေးသူများသည် ၎င်းတို့၏ ဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများအကြောင်း အချက်အလက်ကို အက်ပ်စတိုးသို့ ပေးထားသည်။ သူတို့သည် ၎င်းကို အချိန်နှင့်အမျှ အပ်ဒိတ်လုပ်နိုင်သည်။\n\nဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများသည် သင်၏ အက်ပ်ဗားရှင်း၊ အသုံးပြုမှု၊ ဒေသနှင့် အသက်အရွယ်ပေါ် အခြေခံ၍ ကွဲပြားနိုင်သည်။" + "ဒေတာမျှဝေခြင်းအကြောင်း လေ့လာရန်" + "သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် ယခု မျှဝေလိုက်ပါပြီ" + "ကြော်ငြာခြင်း (သို့) အရောင်းမြှင့်တင်ခြင်းအတွက် သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် ယခု မျှဝေလိုက်ပါပြီ" + "{count,plural, =0{မနေ့က အပ်ဒိတ်လုပ်ထားသည်}=1{မနေ့က အပ်ဒိတ်လုပ်ထားသည်}other{ပြီးခဲ့သော # ရက်က အပ်ဒိတ်လုပ်ထားသည်}}" + "လောလောဆယ် အပ်ဒိတ်မရှိပါ" + "ဒေတာမျှဝေခြင်း အပ်ဒိတ်" + "အက်ပ်အချို့သည် ၎င်းတို့က သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သော နည်းလမ်းကို ပြောင်းထားသည်" + "ဆက်တင်များ" diff --git a/PermissionController/res/values-nb-v34/strings.xml b/PermissionController/res/values-nb-v34/strings.xml index 5cc56cf3b3..1849829f72 100644 --- a/PermissionController/res/values-nb-v34/strings.xml +++ b/PermissionController/res/values-nb-v34/strings.xml @@ -20,7 +20,6 @@ "Sikkerhet og personvern" "Kontroller" "Data" - - + "Health Connect" "Apptillatelser og dataadministering" diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml index 90061e10f4..42403d6069 100644 --- a/PermissionController/res/values-nb/strings.xml +++ b/PermissionController/res/values-nb/strings.xml @@ -592,26 +592,21 @@ "Vis passord" "Vis tegnene et øyeblikk mens du skriver" "Denne appen har oppgitt at den kan dele posisjonsdataene dine med tredjeparter" - - + "Datadeling og posisjon" "Hvor kommer informasjon om datadeling fra?" - - + "Utvikleren har gitt ""%1$s"" informasjon om hvordan denne appen deler data. Utvikleren kan oppdatere denne informasjonen over tid." "Appen kan dele posisjonsdata for" - - + "%1$s" "Datadeling varierer" "Databehandling kan variere basert på appversjon, bruk, region og alder. ""Mer informasjon om datadeling" "Posisjonsdataene dine" "Du kan endre tilgangen denne appen har, i ""personverninnstillingene" "appfunksjonalitet" - - + "Statistikk" "utviklerkommunikasjon" "annonsering eller markedsføring" "forebygging av svindel, sikkerhet og overholdelse av regler" - - + "Personlig tilpasning" "kontoadministrasjon" "Datasikkerhet" "Posisjonsdata kan deles" @@ -619,13 +614,10 @@ "Oppdatering av datadeling for posisjon" "Gjennomgå apper som har endret hvordan de deler posisjonsdataene dine" "Disse appene har endret hvordan de kan dele posisjonsdataene dine. De har muligens ikke delt dem før eller kan nå dele dem for annonsering eller markedsføring." - - + "Utviklerne av disse appene har gitt en appbutikk informasjon om praksisen sin for datadeling. De kan oppdatere den over tid.\n\nPraksisen for datadeling kan variere basert på appversjon, bruk, region og alder." "Finn ut mer om datadeling" - - - - + "Nå deles posisjonsdataene dine med tredjeparter" + "Nå deles posisjonsdataene dine med tredjeparter for annonserings- eller markedsføringsformål" "{count,plural, =0{Oppdatert i løpet av den siste dagen}=1{Oppdatert i løpet av den siste dagen}other{Oppdatert i løpet av de siste # dagene}}" "Ingen oppdateringer for øyeblikket" "Oppdateringer av datadeling" diff --git a/PermissionController/res/values-ne-v34/strings.xml b/PermissionController/res/values-ne-v34/strings.xml index 444fa8c4c0..1bd060e5c1 100644 --- a/PermissionController/res/values-ne-v34/strings.xml +++ b/PermissionController/res/values-ne-v34/strings.xml @@ -20,7 +20,6 @@ "सुरक्षा तथा गोपनीयता" "कन्ट्रोलहरू" "जानकारी" - - + "Health Connect" "एपलाई दिइएका अनुमति र जानकारीको व्यवस्थापन" diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index f84521a8c6..5007cb0498 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -592,26 +592,21 @@ "पासवर्डहरू देखाइयोस्" "टाइप गर्दै गर्दा वर्णहरू झलक्क देखाइयोस्" "यो एपले यसले तपाईंको लोकेसन डेटा तेस्रो पक्षसँग सेयर गर्न सक्छ भन्ने जानकारी दिएको छ" - - + "लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास" "जानकारी सेयर गर्नेसम्बन्धी अभ्यासको स्रोत" - - + "यो एपका विकासकर्ताले यो एपले जानकारी सेयर गर्ने तरिकाका बारेमा ""%1$s"" लाई जानकारी दिएका छन्। ती विकासकर्ता समय क्रममा उक्त जानकारी संशोधन गर्न सक्छन्।" "यो एपले निम्न प्रयोजनका लागि लोकेसन सेयर गर्न सक्छ:" - - + "%1$s" "जानकारी सेयर गर्नेसम्बन्धी अभ्यास फरक हुन सक्छ" "एपको संस्करण, प्रयोगसम्बन्धी जानकारी, तपाईं बसोबास गर्ने क्षेत्र र तपाईंको उमेरका आधारमा जानकारीको व्यवस्थापनसम्बन्धी अभ्यासहरू फरक हुन सक्छन्। ""जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा थप जानकारी" "तपाईंको लोकेसन डेटा" "गोपनीयतासम्बन्धी सेटिङ""मा गई यो एपलाई दिइएको अनुमति परिवर्तन गर्नुहोस्" "एपका सुविधा उपलब्ध गराउने" - - + "Analytics" "विकासकर्ताबाट जानकारी प्राप्त गर्ने" "विज्ञापन वा मार्केटिङ गर्ने" "ठगी रोक्ने, जानकारी सुरक्षित राख्ने र नीति पालना गर्ने" - - + "पर्सनलाइजेसन" "खाता व्यवस्थापन गर्ने" "जानकारीको सुरक्षा" "लोकेसन डेटा सेयर गरिन सक्छ" @@ -619,13 +614,10 @@ "लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी" "तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका एपहरूको समीक्षा गर्नुहोस्" "यी एपहरूले तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका छन्। यी एपहरूले यसअघि तपाईंको लोकेसन डेटा सेयर नगरेका हुन सक्छन् तर अब भने विज्ञापन तथा मार्केटिङ गर्ने प्रयोजनका लागि तपाईंको लोकेसन डेटा सेयर गर्न सक्छन्।" - - + "यी एपका विकासकर्ताहरूले जानकारी सेयर गर्ने तरिकाका बारेमा कुनै एप स्टोरलाई जानकारी दिएका छन्। ती विकासकर्ता समय क्रममा जानकारी सेयर गर्नेसम्बन्धी आफ्ना अभ्यासहरू संशोधन गर्न सक्छन्।\n\nतपाईंले प्रयोग गर्ने एपको संस्करण, प्रयोगसम्बन्धी जानकारी, तपाईं बसोबास गर्ने क्षेत्र र तपाईंको उमेरका आधारमा जानकारी सेयर गर्नेसम्बन्धी अभ्यासहरू फरक हुन सक्छन्।" "जानकारी सेयर गर्नेसम्बन्धी नीतिका बारेमा जान्नुहोस्" - - - - + "तपाईंको लोकेसन डेटा अहिले तेस्रो पक्षहरूसँग सेयर गरिँदै छ" + "विज्ञापन तथा मार्केटिङ गर्ने प्रयोजनका लागि तपाईंको लोकेसन डेटा अहिले तेस्रो पक्षहरूसँग सेयर गरिँदै छ" "{count,plural, =0{पछिल्लो एक दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}=1{पछिल्लो एक दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}other{पछिल्ला # दिनभित्र लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यास संशोधन गर्ने एप}}" "अहिले कुनै अद्यावधिक जानकारी उपलब्ध छैन" "जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी" diff --git a/PermissionController/res/values-nl-car/strings.xml b/PermissionController/res/values-nl-car/strings.xml new file mode 100644 index 0000000000..6e6167c95d --- /dev/null +++ b/PermissionController/res/values-nl-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Als je een app een paar maanden niet gebruikt:\n\n• Er worden rechten verwijderd om je gegevens te beschermen.\n• Er worden tijdelijke bestanden verwijderd om ruimte vrij te maken." + diff --git a/PermissionController/res/values-nl-v34/strings.xml b/PermissionController/res/values-nl-v34/strings.xml new file mode 100644 index 0000000000..28a2cacaaa --- /dev/null +++ b/PermissionController/res/values-nl-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Beveiliging en privacy" + "Bediening" + "Gegevens" + "Health Connect" + "App-rechten en gegevensbeheer" + diff --git a/PermissionController/res/values-nl/strings.xml b/PermissionController/res/values-nl/strings.xml index fc1f5a6b35..a6f7a6e18e 100644 --- a/PermissionController/res/values-nl/strings.xml +++ b/PermissionController/res/values-nl/strings.xml @@ -591,68 +591,36 @@ "Toon een bericht als apps toegang hebben tot tekst, afbeeldingen of andere content die je hebt gekopieerd" "Wachtwoorden tonen" "Tekens kort tonen terwijl je typt" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Deze app geeft aan dat je locatiegegevens kunnen worden gedeeld met derden" + "Gegevens delen en locatie" + "Waar informatie over gegevens delen vandaan komt" + "De ontwikkelaar heeft informatie gegeven aan ""%1$s"" over hoe deze app gegevens deelt. Deze informatie kan in de loop van de tijd worden geüpdatet." + "Deze app kan locatiegegevens delen voor:" + "%1$s" + "Gegevens delen verschilt" + "Gegevensprocedures kunnen variëren op basis van je app-versie, gebruik, regio en leeftijd. ""Meer informatie over gegevens delen" + "Je locatiegegevens" + "Wijzig de toegang van deze app in de ""privacyinstellingen" + "App-functionaliteit" + "Analytics" + "Communicaties van de ontwikkelaar" + "Advertenties of marketing" + "Fraudepreventie, beveiliging en naleving" + "Personalisatie" + "Accountbeheer" + "Veiligheid van gegevens" + "Locatiegegevens kunnen worden gedeeld" + "Deze app geeft aan dat je locatiegegevens kunnen worden gedeeld met derden" + "Updates voor het delen van locatiegegevens" + "Check apps die de manier hebben veranderd waarop je locatiegegevens worden gedeeld" + "Deze apps hebben de manier veranderd waarop ze je locatiegegevens kunnen delen. Misschien deelden ze de gegevens eerder niet, of kunnen ze deze nu delen voor reclame- en marketingdoeleinden." + "De ontwikkelaars van deze apps hebben informatie gegeven aan een appstore over hun procedures voor gegevens delen. Ze kunnen deze informatie in de loop van de tijd updaten.\n\nProcedures voor gegevens delen kunnen verschillen op basis van je app-versie, gebruik, regio en leeftijd." + "Meer informatie over gegevens delen" + "Je locatiegegevens worden nu gedeeld met derden" + "Je locatiegegevens worden nu gedeeld met derden voor advertentie- of marketingdoeleinden" + "{count,plural, =0{Geüpdatet in de afgelopen dag}=1{Geüpdatet in de afgelopen dag}other{Geüpdatet in de afgelopen # dagen}}" + "Er zijn op dit moment geen updates" + "Updates voor gegevens delen" + "Sommige apps hebben de manier veranderd waarop ze je locatiegegevens kunnen delen" + "Instellingen" diff --git a/PermissionController/res/values-or-v34/strings.xml b/PermissionController/res/values-or-v34/strings.xml index 0348578bc9..b3577c297a 100644 --- a/PermissionController/res/values-or-v34/strings.xml +++ b/PermissionController/res/values-or-v34/strings.xml @@ -20,7 +20,6 @@ "ସୁରକ୍ଷା ଏବଂ ଗୋପନୀୟତା" "ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ" "ଡାଟା" - - + "Health Connect" "ଆପ ଅନୁମତି ଏବଂ ଡାଟା ପରିଚାଳନା" diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml index 498af8e8de..61333b5aea 100644 --- a/PermissionController/res/values-or/strings.xml +++ b/PermissionController/res/values-or/strings.xml @@ -592,26 +592,21 @@ "ପାସୱାର୍ଡଗୁଡ଼ିକ ଦେଖାନ୍ତୁ" "ଆପଣ ଟାଇପ କରିବା ସମୟରେ କେରେକ୍ଟରଗୁଡ଼ିକୁ କିଛି ସମୟ ପାଇଁ ଡିସପ୍ଲେ କରନ୍ତୁ" "ଏହି ଆପ ଉଲ୍ଲେଖ କରିଛି ଯେ ଏହା ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ" - - + "ଡାଟା ସେୟାରିଂ ଏବଂ ଲୋକେସନ" "ଡାଟା ସେୟାରିଂ ସୂଚନା କେଉଁଠାରୁ ଆସିଥାଏ" - - + "ଏହି ଆପ କିପରି ଡାଟା ସେୟାର କରେ ସେ ବିଷୟରେ ଡେଭେଲପର ""%1$s""ରେ ସୂଚନା ପ୍ରଦାନ କରିଛନ୍ତି। ଏହା ସମୟ ଅନୁସାରେ ଏହି ସୂଚନାକୁ ଅପଡେଟ କରିପାରେ।" "ଏଥିପାଇଁ ଆପଟି ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ:" - - + "%1$s" "ଡାଟା ସେୟାରିଂ ଭିନ୍ନ ହୋଇଥାଏ" "ଆପଣଙ୍କ ଆପର ସଂସ୍କରଣ, ବ୍ୟବହାର, ଅଞ୍ଚଳ ଏବଂ ବୟସ ଆଧାରରେ ଡାଟା କାର୍ଯ୍ୟପଦ୍ଧତିଗୁଡ଼ିକ ଭିନ୍ନ ହୋଇପାରେ। ""ଡାଟା ସେୟାରିଂ ବିଷୟରେ ଅଧିକ" "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା" "ଗୋପନୀୟତା ସେଟିଂସ""ରେ ଏହି ଆପର ଆକ୍ସେସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଆପ କାର୍ଯ୍ୟକ୍ଷମତା" - - + "ଆନାଲିଟିକ୍ସ" "ଡେଭେଲପର କମ୍ୟୁନିକେସନ" "ବିଜ୍ଞାପନ କିମ୍ବା ମାର୍କେଟିଂ" "ଠକାମୀର ପ୍ରତିରୋଧ, ସୁରକ୍ଷା ଏବଂ ଅନୁପାଳନ" - - + "ପର୍ସନାଲାଇଜେସନ" "ଆକାଉଣ୍ଟ ପରିଚାଳନା" "ଡାଟା ସୁରକ୍ଷା" "ଲୋକେସନ ଡାଟା ସେୟାର କରାଯାଇପାରେ" @@ -619,14 +614,11 @@ "ଲୋକେସନ ପାଇଁ ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ" "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଥିବା ଆପ୍ସର ସମୀକ୍ଷା କରନ୍ତୁ" "ଏହି ଆପ୍ସ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଛି। ସେଗୁଡ଼ିକ ଏହାକୁ ପୂର୍ବରୁ ସେୟାର କରିନଥାଇପାରେ କିମ୍ବା ବର୍ତ୍ତମାନ ଏହାକୁ ବିଜ୍ଞାପନ ବା ମାର୍କେଟିଂ ଉଦ୍ଦେଶ୍ୟରେ ସେୟାର କରିପାରେ।" - - + "ଏହି ଆପ୍ସର ଡେଭେଲପରମାନେ ଏକ ଆପ ଷ୍ଟୋରରେ ସେମାନଙ୍କ ଡାଟା ସେୟାରିଂ କାର୍ଯ୍ୟପଦ୍ଧତିଗୁଡ଼ିକ ବିଷୟରେ ସୂଚନା ପ୍ରଦାନ କରିଛନ୍ତି। ସେମାନେ ସମୟ ଅନୁସାରେ ଏହାକୁ ଅପଡେଟ କରିପାରନ୍ତି।\n\nଆପଣଙ୍କ ଆପର ସଂସ୍କରଣ, ବ୍ୟବହାର, ଅଞ୍ଚଳ ଏବଂ ବୟସ ଆଧାରରେ ଡାଟା ସେୟାରିଂ କାର୍ଯ୍ୟପଦ୍ଧତିଗୁଡ଼ିକ ଭିନ୍ନ ହୋଇପାରେ।" "ଡାଟା ସେୟାରିଂ ବିଷୟରେ ଜାଣନ୍ତୁ" - - - - - "{count,plural, =0{ଶେଷ ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}=1{ଶେଷ ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}other{# ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}}" + "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟାକୁ ବର୍ତ୍ତମାନ ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ସେୟାର କରାଯାଇଛି" + "ଆପଣଙ୍କ ଲୋକେସନ ଡାଟାକୁ ବର୍ତ୍ତମାନ ବିଜ୍ଞାପନ କିମ୍ବା ମାର୍କେଟିଂ ପାଇଁ ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ସେୟାର କରାଯାଇଛି" + "{count,plural, =0{ଗତକାଲି ଭିତରେ ଅପଡେଟ କରାଯାଇଛି}=1{ଗତକାଲି ଭିତରେ ଅପଡେଟ କରାଯାଇଛି}other{# ଦିନ ମଧ୍ୟରେ ଅପଡେଟ କରାଯାଇଛି}}" "ଏହି ସମୟରେ କୌଣସି ଅପଡେଟ ନାହିଁ" "ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ" "କିଛି ଆପ୍ସ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଛି" diff --git a/PermissionController/res/values-pa-v34/strings.xml b/PermissionController/res/values-pa-v34/strings.xml index a6b1c77b86..646f0d5617 100644 --- a/PermissionController/res/values-pa-v34/strings.xml +++ b/PermissionController/res/values-pa-v34/strings.xml @@ -20,7 +20,6 @@ "ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ" "ਕੰਟਰੋਲ" "ਡਾਟਾ" - - + "Health Connect" "ਐਪ ਇਜਾਜ਼ਤਾਂ ਅਤੇ ਡਾਟਾ ਪ੍ਰਬੰਧਨ" diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml index 2a15041e44..56b06e0a19 100644 --- a/PermissionController/res/values-pa/strings.xml +++ b/PermissionController/res/values-pa/strings.xml @@ -592,12 +592,11 @@ "ਪਾਸਵਰਡ ਦਿਖਾਓ" "ਟਾਈਪ ਕਰਨ ਵੇਲੇ ਅੱਖਰ-ਚਿੰਨ੍ਹਾਂ ਨੂੰ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਦਿਖਾਓ" "ਇਸ ਐਪ ਨੇ ਸਪਸ਼ਟ ਕੀਤਾ ਕਿ ਇਹ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ" - - + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅਤੇ ਟਿਕਾਣਾ" "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਜਾਣਕਾਰੀ ਕਿੱਥੋਂ ਆਉਂਦੀ ਹੈ" - - + "ਵਿਕਾਸਕਾਰ ਨੇ ਇਸ ਐਪ ਵੱਲੋਂ ਡਾਟਾ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦੇ ਤਰੀਕੇ ਬਾਰੇ ਜਾਣਕਾਰੀ ""%1$s"" ਨੂੰ ਮੁਹੱਈਆ ਕਰਵਾਈ ਹੈ। ਇਹ ਸਮੇਂ-ਸਮੇਂ \'ਤੇ ਇਸ ਜਾਣਕਾਰੀ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ।" "ਐਪ ਇਸ ਲਈ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ:" + "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਵੱਖ-ਵੱਖ ਹੁੰਦਾ ਹੈ" @@ -605,13 +604,11 @@ "ਤੁਹਾਡਾ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ" "ਪਰਦੇਦਾਰੀ ਸੈਟਿੰਗਾਂ"" ਵਿੱਚ ਇਸ ਐਪ ਦੀ ਪਹੁੰਚ ਨੂੰ ਬਦਲੋ" "ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ" - - + "ਵਿਸ਼ਲੇਸ਼ਕੀ" "ਵਿਕਾਸਕਾਰ ਸੰਚਾਰ" "ਵਿਗਿਆਪਨ ਜਾਂ ਮਾਰਕੀਟਿੰਗ" "ਧੋਖਾਧੜੀ ਦੀ ਰੋਕਥਾਮ, ਸੁਰੱਖਿਆ ਅਤੇ ਪਾਲਣਾ" - - + "ਵਿਅਕਤੀਗਤਕਰਨ" "ਖਾਤਾ ਪ੍ਰਬੰਧਨ" "ਡਾਟਾ ਸੁਰੱਖਿਆ" "ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ" @@ -619,13 +616,10 @@ "ਟਿਕਾਣੇ ਲਈ ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ" "ਉਨ੍ਹਾਂ ਐਪਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ ਜਿਨ੍ਹਾਂ ਨੇ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ" "ਇਨ੍ਹਾਂ ਐਪਾਂ ਨੇ ਉਨ੍ਹਾਂ ਵੱਲੋਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤੇ ਜਾਣ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ। ਉਨ੍ਹਾਂ ਨੇ ਸ਼ਾਇਦ ਇਸਨੂੰ ਪਹਿਲਾਂ ਸਾਂਝਾ ਨਾ ਕੀਤਾ ਹੋਵੇ, ਜਾਂ ਉਹ ਸ਼ਾਇਦ ਹੁਣ ਵਿਗਿਆਪਨ ਜਾਂ ਮਾਰਕੀਟਿੰਗ ਸੰਬੰਧੀ ਉਦੇਸ਼ਾਂ ਲਈ ਹੁਣ ਇਸਨੂੰ ਸਾਂਝਾ ਕਰਨ।" - - + "ਇਨ੍ਹਾਂ ਐਪਾਂ ਦੇ ਵਿਕਾਸਕਾਰਾਂ ਨੇ ਆਪਣੇ ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਵਿਹਾਰਾਂ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਐਪ ਸਟੋਰ ਨੂੰ ਮੁਹੱਈਆ ਕਰਵਾਈ ਹੈ। ਉਹ ਇਸਨੂੰ ਸਮੇਂ-ਸਮੇਂ \'ਤੇ ਅੱਪਡੇਟ ਕਰ ਸਕਦੇ ਹਨ।\n\nਡਾਟਾ ਸਾਂਝਾਕਰਨ ਵਿਹਾਰ ਤੁਹਾਡੇ ਐਪ ਵਰਜਨ, ਵਰਤੋਂ, ਖੇਤਰ ਅਤੇ ਉਮਰ ਦੇ ਮੁਤਾਬਕ ਵੱਖ-ਵੱਖ ਹੋ ਸਕਦੇ ਹਨ।" "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਬਾਰੇ ਜਾਣੋ" - - - - + "ਤੁਹਾਡਾ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਹੁਣ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਗਿਆ ਹੈ" + "ਤੁਹਾਡਾ ਟਿਕਾਣੇ ਦਾ ਡਾਟਾ ਹੁਣ ਵਿਗਿਆਪਨ ਜਾਂ ਮਾਰਕੀਟਿੰਗ ਲਈ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਗਿਆ ਹੈ" "{count,plural, =0{ਪਿਛਲੇ ਦਿਨ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}=1{ਪਿਛਲੇ ਦਿਨ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}other{ਪਿਛਲੇ # ਦਿਨਾਂ ਵਿੱਚ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ}}" "ਇਸ ਸਮੇਂ ਕੋਈ ਅੱਪਡੇਟ ਨਹੀਂ" "ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ" diff --git a/PermissionController/res/values-pl-car/strings.xml b/PermissionController/res/values-pl-car/strings.xml new file mode 100644 index 0000000000..b3c024d04d --- /dev/null +++ b/PermissionController/res/values-pl-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Jeśli aplikacja jest nieużywana przez kilka miesięcy:\n\n• aby chronić Twoje dane, odbieramy jej uprawnienia;\n• aby zwolnić miejsce, usuwamy pliki tymczasowe" + diff --git a/PermissionController/res/values-pl-v34/strings.xml b/PermissionController/res/values-pl-v34/strings.xml new file mode 100644 index 0000000000..8e3d563667 --- /dev/null +++ b/PermissionController/res/values-pl-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Bezpieczeństwo i prywatność" + "Ustawienia" + "Dane" + "Health Connect" + "Uprawnienia aplikacji i zarządzanie danymi" + diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml index 2a3bc29490..032921a12f 100644 --- a/PermissionController/res/values-pl/strings.xml +++ b/PermissionController/res/values-pl/strings.xml @@ -591,68 +591,36 @@ "Pokazuj komunikat, gdy aplikacja uzyskuje dostęp do skopiowanego tekstu, obrazów lub innych treści" "Pokazuj hasła" "Wpisywane znaki są przez chwilę wyświetlane" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Ta aplikacja deklaruje, że może udostępniać Twoje dane o lokalizacji innym podmiotom" + "Udostępnianie danych i lokalizacja" + "Skąd pochodzą informacje o udostępnianiu danych" + "Deweloper zamieścił informacje o tym, jak aplikacja udostępnia dane, w: ""%1$s"". Co jakiś czas mogą one być aktualizowane." + "Możliwe cele udostępniania danych o lokalizacji" + "%1$s" + "Udostępnianie danych może się różnić" + "Sposoby postępowania z danymi mogą się różnić w zależności od wersji aplikacji, jej użycia, regionu i wieku użytkownika. ""Więcej o udostępnianiu danych" + "Twoje dane o lokalizacji" + "Dostęp tej aplikacji możesz zmienić w ""ustawieniach prywatności" + "Funkcje aplikacji" + "Statystyki" + "Informacje od dewelopera" + "Cele marketingowe" + "Zapobieganie oszustwom, bezpieczeństwo i zgodność z przepisami" + "Personalizacja" + "Zarządzanie kontem" + "Bezpieczeństwo danych" + "Mogą być udostępniane dane o lokalizacji" + "Ta aplikacja deklaruje, że może udostępniać Twoje dane o lokalizacji innym podmiotom" + "Zmiany w udostępnianiu danych o lokalizacji" + "Przejrzyj aplikacje, które zmieniły sposób udostępniania Twoich danych o lokalizacji" + "Te aplikacje zmieniły sposób udostępniania Twoich danych o lokalizacji. Wcześniej mogły ich nie udostępniać lub teraz zaczęły je udostępniać w celach marketingowych." + "Deweloperzy tych aplikacji zamieścili w sklepie z aplikacjami informacje o swoich sposobach udostępniania danych. Co jakiś czas mogą wprowadzać w nich zmiany.\n\nSposoby udostępniania danych mogą się różnić w zależności od wersji aplikacji, jej użycia, regionu i wieku użytkownika." + "Więcej informacji o udostępnianiu danych" + "Twoje dane o lokalizacji są teraz udostępniane innym podmiotom" + "Twoje dane o lokalizacji są teraz udostępniane innym podmiotom w celach marketingowych" + "{count,plural, =0{Zaktualizowano w ostatnim dniu}=1{Zaktualizowano w ostatnim dniu}few{Zaktualizowano w ostatnich # dniach}many{Zaktualizowano w ostatnich # dniach}other{Zaktualizowano w ostatnich # dnia}}" + "Obecnie nie ma żadnych aktualizacji" + "Zmiany w udostępnianiu danych" + "Niektóre aplikacje zmieniły sposób udostępniania Twoich danych o lokalizacji" + "Ustawienia" diff --git a/PermissionController/res/values-pt-car/strings.xml b/PermissionController/res/values-pt-car/strings.xml new file mode 100644 index 0000000000..7970522a5e --- /dev/null +++ b/PermissionController/res/values-pt-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Quando um app fica sem uso por alguns meses:\n\n• As permissões são removidas para proteger seus dados.\n• Os arquivos temporários são removidos para liberar espaço." + diff --git a/PermissionController/res/values-pt-rBR-car/strings.xml b/PermissionController/res/values-pt-rBR-car/strings.xml new file mode 100644 index 0000000000..7970522a5e --- /dev/null +++ b/PermissionController/res/values-pt-rBR-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Quando um app fica sem uso por alguns meses:\n\n• As permissões são removidas para proteger seus dados.\n• Os arquivos temporários são removidos para liberar espaço." + diff --git a/PermissionController/res/values-pt-rBR-v33/strings.xml b/PermissionController/res/values-pt-rBR-v33/strings.xml index 8e7c6e4985..8735854177 100644 --- a/PermissionController/res/values-pt-rBR-v33/strings.xml +++ b/PermissionController/res/values-pt-rBR-v33/strings.xml @@ -41,7 +41,7 @@ "Chave. %1$s. %2$s" "Alternar" "Abrir" - "Revisar configurações" + "Revisar configura&#173;ções" "Configurações" "Informações" diff --git a/PermissionController/res/values-pt-rBR-v34/strings.xml b/PermissionController/res/values-pt-rBR-v34/strings.xml new file mode 100644 index 0000000000..994775d24c --- /dev/null +++ b/PermissionController/res/values-pt-rBR-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Segurança e privacidade" + "Controles" + "Dados" + "Conexão Saúde" + "Permissões do app e gerenciamento de dados" + diff --git a/PermissionController/res/values-pt-rBR/strings.xml b/PermissionController/res/values-pt-rBR/strings.xml index 2acadd5ce5..93573dd373 100644 --- a/PermissionController/res/values-pt-rBR/strings.xml +++ b/PermissionController/res/values-pt-rBR/strings.xml @@ -591,68 +591,36 @@ "Mostrar uma mensagem quando os apps acessarem textos, imagens ou outros conteúdos copiados" "Mostrar senhas" "Mostrar os caracteres rapidamente enquanto você digita" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Este app declarou que pode compartilhar seus dados de local com terceiros" + "Local e compartilhamento de dados" + "De onde vêm as informações do compartilhamento de dados" + "O desenvolvedor forneceu informações para ""%1$s"" sobre como este app compartilha dados. Ele pode atualizar essas informações com o tempo." + "O app pode compartilhar dados de local para:" + "%1$s" + "O compartilhamento de dados varia" + "As práticas relacionadas a dados podem variar de acordo com a versão do app e com a idade, uso e região do usuário. ""Mais informações sobre o compartilhamento de dados" + "Seus dados de local" + "Mude o acesso do app nas ""configurações de privacidade" + "Funcionalidade do app" + "Análise" + "Mensagens do desenvolvedor" + "Publicidade ou marketing" + "Segurança, conformidade e prevenção de fraudes" + "Personalização" + "Gerenciamento da conta" + "Segurança dos dados" + "Os dados de local poderão ser compartilhados" + "Este app declarou que pode compartilhar seus dados de local com terceiros" + "Atualizações no compartilhamento de dados de local" + "Revise os apps que mudaram a forma como podem compartilhar seus dados de local" + "Esses apps mudaram a forma como podem compartilhar seus dados de local. É possível que eles não tenham compartilhado antes ou que agora compartilhem para fins de publicidade ou marketing." + "Os desenvolvedores desses apps oferecem informações sobre as práticas deles de compartilhamento de dados com uma app store. Eles podem atualizar essas informações com o tempo.\n\nAs práticas de compartilhamento de dados podem variar de acordo com a versão do app e com a idade, o uso e a região do usuário." + "Saiba mais sobre o compartilhamento de dados" + "Seus dados de local agora são compartilhados com terceiros" + "Seus dados de local agora são compartilhados com terceiros para fins de publicidade ou marketing" + "{count,plural, =0{Atualizado nas últimas 24 horas}=1{Atualizado nas últimas 24 horas}one{Atualizado há # dia}many{Atualizado há # de dias}other{Atualizado há # dias}}" + "Não há atualizações no momento" + "Atualizações do compartilhamento de dados" + "Alguns apps mudaram a forma como podem compartilhar seus dados de local" + "Configurações" diff --git a/PermissionController/res/values-pt-rPT-v34/strings.xml b/PermissionController/res/values-pt-rPT-v34/strings.xml index 5ed4c03c03..ee2276b204 100644 --- a/PermissionController/res/values-pt-rPT-v34/strings.xml +++ b/PermissionController/res/values-pt-rPT-v34/strings.xml @@ -20,7 +20,6 @@ "Segurança e privacidade" "Controlos" "Dados" - - + "Saúde Connect" "Autorizações da app e gestão de dados" diff --git a/PermissionController/res/values-pt-rPT/strings.xml b/PermissionController/res/values-pt-rPT/strings.xml index 529766999b..b7c61d401c 100644 --- a/PermissionController/res/values-pt-rPT/strings.xml +++ b/PermissionController/res/values-pt-rPT/strings.xml @@ -592,26 +592,21 @@ "Mostrar palavras-passe" "Apresente rapidamente os carateres ao escrever" "Esta app declarou que pode partilhar os seus dados de localização com terceiros" - - + "Localização e partilha de dados" "Qual é a origem das informações da partilha de dados" - - + "O programador forneceu informações a ""%1$s"" sobre como esta app partilha dados. Pode atualizar estas informações ao longo do tempo." "A app pode partilhar dados de localização para:" - - + "%1$s" "A partilha de dados varia" "As práticas de dados podem variar consoante a versão da app, a utilização, a região e a idade. ""Mais informações sobre a partilha de dados" "Os seus dados de localização" "Altere o acesso desta app nas ""definições de privacidade" "Funcionalidade da app" - - + "Estatísticas" "Comunicações do programador" "Publicidade ou marketing" "Prevenção de fraudes, segurança e conformidade" - - + "Personalização" "Gestão da conta" "Segurança dos dados" "Os dados de localização podem ser partilhados" @@ -619,13 +614,10 @@ "Atualizações da partilha de dados para a localização" "Reveja apps que mudaram a forma como podem partilhar os seus dados de localização" "Estas apps mudaram a forma como podem partilhar os seus dados de localização. Podem não os ter partilhado antes ou podem partilhá-los agora para fins de publicidade ou marketing." - - + "Os programadores destas apps deram informações sobre as respetivas práticas de partilha de dados a uma loja de apps. Podem atualizá-las ao longo do tempo.\n\nAs práticas de partilha de dados podem variar consoante a versão da app, a utilização, a região e a idade." "Saiba mais sobre a partilha de dados" - - - - + "Os seus dados de localização são agora partilhados com terceiros" + "Os seus dados de localização são agora partilhados com terceiros para fins de publicidade ou marketing" "{count,plural, =0{Atualizado no último dia}=1{Atualizado no último dia}many{Atualizado em # de dias}other{Atualizado em # dias}}" "Nenhuma atualização neste momento" "Atualizações da partilha de dados" diff --git a/PermissionController/res/values-pt-v33/strings.xml b/PermissionController/res/values-pt-v33/strings.xml index 8e7c6e4985..8735854177 100644 --- a/PermissionController/res/values-pt-v33/strings.xml +++ b/PermissionController/res/values-pt-v33/strings.xml @@ -41,7 +41,7 @@ "Chave. %1$s. %2$s" "Alternar" "Abrir" - "Revisar configurações" + "Revisar configura&#173;ções" "Configurações" "Informações" diff --git a/PermissionController/res/values-pt-v34/strings.xml b/PermissionController/res/values-pt-v34/strings.xml new file mode 100644 index 0000000000..994775d24c --- /dev/null +++ b/PermissionController/res/values-pt-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Segurança e privacidade" + "Controles" + "Dados" + "Conexão Saúde" + "Permissões do app e gerenciamento de dados" + diff --git a/PermissionController/res/values-pt/strings.xml b/PermissionController/res/values-pt/strings.xml index 2acadd5ce5..93573dd373 100644 --- a/PermissionController/res/values-pt/strings.xml +++ b/PermissionController/res/values-pt/strings.xml @@ -591,68 +591,36 @@ "Mostrar uma mensagem quando os apps acessarem textos, imagens ou outros conteúdos copiados" "Mostrar senhas" "Mostrar os caracteres rapidamente enquanto você digita" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Este app declarou que pode compartilhar seus dados de local com terceiros" + "Local e compartilhamento de dados" + "De onde vêm as informações do compartilhamento de dados" + "O desenvolvedor forneceu informações para ""%1$s"" sobre como este app compartilha dados. Ele pode atualizar essas informações com o tempo." + "O app pode compartilhar dados de local para:" + "%1$s" + "O compartilhamento de dados varia" + "As práticas relacionadas a dados podem variar de acordo com a versão do app e com a idade, uso e região do usuário. ""Mais informações sobre o compartilhamento de dados" + "Seus dados de local" + "Mude o acesso do app nas ""configurações de privacidade" + "Funcionalidade do app" + "Análise" + "Mensagens do desenvolvedor" + "Publicidade ou marketing" + "Segurança, conformidade e prevenção de fraudes" + "Personalização" + "Gerenciamento da conta" + "Segurança dos dados" + "Os dados de local poderão ser compartilhados" + "Este app declarou que pode compartilhar seus dados de local com terceiros" + "Atualizações no compartilhamento de dados de local" + "Revise os apps que mudaram a forma como podem compartilhar seus dados de local" + "Esses apps mudaram a forma como podem compartilhar seus dados de local. É possível que eles não tenham compartilhado antes ou que agora compartilhem para fins de publicidade ou marketing." + "Os desenvolvedores desses apps oferecem informações sobre as práticas deles de compartilhamento de dados com uma app store. Eles podem atualizar essas informações com o tempo.\n\nAs práticas de compartilhamento de dados podem variar de acordo com a versão do app e com a idade, o uso e a região do usuário." + "Saiba mais sobre o compartilhamento de dados" + "Seus dados de local agora são compartilhados com terceiros" + "Seus dados de local agora são compartilhados com terceiros para fins de publicidade ou marketing" + "{count,plural, =0{Atualizado nas últimas 24 horas}=1{Atualizado nas últimas 24 horas}one{Atualizado há # dia}many{Atualizado há # de dias}other{Atualizado há # dias}}" + "Não há atualizações no momento" + "Atualizações do compartilhamento de dados" + "Alguns apps mudaram a forma como podem compartilhar seus dados de local" + "Configurações" diff --git a/PermissionController/res/values-ro-car/strings.xml b/PermissionController/res/values-ro-car/strings.xml new file mode 100644 index 0000000000..9f41662078 --- /dev/null +++ b/PermissionController/res/values-ro-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Dacă o aplicație nu este folosită timp de câteva luni:\n\n• permisiunile sunt eliminate pentru a-ți proteja datele;\n• fișierele temporare sunt eliminate pentru a elibera spațiu." + diff --git a/PermissionController/res/values-ro-v34/strings.xml b/PermissionController/res/values-ro-v34/strings.xml new file mode 100644 index 0000000000..e24717628c --- /dev/null +++ b/PermissionController/res/values-ro-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Securitate și confidențialitate" + "Comenzi" + "Date" + "Health Connect" + "Gestionarea datelor și a permisiunilor pentru aplicație" + diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml index 3530a89918..a6375d8e7b 100644 --- a/PermissionController/res/values-ro/strings.xml +++ b/PermissionController/res/values-ro/strings.xml @@ -591,68 +591,36 @@ "Afișează un mesaj când aplicațiile accesează text, imagini sau alte tipuri de conținut pe care le-ai copiat" "Afișează parolele" "Caracterele se afișează pentru scurt timp, pe măsură ce tastezi" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Aplicația afirmă că le poate trimite terților date privind locațiile tale" + "Locația și permiterea accesului la date" + "De unde provin informațiile despre permiterea accesului la date" + "Dezvoltatorul a trimis la ""%1$s"" informații despre modul în care această aplicație permite accesul la date. Informațiile se pot actualiza în timp." + "Aplicația poate permite accesul la date pentru:" + "%1$s" + "Permiterea accesului la date variază" + "Practicile privind datele pot varia în funcție de versiunea aplicației, de modul de utilizare a acesteia, de regiune și de vârsta ta. ""Mai multe despre permiterea accesului la date" + "Datele privind locația ta" + "Schimbă accesul acestei aplicații în ""setările de confidențialitate" + "Funcționalitatea aplicației" + "Date statistice" + "Comunicări ale dezvoltatorilor" + "Publicitate sau marketing" + "Prevenirea fraudei, securitate și conformitate" + "Personalizare" + "Gestionarea contului" + "Siguranța datelor" + "Se poate permite accesul la datele privind locațiile tale" + "Aplicația afirmă că le poate trimite terților date privind locațiile tale" + "Actualizări privind permiterea accesului la date pentru locație" + "Examinează aplicațiile care au schimbat modul în care pot permite accesul la datele tale privind locațiile" + "Aceste aplicații au schimbat modul în care pot permite accesul la datele tale privind locațiile. Este posibil să nu fi permis accesul la ele anterior sau să-l permită acum în scopuri de publicitate sau de marketing." + "Dezvoltatorii acestor aplicații au oferit unui magazin de aplicații informații despre practicile lor de permitere a accesului la date. Acestea se pot actualiza în timp.\n\nPracticile de permitere a accesului la date pot varia în funcție de versiunea aplicației, de modul de utilizare, de regiune și de vârstă." + "Află despre permiterea accesului la date" + "Terții au acum acces la datele tale privind locațiile" + "Terții au acum acces la datele tale privind locațiile în scopuri de publicitate sau de marketing" + "{count,plural, =0{Actualizări în ultima zi}=1{Actualizări în ultima zi}few{Actualizări în ultimele # zile}other{Actualizări în ultimele # de zile}}" + "Nicio actualizare momentan" + "Actualizări privind permiterea accesului la date" + "Unele aplicații au schimbat modul în care pot permite accesul la datele tale privind locațiile" + "Setări" diff --git a/PermissionController/res/values-ru-car/strings.xml b/PermissionController/res/values-ru-car/strings.xml new file mode 100644 index 0000000000..c482317ccc --- /dev/null +++ b/PermissionController/res/values-ru-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Если вы не пользовались приложением несколько месяцев:\n\n• разрешения будут отключены для защиты ваших данных;\n• временные файлы будут удалены, чтобы освободить место." + diff --git a/PermissionController/res/values-ru-v34/strings.xml b/PermissionController/res/values-ru-v34/strings.xml new file mode 100644 index 0000000000..3236690346 --- /dev/null +++ b/PermissionController/res/values-ru-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Защита и конфиденциальность" + "Настройки" + "Данные" + "Здоровье и спорт" + "Разрешения для приложений и управление данными" + diff --git a/PermissionController/res/values-ru/strings.xml b/PermissionController/res/values-ru/strings.xml index 2bf239d0ae..412a80043f 100644 --- a/PermissionController/res/values-ru/strings.xml +++ b/PermissionController/res/values-ru/strings.xml @@ -591,68 +591,36 @@ "Показывать уведомления, когда приложения обращаются к скопированному тексту, изображениям или другому контенту" "Показывать пароли" "Ненадолго показывать символы при вводе" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Это приложение может передавать третьим лицам данные о вашем местоположении." + "Передача данных и местоположение" + "Источник сведений о передаче данных" + "Разработчик предоставил ""%1$s"" информацию о том, как приложение передает данные. Эти сведения могут обновляться." + "Цели передачи данных о местоположении:" + "%1$s" + "Варианты передачи данных" + "Работа с данными зависит от версии приложения, способа его использования, а также от вашего региона и возраста. Подробнее ""о передаче данных""…" + "Данные о вашем местоположении" + "Измените права доступа этого приложения в ""настройках конфиденциальности""." + "функции приложения;" + "Аналитика" + "связь с разработчиком;" + "реклама и маркетинг;" + "предотвращение мошенничества, безопасность и соответствие требованиям;" + "Персонализация" + "управление аккаунтом." + "Безопасность данных" + "Данные о местоположении могут передаваться" + "Это приложение может передавать третьим лицам данные о вашем местоположении." + "Обновление сведений о передаче данных о местоположении" + "Проверить приложения, которые изменили подход к передаче данных о вашем местоположении" + "Эти приложения изменили подход к передаче данных о вашем местоположении. Возможно, такие сведения ранее не передавались или теперь передаются в рекламных или маркетинговых целях." + "Разработчики этих приложений предоставили магазину информацию о своих методах передачи данных. Эти сведения могут обновляться.\n\nВ разных случаях методы зависят от версии приложения, способа его использования, а также от вашего региона и возраста." + "Сведения о передаче данных" + "Теперь данные о вашем местоположении передаются третьим лицам." + "Теперь данные о вашем местоположении передаются третьим лицам в рекламных или маркетинговых целях." + "{count,plural, =0{Обновлено за последний день}=1{Обновлено за последний день}one{Обновлено за последний # день}few{Обновлено за последние # дня}many{Обновлено за последние # дней}other{Обновлено за последние # дня}}" + "Обновлений пока нет" + "Обновление сведений о передаче данных" + "Некоторые приложения изменили подход к передаче данных о вашем местоположении." + "Настройки" diff --git a/PermissionController/res/values-si-car/strings.xml b/PermissionController/res/values-si-car/strings.xml new file mode 100644 index 0000000000..e67d034cf0 --- /dev/null +++ b/PermissionController/res/values-si-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "යෙදුමක් මාස කිහිපයක් භාවිතා නොකරන්නේ නම්:\n\n• ඔබේ දත්ත ආරක්ෂා කිරීමට අවසර ඉවත් කරනු ලැබේ\n• ඉඩ නිදහස් කිරීමට තාවකාලික ගොනු ඉවත් කරනු ලැබේ" + diff --git a/PermissionController/res/values-si-v34/strings.xml b/PermissionController/res/values-si-v34/strings.xml new file mode 100644 index 0000000000..ac5dd5c195 --- /dev/null +++ b/PermissionController/res/values-si-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "ආරක්ෂාව සහ පෞද්ගලිකත්වය" + "පාලන" + "දත්ත" + "Health Connect" + "යෙදුම් අවසර සහ දත්ත කළමනාකරණය" + diff --git a/PermissionController/res/values-si/strings.xml b/PermissionController/res/values-si/strings.xml index e13f6266d1..e4e2a80ffc 100644 --- a/PermissionController/res/values-si/strings.xml +++ b/PermissionController/res/values-si/strings.xml @@ -591,68 +591,36 @@ "යෙදුම් ඔබ පිටපත් කර ඇති පාඨ, රූප හෝ වෙනත් අන්තර්ගතය වෙත ප්‍රවේශ වන විට පණිවුඩයක් පෙන්වන්න" "මුරපද පෙන්වන්න" "ඔබ ටයිප් කරන විට අනුලකුණු කෙටියෙන් පෙන්වන්න" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "මෙම යෙදුම තෙවන පාර්ශ්වයන් සමග ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි බව ප්‍රකාශ කර ඇත" + "දත්ත බෙදා ගැනීම සහ ස්ථානය" + "දත්ත බෙදා ගැනීමේ තතු පැමිණෙන තැන" + "මෙම යෙදුම දත්ත බෙදා ගන්නා ආකාරය පිළිබඳව සංවර්ධකයා ""%1$s"" වෙත තතු සපයා ඇත. එය කාලයත් සමග මෙම තතු යාවත්කාලීන කළ හැක." + "යෙදුම මේ සඳහා ස්ථාන දත්ත බෙදා ගත හැක:" + "%1$s" + "දත්ත බෙදා ගැනීම වෙනස් වේ" + "දත්ත පිළිවෙත් ඔබේ යෙදුම් අනුවාදය, භාවිතය, කලාපය, සහ වයස මත පදනම්ව වෙනස් විය හැක. ""දත්ත බෙදා ගැනීම පිළිබඳව වැඩිදුර" + "ඔබේ ස්ථාන දත්ත" + "පෞද්ගලිකත්ව සැකසීම්"" තුළ මෙම යෙදුමේ ප්‍රවේශය වෙනස් කරන්න" + "යෙදුම් ක්‍රියාකාරීත්වය" + "විශ්ලේෂණ" + "සංවර්ධක සන්නිවේදන" + "වෙළඳ ප්‍රචාරණය හෝ අලෙවිකරණය" + "වංචා වැළැක්වීම, ආරක්ෂාව, සහ අනුකූලතාව" + "පෞද්ගලීකරණය" + "ගිණුම් කළමනාකරණය" + "දත්ත ආරක්ෂාව" + "ස්ථාන දත්ත බෙදා ගත හැක" + "මෙම යෙදුම තෙවන පාර්ශ්වයන් සමග ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි බව ප්‍රකාශ කර ඇත" + "ස්ථානය සඳහා දත්ත බෙදා ගැනීමේ යාවත්කාලීන" + "ඒවා ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි ආකාරය වෙනස් කළ යෙදුම් සමාලෝචනය කරන්න" + "මෙම යෙදුම් ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි ආකාරය වෙනස් කර ඇත. ඒවා එය කලින් බෙදා ගෙන නොතිබිය හැක, නැතහොත් දැන් එය වෙළඳ ප්‍රචාරණ හෝ අලෙවිකරණ අරමුණු සඳහා බෙදා ගත හැක." + "මෙම යෙදුම්වල සංවර්ධකයින් යෙදුම් වෙළඳසැලකට ඔවුන්ගේ දත්ත බෙදා ගැනීමේ පිළිවෙත් පිළිබඳ තතු සපයන ලදි. ඔවුන් එය කාලයත් සමග යාවත්කාලීන කළ හැක.\n\nඔබේ යෙදුම් අනුවාදය, භාවිතය, කලාපය, සහ වයස මත පදනම්ව දත්ත බෙදා ගැනීමේ පිළිවෙත් වෙනස් විය හැක." + "දත්ත බෙදා ගැනීම පිළිබඳව තව දැන ගන්න" + "ඔබේ ස්ථාන දත්ත දැන් තෙවන පාර්ශ්ව සමග බෙදා ගෙන ඇත" + "ඔබේ ස්ථාන දත්ත දැන් වෙළඳ ප්‍රචාරණය හෝ අලෙවිකරණය සඳහා තෙවන පාර්ශ්ව සමග බෙදා ගෙන ඇත" + "{count,plural, =0{පසුගිය දින තුළ යාවත්කාලීන කරන ලදි}=1{පසුගිය දින තුළ යාවත්කාලීන කරන ලදි}one{දින #ක් තුළ යාවත්කාලීන කරන ලදි}other{දින #ක් තුළ යාවත්කාලීන කරන ලදි}}" + "මෙම අවස්ථාවේ දී යාවත්කාලීන නැත" + "දත්ත බෙදා ගැනීමේ යාවත්කාලීන" + "සමහර යෙදුම් ඒවා ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි ආකාරය වෙනස් කර ඇත" + "සැකසීම්" diff --git a/PermissionController/res/values-sk-v34/strings.xml b/PermissionController/res/values-sk-v34/strings.xml index 8693dc621b..02a69b3eb2 100644 --- a/PermissionController/res/values-sk-v34/strings.xml +++ b/PermissionController/res/values-sk-v34/strings.xml @@ -20,7 +20,6 @@ "Zabezpečenie a ochrana súkromia" "Ovládanie" "Údaje" - - + "Dáta o zdraví" "Správa povolení a údajov aplikácie" diff --git a/PermissionController/res/values-sk/strings.xml b/PermissionController/res/values-sk/strings.xml index 1c4ce6ba9b..5a024c6d0c 100644 --- a/PermissionController/res/values-sk/strings.xml +++ b/PermissionController/res/values-sk/strings.xml @@ -592,26 +592,21 @@ "Zobrazovať heslá" "Pri písaní nakrátko zobrazovať zadávané znaky" "V tejto aplikácii je uvedené, že môže zdieľať údaje o polohe s tretími stranami" - - + "Zdieľanie údajov a poloha" "Odkiaľ informácie o zdieľaní údajov pochádzajú" - - + "Vývojár poskytol v sekcii ""%1$s"" informácie o tom, ako táto aplikácia zdieľa údaje. Priebežne môžu byť aktualizované." "Aplikácia môže zdieľať údaje o polohe na účely:" - - + "%1$s" "Zdieľanie údajov sa líši" "Nakladanie s údajmi sa môže líšiť v závislosti od verzie a používania aplikácie, ako aj regiónu a veku používateľa. ""Ďalšie informácie o zdieľaní údajov" "Údaje o vašej polohe" "Prístup tejto aplikácie môžete zmeniť v ""nastaveniach ochrany súkromia" "Funkcie aplikácie" - - + "Analytika" "Komunikácie vývojára" "Reklama alebo marketing" "Prevencia podvodov, zabezpečenie a dodržiavanie pravidiel" - - + "Prispôsobenie" "Správa účtu" "Zabezpečenie údajov" "Môžu sa zdieľať údaje o polohe" @@ -619,13 +614,10 @@ "Aktualizácie zdieľania údajov o polohe" "Skontrolujte aplikácie, ktoré zmenili spôsob zdieľania údajov o vašej polohe" "Tieto aplikácie zmenili spôsob zdieľania údajov o vašej polohe. Možno ich v minulosti nezdieľali alebo ich teraz zdieľajú na účely reklamy a marketingu." - - + "Vývojári týchto aplikácií poskytli informácie o ich postupoch zdieľania údajov v obchode s aplikáciami. Priebežne ich môžu aktualizovať.\n\nPostupy zdieľania údajov sa môžu líšiť v závislosti od verzie a používania vašej aplikácie, ako aj regiónu a veku jej používateľa." "Ďalšie informácie o zdieľaní údajov" - - - - + "Údaje o vašej polohe sa teraz zdieľajú s tretími stranami" + "Údaje o vašej polohe sa teraz zdieľajú s tretími stranami na účely reklamy a marketingu" "{count,plural, =0{Aktualizované v priebehu uplynulého dňa}=1{Aktualizované v priebehu uplynulého dňa}few{Aktualizované v priebehu uplynulých # dní}many{Aktualizované v priebehu uplynulej # dňa}other{Aktualizované v priebehu uplynulých # dní}}" "Momentálne nie sú k dispozícii žiadne aktualizácie" "Aktualizácie zdieľania údajov" diff --git a/PermissionController/res/values-sl-car/strings.xml b/PermissionController/res/values-sl-car/strings.xml new file mode 100644 index 0000000000..d8220f9848 --- /dev/null +++ b/PermissionController/res/values-sl-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Po nekaj mesecih neuporabe aplikacije se zgodi to:\n\n• Dovoljenja se odstranijo, da se zaščitijo vaši podatki.\n• Začasne datoteke se odstranijo, da se sprosti prostor." + diff --git a/PermissionController/res/values-sl-v34/strings.xml b/PermissionController/res/values-sl-v34/strings.xml new file mode 100644 index 0000000000..397f19fa8c --- /dev/null +++ b/PermissionController/res/values-sl-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Varnost in zasebnost" + "Kontrolniki" + "Podatki" + "Health Connect" + "Dovoljenja za aplikacije in upravljanje podatkov" + diff --git a/PermissionController/res/values-sl/strings.xml b/PermissionController/res/values-sl/strings.xml index 8619ec9710..c4beae41ad 100644 --- a/PermissionController/res/values-sl/strings.xml +++ b/PermissionController/res/values-sl/strings.xml @@ -591,68 +591,36 @@ "Pokaži sporočilo, ko aplikacije dostopijo do besedila, slik ali drugih vsebin, ki ste jih kopirali." "Pokaži gesla" "Za trenutek prikaži znake med vnašanjem." - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Ta aplikacija navaja, da bo vaše lokacijske podatke morda delila s tretjimi osebami." + "Deljenje podatkov in lokacija" + "Vir informacij o deljenju podatkov" + "Razvijalec je z informacijami o tem, kako ta aplikacija deli podatke, seznanil trgovino z aplikacijami ""%1$s"". Te informacije bodo občasno morda posodobljene." + "Aplikacija lahko deli lokacijske podatke za:" + "%1$s" + "Načini deljenja podatkov se med seboj razlikujejo" + "Postopki obdelave podatkov se morda razlikujejo glede na različico aplikacije, uporabo, območje in starost. ""Preberite več o deljenju podatkov""." + "Vaši lokacijski podatki" + "Dostop te aplikacije lahko spremenite v ""nastavitvah zasebnosti""." + "Funkcija aplikacije" + "Analitika" + "Komunikacija z razvijalci" + "Oglaševanje ali trženje" + "Preprečevanje prevar, varnost in zagotavljanje skladnosti" + "Individualna prilagoditev" + "Upravljanje računa" + "Varnost podatkov" + "Lokacijski podatki so morda deljeni z drugimi" + "Ta aplikacija navaja, da bo vaše lokacijske podatke morda delila s tretjimi osebami." + "Posodobitve deljenja podatkov o lokaciji" + "Pregled aplikacij s spremembami v načinu deljenja vaših lokacijskih podatkov" + "Te aplikacije so spremenile način deljenja vaših lokacijskih podatkov. Prej jih morda sploh niso delile ali pa jih zdaj delijo za namene oglaševanja ali trženja." + "Razvijalci teh aplikacij so trgovino z aplikacijami seznanili z informacijami o svojih postopkih deljenja podatkov. Te informacije bodo občasno morda posodobljene.\n\nPostopki deljenja podatkov se lahko razlikujejo glede na različico aplikacije, njeno uporabo, regijo ali vašo starost." + "Preberite več o deljenju podatkov." + "Vaši lokacijski podatki so zdaj deljeni s tretjimi osebami." + "Vaši lokacijski podatki so zdaj deljeni s tretjimi osebami za namene oglaševanja ali trženja." + "{count,plural, =0{Posodobljeno v zadnjem dnevu}=1{Posodobljeno v zadnjem dnevu}one{Posodobljeno v zadnjem # dnevu}two{Posodobljeno v zadnjih # dneh}few{Posodobljeno v zadnjih # dneh}other{Posodobljeno v zadnjih # dneh}}" + "Trenutno ni nobenih posodobitev" + "Posodobitve deljenja podatkov" + "Nekatere aplikacije so spremenile način deljenja vaših lokacijskih podatkov." + "Nastavitve" diff --git a/PermissionController/res/values-sq-car/strings.xml b/PermissionController/res/values-sq-car/strings.xml new file mode 100644 index 0000000000..c908ec42a3 --- /dev/null +++ b/PermissionController/res/values-sq-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Nëse një aplikacion nuk përdoret për disa muaj:\n\n• Lejet hiqen për të mbrojtur të dhënat e tua\n• Skedarët e përkohshëm hiqen për të liruar hapësirën" + diff --git a/PermissionController/res/values-sq-v34/strings.xml b/PermissionController/res/values-sq-v34/strings.xml new file mode 100644 index 0000000000..575ccdedc3 --- /dev/null +++ b/PermissionController/res/values-sq-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Siguria dhe privatësia" + "Kontrollet" + "Të dhënat" + "Health Connect" + "Lejet e aplikacionit dhe menaxhimi i të dhënave" + diff --git a/PermissionController/res/values-sq/strings.xml b/PermissionController/res/values-sq/strings.xml index 02cc776d48..c16bf030be 100644 --- a/PermissionController/res/values-sq/strings.xml +++ b/PermissionController/res/values-sq/strings.xml @@ -591,68 +591,36 @@ "Shfaq një mesazh kur aplikacionet qasen te tekstet, imazhet ose përmbajtje të tjera që ke kopjuar" "Shfaq fjalëkalimet" "Shfaq karakteret shkurtimisht kur shkruan" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Ky aplikacion deklaroi se mund të ndajë të dhënat e vendndodhjes sate me palë të treta" + "Ndarja e të dhënave dhe vendndodhja" + "Nga vijnë informacionet rreth ndarjes së të dhënave" + "Zhvilluesi i ofroi informacione ""%1$s"" rreth mënyrës se si ky aplikacion ndan të dhënat. Informacionet mund të përditësohen me kalimin e kohës." + "Apl. mund të ndajë të dhënat e vendndodhjes për:" + "%1$s" + "Ndarja e të dhënave ndryshon" + "Veprimet me të dhënat mund të ndryshojnë bazuar në versionin e aplikacionit, përdorimin, rajonin dhe moshën tënde. ""Më shumë rreth ndarjes së të dhënave" + "Të dhënat e vendndodhjes sate" + "Ndrysho qasjen e këtij aplikacioni te ""cilësimet e privatësisë" + "Funksionaliteti i aplikacionit" + "Analiza" + "Komunikimet e zhvilluesit" + "Reklamimi dhe marketingu" + "Parandalimi i mashtrimeve, siguria dhe respektimi i rregullave" + "Personalizimi" + "Menaxhimi i llogarisë" + "Siguria e të dhënave" + "Të dhënat e vendndodhjes mund të ndahen" + "Ky aplikacion deklaroi se mund të ndajë të dhënat e vendndodhjes sate me palë të treta" + "Përditësime për ndarjen e të dhënave për vendndodhjen" + "Shqyrto aplikacionet që ndryshuan mënyrën se si mund të ndajnë të dhënat e vendndodhjes sate" + "Këto aplikacione kanë ndryshuar mënyrën se si mund të ndajnë të dhënat e vendndodhjes sate. Ato mund të mos i kenë ndarë më parë ose mund t\'i ndajnë tani për qëllime reklamimi dhe marketingu." + "Zhvilluesit e këtyre aplikacioneve i ofruan informacione rreth praktikave të tyre për ndarjen e të dhënave një dyqani aplikacionesh. Informacionet mund të përditësohen me kalimin e kohës.\n\nPraktikat për ndarjen e të dhënave mund të ndryshojnë bazuar në versionin e aplikacionit, përdorimin, rajonin dhe moshën tënde." + "Mëso rreth ndarjes së të dhënave" + "Të dhënat e vendndodhjes sate tani ndahen me palë të treta" + "Të dhënat e vendndodhjes sate tani ndahen me palë të treta për reklamim ose marketing" + "{count,plural, =0{Të përditësuara brenda ditës së fundit}=1{Të përditësuara brenda ditës së fundit}other{Të përditësuara brenda # ditëve}}" + "Nuk ka përditësime tani" + "Përditësimet për ndarjen e të dhënave" + "Disa aplikacione ndryshuan mënyrën se si mund të ndajnë të dhënat e vendndodhjes sate" + "Cilësimet" diff --git a/PermissionController/res/values-sv-v34/strings.xml b/PermissionController/res/values-sv-v34/strings.xml index b2915c68ec..a3c0bcfe35 100644 --- a/PermissionController/res/values-sv-v34/strings.xml +++ b/PermissionController/res/values-sv-v34/strings.xml @@ -20,7 +20,6 @@ "Säkerhet och integritet" "Kontroller" "Data" - - + "Health Connect" "Appbehörigheter och datahantering" diff --git a/PermissionController/res/values-sv/strings.xml b/PermissionController/res/values-sv/strings.xml index 78bebd13f0..5d9c2d9fef 100644 --- a/PermissionController/res/values-sv/strings.xml +++ b/PermissionController/res/values-sv/strings.xml @@ -592,26 +592,21 @@ "Visa lösenord" "Visa tecknen en kort stund medan du skriver" "Appen har angett att den kan dela din platsdata med tredje part" - - + "Datadelning och plats" "Härifrån kommer informationen om datadelning" - - + "Utvecklaren har angett information om hur appen delar data i ""%1$s"". Informationen kan uppdateras med tiden." "Appen kan dela platsdata för följande:" - - + "%1$s" "Datadelningen varierar" "Rutiner för data kan variera efter appversion, användning, region och din ålder. ""Läs mer om datadelning" "Din platsdata" "Ändra appens åtkomst i ""integritetsinställningarna" "Appfunktioner" - - + "Analys" "Kommunikation från utvecklaren" "Annonsering eller marknadsföring" "Säkerhet, efterlevnad och att förhindra bedrägeri" - - + "Anpassning" "Kontohantering" "Datasäkerhet" "Platsdata kan delas" @@ -619,13 +614,10 @@ "Uppdatering av datadelning för plats" "Granska appar som har ändrat hur de kan dela din platsdata" "Dessa appar har ändrat hur de kan dela din platsdata. De kanske inte har delat datan tidigare eller så delas den nu i annons och marknadsföringssyfte." - - + "Utvecklarna av dessa appar har angett information om sina datadelningsrutiner i en appbutik. Informationen kan uppdateras med tiden.\n\nDatadelningsrutinerna kan variera efter appversion, användning, region och din ålder." "Läs mer om datadelning" - - - - + "Din platsdata delas nu med tredje part" + "Din platsdata delas nu med tredje part i annonserings- eller marknadsföringssyfte" "{count,plural, =0{Uppdaterades under den senaste dagen}=1{Uppdaterades under den senaste dagen}other{Uppdaterades under de senaste # dagarna}}" "Inga uppdateringar just nu" "Uppdateringar av datadelning" diff --git a/PermissionController/res/values-sw-car/strings.xml b/PermissionController/res/values-sw-car/strings.xml new file mode 100644 index 0000000000..89e29961cf --- /dev/null +++ b/PermissionController/res/values-sw-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Programu isipotumika kwa miezi kadhaa:\n\n• Ruhusa huondolewa ili kulinda data yako\n• Faili za muda huondolewa ili kupata nafasi" + diff --git a/PermissionController/res/values-sw-v34/strings.xml b/PermissionController/res/values-sw-v34/strings.xml new file mode 100644 index 0000000000..0daf943ddf --- /dev/null +++ b/PermissionController/res/values-sw-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Usalama na faragha" + "Vidhibiti" + "Data" + "Health Connect" + "Ruhusa za programu na usimamizi wa data" + diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml index d51e4bd6da..81b713f1b1 100644 --- a/PermissionController/res/values-sw/strings.xml +++ b/PermissionController/res/values-sw/strings.xml @@ -591,68 +591,36 @@ "Onyesha ujumbe programu zinapofikia maandishi, picha au maudhui mengine uliyonakili" "Onyesha manenosiri" "Onyesha herufi kwa muda mfupi unapoandika" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Maelezo haya ya programu yanasema kuwa inaweza kushiriki data yako ya mahali na kampuni za wengine" + "Kushiriki data na mahali" + "Maelezo ya kushiriki data yanakotokea" + "Wasanidi programu wametoa maelezo kwenye ""%1$s"" kuhusu jinsi programu hii inavyoshiriki data. Inaweza kusasisha maelezo haya kadiri muda unavyosonga." + "Programu inaweza kushiriki data ya mahali ili:" + "%1$s" + "Kanuni za kushiriki data hutofautiana" + "Kanuni za data zinaweza kutofautiana kulingana na toleo la programu yako, matumizi, eneo na umri wako. ""Maelezo zaidi kuhusu kushiriki data" + "Data ya mahali ulipo" + "Badilisha ufikiaji wa programu hii kwenye ""mipangilio ya faragha" + "Utendaji wa programu" + "Takwimu" + "Mawasiliano ya msanidi programu" + "Utangazaji au uuzaji" + "Kuzuia ulaghai, usalama na kutii" + "Kuweka mapendeleo" + "Usimamizi wa akaunti" + "Usalama wa data" + "Data ya mahali inaweza kushirikiwa" + "Maelezo haya ya programu yanasema kuwa inaweza kushiriki data yako ya mahali na kampuni za wengine" + "Masasisho ya kushiriki data ya mahali" + "Kagua programu zilizobadilisha jinsi zinavyoweza kushiriki data ya mahali ulipo" + "Programu hizi zimebadilisha jinsi zinavyoweza kushiriki data ya mahali ulipo. Huenda hazikuishiriki hapo awali au sasa zinaweza kuishiriki kwa madhumuni ya utangazaji au uuzaji." + "Wasanidi wa programu hizi wametoa maelezo kuhusu mbinu zao za kushiriki data kwenye duka la programu. Wanaweza kuyasasisha kadiri muda unavyosonga.\n\nMbinu za kushiriki data zinaweza kutofautiana kulingana na toleo la programu, matumizi, eneo na umri wako." + "Pata maelezo kuhusu kushiriki data" + "Sasa data ya mahali ulipo inashirikiwa na wengine" + "Sasa data ya mahali ulipo inashirikiwa na wengine kwa madhumuni ya utangazaji au uuzaji" + "{count,plural, =0{Imesasisha ndani ya siku iliyopita}=1{Imesasisha ndani ya siku iliyopita}other{Imesasisha ndani ya siku #}}" + "Hakuna masasisho kwa wakati huu" + "Masasisho ya kushiriki data" + "Baadhi ya programu zimebadilisha jinsi zinavyoweza kushiriki data ya mahali ulipo" + "Mipangilio" diff --git a/PermissionController/res/values-ta/strings.xml b/PermissionController/res/values-ta/strings.xml index ab5c75120f..5a898e9ccd 100644 --- a/PermissionController/res/values-ta/strings.xml +++ b/PermissionController/res/values-ta/strings.xml @@ -592,11 +592,9 @@ "கடவுச்சொற்களைக் காட்டுதல்" "டைப் செய்யும்போதே எழுத்துகளைச் சற்று நேரம் காட்டும்" "இந்த ஆப்ஸில் குறிப்பிட்டுள்ளபடி மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவை இது பகிரலாம்" - - + "தரவுப் பகிர்வு மற்றும் இருப்பிடம்" "தரவுப் பகிர்வு குறித்த தகவல்கள் எங்கிருந்து பெறப்படுகின்றன?" - - + "இந்த ஆப்ஸ் தரவை எப்படிப் பகிர்கிறது என்பது குறித்த தகவல்களை டெவெலப்பர் ""%1$s"" என்பதற்கு வழங்கியுள்ளார். டெவெலப்பர் காலப்போக்கில் இந்தத் தகவல்களை மாற்றக்கூடும்." "ஆப்ஸ் இவற்றுக்காக இருப்பிடத் தரவைப் பகிரக்கூடும்:" @@ -605,28 +603,23 @@ "உங்கள் இருப்பிடத் தரவு" "இந்த ஆப்ஸுக்கான அணுகலை ""தனியுரிமை அமைப்புகளில்"" மாற்றலாம்" "ஆப்ஸ் செயல்பாடுகள்" - - + "பகுப்பாய்வுகள்" "டெவெலப்பர் தகவல்தொடர்புகள்" "விளம்பரப்படுத்தல் அல்லது மார்க்கெட்டிங்" "மோசடித் தடுப்பு, பாதுகாப்பு மற்றும் இணக்கம்" - - + "பிரத்தியேகமாக்கல்" "கணக்கு நிர்வாகம்" "தரவுப் பாதுகாப்பு" - "இருப்பிடத் தரவு பகிரப்பட்டிருக்கலாம்" + "இருப்பிடத் தரவு பகிரப்படலாம்" "இந்த ஆப்ஸில் குறிப்பிட்டுள்ளபடி மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவை இது பகிரலாம்" "இருப்பிடத்திற்கான தரவுப் பகிர்வு குறித்த அறிவிப்புகள்" "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தை மாற்றிய ஆப்ஸ் எவை எனப் பாருங்கள்" "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தை இந்த ஆப்ஸ் மாற்றியுள்ளன. இதற்குமுன் அவற்றைப் பகிராமல் இருந்திருக்கலாம் அல்லது விளம்பரப்படுத்தல், மார்கெட்டிங் போன்ற நோக்கங்களுக்காக இப்போது பகிரக்கூடும்." - - + "இந்த ஆப்ஸின் டெவெலப்பர்கள் தங்கள் தரவுப் பகிர்வு நடைமுறைகள் குறித்த தகவல்களை ஆப்ஸ்டோருக்கு வழங்கியுள்ளனர். காலப்போக்கில் அவற்றை அவர்கள் மாற்றக்கூடும்.\n\nஆப்ஸ் பதிப்பு, உபயோகம், பிராந்தியம், வயது ஆகியவற்றின் அடிப்படையில் தரவுப் பகிர்வு நடைமுறைகள் மாறுபடக்கூடும்." "தரவுப் பகிர்வு குறித்துத் தெரிந்துகொள்ளுங்கள்" - - - - - "{count,plural, =0{கடைசி நாளுக்குள் புதுப்பிக்கப்பட்டது}=1{கடைசி நாளுக்குள் புதுப்பிக்கப்பட்டது}other{# நாட்களுக்குள் புதுப்பிக்கப்பட்டது}}" + "உங்கள் இருப்பிடத் தரவு தற்போது மூன்றாம் தரப்பினருடன் பகிரப்பட்டுள்ளது" + "விளம்பரப்படுத்தல்/மார்க்கெட்டிங் நோக்கங்களுக்காக உங்கள் இருப்பிடத் தரவு தற்போது மூன்றாம் தரப்பினருடன் பகிரப்பட்டுள்ளது" + "{count,plural, =0{கடந்த நாளுக்குள் புதுப்பிக்கப்பட்டது}=1{கடந்த நாளுக்குள் புதுப்பிக்கப்பட்டது}other{# நாட்களுக்குள் புதுப்பிக்கப்பட்டது}}" "இப்போது அறிவிப்புகள் எதுவும் இல்லை" "தரவுப் பகிர்வு குறித்த அறிவிப்புகள்" "உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தைச் சில ஆப்ஸ் மாற்றியுள்ளன" diff --git a/PermissionController/res/values-te-v34/strings.xml b/PermissionController/res/values-te-v34/strings.xml index 47f689d47a..31f7b655e4 100644 --- a/PermissionController/res/values-te-v34/strings.xml +++ b/PermissionController/res/values-te-v34/strings.xml @@ -20,7 +20,6 @@ "సెక్యూరిటీ & గోప్యత" "కంట్రోల్స్" "డేటా" - - + "Health Connect" "యాప్ అనుమతులు, డేటా మేనేజ్‌మెంట్" diff --git a/PermissionController/res/values-te/strings.xml b/PermissionController/res/values-te/strings.xml index e6b342c703..8422aac65a 100644 --- a/PermissionController/res/values-te/strings.xml +++ b/PermissionController/res/values-te/strings.xml @@ -592,26 +592,21 @@ "పాస్‌వర్డ్‌లను చూపిస్తుంది" "మీరు టైప్ చేస్తున్నప్పుడు అక్షరాలను క్లుప్తంగా చూపిస్తుంది" "మీ లొకేషన్ డేటాను ఈ యాప్, థర్డ్-పార్టీలతో షేర్ చేయవచ్చని అది పేర్కొంది" - - + "డేటా షేరింగ్, లొకేషన్" "డేటా షేరింగ్‌కు సంబంధించిన సమాచారం ఎక్కడి నుంచి వస్తుంది" - - + "డెవలపర్ ఈ యాప్, డేటాను ఎలా షేర్ చేస్తుంది అనే సమాచారాన్ని ""%1$s""‌కు అందించారు. ఇది కాలానుగుణంగా ఈ సమాచారాన్ని అప్‌డేట్ చేయవచ్చు." "లొకేషన్ డేటాను యాప్ వీటి కోసం షేర్ చేయవచ్చు:" - - + "%1$s" "డేటా షేరింగ్ మారుతూ ఉంటుంది" "మీ యాప్ వెర్షన్, వినియోగం, ప్రాంతం ఇంకా వయస్సు ఆధారంగా డేటా ప్రాక్టీసులు మారవచ్చు. ""డేటా షేరింగ్ గురించిన మరింత సమాచారం" "మీ లొకేషన్ డేటా" "గోప్యతా సెట్టింగ్‌ల""కు వెళ్లడం ద్వారా ఈ యాప్‌నకు యాక్సెస్‌ను మార్చండి" "యాప్ ఫంక్షనాలిటీ" - - + "ఎనలిటిక్స్" "డెవలపర్ కమ్యూనికేషన్స్" "అడ్వర్టయిజింగ్ లేదా మార్కెటింగ్" "మోసాన్ని అరికట్టడం, సెక్యూరిటీ ఇంకా అనుకూలత" - - + "వ్యక్తిగతీకరణ" "ఖాతా మేనేజ్‌మెంట్" "డేటా భద్రత" "లొకేషన్ డేటా షేర్ చేయబడవచ్చు" @@ -619,13 +614,10 @@ "లొకేషన్‌కు సంబంధించిన డేటా షేరింగ్ అప్‌డేట్‌లు" "మీ లొకేషన్ డేటాను షేర్ చేసే విధానాన్ని మార్చిన యాప్‌లను రివ్యూ చేయండి" "ఈ యాప్‌లు మీరు మీ లొకేషన్ డేటాను షేర్ చేసే విధానాన్ని మార్చాయి. వారు దీన్ని ఇంతకు ముందు షేర్ చేసి ఉండకపోవచ్చు, లేదా ఇప్పుడు అడ్వర్టయిజింగ్ లేదా మార్కెటింగ్ ప్రయోజనాల కోసం షేర్ చేయవచ్చు." - - + "ఈ యాప్‌ల డెవలపర్‌లు, వారి డేటా షేరింగ్ ప్రాక్టీసుల గురించి ఒక యాప్ స్టోర్‌కు సమాచారాన్ని అందించారు. వారు దానిని కాలక్రమేణా అప్‌డేట్ చేయవచ్చు.\n\nడేటా షేరింగ్ ప్రాక్టీసులు మీ యాప్ వెర్షన్, వినియోగం, ప్రాంతం, ఇంకా వయస్సు ఆధారంగా మారవచ్చు." "డేటా షేరింగ్ గురించి తెలుసుకోండి" - - - - + "మీ లొకేషన్ డేటా ఇప్పుడు థర్డ్-పార్టీలతో షేర్ చేయబడుతుంది" + "మీ లొకేషన్ డేటా ఇప్పుడు అడ్వర్టయిజింగ్ లేదా మార్కెటింగ్ ప్రయోజనాల కోసం థర్డ్-పార్టీలతో షేర్ చేయబడుతుంది" "{count,plural, =0{చివరి రోజున అప్‌డేట్ చేయబడింది}=1{చివరి రోజున అప్‌డేట్ చేయబడింది}other{గత # రోజుల్లో అప్‌డేట్ చేయబడింది}}" "ఈ సమయంలో ఎటువంటి అప్‌డేట్‌లూ లేవు" "డేటా షేరింగ్ అప్‌డేట్‌లు" diff --git a/PermissionController/res/values-th/strings.xml b/PermissionController/res/values-th/strings.xml index 20d78475d1..3f35146def 100644 --- a/PermissionController/res/values-th/strings.xml +++ b/PermissionController/res/values-th/strings.xml @@ -617,7 +617,7 @@ "นักพัฒนาแอปเหล่านี้ได้ให้ข้อมูลเกี่ยวกับแนวทางปฏิบัติในการแชร์ข้อมูลไว้ใน App Store นักพัฒนาแอปอาจอัปเดตข้อมูลนี้เมื่อเวลาผ่านไป\n\nแนวทางปฏิบัติในการแชร์ข้อมูลอาจแตกต่างกันไปตามเวอร์ชันของแอป การใช้งาน ภูมิภาค และอายุ" "ดูรายละเอียดเกี่ยวกับการแชร์ข้อมูล" "มีการแชร์ข้อมูลตำแหน่งกับบุคคลที่สามในขณะนี้" - "มีการแชร์ข้อมูลตำแหน่งกับบุคคลที่สามเพื่อวัตถุประสงค์ในการโฆษณาหรือการตลาดในขณะนี้" + "มีการแชร์ข้อมูลตำแหน่งของคุณกับบุคคลที่สามในขณะนี้ เพื่อวัตถุประสงค์ในการโฆษณาหรือการตลาด" "{count,plural, =0{อัปเดตภายในวันที่ผ่านมา}=1{อัปเดตภายในวันที่ผ่านมา}other{อัปเดตภายใน # วันที่ผ่านมา}}" "ยังไม่มีข้อมูลอัปเดตในขณะนี้" "การอัปเดตการแชร์ข้อมูล" diff --git a/PermissionController/res/values-tl-v34/strings.xml b/PermissionController/res/values-tl-v34/strings.xml index aa73fba6dc..cd5f40e149 100644 --- a/PermissionController/res/values-tl-v34/strings.xml +++ b/PermissionController/res/values-tl-v34/strings.xml @@ -20,7 +20,6 @@ "Seguridad at privacy" "Mga Kontrol" "Data" - - + "Health Connect" "Mga pahintulot sa app at pamamahala ng data" diff --git a/PermissionController/res/values-tl/strings.xml b/PermissionController/res/values-tl/strings.xml index 9ea4993793..8cadffc886 100644 --- a/PermissionController/res/values-tl/strings.xml +++ b/PermissionController/res/values-tl/strings.xml @@ -592,26 +592,21 @@ "Ipakita ang mga password" "Ipakita sandali ang mga character habang nagta-type ka" "Isinaad ng app na ito na puwede nitong ibahagi ang iyong data ng lokasyon sa mga third party" - - + "Pagbabahagi ng data at lokasyon" "Saan nanggagaling ang impormasyon sa pagbabahagi ng data" - - + "Nagbigay ang developer ng impormasyon sa ""%1$s"" tungkol sa kung paano nagbabahagi ng data ang app na ito. Puwede nitong i-update ang impormasyong ito sa paglipas ng panahon." "Puwedeng magbahagi ng data ng lokasyon para sa:" - - + "%1$s" "Nag-iiba ang pagbabahagi ng data" "Posibleng mag-iba ang mga kagawian sa data batay sa iyong bersyon ng app, paggamit, rehiyon, at edad. ""Higit pa tungkol sa pagbabahagi ng data" "Iyong data ng lokasyon" "Palitan ang access ng app na ito sa ""mga setting ng privacy" "Functionality ng app" - - + "Analytics" "Mga komunikasyon ng developer" "Pag-advertise o marketing" "Pag-iwas sa panloloko, seguridad, at pagsunod" - - + "Pag-personalize" "Pamamahala sa account" "Kaligtasan ng data" "Puwedeng ibahagi ang data ng lokasyon" @@ -619,13 +614,10 @@ "Mga update sa pagbabahagi ng data para sa lokasyon" "Suriin ang mga app na nagbago ng paraan kung paano nila posibleng ibahagi ang iyong data ng lokasyon" "Binago ng mga app na ito ang paraan kung paano posibleng ibahagi ng mga ito ang iyong data ng lokasyon. Posibleng hindi pa nila ito ibinahagi noon, o ibinabahagi nila ito ngayon para sa mga layunin sa pag-advertise o marketing." - - + "Nagbigay ang mga developer ng mga app na ito ng impormasyon tungkol sa kanilang mga kagawian sa pagbabahagi ng data sa isang app store Puwede nilang i-update ito sa paglipas ng panahon.\n\nPuwedeng mag-iba ang mga kagawian sa pagbabahagi ng data batay sa bersyon ng iyong app, paggamit, rehiyon, at edad." "Matuto tungkol sa pagbabahagi ng data" - - - - + "Ibinabahagi na ngayon sa mga third party ang iyong data ng lokasyon" + "Ibinabahagi na ngayon ang iyong data ng lokasyon sa mga third party para sa pag-advertise o marketing" "{count,plural, =0{Na-update sa loob ng huling araw}=1{Na-update sa loob ng huling araw}one{Na-update sa loob ng # araw}other{Na-update sa loob ng # na araw}}" "Walang update sa ngayon" "Update sa pagbabahagi ng data" diff --git a/PermissionController/res/values-tr-car/strings.xml b/PermissionController/res/values-tr-car/strings.xml new file mode 100644 index 0000000000..d0deb049a1 --- /dev/null +++ b/PermissionController/res/values-tr-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uygulama birkaç ay kullanılmazsa:\n\n• Verilerinizi korumak için izinler kaldırılır.\n• Yer açmak için geçici dosyalar kaldırılır." + diff --git a/PermissionController/res/values-tr-v34/strings.xml b/PermissionController/res/values-tr-v34/strings.xml new file mode 100644 index 0000000000..7d3b6ae4a8 --- /dev/null +++ b/PermissionController/res/values-tr-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Güvenlik ve gizlilik" + "Denetimler" + "Veri" + "Health Connect" + "Uygulama izinleri ve veri yönetimi" + diff --git a/PermissionController/res/values-tr/strings.xml b/PermissionController/res/values-tr/strings.xml index ac2c418602..c1b780daac 100644 --- a/PermissionController/res/values-tr/strings.xml +++ b/PermissionController/res/values-tr/strings.xml @@ -591,68 +591,36 @@ "Uygulamalar kopyaladığınız metne, resimlere veya diğer içeriklere eriştiğinde mesaj gösterilsin." "Şifreleri göster" "Yazarken karakterleri kısa süreliğine göster" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Bu uygulama, konum verilerinizi üçüncü taraflarla paylaşabileceğini belirtti" + "Veri paylaşımı ve konum" + "Veri paylaşımı bilgilerinin kaynağı" + "Geliştirici, ""%1$s"" uygulama mağazasına bu uygulamanın veri paylaşımı yöntemleri hakkında bilgi sağladı. Bu bilgiyi zaman içinde güncelleyebilir." + "Uygulama, konum verilerini şunlar için paylaşabilir:" + "%1$s" + "Veri paylaşımı değişir" + "Veri uygulamaları; uygulama sürümünüz, kullanımınız, bölgeniz ve yaşınıza göre değişiklik gösterebilir. ""Veri paylaşımı hakkında daha fazla bilgi" + "Konum verileriniz" + "Bu uygulamanın erişimini ""gizlilik ayarlarından"" değiştirebilirsiniz" + "Uygulama işlevselliği" + "Analizler" + "Geliştirici iletişimleri" + "Reklam veya pazarlama" + "Sahtekarlığı önleme, güvenlik ve kanunlara uygunluk" + "Kişiselleştirme" + "Hesap yönetimi" + "Veri güvenliği" + "Konum verileri paylaşılabilir" + "Bu uygulama, konum verilerinizi üçüncü taraflarla paylaşabileceğini belirtti" + "Konum için veri paylaşımı güncellemeleri" + "Konum verilerinizi paylaşma şeklini değiştiren uygulamaları inceleyin" + "Bu uygulamalar, konum verilerinizi paylaşma şeklini değiştirdi. Konum verilerinizi daha önce paylaşmamış olabilirler veya artık reklam ya da pazarlama için paylaşabilirler." + "Bu uygulamaların geliştiricileri, bir uygulama mağazasına veri paylaşımı yöntemleri hakkında bilgi sağladı. Zaman içinde bu bilgileri güncelleyebilirler.\n\nVeri paylaşımı yöntemleri uygulama sürümüne, kullanıma, bölgeye ve yaşa göre değişebilir." + "Veri paylaşımı hakkında bilgi" + "Konum verileriniz artık üçüncü taraflarla paylaşılıyor" + "Konum verileriniz artık reklam ve pazarlama amacıyla üçüncü taraflarla paylaşılıyor" + "{count,plural, =0{Son 1 günde güncellendi}=1{Son 1 günde güncellendi}other{Son # günde güncellendi}}" + "Şu an için güncelleme yok" + "Veri paylaşımı güncellemeleri" + "Bazı uygulamalar, konum verilerinizi paylaşma şeklini değiştirdi" + "Ayarlar" diff --git a/PermissionController/res/values-uk-car/strings.xml b/PermissionController/res/values-uk-car/strings.xml new file mode 100644 index 0000000000..7b900ff5d5 --- /dev/null +++ b/PermissionController/res/values-uk-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Якщо ви не користуєтеся додатком кілька місяців:\n\n• дозволи буде скасовано, щоб захистити ваші дані;\n• тимчасові файли буде видалено, щоб звільнити місце на диску." + diff --git a/PermissionController/res/values-uk-v34/strings.xml b/PermissionController/res/values-uk-v34/strings.xml new file mode 100644 index 0000000000..cf3356fcdb --- /dev/null +++ b/PermissionController/res/values-uk-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Безпека й конфіденційність" + "Елементи керування" + "Дані" + "Health Connect" + "Дозволи для додатка та керування даними" + diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml index 65471870a3..bd9dbb046a 100644 --- a/PermissionController/res/values-uk/strings.xml +++ b/PermissionController/res/values-uk/strings.xml @@ -591,68 +591,36 @@ "З’являтиметься сповіщення, коли будь-який додаток отримуватиме доступ до скопійованого вами тексту, зображень чи іншого контенту" "Показувати паролі" "Ненадовго показувати символи під час введення" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Цей додаток повідомляє, що може передавати ваші геодані третім особам" + "Передавання даних і місцезнаходження" + "Звідки надходить інформація про передавання даних" + "Розробник надав ""%1$s"" інформацію про те, як цей додаток передає дані. Ця інформація може періодично оновлюватись." + "Цілі передавання геоданих додатком:" + "%1$s" + "Спосіб передавання даних може різнитися" + "Способи роботи з даними можуть різнитися залежно від версії додатка, його використання, регіону та віку користувача. ""Докладніше про передавання даних" + "Ваші геодані" + "Змініть доступ цього додатка в ""налаштуваннях конфіденційності" + "Функції додатка" + "Аналітика" + "Сповіщення від розробника" + "Реклама й маркетинг" + "Запобігання шахрайству, безпека й відповідність вимогам" + "Персоналізація" + "Керування обліковим записом" + "Безпека даних" + "Можуть передаватися геодані" + "Цей додаток повідомляє, що може передавати ваші геодані третім особам" + "Оновлення способу передавання геоданих" + "Перегляньте додатки, які змінили спосіб передавання ваших геоданих" + "Ці додатки змінили спосіб передавання ваших геоданих. Можливо, ваші дані раніше не передавалися або тепер вони можуть використовуватися для реклами й маркетингу." + "Розробники надали магазину додатків інформацію про свої методи передавання даних. Вони можуть періодично вносити зміни в цю інформацію.\n\nМетоди передавання даних можуть різнитися залежно від версії додатка, його використання, регіону й віку користувача." + "Докладніше про передавання даних" + "Ваші геодані тепер передаються третім особам" + "Ваші геодані тепер передаються третім особам для реклами чи маркетингу" + "{count,plural, =0{Оновлено за останній день}=1{Оновлено за останній день}one{Оновлено за # день}few{Оновлено за # дні}many{Оновлено за # днів}other{Оновлено за # дня}}" + "Наразі оновлень немає" + "Оновлення способу передавання даних" + "Деякі додатки змінили спосіб передавання ваших геоданих" + "Налаштування" diff --git a/PermissionController/res/values-ur-v34/strings.xml b/PermissionController/res/values-ur-v34/strings.xml index fb545f0d82..e113637781 100644 --- a/PermissionController/res/values-ur-v34/strings.xml +++ b/PermissionController/res/values-ur-v34/strings.xml @@ -20,7 +20,6 @@ "سیکیورٹی اور رازداری" "کنٹرولز" "ڈیٹا" - - + "Health Connect" "ایپ کی اجازتیں اور ڈیٹا مینجمنٹ" diff --git a/PermissionController/res/values-ur/strings.xml b/PermissionController/res/values-ur/strings.xml index 18da776935..6ca8726946 100644 --- a/PermissionController/res/values-ur/strings.xml +++ b/PermissionController/res/values-ur/strings.xml @@ -592,26 +592,21 @@ "پاس ورڈز دکھائیں" "ٹائپ کرتے وقت حروف کو مختصر طور پر ڈسپلے کریں" "اس ایپ نے بتایا ہے کہ یہ آپ کے مقام کے ڈیٹا کا اشتراک فریقین ثالث کے ساتھ کر سکتی ہے" - - + "ڈیٹا کا اشتراک اور مقام" "ڈیٹا کے اشتراک کی معلومات کا ذریعہ" - - + "‏ڈویلپر نے ""‏%1$s"" کو معلومات فراہم کی کہ یہ ایپ ڈیٹا کا اشتراک کیسے کرتی ہے۔ یہ وقت کے ساتھ اس معلومات کو اپ ڈیٹ کر سکتی ہے۔" "ایپ ذیل کے لیے مقام کے ڈیٹا کا اشتراک کر سکتی ہے:" - - + "%1$s" "ڈیٹا کا اشتراک مختلف ہوتا ہے" "آپ کے ایپ ورژن، استعمال، علاقے اور عمر کی بنیاد پر ڈیٹا پریکٹسز مختلف ہو سکتے ہیں۔ ""ڈیٹا کے اشتراک کے بارے میں مزید" "آپ کے مقام کا ڈیٹا" "رازداری کی ترتیبات"" میں اس ایپ کی رسائی کو تبدیل کریں" "ایپ کی فعالیت" - - + "اینالیٹکس" "ڈیولپر سے مواصلات" "تشہیر یا مارکیٹنگ" "دھوکے سے بچاؤ، سیکیورٹی اور تعمیل" - - + "ذاتی نوعیت سازی" "اکاؤنٹ کا نظم و نسق" "ڈیٹا کی حفاظت" "مقام کے ڈیٹا کا اشتراک کیا جا سکتا ہے" @@ -619,13 +614,10 @@ "مقام کیلئے ڈیٹا کے اشتراک کی اپ ڈیٹس" "ان ایپس کا جائزہ لیں جنہوں نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا" "ان ایپس نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا ہے۔ ہو سکتا ہے کہ انہوں نے پہلے اس کا اشتراک نہ کیا ہو یا ممکنہ طور پر اب تشہیر یا مارکیٹنگ کے مقاصد کے لیے اس کا اشتراک کر سکتی ہیں۔" - - + "‏ان ایپس کے ڈویلپرز نے اپنے ڈیٹا کے اشتراک کے طریقوں کے بارے میں App اسٹور کو معلومات فراہم کیں۔ وہ اسے وقت کے ساتھ اپ ڈیٹ کر سکتے ہیں۔\n\nڈیٹا کے اشتراک کے طریقے آپ کے ایپ ورژن، استعمال، علاقے اور عمر کی بنیاد پر مختلف ہو سکتے ہیں۔" "ڈیٹا کے اشتراک کے بارے میں جانیں" - - - - + "آپ کے مقام کے ڈیٹا کا اشتراک اب فریقین ثالث کے ساتھ کیا جاتا ہے" + "آپ کے مقام کے ڈیٹا کا اشتراک اب تشہیر یا مارکیٹنگ کے لیے فریقین ثالث کے ساتھ کیا جاتا ہے" "{count,plural, =0{آخری دن سے پہلے اپ ڈیٹ کی گئی}=1{آخری دن سے پہلے اپ ڈیٹ کی گئی}other{# دن سے پہلے اپ ڈیٹ کی گئی}}" "اس وقت کوئی اپ ڈیٹ نہیں ہے" "ڈیٹا کے اشتراک کی اپ ڈیٹس" diff --git a/PermissionController/res/values-uz/strings.xml b/PermissionController/res/values-uz/strings.xml index 0ab71caefa..187bbccc82 100644 --- a/PermissionController/res/values-uz/strings.xml +++ b/PermissionController/res/values-uz/strings.xml @@ -617,7 +617,7 @@ "Quyidagi ilovalar dasturchilari ilova doʻkoniga maʼlumotlar qanday ulashilishi haqida axborot bergan. Bu axborot keyinchalik yangilanishi mumkin.\n\nMaʼlumotlar ilova versiyasi, foydalanishi, mamlakat va yosh asosida ulashiladi." "Maʼlumotlar ulashuvi haqida batafsil" "Joylashuvingiz axboroti endi tashqariga ulashilmoqda" - "Joylashuvingiz axboroti endi reklama yoki marketing maqsadlarida tashqariga ulashilmoqda" + "Joylashuvingizga oid axborotlar endi reklama yoki marketing maqsadlarida tashqariga ulashilmoqda" "{count,plural, =0{Oxirgi bir kunda yangilandi}=1{Oxirgi bir kunda yangilandi}other{Oxirgi # kunda yangilandi}}" "Hozircha yangilanishlar mavjud emas" "Axborot ulashuvi yangilanishi" diff --git a/PermissionController/res/values-vi-v34/strings.xml b/PermissionController/res/values-vi-v34/strings.xml index 9c3c4ad65c..8cc8d2cd53 100644 --- a/PermissionController/res/values-vi-v34/strings.xml +++ b/PermissionController/res/values-vi-v34/strings.xml @@ -20,7 +20,6 @@ "Tính bảo mật và quyền riêng tư" "Các chế độ kiểm soát" "Dữ liệu" - - + "Health Connect" "Quản lý dữ liệu và quyền cho ứng dụng" diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index d3ad9233bd..aa7cb7fcaf 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -592,26 +592,21 @@ "Hiển thị mật khẩu" "Hiển thị các ký tự ngắn gọn khi bạn nhập" "Nhà phát triển nêu rõ rằng ứng dụng này có thể chia sẻ dữ liệu vị trí với bên thứ ba" - - + "Chia sẻ dữ liệu và thông tin vị trí" "Nguồn cung cấp thông tin về cách thức chia sẻ dữ liệu" - - + "Nhà phát triển đã cung cấp thông tin cho ""%1$s"" về cách thức ứng dụng này chia sẻ dữ liệu. Họ có thể cập nhật thông tin này theo thời gian." "Ứng dụng này có thể chia sẻ dữ liệu vị trí cho:" - - + "%1$s" "Nhiều cách thức chia sẻ dữ liệu" "Cách thức xử lý dữ liệu có thể thay đổi tuỳ theo phiên bản ứng dụng, cách sử dụng, khu vực và độ tuổi của bạn. ""Tìm hiểu thêm về chế độ chia sẻ dữ liệu" "Dữ liệu vị trí của bạn" "Thay đổi quyền truy cập của ứng dụng này trong ""chế độ cài đặt quyền riêng tư" "Chức năng của ứng dụng" - - + "Số liệu phân tích" "Thông tin liên lạc của nhà phát triển" "Quảng cáo hoặc tiếp thị" "Chống lừa đảo, bảo mật và tuân thủ quy định" - - + "Cá nhân hoá" "Quản lý tài khoản" "An toàn dữ liệu" "Dữ liệu vị trí có thể được chia sẻ" @@ -619,13 +614,10 @@ "Nội dung cập nhật về cách thức chia sẻ dữ liệu vị trí" "Xem xét những ứng dụng đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn" "Những ứng dụng này đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn. Có thể những ứng dụng này trước đây chưa từng chia sẻ dữ liệu vị trí, nhưng bây giờ mới chia sẻ dữ liệu đó nhằm mục đích quảng cáo hoặc tiếp thị." - - + "Nhà phát triển của những ứng dụng này đã cung cấp thông tin cho cửa hàng ứng dụng về cách thức ứng dụng của họ chia sẻ dữ liệu. Họ có thể cập nhật thông tin này theo thời gian.\n\nCách thức chia sẻ dữ liệu có thể thay đổi tuỳ theo phiên bản ứng dụng, cách sử dụng, khu vực và độ tuổi của bạn." "Tìm hiểu về chế độ chia sẻ dữ liệu" - - - - + "Dữ liệu vị trí của bạn nay được chia sẻ với bên thứ ba" + "Dữ liệu vị trí của bạn giờ đây được chia sẻ với các bên thứ ba để quảng cáo hoặc tiếp thị" "{count,plural, =0{Cập nhật trong ngày vừa qua}=1{Cập nhật trong ngày vừa qua}other{Cập nhật trong # ngày vừa qua}}" "Hiện không có nội dung cập nhật nào" "Nội dung cập nhật về cách thức chia sẻ dữ liệu" diff --git a/PermissionController/res/values-zh-rCN-car/strings.xml b/PermissionController/res/values-zh-rCN-car/strings.xml new file mode 100644 index 0000000000..62e88115f2 --- /dev/null +++ b/PermissionController/res/values-zh-rCN-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "如果您连续几个月未使用某个应用,系统将对该应用采取以下措施:\n\n• 撤消授予该应用的权限以保护您的数据\n• 移除临时文件以释放空间" + diff --git a/PermissionController/res/values-zh-rCN-v34/strings.xml b/PermissionController/res/values-zh-rCN-v34/strings.xml new file mode 100644 index 0000000000..d140322e40 --- /dev/null +++ b/PermissionController/res/values-zh-rCN-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "安全性和隐私权" + "控件" + "数据" + "Health Connect" + "应用权限和数据管理" + diff --git a/PermissionController/res/values-zh-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml index 7ec840e39f..b3f05f18b7 100644 --- a/PermissionController/res/values-zh-rCN/strings.xml +++ b/PermissionController/res/values-zh-rCN/strings.xml @@ -591,68 +591,36 @@ "系统会在应用访问您复制的文字、图片或其他内容时显示一条消息" "显示密码" "输入时短暂显示字符" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "此应用已声明它可能会与第三方分享您的位置数据" + "数据分享和位置信息" + "数据分享信息的来源" + "开发者已将此应用的数据分享方式相关信息提供给""%1$s""。此类信息可能会随时间更新。" + "该应用可能会出于以下目的分享位置数据:" + "%1$s" + "数据分享因情况而异" + "数据方面的做法可能会因应用版本、使用情况、地区和年龄而异。""详细了解数据分享" + "您的位置数据" + "在""隐私设置""中更改此应用的访问权限" + "应用功能" + "分析" + "开发者通讯" + "广告或营销" + "欺诈防范、安全和法规遵从" + "个性化" + "帐号管理" + "数据安全" + "可能会分享位置数据" + "此应用已声明它可能会与第三方分享您的位置数据" + "位置数据分享方面的更新" + "查看改变了位置数据分享方式的应用" + "这些应用改变了它们的位置数据分享方式。它们之前可能未分享过位置数据,也可能现在是为了广告或营销目的而分享此类数据。" + "这些应用的开发者已将其数据分享做法相关信息提供给应用商店。此类信息可能会随时间更新。\n\n数据分享做法可能会因应用版本、使用情况、地区和年龄而异。" + "了解数据分享" + "您的位置数据现已分享给第三方" + "您的位置数据现在会分享给第三方,用于广告或营销目的" + "{count,plural, =0{更新时间在过去 1 天内}=1{更新时间在过去 1 天内}other{更新时间在过去 # 天内}}" + "目前无更新" + "数据分享方面的更新" + "某些应用改变了它们的位置数据分享方式" + "设置" diff --git a/PermissionController/res/values-zh-rHK-v34/strings.xml b/PermissionController/res/values-zh-rHK-v34/strings.xml index 82d6caef43..193139f5cc 100644 --- a/PermissionController/res/values-zh-rHK-v34/strings.xml +++ b/PermissionController/res/values-zh-rHK-v34/strings.xml @@ -20,7 +20,6 @@ "安全性和私隱權" "控制項" "資料" - - + "Health Connect" "應用程式權限和資料管理" diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml index 68ac4555a6..0ba57f87f6 100644 --- a/PermissionController/res/values-zh-rHK/strings.xml +++ b/PermissionController/res/values-zh-rHK/strings.xml @@ -592,26 +592,21 @@ "顯示密碼" "輸入時短暫顯示字元" "此應用程式表明可能會與第三方分享您的位置資料" - - + "資料分享和位置" "資料分享的資料來源" - - + "開發人員向""%1$s""提供資料,說明此應用程式的資料分享方式,有關資料可能會隨時間更新。" "應用程式可能分享位置資料作以下用途:" - - + "%1$s" "資料分享方式差異" "資料處理方法可因應用程式版本、使用情況、所在地區和年齡而異。""進一步瞭解資料分享" "您的位置資料" "如要變更此應用程式的存取權,請前往""私隱權設定" "應用程式功能" - - + "數據分析" "開發人員通訊" "廣告或市場推廣" "預防欺詐、安全和合規" - - + "個人化" "帳戶管理" "資料安全" "系統可能會分享位置資料" @@ -619,13 +614,10 @@ "位置資料分享更新" "查看已變更位置資料分享方式的應用程式" "這些應用程式已變更位置資料分享方式。它們可能未曾分享位置資料,或現在可能分享這些資料作廣告或市場推廣用途。" - - + "這些應用程式的開發人員向應用程式商店提供資料分享做法相關資料,並可能會隨時間更新這些資料。\n\n資料分享方法可因應用程式版本、使用情況、所在地區和年齡而異。" "進一步瞭解資料分享" - - - - + "您的位置資料現已與第三方分享" + "您的位置資料現已與第三方分享,以作廣告或市場推廣用途" "{count,plural, =0{於過去一天內更新}=1{於過去一天內更新}other{於過去 # 天內更新}}" "目前沒有更新" "資料分享更新" diff --git a/PermissionController/res/values-zh-rTW-car/strings.xml b/PermissionController/res/values-zh-rTW-car/strings.xml new file mode 100644 index 0000000000..24062f2d50 --- /dev/null +++ b/PermissionController/res/values-zh-rTW-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "如果你數個月未使用某應用程式,系統將對該應用程式採取以下措施:\n\n• 移除權限以保護你的資料\n• 移除暫存檔以釋出空間" + diff --git a/PermissionController/res/values-zh-rTW-v34/strings.xml b/PermissionController/res/values-zh-rTW-v34/strings.xml new file mode 100644 index 0000000000..8928b0b932 --- /dev/null +++ b/PermissionController/res/values-zh-rTW-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "安全性與隱私權" + "控制選項" + "資料" + "Health Connect" + "應用程式權限和資料管理" + diff --git a/PermissionController/res/values-zh-rTW/strings.xml b/PermissionController/res/values-zh-rTW/strings.xml index 23ccdeb494..05339eafbb 100644 --- a/PermissionController/res/values-zh-rTW/strings.xml +++ b/PermissionController/res/values-zh-rTW/strings.xml @@ -591,68 +591,36 @@ "系統會在應用程式存取你複製的文字、圖片或其他內容時顯示通知訊息" "顯示密碼" "輸入密碼時,短暫顯示剛輸入的字元" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "這個應用程式表示可能會將位置資料分享給第三方" + "資料分享做法與位置資料" + "資料分享做法相關資訊的來源" + "開發人員已將這個應用程式的資料分享做法相關資訊提供給 ""%1$s"",並可能會隨著時間更新這項資訊。" + "這個應用程式分享位置資料的可能目的如下:" + "%1$s" + "資料分享做法差異" + "根據你的應用程式版本、使用方式、所在地區與年齡,資料相關做法可能會有所不同。""進一步瞭解資料分享" + "你的位置資料" + "你可以前往""隱私權設定""變更這個應用程式的存取權" + "應用程式功能" + "分析" + "開發人員通知" + "廣告或行銷" + "詐欺防範、安全性和法規遵循" + "個人化" + "帳戶管理" + "資料安全" + "可能會分享位置資料" + "這個應用程式表示可能會將位置資料分享給第三方" + "位置資料分享更新" + "查看哪些應用程式變更了分享位置資料的做法" + "以下應用程式變更了分享位置資料的做法。這些應用程式先前可能未曾分享位置資料,也可能是現在為了廣告或行銷目的而分享這些資料。" + "這些應用程式的開發人員已將資料分享做法相關資訊提供給應用程式商店,並可能會隨著時間更新這些資訊。\n\n資料分享做法可能會因你的應用程式版本、使用方式、所在地區和年齡而異。" + "瞭解資料分享做法" + "你的位置資料目前已分享給第三方" + "你的位置資料目前已分享給第三方服務作為廣告或行銷用途" + "{count,plural, =0{在 1 天內曾更新}=1{在 1 天內曾更新}other{在 # 天內曾更新}}" + "目前沒有更新" + "資料分享做法更新" + "部分應用程式變更了分享位置資料的做法" + "設定" diff --git a/PermissionController/res/values-zu-car/strings.xml b/PermissionController/res/values-zu-car/strings.xml new file mode 100644 index 0000000000..32ff137b74 --- /dev/null +++ b/PermissionController/res/values-zu-car/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uma i-app ingasetshenziswa izinyanga ezimbalwa:\n\n• Izimvume ziyasuswa ukuze kuvikelwe idatha yakho\n• Amafayela esikhashana ayasuswa ukuze kuvulwe isikhala" + diff --git a/PermissionController/res/values-zu-v34/strings.xml b/PermissionController/res/values-zu-v34/strings.xml new file mode 100644 index 0000000000..e56b40e434 --- /dev/null +++ b/PermissionController/res/values-zu-v34/strings.xml @@ -0,0 +1,25 @@ + + + + + "Ukuvikeleka nobumfihlo" + "Izilawuli" + "Idatha" + "Health Connect" + "Izimvume zedatha nokuphathwa kwedatha" + diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml index 14c58df290..eb0e1a80c4 100644 --- a/PermissionController/res/values-zu/strings.xml +++ b/PermissionController/res/values-zu/strings.xml @@ -591,68 +591,36 @@ "Bonisa umlayezo uma ama-app wakho afinyelela umbhalo, izithombe, noma okunye okuqukethwe okukopishile" "Bonisa amaphasiwedi" "Bonisa izinhlamvu kancane njengoba uthayipha" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Le-app ithe ingabelana ngedatha yendawo nezinkampani ezingahlangene ngqo" + "Ukwabelana ngedatha nendawo" + "Lapho ulwazi lokwabelana ngedatha luvela khona" + "Unjiniyela unikeze ulwazi ku-""%1$s"" mayelana nokuthi le-app yabelana kanjani ngedatha. Ingase ibuyekeze lolu lwazi ngokuhamba kwesikhathi." + "I-app ingabelana ngedatha yendawo ye-:" + "%1$s" + "Ukwabelana ngedatha kuyahlukahluka" + "Izinqubo zedatha zingahluka kuye ngohlobo lwe-app yakho, ukusetshenziswa, indawo, nobudala. ""Okuningi mayelana nokwabelana ngedatha" + "Idatha yendawo yakho" + "Shintsha ukufinyelela kwale app ""kumasethingi emqubomgomo" + "Okwenziwa yi-app" + "Izibalo" + "Ukuxhumana konjiniyela" + "Ukukhangisa noma ukumaketha" + "Ukugwema ukukhwabanisa, ukuvikeleka, nokuthobela" + "Ukwenza ngokomuntu ngamunye" + "Ukuphathwa kwe-akhawunti" + "Ukuphepha kwedatha" + "Idatha yendawo ingase yabiwe" + "Le-app ithe ingabelana ngedatha yendawo nezinkampani ezingahlangene ngqo" + "Izibuyekezo zokwabelana ngedatha zendawo" + "Buyekeza ama-app aguqule indlela angabelana ngayo ngedatha yendawo yakho" + "Lama-app ashintshe indlela angabelana ngayo ngedatha yendawo yakho. Kungenzeka abakaze babelane ngayo ngaphambili, noma manje sebengase babelane ngayo ngezinjongo zokukhangisa noma zokumaketha." + "Onjiniyela balama-app banikeze ulwazi mayelana nezinqubo zabo zokwabelana ngedatha ku-app store. Bangase bayibuyekeze ngokuhamba kwesikhathi.\n\nIzinqubo zokwabelana ngedatha zingahluka kuya ngohlobo lwe-app yakho, ukusetshenziswa, indawo, nobudala." + "Funda mayelana nokwabelana ngedatha" + "Idatha yendawo yakho manje seyabiwe nezinkampani ezingahlangane ngqo" + "Idatha yendawo yakho manje seyabiwe nezinkampani ezingahlangene ngqo zokukhangisa noma ukumaketha" + "{count,plural, =0{Kubuyekezwe phakathi nosuku lokugcina}=1{Kubuyekezwe phakathi nosuku lokugcina}one{Kubuyekezwe phakathi kwezinsuku ezingu-#}other{Kubuyekezwe phakathi kwezinsuku ezingu-#}}" + "Azikho izibuyekezo ngalesi sikhathi" + "Izibuyekezo zokwabelana ngedatha" + "Amanye ama-app aguqule indlela angabelana ngayo ngedatha yendawo yakho" + "Amasethingi" -- GitLab From 00f782b1aac40854fbfb3df705080de355a0c55f Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 27 Feb 2023 01:18:15 -0800 Subject: [PATCH 015/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Id5479b6c0a526114e06f2fae1a439b7eca16fe0b --- .../Resources/res/values-af-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-am-v34/strings.xml | 12 +++----- .../Resources/res/values-ar-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-as-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-az-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-be-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-bg-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-bn-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-bs-v34/strings.xml | 14 ++++----- .../Resources/res/values-ca-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-cs-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-da-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-de-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-el-v34/strings.xml | 30 +++++++------------ .../res/values-en-rAU-v34/strings.xml | 2 +- .../res/values-en-rGB-v34/strings.xml | 2 +- .../res/values-en-rIN-v34/strings.xml | 2 +- .../res/values-es-rUS-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-es-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-et-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-eu-v34/strings.xml | 12 +++----- .../Resources/res/values-fa-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-fi-v34/strings.xml | 30 +++++++------------ .../res/values-fr-rCA-v34/strings.xml | 12 +++----- .../Resources/res/values-fr-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-gl-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-gu-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-hi-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-hu-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-hy-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-in-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-is-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-iw-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ja-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ka-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-kk-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-km-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-kn-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ko-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ky-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-lo-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-lt-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-lv-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-mk-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-mn-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-mr-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ms-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-my-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-nb-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ne-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-nl-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-or-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-pa-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-pl-v34/strings.xml | 30 +++++++------------ .../res/values-pt-rBR-v34/strings.xml | 30 +++++++------------ .../res/values-pt-rPT-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-pt-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ro-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ru-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-si-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-sk-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-sl-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-sq-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-sv-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-sw-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ta-v34/strings.xml | 12 +++----- .../Resources/res/values-te-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-tl-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-tr-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-uk-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-ur-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-uz-v34/strings.xml | 6 ++-- .../Resources/res/values-vi-v34/strings.xml | 30 +++++++------------ .../res/values-zh-rCN-v34/strings.xml | 30 +++++++------------ .../res/values-zh-rHK-v34/strings.xml | 30 +++++++------------ .../res/values-zh-rTW-v34/strings.xml | 30 +++++++------------ .../Resources/res/values-zu-v34/strings.xml | 30 +++++++------------ 77 files changed, 709 insertions(+), 1405 deletions(-) diff --git a/SafetyCenter/Resources/res/values-af-v34/strings.xml b/SafetyCenter/Resources/res/values-af-v34/strings.xml index 3e36d42c84..e20fd6fcd3 100644 --- a/SafetyCenter/Resources/res/values-af-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-af-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Gesondheid, Health Connect" + "Datadelingopdaterings vir ligging" + "Data, datadeling, datadelingopdaterings, datadelingopdaterings vir ligging, deling" + "Advertensieprivaatheid" + "Pasmaak inligting wat apps gebruik om vir jou advertensies te wys" + "advertensies, advertensieprivaatheid, privacy sandbox, advertensie-onderwerpe, appvoorgestelde advertensies, advertensiemeting" + "Biometriese data vir werk" + "Nog instellings" + "Enkripsie, eiebewyse, en meer" diff --git a/SafetyCenter/Resources/res/values-am-v34/strings.xml b/SafetyCenter/Resources/res/values-am-v34/strings.xml index 3e36d42c84..3eb261c493 100644 --- a/SafetyCenter/Resources/res/values-am-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-am-v34/strings.xml @@ -21,18 +21,14 @@ - - + "ለአካባቢ የውሂብ ማጋራት ዝማኔዎች" - - - - + "የማስታወቂያዎች ግላዊነት" + "መተግበሪያዎች ማስታወቂያዎችን ለእርስዎ ለማሳየት የሚጠቀሙትን መረጃ ያብጁ" - - + "የሥራ ባዮሜትሪክስ" diff --git a/SafetyCenter/Resources/res/values-ar-v34/strings.xml b/SafetyCenter/Resources/res/values-ar-v34/strings.xml index 3e36d42c84..4c6744d8ee 100644 --- a/SafetyCenter/Resources/res/values-ar-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ar-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "‏الصحة، Health Connect" + "تعديلات مشاركة بيانات الموقع الجغرافي" + "البيانات، مشاركة البيانات، تعديلات مشاركة البيانات، تعديلات مشاركة بيانات الموقع الجغرافي، المشاركة" + "الخصوصية في عرض الإعلانات" + "تخصيص المعلومات التي تستخدمها التطبيقات لعرض الإعلانات لك" + "الإعلانات، الخصوصية في عرض الإعلانات، مبادرة حماية الخصوصية، مواضيع الإعلانات، الإعلانات المقترَحة من التطبيقات، قياس أداء الإعلانات" + "المقاييس الحيوية لتطبيقات العمل" + "إعدادات إضافية" + "التشفير وبيانات الاعتماد وغير ذلك" diff --git a/SafetyCenter/Resources/res/values-as-v34/strings.xml b/SafetyCenter/Resources/res/values-as-v34/strings.xml index 3e36d42c84..5015547a98 100644 --- a/SafetyCenter/Resources/res/values-as-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-as-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "স্বাস্থ্য, Health Connect" + "অৱস্থানৰ বাবে ডেটা শ্বেয়াৰ কৰাৰ আপডে’ট" + "ডেটা, ডেটা শ্বেয়াৰ কৰা, ডেটা শ্বেয়াৰ কৰা সম্পৰ্কীয় আপডে’ট, অৱস্থানৰ বাবে ডেটা শ্বেয়াৰ কৰাৰ আপডে’ট, শ্বেয়াৰ কৰা" + "বিজ্ঞাপনৰ গোপনীয়তা" + "আপোনাক বিজ্ঞাপন দেখুৱাবলৈ তথ্য এপৰ ব্যৱহাৰ কাষ্টমাইজ কৰক" + "বিজ্ঞাপন, বিজ্ঞাপনৰ গোপনীয়তা, প্ৰাইভেচি ছেণ্ডবক্স, বিজ্ঞাপনৰ বিষয়বস্তু, এপে পৰামৰ্শ দিয়া বিজ্ঞাপন, বিজ্ঞাপনৰ জোখ-মাখ" + "কৰ্মস্থানৰ এপৰ বাবে বায়’মেট্ৰিক" + "অধিক ছেটিং" + "এনক্ৰিপশ্বন, ক্ৰেডেনশ্বিয়েল আৰু বহুতো" diff --git a/SafetyCenter/Resources/res/values-az-v34/strings.xml b/SafetyCenter/Resources/res/values-az-v34/strings.xml index 3e36d42c84..99708551a1 100644 --- a/SafetyCenter/Resources/res/values-az-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-az-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Sağlamlıq, Health Connect" + "Məkan üzrə data paylaşımı yenilikləri" + "Data, Data paylaşımı, Data paylaşımı yenilikləri, Məkan üzrə data paylaşımı, paylaşım" + "Reklam məxfiliyi" + "Tətbiqlərin sizə reklam göstərmək üçün istifadə etdiyi məlumatları fərdiləşdirin" + "reklamlar, reklam məxfiliyi, təhlükəsiz sandbox, reklam mövzuları, tətbiq tərəfindən təklif edilən reklamlar, reklam ölçüsü" + "İş üçün biometrik seçimlər" + "Digər ayarlar" + "Şifrələmə, giriş məlumatları və s." diff --git a/SafetyCenter/Resources/res/values-be-v34/strings.xml b/SafetyCenter/Resources/res/values-be-v34/strings.xml index 3e36d42c84..6fdb706a59 100644 --- a/SafetyCenter/Resources/res/values-be-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-be-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Здароўе і спорт" + "Здароўе, Здароўе і спорт" + "Змяненні ў абагульванні даных пра месцазнаходжанне" + "Даныя, абагульванне даных, Змяненні ў абагульванні даных, Змяненні ў абагульванні даных пра месцазнаходжанне, абагульванне" + "Прыватнасць у рэкламе" + "Наладзьце інфармацыю, якую праграмы выкарыстоўваюць для паказу вам рэкламы" + "рэклама, прыватнасць у рэкламе, Privacy Sandbox, тэмы аб\'явы, рэклама, прапанаваная праграмай, эфектыўнасць рэкламы" + "Біяметрыя для працоўных праграм" + "Дадатковыя налады" + "Шыфраванне, уліковыя даныя і іншыя звесткі" diff --git a/SafetyCenter/Resources/res/values-bg-v34/strings.xml b/SafetyCenter/Resources/res/values-bg-v34/strings.xml index 3e36d42c84..8925915446 100644 --- a/SafetyCenter/Resources/res/values-bg-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-bg-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "здраве, health connect" + "Актуализации за споделянето на данни за местоположението" + "данни, споделяне на данни, актуализации за споделянето на данни, актуализации за споделянето на данни за местоположението, споделяне" + "Поверителност при рекламите" + "Персонализиране на информацията, която приложенията използват, за да ви показват реклами" + "реклами, поверителност при рекламите, privacy sandbox, рекламни теми, предложени от приложенията реклами, измерване на рекламите" + "Биометрика за служебните приложения" + "Още настройки" + "Шифроване, идентификационни данни и др." diff --git a/SafetyCenter/Resources/res/values-bn-v34/strings.xml b/SafetyCenter/Resources/res/values-bn-v34/strings.xml index 3e36d42c84..b327efbb71 100644 --- a/SafetyCenter/Resources/res/values-bn-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-bn-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "স্বাস্থ্য, Health Connect" + "লোকেশনের জন্য ডেটা শেয়ারিং সম্পর্কিত আপডেট" + "ডেটা, ডেটা শেয়ার করা, ডেটা শেয়ার করা সংক্রান্ত আপডেট, লোকেশনের জন্য ডেটা শেয়ারিং সম্পর্কিত আপডেট, শেয়ার করা" + "বিজ্ঞাপন সংক্রান্ত গোপনীয়তা" + "আপনাকে বিজ্ঞাপন দেখানোর জন্য অ্যাপের ব্যবহার করা তথ্য কাস্টমাইজ করুন" + "বিজ্ঞাপন, বিজ্ঞাপন সংক্রান্ত গোপনীয়তা, প্রাইভেসি স্যান্ডবক্স, বিজ্ঞাপনের বিষয়, অ্যাপের সাজেস্ট করা বিজ্ঞাপন, বিজ্ঞাপন সম্পর্কিত পরিমাপ" + "কাজের জন্য বায়োমেট্রিক্স" + "আরও সেটিংস" + "এনক্রিপশন, ক্রেডেনশিয়াল ও আরও অনেক কিছু" diff --git a/SafetyCenter/Resources/res/values-bs-v34/strings.xml b/SafetyCenter/Resources/res/values-bs-v34/strings.xml index 4ab3828692..a2e69f4e26 100644 --- a/SafetyCenter/Resources/res/values-bs-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-bs-v34/strings.xml @@ -17,15 +17,15 @@ - "Health Connect" + "Health Connect" "Zdravlje, Health Connect" "Ažuriranja dijeljenja podataka za lokaciju" - "podaci, dijeljenje podataka, ažuriranja dijeljenja podataka, ažuriranja dijeljenja podataka za lokaciju, dijeljenje" - "Zaštita privatnosti u online oglašavanju" - "Prilagodite podatke koje aplikacije koriste da bi vam prikazivale oglase" - "oglasi, zaštita privatnosti u online oglašavanju, privacy sandbox, teme oglasa, oglasi koje predlažu aplikacije, mjerenje oglasa" - "Biometrijski podaci za posao" + "Podaci, dijeljenje podataka, ažuriranja dijeljenja podataka, ažuriranje dijeljenja podataka za lokaciju, dijeljenje" + "Privatnost pri izloženosti oglasima" + "Prilagodite informacije koje aplikacije koriste da vam prikazuju oglase" + "oglasi, privatnost pri izloženosti oglasima, okruženje zaštićene privatnosti, teme oglasa, oglasi koje predlažu aplikacije, mjerenje oglasa" + "Biometrija za rad" "Više postavki" - "Šifriranje, vjerodajnice i drugo" + "Šifriranje, akreditivi i drugo" diff --git a/SafetyCenter/Resources/res/values-ca-v34/strings.xml b/SafetyCenter/Resources/res/values-ca-v34/strings.xml index 3e36d42c84..295560f46e 100644 --- a/SafetyCenter/Resources/res/values-ca-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ca-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Salut connectada" + "salut, salut connectada" + "Actualitzacions en la compartició de dades per a la ubicació" + "dades, compartició de dades, actualitzacions de compartició de dades, actualitzacions en la compartició de dades per a la ubicació, compartició" + "Privadesa d\'anuncis" + "Personalitza la informació que les aplicacions utilitzen per mostrar-te anuncis" + "anuncis, privadesa d\'anuncis, privacy sandbox, temes d\'anuncis, anuncis suggerits per aplicacions, mesurament d\'anuncis" + "Biometria per al treball" + "Més opcions" + "Encriptació, credencials i més" diff --git a/SafetyCenter/Resources/res/values-cs-v34/strings.xml b/SafetyCenter/Resources/res/values-cs-v34/strings.xml index 3e36d42c84..ca32218025 100644 --- a/SafetyCenter/Resources/res/values-cs-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-cs-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "zdraví, Health Connect" + "Aktualizace sdílení údajů o poloze" + "data, sdílení dat, aktualizace sdílení dat, aktualizace sdílení údajů o poloze, sdílení" + "Ochrana soukromí v reklamách" + "Přizpůsobte údaje, které aplikace používají k zobrazování reklam" + "reklamy, ochrana, soukromí v reklamách, privacy sandbox, témata reklam, reklamy navrhované aplikacemi, měření reklam" + "Biometrie pro práci" + "Další nastavení" + "Šifrování, přihlašovací údaje a další" diff --git a/SafetyCenter/Resources/res/values-da-v34/strings.xml b/SafetyCenter/Resources/res/values-da-v34/strings.xml index 3e36d42c84..ad7ec62840 100644 --- a/SafetyCenter/Resources/res/values-da-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-da-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Opdateringer om deling af lokationsdata" + "Data, datadeling, opdateringer om datadeling, opdateringer om deling af lokationsdata, deling" + "Privatliv ved annoncering" + "Tilpas de oplysninger, apps bruger til at vise dig annoncer" + "annoncer, privatliv ved annoncering, privacy sandbox, annonceemner, annoncer foreslået af apps, annoncemåling" + "Biometri til arbejdet" + "Flere indstillinger" + "Kryptering, loginoplysninger m.m." diff --git a/SafetyCenter/Resources/res/values-de-v34/strings.xml b/SafetyCenter/Resources/res/values-de-v34/strings.xml index 3e36d42c84..e47c3784e7 100644 --- a/SafetyCenter/Resources/res/values-de-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-de-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Aktualisierungen der Weitergabe von Standortdaten" + "Daten, Datenweitergabe, Aktualisierungen der Datenweitergabe, Aktualisierungen der Weitergabe von Standortdaten, Weitergabe" + "Datenschutz bei Werbung" + "Informationen anpassen, die Apps verwenden, um dir Werbung anzuzeigen" + "Anzeigen, Datenschutz bei Anzeigen, Privacy Sandbox, Werbethemen, von Apps vorgeschlagene Werbung, Analyse von Werbeanzeigen" + "Biometrische Verfahren für geschäftliche Apps" + "Weitere Einstellungen" + "Verschlüsselung, Anmeldedaten und mehr" diff --git a/SafetyCenter/Resources/res/values-el-v34/strings.xml b/SafetyCenter/Resources/res/values-el-v34/strings.xml index 3e36d42c84..f9f456f398 100644 --- a/SafetyCenter/Resources/res/values-el-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-el-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "υγεία, Health Connect" + "Ενημερώσεις στην κοινοποίηση δεδομένων για την τοποθεσία" + "δεδομένα, κοινοποίηση δεδομένων, ενημερώσεις κοινοποίησης δεδομένων, ενημερώσεις κοινοποίησης δεδομένων για την τοποθεσία, κοινοποίηση" + "Απόρρητο διαφημίσεων" + "Προσαρμόστε τις πληροφορίες που χρησιμοποιούν οι εφαρμογές για την εμφάνιση των διαφημίσεών σας" + "διαφημίσεις, απόρρητο διαφημίσεων, πλαίσιο ιδιωτικότητας, θέματα διαφημίσεων, διαφημίσεις που προτείνονται από εφαρμογές, μέτρηση διαφημίσεων" + "Βιομετρικά για την εργασία" + "Περισσότερες ρυθμίσεις" + "Κρυπτογράφηση, διαπιστευτήρια κ.ά." diff --git a/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml index a361163ab4..8345a5bdb1 100644 --- a/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rAU-v34/strings.xml @@ -22,7 +22,7 @@ "Data sharing updates for location" "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" "Ads privacy" - "Customise info apps use to show you ads" + "Customise info that apps use to show you ads" "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" "Biometrics for work" "More settings" diff --git a/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml index a361163ab4..8345a5bdb1 100644 --- a/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rGB-v34/strings.xml @@ -22,7 +22,7 @@ "Data sharing updates for location" "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" "Ads privacy" - "Customise info apps use to show you ads" + "Customise info that apps use to show you ads" "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" "Biometrics for work" "More settings" diff --git a/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml b/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml index a361163ab4..8345a5bdb1 100644 --- a/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rIN-v34/strings.xml @@ -22,7 +22,7 @@ "Data sharing updates for location" "Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" "Ads privacy" - "Customise info apps use to show you ads" + "Customise info that apps use to show you ads" "ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" "Biometrics for work" "More settings" diff --git a/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml b/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml index 3e36d42c84..ae8befacb4 100644 --- a/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-es-rUS-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Actualizaciones del uso compartido de los datos de ubicación" + "datos, uso compartido de los datos, actualizaciones del uso compartido de los datos, actualizaciones del uso compartido de los datos de ubicación, uso compartido" + "Privacidad de los anuncios" + "Personaliza la información que usan las apps para mostrarte anuncios" + "anuncios, privacidad en los anuncios, privacy sandbox, temas de anuncios, anuncios sugeridos por apps, medición de anuncios" + "Biométricos para apps de trabajo" + "Más parámetros de configuración" + "Encriptación, credenciales y más" diff --git a/SafetyCenter/Resources/res/values-es-v34/strings.xml b/SafetyCenter/Resources/res/values-es-v34/strings.xml index 3e36d42c84..6e357ba01f 100644 --- a/SafetyCenter/Resources/res/values-es-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-es-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Salud conectada" + "Salud, Salud conectada" + "Cambios en los datos compartidos de ubicación" + "datos, compartir datos, cambios en los datos que se comparten, cambios en los datos compartidos de ubicación, compartir" + "Privacidad en la publicidad" + "Personaliza la información que usan las aplicaciones para mostrarte anuncios" + "anuncios, privacidad en la publicidad, Privacy Sandbox, temas de anuncios, anuncios sugeridos por aplicaciones, medición de anuncios" + "Biometría para el trabajo" + "Más ajustes" + "Cifrado, credenciales y más" diff --git a/SafetyCenter/Resources/res/values-et-v34/strings.xml b/SafetyCenter/Resources/res/values-et-v34/strings.xml index 3e36d42c84..efaca8be68 100644 --- a/SafetyCenter/Resources/res/values-et-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-et-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Tervis, Health Connect" + "Andmete jagamise värskendused asukoha kohta" + "Andmed, andmete jagamine, andmete jagamise värskendused, andmete jagamise värskendused asukoha kohta, jagamine" + "Reklaamide privaatsus" + "Kohandage teavet, mida rakendused kasutavad teile reklaamide näitamiseks" + "reklaamid, reklaamide privaatsus, privaatsuse liivakast, reklaamiteemad, rakenduse soovitatud reklaamid, reklaamide mõõtmine" + "Töörakenduste biomeetriavalikud" + "Rohkem seadeid" + "Krüpteerimine, mandaadid ja muu" diff --git a/SafetyCenter/Resources/res/values-eu-v34/strings.xml b/SafetyCenter/Resources/res/values-eu-v34/strings.xml index 3e36d42c84..127af2061f 100644 --- a/SafetyCenter/Resources/res/values-eu-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-eu-v34/strings.xml @@ -21,18 +21,14 @@ - - + "Kokapen-datuak partekatzeko moduaren inguruko berritasunak" - - - - + "Iragarkien pribatutasuna" + "Pertsonalizatu aplikazioek iragarkiak erakusteko erabiltzen duten informazioa" - - + "Lanerako aplikazioetarako sistema biometrikoak" diff --git a/SafetyCenter/Resources/res/values-fa-v34/strings.xml b/SafetyCenter/Resources/res/values-fa-v34/strings.xml index 3e36d42c84..89ad2113fb 100644 --- a/SafetyCenter/Resources/res/values-fa-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-fa-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "‏سلامت، Health Connect" + "به‌روزرسانی‌های مربوط به هم‌رسانی داده‌های مکان" + "داده، هم‌رسانی داده، به‌روزرسانی‌های هم‌رسانی داده، به‌روزرسانی‌های هم‌رسانی داده مکان، هم‌رسانی" + "حریم خصوصی آگهی‌ها" + "سفارشی‌سازی اطلاعات مورداستفاده برنامه‌ها برای نمایش آگهی به شما" + "آگهی‌ها، حریم خصوصی آگهی، جعبه ایمنی حریم خصوصی، موضوع آگهی‌ها، آگهی‌های پیشنهادی برنامه، سنجش آگهی" + "گزینه‌های زیست‌سنجشی ویژه کار" + "تنظیمات بیشتر" + "رمزگذاری، اطلاعات اعتباری، و غیره" diff --git a/SafetyCenter/Resources/res/values-fi-v34/strings.xml b/SafetyCenter/Resources/res/values-fi-v34/strings.xml index 3e36d42c84..85eeaa98a2 100644 --- a/SafetyCenter/Resources/res/values-fi-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-fi-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Terveys, Health Connect" + "Sijaintidatan jakamisen päivitykset" + "Data, datan jakaminen, datan jakamisen päivitykset, sijaintidatan jakamisen päivitykset, jakaminen" + "Mainosyksityisyys" + "Muuta tietoja, joiden perusteella sovellukset näyttävät sinulle mainoksia" + "mainokset, mainosyksityisyys, privacy sandbox, mainosaiheet, sovellusten ehdottamat mainokset, mainosten mittaus" + "Biometriikka työsovelluksissa" + "Lisää asetuksia" + "Salaus, kirjautumistiedot ja muuta" diff --git a/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml b/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml index 3e36d42c84..31968175aa 100644 --- a/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-fr-rCA-v34/strings.xml @@ -21,18 +21,14 @@ - - + "Mises à jour du partage des données relatives à la localisation" - - - - + "Confidentialité des annonces" + "Personnalisez les renseignements utilisés par les applications pour vous montrer des annonces" - - + "Données biométriques pour le travail" diff --git a/SafetyCenter/Resources/res/values-fr-v34/strings.xml b/SafetyCenter/Resources/res/values-fr-v34/strings.xml index 3e36d42c84..38ab5659d0 100644 --- a/SafetyCenter/Resources/res/values-fr-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-fr-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Santé Connect" + "Santé, Santé Connect" + "Mises à jour du partage des données pour la localisation" + "Données, partage de données, mises à jour du partage des données, mises à jour du partage des données pour la localisation, partage" + "Confidentialité des annonces" + "Personnalisez les infos qu\'utilisent les applis pour vous proposer des annonces" + "annonces, confidentialité des annonces, Privacy Sandbox, thèmes d\'annonces, annonces suggérées par les applis, mesure des performances des annonces" + "Biométrie pour applis pro" + "Autres paramètres" + "Chiffrement, identifiants et plus" diff --git a/SafetyCenter/Resources/res/values-gl-v34/strings.xml b/SafetyCenter/Resources/res/values-gl-v34/strings.xml index 3e36d42c84..086d092fdd 100644 --- a/SafetyCenter/Resources/res/values-gl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-gl-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Saúde conectada" + "Saúde, Saúde conectada" + "Actualizacións do uso compartido de datos de localización" + "datos, uso compartido de datos, actualizacións do uso compartido de datos, actualizacións do uso compartido de datos de localización, uso compartido" + "Privacidade nos anuncios" + "Personaliza a información que usan as aplicacións para mostrarche anuncios" + "anuncios, privacidade nos anuncios, privacy sandbox, temas dos anuncios, anuncios suxeridos polas aplicacións, medición de anuncios" + "Datos biométricos para o traballo" + "Máis opcións de configuración" + "Encriptación, credenciais e moito máis" diff --git a/SafetyCenter/Resources/res/values-gu-v34/strings.xml b/SafetyCenter/Resources/res/values-gu-v34/strings.xml index 3e36d42c84..98dbd90412 100644 --- a/SafetyCenter/Resources/res/values-gu-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-gu-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "આરોગ્ય, Health Connect" + "લોકેશન માટે ડેટા શેરિંગ સંબંધિત અપડેટ" + "ડેટા, ડેટા શેરિંગ, ડેટા શેરિંગ સંબંધિત અપડેટ, લોકેશન માટે ડેટા શેરિંગ સંબંધિત અપડેટ, શેરિંગ" + "જાહેરાત સંબંધિત પ્રાઇવસી" + "તમને જાહેરાતો બતાવવા માટે ઍપ દ્વારા ઉપયોગમાં લેવાતી માહિતી કસ્ટમાઇઝ કરો" + "જાહેરાતો, જાહેરાત સંબંધિત પ્રાઇવસી, પ્રાઇવસી સૅન્ડબૉક્સ, જાહેરાતના વિષયો, ઍપ દ્વારા સૂચવેલી જાહેરાતો, જાહેરાતની માપણી" + "ઑફિસના કામ માટે બાયોમેટ્રિક્સ" + "વધુ સેટિંગ" + "એન્ક્રિપ્શન, લૉગ ઇન વિગતો અને બીજું ઘણું" diff --git a/SafetyCenter/Resources/res/values-hi-v34/strings.xml b/SafetyCenter/Resources/res/values-hi-v34/strings.xml index 3e36d42c84..b80e228da8 100644 --- a/SafetyCenter/Resources/res/values-hi-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-hi-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "जगह की जानकारी शेयर करने के तरीके के बारे में अपडेट" + "डेटा, डेटा शेयर करना, डेटा शेयर करने के अपडेट, जगह की जानकारी शेयर करने के बारे में अपडेट, शेयर करना" + "विज्ञापन देखने वाले की निजता बनाए रखने की सुविधा" + "अपने हिसाब से यह तय करें कि ऐप्लिकेशन आपको विज्ञापन दिखाने के लिए, कौनसी जानकारी का इस्तेमाल कर सकते हैं" + "विज्ञापन, विज्ञापन देखने वाले की निजता बनाए रखना, प्राइवसी सैंडबॉक्स, विज्ञापन का विषय, ऐप्लिकेशन के सुझाए गए विज्ञापन, और विज्ञापन की परफ़ॉर्मेंस का आकलन करना" + "वर्क ऐप्लिकेशन के लिए बायोमेट्रिक्स" + "अन्य सेटिंग" + "एन्क्रिप्शन, क्रेडेंशियल वगैरह" diff --git a/SafetyCenter/Resources/res/values-hu-v34/strings.xml b/SafetyCenter/Resources/res/values-hu-v34/strings.xml index 3e36d42c84..e0ace2115c 100644 --- a/SafetyCenter/Resources/res/values-hu-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-hu-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Egészség, Health Connect" + "A helyadatok megosztását érintő frissítések" + "Adatok, adatmegosztás, adatmegosztási változások, helyadatokat érintő adatmegosztási változások, megosztás" + "Hirdetésekhez kapcsolódó adatvédelem" + "Személyre szabhatja azokat az információkat, amelyeket az alkalmazások arra használnak, hogy hirdetéseket jelenítsenek meg Önnek" + "hirdetések, hirdetésekhez kapcsolódó adatvédelem, privacy sandbox, hirdetéstéma, alkalmazások által javasolt hirdetések, hirdetésmérés" + "Biometriai adatok munkahelyi alkalmazásoknál" + "További beállítások" + "Titkosítás, hitelesítési adatok és egyebek" diff --git a/SafetyCenter/Resources/res/values-hy-v34/strings.xml b/SafetyCenter/Resources/res/values-hy-v34/strings.xml index 3e36d42c84..fe00f0354b 100644 --- a/SafetyCenter/Resources/res/values-hy-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-hy-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Տեղադրության մասին տվյալներով կիսվելու թույլտվության թարմացում" + "Տվյալներ, Տվյալների փոխանցում, Տվյալներով կիսվելու եղանակի փոփոխություն, Տեղադրության մասին տվյալներով կիսվելու թույլտվության թարմացում, փոխանցում" + "Գովազդների գաղտնիություն" + "Անհատականացված տեղեկություններ, որոնք հավելվածներն օգտագործում են՝ ձեզ գովազդ ցուցադրելու համար" + "գովազդներ, գովազդի գաղտնիություն, privacy sandbox, գովազդի թեմաներ, հավելվածների կողմից առաջարկվող գովազդներ, գովազդի արդյունավետության գնահատում" + "Կենսաչափական համակարգեր աշխատանքի համար" + "Այլ կարգավորումներ" + "Գաղտնագրում, մուտքի տվյալներ և ավելին" diff --git a/SafetyCenter/Resources/res/values-in-v34/strings.xml b/SafetyCenter/Resources/res/values-in-v34/strings.xml index 3e36d42c84..15816ef28c 100644 --- a/SafetyCenter/Resources/res/values-in-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-in-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Pembaruan berbagi data untuk lokasi" + "Data, Berbagi data, Pembaruan berbagi data, Pembaruan berbagi data untuk lokasi, berbagi" + "Privasi iklan" + "Sesuaikan info yang digunakan aplikasi untuk menampilkan iklan kepada Anda" + "iklan, privasi iklan, privacy sandbox, topik iklan, iklan yang disarankan aplikasi, pengukuran iklan" + "Biometrik untuk aplikasi kerja" + "Setelan lainnya" + "Enkripsi, kredensial, dan lainnya" diff --git a/SafetyCenter/Resources/res/values-is-v34/strings.xml b/SafetyCenter/Resources/res/values-is-v34/strings.xml index 3e36d42c84..1500145c10 100644 --- a/SafetyCenter/Resources/res/values-is-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-is-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Heilsutenging" + "Heilsa, Heilsutenging" + "Uppfærslur um gagnadeilingu varðandi staðsetningu" + "Gögn, gagnadeiling, uppfærslur á gagnadeilingu, uppfærslur á gagnadeilingu varðandi staðsetningu, deiling" + "Persónuvernd auglýsinga" + "Sérsníddu hvaða upplýsingar forrit nota til að birta þér auglýsingar" + "auglýsingar, persónuvernd auglýsinga, privacy sandbox, efni auglýsinga, auglýsingatillögur forrita, auglýsingamælingar" + "Lífkenni fyrir vinnu" + "Fleiri stillingar" + "Dulkóðun, skilríki og fleira" diff --git a/SafetyCenter/Resources/res/values-iw-v34/strings.xml b/SafetyCenter/Resources/res/values-iw-v34/strings.xml index 3e36d42c84..227616a656 100644 --- a/SafetyCenter/Resources/res/values-iw-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-iw-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "‏בריאות, Health Connect" + "עדכונים לגבי שיתוף נתונים עבור המיקום" + "נתונים, שיתוף נתונים, עדכונים לגבי שיתוף נתונים, עדכונים לגבי שיתוף נתונים עבור המיקום, שיתוף" + "פרטיות בפרסום" + "התאמה אישית של המידע שאפליקציות משתמשות בו כדי להציג לך מודעות" + "מודעות, פרטיות בפרסום, ארגז חול לפרטיות, נושאי מודעות, מודעות שאפליקציות מציעות, מדידת מודעות" + "מידע ביומטרי לפרופיל העבודה" + "הגדרות נוספות" + "הצפנה, פרטי כניסה ועוד" diff --git a/SafetyCenter/Resources/res/values-ja-v34/strings.xml b/SafetyCenter/Resources/res/values-ja-v34/strings.xml index 3e36d42c84..ba9a5cb9b7 100644 --- a/SafetyCenter/Resources/res/values-ja-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ja-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "ヘルスコネクト" + "ヘルス, ヘルス コネクト" + "位置情報を共有する方法の更新" + "データ, データ 共有, データ 共有 更新, データ 共有 更新 位置情報, 共有" + "広告のプライバシー" + "広告を表示するためにアプリが使用する情報をカスタマイズします" + "広告, 広告のプライバシー, プライバシー サンドボックス, 広告 トピック, アプリによる広告の提案, 広告 測定" + "仕事用の生体認証" + "その他の設定" + "暗号化、認証情報など" diff --git a/SafetyCenter/Resources/res/values-ka-v34/strings.xml b/SafetyCenter/Resources/res/values-ka-v34/strings.xml index 3e36d42c84..46bd46a58c 100644 --- a/SafetyCenter/Resources/res/values-ka-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ka-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "მონაცემების გაზიარების განახლებები მდებარეობისთვის" + "მონაცემები, მონაცემების გაზიარება, მონაცემების გაზიარების განახლებები, მონაცემების გაზიარების განახლებები მდებარეობისთვის, გაზიარება" + "რეკლამების კონფიდენციალურობა" + "ინფორმაციის მორგება, რომელსაც აპები იყენებს თქვენთვის რეკლამის საჩვენებლად" + "რეკლამები, რეკლამის კონფიდენციალურობა, privacy sandbox, სარეკლამო თემა, აპის შემოთავაზებული რეკლამები, რეკლამის გაზომვა" + "ბიომეტრიული სისტემა მუშაობისთვის" + "დამატებითი პარამეტრები" + "დაშიფვრა, ავტორიზაციის მონაცემები და სხვა" diff --git a/SafetyCenter/Resources/res/values-kk-v34/strings.xml b/SafetyCenter/Resources/res/values-kk-v34/strings.xml index 3e36d42c84..0627d33208 100644 --- a/SafetyCenter/Resources/res/values-kk-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-kk-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Денсаулық, Health Connect" + "Локация деректерін бөлісуге қатысты жаңалық" + "Деректер, Деректерді бөлісу, Деректерді бөлісуге қатысты жаңалық, Локация деректерін бөлісуге қатысты жаңалық" + "Жарнамадағы құпиялық" + "Қолданбалардың сізге жарнама көрсету үшін пайдаланатын ақпаратын реттеңіз." + "жарнамалар, жарнамадағы құпиялық, privacy sandbox, жарнама тақырыптары, қолданба ұсынған жарнамалар, жарнама көрсеткіштерін өлшеу" + "Жұмыс қолданбаларына арналған биометрика" + "Қосымша параметрлер" + "Шифрлау, тіркелу деректері және т.б." diff --git a/SafetyCenter/Resources/res/values-km-v34/strings.xml b/SafetyCenter/Resources/res/values-km-v34/strings.xml index 3e36d42c84..c8206bbb06 100644 --- a/SafetyCenter/Resources/res/values-km-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-km-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "សុខភាព Health Connect" + "ការធ្វើបច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យសម្រាប់ទីតាំង" + "ទិន្នន័យ ការចែករំលែកទិន្នន័យ បច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យ បច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យសម្រាប់ទីតាំង ការចែករំលែក" + "ឯកជនភាពនៃការផ្សាយពាណិជ្ជកម្ម" + "ប្ដូរការប្រើប្រាស់កម្មវិធីព័ត៌មានតាមបំណង ដើម្បីបង្ហាញការផ្សាយពាណិជ្ជកម្មដល់អ្នក" + "ការផ្សាយពាណិជ្ជកម្ម, ឯកជនភាពនៃការផ្សាយពាណិជ្ជកម្ម, privacy sandbox, ប្រធានបទផ្សាយពាណិជ្ជកម្ម, ការផ្សាយពាណិជ្ជកម្មដែលណែនាំដោយកម្មវិធី, ការវាស់ស្ទង់ការផ្សាយពាណិជ្ជកម្ម" + "ជីវមាត្រសម្រាប់ការងារ" + "ការកំណត់ច្រើនទៀត" + "ការអ៊ីនគ្រីប ព័ត៌មានផ្ទៀងផ្ទាត់ និងអ្វីៗជាច្រើនទៀត" diff --git a/SafetyCenter/Resources/res/values-kn-v34/strings.xml b/SafetyCenter/Resources/res/values-kn-v34/strings.xml index 3e36d42c84..511b31d67f 100644 --- a/SafetyCenter/Resources/res/values-kn-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-kn-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ಆರೋಗ್ಯ, Health Connect" + "ಸ್ಥಳದ ಡೇಟಾ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ ಕುರಿತ ಅಪ್‌ಡೇಟ್‌ಗಳು" + "ಡೇಟಾ, ಡೇಟಾ ಹಂಚಿಕೆ, ಡೇಟಾ ಹಂಚಿಕೆಯ ಅಪ್‌ಡೇಟ್‌ಗಳು, ಸ್ಥಳ ಹಂಚಿಕೆಗಾಗಿ ಡೇಟಾ ಹಂಚಿಕೆಯ ಅಪ್‌ಡೇಟ್‌ಗಳು" + "ಜಾಹೀರಾತುಗಳ ಗೌಪ್ಯತೆ" + "ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಬಳಸುವ ಮಾಹಿತಿ ಆ್ಯಪ್‌ಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ" + "ಜಾಹೀರಾತುಗಳು, ಜಾಹೀರಾತು ಗೌಪ್ಯತೆ, ಪ್ರೈವೆಸಿ ಸ್ಯಾಂಡ್‌ಬಾಕ್ಸ್, ಆ್ಯಡ್ ವಿಷಯಗಳು, ಆ್ಯಪ್ ಶಿಫಾರಸು ಮಾಡಿದ ಜಾಹೀರಾತುಗಳು, ಜಾಹೀರಾತು ಮಾಪನ" + "ಕೆಲಸದ ಕುರಿತ ಬಯೋಮೆಟ್ರಿಕ್ಸ್" + "ಇನ್ನಷ್ಟು ಸೆಟ್ಟಿಂಗ್‌ಗಳು" + "ಎನ್‌ಕ್ರಿಪ್ಶನ್, ರುಜುವಾತುಗಳು ಹಾಗೂ ಇನ್ನಷ್ಟು" diff --git a/SafetyCenter/Resources/res/values-ko-v34/strings.xml b/SafetyCenter/Resources/res/values-ko-v34/strings.xml index 3e36d42c84..c4baf54259 100644 --- a/SafetyCenter/Resources/res/values-ko-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ko-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "헬스 커넥트" + "건강, 헬스 커넥트" + "위치 데이터 공유 방법 업데이트" + "데이터, 데이터 공유, 데이터 공유 업데이트, 위치 관련 데이터 공유 업데이트, 공유" + "광고 개인 정보 보호" + "앱에서 광고 표시에 사용하는 정보를 맞춤설정합니다." + "광고, 광고 개인 정보 보호, 개인 정보 보호 샌드박스, 광고 주제, 앱 추천 광고, 광고 측정" + "직장 앱용 생체 인식" + "기타 설정" + "암호화, 사용자 인증 정보 등" diff --git a/SafetyCenter/Resources/res/values-ky-v34/strings.xml b/SafetyCenter/Resources/res/values-ky-v34/strings.xml index 3e36d42c84..4a23f5e8f5 100644 --- a/SafetyCenter/Resources/res/values-ky-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ky-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Ден соолук, Health Connect" + "Жүргөн жер тууралуу маалыматты бөлүшүү ыкмасын жаңыртуу" + "Маалымат, маалыматты бөлүшүү, маалыматты бөлүшүү ыкмасын жаңыртуу, кайда жүргөнүмдү көрсөтүү функциясы үчүн маалыматты бөлүшүү ыкмасын жаңыртуу" + "Жарнамалардын купуялыгы" + "Колдонмолор жарнамаларды кандай маалыматты негизинде көрсөтөрүн тандайсыз" + "жарнамалар, жарнаманын купуялыгы, privacy sandbox, жарнама темалары, колдонмолор сунуштаган жарнамалар, жарнаманы өлчөө" + "Жумуш үчүн биометрика" + "Дагы параметрлер" + "Шифрлөө, эсептик дайындар жана башкалар" diff --git a/SafetyCenter/Resources/res/values-lo-v34/strings.xml b/SafetyCenter/Resources/res/values-lo-v34/strings.xml index 3e36d42c84..e1659519c2 100644 --- a/SafetyCenter/Resources/res/values-lo-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-lo-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ສຸຂະພາບ, Health Connect" + "ການອັບເດດການແບ່ງປັນຂໍ້ມູນສະຖານທີ່" + "ຂໍ້ມູນ, ການແບ່ງປັນຂໍ້ມູນ, ການອັບເດດການແບ່ງປັນຂໍ້ມູນ, ການອັບເດດການແບ່ງປັນຂໍ້ມູນສະຖານທີ່, ການແບ່ງປັນ" + "ຄວາມເປັນສ່ວນຕົວກ່ຽວກັບຕົວໂຄສະນາ" + "ປັບແຕ່ງຂໍ້ມູນແອັບທີ່ໃຊ້ສະແດງໂຄສະນາໃຫ້ທ່ານເຫັນ" + "ໂຄສະນາ, ຄວາມເປັນສ່ວນຕົວກ່ຽວກັບຕົວໂຄສະນາ, Privacy Sandbox, ຫົວຂໍ້ໂຄສະນາ, ໂຄສະນາແນະນຳແອັບ, ການວັດແທກໂຄສະນາ" + "ລະບົບຊີວະມິຕິສຳລັບວຽກ" + "ການຕັ້ງຄ່າເພີ່ມເຕີມ" + "ການເຂົ້າລະຫັດ, ຂໍ້ມູນການເຂົ້າສູ່ລະບົບ ແລະ ອື່ນໆ" diff --git a/SafetyCenter/Resources/res/values-lt-v34/strings.xml b/SafetyCenter/Resources/res/values-lt-v34/strings.xml index 3e36d42c84..450c10af2c 100644 --- a/SafetyCenter/Resources/res/values-lt-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-lt-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Sveikata, „Health Connect“" + "Vietovės duomenų bendrinimo naujiniai" + "Duomenys, duomenų bendrinimas, duomenų bendrinimo naujiniai, vietovės duomenų bendrinimo naujiniai, bendrinimas" + "Skelbimų privatumas" + "Tinkinti informaciją, kurią programos naudoja skelbimams rodyti" + "skelbimai, su skelbimais susijęs privatumas, Privatumo „sandbox“ (smėlio dėžė), skelbimų temos, programų siūlomi skelbimai, skelbimų vertinimas" + "Darbo biometrinės sistemos" + "Daugiau nustatymų" + "Šifruotė, prisijungimo duomenys ir kt." diff --git a/SafetyCenter/Resources/res/values-lv-v34/strings.xml b/SafetyCenter/Resources/res/values-lv-v34/strings.xml index 3e36d42c84..cd30e34b24 100644 --- a/SafetyCenter/Resources/res/values-lv-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-lv-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Atjauninājumi atrašanās vietas datu kopīgošanā" + "Dati, datu kopīgošana, datu kopīgošanas atjauninājumi, atjauninājumi atrašanās vietas datu kopīgošanā, kopīgošana" + "Reklāmu konfidencialitāte" + "Pielāgojiet informāciju, ko lietotnes var izmantot, lai rādītu jums reklāmas" + "reklāmas, reklāmu konfidencialitāte, konfidencialitātes smilškaste, reklāmu tēmas, lietotņu ieteiktas reklāmas, reklāmu izvērtēšana" + "Biometrijas dati darba lietotnēm" + "Citi iestatījumi" + "Šifrēšana, akreditācijas dati un citi iestatījumi" diff --git a/SafetyCenter/Resources/res/values-mk-v34/strings.xml b/SafetyCenter/Resources/res/values-mk-v34/strings.xml index 3e36d42c84..57a3f25cc0 100644 --- a/SafetyCenter/Resources/res/values-mk-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-mk-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Здравје, Health Connect" + "Промени во споделувањето на податоците за локација" + "Податоци, споделување податоци, промени во споделувањето податоци, промени во споделувањето на податоците за локација, споделување" + "Приватност за реклами" + "Приспособете ги податоците што апликациите ги користат за да ви прикажуваат реклами" + "реклами, приватност за реклами, privacy sandbox, теми на реклами, реклами предложени од апликации, мерење реклами" + "Биометрика за работни апликации" + "Повеќе поставки" + "Шифрирање, акредитиви и друго" diff --git a/SafetyCenter/Resources/res/values-mn-v34/strings.xml b/SafetyCenter/Resources/res/values-mn-v34/strings.xml index 3e36d42c84..5bc3c447c2 100644 --- a/SafetyCenter/Resources/res/values-mn-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-mn-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Байршлын өгөгдөл хуваалцах шинэчлэлт" + "Өгөгдөл, өгөгдөл хуваалцах, өгөгдөл хуваалцах шинэчлэлт, байршлын өгөгдөл хуваалцах шинэчлэлт, хуваалцах" + "Зарын нууцлал" + "Танд зар харуулахын тулд мэдээллийн аппуудын ашиглалтыг өөрчлөх" + "зар, зарын нууцлал, privacy sandbox, зарын сэдэв, аппын санал болгосон зар, зарын хэмжилт" + "Ажлын биометр" + "Бусад тохиргоо" + "Шифрлэлт, мандат үнэмлэх болон бусад" diff --git a/SafetyCenter/Resources/res/values-mr-v34/strings.xml b/SafetyCenter/Resources/res/values-mr-v34/strings.xml index 3e36d42c84..1af512c8bc 100644 --- a/SafetyCenter/Resources/res/values-mr-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-mr-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "स्थानासाठी डेटा शेअरिंगसंबंधित अपडेट" + "डेटा, डेटा शेअरिंग, डेटा शेअरिंगसंबंधित अपडेट, स्थानासाठी डेटा शेअरिंगसंबंधित अपडेट, शेअरिंग" + "जाहिरातीसंबंधित गोपनीयता" + "तुम्‍हाला जाहिराती दाखवण्‍यासाठी ॲप्सनी कोणती माहिती वापरावी ते कस्टमाइझ करा" + "जाहिराती, जाहिरातीसंबंधित गोपनीयता, प्रायव्हसी सॅंडबाॅक्स, जाहिरातीचे विषय, अ‍ॅपने सुचवलेल्या जाहिराती, जाहिरातीशी संबंधित मापन" + "कामासाठी बायोमेट्रिक" + "आणखी सेटिंग्ज" + "एंक्रिप्शन, क्रेडेंशियल आणि आणखी बरेच काही" diff --git a/SafetyCenter/Resources/res/values-ms-v34/strings.xml b/SafetyCenter/Resources/res/values-ms-v34/strings.xml index 3e36d42c84..ea4d919d46 100644 --- a/SafetyCenter/Resources/res/values-ms-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ms-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Kemaskinian perkongsian data untuk lokasi" + "Data, Perkongsian data, Kemaskinian perkongsian data, Kemaskinian perkongsian data untuk lokasi, perkongsian" + "Privasi iklan" + "Sesuaikan maklumat yang digunakan apl untuk menunjukkan iklan kepada anda" + "iklan, privasi iklan, kotak pasir privasi, topik iklan, iklan cadangan apl, ukuran iklan" + "Biometrik untuk kerja" + "Lagi tetapan" + "Penyulitan, bukti kelayakan dan banyak lagi" diff --git a/SafetyCenter/Resources/res/values-my-v34/strings.xml b/SafetyCenter/Resources/res/values-my-v34/strings.xml index 3e36d42c84..9794631212 100644 --- a/SafetyCenter/Resources/res/values-my-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-my-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ကျန်းမာရေး၊ Health Connect" + "တည်နေရာအတွက် ဒေတာမျှဝေခြင်း အပ်ဒိတ်" + "ဒေတာ၊ ဒေတာမျှဝေခြင်း၊ ဒေတာမျှဝေခြင်း အပ်ဒိတ်၊ တည်နေရာအတွက် ဒေတာမျှဝေခြင်း အပ်ဒိတ်၊ မျှဝေခြင်း" + "ကြော်ငြာဆိုင်ရာ အချက်အလက်လုံခြုံမှု" + "အက်ပ်များက သင့်အား ကြော်ငြာများပြရန်သုံးသော အချက်အလက်ကို စိတ်ကြိုက်လုပ်နိုင်သည်" + "ကြော်ငြာ၊ ကြော်ငြာဆိုင်ရာ အချက်အလက်လုံခြုံမှု၊ privacy sandbox၊ ကြော်ငြာအကြောင်းအရာ၊ အက်ပ်အကြံပြုကြော်ငြာ၊ ကြော်ငြာ တိုင်းတာအကဲဖြတ်မှု" + "အလုပ်အတွက် ဇီဝမက်ထရစ် အချက်အလက်များ" + "နောက်ထပ်ဆက်တင်များ" + "အသွင်ဝှက်ခြင်း၊ အထောက်အထား စသည်" diff --git a/SafetyCenter/Resources/res/values-nb-v34/strings.xml b/SafetyCenter/Resources/res/values-nb-v34/strings.xml index 3e36d42c84..7951afe410 100644 --- a/SafetyCenter/Resources/res/values-nb-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-nb-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Helse, Health Connect" + "Oppdateringer av datadeling for posisjon" + "Data, datadeling, oppdateringer av datadeling, oppdateringer av datadeling for posisjon, deling" + "Annonsepersonvern" + "Tilpass informasjonen apper bruker for å vise deg annonser" + "annonser, annonsepersonvern, Privacy Sandbox, annonseemner, annonser foreslått av apper, annonsemåling" + "Biometri for jobb" + "Flere innstillinger" + "Kryptering, legitimasjon med mer" diff --git a/SafetyCenter/Resources/res/values-ne-v34/strings.xml b/SafetyCenter/Resources/res/values-ne-v34/strings.xml index 3e36d42c84..ad7953fe83 100644 --- a/SafetyCenter/Resources/res/values-ne-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ne-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी" + "जानकारी, जानकारी सेयर गर्नेसम्बन्धी अभ्यास, जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी, लोकेसन डेटा सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी, सेयरिङ" + "विज्ञापनसम्बन्धी गोपनीयता" + "तपाईंलाई विज्ञापनहरू देखाउन एपहरूले प्रयोग गर्ने जानकारी कस्टमाइज गर्नुहोस्" + "विज्ञापन, विज्ञापनको गोपनीयता, प्राइभेसी स्यान्डबक्स, विज्ञापनको विषय, एपले सिफारिस गरेका विज्ञापनहरू, विज्ञापनको पर्फर्मेन्स मापन गर्ने सुविधा" + "कामसम्बन्धी एपहरूका लागि बायोमेट्रिक्स" + "थप सेटिङ" + "इन्क्रिप्सन, युजरनेम, पासवर्ड र अन्य कुराहरू" diff --git a/SafetyCenter/Resources/res/values-nl-v34/strings.xml b/SafetyCenter/Resources/res/values-nl-v34/strings.xml index 3e36d42c84..c59c305194 100644 --- a/SafetyCenter/Resources/res/values-nl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-nl-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Gezondheid, Health Connect" + "Updates voor het delen van locatiegegevens" + "Gegevens, Gegevens delen, Updates voor het delen van gegevens, Updates voor het delen van locatiegegevens, delen" + "Advertentieprivacy" + "Pas de informatie aan die apps gebruiken om advertenties te tonen" + "advertenties, advertentieprivacy, privacy sandbox, advertentieonderwerpen, door apps voorgestelde advertenties, advertentiemeting" + "Biometrische systemen voor het werk" + "Meer instellingen" + "Versleuteling, inloggegevens en meer" diff --git a/SafetyCenter/Resources/res/values-or-v34/strings.xml b/SafetyCenter/Resources/res/values-or-v34/strings.xml index 3e36d42c84..93599ad9ee 100644 --- a/SafetyCenter/Resources/res/values-or-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-or-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ସ୍ୱାସ୍ଥ୍ୟ, Health Connect" + "ଲୋକେସନ ପାଇଁ ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ" + "ଡାଟା, ଡାଟା ସେୟାରିଂ, ଡାଟା ସେୟାରିଂ ଅପଡେଟ, ଲୋକେସନ ପାଇଁ ଡାଟା ସେୟାରିଂ ଅପଡେଟ, ସେୟାରିଂ" + "ବିଜ୍ଞାପନ ଗୋପନୀୟତା" + "ଆପଣଙ୍କୁ ବିଜ୍ଞାପନଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ଆପ୍ସ ବ୍ୟବହାର କରୁଥିବା ସୂଚନାକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ" + "ବିଜ୍ଞାପନ, ବିଜ୍ଞାପନ ଗୋପନୀୟତା, ପ୍ରାଇଭେସି ସେଣ୍ଡବକ୍ସ, ବିଜ୍ଞାପନ ବିଷୟ, ଆପ ଦ୍ୱାରା-ପରାମର୍ଶ ଦିଆଯାଇଥିବା ବିଜ୍ଞାପନଗୁଡ଼ିକ, ବିଜ୍ଞାପନର ପରିମାପ" + "ୱାର୍କ ପାଇଁ ବାୟୋମେଟ୍ରିକ୍ସ" + "ଅଧିକ ସେଟିଂସ" + "ଏନକ୍ରିପସନ, କ୍ରେଡେନସିଆଲ ଏବଂ ଆହୁରି ଅନେକ କିଛି" diff --git a/SafetyCenter/Resources/res/values-pa-v34/strings.xml b/SafetyCenter/Resources/res/values-pa-v34/strings.xml index 3e36d42c84..d96ccaae16 100644 --- a/SafetyCenter/Resources/res/values-pa-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-pa-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ਸਿਹਤ, Health Connect" + "ਟਿਕਾਣੇ ਲਈ ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ" + "ਡਾਟਾ, ਡਾਟਾ ਸਾਂਝਾਕਰਨ, ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ, ਟਿਕਾਣੇ ਲਈ ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ, ਸਾਂਝਾਕਰਨ" + "ਵਿਗਿਆਪਨ ਪਰਦੇਦਾਰੀ" + "ਇਹ ਵਿਉਂਤਬੱਧ ਕਰੋ ਕਿ ਐਪਾਂ ਤੁਹਾਨੂੰ ਵਿਗਿਆਪਨ ਦਿਖਾਉਣ ਲਈ ਕਿਹੜੀ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀਆਂ ਹਨ" + "ਵਿਗਿਆਪਨ, ਵਿਗਿਆਪਨ ਪਰਦੇਦਾਰੀ, ਪ੍ਰਾਈਵੇਸੀ ਸੈਂਡਬਾਕਸ, ਵਿਗਿਆਪਨ ਦੇ ਵਿਸ਼ੇ, ਐਪ ਵੱਲੋਂ ਸੁਝਾਏ ਵਿਗਿਆਪਨ, ਵਿਗਿਆਪਨ ਮਾਪ" + "ਕੰਮ ਲਈ ਬਾਇਓਮੈਟ੍ਰਿਕ" + "ਹੋਰ ਸੈਟਿੰਗਾਂ" + "ਇਨਕ੍ਰਿਪਸ਼ਨ, ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ" diff --git a/SafetyCenter/Resources/res/values-pl-v34/strings.xml b/SafetyCenter/Resources/res/values-pl-v34/strings.xml index 3e36d42c84..61967aaf48 100644 --- a/SafetyCenter/Resources/res/values-pl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-pl-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Zmiany w udostępnianiu danych o lokalizacji" + "dane, udostępnianie danych, zmiany w udostępnianiu danych, zmiany w udostępnianiu danych o lokalizacji, udostępnianie" + "Prywatność w reklamach" + "Dostosuj informacje używane przez aplikacje przy wyświetlaniu reklam" + "reklamy, prywatność w reklamach, Piaskownica prywatności, tematy reklam, reklamy sugerowane przez aplikację, pomiar skuteczności reklam" + "Biometria na urządzeniach służbowych" + "Więcej ustawień" + "Szyfrowanie, dane logowania i inne ustawienia" diff --git a/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml index 3e36d42c84..0a4c8520b6 100644 --- a/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-rBR-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Conexão Saúde" + "Saúde, Conexão Saúde" + "Atualizações no compartilhamento de dados de local" + "Dados, Compartilhamento de dados, Atualizações de compartilhamento de dados, Atualizações de compartilhamento de dados para localização, compartilhamento" + "Privacidade de anúncios" + "Personalize as informações que os apps usam para mostrar anúncios" + "anúncios, privacidade de anúncios, Sandbox de privacidade, temas de anúncios, anúncios sugeridos por apps, medição de anúncio" + "Biometria para o trabalho" + "Mais configurações" + "Criptografia, credenciais e muito mais" diff --git a/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml index 3e36d42c84..2d4f25850b 100644 --- a/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-rPT-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Saúde Connect" + "Saúde, Saúde Connect" + "Atualizações da partilha de dados para a localização" + "Dados, partilha de dados, atualizações de partilha de dados, atualizações da partilha de dados para a localização, partilha" + "Privacidade de anúncios" + "Personalize as informações que as apps usam para lhe mostrar anúncios" + "anúncios, privacidade de anúncios, Privacy Sandbox, tópicos de anúncios, anúncios sugeridos por apps, medição de anúncios" + "Biometria para trabalho" + "Mais definições" + "Encriptação, credenciais e muito mais" diff --git a/SafetyCenter/Resources/res/values-pt-v34/strings.xml b/SafetyCenter/Resources/res/values-pt-v34/strings.xml index 3e36d42c84..0a4c8520b6 100644 --- a/SafetyCenter/Resources/res/values-pt-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Conexão Saúde" + "Saúde, Conexão Saúde" + "Atualizações no compartilhamento de dados de local" + "Dados, Compartilhamento de dados, Atualizações de compartilhamento de dados, Atualizações de compartilhamento de dados para localização, compartilhamento" + "Privacidade de anúncios" + "Personalize as informações que os apps usam para mostrar anúncios" + "anúncios, privacidade de anúncios, Sandbox de privacidade, temas de anúncios, anúncios sugeridos por apps, medição de anúncio" + "Biometria para o trabalho" + "Mais configurações" + "Criptografia, credenciais e muito mais" diff --git a/SafetyCenter/Resources/res/values-ro-v34/strings.xml b/SafetyCenter/Resources/res/values-ro-v34/strings.xml index 3e36d42c84..85737624b2 100644 --- a/SafetyCenter/Resources/res/values-ro-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ro-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Health, Health Connect" + "Actualizări privind permiterea accesului la date pentru locație" + "date, permiterea accesului la date, actualizări privind permiterea accesului la date, actualizări privind permiterea accesului la date pentru locație, permiterea accesului" + "Confidențialitatea anunțurilor" + "Personalizează informațiile pe care le folosesc aplicațiile pentru a-ți afișa anunțuri" + "anunțuri, confidențialitatea anunțurilor, privacy sandbox, subiectele anunțurilor, anunțuri sugerate de aplicații, cuantificarea anunțurilor" + "Sisteme biometrice pentru aplicații de serviciu" + "Mai multe setări" + "Criptarea, datele de conectare și altele" diff --git a/SafetyCenter/Resources/res/values-ru-v34/strings.xml b/SafetyCenter/Resources/res/values-ru-v34/strings.xml index 3e36d42c84..7299af668c 100644 --- a/SafetyCenter/Resources/res/values-ru-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ru-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Здоровье и спорт" + "Здоровье, Здоровье и спорт" + "Обновление доступа к данным о местоположении" + "Данные, Передача данных, Обновления передачи данных, Обновление доступа к данным, Обновление доступа к данным о местоположении" + "Конфиденциальность в рекламе" + "Укажите, какую информацию приложения могут использовать для показа рекламы" + "объявления, конфиденциальность в рекламе, privacy sandbox, темы объявлений, реклама, предлагаемая приложениями, оценка эффективности рекламы" + "Биометрия для рабочих приложений" + "Другие настройки" + "Шифрование, учетные данные и прочее" diff --git a/SafetyCenter/Resources/res/values-si-v34/strings.xml b/SafetyCenter/Resources/res/values-si-v34/strings.xml index 3e36d42c84..96e137c869 100644 --- a/SafetyCenter/Resources/res/values-si-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-si-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "සෞඛ්‍යය, Health Connect" + "ස්ථානය සඳහා දත්ත බෙදා ගැනීමේ යාවත්කාලීන" + "දත්ත, දත්ත බෙදා ගැනීම, දත්ත බෙදා ගැනීමේ යාවත්කාලීන, ස්ථානය සඳහා දත්ත බෙදා ගැනීමේ යාවත්කාලීන, බෙදා ගැනීම" + "දැන්වීම් පෞද්ගලිකත්වය" + "ඔබට දැන්වීම් පෙන්වීමට යෙදුම් භාවිතා කරන තතු අභිරුචිකරණය කරන්න" + "දැන්වීම්, දැන්වීම් පෞද්ගලිකත්වය, පෞද්ගලිකත්ව සෑන්ඩ්බොක්ස්, දැන්වීම් මාතෘකා, යෙදුම්-යෝජිත දැන්වීම්, දැන්වීම් මැනීම" + "කාර්ය සඳහා ජෛවමිතික" + "තව සැකසීම්" + "සංකේතනය, අක්තපත්‍ර, සහ තවත් දේ" diff --git a/SafetyCenter/Resources/res/values-sk-v34/strings.xml b/SafetyCenter/Resources/res/values-sk-v34/strings.xml index 3e36d42c84..6579ee9766 100644 --- a/SafetyCenter/Resources/res/values-sk-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-sk-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Dáta o zdraví" + "Zdravie, Dáta o zdraví" + "Aktualizácie zdieľania údajov o polohe" + "Údaje, zdieľanie údajov, aktualizácie zdieľania údajov, aktualizácie zdieľania údajov o polohe, zdieľanie" + "Ochrana súkromia pri reklamách" + "Prispôsobovať informácie, podľa ktorých aplikácie zobrazujú reklamy" + "reklamy, ochrana súkromia pri reklamách, technológie privacy sandbox, témy reklám, reklamy navrhované aplikáciami, meranie reklám" + "Biometria pre pracovné aplikácie" + "Ďalšie nastavenia" + "Šifrovanie, prihlasovacie údaje a ďalšie informácie" diff --git a/SafetyCenter/Resources/res/values-sl-v34/strings.xml b/SafetyCenter/Resources/res/values-sl-v34/strings.xml index 3e36d42c84..201e2c2db5 100644 --- a/SafetyCenter/Resources/res/values-sl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-sl-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "zdravje, Health Connect" + "Posodobitve deljenja podatkov o lokaciji" + "podatki, deljenje podatkov, posodobitve deljenja podatkov, posodobitve deljenja podatkov o lokaciji, deljenje" + "Zasebnost pri oglaševanju" + "Prilagodite, katere podatke uporabljajo aplikacije za prikazovanje oglasov." + "oglasi, zasebnost pri oglaševanju, zasebni peskovnik, teme oglasov, oglasi na predlog aplikacij, merjenje oglasov" + "Biometrika za delo" + "Več nastavitev" + "Šifriranje, poverilnice in drugo" diff --git a/SafetyCenter/Resources/res/values-sq-v34/strings.xml b/SafetyCenter/Resources/res/values-sq-v34/strings.xml index 3e36d42c84..81caddf722 100644 --- a/SafetyCenter/Resources/res/values-sq-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-sq-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Shëndeti, Health Connect" + "Përditësime për ndarjen e të dhënave për vendndodhjen" + "Të dhënat, ndarja e të dhënave, përditësimet për ndarjen e të dhënave, përditësimet për ndarjen e të dhënave për vendndodhjen, ndarja" + "Privatësia e reklamave" + "Informacionet e personalizuara që aplikacionet përdorin për të të shfaqur reklama" + "reklamat, privatësia e reklamave, privacy sandbox, temat e reklamave, reklamat e sugjeruara nga aplikacionet, matja e reklamave" + "Sisteme biometrike për punë" + "Cilësime të tjera" + "Enkriptimi, kredencialet dhe të tjera" diff --git a/SafetyCenter/Resources/res/values-sv-v34/strings.xml b/SafetyCenter/Resources/res/values-sv-v34/strings.xml index 3e36d42c84..88aeb6e5ff 100644 --- a/SafetyCenter/Resources/res/values-sv-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-sv-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Hälsa, Health Connect" + "Uppdateringar om datadelning för plats" + "Data, Datadelning, Uppdateringar om datadelning, Uppdateringar om datadelning för plats, delning" + "Annonsintegritet" + "Anpassa information som appar använder för att visa annonser" + "annonser, annonsintegritet, privacy sandbox, annonsämnen, föreslagna annonser i appar, annonsmätning" + "Biometri för jobbet" + "Fler inställningar" + "Kryptering, användaruppgifter med mera" diff --git a/SafetyCenter/Resources/res/values-sw-v34/strings.xml b/SafetyCenter/Resources/res/values-sw-v34/strings.xml index 3e36d42c84..f417e09aca 100644 --- a/SafetyCenter/Resources/res/values-sw-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-sw-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Afya, Health Connect" + "Masasisho ya kushiriki data ya mahali" + "Data, kushiriki Data, masasisho ya kushiriki Data, Masasisho ya kushiriki data ya mahali, kushiriki" + "Faragha ya matangazo" + "Weka mapendeleo ya maelezo yanayotumiwa na programu kukuonyesha matangazo" + "matangazo, faragha ya matangazo, mazingira ya faragha, mada za tangazo, matangazo yanayopendekezwa na programu, upimaji wa tangazo" + "Bayometriki ya programu za kazini" + "Mipangilio zaidi" + "Usimbaji fiche, vitambulisho na zaidi" diff --git a/SafetyCenter/Resources/res/values-ta-v34/strings.xml b/SafetyCenter/Resources/res/values-ta-v34/strings.xml index 3e36d42c84..931cd51c03 100644 --- a/SafetyCenter/Resources/res/values-ta-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ta-v34/strings.xml @@ -21,18 +21,14 @@ - - + "இருப்பிடத்திற்கான தரவுப் பகிர்வு குறித்த அறிவிப்புகள்" - - - - + "விளம்பரங்கள் தொடர்பான தனியுரிமை" + "உங்களுக்கு விளம்பரங்களைக் காட்டுவதற்காக ஆப்ஸ் பயன்படுத்தும் தகவல்களைப் பிரத்தியேகப்படுத்தலாம்" - - + "பணி ஆப்ஸுக்கான பயோமெட்ரிக்ஸ்" diff --git a/SafetyCenter/Resources/res/values-te-v34/strings.xml b/SafetyCenter/Resources/res/values-te-v34/strings.xml index 3e36d42c84..2c956d55bf 100644 --- a/SafetyCenter/Resources/res/values-te-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-te-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "ఆరోగ్యం, Health Connect" + "లొకేషన్‌కు సంబంధించిన డేటా షేరింగ్ అప్‌డేట్‌లు" + "డేటా, డేటా షేరింగ్, డేటా షేరింగ్ అప్‌డేట్‌లు, లొకేషన్‌కు సంబంధించిన డేటా షేరింగ్ అప్‌డేట్‌లు, షేరింగ్" + "యాడ్‌ల విషయంలో గోప్యత" + "మీకు యాడ్‌లను చూపడానికి ఉపయోగించే సమాచార యాప్‌లను అనుకూలంగా మార్చండి" + "యాడ్‌లు, యాడ్‌ల విషయంలో గోప్యత, గోప్యతా పరిరక్షణ టెక్నాలజీల సెట్, యాడ్ టాపిక్‌లు, యాప్-సూచించిన యాడ్‌లు, యాడ్ మెజర్‌మెంట్" + "వర్క్ యాప్‌ల కోసం బయోమెట్రిక్స్" + "మరిన్ని సెట్టింగ్‌లు" + "ఎన్‌క్రిప్షన్, ఆధారాలు, ఇంకా మరిన్ని" diff --git a/SafetyCenter/Resources/res/values-tl-v34/strings.xml b/SafetyCenter/Resources/res/values-tl-v34/strings.xml index 3e36d42c84..cfd92f4bec 100644 --- a/SafetyCenter/Resources/res/values-tl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-tl-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Kalusugan, Health Connect" + "Mga update sa pagbabahagi ng data para sa lokasyon" + "Data, Pagbabahagi ng data, Mga update sa pagbabahagi ng data, Mga update sa pagbabahagi ng data para sa lokasyon, pagbabahagi" + "Privacy sa mga ad" + "I-customize ang impormasyong ginagamit ng mga app para makapagpakita sa iyo ng mga ad" + "mga ad, privacy sa ad, privacy sandbox, mga paksa ng ad, mga ad na iminumungkahi ng app, pagsusukat ng ad" + "Biometrics para sa trabaho" + "Higit pang setting" + "Pag-encrypt, mga kredensyal, at higit pa" diff --git a/SafetyCenter/Resources/res/values-tr-v34/strings.xml b/SafetyCenter/Resources/res/values-tr-v34/strings.xml index 3e36d42c84..01cc1b727f 100644 --- a/SafetyCenter/Resources/res/values-tr-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-tr-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Sağlık, Health Connect" + "Konum için veri paylaşımı güncellemeleri" + "Veri, Veri paylaşımı, Veri paylaşımı güncellemeleri, Konum için veri paylaşımı güncellemeleri, paylaşım" + "Reklam gizliliği" + "Uygulamaların size reklam göstermek için kullandığı bilgileri özelleştirin" + "reklamlar, reklam gizliliği, özel korumalı alan, reklam konuları, uygulama tarafından önerilen reklamlar, reklam ölçümü" + "İş için biyometri" + "Diğer ayarlar" + "Şifreleme, kimlik bilgisi ve daha fazlası" diff --git a/SafetyCenter/Resources/res/values-uk-v34/strings.xml b/SafetyCenter/Resources/res/values-uk-v34/strings.xml index 3e36d42c84..fd164056ff 100644 --- a/SafetyCenter/Resources/res/values-uk-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-uk-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Здоров’я, Health Connect" + "Оновлення способу передавання геоданих" + "Дані, передавання даних, оновлення способу передавання даних, оновлення способу передавання геоданих, передавання" + "Конфіденційність у рекламі" + "Налаштуйте типи інформації, на основі якої додатки показуватимуть вам рекламу" + "реклама, конфіденційність у рекламі, privacy sandbox, теми оголошень, пропонована додатками реклама, вимірювання ефективності реклами" + "Біометрія для роботи" + "Інші налаштування" + "Шифрування, облікові дані тощо" diff --git a/SafetyCenter/Resources/res/values-ur-v34/strings.xml b/SafetyCenter/Resources/res/values-ur-v34/strings.xml index 3e36d42c84..24a47f4556 100644 --- a/SafetyCenter/Resources/res/values-ur-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-ur-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "‏صحت، Health Connect" + "مقام کے لیے ڈیٹا کے اشتراک کی اپ ڈیٹس" + "ڈیٹا، ڈیٹا کا اشتراک، ڈیٹا کے اشتراک کی اپ ڈیٹس، ڈیٹا کے اشتراک کی اپ ڈیٹس برائے مقام، اشتراک کرنا" + "اشتہارات کی رازداری" + "اس معلومات کو حسب ضرورت بنائیں جس کو ایپس آپ کو اشتہارات دکھانے کیلئے استعمال کرتی ہیں" + "اشتہارات، اشتہار کی رازداری، رازداری سینڈ باکس، اشتہار کے عنوانات، ایپس کے تجویز کردہ اشتہارات، اشتہار کی پیمائش" + "دفتری ایپس کیلئے بایو میٹرکس" + "مزید ترتیبات" + "مرموز کاری، اسنادات اور مزید" diff --git a/SafetyCenter/Resources/res/values-uz-v34/strings.xml b/SafetyCenter/Resources/res/values-uz-v34/strings.xml index 21bb552a6a..11f01ecd2b 100644 --- a/SafetyCenter/Resources/res/values-uz-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-uz-v34/strings.xml @@ -21,10 +21,10 @@ "Health, Health Connect" "Joylashuv axboroti ulashuvida oʻzgarishlar" "Maʼlumotlar, maʼlumotlar ulashuvi, maʼlumotlar ulashuvi yangilanishi, joylashuv axboroti ulashuvida oʻzgarishlar, ulashuv" - "Reklamada maxfiylik" - "Ilovalar reklamalarni taqdim etish uchun qanday maʼlumotlardan foydalanishi mumkinligini belgilang" + "Reklamalarda maxfiylik" + "Reklamalarni chiqarishda ilovalar foydalanadigan maʼlumotlarni belgilang" "reklama, reklamada maxfiylik, maxfiylik sinovi, reklama mavzulari, ilova taklif qiladigan reklama, reklama hisoblanishi" - "Ishga oid ilovalarda biometriya" + "Ish uchun biometriya" "Boshqa sozlamalar" "Shifrlash, hisob maʼlumotlari va boshqalar" diff --git a/SafetyCenter/Resources/res/values-vi-v34/strings.xml b/SafetyCenter/Resources/res/values-vi-v34/strings.xml index 3e36d42c84..d04d590836 100644 --- a/SafetyCenter/Resources/res/values-vi-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-vi-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Sức khoẻ, Health Connect" + "Cập nhật chế độ Chia sẻ dữ liệu vị trí" + "Dữ liệu, tính năng Chia sẻ dữ liệu, cập nhật chế độ Chia sẻ dữ liệu, cập nhật chế độ Chia sẻ dữ liệu vị trí, chia sẻ" + "Quyền riêng tư trong quảng cáo" + "Tuỳ chỉnh thông tin mà các ứng dụng dùng để hiển thị quảng cáo cho bạn" + "quảng cáo, quyền riêng tư trong quảng cáo, hộp cát về quyền riêng tư, chủ đề quảng cáo, quảng cáo do ứng dụng gợi ý, đo lường quảng cáo" + "Hệ thống nhận dạng sinh trắc học dành cho công việc" + "Chế độ cài đặt khác" + "Mã hoá, thông tin xác thực, v.v." diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml index 3e36d42c84..758eb4d2e8 100644 --- a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "健康, Health, Health Connect" + "位置数据分享方面的更新" + "数据, 数据分享, 数据分享方面的更新, 位置数据分享方面的更新, 分享, Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing" + "广告隐私权" + "自定义应用可以使用哪些信息来向您展示广告" + "广告, 广告隐私权, Privacy Sandbox, 广告主题, 应用建议的广告, 广告衡量, ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement" + "适用于工作应用的生物识别" + "更多设置" + "加密、凭据等" diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml index 3e36d42c84..81eb5a5c2e 100644 --- a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "健康, Health Connect" + "位置資料分享更新" + "資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享" + "廣告私隱權" + "自訂應用程式根據哪些資料向您顯示廣告" + "廣告, 廣告私隱權, 私隱沙箱, 廣告主題, 應用程式建議廣告, 廣告評估功能" + "用於工作應用程式的生物識別選項" + "其他設定" + "加密、憑證等" diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml index 3e36d42c84..7b0c20e198 100644 --- a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "健康、Health Connect" + "位置資料分享更新" + "資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享" + "廣告隱私權" + "自訂應用程式可用來放送廣告的資訊" + "廣告, 廣告隱私權, Privacy Sandbox, 廣告主題, 應用程式建議廣告, 廣告評估" + "工作應用程式的生物特徵辨識選項" + "其他設定" + "加密、憑證等等" diff --git a/SafetyCenter/Resources/res/values-zu-v34/strings.xml b/SafetyCenter/Resources/res/values-zu-v34/strings.xml index 3e36d42c84..456c8a9966 100644 --- a/SafetyCenter/Resources/res/values-zu-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zu-v34/strings.xml @@ -17,25 +17,15 @@ - - - - - - - - - - - - - - - - - - - - + "Health Connect" + "Impilo, i-Health Connect" + "Izibuyekezo zokwabelana ngedatha zendawo" + "Idatha, Ukwabelana ngedatha, Izibuyekezo zokwabelana ngedatha, Izibuyekezo zokwabelana ngedatha zendawo, ukwabelana" + "Ubumfihlo bezikhangiso" + "Enza ngokwezifiso ama-app asetshenziswayo ukukubonisa izikhangiso" + "izikhangiso, ubumfihlo bezikhangiso, i-sandbox yobumfihlo, izihloko zesikhangiso, izikhangiso zeziphakamiso ze-app, ukukalwa kwesikhangiso" + "I-Biometrics yomsebenzi" + "Amanye amasethingi" + "Ukubethela, izimfanelo, nokuningi" -- GitLab From 2cb925cec2587330e19f250c328f91769f40aea3 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 27 Feb 2023 01:18:56 -0800 Subject: [PATCH 016/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4bf827beb048c8356a596ce71921e4c834620c17 --- SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-pt/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml index 40bd68add9..c2a8b53ad9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml @@ -17,7 +17,7 @@ - "Verifican&#173;do" + "Verifican­‐do" "Verificando configurações do dispositivo…" "Tudo certo" "Nenhum problema encontrado" diff --git a/SafetyCenter/Resources/shared_res/values-pt/strings.xml b/SafetyCenter/Resources/shared_res/values-pt/strings.xml index 40bd68add9..c2a8b53ad9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt/strings.xml @@ -17,7 +17,7 @@ - "Verifican&#173;do" + "Verifican­‐do" "Verificando configurações do dispositivo…" "Tudo certo" "Nenhum problema encontrado" -- GitLab From aa391bc1233555c5e76bb1cce14e21206d2429b2 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Mon, 27 Feb 2023 15:46:53 -0800 Subject: [PATCH 017/577] Adjust Photo Picker button placement and text Put the "All photos" button below the other buttons. After the user selects photos, change text to be "more photos". For apps that don't support photo picker, grant USER_SELECTED first, then apply state to READ_MEDIA_IMAGES/VIDEO. When clicking "don't allow more", no longer revokes USER_SELECTED. If the user tries to revoke in settings while in the false grant state, this now works properly. Bug: 270705891 Bug: 268050719 Bug: 270700724 Fixes: 270700735 Test: atest PhotoPickerPermissionTest Change-Id: If48cc096a0fcf51c0e884151cf8c59747403c69f --- .../grant_permissions_buttons_singleton.xml | 23 +++++++++++ .../res/layout/grant_permissions.xml | 20 ++++++--- .../layout/grant_permissions_material3.xml | 21 +++++++--- .../res/values-v31/styles.xml | 18 +++++++- PermissionController/res/values/strings.xml | 10 ++--- .../ui/GrantPermissionsActivity.java | 5 +++ .../ui/GrantPermissionsViewHandler.java | 3 +- .../GrantPermissionsViewHandlerImpl.kt | 14 ++++++- .../ui/model/AppPermissionViewModel.kt | 13 +++++- .../ui/model/GrantPermissionsViewModel.kt | 41 +++++++++++++------ .../permission/utils/KotlinUtils.kt | 18 ++++++-- 11 files changed, 149 insertions(+), 37 deletions(-) create mode 100644 PermissionController/res/drawable-v31/grant_permissions_buttons_singleton.xml diff --git a/PermissionController/res/drawable-v31/grant_permissions_buttons_singleton.xml b/PermissionController/res/drawable-v31/grant_permissions_buttons_singleton.xml new file mode 100644 index 0000000000..35674f3ff1 --- /dev/null +++ b/PermissionController/res/drawable-v31/grant_permissions_buttons_singleton.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/PermissionController/res/layout/grant_permissions.xml b/PermissionController/res/layout/grant_permissions.xml index 5c9e2ca6e4..aa8e958b7e 100644 --- a/PermissionController/res/layout/grant_permissions.xml +++ b/PermissionController/res/layout/grant_permissions.xml @@ -135,16 +135,16 @@ android:text="@string/grant_dialog_button_allow_foreground" style="@style/PermissionGrantButtonAllowForeground" /> + + - - + + + + diff --git a/PermissionController/res/layout/grant_permissions_material3.xml b/PermissionController/res/layout/grant_permissions_material3.xml index 6bef8d53ee..8c1ddf47a5 100644 --- a/PermissionController/res/layout/grant_permissions_material3.xml +++ b/PermissionController/res/layout/grant_permissions_material3.xml @@ -141,16 +141,16 @@ android:text="@string/grant_dialog_button_allow_one_time" style="@style/PermissionGrantButtonAllowOneTimeMaterial3" /> - - + + + + + + + @drawable/grant_permissions_buttons_bottom + + @@ -91,9 +105,9 @@ + parent="@style/PermissionGrantButtonSingleton"> + parent="@style/PermissionGrantButtonTop"> + + + + + - - - diff --git a/PermissionController/res/values-v33/attrs.xml b/PermissionController/res/values-v33/attrs.xml index 2c62b253e9..4a417076d8 100644 --- a/PermissionController/res/values-v33/attrs.xml +++ b/PermissionController/res/values-v33/attrs.xml @@ -37,8 +37,8 @@ - + diff --git a/PermissionController/res/values-v33/styles.xml b/PermissionController/res/values-v33/styles.xml index e53cbc2505..6b726fdb79 100644 --- a/PermissionController/res/values-v33/styles.xml +++ b/PermissionController/res/values-v33/styles.xml @@ -324,7 +324,7 @@ + - - + diff --git a/PermissionController/res/values/overlayable.xml b/PermissionController/res/values/overlayable.xml index 850b5df40c..8f81e446bf 100644 --- a/PermissionController/res/values/overlayable.xml +++ b/PermissionController/res/values/overlayable.xml @@ -37,12 +37,24 @@ + + + + + + + + + + + + + + - - @@ -52,23 +64,27 @@ + + + + + - + + + + + - - - - - - + @@ -526,4 +542,4 @@ - \ No newline at end of file + diff --git a/PermissionController/res/values/styles.xml b/PermissionController/res/values/styles.xml index 11b9ebec19..a859b3ce97 100644 --- a/PermissionController/res/values/styles.xml +++ b/PermissionController/res/values/styles.xml @@ -233,16 +233,16 @@ parent="@style/PermissionGrantButton"> - - + @@ -256,10 +256,6 @@ parent="@style/PermissionGrantButton"> - - -- GitLab From 9b15cf41985b55cf5768a2c636968b3c6f503412 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 7 Jun 2023 15:04:05 +0000 Subject: [PATCH 133/577] Remove unused parameter. Bug: 267476663 Test: builds Relnote: N/A Change-Id: I427204c2c0f907552eb7a330496e7130e5400076 --- .../android/safetycenter/data/SafetyCenterDataManager.java | 1 - .../android/safetycenter/data/SafetySourceDataRepository.java | 4 ---- 2 files changed, 5 deletions(-) diff --git a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java index 9fd593ed93..912cea47ca 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java @@ -89,7 +89,6 @@ public final class SafetyCenterDataManager { new SafetyCenterIssueDismissalRepository(apiLock, safetyCenterConfigReader); mSafetySourceDataRepository = new SafetySourceDataRepository( - context, mSafetyCenterInFlightIssueActionRepository, mSafetyCenterIssueDismissalRepository); mSafetyCenterIssueRepository = diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java index d437245b4e..df360c5db8 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java @@ -26,7 +26,6 @@ import static com.android.permission.PermissionStatsLog.SAFETY_SOURCE_STATE_COLL import android.annotation.UptimeMillisLong; import android.annotation.UserIdInt; -import android.content.Context; import android.os.SystemClock; import android.safetycenter.SafetyCenterData; import android.safetycenter.SafetyEvent; @@ -68,16 +67,13 @@ final class SafetySourceDataRepository { private final ArrayMap mSafetySourceLastUpdated = new ArrayMap<>(); private final ArrayMap mSourceStates = new ArrayMap<>(); - private final Context mContext; private final SafetyCenterInFlightIssueActionRepository mSafetyCenterInFlightIssueActionRepository; private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; SafetySourceDataRepository( - Context context, SafetyCenterInFlightIssueActionRepository safetyCenterInFlightIssueActionRepository, SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { - mContext = context; mSafetyCenterInFlightIssueActionRepository = safetyCenterInFlightIssueActionRepository; mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; } -- GitLab From f7880cff182600ef1647fed68950f1ecb6748563 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 7 Jun 2023 15:25:47 +0000 Subject: [PATCH 134/577] Improve device logcat logs for refresh & action timeouts. This makes it easier to debug issues such as b/283707833 Bug: 283707833 Test: manual Relnote: N/A Change-Id: I1ac91c8c26b0c3fdf2811d50baa65caf0050a800 --- .../SafetyCenterRefreshTracker.java | 20 ++++++++++++++++++- .../safetycenter/SafetyCenterService.java | 10 ++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java index 2a0fa786b9..080dfff68b 100644 --- a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java +++ b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java @@ -78,7 +78,7 @@ public final class SafetyCenterRefreshTracker { String reportRefreshInProgress( @RefreshReason int refreshReason, UserProfileGroup userProfileGroup) { if (mRefreshInProgress != null) { - Log.i(TAG, "Replacing an ongoing refresh"); + Log.i(TAG, "Replacing ongoing refresh with id: " + mRefreshInProgress.getId()); } String refreshBroadcastId = UUID.randomUUID() + "_" + mRefreshCounter++; @@ -272,6 +272,15 @@ public final class SafetyCenterRefreshTracker { int refreshReason = clearedRefresh.getReason(); int requestType = RefreshReasons.toRefreshRequestType(refreshReason); + Log.w( + TAG, + "Timeout after " + + clearedRefresh.getDurationSinceStart() + + " for refresh with reason: " + + refreshReason + + ", and id: " + + clearedRefresh.getId()); + for (int i = 0; i < timedOutSources.size(); i++) { SafetySourceKey sourceKey = timedOutSources.valueAt(i); Duration duration = clearedRefresh.getDurationSinceSourceStart(sourceKey); @@ -285,6 +294,15 @@ public final class SafetyCenterRefreshTracker { refreshReason, false); } + + Log.w( + TAG, + "Refresh with id: " + + clearedRefresh.getId() + + " timed out for tracked source id: " + + sourceKey.getSourceId() + + ", and user id: " + + sourceKey.getUserId()); } SafetyCenterStatsdLogger.writeWholeRefreshSystemEvent( diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 1a9f607814..f70e58a200 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -906,8 +906,6 @@ public final class SafetyCenterService extends SystemService { "refresh_timeout"))); } } - - Log.w(TAG, "Timeout for refresh with id: " + mRefreshBroadcastId); } @Override @@ -956,6 +954,10 @@ public final class SafetyCenterService extends SystemService { new SafetyCenterErrorDetails( mSafetyCenterResourcesContext.getStringByName( "resolving_action_error"))); + Log.w( + TAG, + "Resolving action timed out for: " + + toUserFriendlyString(mSafetyCenterIssueActionId)); } } @@ -1162,6 +1164,10 @@ public final class SafetyCenterService extends SystemService { return; } if (safetySourceIssueAction.willResolve()) { + Log.d( + TAG, + "Starting resolving action for: " + + toUserFriendlyString(safetyCenterIssueActionId)); mSafetyCenterDataManager.markSafetyCenterIssueActionInFlight( safetyCenterIssueActionId); ResolvingActionTimeout resolvingActionTimeout = -- GitLab From 12ee4e41001227322fa0859d6487a6e2b1848e7e Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 7 Jun 2023 17:33:33 +0000 Subject: [PATCH 135/577] Slight refactor of SafetyCenterResourcesContext. Only cache the resources context, not every field. Ideally it should implement ContextWrapper for the resources APK context directly, I may follow up with another CL to do that (it's a bit more risky and involved). Also guard it by the API lock to make sure the resources context is loaded at most once. Bug: 283100177 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: Ia54faa909105566fd5382c68b3e9046e1628267b --- .../SafetyCenterResourcesContext.java | 202 ++++++++---------- .../SafetyCenterResourcesContextTest.kt | 32 +-- .../SafetyCenterConfigReader.java | 20 +- .../safetycenter/SafetyCenterService.java | 90 ++++---- 4 files changed, 172 insertions(+), 172 deletions(-) diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java index 9a77296e21..215e0f6d7a 100644 --- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java @@ -39,10 +39,12 @@ import java.io.InputStream; import java.util.List; /** - * Wrapper for context to override getResources method. Resources for the Safety Center that need to - * be fetched from the dedicated resources APK. + * Wrapper for a base context to expose Safety Center resources that need to be fetched from a + * dedicated APK. + * + *

This class isn't thread safe. Thread safety must be handled by the caller. */ -public class SafetyCenterResourcesContext extends ContextWrapper { +public final class SafetyCenterResourcesContext extends ContextWrapper { private static final String TAG = "SafetyCenterResContext"; /** Intent action that is used to identify the Safety Center resources APK */ @@ -65,25 +67,22 @@ public class SafetyCenterResourcesContext extends ContextWrapper { private final String mResourcesApkAction; /** The path where the Safety Center resources APK is expected to be installed */ - @Nullable private final String mResourcesApkPath; + private final String mResourcesApkPath; /** Raw XML config resource name */ private final String mConfigName; - /** Specific flags used for retrieving resolve info */ + /** Specific flags used for retrieving resolve info. */ private final int mFlags; /** - * Whether we should fallback with an empty string when calling {@link #getStringByName} for a - * string resource that does not exist. + * Whether we should fallback with an empty string / null values when calling the methods of + * this class for a resource that does not exist. */ private final boolean mShouldFallbackIfNamedResourceNotFound; - // Cached package name and resources from the resources APK - @Nullable private String mResourcesApkPkgName; - @Nullable private AssetManager mAssetsFromApk; - @Nullable private Resources mResourcesFromApk; - @Nullable private Resources.Theme mThemeFromApk; + // Cached context from the resources APK + @Nullable private Context mResourcesApkContext; public SafetyCenterResourcesContext(Context contextBase) { this(contextBase, /* shouldFallbackIfNamedResourceNotFound */ true); @@ -104,13 +103,13 @@ public class SafetyCenterResourcesContext extends ContextWrapper { SafetyCenterResourcesContext( Context contextBase, String resourcesApkAction, - @Nullable String resourcesApkPath, + String resourcesApkPath, String configName, int flags, boolean shouldFallbackIfNamedResourceNotFound) { super(contextBase); mResourcesApkAction = requireNonNull(resourcesApkAction); - mResourcesApkPath = resourcesApkPath; + mResourcesApkPath = requireNonNull(resourcesApkPath); mConfigName = requireNonNull(configName); mFlags = flags; mShouldFallbackIfNamedResourceNotFound = shouldFallbackIfNamedResourceNotFound; @@ -124,28 +123,32 @@ public class SafetyCenterResourcesContext extends ContextWrapper { } /** - * Initializes the {@link Context}'s {@link AssetManager}, {@link Resources} and {@link - * Resources.Theme}. + * Initializes the resources APK {@link Context}, and returns whether this was successful. * - *

This call is optional as this can also be lazily instantiated. This is useful to ensure - * that resources are loaded prior to interacting with the {@link SafetyCenterResourcesContext}, - * as this code needs to run for the same user as the provided base {@link Context}; which may - * not be the case with a binder call. + *

This call is optional as this can also be lazily instantiated. It can be used to ensure + * that the resources APK context is loaded prior to interacting with this class. This + * initialization code needs to run in the same user as the provided base {@link Context}. This + * may not be the case with a binder call, which is why it can be more appropriate to do this + * explicitly. */ - public void init() { - mAssetsFromApk = getAssets(); - mResourcesFromApk = getResources(); - mThemeFromApk = getTheme(); + public boolean init() { + return getResourcesApkContext() != null; } - /** Get the package name of the Safety Center resources APK. */ + /** Gets the {@link Context} of the Safety Center resources APK. */ @VisibleForTesting @Nullable - String getResourcesApkPkgName() { - if (mResourcesApkPkgName != null) { - return mResourcesApkPkgName; + Context getResourcesApkContext() { + if (mResourcesApkContext != null) { + return mResourcesApkContext; } + mResourcesApkContext = loadResourcesApkContext(); + return mResourcesApkContext; + } + + @Nullable + private Context loadResourcesApkContext() { List resolveInfos = getPackageManager().queryIntentActivities(new Intent(mResourcesApkAction), mFlags); @@ -169,9 +172,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { final int resolveInfosSize = resolveInfos.size(); for (int i = 0; i < resolveInfosSize; i++) { ResolveInfo resolveInfo = resolveInfos.get(i); - if (mResourcesApkPath != null - && !resolveInfo.activityInfo.applicationInfo.sourceDir.startsWith( - mResourcesApkPath)) { + if (!resolveInfo.activityInfo.applicationInfo.sourceDir.startsWith(mResourcesApkPath)) { // skip apps that don't live in the Permission apex continue; } @@ -188,9 +189,19 @@ public class SafetyCenterResourcesContext extends ContextWrapper { return null; } - mResourcesApkPkgName = info.activityInfo.applicationInfo.packageName; - Log.i(TAG, "Found Safety Center resources APK at: " + mResourcesApkPkgName); - return mResourcesApkPkgName; + String resourcesApkPkgName = info.activityInfo.applicationInfo.packageName; + Log.i(TAG, "Found Safety Center resources APK at: " + resourcesApkPkgName); + return getPackageContext(resourcesApkPkgName); + } + + @Nullable + private Context getPackageContext(String packageName) { + try { + return createPackageContext(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Failed to load package context for: " + packageName, e); + } + return null; } /** @@ -199,19 +210,11 @@ public class SafetyCenterResourcesContext extends ContextWrapper { */ @Nullable public InputStream getSafetyCenterConfig() { - String resourcePkgName = getResourcesApkPkgName(); - if (resourcePkgName == null) { - return null; - } - Resources resources = getResources(); - if (resources == null) { - return null; - } - int id = resources.getIdentifier(mConfigName, "raw", resourcePkgName); + int id = getResId(mConfigName, "raw"); if (id == Resources.ID_NULL) { return null; } - return resources.openRawResource(id); + return getResources().openRawResource(id); } /** @@ -240,7 +243,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { /** Same as {@link #getOptionalString(int)} but using the string name rather than ID. */ @Nullable public String getOptionalStringByName(String name) { - return getOptionalString(getStringRes(name)); + return getOptionalString(getResId(name, "string")); } /** @@ -249,97 +252,47 @@ public class SafetyCenterResourcesContext extends ContextWrapper { * {@link #mShouldFallbackIfNamedResourceNotFound} is {@code false}). */ public String getStringByName(String name) { - int id = getStringRes(name); + int id = getResId(name, "string"); return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id)); } /** Same as {@link #getStringByName(String)} but with the given {@code formatArgs}. */ public String getStringByName(String name, Object... formatArgs) { - int id = getStringRes(name); + int id = getResId(name, "string"); return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id, formatArgs)); } - private String maybeFallbackIfNamedResourceIsNull(String name, @Nullable String value) { - if (value != null) { - return value; - } - if (!mShouldFallbackIfNamedResourceNotFound) { - throw new Resources.NotFoundException(); - } - Log.w(TAG, "String resource " + name + " not found"); - return ""; - } - - @StringRes - private int getStringRes(String name) { - return getResId(name, "string"); - } - - private int getResId(String name, String type) { - String resourcePkgName = getResourcesApkPkgName(); - if (resourcePkgName == null) { - return Resources.ID_NULL; - } - Resources resources = getResources(); - if (resources == null) { - return Resources.ID_NULL; - } - // TODO(b/227738283): profile the performance of this operation and consider adding caching - // or finding some alternative solution. - return resources.getIdentifier(name, type, resourcePkgName); - } - - @Nullable - private Context getResourcesApkContext() { - String name = getResourcesApkPkgName(); - if (name == null) { - return null; - } - try { - return createPackageContext(name, 0); - } catch (PackageManager.NameNotFoundException e) { - Log.wtf(TAG, "Failed to load resources", e); - } - return null; - } - /** Retrieve assets held in the Safety Center resources APK. */ @Override @Nullable public AssetManager getAssets() { - if (mAssetsFromApk == null) { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext != null) { - mAssetsFromApk = resourcesApkContext.getAssets(); - } + Context resourcesApkContext = getResourcesApkContext(); + if (resourcesApkContext == null) { + return null; } - return mAssetsFromApk; + return resourcesApkContext.getAssets(); } /** Retrieve resources held in the Safety Center resources APK. */ @Override @Nullable public Resources getResources() { - if (mResourcesFromApk == null) { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext != null) { - mResourcesFromApk = resourcesApkContext.getResources(); - } + Context resourcesApkContext = getResourcesApkContext(); + if (resourcesApkContext == null) { + return null; } - return mResourcesFromApk; + return resourcesApkContext.getResources(); } /** Retrieve theme held in the Safety Center resources APK. */ @Override @Nullable public Resources.Theme getTheme() { - if (mThemeFromApk == null) { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext != null) { - mThemeFromApk = resourcesApkContext.getTheme(); - } + Context resourcesApkContext = getResourcesApkContext(); + if (resourcesApkContext == null) { + return null; } - return mThemeFromApk; + return resourcesApkContext.getTheme(); } /** @@ -370,17 +323,17 @@ public class SafetyCenterResourcesContext extends ContextWrapper { * drawable exists, returns {@code null} or throws {@link Resources.NotFoundException}. */ @Nullable - public Icon getIconByDrawableName(String drawableResName) { - int resId = getResId(drawableResName, "drawable"); + public Icon getIconByDrawableName(String name) { + int resId = getResId(name, "drawable"); if (resId != Resources.ID_NULL) { - return Icon.createWithResource(getResourcesApkPkgName(), resId); + return Icon.createWithResource(getResourcesApkContext().getPackageName(), resId); } if (!mShouldFallbackIfNamedResourceNotFound) { throw new Resources.NotFoundException(); } - Log.w(TAG, "Drawable resource " + drawableResName + " not found"); + Log.w(TAG, "Drawable resource " + name + " not found"); return null; } @@ -400,4 +353,27 @@ public class SafetyCenterResourcesContext extends ContextWrapper { Log.w(TAG, "Color resource " + name + " not found"); return null; } + + private String maybeFallbackIfNamedResourceIsNull(String name, @Nullable String value) { + if (value != null) { + return value; + } + if (!mShouldFallbackIfNamedResourceNotFound) { + throw new Resources.NotFoundException(); + } + Log.w(TAG, "String resource " + name + " not found"); + return ""; + } + + private int getResId(String name, String type) { + Context resourcesApkContext = getResourcesApkContext(); + if (resourcesApkContext == null) { + return Resources.ID_NULL; + } + // TODO(b/227738283): profile the performance of this operation and consider adding caching + // or finding some alternative solution. + return resourcesApkContext + .getResources() + .getIdentifier(name, type, resourcesApkContext.getPackageName()); + } } diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt index 1a82460d28..c7905ea475 100644 --- a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt +++ b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt @@ -29,14 +29,14 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SafetyCenterResourcesContextTest { private val context: Context = getApplicationContext() - private val theme: Resources.Theme? = context.theme @Test fun validDataWithValidInputs() { - val resourcesContext = - SafetyCenterResourcesContext(context, RESOURCES_APK_ACTION, null, CONFIG_NAME, 0, false) + val resourcesContext = createNewResourcesContext() - assertThat(resourcesContext.resourcesApkPkgName).isEqualTo(RESOURCES_APK_PKG_NAME) + val resourcesApkContext = resourcesContext.resourcesApkContext + assertThat(resourcesApkContext).isNotNull() + assertThat(resourcesApkContext!!.packageName).isEqualTo(RESOURCES_APK_PKG_NAME) val configContent = resourcesContext.safetyCenterConfig?.bufferedReader().use { it?.readText() } @@ -51,7 +51,7 @@ class SafetyCenterResourcesContextTest { fun nullDataWithWrongAction() { val resourcesContext = createNewResourcesContext(resourcesApkAction = "wrong") - assertThat(resourcesContext.resourcesApkPkgName).isNull() + assertThat(resourcesContext.resourcesApkContext).isNull() assertThat(resourcesContext.safetyCenterConfig).isNull() assertThat(resourcesContext.assets).isNull() assertThat(resourcesContext.resources).isNull() @@ -63,7 +63,7 @@ class SafetyCenterResourcesContextTest { val resourcesContext = createNewResourcesContext(resourcesApkPath = "/apex/com.android.permission") - assertThat(resourcesContext.resourcesApkPkgName).isNull() + assertThat(resourcesContext.resourcesApkContext).isNull() assertThat(resourcesContext.safetyCenterConfig).isNull() assertThat(resourcesContext.assets).isNull() assertThat(resourcesContext.resources).isNull() @@ -74,7 +74,7 @@ class SafetyCenterResourcesContextTest { fun nullDataWithWrongFlag() { val resourcesContext = createNewResourcesContext(flags = PackageManager.MATCH_SYSTEM_ONLY) - assertThat(resourcesContext.resourcesApkPkgName).isNull() + assertThat(resourcesContext.resourcesApkContext).isNull() assertThat(resourcesContext.safetyCenterConfig).isNull() assertThat(resourcesContext.assets).isNull() assertThat(resourcesContext.resources).isNull() @@ -85,7 +85,7 @@ class SafetyCenterResourcesContextTest { fun nullConfigWithWrongConfigName() { val resourcesContext = createNewResourcesContext(configName = "wrong") - assertThat(resourcesContext.resourcesApkPkgName).isNotNull() + assertThat(resourcesContext.resourcesApkContext).isNotNull() assertThat(resourcesContext.safetyCenterConfig).isNull() assertThat(resourcesContext.assets).isNotNull() assertThat(resourcesContext.resources).isNotNull() @@ -140,14 +140,14 @@ class SafetyCenterResourcesContextTest { fun getDrawableByName_validDrawable_returnsDrawable() { val resourcesContext = createNewResourcesContext() - assertThat(resourcesContext.getDrawableByName("valid_drawable", theme)).isNotNull() + assertThat(resourcesContext.getDrawableByName("valid_drawable", context.theme)).isNotNull() } @Test fun getDrawableByName_invalidDrawableWithFallback_returnsNull() { val resourcesContext = createNewResourcesContext(fallback = true) - assertThat(resourcesContext.getDrawableByName("invalid_drawable", theme)).isNull() + assertThat(resourcesContext.getDrawableByName("invalid_drawable", context.theme)).isNull() } @Test @@ -155,7 +155,7 @@ class SafetyCenterResourcesContextTest { val resourcesContext = createNewResourcesContext(fallback = false) assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getDrawableByName("invalid_drawable", theme) + resourcesContext.getDrawableByName("invalid_drawable", context.theme) } } @@ -207,13 +207,19 @@ class SafetyCenterResourcesContextTest { private fun createNewResourcesContext( resourcesApkAction: String = RESOURCES_APK_ACTION, - resourcesApkPath: String? = null, + resourcesApkPath: String = "", configName: String = CONFIG_NAME, flags: Int = 0, fallback: Boolean = false ) = SafetyCenterResourcesContext( - context, resourcesApkAction, resourcesApkPath, configName, flags, fallback) + context, + resourcesApkAction, + resourcesApkPath, + configName, + flags, + fallback + ) companion object { const val RESOURCES_APK_ACTION = diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index ecb741a4bf..555c1db110 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -76,7 +76,7 @@ public final class SafetyCenterConfigReader { * this method was {@code true}. */ boolean loadConfig() { - SafetyCenterConfig safetyCenterConfig = readSafetyCenterConfig(); + SafetyCenterConfig safetyCenterConfig = loadSafetyCenterConfig(); if (safetyCenterConfig == null) { return false; } @@ -225,26 +225,26 @@ public final class SafetyCenterConfigReader { } @Nullable - private SafetyCenterConfig readSafetyCenterConfig() { - InputStream in = mSafetyCenterResourcesContext.getSafetyCenterConfig(); - if (in == null) { - Log.e(TAG, "Cannot get safety center config file, Safety Center will be disabled"); + private SafetyCenterConfig loadSafetyCenterConfig() { + Resources resources = mSafetyCenterResourcesContext.getResources(); + if (resources == null) { + Log.e(TAG, "Cannot access Safety Center resources"); return null; } - Resources resources = mSafetyCenterResourcesContext.getResources(); - if (resources == null) { - Log.e(TAG, "Cannot get safety center resources, Safety Center will be disabled"); + InputStream in = mSafetyCenterResourcesContext.getSafetyCenterConfig(); + if (in == null) { + Log.e(TAG, "Cannot access Safety Center config file"); return null; } try { SafetyCenterConfig safetyCenterConfig = SafetyCenterConfigParser.parseXmlResource(in, resources); - Log.d(TAG, "SafetyCenterConfig read successfully"); + Log.d(TAG, "SafetyCenterConfig loaded successfully"); return safetyCenterConfig; } catch (ParseException e) { - Log.e(TAG, "Cannot read SafetyCenterConfig, Safety Center will be disabled", e); + Log.e(TAG, "Cannot parse SafetyCenterConfig", e); return null; } } diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 1a9f607814..969c43ce6d 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -38,7 +38,6 @@ import static java.util.Objects.requireNonNull; import android.annotation.UserIdInt; import android.app.PendingIntent; import android.app.StatsManager; -import android.app.StatsManager.StatsPullAtomCallback; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -114,8 +113,10 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") private final SafetyCenterTimeouts mSafetyCenterTimeouts = new SafetyCenterTimeouts(); + @GuardedBy("mApiLock") private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + @GuardedBy("mApiLock") private final SafetyCenterNotificationChannels mNotificationChannels; @GuardedBy("mApiLock") @@ -142,11 +143,10 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") private final SafetyCenterDataChangeNotifier mSafetyCenterDataChangeNotifier; - private final StatsPullAtomCallback mPullAtomCallback; private final boolean mDeviceSupportsSafetyCenter; /** Whether the {@link SafetyCenterConfig} was successfully loaded. */ - private volatile boolean mConfigAvailable; + private volatile boolean mConfigAvailable = false; public SafetyCenterService(Context context) { super(context); @@ -178,13 +178,6 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterConfigReader, mSafetyCenterRefreshTracker, mSafetyCenterDataManager); - mPullAtomCallback = - new SafetyCenterPullAtomCallback( - context, - mApiLock, - mSafetyCenterConfigReader, - mSafetyCenterDataFactory, - mSafetyCenterDataManager); mSafetyCenterDataChangeNotifier = new SafetyCenterDataChangeNotifier(mNotificationSender, mSafetyCenterListeners); mDeviceSupportsSafetyCenter = @@ -193,39 +186,52 @@ public final class SafetyCenterService extends SystemService { Resources.getSystem() .getIdentifier( "config_enableSafetyCenter", "bool", "android")); - if (!mDeviceSupportsSafetyCenter) { - Log.i(TAG, "Device does not support Safety Center, it will be disabled"); - } } @Override public void onStart() { publishBinderService(Context.SAFETY_CENTER_SERVICE, new Stub()); - if (mDeviceSupportsSafetyCenter) { - synchronized (mApiLock) { - mSafetyCenterResourcesContext.init(); - SafetyCenterFlags.init(mSafetyCenterResourcesContext); - mConfigAvailable = mSafetyCenterConfigReader.loadConfig(); - if (mConfigAvailable) { - mSafetyCenterDataManager.loadPersistableDataStateFromFile(); - new UserBroadcastReceiver().register(getContext()); - new SafetyCenterNotificationReceiver( - /* service= */ this, - mSafetyCenterDataManager, - mSafetyCenterDataChangeNotifier, - mApiLock) - .register(getContext()); - new LocaleBroadcastReceiver().register(getContext()); - } + if (!mDeviceSupportsSafetyCenter) { + Log.i(TAG, "Device does not support Safety Center, it will be disabled"); + return; + } + + synchronized (mApiLock) { + boolean safetyCenterResourcesInitialized = mSafetyCenterResourcesContext.init(); + if (!safetyCenterResourcesInitialized) { + Log.e(TAG, "Cannot init Safety Center resources, Safety Center will be disabled"); + return; } + + SafetyCenterFlags.init(mSafetyCenterResourcesContext); + + if (!mSafetyCenterConfigReader.loadConfig()) { + Log.e(TAG, "Cannot init Safety Center config, Safety Center will be disabled"); + return; + } + + mConfigAvailable = true; + mSafetyCenterDataManager.loadPersistableDataStateFromFile(); + new UserBroadcastReceiver().register(getContext()); + new SafetyCenterNotificationReceiver( + /* service= */ this, + mSafetyCenterDataManager, + mSafetyCenterDataChangeNotifier, + mApiLock) + .register(getContext()); + new LocaleBroadcastReceiver().register(getContext()); } } @Override public void onBootPhase(int phase) { - if (phase == SystemService.PHASE_BOOT_COMPLETED && canUseSafetyCenter()) { - registerSafetyCenterEnabledListener(); - registerSafetyCenterPullAtomCallback(); + if (phase != SystemService.PHASE_BOOT_COMPLETED || !canUseSafetyCenter()) { + return; + } + + registerSafetyCenterEnabledListener(); + synchronized (mApiLock) { + registerSafetyCenterPullAtomCallbackLocked(); mNotificationChannels.createAllChannelsForAllUsers(getContext()); } } @@ -239,14 +245,22 @@ public final class SafetyCenterService extends SystemService { DeviceConfig.NAMESPACE_PRIVACY, foregroundThreadExecutor, listener); } - private void registerSafetyCenterPullAtomCallback() { + @GuardedBy("mApiLock") + private void registerSafetyCenterPullAtomCallbackLocked() { StatsManager statsManager = requireNonNull(getContext().getSystemService(StatsManager.class)); + SafetyCenterPullAtomCallback pullAtomCallback = + new SafetyCenterPullAtomCallback( + getContext(), + mApiLock, + mSafetyCenterConfigReader, + mSafetyCenterDataFactory, + mSafetyCenterDataManager); statsManager.setPullAtomCallback( SAFETY_STATE, /* metadata= */ null, BackgroundThread.getExecutor(), - mPullAtomCallback); + pullAtomCallback); } /** Service implementation of {@link ISafetyCenterManager.Stub}. */ @@ -992,7 +1006,9 @@ public final class SafetyCenterService extends SystemService { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "Locale changed broadcast received"); - mNotificationChannels.createAllChannelsForAllUsers(getContext()); + synchronized (mApiLock) { + mNotificationChannels.createAllChannelsForAllUsers(getContext()); + } } } @@ -1056,7 +1072,9 @@ public final class SafetyCenterService extends SystemService { case Intent.ACTION_MANAGED_PROFILE_ADDED: case Intent.ACTION_MANAGED_PROFILE_AVAILABLE: startRefreshingSafetySources(REFRESH_REASON_OTHER, userId); - mNotificationChannels.createAllChannelsForUser(getContext(), userHandle); + synchronized (mApiLock) { + mNotificationChannels.createAllChannelsForUser(getContext(), userHandle); + } break; } } -- GitLab From faf20cf1ac1f2a19221ce84a0dc9d337f2dd598a Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Thu, 8 Jun 2023 10:36:53 +0000 Subject: [PATCH 136/577] Further refactoring of SafetyCenterResourcesContext. Stop making it implement ContextWrapper, that's error-prone as it implies it has the Context from the resources APK as a base when in fact the base is the context passed in; and methods are overridden only partially. Also increase test coverage. Bug: 283100177 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: I2925921de3de01633beacbbe713d46e9522f003b --- .../SafetyCenterSearchIndexablesProvider.kt | 2 +- .../SafetyCenterResourcesContext.java | 243 +++++++------- .../res/raw/safety_center_config.txt | 1 + .../SafetyCenterResourcesContextTest.kt | 300 +++++++++++++++--- .../safetycenter/DevicePolicyResources.java | 4 +- .../SafetyCenterConfigReader.java | 7 +- .../safetycenter/SafetyCenterService.java | 23 +- .../safetycenter/cts/config/XmlConfigTest.kt | 4 +- 8 files changed, 386 insertions(+), 198 deletions(-) create mode 100644 SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/safety_center_config.txt diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt index 8e5e63452b..463288c641 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt @@ -206,7 +206,7 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { } } - private fun Context.getNotEmptyStringOrNull(resId: Int): String? = + private fun SafetyCenterResourcesContext.getNotEmptyStringOrNull(resId: Int): String? = if (resId != Resources.ID_NULL) { getString(resId).takeIf { it.isNotEmpty() } } else { diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java index 215e0f6d7a..25455dc7a1 100644 --- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java @@ -19,11 +19,9 @@ package com.android.safetycenter.resources; import static java.util.Objects.requireNonNull; import android.content.Context; -import android.content.ContextWrapper; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.AssetManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; @@ -39,12 +37,17 @@ import java.io.InputStream; import java.util.List; /** - * Wrapper for a base context to expose Safety Center resources that need to be fetched from a - * dedicated APK. + * A class to access Safety Center resources that need to be fetched from a dedicated APK. * - *

This class isn't thread safe. Thread safety must be handled by the caller. + *

You must check whether Safety Center is enabled or the value returned by {@link #init()} prior + * to interacting with this class. Failure to do so may cause an {@link IllegalStateException} if + * the resources APK cannot be accessed. + * + *

This class isn't thread safe. Thread safety must be handled by the caller, or this may cause + * the resources APK {@link Context} to be initialized multiple times. */ -public final class SafetyCenterResourcesContext extends ContextWrapper { +public final class SafetyCenterResourcesContext { + private static final String TAG = "SafetyCenterResContext"; /** Intent action that is used to identify the Safety Center resources APK */ @@ -63,15 +66,14 @@ public final class SafetyCenterResourcesContext extends ContextWrapper { /** Raw XML config resource name */ private static final String CONFIG_NAME = "safety_center_config"; + private final Context mContext; + /** Intent action that is used to identify the Safety Center resources APK */ private final String mResourcesApkAction; /** The path where the Safety Center resources APK is expected to be installed */ private final String mResourcesApkPath; - /** Raw XML config resource name */ - private final String mConfigName; - /** Specific flags used for retrieving resolve info. */ private final int mFlags; @@ -81,36 +83,33 @@ public final class SafetyCenterResourcesContext extends ContextWrapper { */ private final boolean mShouldFallbackIfNamedResourceNotFound; - // Cached context from the resources APK + // Cached context from the resources APK. @Nullable private Context mResourcesApkContext; - public SafetyCenterResourcesContext(Context contextBase) { - this(contextBase, /* shouldFallbackIfNamedResourceNotFound */ true); + public SafetyCenterResourcesContext(Context context) { + this(context, /* shouldFallbackIfNamedResourceNotFound */ true); } private SafetyCenterResourcesContext( - Context contextBase, boolean shouldFallbackIfNamedResourceNotFound) { + Context context, boolean shouldFallbackIfNamedResourceNotFound) { this( - contextBase, + context, RESOURCES_APK_ACTION, APEX_MODULE_PATH, - CONFIG_NAME, PackageManager.MATCH_SYSTEM_ONLY, shouldFallbackIfNamedResourceNotFound); } @VisibleForTesting SafetyCenterResourcesContext( - Context contextBase, + Context context, String resourcesApkAction, String resourcesApkPath, - String configName, int flags, boolean shouldFallbackIfNamedResourceNotFound) { - super(contextBase); + mContext = requireNonNull(context); mResourcesApkAction = requireNonNull(resourcesApkAction); mResourcesApkPath = requireNonNull(resourcesApkPath); - mConfigName = requireNonNull(configName); mFlags = flags; mShouldFallbackIfNamedResourceNotFound = shouldFallbackIfNamedResourceNotFound; } @@ -132,25 +131,33 @@ public final class SafetyCenterResourcesContext extends ContextWrapper { * explicitly. */ public boolean init() { - return getResourcesApkContext() != null; + mResourcesApkContext = loadResourcesApkContext(); + return mResourcesApkContext != null; } - /** Gets the {@link Context} of the Safety Center resources APK. */ - @VisibleForTesting - @Nullable - Context getResourcesApkContext() { + /** + * Returns the {@link Context} of the Safety Center resources APK. + * + *

Throws an {@link IllegalStateException} if the resources APK is not available + */ + public Context getResourcesApkContext() { if (mResourcesApkContext != null) { return mResourcesApkContext; } mResourcesApkContext = loadResourcesApkContext(); + if (mResourcesApkContext == null) { + throw new IllegalStateException("Resources APK context not found"); + } + return mResourcesApkContext; } @Nullable private Context loadResourcesApkContext() { List resolveInfos = - getPackageManager().queryIntentActivities(new Intent(mResourcesApkAction), mFlags); + mContext.getPackageManager() + .queryIntentActivities(new Intent(mResourcesApkAction), mFlags); if (resolveInfos.size() > 1) { // multiple apps found, log a warning, but continue @@ -197,183 +204,153 @@ public final class SafetyCenterResourcesContext extends ContextWrapper { @Nullable private Context getPackageContext(String packageName) { try { - return createPackageContext(packageName, 0); + return mContext.createPackageContext(packageName, 0); } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Failed to load package context for: " + packageName, e); } return null; } + /** Calls {@link Context#getResources()} for the resources APK {@link Context}. */ + public Resources getResources() { + return getResourcesApkContext().getResources(); + } + /** - * Gets the raw XML resource representing the Safety Center configuration from the Safety Center - * resources APK. + * Returns the raw XML resource representing the Safety Center configuration file from the + * Safety Center resources APK. */ @Nullable public InputStream getSafetyCenterConfig() { - int id = getResId(mConfigName, "raw"); - if (id == Resources.ID_NULL) { - return null; - } - return getResources().openRawResource(id); + return getSafetyCenterConfig(CONFIG_NAME); } - /** - * Returns an optional {@link String} resource from the given {@code stringId}. - * - *

Returns {@code null} if {@code stringId} is equal to {@link Resources#ID_NULL}. Otherwise, - * throws a {@link Resources.NotFoundException} if the resource cannot be accessed. - */ + @VisibleForTesting @Nullable - public String getOptionalString(@StringRes int stringId) { - if (stringId == Resources.ID_NULL) { + InputStream getSafetyCenterConfig(String configName) { + int id = getResIdAndMaybeThrowIfNull(configName, "raw"); + if (id == Resources.ID_NULL) { return null; } - return getString(stringId); + return getResources().openRawResource(id); } - /** Same as {@link #getOptionalString(int)} but with the given {@code formatArgs}. */ - @Nullable - public String getOptionalString(@StringRes int stringId, Object... formatArgs) { - if (stringId == Resources.ID_NULL) { - return null; - } - return getString(stringId, formatArgs); + /** Calls {@link Context#getString(int)} for the resources APK {@link Context}. */ + public String getString(@StringRes int stringId) { + return getResourcesApkContext().getString(stringId); } - /** Same as {@link #getOptionalString(int)} but using the string name rather than ID. */ - @Nullable - public String getOptionalStringByName(String name) { - return getOptionalString(getResId(name, "string")); + /** Same as {@link #getString(int)} but with the given {@code formatArgs}. */ + public String getString(@StringRes int stringId, Object... formatArgs) { + return getResourcesApkContext().getString(stringId, formatArgs); } /** - * Gets a string resource by name from the Safety Center resources APK, and returns an empty - * string if the resource does not exist (or throws a {@link Resources.NotFoundException} if - * {@link #mShouldFallbackIfNamedResourceNotFound} is {@code false}). + * Returns the {@link String} with the given resource name. + * + *

If the {@link String} cannot be accessed, returns {@code ""} or throws {@link + * Resources.NotFoundException} depending on {@link #mShouldFallbackIfNamedResourceNotFound}. */ public String getStringByName(String name) { - int id = getResId(name, "string"); - return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id)); + int resId = getResIdAndMaybeThrowIfNull(name, "string"); + if (resId == Resources.ID_NULL) { + return ""; + } + return getString(resId); } /** Same as {@link #getStringByName(String)} but with the given {@code formatArgs}. */ public String getStringByName(String name, Object... formatArgs) { - int id = getResId(name, "string"); - return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id, formatArgs)); - } - - /** Retrieve assets held in the Safety Center resources APK. */ - @Override - @Nullable - public AssetManager getAssets() { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext == null) { - return null; + int resId = getResIdAndMaybeThrowIfNull(name, "string"); + if (resId == Resources.ID_NULL) { + return ""; } - return resourcesApkContext.getAssets(); + return getString(resId, formatArgs); } - /** Retrieve resources held in the Safety Center resources APK. */ - @Override + /** + * Returns an optional {@link String} resource with the given {@code stringId}. + * + *

Returns {@code null} if {@code stringId} is equal to {@link Resources#ID_NULL}. Otherwise, + * throws a {@link Resources.NotFoundException}. + */ @Nullable - public Resources getResources() { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext == null) { + public String getOptionalString(@StringRes int stringId) { + if (stringId == Resources.ID_NULL) { return null; } - return resourcesApkContext.getResources(); + return getString(stringId); } - /** Retrieve theme held in the Safety Center resources APK. */ - @Override + /** Same as {@link #getOptionalString(int)} but with the given resource name rather than ID. */ @Nullable - public Resources.Theme getTheme() { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext == null) { - return null; - } - return resourcesApkContext.getTheme(); + public String getOptionalStringByName(String name) { + return getOptionalString(getResId(name, "string")); } /** - * Gets a drawable resource by name from the Safety Center resources APK. Returns a null - * drawable if the resource does not exist (or throws a {@link Resources.NotFoundException} if - * {@link #mShouldFallbackIfNamedResourceNotFound} is {@code false}). + * Returns the {@link Drawable} with the given resource name. + * + *

If the {@link Drawable} cannot be accessed, returns {@code null} or throws {@link + * Resources.NotFoundException} depending on {@link #mShouldFallbackIfNamedResourceNotFound}. * - * @param name the identifier for this drawable resource * @param theme the theme used to style the drawable attributes, may be {@code null} */ @Nullable public Drawable getDrawableByName(String name, @Nullable Resources.Theme theme) { - int resId = getResId(name, "drawable"); - if (resId != Resources.ID_NULL) { - return getResources().getDrawable(resId, theme); - } - - if (!mShouldFallbackIfNamedResourceNotFound) { - throw new Resources.NotFoundException(); + int resId = getResIdAndMaybeThrowIfNull(name, "drawable"); + if (resId == Resources.ID_NULL) { + return null; } - - Log.w(TAG, "Drawable resource " + name + " not found"); - return null; + return getResources().getDrawable(resId, theme); } /** - * Returns an {@link Icon} instance containing a drawable with the given name. If no such - * drawable exists, returns {@code null} or throws {@link Resources.NotFoundException}. + * Returns an {@link Icon} containing the {@link Drawable} with the given resource name. + * + *

If the {@link Drawable} cannot be accessed, returns {@code null} or throws {@link + * Resources.NotFoundException} depending on {@link #mShouldFallbackIfNamedResourceNotFound}. */ @Nullable public Icon getIconByDrawableName(String name) { - int resId = getResId(name, "drawable"); - if (resId != Resources.ID_NULL) { - return Icon.createWithResource(getResourcesApkContext().getPackageName(), resId); - } - - if (!mShouldFallbackIfNamedResourceNotFound) { - throw new Resources.NotFoundException(); + int resId = getResIdAndMaybeThrowIfNull(name, "drawable"); + if (resId == Resources.ID_NULL) { + return null; } - - Log.w(TAG, "Drawable resource " + name + " not found"); - return null; + return Icon.createWithResource(getResourcesApkContext().getPackageName(), resId); } - /** Gets a color by resource name */ + /** + * Returns the {@link ColorInt} with the given resource name. + * + *

If the {@link ColorInt} cannot be accessed, returns {@code null} or throws {@link + * Resources.NotFoundException} depending on {@link #mShouldFallbackIfNamedResourceNotFound}. + */ @ColorInt @Nullable public Integer getColorByName(String name) { - int resId = getResId(name, "color"); - if (resId != Resources.ID_NULL) { - return getResources().getColor(resId, getTheme()); - } - - if (!mShouldFallbackIfNamedResourceNotFound) { - throw new Resources.NotFoundException(); + int resId = getResIdAndMaybeThrowIfNull(name, "color"); + if (resId == Resources.ID_NULL) { + return null; } - - Log.w(TAG, "Color resource " + name + " not found"); - return null; + return getResources().getColor(resId, getResourcesApkContext().getTheme()); } - private String maybeFallbackIfNamedResourceIsNull(String name, @Nullable String value) { - if (value != null) { - return value; + private int getResIdAndMaybeThrowIfNull(String name, String type) { + int resId = getResId(name, type); + if (resId != Resources.ID_NULL) { + return resId; } if (!mShouldFallbackIfNamedResourceNotFound) { throw new Resources.NotFoundException(); } - Log.w(TAG, "String resource " + name + " not found"); - return ""; + Log.w(TAG, "Named " + type + " resource: " + name + " not found"); + return resId; } private int getResId(String name, String type) { - Context resourcesApkContext = getResourcesApkContext(); - if (resourcesApkContext == null) { - return Resources.ID_NULL; - } // TODO(b/227738283): profile the performance of this operation and consider adding caching // or finding some alternative solution. - return resourcesApkContext - .getResources() - .getIdentifier(name, type, resourcesApkContext.getPackageName()); + return getResources().getIdentifier(name, type, getResourcesApkContext().getPackageName()); } } diff --git a/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/safety_center_config.txt b/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/safety_center_config.txt new file mode 100644 index 0000000000..3b12464976 --- /dev/null +++ b/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/safety_center_config.txt @@ -0,0 +1 @@ +TEST \ No newline at end of file diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt index c7905ea475..33ff7543e6 100644 --- a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt +++ b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt @@ -22,6 +22,7 @@ import android.content.res.Resources import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat +import java.lang.IllegalStateException import kotlin.test.assertFailsWith import org.junit.Test import org.junit.runner.RunWith @@ -31,65 +32,172 @@ class SafetyCenterResourcesContextTest { private val context: Context = getApplicationContext() @Test - fun validDataWithValidInputs() { + fun init_withValidInputs_returnsTrue() { val resourcesContext = createNewResourcesContext() - val resourcesApkContext = resourcesContext.resourcesApkContext - assertThat(resourcesApkContext).isNotNull() - assertThat(resourcesApkContext!!.packageName).isEqualTo(RESOURCES_APK_PKG_NAME) + val initialized = resourcesContext.init() - val configContent = - resourcesContext.safetyCenterConfig?.bufferedReader().use { it?.readText() } + assertThat(initialized).isTrue() + } - assertThat(configContent).isEqualTo(CONFIG_CONTENT) - assertThat(resourcesContext.assets).isNotNull() - assertThat(resourcesContext.resources).isNotNull() - assertThat(resourcesContext.theme).isNotNull() + @Test + fun init_withWrongAction_returnsFalse() { + val resourcesContext = createNewResourcesContext(resourcesApkAction = "wrong") + + val initialized = resourcesContext.init() + + assertThat(initialized).isFalse() + } + + @Test + fun init_withWrongPath_returnsFalse() { + val resourcesContext = + createNewResourcesContext(resourcesApkPath = "/apex/com.android.permission") + + val initialized = resourcesContext.init() + + assertThat(initialized).isFalse() + } + + @Test + fun init_withWrongFlags_returnsFalse() { + val resourcesContext = createNewResourcesContext(flags = PackageManager.MATCH_SYSTEM_ONLY) + + val initialized = resourcesContext.init() + + assertThat(initialized).isFalse() } @Test - fun nullDataWithWrongAction() { + fun getResourcesApkContext_withValidInputs_returnsResourcesApkContext() { + val resourcesContext = createNewResourcesContext() + + val resourcesApkContext = resourcesContext.resourcesApkContext + + assertThat(resourcesApkContext.packageName).isEqualTo(RESOURCES_APK_PKG_NAME) + } + + @Test + fun getResourcesApkContext_withWrongAction_throws() { val resourcesContext = createNewResourcesContext(resourcesApkAction = "wrong") - assertThat(resourcesContext.resourcesApkContext).isNull() - assertThat(resourcesContext.safetyCenterConfig).isNull() - assertThat(resourcesContext.assets).isNull() - assertThat(resourcesContext.resources).isNull() - assertThat(resourcesContext.theme).isNull() + assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } } @Test - fun nullDataWithWrongPath() { + fun getResourcesApkContext_withWrongPath_throws() { val resourcesContext = createNewResourcesContext(resourcesApkPath = "/apex/com.android.permission") - assertThat(resourcesContext.resourcesApkContext).isNull() - assertThat(resourcesContext.safetyCenterConfig).isNull() - assertThat(resourcesContext.assets).isNull() - assertThat(resourcesContext.resources).isNull() - assertThat(resourcesContext.theme).isNull() + assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } } @Test - fun nullDataWithWrongFlag() { + fun getResourcesApkContext_withWrongFlags_throws() { val resourcesContext = createNewResourcesContext(flags = PackageManager.MATCH_SYSTEM_ONLY) - assertThat(resourcesContext.resourcesApkContext).isNull() - assertThat(resourcesContext.safetyCenterConfig).isNull() - assertThat(resourcesContext.assets).isNull() - assertThat(resourcesContext.resources).isNull() - assertThat(resourcesContext.theme).isNull() + assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } + } + + @Test + fun getResources_withValidInputs_returnsResourcesApkContextResources() { + val resourcesContext = createNewResourcesContext() + + val resources = resourcesContext.resources + + assertThat(resources).isEqualTo(resourcesContext.resourcesApkContext.resources) + } + + @Test + fun getResources_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { resourcesContext.resources } + } + + @Test + fun getSafetyCenterConfig_withValidInputs_returnsConfigContent() { + val resourcesContext = createNewResourcesContext() + + val config = resourcesContext.safetyCenterConfig + val configContent = config?.bufferedReader().use { it?.readText() } + + assertThat(config).isNotNull() + assertThat(configContent).isEqualTo(CONFIG_CONTENT) + } + + @Test + fun getSafetyCenterConfig_anotherValidConfigName_returnsConfigContent() { + val resourcesContext = createNewResourcesContext() + + val config = resourcesContext.getSafetyCenterConfig(CONFIG_NAME) + val configContent = config?.bufferedReader().use { it?.readText() } + + assertThat(config).isNotNull() + assertThat(configContent).isEqualTo(CONFIG_CONTENT) + } + + @Test + fun getSafetyCenterConfig_invalidConfigNameWithFallback_returnsNull() { + val resourcesContext = createNewResourcesContext(fallback = true) + + assertThat(resourcesContext.getSafetyCenterConfig("wrong")).isNull() + } + + @Test + fun getSafetyCenterConfig_invalidConfigNameWithoutFallback_throws() { + val resourcesContext = createNewResourcesContext(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesContext.getSafetyCenterConfig("wrong") + } + } + + @Test + fun getSafetyCenterConfig_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { resourcesContext.safetyCenterConfig } + } + + @Test + fun getString_validString_returnsString() { + val resourcesContext = createNewResourcesContext() + + val ok = resourcesContext.getString(android.R.string.ok) + + assertThat(ok).isEqualTo("OK") + } + + @Test + fun getString_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getString(android.R.string.ok) + } + } + + @Test + fun getStringWithFormatArgs_validString_returnsString() { + val resourcesContext = createNewResourcesContext() + + val ok = resourcesContext.getString(android.R.string.ok, "") + + assertThat(ok).isEqualTo("OK") } @Test - fun nullConfigWithWrongConfigName() { - val resourcesContext = createNewResourcesContext(configName = "wrong") + fun getStringWithFormatArgs_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - assertThat(resourcesContext.resourcesApkContext).isNotNull() - assertThat(resourcesContext.safetyCenterConfig).isNull() - assertThat(resourcesContext.assets).isNotNull() - assertThat(resourcesContext.resources).isNotNull() - assertThat(resourcesContext.theme).isNotNull() + assertFailsWith(IllegalStateException::class) { + resourcesContext.getString(android.R.string.ok, "") + } } @Test @@ -115,6 +223,77 @@ class SafetyCenterResourcesContextTest { } } + @Test + fun getStringByName_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getStringByName("valid_string") + } + } + + @Test + fun getStringByNameWithFormatArgs_validString_returnsString() { + val resourcesContext = createNewResourcesContext() + + assertThat(resourcesContext.getStringByName("valid_string", "")).isEqualTo("I exist!") + } + + @Test + fun getStringByNameWithFormatArgs_invalidStringWithFallback_returnsEmptyString() { + val resourcesContext = createNewResourcesContext(fallback = true) + + assertThat(resourcesContext.getStringByName("invalid_string", "")).isEqualTo("") + } + + @Test + fun getStringByNameWithFormatArgs_invalidStringWithoutFallback_throws() { + val resourcesContext = createNewResourcesContext(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesContext.getStringByName("invalid_string", "") + } + } + + @Test + fun getStringByNameWithFormatArgs_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getStringByName("valid_string", "") + } + } + + @Test + fun getOptionalString_validString_returnsString() { + val resourcesContext = createNewResourcesContext() + + val ok = resourcesContext.getOptionalString(android.R.string.ok) + + assertThat(ok).isEqualTo("OK") + } + + @Test + fun getOptionalString_resourceIdNull_returnsNull() { + val resourcesContext = createNewResourcesContext() + + val string = resourcesContext.getOptionalString(Resources.ID_NULL) + + assertThat(string).isNull() + } + + @Test + fun getOptionalString_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getOptionalString(android.R.string.ok) + } + } + @Test fun getOptionalStringByName_validString_returnsString() { val resourcesContext = createNewResourcesContext() @@ -136,6 +315,16 @@ class SafetyCenterResourcesContextTest { assertThat(resourcesContext.getOptionalStringByName("invalid_string")).isNull() } + @Test + fun getOptionalStringByName_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getOptionalStringByName("valid_string") + } + } + @Test fun getDrawableByName_validDrawable_returnsDrawable() { val resourcesContext = createNewResourcesContext() @@ -159,6 +348,16 @@ class SafetyCenterResourcesContextTest { } } + @Test + fun getDrawableByName_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getDrawableByName("valid_drawable", context.theme) + } + } + @Test fun getIconByDrawableName_validDrawable_returnsIcon() { val resourcesContext = createNewResourcesContext() @@ -182,6 +381,16 @@ class SafetyCenterResourcesContextTest { } } + @Test + fun getIconByDrawableByName_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getIconByDrawableName("valid_drawable") + } + } + @Test fun getColorByName_validColor_returnsColor() { val resourcesContext = createNewResourcesContext() @@ -205,21 +414,22 @@ class SafetyCenterResourcesContextTest { } } + @Test + fun getColorByName_nullContext_throwsRegardlessOfFallback() { + val resourcesContext = + createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesContext.getColorByName("valid_color") + } + } + private fun createNewResourcesContext( resourcesApkAction: String = RESOURCES_APK_ACTION, resourcesApkPath: String = "", - configName: String = CONFIG_NAME, flags: Int = 0, fallback: Boolean = false - ) = - SafetyCenterResourcesContext( - context, - resourcesApkAction, - resourcesApkPath, - configName, - flags, - fallback - ) + ) = SafetyCenterResourcesContext(context, resourcesApkAction, resourcesApkPath, flags, fallback) companion object { const val RESOURCES_APK_ACTION = diff --git a/service/java/com/android/safetycenter/DevicePolicyResources.java b/service/java/com/android/safetycenter/DevicePolicyResources.java index 25cab343f3..2368425f72 100644 --- a/service/java/com/android/safetycenter/DevicePolicyResources.java +++ b/service/java/com/android/safetycenter/DevicePolicyResources.java @@ -50,7 +50,7 @@ final class DevicePolicyResources { String safetySourceId, @StringRes int workResId) { return getEnterpriseString( - safetyCenterResourcesContext, + safetyCenterResourcesContext.getResourcesApkContext(), safetySourceId, () -> safetyCenterResourcesContext.getString(workResId)); } @@ -62,7 +62,7 @@ final class DevicePolicyResources { static String getWorkProfilePausedString( SafetyCenterResourcesContext safetyCenterResourcesContext) { return getEnterpriseString( - safetyCenterResourcesContext, + safetyCenterResourcesContext.getResourcesApkContext(), WORK_PROFILE_PAUSED_TITLE, () -> safetyCenterResourcesContext.getStringByName("work_profile_paused")); } diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index 555c1db110..49417369a9 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -226,18 +226,13 @@ public final class SafetyCenterConfigReader { @Nullable private SafetyCenterConfig loadSafetyCenterConfig() { - Resources resources = mSafetyCenterResourcesContext.getResources(); - if (resources == null) { - Log.e(TAG, "Cannot access Safety Center resources"); - return null; - } - InputStream in = mSafetyCenterResourcesContext.getSafetyCenterConfig(); if (in == null) { Log.e(TAG, "Cannot access Safety Center config file"); return null; } + Resources resources = mSafetyCenterResourcesContext.getResources(); try { SafetyCenterConfig safetyCenterConfig = SafetyCenterConfigParser.parseXmlResource(in, resources); diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 969c43ce6d..4ce31b20d7 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -230,10 +230,12 @@ public final class SafetyCenterService extends SystemService { } registerSafetyCenterEnabledListener(); + SafetyCenterPullAtomCallback pullAtomCallback; synchronized (mApiLock) { - registerSafetyCenterPullAtomCallbackLocked(); + pullAtomCallback = newSafetyCenterPullAtomCallbackLocked(); mNotificationChannels.createAllChannelsForAllUsers(getContext()); } + registerSafetyCenterPullAtomCallback(pullAtomCallback); } private void registerSafetyCenterEnabledListener() { @@ -246,16 +248,19 @@ public final class SafetyCenterService extends SystemService { } @GuardedBy("mApiLock") - private void registerSafetyCenterPullAtomCallbackLocked() { + private SafetyCenterPullAtomCallback newSafetyCenterPullAtomCallbackLocked() { + return new SafetyCenterPullAtomCallback( + getContext(), + mApiLock, + mSafetyCenterConfigReader, + mSafetyCenterDataFactory, + mSafetyCenterDataManager); + } + + private void registerSafetyCenterPullAtomCallback( + SafetyCenterPullAtomCallback pullAtomCallback) { StatsManager statsManager = requireNonNull(getContext().getSystemService(StatsManager.class)); - SafetyCenterPullAtomCallback pullAtomCallback = - new SafetyCenterPullAtomCallback( - getContext(), - mApiLock, - mSafetyCenterConfigReader, - mSafetyCenterDataFactory, - mSafetyCenterDataManager); statsManager.setPullAtomCallback( SAFETY_STATE, /* metadata= */ null, diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt index 81d1af6a7d..3a1503cc2a 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt @@ -69,7 +69,7 @@ class XmlConfigTest { } private fun assertThatIntentResolves(intentAction: String) { - val pm = safetyCenterContext.packageManager + val pm = context.packageManager assertWithMessage("Intent '%s' cannot be resolved.", intentAction) .that(pm.queryIntentActivities(Intent(intentAction), ResolveInfoFlags.of(0))) .isNotEmpty() @@ -86,7 +86,7 @@ class XmlConfigTest { private fun parseXmlConfig() = SafetyCenterConfigParser.parseXmlResource( safetyCenterContext.safetyCenterConfig!!, - safetyCenterContext.resources!! + safetyCenterContext.resources ) companion object { -- GitLab From 26db8c985e3b7b1d67c4e8cd89ea678d08f88527 Mon Sep 17 00:00:00 2001 From: wwtbuaa01 Date: Mon, 15 May 2023 15:43:01 +0800 Subject: [PATCH 137/577] Introduce AppOpsManagerCompat to convert permissions to app ops. Some app op permissions are missing from the mapping in the framework. AppOpsManager.permissionToOp can return null in that situation. Bug: 274132354 Test: manual Change-Id: I8624feb5665d945d8d50fea47dfc151f2134fee5 --- .../compat/AppOpsManagerCompat.java | 48 +++++++++++++++++++ .../controller/model/AppOpPermissions.java | 4 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java diff --git a/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java new file mode 100644 index 0000000000..8e5a768dfe --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.role.controller.compat; + +import android.app.AppOpsManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.modules.utils.build.SdkLevel; + +import java.util.Objects; + +/** Helper for accessing features in {@link AppOpsManager}. */ +public class AppOpsManagerCompat { + + private AppOpsManagerCompat() {} + + /** + * @see AppOpsManager#permissionToOp(). + */ + @Nullable + public static String permissionToOp(@NonNull String permission) { + if (!SdkLevel.isAtLeastV()) { + // On Android U and below, PACKAGE_USAGE_STATUS is missing from the mapping + // in the framework. + if (Objects.equals(permission, android.Manifest.permission.PACKAGE_USAGE_STATS)) { + return AppOpsManager.OPSTR_GET_USAGE_STATS; + } + } + return AppOpsManager.permissionToOp(permission); + } +} \ No newline at end of file diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java index f3f9b321eb..29939a1a55 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java @@ -24,6 +24,7 @@ import android.os.Build; import androidx.annotation.NonNull; +import com.android.role.controller.compat.AppOpsManagerCompat; import com.android.role.controller.util.ArrayUtils; import com.android.role.controller.util.PackageUtils; @@ -55,7 +56,7 @@ public class AppOpPermissions { if (!ArrayUtils.contains(packageInfo.requestedPermissions, appOpPermission)) { return false; } - String appOp = AppOpsManager.permissionToOp(appOpPermission); + String appOp = AppOpsManagerCompat.permissionToOp(appOpPermission); if (!overrideNonDefaultMode) { Integer currentMode = Permissions.getAppOpMode(packageName, appOp, context); if (currentMode != null && currentMode != Permissions.getDefaultAppOpMode(appOp)) { @@ -96,6 +97,7 @@ public class AppOpPermissions { case AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS: case AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW: case AppOpsManager.OPSTR_WRITE_SETTINGS: + case AppOpsManager.OPSTR_GET_USAGE_STATS: case AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES: case AppOpsManager.OPSTR_START_FOREGROUND: // This isn't an API but we are deprecating it soon anyway. -- GitLab From baec1c78267262601eb67213363fdde5f00f1819 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 12 Jun 2023 13:08:43 +0000 Subject: [PATCH 138/577] Remove unecessary screen record. This test has been fixed, and the screen record rule is not instantiated. Bug: 267476663 Test: atest SafetyCenterQsActivityTest Relnote: N/A Change-Id: Iedd894055d25451945fe4c8d0e293c483ccbb529 --- .../functional/ui/SafetyCenterQsActivityTest.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterQsActivityTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterQsActivityTest.kt index 857c3d7c36..9ad142a2ac 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterQsActivityTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterQsActivityTest.kt @@ -19,7 +19,6 @@ package android.safetycenter.functional.ui import android.content.Context import android.hardware.SensorPrivacyManager.Sensors.CAMERA import android.hardware.SensorPrivacyManager.Sensors.MICROPHONE -import android.platform.test.rule.ScreenRecordRule import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.uiautomator.By @@ -27,10 +26,10 @@ import com.android.compatibility.common.util.DisableAnimationRule import com.android.compatibility.common.util.FreezeRotationRule import com.android.safetycenter.testing.EnableSensorRule import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterQsActivity -import com.android.safetycenter.testing.SafetyCenterTestRule -import com.android.safetycenter.testing.SupportsSafetyCenterRule import com.android.safetycenter.testing.SafetyCenterTestConfigs import com.android.safetycenter.testing.SafetyCenterTestHelper +import com.android.safetycenter.testing.SafetyCenterTestRule +import com.android.safetycenter.testing.SupportsSafetyCenterRule import com.android.safetycenter.testing.UiTestHelper.waitAllTextDisplayed import com.android.safetycenter.testing.UiTestHelper.waitDisplayed import com.android.safetycenter.testing.UiTestHelper.waitPageTitleDisplayed @@ -73,7 +72,6 @@ class SafetyCenterQsActivityTest { } @Test - @ScreenRecordRule.ScreenRecord fun launchActivity_togglePrivacyControls_hasUpdatedDescriptions() { context.launchSafetyCenterQsActivity { // Toggle privacy controls -- GitLab From 51b708dbd011ea373c9c8a143e2e1eff03fded01 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 12 Jun 2023 13:36:33 +0000 Subject: [PATCH 139/577] Bump UI automator timeout to 15s. Some tests seem to flakily fail under the 10s mark. Bumping this to 15s should hopefully still give us about 3 tries if the RetryRule is used. Also add the RetryRule to SafetyCenterActivityTest as they seem to flake. Bug: 240424992 Test: atest SafetyCenterFunctionalTestCases Relnote: N/A Change-Id: I0ce302b2086b895aac7b5f0096ddd1bfd33017d1 --- .../functional/ui/SafetyCenterActivityTest.kt | 28 ++++++-- .../functional/ui/SafetyCenterSubpagesTest.kt | 40 +++++------ .../testing/SafetyCenterActivityLauncher.kt | 68 ++++++++++++------- .../safetycenter/testing/UiTestHelper.kt | 2 +- 4 files changed, 87 insertions(+), 51 deletions(-) diff --git a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 262bf4babf..2afaa7057c 100644 --- a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -22,6 +22,7 @@ import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle import android.platform.test.rule.ScreenRecordRule +import android.platform.test.rule.ScreenRecordRule.ScreenRecord import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING @@ -30,9 +31,11 @@ import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SdkSuppress +import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By import com.android.compatibility.common.util.DisableAnimationRule import com.android.compatibility.common.util.FreezeRotationRule +import com.android.compatibility.common.util.RetryRule import com.android.compatibility.common.util.UiAutomatorUtils2.getUiDevice import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT @@ -72,10 +75,13 @@ import com.android.safetycenter.testing.UiTestHelper.waitExpandedIssuesDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceDataDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueNotDisplayed +import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeUnit.MILLISECONDS import org.junit.After import org.junit.Assume.assumeFalse import org.junit.Rule import org.junit.Test +import org.junit.rules.Timeout import org.junit.runner.RunWith /** Functional tests for the Safety Center Activity. */ @@ -93,6 +99,16 @@ class SafetyCenterActivityTest { @get:Rule(order = 4) val freezeRotationRule = FreezeRotationRule() @get:Rule(order = 5) val screenRecordRule = ScreenRecordRule() + // It is necessary to couple RetryRule and Timeout to ensure that all the retries together are + // restricted with the test timeout + @get:Rule(order = 6) val retryRule = RetryRule(/* retries = */ 3) + @get:Rule(order = 7) + val timeoutRule = + Timeout( + InstrumentationRegistry.getArguments().getString("timeout_msec", "60000").toLong(), + TimeUnit.MILLISECONDS + ) + @After fun clearDataAfterTest() { getUiDevice().resetRotation() @@ -408,7 +424,7 @@ class SafetyCenterActivityTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun entryListWithEntryGroup_clickingAClickableDisabledEntry_redirectsToDifferentScreen() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) safetyCenterTestHelper.setData( @@ -464,7 +480,7 @@ class SafetyCenterActivityTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun entryListWithSingleSource_clickingDefaultEntryImplicitIntent_redirectsToDifferentScreen() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.implicitIntentSingleSourceConfig) @@ -910,7 +926,7 @@ class SafetyCenterActivityTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun launchActivity_fromQuickSettings_issuesExpanded() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) safetyCenterTestHelper.setData( @@ -925,7 +941,7 @@ class SafetyCenterActivityTest { val bundle = Bundle() bundle.putBoolean(EXPAND_ISSUE_GROUP_QS_FRAGMENT_KEY, true) - context.launchSafetyCenterActivity(bundle) { + context.launchSafetyCenterActivity(bundle, withRetry = true) { waitExpandedIssuesDisplayed( safetySourceTestData.criticalResolvingGeneralIssue, safetySourceTestData.recommendationGeneralIssue, @@ -1060,7 +1076,7 @@ class SafetyCenterActivityTest { ) safetyCenterTestHelper.setData(SOURCE_ID_3, safetySourceTestData.informationWithIssue) - context.launchSafetyCenterActivity { + context.launchSafetyCenterActivity(withRetry = true) { waitCollapsedIssuesDisplayed( safetySourceTestData.criticalResolvingGeneralIssue, safetySourceTestData.recommendationGeneralIssue, @@ -1149,7 +1165,7 @@ class SafetyCenterActivityTest { val bundle = Bundle() bundle.putString(EXTRA_SAFETY_SOURCE_ID, SOURCE_ID_2) bundle.putString(EXTRA_SAFETY_SOURCE_ISSUE_ID, RECOMMENDATION_ISSUE_ID) - context.launchSafetyCenterActivity(bundle) { + context.launchSafetyCenterActivity(bundle, withRetry = true) { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitAllTextDisplayed(MORE_ISSUES_LABEL) diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt index dd377cc708..ad3ce3344b 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt @@ -20,6 +20,7 @@ import android.content.Context import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle import android.platform.test.rule.ScreenRecordRule +import android.platform.test.rule.ScreenRecordRule.ScreenRecord import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROUP_ID import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceIssue @@ -39,7 +40,6 @@ import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterActivity import com.android.safetycenter.testing.SafetyCenterActivityLauncher.openPageAndExit -import com.android.safetycenter.testing.SafetyCenterActivityLauncher.openPageAndExitAllowingRetries import com.android.safetycenter.testing.SafetyCenterFlags import com.android.safetycenter.testing.SafetyCenterTestConfigs import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.MULTIPLE_SOURCES_GROUP_ID_1 @@ -77,7 +77,7 @@ import com.android.safetycenter.testing.UiTestHelper.waitPageTitleDisplayed import com.android.safetycenter.testing.UiTestHelper.waitPageTitleNotDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueNotDisplayed -import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeUnit.MILLISECONDS import org.junit.After import org.junit.Before import org.junit.Rule @@ -109,7 +109,7 @@ class SafetyCenterSubpagesTest { val timeoutRule = Timeout( InstrumentationRegistry.getArguments().getString("timeout_msec", "60000").toLong(), - TimeUnit.MILLISECONDS + MILLISECONDS ) @Before @@ -314,14 +314,14 @@ class SafetyCenterSubpagesTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun entryListWithSingleSource_clickingTheInfoIcon_redirectsToDifferentScreen() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) val sourceTestData = safetySourceTestData.informationWithIconAction safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, sourceTestData) val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() - context.launchSafetyCenterActivity { + context.launchSafetyCenterActivity(withRetry = true) { openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitDisplayed(By.desc("Information")) { it.click() } waitButtonDisplayed("Exit test activity") { it.click() } @@ -479,7 +479,7 @@ class SafetyCenterSubpagesTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun issueCard_updateSafetySourceData_subpageDisplaysUpdatedIssue() { val initialDataToDisplay = safetySourceTestData.informationWithIssueWithAttributionTitle val updatedDataToDisplay = safetySourceTestData.criticalWithIssueWithAttributionTitle @@ -488,7 +488,7 @@ class SafetyCenterSubpagesTest { val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, initialDataToDisplay) - context.launchSafetyCenterActivity { + context.launchSafetyCenterActivity(withRetry = true) { openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(initialDataToDisplay.issues[0]) @@ -514,8 +514,8 @@ class SafetyCenterSubpagesTest { Response.ClearData ) - context.launchSafetyCenterActivity(withReceiverPermission = true) { - openPageAndExitAllowingRetries(context.getString(sourcesGroup.titleResId)) { + context.launchSafetyCenterActivity(withReceiverPermission = true, withRetry = true) { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) waitButtonDisplayed(action.label) { it.click() } @@ -534,8 +534,8 @@ class SafetyCenterSubpagesTest { val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() val issue = sourceData.issues[0] - context.launchSafetyCenterActivity { - openPageAndExitAllowingRetries(context.getString(sourcesGroup.titleResId)) { + context.launchSafetyCenterActivity(withRetry = true) { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) clickDismissIssueCard() @@ -555,8 +555,8 @@ class SafetyCenterSubpagesTest { val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() val issue = sourceData.issues[0] - context.launchSafetyCenterActivity { - openPageAndExitAllowingRetries(context.getString(sourcesGroup.titleResId)) { + context.launchSafetyCenterActivity(withRetry = true) { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) clickDismissIssueCard() waitAllTextDisplayed("Dismiss this alert?") @@ -598,8 +598,8 @@ class SafetyCenterSubpagesTest { val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() val issue = sourceData.issues[0] - context.launchSafetyCenterActivity { - openPageAndExitAllowingRetries(context.getString(sourcesGroup.titleResId)) { + context.launchSafetyCenterActivity(withRetry = true) { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) clickDismissIssueCard() waitAllTextDisplayed("Dismiss this alert?") @@ -622,8 +622,8 @@ class SafetyCenterSubpagesTest { val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() val issue = sourceData.issues[0] - context.launchSafetyCenterActivity { - openPageAndExitAllowingRetries(context.getString(sourcesGroup.titleResId)) { + context.launchSafetyCenterActivity(withRetry = true) { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) clickDismissIssueCard() waitAllTextDisplayed("Dismiss this alert?") @@ -858,7 +858,7 @@ class SafetyCenterSubpagesTest { safetyCenterTestConfigs.multipleSourcesInSingleGroupConfig.safetySourcesGroups.first() val issue = firstSourceData.issues[0] - context.launchSafetyCenterActivity { + context.launchSafetyCenterActivity(withRetry = true) { openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(issue) clickDismissIssueCard() @@ -912,7 +912,7 @@ class SafetyCenterSubpagesTest { } @Test - @ScreenRecordRule.ScreenRecord + @ScreenRecord fun settingsSearch_openWithGenericIntentExtra_showsGenericSubpage() { val config = safetyCenterTestConfigs.multipleSourcesConfig safetyCenterTestHelper.setConfig(config) @@ -922,7 +922,7 @@ class SafetyCenterSubpagesTest { val extras = Bundle() extras.putString(EXTRA_SETTINGS_FRAGMENT_ARGS_KEY, preferenceKey) - context.launchSafetyCenterActivity(extras) { + context.launchSafetyCenterActivity(extras, withRetry = true) { waitPageTitleDisplayed(context.getString(sourcesGroup.titleResId)) waitAllTextDisplayed( context.getString(source.titleResId), diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt index 537eb7eada..647b77be11 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt @@ -43,10 +43,13 @@ object SafetyCenterActivityLauncher { * @param withReceiverPermission whether we should hold the [SEND_SAFETY_CENTER_UPDATE] * permission while the activity is on the screen (e.g. to ensure the CTS package can have its * receiver called during refresh/rescan) + * @param withRetry can be used paired with the `RetryRule` to support retrying launching the + * activity and the execution of the [block] by throwing a [RetryableException] on failure */ fun Context.launchSafetyCenterActivity( intentExtras: Bundle? = null, withReceiverPermission: Boolean = false, + withRetry: Boolean = false, preventTrampolineToSettings: Boolean = true, block: () -> Unit ) { @@ -58,17 +61,21 @@ object SafetyCenterActivityLauncher { ) if (withReceiverPermission) { callWithShellPermissionIdentity(SEND_SAFETY_CENTER_UPDATE) { - executeBlockAndExit(block) { startActivity(launchSafetyCenterIntent) } + executeBlockAndExit(withRetry, block = block) { + startActivity(launchSafetyCenterIntent) + } } } else { - executeBlockAndExit(block) { startActivity(launchSafetyCenterIntent) } + executeBlockAndExit(withRetry, block = block) { + startActivity(launchSafetyCenterIntent) + } } } /** Launches the SafetyCenter Quick Settings activity and exits it once [block] completes. */ fun Context.launchSafetyCenterQsActivity(intentExtras: Bundle? = null, block: () -> Unit) { val launchSafetyCenterQsIntent = createIntent(ACTION_VIEW_SAFETY_CENTER_QS, intentExtras) - executeBlockAndExit(block) { + executeBlockAndExit(withRetry = false, block = block) { callWithShellPermissionIdentity(REVOKE_RUNTIME_PERMISSIONS) { startActivity(launchSafetyCenterQsIntent) } @@ -77,19 +84,8 @@ object SafetyCenterActivityLauncher { /** Launches a page in Safety Center and exits it once [block] completes. */ fun openPageAndExit(entryPoint: String, block: () -> Unit) { - executeBlockAndExit(block) { waitDisplayed(By.text(entryPoint)) { it.click() } } - } - - /** - * Launches a page in Safety Center and exits it once [block] completes, throwing a - * [RetryableException] for any [RuntimeException] thrown by [block] to allow [RetryRule] to - * retry the test invocation. - */ - fun openPageAndExitAllowingRetries(entryPoint: String, block: () -> Unit) { - try { - openPageAndExit(entryPoint, block) - } catch (e: Throwable) { - throw RetryableException(e, "Exception occurred when checking a Safety Center page") + executeBlockAndExit(withRetry = false, block = block) { + waitDisplayed(By.text(entryPoint)) { it.click() } } } @@ -107,14 +103,38 @@ object SafetyCenterActivityLauncher { return launchIntent } - fun executeBlockAndExit(block: () -> Unit, launchActivity: () -> Unit) { - val uiDevice = getUiDevice() - uiDevice.waitForIdle() - launchActivity() - uiDevice.waitForIdle() - block() - uiDevice.pressBack() - uiDevice.waitForIdle() + /** + * Executes the given [block] and presses the back button to exit. + * + * @param withRetry can be used paired with the `RetryRule` to support retrying the execution of + * the [block] by throwing a [RetryableException] on failure + */ + fun executeBlockAndExit( + withRetry: Boolean = false, + block: () -> Unit, + launchActivity: () -> Unit + ) { + maybeExecuteWithRetry(withRetry) { + val uiDevice = getUiDevice() + uiDevice.waitForIdle() + launchActivity() + uiDevice.waitForIdle() + block() + uiDevice.pressBack() + uiDevice.waitForIdle() + } + } + + private fun maybeExecuteWithRetry(withRetry: Boolean = false, block: () -> Unit) { + if (withRetry) { + try { + block() + } catch (e: Throwable) { + throw RetryableException(e, "Exception occurred when checking a Safety Center page") + } + } else { + block() + } } private const val EXTRA_PREVENT_TRAMPOLINE_TO_SETTINGS: String = diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt index ec676e3d90..915780d4e0 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt @@ -46,7 +46,7 @@ object UiTestHelper { const val MORE_ISSUES_LABEL = "More alerts" private const val DISMISS_ISSUE_LABEL = "Dismiss" - private val WAIT_TIMEOUT = Duration.ofSeconds(10) + private val WAIT_TIMEOUT = Duration.ofSeconds(15) private val NOT_DISPLAYED_TIMEOUT = Duration.ofMillis(500) private val TAG = UiTestHelper::class.java.simpleName -- GitLab From 4bb2be01504df3b1c754d421e1881676e30f1deb Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 20:56:30 -0700 Subject: [PATCH 140/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I39b4eb7d13ce689356eadb1f5e1ddfc9c780e844 --- PermissionController/res/values-cs/strings.xml | 2 +- PermissionController/res/values-es/strings.xml | 2 +- PermissionController/res/values-hi/strings.xml | 2 +- PermissionController/res/values-hu/strings.xml | 2 +- PermissionController/res/values-ky/strings.xml | 2 +- PermissionController/res/values-my/strings.xml | 2 +- PermissionController/res/values-ne/strings.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index dd8a7c5651..38faa75819 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -431,7 +431,7 @@ "Žádné aplikace" "Vybráno" "Vybráno – %1$s" - "přístup ke speciálním aplikacím" + "zvláštní přístup aplikací" "Přístupy pro aplikace" "Žádný přístup ke spec. aplik." "Žádné aplikace" diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index 711bb28dab..34ee46f9ba 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -347,7 +347,7 @@ "%s aplicaciones de accesibilidad tienen acceso completo a tu dispositivo" "%s puede ver tu pantalla, lo que haces y lo que introduces; realizar acciones; y controlar la pantalla." "Estas aplicaciones pueden ver tu pantalla, lo que haces y lo que introduces; realizar acciones; y controlar la pantalla." - "Asistente digital predeterminado" + "Asistente predeterminado" "Asistente digital" "Las aplicaciones de asistencia te ayudan según la información que aparezca en la pantalla. Algunas aplicaciones admiten tanto el menú de aplicaciones como los servicios de entrada de voz para ofrecerte asistencia integrada." "Aplicación de navegador predeterminada" diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index 4d361e7d93..4a083e0cd1 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -465,7 +465,7 @@ "क्या आपको <b>%1$s</b> को आस-पास मौजूद डिवाइसों को खोजने, उनसे कनेक्ट करने, और उनकी जगह की जानकारी का पता लगाने की अनुमति देनी है?" "क्या आप <b>%1$s</b> को आस-पास मौजूद डिवाइसों को खोजने, उनसे कनेक्ट करने, और उनकी जगह की जानकारी का पता लगाने की अनुमति देना चाहते हैं? ""सेटिंग में जाकर अनुमति दें." "क्या <b>%1$s</b> आपकी जगह की अनुमानित जानकारी के बजाय सटीक जानकारी ऐक्सेस करे?" - "क्या आप <b>%1$s</b> को इस डिवाइस की जगह की अनुमानित जानकारी ऐक्सेस करने की अनुमति देना चाहते हैं?" + "क्या आपको <b>%1$s</b> को इस डिवाइस की जगह की अनुमानित जानकारी ऐक्सेस करने की अनुमति देनी है?" "सटीक जगह" "अनुमानित जगह" "<b>%1$s</b> को अपना कैलेंडर ऐक्सेस करने की अनुमति देना है?" diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index ec83c59227..12ad687a6c 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -521,7 +521,7 @@ "Segélyhívó szám hívásakor a rendszer továbbra is megoszthatja a mikrofonadatokat." "Módosítás" "Biztonság és adatvédelem" - "Keresés az eszközön" + "Eszközvizsgálat" "Elvetés" "Elveti ezt az értesítést?" "Bármikor áttekintheti biztonsági és adatvédelmi beállításait, és növelheti a védelmet" diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index 58d8dd124c..e8816f7fd9 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -610,7 +610,7 @@ "Турган жериңизди билдирүү ыкмасын жаңыртуу" "Жүргөн жериңизди көрсөткөн ыкманы өзгөрткөн колдонмолорду карап чыксаңыз болот" "Бул колдонмолор жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрттү. Алар бул маалыматты мурда бөлүшпөй же азыр жарнамалоо же маркетинг максаттарында бөлүшүшү мүмкүн." - "Бул колдонмолорду иштеп чыгуучулар дайын-даректерди бөлүшүү тууралуу маалыматты колдонмолор дүкөнүнө беришти. Алар бул маалыматты жаңыртып турушу мүмкүн.\n\nМаалыматтарды бөлүшүү ыкмасы колдонмонун версиясына, колдонулушуна, регионго жана курагыңызга жараша айырмаланышы мүмкүн." + "Бул колдонмолорду иштеп чыгуучулар нерселерди бөлүшүү тууралуу маалыматты колдонмолор дүкөнүнө беришти. Алар бул маалыматты жаңыртып турушу мүмкүн.\n\nМаалыматтарды бөлүшүү ыкмасы колдонмонун версиясына, колдонулушуна, регионго жана курагыңызга жараша айырмаланышы мүмкүн." "Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" "Жүргөн жериңиз тууралуу маалымат үчүнчү тараптар менен бөлүшүлүп жатат" "Жүргөн жериңизди үчүнчү тараптар жарнамалоо же маркетинг максатында билип турушат" diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index 83c077bd51..53e563fd7d 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -608,7 +608,7 @@ "တည်နေရာဒေတာကို မျှဝေနိုင်သည်" "ဤအက်ပ်က ၎င်းသည် သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်" "တည်နေရာအတွက် ဒေတာမျှဝေခြင်း အပ်ဒိတ်" - "သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သောနည်းလမ်းအား ပြောင်းထားသော အက်ပ်များကို စိစစ်ပါ" + "သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သောနည်းလမ်းအား ပြောင်းထားသော အက်ပ်များကို စိစစ်သည်" "ဤအက်ပ်များသည် ၎င်းတို့က သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သော နည်းလမ်းကို ပြောင်းလိုက်ပါပြီ။ ၎င်းတို့သည် ဒေတာကို ယခင်က မျှဝေထားခြင်း မရှိနိုင်ပါ သို့မဟုတ် ကြော်ငြာခြင်း (သို့) အရောင်းမြှင့်တင်ခြင်းတို့အတွက် ဒေတာကို ယခုမျှဝေနိုင်သည်။" "ဤအက်ပ်များ၏ ဆော့ဖ်ဝဲရေးသူများသည် ၎င်းတို့၏ ဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများအကြောင်း အချက်အလက်ကို အက်ပ်စတိုးသို့ ပေးထားသည်။ သူတို့သည် ၎င်းကို အချိန်နှင့်အမျှ အပ်ဒိတ်လုပ်နိုင်သည်။\n\nဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများသည် သင်၏ အက်ပ်ဗားရှင်း၊ အသုံးပြုမှု၊ ဒေသနှင့် အသက်အရွယ်ပေါ် အခြေခံ၍ ကွဲပြားနိုင်သည်။" "ဒေတာမျှဝေခြင်းအကြောင်း လေ့လာရန်" diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index 2f43897441..c90c1fddef 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -366,7 +366,7 @@ "तपाईंलाई छोटा टेक्स्ट म्यासेज, फोटो, भिडियो र थप कुरा पठाउन र प्राप्त गर्न आफ्नो फोन नम्बर प्रयोग गर्न दिने एपहरू" "आफ्नो डिफल्ट SMS एपका रूपमा %1$s सेट गर्ने हो?" "यो एपलाई क्यामेरा, कन्ट्याक्ट, फाइल तथा मिडिया, माइक्रोफोन, फोन र SMS हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ" - "टेक्स्ट म्यासेज, टेक्स्ट म्यासेज पठाउने, सन्देशहरू, सन्देश प्रवाह" + "टेक्स्ट म्यासेज, टेक्स्ट म्यासेज पठाउने, म्यासेजहरू, सन्देश प्रवाह" "डिफल्ट आपत्‌कालीन एप" "आपत्‌कालीन एप" "तपाईंलाई आफ्नो स्वास्थ्यसम्बन्धी जानकारी रेकर्ड गर्न र आपत्‌कालीन अवस्थामा सहयोग गर्ने मान्छेहरूलाई उक्त जानकारीमाथि पहुँच प्रदान गर्न; कठोर मौसम तथा विपत्तिसम्बन्धी अलर्टहरू प्रदान गर्न; तपाईंलाई आवश्यकता पर्दा अरू मान्छेहरूलाई जानकारी दिन अनुमति दिने एपहरू" -- GitLab From 41feae63173072467315781958d446ab1e5c3bbf Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 20:58:12 -0700 Subject: [PATCH 141/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I9915784816b6128e87d27014432cfad2cd3ad1dd --- SafetyCenter/Resources/res/values-kn-v34/strings.xml | 2 +- SafetyCenter/Resources/res/values-nl-v34/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SafetyCenter/Resources/res/values-kn-v34/strings.xml b/SafetyCenter/Resources/res/values-kn-v34/strings.xml index 30648e26f3..19dcdad15f 100644 --- a/SafetyCenter/Resources/res/values-kn-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-kn-v34/strings.xml @@ -17,7 +17,7 @@ - "ಸಾಧನದ ಅನ್‌ಲಾಕ್" + "ಸಾಧನ ಅನ್‌ಲಾಕ್" "ಕೆಲಸದ ಕುರಿತ ಬಯೋಮೆಟ್ರಿಕ್ಸ್" "ಅನುಮತಿಗಳು, ಡ್ಯಾಶ್‌ಬೋರ್ಡ್, ಕಂಟ್ರೋಲ್‌ಗಳು" "Health Connect" diff --git a/SafetyCenter/Resources/res/values-nl-v34/strings.xml b/SafetyCenter/Resources/res/values-nl-v34/strings.xml index 88aea86317..e5a446c528 100644 --- a/SafetyCenter/Resources/res/values-nl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-nl-v34/strings.xml @@ -17,7 +17,7 @@ - "Apparaatontgrendeling" + "Apparaat­ontgrendeling" "Biometrische systemen voor het werk" "Rechten, dashboard, bedieningselementen" "Health Connect" -- GitLab From 02b9a3f0a548a96081ddb5bf0c0d10a441c96a6c Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 20:59:06 -0700 Subject: [PATCH 142/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I7a441b1d9ccc991f6f71e0d3e7d41205dca0b670 --- SafetyCenter/Resources/shared_res/values-as/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-ca/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-da/strings.xml | 2 +- .../Resources/shared_res/values-es-rUS/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-in/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-ja/strings.xml | 6 +++--- SafetyCenter/Resources/shared_res/values-kk/strings.xml | 4 ++-- SafetyCenter/Resources/shared_res/values-kn/strings.xml | 4 ++-- SafetyCenter/Resources/shared_res/values-lo/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-mk/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-my/strings.xml | 8 ++++---- .../Resources/shared_res/values-pt-rPT/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-uz/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-vi/strings.xml | 2 +- .../Resources/shared_res/values-zh-rCN/strings.xml | 2 +- .../Resources/shared_res/values-zh-rHK/strings.xml | 6 +++--- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/SafetyCenter/Resources/shared_res/values-as/strings.xml b/SafetyCenter/Resources/shared_res/values-as/strings.xml index 4bec87f292..473003f596 100644 --- a/SafetyCenter/Resources/shared_res/values-as/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-as/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "স্কেন কৰি থকা হৈছে" "ডিভাইচৰ ছেটিং পৰীক্ষা কৰি থকা হৈছে…" - "ভাল যেন লাগিছে" + "ঠিকেই লাগিছে" "কোনো সমস্যা পোৱা নগ’ল" "{count,plural, =1{চুপাৰিছ চাওক}one{চুপাৰিছসমূহ চাওক}other{চুপাৰিছসমূহ চাওক}}" "{count,plural, =1{কাৰ্যব্যৱস্থা লোৱা হৈছে}one{কাৰ্যব্যৱস্থা লোৱা হৈছে}other{কাৰ্যব্যৱস্থা লোৱা হৈছে}}" diff --git a/SafetyCenter/Resources/shared_res/values-ca/strings.xml b/SafetyCenter/Resources/shared_res/values-ca/strings.xml index d439aa0798..dbec15679b 100644 --- a/SafetyCenter/Resources/shared_res/values-ca/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ca/strings.xml @@ -24,7 +24,7 @@ "{count,plural, =1{Mostra la recomanació}many{Mostra les recomanacions}other{Mostra les recomanacions}}" "{count,plural, =1{S\'ha dut a terme una acció}many{S\'han dut a terme accions}other{S\'han dut a terme accions}}" "Revisa la configuració" - "Comprova la llista de configuració" + "Comprova la llista d\'opcions de configuració" "El dispositiu pot estar en perill" "El dispositiu està en perill" "Les dades poden estar en perill" diff --git a/SafetyCenter/Resources/shared_res/values-da/strings.xml b/SafetyCenter/Resources/shared_res/values-da/strings.xml index cb180f8dd3..bce5898fa5 100644 --- a/SafetyCenter/Resources/shared_res/values-da/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-da/strings.xml @@ -36,7 +36,7 @@ "Der blev fundet potentielle risici" "Der blev fundet risici" "Kontoen kan være sårbar" - "Sårbar konto" + "Kontoen er sårbar" "{count,plural, =1{Se underretning}one{Se underretning}other{Se underretninger}}" "Siden kunne ikke åbnes" "Underretningen kunne ikke behandles" diff --git a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml index 31b4c7c3aa..787838a20d 100644 --- a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml @@ -23,7 +23,7 @@ "No se encontraron problemas" "{count,plural, =1{Ver recomendación}many{Ver recomendaciones}other{Ver recomendaciones}}" "{count,plural, =1{Se tomó una medida}many{Se tomaron medidas}other{Se tomaron medidas}}" - "Revisar la configuración" + "Revisa la configuración" "Verifica la lista de configuración" "El dispositivo podría estar en riesgo" "El dispositivo está en riesgo" diff --git a/SafetyCenter/Resources/shared_res/values-in/strings.xml b/SafetyCenter/Resources/shared_res/values-in/strings.xml index afb4866e60..cd584dbabe 100644 --- a/SafetyCenter/Resources/shared_res/values-in/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-in/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Memindai" "Memeriksa setelan perangkat…" - "Semua beres" + "Sepertinya semua aman" "Tidak ditemukan masalah" "{count,plural, =1{Lihat rekomendasi}other{Lihat rekomendasi}}" "{count,plural, =1{Tindakan yang dilakukan}other{Tindakan yang dilakukan}}" diff --git a/SafetyCenter/Resources/shared_res/values-ja/strings.xml b/SafetyCenter/Resources/shared_res/values-ja/strings.xml index 7c0d1a6560..aa760e5d76 100644 --- a/SafetyCenter/Resources/shared_res/values-ja/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ja/strings.xml @@ -25,8 +25,8 @@ "{count,plural, =1{対処しました}other{対処しました}}" "設定の確認" "設定リストをご確認ください" - "デバイスが危険な可能性があります" - "デバイスが危険です" + "デバイスが危険にさらされています" + "デバイスが危険な状態です" "データが危険な可能性があります" "データが危険です" "古いパスワードの不正使用" @@ -35,7 +35,7 @@ "危険にさらされています" "潜在的なリスクが検出されました" "リスクが検出されました" - "アカウントが危険な可能性があります" + "アカウントが危険にさらされています" "アカウントが危険です" "{count,plural, =1{アラートを確認する}other{アラートを確認する}}" "ページを開けませんでした" diff --git a/SafetyCenter/Resources/shared_res/values-kk/strings.xml b/SafetyCenter/Resources/shared_res/values-kk/strings.xml index b1b2dcc118..5ea3fa3e1d 100644 --- a/SafetyCenter/Resources/shared_res/values-kk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kk/strings.xml @@ -23,8 +23,8 @@ "Ешқандай мәселе табылмады." "{count,plural, =1{Ұсынысты көру}other{Ұсыныстарды көру}}" "{count,plural, =1{Әрекет жасалды.}other{Әрекеттер жасалды.}}" - "Параметрлерді тексеріңіз" - "Параметрлер тізімін тексеру" + "Параметрлерді тексерy" + "Параметрлер тізімін тексеріңіз." "Құрылғыға қауіп төнген болуы мүмкін" "Құрылғыға қауіп төніп тұр" "Деректерге қауіп төнген сияқты" diff --git a/SafetyCenter/Resources/shared_res/values-kn/strings.xml b/SafetyCenter/Resources/shared_res/values-kn/strings.xml index 89405e9d90..9c3cb9dca7 100644 --- a/SafetyCenter/Resources/shared_res/values-kn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kn/strings.xml @@ -35,8 +35,8 @@ "ನೀವು ಅಪಾಯದಲ್ಲಿದ್ದೀರಿ" "ಸಂಭವನೀಯ ಅಪಾಯಗಳು ಕಂಡುಬಂದಿವೆ" "ಅಪಾಯಗಳು ಕಂಡುಬಂದಿವೆ" - "ಖಾತೆಯು ಅಪಾಯಕ್ಕೀಡಾಗಬಹುದು" - "ಖಾತೆಯು ಅಪಾಯಕ್ಕೀಡಾಗಬಹುದು" + "ಖಾತೆಯು ಅಪಾಯದಲ್ಲಿರಬಹುದು" + "ಖಾತೆಯು ಅಪಾಯದಲ್ಲಿದೆ" "{count,plural, =1{ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}" "ಪುಟವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ಅಲರ್ಟ್ ಅನ್ನು ಬಗೆಹರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" diff --git a/SafetyCenter/Resources/shared_res/values-lo/strings.xml b/SafetyCenter/Resources/shared_res/values-lo/strings.xml index 3199452ac4..7244118793 100644 --- a/SafetyCenter/Resources/shared_res/values-lo/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-lo/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "ການສະແກນ" "ກໍາລັງກວດການຕັ້ງຄ່າອຸປະກອນ…" - "ເບິ່ງໃຊ້ໄດ້" + "ດີແລ້ວ" "ບໍ່ພົບບັນຫາ" "{count,plural, =1{ເບິ່ງຄຳແນະນຳ}other{ເບິ່ງຄຳແນະນຳ}}" "{count,plural, =1{ດຳເນີນການແລ້ວ}other{ດຳເນີນການແລ້ວ}}" diff --git a/SafetyCenter/Resources/shared_res/values-mk/strings.xml b/SafetyCenter/Resources/shared_res/values-mk/strings.xml index adeaf46162..2ba7a19761 100644 --- a/SafetyCenter/Resources/shared_res/values-mk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-mk/strings.xml @@ -35,7 +35,7 @@ "Под ризик сте" "Најдени се потенцијални ризици" "Најдени се ризици" - "Сметката можеби е под ризик" + "Сметката можеби е изложена на ризик" "Сметката е изложена на ризик" "{count,plural, =1{Видете го предупредувањето}one{Видете ги предупредувањата}other{Видете ги предупредувањата}}" "Не можеше да се отвори страницата" diff --git a/SafetyCenter/Resources/shared_res/values-my/strings.xml b/SafetyCenter/Resources/shared_res/values-my/strings.xml index 95b6d0d660..af7f71a34d 100644 --- a/SafetyCenter/Resources/shared_res/values-my/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-my/strings.xml @@ -25,8 +25,8 @@ "{count,plural, =1{လုပ်ဆောင်မှု ရှိသည်}other{လုပ်ဆောင်မှုများ ရှိသည်}}" "ဆက်တင်များကို စိစစ်ပါ" "ဆက်တင်များစာရင်းကို စစ်ဆေးပါ" - "စက်တွင် အန္တရာယ်ရှိနိုင်သည်" - "စက်တွင် အန္တရာယ်ရှိနေသည်" + "စက်အတွက် အန္တရာယ်ရှိနိုင်သည်" + "စက်အတွက် အန္တရာယ်ရှိနေသည်" "သင့်ဒေတာတွင် အန္တရာယ်ရှိနိုင်သည်" "သင့်ဒေတာတွင် အန္တရာယ်ရှိသည်" "စကားဝှက် ကျိုးပေါက်နေသည် (အဟောင်း)" @@ -35,8 +35,8 @@ "သင့်တွင် အန္တရာယ်ရှိနေသည်" "အန္တရာယ်ဖြစ်နိုင်ခြေ တွေ့သည်" "အန္တရာယ် တွေ့ထားသည်" - "အကောင့်တွင် အန္တရာယ်ရှိနိုင်သည်" - "အကောင့်တွင် အန္တရာယ်ရှိသည်" + "အကောင့်အတွက် အန္တရာယ်ရှိနိုင်သည်" + "အကောင့်အတွက် အန္တရာယ်ရှိသည်" "{count,plural, =1{သတိပေးချက် ကြည့်ရန်}other{သတိပေးချက်များ ကြည့်ရန်}}" "စာမျက်နှာကို ဖွင့်၍မရပါ" "သတိပေးချက်ကို ဖြေရှင်း၍မရပါ" diff --git a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml index 6f04860d49..592e1b60ae 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml @@ -23,7 +23,7 @@ "Nenhum problema encontrado" "{count,plural, =1{Veja a recomendação}many{Veja as recomendações}other{Veja as recomendações}}" "{count,plural, =1{Medida tomada}many{Medidas tomadas}other{Medidas tomadas}}" - "Reveja as definições" + "Rever definições" "Verifique a lista de definições" "O dispositivo pode estar em risco" "O dispositivo está em risco" diff --git a/SafetyCenter/Resources/shared_res/values-uz/strings.xml b/SafetyCenter/Resources/shared_res/values-uz/strings.xml index d8b6ae3212..5965fb7609 100644 --- a/SafetyCenter/Resources/shared_res/values-uz/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-uz/strings.xml @@ -35,7 +35,7 @@ "Xavf ostidasiz" "Potentsial xavflar topildi" "Xavflar topildi" - "Hisob xavf ostida shekilli" + "Hisob xavf ostida boʻlishi mumkin" "Hisob xavf ostida" "{count,plural, =1{Ogohlantirish}other{Ogohlantirishlar}}" "Sahifa ochilmadi" diff --git a/SafetyCenter/Resources/shared_res/values-vi/strings.xml b/SafetyCenter/Resources/shared_res/values-vi/strings.xml index 058775398f..b697186e0c 100644 --- a/SafetyCenter/Resources/shared_res/values-vi/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-vi/strings.xml @@ -37,7 +37,7 @@ "Đã phát hiện rủi ro" "Tài khoản có thể gặp rủi ro" "Tài khoản đang gặp rủi ro" - "{count,plural, =1{Xem cảnh báo}other{Xem các cảnh báo}}" + "{count,plural, =1{Xem cảnh báo}other{Xem cảnh báo}}" "Không thể mở trang" "Không thể giải quyết vấn đề cảnh báo" "Không thể làm mới cài đặt" diff --git a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml index 9c3bfffd80..1ed1355cff 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml @@ -21,7 +21,7 @@ "正在检查设备设置…" "没问题" "未发现任何问题" - "{count,plural, =1{查看推荐内容}other{查看推荐内容}}" + "{count,plural, =1{查看建议}other{查看建议}}" "{count,plural, =1{已采取措施}other{已采取措施}}" "检查设置" "请检查设置列表" diff --git a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml index dd9e809ef2..0222a0acc2 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml @@ -25,7 +25,7 @@ "{count,plural, =1{已採取行動}other{已採取行動}}" "檢查設定" "查看設定清單" - "裝置可能面臨風險" + "裝置可能存在風險" "裝置存在風險" "你的資料可能面臨風險" "你的資料正面臨風險" @@ -35,8 +35,8 @@ "你正面臨風險" "系統發現潛在風險" "系統發現風險" - "帳戶可能面臨風險" - "帳戶正面臨風險" + "帳戶可能存在風險" + "帳戶存在風險" "{count,plural, =1{查看警示}other{查看警示}}" "無法開啟頁面" "無法解除警示" -- GitLab From ee526760469d92aecb8b91cf05087c8e892cad2e Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 21:12:18 -0700 Subject: [PATCH 143/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I025d16ffa7e5b73bb1bf7e5473fceab58b8b4768 --- PermissionController/res/values-cs/strings.xml | 2 +- PermissionController/res/values-es/strings.xml | 2 +- PermissionController/res/values-hi/strings.xml | 2 +- PermissionController/res/values-hu/strings.xml | 2 +- PermissionController/res/values-ky/strings.xml | 2 +- PermissionController/res/values-my/strings.xml | 2 +- PermissionController/res/values-ne/strings.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index dd8a7c5651..38faa75819 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -431,7 +431,7 @@ "Žádné aplikace" "Vybráno" "Vybráno – %1$s" - "přístup ke speciálním aplikacím" + "zvláštní přístup aplikací" "Přístupy pro aplikace" "Žádný přístup ke spec. aplik." "Žádné aplikace" diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index 711bb28dab..34ee46f9ba 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -347,7 +347,7 @@ "%s aplicaciones de accesibilidad tienen acceso completo a tu dispositivo" "%s puede ver tu pantalla, lo que haces y lo que introduces; realizar acciones; y controlar la pantalla." "Estas aplicaciones pueden ver tu pantalla, lo que haces y lo que introduces; realizar acciones; y controlar la pantalla." - "Asistente digital predeterminado" + "Asistente predeterminado" "Asistente digital" "Las aplicaciones de asistencia te ayudan según la información que aparezca en la pantalla. Algunas aplicaciones admiten tanto el menú de aplicaciones como los servicios de entrada de voz para ofrecerte asistencia integrada." "Aplicación de navegador predeterminada" diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index 4d361e7d93..4a083e0cd1 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -465,7 +465,7 @@ "क्या आपको <b>%1$s</b> को आस-पास मौजूद डिवाइसों को खोजने, उनसे कनेक्ट करने, और उनकी जगह की जानकारी का पता लगाने की अनुमति देनी है?" "क्या आप <b>%1$s</b> को आस-पास मौजूद डिवाइसों को खोजने, उनसे कनेक्ट करने, और उनकी जगह की जानकारी का पता लगाने की अनुमति देना चाहते हैं? ""सेटिंग में जाकर अनुमति दें." "क्या <b>%1$s</b> आपकी जगह की अनुमानित जानकारी के बजाय सटीक जानकारी ऐक्सेस करे?" - "क्या आप <b>%1$s</b> को इस डिवाइस की जगह की अनुमानित जानकारी ऐक्सेस करने की अनुमति देना चाहते हैं?" + "क्या आपको <b>%1$s</b> को इस डिवाइस की जगह की अनुमानित जानकारी ऐक्सेस करने की अनुमति देनी है?" "सटीक जगह" "अनुमानित जगह" "<b>%1$s</b> को अपना कैलेंडर ऐक्सेस करने की अनुमति देना है?" diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index ec83c59227..12ad687a6c 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -521,7 +521,7 @@ "Segélyhívó szám hívásakor a rendszer továbbra is megoszthatja a mikrofonadatokat." "Módosítás" "Biztonság és adatvédelem" - "Keresés az eszközön" + "Eszközvizsgálat" "Elvetés" "Elveti ezt az értesítést?" "Bármikor áttekintheti biztonsági és adatvédelmi beállításait, és növelheti a védelmet" diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index 58d8dd124c..e8816f7fd9 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -610,7 +610,7 @@ "Турган жериңизди билдирүү ыкмасын жаңыртуу" "Жүргөн жериңизди көрсөткөн ыкманы өзгөрткөн колдонмолорду карап чыксаңыз болот" "Бул колдонмолор жүргөн жериңиз тууралуу маалыматты бөлүшүү ыкмасын өзгөрттү. Алар бул маалыматты мурда бөлүшпөй же азыр жарнамалоо же маркетинг максаттарында бөлүшүшү мүмкүн." - "Бул колдонмолорду иштеп чыгуучулар дайын-даректерди бөлүшүү тууралуу маалыматты колдонмолор дүкөнүнө беришти. Алар бул маалыматты жаңыртып турушу мүмкүн.\n\nМаалыматтарды бөлүшүү ыкмасы колдонмонун версиясына, колдонулушуна, регионго жана курагыңызга жараша айырмаланышы мүмкүн." + "Бул колдонмолорду иштеп чыгуучулар нерселерди бөлүшүү тууралуу маалыматты колдонмолор дүкөнүнө беришти. Алар бул маалыматты жаңыртып турушу мүмкүн.\n\nМаалыматтарды бөлүшүү ыкмасы колдонмонун версиясына, колдонулушуна, регионго жана курагыңызга жараша айырмаланышы мүмкүн." "Маалыматтарды бөлүшүү жөнүндө кеңири маалымат" "Жүргөн жериңиз тууралуу маалымат үчүнчү тараптар менен бөлүшүлүп жатат" "Жүргөн жериңизди үчүнчү тараптар жарнамалоо же маркетинг максатында билип турушат" diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index 83c077bd51..53e563fd7d 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -608,7 +608,7 @@ "တည်နေရာဒေတာကို မျှဝေနိုင်သည်" "ဤအက်ပ်က ၎င်းသည် သင်၏ တည်နေရာဒေတာကို ပြင်ပကုမ္ပဏီများနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်" "တည်နေရာအတွက် ဒေတာမျှဝေခြင်း အပ်ဒိတ်" - "သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သောနည်းလမ်းအား ပြောင်းထားသော အက်ပ်များကို စိစစ်ပါ" + "သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သောနည်းလမ်းအား ပြောင်းထားသော အက်ပ်များကို စိစစ်သည်" "ဤအက်ပ်များသည် ၎င်းတို့က သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သော နည်းလမ်းကို ပြောင်းလိုက်ပါပြီ။ ၎င်းတို့သည် ဒေတာကို ယခင်က မျှဝေထားခြင်း မရှိနိုင်ပါ သို့မဟုတ် ကြော်ငြာခြင်း (သို့) အရောင်းမြှင့်တင်ခြင်းတို့အတွက် ဒေတာကို ယခုမျှဝေနိုင်သည်။" "ဤအက်ပ်များ၏ ဆော့ဖ်ဝဲရေးသူများသည် ၎င်းတို့၏ ဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများအကြောင်း အချက်အလက်ကို အက်ပ်စတိုးသို့ ပေးထားသည်။ သူတို့သည် ၎င်းကို အချိန်နှင့်အမျှ အပ်ဒိတ်လုပ်နိုင်သည်။\n\nဒေတာမျှဝေခြင်း လုပ်ထုံးလုပ်နည်းများသည် သင်၏ အက်ပ်ဗားရှင်း၊ အသုံးပြုမှု၊ ဒေသနှင့် အသက်အရွယ်ပေါ် အခြေခံ၍ ကွဲပြားနိုင်သည်။" "ဒေတာမျှဝေခြင်းအကြောင်း လေ့လာရန်" diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index 2f43897441..c90c1fddef 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -366,7 +366,7 @@ "तपाईंलाई छोटा टेक्स्ट म्यासेज, फोटो, भिडियो र थप कुरा पठाउन र प्राप्त गर्न आफ्नो फोन नम्बर प्रयोग गर्न दिने एपहरू" "आफ्नो डिफल्ट SMS एपका रूपमा %1$s सेट गर्ने हो?" "यो एपलाई क्यामेरा, कन्ट्याक्ट, फाइल तथा मिडिया, माइक्रोफोन, फोन र SMS हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ" - "टेक्स्ट म्यासेज, टेक्स्ट म्यासेज पठाउने, सन्देशहरू, सन्देश प्रवाह" + "टेक्स्ट म्यासेज, टेक्स्ट म्यासेज पठाउने, म्यासेजहरू, सन्देश प्रवाह" "डिफल्ट आपत्‌कालीन एप" "आपत्‌कालीन एप" "तपाईंलाई आफ्नो स्वास्थ्यसम्बन्धी जानकारी रेकर्ड गर्न र आपत्‌कालीन अवस्थामा सहयोग गर्ने मान्छेहरूलाई उक्त जानकारीमाथि पहुँच प्रदान गर्न; कठोर मौसम तथा विपत्तिसम्बन्धी अलर्टहरू प्रदान गर्न; तपाईंलाई आवश्यकता पर्दा अरू मान्छेहरूलाई जानकारी दिन अनुमति दिने एपहरू" -- GitLab From 2c54d7f9387aac9da2cbff9cfb71e576e39779bb Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 21:14:03 -0700 Subject: [PATCH 144/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I46f80f2dc4cb5ffc2a698374884475220121afe9 --- SafetyCenter/Resources/res/values-kn-v34/strings.xml | 2 +- SafetyCenter/Resources/res/values-nl-v34/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SafetyCenter/Resources/res/values-kn-v34/strings.xml b/SafetyCenter/Resources/res/values-kn-v34/strings.xml index 30648e26f3..19dcdad15f 100644 --- a/SafetyCenter/Resources/res/values-kn-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-kn-v34/strings.xml @@ -17,7 +17,7 @@ - "ಸಾಧನದ ಅನ್‌ಲಾಕ್" + "ಸಾಧನ ಅನ್‌ಲಾಕ್" "ಕೆಲಸದ ಕುರಿತ ಬಯೋಮೆಟ್ರಿಕ್ಸ್" "ಅನುಮತಿಗಳು, ಡ್ಯಾಶ್‌ಬೋರ್ಡ್, ಕಂಟ್ರೋಲ್‌ಗಳು" "Health Connect" diff --git a/SafetyCenter/Resources/res/values-nl-v34/strings.xml b/SafetyCenter/Resources/res/values-nl-v34/strings.xml index 88aea86317..e5a446c528 100644 --- a/SafetyCenter/Resources/res/values-nl-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-nl-v34/strings.xml @@ -17,7 +17,7 @@ - "Apparaatontgrendeling" + "Apparaat­ontgrendeling" "Biometrische systemen voor het werk" "Rechten, dashboard, bedieningselementen" "Health Connect" -- GitLab From f8d2c31d32f806d71aec42dc9717bdea16a3e71d Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 12 Jun 2023 21:14:58 -0700 Subject: [PATCH 145/577] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I02fed9b48e33dad00268d753b2315be8c824c5c1 --- SafetyCenter/Resources/shared_res/values-as/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-ca/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-da/strings.xml | 2 +- .../Resources/shared_res/values-es-rUS/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-in/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-ja/strings.xml | 6 +++--- SafetyCenter/Resources/shared_res/values-kk/strings.xml | 4 ++-- SafetyCenter/Resources/shared_res/values-kn/strings.xml | 4 ++-- SafetyCenter/Resources/shared_res/values-lo/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-mk/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-my/strings.xml | 8 ++++---- .../Resources/shared_res/values-pt-rPT/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-uz/strings.xml | 2 +- SafetyCenter/Resources/shared_res/values-vi/strings.xml | 2 +- .../Resources/shared_res/values-zh-rCN/strings.xml | 2 +- .../Resources/shared_res/values-zh-rHK/strings.xml | 6 +++--- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/SafetyCenter/Resources/shared_res/values-as/strings.xml b/SafetyCenter/Resources/shared_res/values-as/strings.xml index 4bec87f292..473003f596 100644 --- a/SafetyCenter/Resources/shared_res/values-as/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-as/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "স্কেন কৰি থকা হৈছে" "ডিভাইচৰ ছেটিং পৰীক্ষা কৰি থকা হৈছে…" - "ভাল যেন লাগিছে" + "ঠিকেই লাগিছে" "কোনো সমস্যা পোৱা নগ’ল" "{count,plural, =1{চুপাৰিছ চাওক}one{চুপাৰিছসমূহ চাওক}other{চুপাৰিছসমূহ চাওক}}" "{count,plural, =1{কাৰ্যব্যৱস্থা লোৱা হৈছে}one{কাৰ্যব্যৱস্থা লোৱা হৈছে}other{কাৰ্যব্যৱস্থা লোৱা হৈছে}}" diff --git a/SafetyCenter/Resources/shared_res/values-ca/strings.xml b/SafetyCenter/Resources/shared_res/values-ca/strings.xml index d439aa0798..dbec15679b 100644 --- a/SafetyCenter/Resources/shared_res/values-ca/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ca/strings.xml @@ -24,7 +24,7 @@ "{count,plural, =1{Mostra la recomanació}many{Mostra les recomanacions}other{Mostra les recomanacions}}" "{count,plural, =1{S\'ha dut a terme una acció}many{S\'han dut a terme accions}other{S\'han dut a terme accions}}" "Revisa la configuració" - "Comprova la llista de configuració" + "Comprova la llista d\'opcions de configuració" "El dispositiu pot estar en perill" "El dispositiu està en perill" "Les dades poden estar en perill" diff --git a/SafetyCenter/Resources/shared_res/values-da/strings.xml b/SafetyCenter/Resources/shared_res/values-da/strings.xml index cb180f8dd3..bce5898fa5 100644 --- a/SafetyCenter/Resources/shared_res/values-da/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-da/strings.xml @@ -36,7 +36,7 @@ "Der blev fundet potentielle risici" "Der blev fundet risici" "Kontoen kan være sårbar" - "Sårbar konto" + "Kontoen er sårbar" "{count,plural, =1{Se underretning}one{Se underretning}other{Se underretninger}}" "Siden kunne ikke åbnes" "Underretningen kunne ikke behandles" diff --git a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml index 31b4c7c3aa..787838a20d 100644 --- a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml @@ -23,7 +23,7 @@ "No se encontraron problemas" "{count,plural, =1{Ver recomendación}many{Ver recomendaciones}other{Ver recomendaciones}}" "{count,plural, =1{Se tomó una medida}many{Se tomaron medidas}other{Se tomaron medidas}}" - "Revisar la configuración" + "Revisa la configuración" "Verifica la lista de configuración" "El dispositivo podría estar en riesgo" "El dispositivo está en riesgo" diff --git a/SafetyCenter/Resources/shared_res/values-in/strings.xml b/SafetyCenter/Resources/shared_res/values-in/strings.xml index afb4866e60..cd584dbabe 100644 --- a/SafetyCenter/Resources/shared_res/values-in/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-in/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Memindai" "Memeriksa setelan perangkat…" - "Semua beres" + "Sepertinya semua aman" "Tidak ditemukan masalah" "{count,plural, =1{Lihat rekomendasi}other{Lihat rekomendasi}}" "{count,plural, =1{Tindakan yang dilakukan}other{Tindakan yang dilakukan}}" diff --git a/SafetyCenter/Resources/shared_res/values-ja/strings.xml b/SafetyCenter/Resources/shared_res/values-ja/strings.xml index 7c0d1a6560..aa760e5d76 100644 --- a/SafetyCenter/Resources/shared_res/values-ja/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ja/strings.xml @@ -25,8 +25,8 @@ "{count,plural, =1{対処しました}other{対処しました}}" "設定の確認" "設定リストをご確認ください" - "デバイスが危険な可能性があります" - "デバイスが危険です" + "デバイスが危険にさらされています" + "デバイスが危険な状態です" "データが危険な可能性があります" "データが危険です" "古いパスワードの不正使用" @@ -35,7 +35,7 @@ "危険にさらされています" "潜在的なリスクが検出されました" "リスクが検出されました" - "アカウントが危険な可能性があります" + "アカウントが危険にさらされています" "アカウントが危険です" "{count,plural, =1{アラートを確認する}other{アラートを確認する}}" "ページを開けませんでした" diff --git a/SafetyCenter/Resources/shared_res/values-kk/strings.xml b/SafetyCenter/Resources/shared_res/values-kk/strings.xml index b1b2dcc118..5ea3fa3e1d 100644 --- a/SafetyCenter/Resources/shared_res/values-kk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kk/strings.xml @@ -23,8 +23,8 @@ "Ешқандай мәселе табылмады." "{count,plural, =1{Ұсынысты көру}other{Ұсыныстарды көру}}" "{count,plural, =1{Әрекет жасалды.}other{Әрекеттер жасалды.}}" - "Параметрлерді тексеріңіз" - "Параметрлер тізімін тексеру" + "Параметрлерді тексерy" + "Параметрлер тізімін тексеріңіз." "Құрылғыға қауіп төнген болуы мүмкін" "Құрылғыға қауіп төніп тұр" "Деректерге қауіп төнген сияқты" diff --git a/SafetyCenter/Resources/shared_res/values-kn/strings.xml b/SafetyCenter/Resources/shared_res/values-kn/strings.xml index 89405e9d90..9c3cb9dca7 100644 --- a/SafetyCenter/Resources/shared_res/values-kn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kn/strings.xml @@ -35,8 +35,8 @@ "ನೀವು ಅಪಾಯದಲ್ಲಿದ್ದೀರಿ" "ಸಂಭವನೀಯ ಅಪಾಯಗಳು ಕಂಡುಬಂದಿವೆ" "ಅಪಾಯಗಳು ಕಂಡುಬಂದಿವೆ" - "ಖಾತೆಯು ಅಪಾಯಕ್ಕೀಡಾಗಬಹುದು" - "ಖಾತೆಯು ಅಪಾಯಕ್ಕೀಡಾಗಬಹುದು" + "ಖಾತೆಯು ಅಪಾಯದಲ್ಲಿರಬಹುದು" + "ಖಾತೆಯು ಅಪಾಯದಲ್ಲಿದೆ" "{count,plural, =1{ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}" "ಪುಟವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ಅಲರ್ಟ್ ಅನ್ನು ಬಗೆಹರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" diff --git a/SafetyCenter/Resources/shared_res/values-lo/strings.xml b/SafetyCenter/Resources/shared_res/values-lo/strings.xml index 3199452ac4..7244118793 100644 --- a/SafetyCenter/Resources/shared_res/values-lo/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-lo/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "ການສະແກນ" "ກໍາລັງກວດການຕັ້ງຄ່າອຸປະກອນ…" - "ເບິ່ງໃຊ້ໄດ້" + "ດີແລ້ວ" "ບໍ່ພົບບັນຫາ" "{count,plural, =1{ເບິ່ງຄຳແນະນຳ}other{ເບິ່ງຄຳແນະນຳ}}" "{count,plural, =1{ດຳເນີນການແລ້ວ}other{ດຳເນີນການແລ້ວ}}" diff --git a/SafetyCenter/Resources/shared_res/values-mk/strings.xml b/SafetyCenter/Resources/shared_res/values-mk/strings.xml index adeaf46162..2ba7a19761 100644 --- a/SafetyCenter/Resources/shared_res/values-mk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-mk/strings.xml @@ -35,7 +35,7 @@ "Под ризик сте" "Најдени се потенцијални ризици" "Најдени се ризици" - "Сметката можеби е под ризик" + "Сметката можеби е изложена на ризик" "Сметката е изложена на ризик" "{count,plural, =1{Видете го предупредувањето}one{Видете ги предупредувањата}other{Видете ги предупредувањата}}" "Не можеше да се отвори страницата" diff --git a/SafetyCenter/Resources/shared_res/values-my/strings.xml b/SafetyCenter/Resources/shared_res/values-my/strings.xml index 95b6d0d660..af7f71a34d 100644 --- a/SafetyCenter/Resources/shared_res/values-my/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-my/strings.xml @@ -25,8 +25,8 @@ "{count,plural, =1{လုပ်ဆောင်မှု ရှိသည်}other{လုပ်ဆောင်မှုများ ရှိသည်}}" "ဆက်တင်များကို စိစစ်ပါ" "ဆက်တင်များစာရင်းကို စစ်ဆေးပါ" - "စက်တွင် အန္တရာယ်ရှိနိုင်သည်" - "စက်တွင် အန္တရာယ်ရှိနေသည်" + "စက်အတွက် အန္တရာယ်ရှိနိုင်သည်" + "စက်အတွက် အန္တရာယ်ရှိနေသည်" "သင့်ဒေတာတွင် အန္တရာယ်ရှိနိုင်သည်" "သင့်ဒေတာတွင် အန္တရာယ်ရှိသည်" "စကားဝှက် ကျိုးပေါက်နေသည် (အဟောင်း)" @@ -35,8 +35,8 @@ "သင့်တွင် အန္တရာယ်ရှိနေသည်" "အန္တရာယ်ဖြစ်နိုင်ခြေ တွေ့သည်" "အန္တရာယ် တွေ့ထားသည်" - "အကောင့်တွင် အန္တရာယ်ရှိနိုင်သည်" - "အကောင့်တွင် အန္တရာယ်ရှိသည်" + "အကောင့်အတွက် အန္တရာယ်ရှိနိုင်သည်" + "အကောင့်အတွက် အန္တရာယ်ရှိသည်" "{count,plural, =1{သတိပေးချက် ကြည့်ရန်}other{သတိပေးချက်များ ကြည့်ရန်}}" "စာမျက်နှာကို ဖွင့်၍မရပါ" "သတိပေးချက်ကို ဖြေရှင်း၍မရပါ" diff --git a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml index 6f04860d49..592e1b60ae 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml @@ -23,7 +23,7 @@ "Nenhum problema encontrado" "{count,plural, =1{Veja a recomendação}many{Veja as recomendações}other{Veja as recomendações}}" "{count,plural, =1{Medida tomada}many{Medidas tomadas}other{Medidas tomadas}}" - "Reveja as definições" + "Rever definições" "Verifique a lista de definições" "O dispositivo pode estar em risco" "O dispositivo está em risco" diff --git a/SafetyCenter/Resources/shared_res/values-uz/strings.xml b/SafetyCenter/Resources/shared_res/values-uz/strings.xml index d8b6ae3212..5965fb7609 100644 --- a/SafetyCenter/Resources/shared_res/values-uz/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-uz/strings.xml @@ -35,7 +35,7 @@ "Xavf ostidasiz" "Potentsial xavflar topildi" "Xavflar topildi" - "Hisob xavf ostida shekilli" + "Hisob xavf ostida boʻlishi mumkin" "Hisob xavf ostida" "{count,plural, =1{Ogohlantirish}other{Ogohlantirishlar}}" "Sahifa ochilmadi" diff --git a/SafetyCenter/Resources/shared_res/values-vi/strings.xml b/SafetyCenter/Resources/shared_res/values-vi/strings.xml index 058775398f..b697186e0c 100644 --- a/SafetyCenter/Resources/shared_res/values-vi/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-vi/strings.xml @@ -37,7 +37,7 @@ "Đã phát hiện rủi ro" "Tài khoản có thể gặp rủi ro" "Tài khoản đang gặp rủi ro" - "{count,plural, =1{Xem cảnh báo}other{Xem các cảnh báo}}" + "{count,plural, =1{Xem cảnh báo}other{Xem cảnh báo}}" "Không thể mở trang" "Không thể giải quyết vấn đề cảnh báo" "Không thể làm mới cài đặt" diff --git a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml index 9c3bfffd80..1ed1355cff 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml @@ -21,7 +21,7 @@ "正在检查设备设置…" "没问题" "未发现任何问题" - "{count,plural, =1{查看推荐内容}other{查看推荐内容}}" + "{count,plural, =1{查看建议}other{查看建议}}" "{count,plural, =1{已采取措施}other{已采取措施}}" "检查设置" "请检查设置列表" diff --git a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml index dd9e809ef2..0222a0acc2 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml @@ -25,7 +25,7 @@ "{count,plural, =1{已採取行動}other{已採取行動}}" "檢查設定" "查看設定清單" - "裝置可能面臨風險" + "裝置可能存在風險" "裝置存在風險" "你的資料可能面臨風險" "你的資料正面臨風險" @@ -35,8 +35,8 @@ "你正面臨風險" "系統發現潛在風險" "系統發現風險" - "帳戶可能面臨風險" - "帳戶正面臨風險" + "帳戶可能存在風險" + "帳戶存在風險" "{count,plural, =1{查看警示}other{查看警示}}" "無法開啟頁面" "無法解除警示" -- GitLab From e647f2e32eed00d27ffee869b3cddb1c5ebfe6c5 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Fri, 9 Jun 2023 12:28:54 +0000 Subject: [PATCH 146/577] Rename SafetyCenterResourcesContext to SafetyCenterResourcesApk. It's not really a Context anymore. Bug: 283100177 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: Iab9d28440f10c02a5e1a90fd0fbb95c53ab6b383 --- .../permission/utils/KotlinUtils.kt | 808 +++++++++++------- .../NotificationListenerPregrants.kt | 42 +- .../SafetyCenterSearchIndexablesProvider.kt | 28 +- .../ui/SafetyCenterDashboardFragment.java | 8 +- .../safetycenter/ui/SafetyCenterFragment.kt | 4 +- .../ui/SafetyCenterSubpageFragment.kt | 7 +- ...ext.java => SafetyCenterResourcesApk.java} | 38 +- .../resources/SafetyCenterResourcesApkTest.kt | 440 ++++++++++ .../SafetyCenterResourcesContextTest.kt | 442 ---------- .../safetycenter/DevicePolicyResources.java | 17 +- .../safetycenter/PendingIntentFactory.java | 11 +- .../SafetyCenterConfigReader.java | 14 +- .../safetycenter/SafetyCenterDataFactory.java | 72 +- .../safetycenter/SafetyCenterFlags.java | 15 +- .../safetycenter/SafetyCenterService.java | 32 +- .../SafetyCenterNotificationChannels.java | 11 +- .../SafetyCenterNotificationFactory.java | 15 +- .../SafetyCenterNotificationSender.java | 6 +- .../cts/SafetyCenterManagerTest.kt | 12 +- .../safetycenter/cts/config/XmlConfigTest.kt | 8 +- .../multiusers/SafetyCenterMultiUsersTest.kt | 26 +- .../functional/SafetyCenterManagerTest.kt | 66 +- .../ui/SafetyCenterStatusCardTest.kt | 44 +- .../functional/ui/SafetyCenterSubpagesTest.kt | 8 +- .../testing/SafetyCenterTestData.kt | 26 +- 25 files changed, 1168 insertions(+), 1032 deletions(-) rename SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/{SafetyCenterResourcesContext.java => SafetyCenterResourcesApk.java} (91%) create mode 100644 SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesApkTest.kt delete mode 100644 SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt index f9345ef58f..49a35cadf6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt @@ -86,7 +86,7 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPerm import com.android.permissioncontroller.permission.model.livedatatypes.PermState import com.android.permissioncontroller.permission.service.LocationAccessCheck import com.android.permissioncontroller.permission.ui.handheld.SettingsWithLargeHeader -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import java.time.Duration import java.util.concurrent.atomic.AtomicReference import kotlin.coroutines.Continuation @@ -106,13 +106,14 @@ object KotlinUtils { private const val LOG_TAG = "PermissionController Utils" - private const val PERMISSION_CONTROLLER_CHANGED_FLAG_MASK = FLAG_PERMISSION_USER_SET or - FLAG_PERMISSION_USER_FIXED or - FLAG_PERMISSION_ONE_TIME or - FLAG_PERMISSION_REVOKED_COMPAT or - FLAG_PERMISSION_ONE_TIME or - FLAG_PERMISSION_REVIEW_REQUIRED or - FLAG_PERMISSION_AUTO_REVOKED + private const val PERMISSION_CONTROLLER_CHANGED_FLAG_MASK = + FLAG_PERMISSION_USER_SET or + FLAG_PERMISSION_USER_FIXED or + FLAG_PERMISSION_ONE_TIME or + FLAG_PERMISSION_REVOKED_COMPAT or + FLAG_PERMISSION_ONE_TIME or + FLAG_PERMISSION_REVIEW_REQUIRED or + FLAG_PERMISSION_AUTO_REVOKED private const val KILL_REASON_APP_OP_CHANGE = "Permission related app op changed" private const val SAFETY_PROTECTION_RESOURCES_ENABLED = "safety_protection_enabled" @@ -131,10 +132,10 @@ object KotlinUtils { private val ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE = ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE - /** Whether to show the Permissions Hub. */ + /** Whether to show the Permissions Hub. */ private const val PROPERTY_PERMISSIONS_HUB_2_ENABLED = "permissions_hub_2_enabled" - /** Whether to show the mic and camera icons. */ + /** Whether to show the mic and camera icons. */ private const val PROPERTY_CAMERA_MIC_ICONS_ENABLED = "camera_mic_icons_enabled" /** Whether to show the location indicators. */ @@ -143,18 +144,18 @@ object KotlinUtils { /** Whether location accuracy feature is enabled */ private const val PROPERTY_LOCATION_ACCURACY_ENABLED = "location_accuracy_enabled" - /** Whether to show 7-day toggle in privacy hub. */ + /** Whether to show 7-day toggle in privacy hub. */ private const val PRIVACY_DASHBOARD_7_DAY_TOGGLE = "privacy_dashboard_7_day_toggle" /** Default location precision */ private const val PROPERTY_LOCATION_PRECISION = "location_precision" - /** Whether to show the photo picker option in permission prompts. */ + /** Whether to show the photo picker option in permission prompts. */ private const val PROPERTY_PHOTO_PICKER_PROMPT_ENABLED = "photo_picker_prompt_enabled" /** - * The minimum amount of time to wait, after scheduling the safety label changes job, before - * the job actually runs for the first time. + * The minimum amount of time to wait, after scheduling the safety label changes job, before the + * job actually runs for the first time. */ private const val PROPERTY_SAFETY_LABEL_CHANGES_JOB_DELAY_MILLIS = "safety_label_changes_job_delay_millis" @@ -178,8 +179,12 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun isPermissionsHub2FlagEnabled(): Boolean { - return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_PERMISSIONS_HUB_2_ENABLED, false) + return SdkLevel.isAtLeastS() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_PERMISSIONS_HUB_2_ENABLED, + false + ) } /** * Whether to show the Permissions Dashboard @@ -198,13 +203,17 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun isCameraMicIconsFlagEnabled(): Boolean { - return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_CAMERA_MIC_ICONS_ENABLED, true) + return SdkLevel.isAtLeastS() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_CAMERA_MIC_ICONS_ENABLED, + true + ) } /** - * Whether to show Camera and Mic Icons. They should be shown if the permission hub, or the icons - * specifically, are enabled. + * Whether to show Camera and Mic Icons. They should be shown if the permission hub, or the + * icons specifically, are enabled. * * @return whether to show the icons. */ @@ -220,36 +229,42 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun isLocationIndicatorsFlagEnabled(): Boolean { - return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_INDICATORS_ENABLED, false) + return SdkLevel.isAtLeastS() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_INDICATORS_ENABLED, + false + ) } /** - * Whether to show the location indicators. The location indicators are enable if the - * permission hub, or location indicator specifically are enabled. + * Whether to show the location indicators. The location indicators are enable if the permission + * hub, or location indicator specifically are enabled. */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun shouldShowLocationIndicators(): Boolean { return isLocationIndicatorsFlagEnabled() || isPermissionsHub2FlagEnabled() } - /** - * Whether the location accuracy feature is enabled - */ + /** Whether the location accuracy feature is enabled */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun isLocationAccuracyEnabled(): Boolean { - return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_ACCURACY_ENABLED, true) + return SdkLevel.isAtLeastS() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_ACCURACY_ENABLED, + true + ) } - /** - * Default state of location precision - * true: default is FINE. - * false: default is COARSE. - */ + /** Default state of location precision true: default is FINE. false: default is COARSE. */ fun getDefaultPrecision(): Boolean { - return !SdkLevel.isAtLeastS() || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_PRECISION, true) + return !SdkLevel.isAtLeastS() || + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_PRECISION, + true + ) } /** @@ -259,8 +274,12 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) fun is7DayToggleEnabled(): Boolean { - return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PRIVACY_DASHBOARD_7_DAY_TOGGLE, false) + return SdkLevel.isAtLeastS() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PRIVACY_DASHBOARD_7_DAY_TOGGLE, + false + ) } /** @@ -271,10 +290,15 @@ object KotlinUtils { @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codename = "UpsideDownCake") fun isPhotoPickerPromptEnabled(): Boolean { val app = PermissionControllerApplication.get() - return SdkLevel.isAtLeastU() && !DeviceUtils.isAuto(app) && - !DeviceUtils.isTelevision(app) && !DeviceUtils.isWear(app) && - DeviceConfig.getBoolean( - DeviceConfig.NAMESPACE_PRIVACY, PROPERTY_PHOTO_PICKER_PROMPT_ENABLED, true) + return SdkLevel.isAtLeastU() && + !DeviceUtils.isAuto(app) && + !DeviceUtils.isTelevision(app) && + !DeviceUtils.isWear(app) && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_PHOTO_PICKER_PROMPT_ENABLED, + true + ) } /* @@ -284,8 +308,12 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codename = "UpsideDownCake") fun isPermissionRationaleEnabled(): Boolean { - return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PERMISSION_RATIONALE_ENABLED, true) + return SdkLevel.isAtLeastU() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PERMISSION_RATIONALE_ENABLED, + true + ) } /** @@ -293,8 +321,12 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codename = "UpsideDownCake") fun isSafetyLabelChangeNotificationsEnabled(context: Context): Boolean { - return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - SAFETY_LABEL_CHANGE_NOTIFICATIONS_ENABLED, true) && + return SdkLevel.isAtLeastU() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + SAFETY_LABEL_CHANGE_NOTIFICATIONS_ENABLED, + true + ) && !DeviceUtils.isAuto(context) && !DeviceUtils.isTelevision(context) && !DeviceUtils.isWear(context) @@ -306,8 +338,12 @@ object KotlinUtils { */ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codename = "UpsideDownCake") fun safetyLabelChangesJobServiceKillSwitch(): Boolean { - return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_SAFETY_LABEL_CHANGES_JOB_SERVICE_KILL_SWITCH, false) + return SdkLevel.isAtLeastU() && + DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_SAFETY_LABEL_CHANGES_JOB_SERVICE_KILL_SWITCH, + false + ) } /** How often the safety label changes job will run. */ @@ -316,7 +352,8 @@ object KotlinUtils { return DeviceConfig.getLong( DeviceConfig.NAMESPACE_PRIVACY, PROPERTY_SAFETY_LABEL_CHANGES_JOB_INTERVAL_MILLIS, - Duration.ofDays(30).toMillis()) + Duration.ofDays(30).toMillis() + ) } /** Whether the safety label changes job should only be run when the device is idle. */ @@ -325,19 +362,19 @@ object KotlinUtils { return DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_PRIVACY, PROPERTY_SAFETY_LABEL_CHANGES_JOB_RUN_WHEN_IDLE, - true) + true + ) } /** - * Given a Map, and a List, determines which elements are in the list, but not the map, and - * vice versa. Used primarily for determining which liveDatas are already being watched, and - * which need to be removed or added + * Given a Map, and a List, determines which elements are in the list, but not the map, and vice + * versa. Used primarily for determining which liveDatas are already being watched, and which + * need to be removed or added * * @param oldValues A map of key type K, with any value type * @param newValues A list of type K - * * @return A pair, where the first value is all items in the list, but not the map, and the - * second is all keys in the map, but not the list + * second is all keys in the map, but not the list */ fun getMapAndListDifferences( newValues: Collection, @@ -359,7 +396,7 @@ object KotlinUtils { * * @param compare The function comparing two preferences, which will be used to sort * @param hasHeader Whether the group contains a LargeHeaderPreference, which will be kept at - * the top of the list + * the top of the list */ fun sortPreferenceGroup( group: PreferenceGroup, @@ -372,15 +409,17 @@ object KotlinUtils { } if (hasHeader) { - preferences.sortWith(Comparator { lhs, rhs -> - if (lhs is SettingsWithLargeHeader.LargeHeaderPreference) { - -1 - } else if (rhs is SettingsWithLargeHeader.LargeHeaderPreference) { - 1 - } else { - compare(lhs, rhs) + preferences.sortWith( + Comparator { lhs, rhs -> + if (lhs is SettingsWithLargeHeader.LargeHeaderPreference) { + -1 + } else if (rhs is SettingsWithLargeHeader.LargeHeaderPreference) { + 1 + } else { + compare(lhs, rhs) + } } - }) + ) } else { preferences.sortWith(Comparator(compare)) } @@ -395,17 +434,15 @@ object KotlinUtils { * * @param context The context from which to get the icon * @param groupName The name of the permission group whose icon we want - * * @return The permission group's icon, the ic_perm_device_info icon if the group has no icon, - * or the group does not exist + * or the group does not exist */ @JvmOverloads fun getPermGroupIcon(context: Context, groupName: String, tint: Int? = null): Drawable? { val groupInfo = Utils.getGroupInfo(groupName, context) var icon: Drawable? = null if (groupInfo != null && groupInfo.icon != 0) { - icon = Utils.loadDrawable(context.packageManager, groupInfo.packageName, - groupInfo.icon) + icon = Utils.loadDrawable(context.packageManager, groupInfo.packageName, groupInfo.icon) } if (icon == null) { @@ -425,13 +462,15 @@ object KotlinUtils { * * @param context The context from which to get the label * @param groupName The name of the permission group whose label we want - * * @return The permission group's label, or the group name, if the group is invalid */ fun getPermGroupLabel(context: Context, groupName: String): CharSequence { val groupInfo = Utils.getGroupInfo(groupName, context) ?: return groupName - return groupInfo.loadSafeLabel(context.packageManager, 0f, - TextUtils.SAFE_STRING_FLAG_FIRST_LINE or TextUtils.SAFE_STRING_FLAG_TRIM) + return groupInfo.loadSafeLabel( + context.packageManager, + 0f, + TextUtils.SAFE_STRING_FLAG_FIRST_LINE or TextUtils.SAFE_STRING_FLAG_TRIM + ) } /** @@ -439,9 +478,8 @@ object KotlinUtils { * * @param context The context from which to get the description * @param groupName The name of the permission group whose description we want - * * @return The permission group's description, or an empty string, if the group is invalid, or - * its description does not exist + * its description does not exist */ fun getPermGroupDescription(context: Context, groupName: String): CharSequence { val groupInfo = Utils.getGroupInfo(groupName, context) @@ -457,15 +495,20 @@ object KotlinUtils { /** * Gets a permission's label from the system. + * * @param context The context from which to get the label * @param permName The name of the permission whose label we want - * * @return The permission's label, or the permission name, if the permission is invalid */ fun getPermInfoLabel(context: Context, permName: String): CharSequence { return try { - context.packageManager.getPermissionInfo(permName, 0).loadSafeLabel( - context.packageManager, 20000.toFloat(), TextUtils.SAFE_STRING_FLAG_TRIM) + context.packageManager + .getPermissionInfo(permName, 0) + .loadSafeLabel( + context.packageManager, + 20000.toFloat(), + TextUtils.SAFE_STRING_FLAG_TRIM + ) } catch (e: PackageManager.NameNotFoundException) { permName } @@ -473,19 +516,23 @@ object KotlinUtils { /** * Gets a permission's icon from the system. + * * @param context The context from which to get the icon * @param permName The name of the permission whose icon we want - * - * @return The permission's icon, or the permission's group icon if the icon isn't set, or - * the ic_perm_device_info icon if the permission is invalid. + * @return The permission's icon, or the permission's group icon if the icon isn't set, or the + * ic_perm_device_info icon if the permission is invalid. */ fun getPermInfoIcon(context: Context, permName: String): Drawable? { return try { val permInfo = context.packageManager.getPermissionInfo(permName, 0) var icon: Drawable? = null if (permInfo.icon != 0) { - icon = Utils.applyTint(context, permInfo.loadUnbadgedIcon(context.packageManager), - android.R.attr.colorControlNormal) + icon = + Utils.applyTint( + context, + permInfo.loadUnbadgedIcon(context.packageManager), + android.R.attr.colorControlNormal + ) } if (icon == null) { @@ -495,8 +542,11 @@ object KotlinUtils { icon } catch (e: PackageManager.NameNotFoundException) { - Utils.applyTint(context, context.getDrawable(R.drawable.ic_perm_device_info), - android.R.attr.colorControlNormal) + Utils.applyTint( + context, + context.getDrawable(R.drawable.ic_perm_device_info), + android.R.attr.colorControlNormal + ) } } @@ -505,9 +555,8 @@ object KotlinUtils { * * @param context The context from which to get the description * @param permName The name of the permission whose description we want - * - * @return The permission's description, or an empty string, if the group is invalid, or - * its description does not exist + * @return The permission's description, or an empty string, if the group is invalid, or its + * description does not exist */ fun getPermInfoDescription(context: Context, permName: String): CharSequence { return try { @@ -524,14 +573,9 @@ object KotlinUtils { * @param app The current application * @param packageName The name of the package whose icon we want * @param user The user for whom we want the package icon - * * @return The package's icon, or null, if the package does not exist */ - fun getBadgedPackageIcon( - app: Application, - packageName: String, - user: UserHandle - ): Drawable? { + fun getBadgedPackageIcon(app: Application, packageName: String, user: UserHandle): Drawable? { return try { val userContext = Utils.getUserContext(app, user) val appInfo = userContext.packageManager.getApplicationInfo(packageName, 0) @@ -547,7 +591,6 @@ object KotlinUtils { * @param app The current application * @param packageName The name of the package whose label we want * @param user The user for whom we want the package label - * * @return The package's label */ fun getPackageLabel(app: Application, packageName: String, user: UserHandle): String { @@ -561,8 +604,12 @@ object KotlinUtils { } fun convertToBitmap(pkgIcon: Drawable): Bitmap { - val pkgIconBmp = Bitmap.createBitmap(pkgIcon.intrinsicWidth, pkgIcon.intrinsicHeight, - Bitmap.Config.ARGB_8888) + val pkgIconBmp = + Bitmap.createBitmap( + pkgIcon.intrinsicWidth, + pkgIcon.intrinsicHeight, + Bitmap.Config.ARGB_8888 + ) // Draw the icon so it can be displayed. val canvas = Canvas(pkgIconBmp) pkgIcon.setBounds(0, 0, pkgIcon.intrinsicWidth, pkgIcon.intrinsicHeight) @@ -577,13 +624,13 @@ object KotlinUtils { * @param app The current application * @param packageName The name of the package whose uid we want * @param user The user we want the package uid for - * * @return The package's UID, or null if the package or user is invalid */ fun getPackageUid(app: Application, packageName: String, user: UserHandle): Int? { val liveData = LightPackageInfoLiveData[packageName, user] val liveDataUid = liveData.value?.uid - return if (liveDataUid != null && liveData.hasActiveObservers()) liveDataUid else { + return if (liveDataUid != null && liveData.hasActiveObservers()) liveDataUid + else { val userContext = Utils.getUserContext(app, user) try { val appInfo = userContext.packageManager.getApplicationInfo(packageName, 0) @@ -594,9 +641,7 @@ object KotlinUtils { } } - /** - * Return a specific MIME type, if a set of permissions is associated with one - */ + /** Return a specific MIME type, if a set of permissions is associated with one */ fun getMimeTypeForPermissions(permissions: List): String? { if (permissions.contains(READ_MEDIA_IMAGES) && !permissions.contains(READ_MEDIA_VIDEO)) { return "image/*" @@ -614,30 +659,33 @@ object KotlinUtils { * @param app The currenct application * @param packageName The package name to check * @param user The user whose package we want to check - * * @return true if the package is R+ (and not a work profile) or has auto revoke enabled */ fun isROrAutoRevokeEnabled(app: Application, packageName: String, user: UserHandle): Boolean { val userContext = Utils.getUserContext(app, user) val liveDataValue = LightPackageInfoLiveData[packageName, user].value - val (targetSdk, uid) = if (liveDataValue != null) { - liveDataValue.targetSdkVersion to liveDataValue.uid - } else { - val appInfo = userContext.packageManager.getApplicationInfo(packageName, 0) - appInfo.targetSdkVersion to appInfo.uid - } + val (targetSdk, uid) = + if (liveDataValue != null) { + liveDataValue.targetSdkVersion to liveDataValue.uid + } else { + val appInfo = userContext.packageManager.getApplicationInfo(packageName, 0) + appInfo.targetSdkVersion to appInfo.uid + } if (targetSdk <= Build.VERSION_CODES.Q) { val opsManager = app.getSystemService(AppOpsManager::class.java)!! - return opsManager.unsafeCheckOpNoThrow(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, uid, - packageName) == MODE_ALLOWED + return opsManager.unsafeCheckOpNoThrow( + OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, + uid, + packageName + ) == MODE_ALLOWED } return true } /** - * Determine if the given permission should be treated as split from a - * non-runtime permission for an application targeting the given SDK level. + * Determine if the given permission should be treated as split from a non-runtime permission + * for an application targeting the given SDK level. */ private fun isPermissionSplitFromNonRuntime( app: Application, @@ -664,8 +712,7 @@ object KotlinUtils { * @param group: The LightAppPermGroup whose permission flags we wish to set * @param flags: Pairs of * @param filterPermissions: A list of permissions to filter by. Only the filtered permissions - * will be set - * + * will be set * @return A new LightAppPermGroup with the flags set. */ fun setGroupFlags( @@ -690,14 +737,29 @@ object KotlinUtils { } // Check if flags need to be updated if (flagMask and (perm.flags xor flagsToSet) != 0) { - app.packageManager.updatePermissionFlags(permName, group.packageName, - group.userHandle, *flags) + app.packageManager.updatePermissionFlags( + permName, + group.packageName, + group.userHandle, + *flags + ) } - newPerms[permName] = LightPermission(group.packageInfo, perm.permInfo, - perm.isGrantedIncludingAppOp, perm.flags or flagsToSet, perm.foregroundPerms) + newPerms[permName] = + LightPermission( + group.packageInfo, + perm.permInfo, + perm.isGrantedIncludingAppOp, + perm.flags or flagsToSet, + perm.foregroundPerms + ) } - return LightAppPermGroup(group.packageInfo, group.permGroupInfo, newPerms, - group.hasInstallToRuntimeSplit, group.specialLocationGrant) + return LightAppPermGroup( + group.packageInfo, + group.permGroupInfo, + newPerms, + group.hasInstallToRuntimeSplit, + group.specialLocationGrant + ) } /** @@ -708,9 +770,7 @@ object KotlinUtils { * @param app The current application * @param group The group whose permissions should be granted * @param filterPermissions If not specified, all permissions of the group will be granted. - * Otherwise only permissions in {@code filterPermissions} will be - * granted. - * + * Otherwise only permissions in {@code filterPermissions} will be granted. * @return a new LightAppPermGroup, reflecting the new state */ @JvmOverloads @@ -722,8 +782,15 @@ object KotlinUtils { userFixed: Boolean = false, withoutAppOps: Boolean = false, ): LightAppPermGroup { - return grantRuntimePermissions(app, group, false, isOneTime, userFixed, - withoutAppOps, filterPermissions) + return grantRuntimePermissions( + app, + group, + false, + isOneTime, + userFixed, + withoutAppOps, + filterPermissions + ) } /** @@ -734,9 +801,7 @@ object KotlinUtils { * @param app The current application * @param group The group whose permissions should be granted * @param filterPermissions If not specified, all permissions of the group will be granted. - * Otherwise only permissions in {@code filterPermissions} will be - * granted. - * + * Otherwise only permissions in {@code filterPermissions} will be granted. * @return a new LightAppPermGroup, reflecting the new state */ @JvmOverloads @@ -745,8 +810,7 @@ object KotlinUtils { group: LightAppPermGroup, filterPermissions: List = group.permissions.keys.toList() ): LightAppPermGroup { - return grantRuntimePermissions(app, group, true, false, false, false, - filterPermissions) + return grantRuntimePermissions(app, group, true, false, false, false, filterPermissions) } private fun grantRuntimePermissions( @@ -764,8 +828,8 @@ object KotlinUtils { val perm = group.permissions[permName] ?: continue val isBackgroundPerm = permName in group.backgroundPermNames if (isBackgroundPerm == grantBackground) { - val (newPerm, shouldKill) = grantRuntimePermission(app, perm, group, isOneTime, - userFixed, withoutAppOps) + val (newPerm, shouldKill) = + grantRuntimePermission(app, perm, group, isOneTime, userFixed, withoutAppOps) newPerms[newPerm.name] = newPerm shouldKillForAnyPermission = shouldKillForAnyPermission || shouldKill } @@ -776,32 +840,48 @@ object KotlinUtils { var permFlags = groupPerm.flags permFlags = permFlags.clearFlag(FLAG_PERMISSION_AUTO_REVOKED) if (groupPerm.flags != permFlags) { - app.packageManager.updatePermissionFlags(groupPerm.name, - group.packageInfo.packageName, PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, - permFlags, user) + app.packageManager.updatePermissionFlags( + groupPerm.name, + group.packageInfo.packageName, + PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, + permFlags, + user + ) } } } if (shouldKillForAnyPermission) { (app.getSystemService(ActivityManager::class.java) as ActivityManager).killUid( - group.packageInfo.uid, KILL_REASON_APP_OP_CHANGE) + group.packageInfo.uid, + KILL_REASON_APP_OP_CHANGE + ) } - val newGroup = LightAppPermGroup(group.packageInfo, group.permGroupInfo, newPerms, - group.hasInstallToRuntimeSplit, group.specialLocationGrant) + val newGroup = + LightAppPermGroup( + group.packageInfo, + group.permGroupInfo, + newPerms, + group.hasInstallToRuntimeSplit, + group.specialLocationGrant + ) // If any permission in the group is one time granted, start one time permission session. if (newGroup.permissions.any { it.value.isOneTime && it.value.isGrantedIncludingAppOp }) { if (SdkLevel.isAtLeastT()) { app.getSystemService(PermissionManager::class.java)!!.startOneTimePermissionSession( - group.packageName, Utils.getOneTimePermissionsTimeout(), - Utils.getOneTimePermissionsKilledDelay(false), - ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER, - ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE) + group.packageName, + Utils.getOneTimePermissionsTimeout(), + Utils.getOneTimePermissionsKilledDelay(false), + ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER, + ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE + ) } else { app.getSystemService(PermissionManager::class.java)!!.startOneTimePermissionSession( - group.packageName, Utils.getOneTimePermissionsTimeout(), - ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER, - ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE) + group.packageName, + Utils.getOneTimePermissionsTimeout(), + ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER, + ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE + ) } } return newGroup @@ -813,14 +893,13 @@ object KotlinUtils { * @param app The current application * @param perm The permission which should be granted. * @param group An app permission group in which to look for background or foreground - * @param isOneTime Whether this is a one-time permission grant - * permissions + * @param isOneTime Whether this is a one-time permission grant permissions * @param userFixed Whether to mark the permissions as user fixed when granted * @param withoutAppOps If these permission have app ops associated, and this value is true, - * then do not grant the app op when the permission is granted, and add the REVOKED_COMPAT flag. - * + * then do not grant the app op when the permission is granted, and add the REVOKED_COMPAT + * flag. * @return a LightPermission and boolean pair + * state, if it wasn't changed), should kill app> */ private fun grantRuntimePermission( app: Application, @@ -833,8 +912,9 @@ object KotlinUtils { val pkgInfo = group.packageInfo val user = UserHandle.getUserHandleForUid(pkgInfo.uid) val supportsRuntime = pkgInfo.targetSdkVersion >= Build.VERSION_CODES.M - val isGrantingAllowed = (!pkgInfo.isInstantApp || perm.isInstantPerm) && - (supportsRuntime || !perm.isRuntimeOnly) + val isGrantingAllowed = + (!pkgInfo.isInstantApp || perm.isInstantPerm) && + (supportsRuntime || !perm.isRuntimeOnly) // Do not touch permissions fixed by the system, or permissions that cannot be granted if (!isGrantingAllowed || perm.isSystemFixed) { return perm to false @@ -855,8 +935,13 @@ object KotlinUtils { // flag, so that the PermissionPolicyService doesn't reset the app op state if (affectsAppOp && withoutAppOps) { oldFlags = oldFlags.setFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) - app.packageManager.updatePermissionFlags(perm.name, group.packageName, - PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, oldFlags, user) + app.packageManager.updatePermissionFlags( + perm.name, + group.packageName, + PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, + oldFlags, + user + ) disallowAppOp(app, perm, group) } app.packageManager.grantRuntimePermission(group.packageName, perm.name, user) @@ -869,11 +954,12 @@ object KotlinUtils { shouldKill = true isGranted = true } - newFlags = if (affectsAppOp && withoutAppOps) { - newFlags.setFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) - } else { - newFlags.clearFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) - } + newFlags = + if (affectsAppOp && withoutAppOps) { + newFlags.setFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) + } else { + newFlags.clearFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) + } newFlags = newFlags.clearFlag(PackageManager.FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) // If this permission affects an app op, ensure the permission app op is enabled @@ -898,11 +984,12 @@ object KotlinUtils { } newFlags = newFlags.clearFlag(FLAG_PERMISSION_AUTO_REVOKED) - newFlags = if (isOneTime) { - newFlags.setFlag(FLAG_PERMISSION_ONE_TIME) - } else { - newFlags.clearFlag(FLAG_PERMISSION_ONE_TIME) - } + newFlags = + if (isOneTime) { + newFlags.setFlag(FLAG_PERMISSION_ONE_TIME) + } else { + newFlags.clearFlag(FLAG_PERMISSION_ONE_TIME) + } // If we newly grant background access to the fine location, double-guess the user some // time later if this was really the right choice. @@ -922,13 +1009,18 @@ object KotlinUtils { } if (oldFlags != newFlags) { - app.packageManager.updatePermissionFlags(perm.name, group.packageInfo.packageName, - PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, newFlags, user) + app.packageManager.updatePermissionFlags( + perm.name, + group.packageInfo.packageName, + PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, + newFlags, + user + ) } val newState = PermState(newFlags, isGranted) - return LightPermission(perm.pkgInfo, perm.permInfo, newState, - perm.foregroundPerms) to shouldKill + return LightPermission(perm.pkgInfo, perm.permInfo, newState, perm.foregroundPerms) to + shouldKill } /** @@ -941,9 +1033,7 @@ object KotlinUtils { * @param userFixed If the user requested that they do not want to be asked again * @param oneTime If the permission should be mark as one-time * @param filterPermissions If not specified, all permissions of the group will be revoked. - * Otherwise only permissions in {@code filterPermissions} will be - * revoked. - * + * Otherwise only permissions in {@code filterPermissions} will be revoked. * @return a LightAppPermGroup representing the new state */ @JvmOverloads @@ -955,8 +1045,15 @@ object KotlinUtils { forceRemoveRevokedCompat: Boolean = false, filterPermissions: List = group.permissions.keys.toList() ): LightAppPermGroup { - return revokeRuntimePermissions(app, group, false, userFixed, oneTime, - forceRemoveRevokedCompat, filterPermissions) + return revokeRuntimePermissions( + app, + group, + false, + userFixed, + oneTime, + forceRemoveRevokedCompat, + filterPermissions + ) } /** @@ -968,9 +1065,7 @@ object KotlinUtils { * @param group The group whose permissions should be revoked * @param userFixed If the user requested that they do not want to be asked again * @param filterPermissions If not specified, all permissions of the group will be revoked. - * Otherwise only permissions in {@code filterPermissions} will be - * revoked. - * + * Otherwise only permissions in {@code filterPermissions} will be revoked. * @return a LightAppPermGroup representing the new state */ @JvmOverloads @@ -982,8 +1077,15 @@ object KotlinUtils { forceRemoveRevokedCompat: Boolean = false, filterPermissions: List = group.permissions.keys.toList() ): LightAppPermGroup { - return revokeRuntimePermissions(app, group, true, userFixed, oneTime, - forceRemoveRevokedCompat, filterPermissions) + return revokeRuntimePermissions( + app, + group, + true, + userFixed, + oneTime, + forceRemoveRevokedCompat, + filterPermissions + ) } private fun revokeRuntimePermissions( @@ -1003,8 +1105,14 @@ object KotlinUtils { val isBackgroundPerm = permName in group.backgroundPermNames if (isBackgroundPerm == revokeBackground) { val (newPerm, shouldKill) = - revokeRuntimePermission(app, perm, userFixed, oneTime, forceRemoveRevokedCompat, - group) + revokeRuntimePermission( + app, + perm, + userFixed, + oneTime, + forceRemoveRevokedCompat, + group + ) newPerms[newPerm.name] = newPerm shouldKillForAnyPermission = shouldKillForAnyPermission || shouldKill } @@ -1012,15 +1120,24 @@ object KotlinUtils { if (shouldKillForAnyPermission && !shouldSkipKillForGroup(app, group)) { (app.getSystemService(ActivityManager::class.java) as ActivityManager).killUid( - group.packageInfo.uid, KILL_REASON_APP_OP_CHANGE) + group.packageInfo.uid, + KILL_REASON_APP_OP_CHANGE + ) } - val newGroup = LightAppPermGroup(group.packageInfo, group.permGroupInfo, newPerms, - group.hasInstallToRuntimeSplit, group.specialLocationGrant) + val newGroup = + LightAppPermGroup( + group.packageInfo, + group.permGroupInfo, + newPerms, + group.hasInstallToRuntimeSplit, + group.specialLocationGrant + ) if (wasOneTime && !anyPermsOfPackageOneTimeGranted(app, newGroup.packageInfo, newGroup)) { app.getSystemService(PermissionManager::class.java)!!.stopOneTimePermissionSession( - group.packageName) + group.packageName + ) } return newGroup } @@ -1042,8 +1159,9 @@ object KotlinUtils { postRevokeHandler: Runnable? ) { GlobalScope.launch(Dispatchers.Main) { - val group = LightAppPermGroupLiveData[packageName, permissionGroupName, user] - .getInitializedValue() + val group = + LightAppPermGroupLiveData[packageName, permissionGroupName, user] + .getInitializedValue() if (group != null) { revokeBackgroundRuntimePermissions(context.application, group) } @@ -1059,7 +1177,6 @@ object KotlinUtils { * @param app The current application * @param packageInfo The packageInfo we wish to examine * @param group Optional, the current app permission group we are examining - * * @return true if any permission in the package is granted for one time, false otherwise */ private fun anyPermsOfPackageOneTimeGranted( @@ -1075,11 +1192,12 @@ object KotlinUtils { if (permName in group?.permissions ?: emptyMap()) { continue } - val flags = app.packageManager.getPermissionFlags(permName, packageInfo.packageName, - user) and FLAG_PERMISSION_ONE_TIME - val granted = packageInfo.requestedPermissionsFlags[idx] == - PackageManager.PERMISSION_GRANTED && - (flags and FLAG_PERMISSION_REVOKED_COMPAT) == 0 + val flags = + app.packageManager.getPermissionFlags(permName, packageInfo.packageName, user) and + FLAG_PERMISSION_ONE_TIME + val granted = + packageInfo.requestedPermissionsFlags[idx] == PackageManager.PERMISSION_GRANTED && + (flags and FLAG_PERMISSION_REVOKED_COMPAT) == 0 if (granted && (flags and FLAG_PERMISSION_ONE_TIME) != 0) { return true } @@ -1093,10 +1211,9 @@ object KotlinUtils { * @param perm The permission which should be revoked. * @param userFixed If the user requested that they do not want to be asked again * @param group An optional app permission group in which to look for background or foreground - * permissions - * + * permissions * @return a LightPermission and boolean pair + * state, if it wasn't changed), should kill app> */ private fun revokeRuntimePermission( app: Application, @@ -1120,11 +1237,20 @@ object KotlinUtils { val affectsAppOp = permissionToOp(perm.name) != null || perm.isBackgroundPermission if (perm.isGrantedIncludingAppOp || (perm.isCompatRevoked && forceRemoveRevokedCompat)) { - if (supportsRuntime && !isPermissionSplitFromNonRuntime(app, perm.name, - group.packageInfo.targetSdkVersion)) { + if ( + supportsRuntime && + !isPermissionSplitFromNonRuntime( + app, + perm.name, + group.packageInfo.targetSdkVersion + ) + ) { // Revoke the permission if needed. - app.packageManager.revokeRuntimePermission(group.packageInfo.packageName, - perm.name, user) + app.packageManager.revokeRuntimePermission( + group.packageInfo.packageName, + perm.name, + user + ) isGranted = false if (forceRemoveRevokedCompat) { newFlags = newFlags.clearFlag(PackageManager.FLAG_PERMISSION_REVOKED_COMPAT) @@ -1149,18 +1275,26 @@ object KotlinUtils { // Update the permission flags. // Take a note that the user fixed the permission, if applicable. - newFlags = if (userFixed) newFlags.setFlag(PackageManager.FLAG_PERMISSION_USER_FIXED) - else newFlags.clearFlag(PackageManager.FLAG_PERMISSION_USER_FIXED) - newFlags = if (oneTime) newFlags.clearFlag(PackageManager.FLAG_PERMISSION_USER_SET) - else newFlags.setFlag(PackageManager.FLAG_PERMISSION_USER_SET) - newFlags = if (oneTime) newFlags.setFlag(PackageManager.FLAG_PERMISSION_ONE_TIME) - else newFlags.clearFlag(PackageManager.FLAG_PERMISSION_ONE_TIME) + newFlags = + if (userFixed) newFlags.setFlag(PackageManager.FLAG_PERMISSION_USER_FIXED) + else newFlags.clearFlag(PackageManager.FLAG_PERMISSION_USER_FIXED) + newFlags = + if (oneTime) newFlags.clearFlag(PackageManager.FLAG_PERMISSION_USER_SET) + else newFlags.setFlag(PackageManager.FLAG_PERMISSION_USER_SET) + newFlags = + if (oneTime) newFlags.setFlag(PackageManager.FLAG_PERMISSION_ONE_TIME) + else newFlags.clearFlag(PackageManager.FLAG_PERMISSION_ONE_TIME) newFlags = newFlags.clearFlag(PackageManager.FLAG_PERMISSION_AUTO_REVOKED) newFlags = newFlags.clearFlag(PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) if (perm.flags != newFlags) { - app.packageManager.updatePermissionFlags(perm.name, group.packageInfo.packageName, - PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, newFlags, user) + app.packageManager.updatePermissionFlags( + perm.name, + group.packageInfo.packageName, + PERMISSION_CONTROLLER_CHANGED_FLAG_MASK, + newFlags, + user + ) } // If we revoke background access to the fine location, we trigger a check to remove @@ -1176,17 +1310,18 @@ object KotlinUtils { } if (cancelLocationAccessWarning) { // cancel location access warning notification - LocationAccessCheck(app, null).cancelBackgroundAccessWarningNotification( - group.packageInfo.packageName, - user, - true - ) + LocationAccessCheck(app, null) + .cancelBackgroundAccessWarningNotification( + group.packageInfo.packageName, + user, + true + ) } } val newState = PermState(newFlags, isGranted) - return LightPermission(perm.pkgInfo, perm.permInfo, newState, - perm.foregroundPerms) to shouldKill + return LightPermission(perm.pkgInfo, perm.permInfo, newState, perm.foregroundPerms) to + shouldKill } private fun Int.setFlag(flagToSet: Int): Int { @@ -1200,27 +1335,20 @@ object KotlinUtils { /** * Allow the app op for a permission/uid. * - *

There are three cases: - *

- *
The permission is not split into foreground/background
- *
The app op matching the permission will be set to {@link AppOpsManager#MODE_ALLOWED}
- *
The permission is a foreground permission:
- *
The background permission permission is granted
- *
The app op matching the permission will be set to {@link AppOpsManager#MODE_ALLOWED}
- *
The background permission permission is not granted
- *
The app op matching the permission will be set to - * {@link AppOpsManager#MODE_FOREGROUND}
- *
- *
The permission is a background permission:
- *
All granted foreground permissions for this background permission will be set to - * {@link AppOpsManager#MODE_ALLOWED}
- *
+ *

There are three cases:

The permission is not split into + * foreground/background
The app op matching the permission will be set to {@link + * AppOpsManager#MODE_ALLOWED}
The permission is a foreground permission:
+ *
The background permission permission is granted
The app op matching the + * permission will be set to {@link AppOpsManager#MODE_ALLOWED}
The background + * permission permission is not granted
The app op matching the permission will + * be set to {@link AppOpsManager#MODE_FOREGROUND}
The permission is a + * background permission:
All granted foreground permissions for this background + * permission will be set to {@link AppOpsManager#MODE_ALLOWED}
* * @param app The current application * @param perm The LightPermission whose app op should be allowed - * @param group The LightAppPermGroup which will be looked in for foreground or - * background LightPermission objects - * + * @param group The LightAppPermGroup which will be looked in for foreground or background + * LightPermission objects * @return {@code true} iff app-op was changed */ private fun allowAppOp( @@ -1239,25 +1367,29 @@ object KotlinUtils { val appOpName = permissionToOp(foregroundPermName) ?: continue if (fgPerm != null && fgPerm.isGrantedIncludingAppOp) { - wasChanged = setOpMode(appOpName, uid, packageName, MODE_ALLOWED, - appOpsManager) || wasChanged + wasChanged = + setOpMode(appOpName, uid, packageName, MODE_ALLOWED, appOpsManager) || + wasChanged } } } else { val appOpName = permissionToOp(perm.name) ?: return false if (perm.backgroundPermission != null) { - wasChanged = if (group.permissions.containsKey(perm.backgroundPermission)) { - val bgPerm = group.permissions[perm.backgroundPermission] - val mode = if (bgPerm != null && bgPerm.isGrantedIncludingAppOp) MODE_ALLOWED - else MODE_FOREGROUND - - setOpMode(appOpName, uid, packageName, mode, appOpsManager) - } else { - // The app requested a permission that has a background permission but it did - // not request the background permission, hence it can never get background - // access - setOpMode(appOpName, uid, packageName, MODE_FOREGROUND, appOpsManager) - } + wasChanged = + if (group.permissions.containsKey(perm.backgroundPermission)) { + val bgPerm = group.permissions[perm.backgroundPermission] + val mode = + if (bgPerm != null && bgPerm.isGrantedIncludingAppOp) MODE_ALLOWED + else MODE_FOREGROUND + + setOpMode(appOpName, uid, packageName, mode, appOpsManager) + } else { + // The app requested a permission that has a background permission but it + // did + // not request the background permission, hence it can never get background + // access + setOpMode(appOpName, uid, packageName, MODE_FOREGROUND, appOpsManager) + } } else { wasChanged = setOpMode(appOpName, uid, packageName, MODE_ALLOWED, appOpsManager) } @@ -1268,22 +1400,17 @@ object KotlinUtils { /** * Disallow the app op for a permission/uid. * - *

There are three cases: - *

- *
The permission is not split into foreground/background
- *
The app op matching the permission will be set to {@link AppOpsManager#MODE_IGNORED}
- *
The permission is a foreground permission:
- *
The app op matching the permission will be set to {@link AppOpsManager#MODE_IGNORED}
- *
The permission is a background permission:
- *
All granted foreground permissions for this background permission will be set to - * {@link AppOpsManager#MODE_FOREGROUND}
- *
+ *

There are three cases:

The permission is not split into + * foreground/background
The app op matching the permission will be set to {@link + * AppOpsManager#MODE_IGNORED}
The permission is a foreground permission:
The + * app op matching the permission will be set to {@link AppOpsManager#MODE_IGNORED}
The + * permission is a background permission:
All granted foreground permissions for this + * background permission will be set to {@link AppOpsManager#MODE_FOREGROUND}
* * @param app The current application * @param perm The LightPermission whose app op should be allowed - * @param group The LightAppPermGroup which will be looked in for foreground or - * background LightPermission objects - * + * @param group The LightAppPermGroup which will be looked in for foreground or background + * LightPermission objects * @return {@code true} iff app-op was changed */ private fun disallowAppOp( @@ -1301,8 +1428,9 @@ object KotlinUtils { val fgPerm = group.permissions[foregroundPermName] if (fgPerm != null && fgPerm.isGrantedIncludingAppOp) { val appOpName = permissionToOp(foregroundPermName) ?: return false - wasChanged = wasChanged || setOpMode(appOpName, uid, packageName, - MODE_FOREGROUND, appOpsManager) + wasChanged = + wasChanged || + setOpMode(appOpName, uid, packageName, MODE_FOREGROUND, appOpsManager) } } } else { @@ -1320,7 +1448,6 @@ object KotlinUtils { * @param packageName The package the app-op belongs to * @param mode The new mode * @param manager The app ops manager to use to change the app op - * * @return {@code true} iff app-op was changed */ private fun setOpMode( @@ -1343,22 +1470,25 @@ object KotlinUtils { return false } - return shouldSkipKillOnPermDeny(app, POST_NOTIFICATIONS, group.packageName, - group.userHandle) + return shouldSkipKillOnPermDeny( + app, + POST_NOTIFICATIONS, + group.packageName, + group.userHandle + ) } /** * Determine if the usual "kill app on permission denial" should be skipped. It should be - * skipped if the permission is POST_NOTIFICATIONS, the app holds the BACKUP permission, and - * a backup restore is currently in progress. + * skipped if the permission is POST_NOTIFICATIONS, the app holds the BACKUP permission, and a + * backup restore is currently in progress. * * @param app the current application * @param permission the permission being denied * @param packageName the package the permission was denied for * @param user the user whose package the permission was denied for - * * @return true if the permission denied was POST_NOTIFICATIONS, the app is a backup app, and a - * backup restore is in progress, false otherwise + * backup restore is in progress, false otherwise */ fun shouldSkipKillOnPermDeny( app: Application, @@ -1367,17 +1497,27 @@ object KotlinUtils { user: UserHandle ): Boolean { val userContext: Context = Utils.getUserContext(app, user) - if (permission != POST_NOTIFICATIONS || userContext.packageManager - .checkPermission(BACKUP, packageName) != PackageManager.PERMISSION_GRANTED) { + if ( + permission != POST_NOTIFICATIONS || + userContext.packageManager.checkPermission(BACKUP, packageName) != + PackageManager.PERMISSION_GRANTED + ) { return false } return try { - val isInSetup = Settings.Secure.getInt(userContext.contentResolver, - Settings.Secure.USER_SETUP_COMPLETE, user.identifier) == 0 - val isInDeferredSetup = Settings.Secure.getInt(userContext.contentResolver, - Settings.Secure.USER_SETUP_PERSONALIZATION_STATE, user.identifier) == - Settings.Secure.USER_SETUP_PERSONALIZATION_STARTED + val isInSetup = + Settings.Secure.getInt( + userContext.contentResolver, + Settings.Secure.USER_SETUP_COMPLETE, + user.identifier + ) == 0 + val isInDeferredSetup = + Settings.Secure.getInt( + userContext.contentResolver, + Settings.Secure.USER_SETUP_PERSONALIZATION_STATE, + user.identifier + ) == Settings.Secure.USER_SETUP_PERSONALIZATION_STARTED isInSetup || isInDeferredSetup } catch (e: Settings.SettingNotFoundException) { Log.w(LOG_TAG, "Failed to check if the user is in restore: $e") @@ -1391,22 +1531,27 @@ object KotlinUtils { * * @param context: The context from which to retrieve the package * @param packageName: The package name to check - * * @return whether or not the given package has a launch intent */ fun packageHasLaunchIntent(context: Context, packageName: String): Boolean { val intentToResolve = Intent(ACTION_MAIN) intentToResolve.addCategory(CATEGORY_INFO) intentToResolve.setPackage(packageName) - var resolveInfos = context.packageManager.queryIntentActivities(intentToResolve, - MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE) + var resolveInfos = + context.packageManager.queryIntentActivities( + intentToResolve, + MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE + ) if (resolveInfos.size <= 0) { intentToResolve.removeCategory(CATEGORY_INFO) intentToResolve.addCategory(CATEGORY_LAUNCHER) intentToResolve.setPackage(packageName) - resolveInfos = context.packageManager.queryIntentActivities(intentToResolve, - MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE) + resolveInfos = + context.packageManager.queryIntentActivities( + intentToResolve, + MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE + ) } return resolveInfos.size > 0 } @@ -1424,39 +1569,55 @@ object KotlinUtils { isFineSelected: Boolean ) { if (isFineSelected) { - setGroupFlags(app, group, + setGroupFlags( + app, + group, PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to true, - filterPermissions = listOf(ACCESS_FINE_LOCATION)) - setGroupFlags(app, group, + filterPermissions = listOf(ACCESS_FINE_LOCATION) + ) + setGroupFlags( + app, + group, PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to false, - filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION)) + filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION) + ) } else { - setGroupFlags(app, group, + setGroupFlags( + app, + group, PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to false, - filterPermissions = listOf(ACCESS_FINE_LOCATION)) - setGroupFlags(app, group, + filterPermissions = listOf(ACCESS_FINE_LOCATION) + ) + setGroupFlags( + app, + group, PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to true, - filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION)) + filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION) + ) } } /** - * Determines whether we should show the safety protection resources. - * We show the resources only if - * (1) the build version is T or after and - * (2) the feature flag safety_protection_enabled is enabled and - * (3) the config value config_safetyProtectionEnabled is enabled/true and - * (4) the resources exist (currently the resources only exist on GMS devices) + * Determines whether we should show the safety protection resources. We show the resources only + * if (1) the build version is T or after and (2) the feature flag safety_protection_enabled is + * enabled and (3) the config value config_safetyProtectionEnabled is enabled/true and (4) the + * resources exist (currently the resources only exist on GMS devices) */ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU) fun shouldShowSafetyProtectionResources(context: Context): Boolean { return try { SdkLevel.isAtLeastT() && DeviceConfig.getBoolean( - DeviceConfig.NAMESPACE_PRIVACY, SAFETY_PROTECTION_RESOURCES_ENABLED, false) && - context.getResources().getBoolean( - Resources.getSystem() - .getIdentifier("config_safetyProtectionEnabled", "bool", "android")) && + DeviceConfig.NAMESPACE_PRIVACY, + SAFETY_PROTECTION_RESOURCES_ENABLED, + false + ) && + context + .getResources() + .getBoolean( + Resources.getSystem() + .getIdentifier("config_safetyProtectionEnabled", "bool", "android") + ) && context.getDrawable(android.R.drawable.ic_safety_protection) != null && !context.getString(android.R.string.safety_protection_display_text).isNullOrEmpty() } catch (e: Resources.NotFoundException) { @@ -1480,8 +1641,7 @@ object KotlinUtils { installerPackageName: String?, packageName: String? ): Intent? { - val intent: Intent = Intent(Intent.ACTION_SHOW_APP_INFO) - .setPackage(installerPackageName) + val intent: Intent = Intent(Intent.ACTION_SHOW_APP_INFO).setPackage(installerPackageName) val result: Intent? = resolveActivityForIntent(context, intent) if (result != null) { result.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName) @@ -1512,9 +1672,10 @@ object KotlinUtils { val color: Int // If U resources are available, and this is a U+ device, use those if (SdkLevel.isAtLeastU()) { - val scContext = SafetyCenterResourcesContext(context) - val uIcon = scContext.getIconByDrawableName("ic_notification_badge_general") - val uColor = scContext.getColorByName("notification_tint_normal") + val safetyCenterResourcesApk = SafetyCenterResourcesApk(context) + val uIcon = + safetyCenterResourcesApk.getIconByDrawableName("ic_notification_badge_general") + val uColor = safetyCenterResourcesApk.getColorByName("notification_tint_normal") if (uIcon != null && uColor != null) { appLabel = context.getString(R.string.safety_privacy_qs_tile_title) return NotificationResources(appLabel, uIcon, uColor) @@ -1523,24 +1684,21 @@ object KotlinUtils { // Use PbA branding if available, otherwise default to more generic branding if (shouldShowSafetyProtectionResources(context)) { - appLabel = Html.fromHtml(context.getString( - android.R.string.safety_protection_display_text), 0).toString() - smallIcon = - Icon.createWithResource(context, android.R.drawable.ic_safety_protection) + appLabel = + Html.fromHtml(context.getString(android.R.string.safety_protection_display_text), 0) + .toString() + smallIcon = Icon.createWithResource(context, android.R.drawable.ic_safety_protection) color = context.getColor(R.color.safety_center_info) } else { appLabel = context.getString(R.string.safety_center_notification_app_label) - smallIcon = - Icon.createWithResource(context, R.drawable.ic_settings_notification) + smallIcon = Icon.createWithResource(context, R.drawable.ic_settings_notification) color = context.getColor(android.R.color.system_notification_accent_color) } return NotificationResources(appLabel, smallIcon, color) } } -/** - * Get the [value][LiveData.getValue], suspending until [isInitialized] if not yet so - */ +/** Get the [value][LiveData.getValue], suspending until [isInitialized] if not yet so */ suspend fun > LD.getInitializedValue( observe: LD.(Observer) -> Unit = { observeForever(it) }, isInitialized: LD.() -> Boolean = { value != null } @@ -1550,20 +1708,20 @@ suspend fun > LD.getInitializedValue( } else { suspendCoroutine { continuation: Continuation -> val observer = AtomicReference>() - observer.set(Observer { newValue -> - if (isInitialized()) { - GlobalScope.launch(Dispatchers.Main) { - observer.getAndSet(null)?.let { observerSnapshot -> - removeObserver(observerSnapshot) - continuation.resume(newValue) + observer.set( + Observer { newValue -> + if (isInitialized()) { + GlobalScope.launch(Dispatchers.Main) { + observer.getAndSet(null)?.let { observerSnapshot -> + removeObserver(observerSnapshot) + continuation.resume(newValue) + } } } } - }) + ) - GlobalScope.launch(Dispatchers.Main) { - observe(observer.get()) - } + GlobalScope.launch(Dispatchers.Main) { observe(observer.get()) } } } } @@ -1571,8 +1729,8 @@ suspend fun > LD.getInitializedValue( /** * A parallel equivalent of [map] * - * Starts the given suspending function for each item in the collection without waiting for - * previous ones to complete, then suspends until all the started operations finish. + * Starts the given suspending function for each item in the collection without waiting for previous + * ones to complete, then suspends until all the started operations finish. */ suspend inline fun Iterable.mapInParallel( context: CoroutineContext, @@ -1594,8 +1752,8 @@ suspend inline fun Iterable.forEachInParallel( } /** - * Check that we haven't already started transitioning to a given destination. If we haven't, - * start navigating to that destination. + * Check that we haven't already started transitioning to a given destination. If we haven't, start + * navigating to that destination. * * @param destResId The ID of the desired destination * @param args The optional bundle of args to be passed to the destination diff --git a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerPregrants.kt b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerPregrants.kt index aaf2d32e64..4063ec8b29 100644 --- a/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerPregrants.kt +++ b/PermissionController/src/com/android/permissioncontroller/privacysources/NotificationListenerPregrants.kt @@ -18,32 +18,34 @@ package com.android.permissioncontroller.privacysources import android.content.Context import androidx.annotation.VisibleForTesting -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk // (TODO:b/242573074) Remove for Android U. class NotificationListenerPregrants(private val context: Context) { @VisibleForTesting val pregrantedPackagesDelegate = lazy { hashSetOf( - "android", - "com.android.cellbroadcastreceiver", - "com.android.server.telecom", - "com.android.settings", - "com.android.systemui", - "com.android.launcher3", - "com.android.dynsystem", - "com.android.providers.settings", - "com.android.inputdevices", - "com.android.keychain", - "com.android.localtransport", - "com.android.wallpaperbackup", - "com.android.location.fused" - ).also { - it.addAll( - SafetyCenterResourcesContext(context) - .getStringByName("config_NotificationListenerServicePregrants") - .split(",")) - } + "android", + "com.android.cellbroadcastreceiver", + "com.android.server.telecom", + "com.android.settings", + "com.android.systemui", + "com.android.launcher3", + "com.android.dynsystem", + "com.android.providers.settings", + "com.android.inputdevices", + "com.android.keychain", + "com.android.localtransport", + "com.android.wallpaperbackup", + "com.android.location.fused" + ) + .also { + it.addAll( + SafetyCenterResourcesApk(context) + .getStringByName("config_NotificationListenerServicePregrants") + .split(",") + ) + } } val pregrantedPackages: Set by pregrantedPackagesDelegate } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt index 463288c641..88dd8a6e3f 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt @@ -52,7 +52,7 @@ import com.android.permissioncontroller.safetycenter.ui.model.PrivacyControlsVie import com.android.safetycenter.internaldata.SafetyCenterBundles import com.android.safetycenter.internaldata.SafetyCenterEntryId import com.android.safetycenter.internaldata.SafetyCenterIds -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk /** [android.provider.SearchIndexablesProvider] for Safety Center. */ @RequiresApi(Build.VERSION_CODES.TIRAMISU) @@ -67,7 +67,7 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { val context = requireContext() val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java) ?: return cursor - val resourcesContext = SafetyCenterResourcesContext(context) + val safetyCenterResourcesApk = SafetyCenterResourcesApk(context) val screenTitle = context.getString(R.string.safety_center_dashboard_page_title) @@ -76,7 +76,11 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { SdkLevel.isAtLeastU() && safetySourcesGroup.type == SAFETY_SOURCES_GROUP_TYPE_STATEFUL ) { - cursor.addSafetySourcesGroupRow(safetySourcesGroup, resourcesContext, screenTitle) + cursor.addSafetySourcesGroupRow( + safetySourcesGroup, + safetyCenterResourcesApk, + screenTitle + ) } safetySourcesGroup.safetySources .asSequence() @@ -85,7 +89,7 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { cursor.addSafetySourceRow( context, safetySource, - resourcesContext, + safetyCenterResourcesApk, safetyCenterManager, screenTitle ) @@ -139,11 +143,12 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { private fun MatrixCursor.addSafetySourcesGroupRow( safetySourcesGroups: SafetySourcesGroup, - resourcesContext: SafetyCenterResourcesContext, + safetyCenterResourcesApk: SafetyCenterResourcesApk, screenTitle: String, ) { val groupTitle = - resourcesContext.getNotEmptyStringOrNull(safetySourcesGroups.titleResId) ?: return + safetyCenterResourcesApk.getNotEmptyStringOrNull(safetySourcesGroups.titleResId) + ?: return newRow() .add(COLUMN_RANK, 0) @@ -157,11 +162,12 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { private fun MatrixCursor.addSafetySourceRow( context: Context, safetySource: SafetySource, - resourcesContext: SafetyCenterResourcesContext, + safetyCenterResourcesApk: SafetyCenterResourcesApk, safetyCenterManager: SafetyCenterManager, screenTitle: String, ) { - val searchTerms = resourcesContext.getNotEmptyStringOrNull(safetySource.searchTermsResId) + val searchTerms = + safetyCenterResourcesApk.getNotEmptyStringOrNull(safetySource.searchTermsResId) var isPersonalEntryAdded = false var isWorkEntryAdded = false @@ -194,19 +200,19 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { } if (!isPersonalEntryAdded) { - resourcesContext.getNotEmptyStringOrNull(safetySource.titleResId)?.let { + safetyCenterResourcesApk.getNotEmptyStringOrNull(safetySource.titleResId)?.let { addIndexableRow(title = it, isWorkProfile = false) } } if (!isWorkEntryAdded && safetySource.profile == SafetySource.PROFILE_ALL) { - resourcesContext.getNotEmptyStringOrNull(safetySource.titleForWorkResId)?.let { + safetyCenterResourcesApk.getNotEmptyStringOrNull(safetySource.titleForWorkResId)?.let { addIndexableRow(title = it, isWorkProfile = true) } } } - private fun SafetyCenterResourcesContext.getNotEmptyStringOrNull(resId: Int): String? = + private fun SafetyCenterResourcesApk.getNotEmptyStringOrNull(resId: Int): String? = if (resId != Resources.ID_NULL) { getString(resId).takeIf { it.isNotEmpty() } } else { diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java index c42dfc2c2f..57462c20eb 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java @@ -53,7 +53,7 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData; import com.android.permissioncontroller.safetycenter.ui.model.StatusUiData; import com.android.safetycenter.internaldata.SafetyCenterBundles; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import kotlin.Unit; @@ -178,10 +178,10 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { private void updateStatus(StatusUiData statusUiData) { if (mIsQuickSettingsFragment) { - SafetyCenterResourcesContext safetyCenterResourcesContext = - new SafetyCenterResourcesContext(requireContext()); + SafetyCenterResourcesApk safetyCenterResourcesApk = + new SafetyCenterResourcesApk(requireContext()); boolean hasPendingActions = - safetyCenterResourcesContext + safetyCenterResourcesApk .getStringByName("overall_severity_level_ok_review_summary") .equals(statusUiData.getOriginalSummary().toString()); diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt index 7d5dbb3cb2..365dc0efa0 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt @@ -32,7 +32,7 @@ import com.android.permissioncontroller.safetycenter.ui.ParsedSafetyCenterIntent import com.android.permissioncontroller.safetycenter.ui.model.LiveSafetyCenterViewModelFactory import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterViewModel -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk /** A base fragment that represents a page in Safety Center. */ @RequiresApi(TIRAMISU) @@ -72,7 +72,7 @@ abstract class SafetyCenterFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { sameTaskSourceIds = - SafetyCenterResourcesContext(requireContext()) + SafetyCenterResourcesApk(requireContext()) .getStringByName("config_same_task_safety_source_ids") .split(",") safetyCenterSessionId = requireArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt index 5e45d2b3c4..02bf6278e6 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt @@ -26,7 +26,7 @@ import com.android.permissioncontroller.Constants.EXTRA_SESSION_ID import com.android.permissioncontroller.R import com.android.permissioncontroller.safetycenter.ui.SafetyBrandChipPreference.Companion.closeSubpage import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.settingslib.widget.FooterPreference /** A fragment that represents a generic subpage in Safety Center. */ @@ -88,8 +88,7 @@ class SafetyCenterSubpageFragment : SafetyCenterFragment() { private fun setupIllustration() { val resName = "illustration_${SnakeCaseConverter.fromCamelCase(sourceGroupId)}" val context = requireContext() - val drawable = - SafetyCenterResourcesContext(context).getDrawableByName(resName, context.theme) + val drawable = SafetyCenterResourcesApk(context).getDrawableByName(resName, context.theme) if (drawable == null) { Log.w(TAG, "$sourceGroupId doesn't have any matching illustration") subpageIllustration.setVisible(false) @@ -100,7 +99,7 @@ class SafetyCenterSubpageFragment : SafetyCenterFragment() { private fun setupFooter() { val resName = "${SnakeCaseConverter.fromCamelCase(sourceGroupId)}_footer" - val footerText = SafetyCenterResourcesContext(requireContext()).getStringByName(resName) + val footerText = SafetyCenterResourcesApk(requireContext()).getStringByName(resName) if (footerText.isEmpty()) { Log.w(TAG, "$sourceGroupId doesn't have any matching footer") subpageFooter.setVisible(false) diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java similarity index 91% rename from SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java rename to SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java index 25455dc7a1..b0063d051e 100644 --- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java @@ -46,9 +46,9 @@ import java.util.List; *

This class isn't thread safe. Thread safety must be handled by the caller, or this may cause * the resources APK {@link Context} to be initialized multiple times. */ -public final class SafetyCenterResourcesContext { +public final class SafetyCenterResourcesApk { - private static final String TAG = "SafetyCenterResContext"; + private static final String TAG = "SafetyCenterResApk"; /** Intent action that is used to identify the Safety Center resources APK */ private static final String RESOURCES_APK_ACTION = @@ -86,11 +86,11 @@ public final class SafetyCenterResourcesContext { // Cached context from the resources APK. @Nullable private Context mResourcesApkContext; - public SafetyCenterResourcesContext(Context context) { + public SafetyCenterResourcesApk(Context context) { this(context, /* shouldFallbackIfNamedResourceNotFound */ true); } - private SafetyCenterResourcesContext( + private SafetyCenterResourcesApk( Context context, boolean shouldFallbackIfNamedResourceNotFound) { this( context, @@ -101,7 +101,7 @@ public final class SafetyCenterResourcesContext { } @VisibleForTesting - SafetyCenterResourcesContext( + SafetyCenterResourcesApk( Context context, String resourcesApkAction, String resourcesApkPath, @@ -114,11 +114,11 @@ public final class SafetyCenterResourcesContext { mShouldFallbackIfNamedResourceNotFound = shouldFallbackIfNamedResourceNotFound; } - /** Creates a new {@link SafetyCenterResourcesContext} for testing. */ + /** Creates a new {@link SafetyCenterResourcesApk} for testing. */ @VisibleForTesting - public static SafetyCenterResourcesContext forTests(Context contextBase) { - return new SafetyCenterResourcesContext( - contextBase, /* shouldFallbackIfNamedResourceNotFound */ false); + public static SafetyCenterResourcesApk forTests(Context context) { + return new SafetyCenterResourcesApk( + context, /* shouldFallbackIfNamedResourceNotFound */ false); } /** @@ -140,7 +140,7 @@ public final class SafetyCenterResourcesContext { * *

Throws an {@link IllegalStateException} if the resources APK is not available */ - public Context getResourcesApkContext() { + public Context getContext() { if (mResourcesApkContext != null) { return mResourcesApkContext; } @@ -213,7 +213,7 @@ public final class SafetyCenterResourcesContext { /** Calls {@link Context#getResources()} for the resources APK {@link Context}. */ public Resources getResources() { - return getResourcesApkContext().getResources(); + return getContext().getResources(); } /** @@ -228,21 +228,21 @@ public final class SafetyCenterResourcesContext { @VisibleForTesting @Nullable InputStream getSafetyCenterConfig(String configName) { - int id = getResIdAndMaybeThrowIfNull(configName, "raw"); - if (id == Resources.ID_NULL) { + int resId = getResIdAndMaybeThrowIfNull(configName, "raw"); + if (resId == Resources.ID_NULL) { return null; } - return getResources().openRawResource(id); + return getResources().openRawResource(resId); } /** Calls {@link Context#getString(int)} for the resources APK {@link Context}. */ public String getString(@StringRes int stringId) { - return getResourcesApkContext().getString(stringId); + return getContext().getString(stringId); } /** Same as {@link #getString(int)} but with the given {@code formatArgs}. */ public String getString(@StringRes int stringId, Object... formatArgs) { - return getResourcesApkContext().getString(stringId, formatArgs); + return getContext().getString(stringId, formatArgs); } /** @@ -317,7 +317,7 @@ public final class SafetyCenterResourcesContext { if (resId == Resources.ID_NULL) { return null; } - return Icon.createWithResource(getResourcesApkContext().getPackageName(), resId); + return Icon.createWithResource(getContext().getPackageName(), resId); } /** @@ -333,7 +333,7 @@ public final class SafetyCenterResourcesContext { if (resId == Resources.ID_NULL) { return null; } - return getResources().getColor(resId, getResourcesApkContext().getTheme()); + return getResources().getColor(resId, getContext().getTheme()); } private int getResIdAndMaybeThrowIfNull(String name, String type) { @@ -351,6 +351,6 @@ public final class SafetyCenterResourcesContext { private int getResId(String name, String type) { // TODO(b/227738283): profile the performance of this operation and consider adding caching // or finding some alternative solution. - return getResources().getIdentifier(name, type, getResourcesApkContext().getPackageName()); + return getResources().getIdentifier(name, type, getContext().getPackageName()); } } diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesApkTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesApkTest.kt new file mode 100644 index 0000000000..b52595b134 --- /dev/null +++ b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesApkTest.kt @@ -0,0 +1,440 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.safetycenter.resources + +import android.content.Context +import android.content.pm.PackageManager +import android.content.res.Resources +import androidx.test.core.app.ApplicationProvider.getApplicationContext +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import java.lang.IllegalStateException +import kotlin.test.assertFailsWith +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SafetyCenterResourcesApkTest { + private val context: Context = getApplicationContext() + + @Test + fun init_withValidInputs_returnsTrue() { + val resourcesApk = newSafetyCenterResourcesApk() + + val initialized = resourcesApk.init() + + assertThat(initialized).isTrue() + } + + @Test + fun init_withWrongAction_returnsFalse() { + val resourcesApk = newSafetyCenterResourcesApk(resourcesApkAction = "wrong") + + val initialized = resourcesApk.init() + + assertThat(initialized).isFalse() + } + + @Test + fun init_withWrongPath_returnsFalse() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkPath = "/apex/com.android.permission") + + val initialized = resourcesApk.init() + + assertThat(initialized).isFalse() + } + + @Test + fun init_withWrongFlags_returnsFalse() { + val resourcesApk = newSafetyCenterResourcesApk(flags = PackageManager.MATCH_SYSTEM_ONLY) + + val initialized = resourcesApk.init() + + assertThat(initialized).isFalse() + } + + @Test + fun getContext_withValidInputs_returnsResourcesApkContext() { + val resourcesApk = newSafetyCenterResourcesApk() + + val resourcesApkContext = resourcesApk.context + + assertThat(resourcesApkContext.packageName).isEqualTo(RESOURCES_APK_PKG_NAME) + } + + @Test + fun getContext_withWrongAction_throws() { + val resourcesApk = newSafetyCenterResourcesApk(resourcesApkAction = "wrong") + + assertFailsWith(IllegalStateException::class) { resourcesApk.context } + } + + @Test + fun getContext_withWrongPath_throws() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkPath = "/apex/com.android.permission") + + assertFailsWith(IllegalStateException::class) { resourcesApk.context } + } + + @Test + fun getContext_withWrongFlags_throws() { + val resourcesApk = newSafetyCenterResourcesApk(flags = PackageManager.MATCH_SYSTEM_ONLY) + + assertFailsWith(IllegalStateException::class) { resourcesApk.context } + } + + @Test + fun getResources_withValidInputs_returnsResourcesApkContextResources() { + val resourcesApk = newSafetyCenterResourcesApk() + + val resources = resourcesApk.resources + + assertThat(resources).isEqualTo(resourcesApk.context.resources) + } + + @Test + fun getResources_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { resourcesApk.resources } + } + + @Test + fun getSafetyCenterConfig_withValidInputs_returnsConfigContent() { + val resourcesApk = newSafetyCenterResourcesApk() + + val config = resourcesApk.safetyCenterConfig + val configContent = config?.bufferedReader().use { it?.readText() } + + assertThat(config).isNotNull() + assertThat(configContent).isEqualTo(CONFIG_CONTENT) + } + + @Test + fun getSafetyCenterConfig_anotherValidConfigName_returnsConfigContent() { + val resourcesApk = newSafetyCenterResourcesApk() + + val config = resourcesApk.getSafetyCenterConfig(CONFIG_NAME) + val configContent = config?.bufferedReader().use { it?.readText() } + + assertThat(config).isNotNull() + assertThat(configContent).isEqualTo(CONFIG_CONTENT) + } + + @Test + fun getSafetyCenterConfig_invalidConfigNameWithFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getSafetyCenterConfig("wrong")).isNull() + } + + @Test + fun getSafetyCenterConfig_invalidConfigNameWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getSafetyCenterConfig("wrong") + } + } + + @Test + fun getSafetyCenterConfig_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { resourcesApk.safetyCenterConfig } + } + + @Test + fun getString_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + val ok = resourcesApk.getString(android.R.string.ok) + + assertThat(ok).isEqualTo("OK") + } + + @Test + fun getString_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getString(android.R.string.ok) + } + } + + @Test + fun getStringWithFormatArgs_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + val ok = resourcesApk.getString(android.R.string.ok, "") + + assertThat(ok).isEqualTo("OK") + } + + @Test + fun getStringWithFormatArgs_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getString(android.R.string.ok, "") + } + } + + @Test + fun getStringByName_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getStringByName("valid_string")).isEqualTo("I exist!") + } + + @Test + fun getStringByName_invalidStringWithFallback_returnsEmptyString() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getStringByName("invalid_string")).isEqualTo("") + } + + @Test + fun getStringByName_invalidStringWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getStringByName("invalid_string") + } + } + + @Test + fun getStringByName_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getStringByName("valid_string") + } + } + + @Test + fun getStringByNameWithFormatArgs_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getStringByName("valid_string", "")).isEqualTo("I exist!") + } + + @Test + fun getStringByNameWithFormatArgs_invalidStringWithFallback_returnsEmptyString() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getStringByName("invalid_string", "")).isEqualTo("") + } + + @Test + fun getStringByNameWithFormatArgs_invalidStringWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getStringByName("invalid_string", "") + } + } + + @Test + fun getStringByNameWithFormatArgs_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getStringByName("valid_string", "") + } + } + + @Test + fun getOptionalString_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + val ok = resourcesApk.getOptionalString(android.R.string.ok) + + assertThat(ok).isEqualTo("OK") + } + + @Test + fun getOptionalString_resourceIdNull_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk() + + val string = resourcesApk.getOptionalString(Resources.ID_NULL) + + assertThat(string).isNull() + } + + @Test + fun getOptionalString_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getOptionalString(android.R.string.ok) + } + } + + @Test + fun getOptionalStringByName_validString_returnsString() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getOptionalStringByName("valid_string")).isEqualTo("I exist!") + } + + @Test + fun getOptionalStringByName_invalidStringWithFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getOptionalStringByName("invalid_string")).isNull() + } + + @Test + fun getOptionalStringByName_invalidStringWithoutFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertThat(resourcesApk.getOptionalStringByName("invalid_string")).isNull() + } + + @Test + fun getOptionalStringByName_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getOptionalStringByName("valid_string") + } + } + + @Test + fun getDrawableByName_validDrawable_returnsDrawable() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getDrawableByName("valid_drawable", context.theme)).isNotNull() + } + + @Test + fun getDrawableByName_invalidDrawableWithFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getDrawableByName("invalid_drawable", context.theme)).isNull() + } + + @Test + fun getDrawableByName_invalidDrawableWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getDrawableByName("invalid_drawable", context.theme) + } + } + + @Test + fun getDrawableByName_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getDrawableByName("valid_drawable", context.theme) + } + } + + @Test + fun getIconByDrawableName_validDrawable_returnsIcon() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getIconByDrawableName("valid_drawable")).isNotNull() + } + + @Test + fun getIconByDrawableName_invalidDrawableWithFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getIconByDrawableName("invalid_drawable")).isNull() + } + + @Test + fun getIconByDrawableName_invalidDrawableWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getIconByDrawableName("invalid_drawable") + } + } + + @Test + fun getIconByDrawableByName_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { + resourcesApk.getIconByDrawableName("valid_drawable") + } + } + + @Test + fun getColorByName_validColor_returnsColor() { + val resourcesApk = newSafetyCenterResourcesApk() + + assertThat(resourcesApk.getColorByName("valid_color")).isNotNull() + } + + @Test + fun getColorByName_invalidColorWithFallback_returnsNull() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = true) + + assertThat(resourcesApk.getColorByName("invalid_color")).isNull() + } + + @Test + fun getColorByName_invalidColorWithoutFallback_throws() { + val resourcesApk = newSafetyCenterResourcesApk(fallback = false) + + assertFailsWith(Resources.NotFoundException::class) { + resourcesApk.getColorByName("invalid_color") + } + } + + @Test + fun getColorByName_nullContext_throwsRegardlessOfFallback() { + val resourcesApk = + newSafetyCenterResourcesApk(resourcesApkAction = "wrong", fallback = true) + + assertFailsWith(IllegalStateException::class) { resourcesApk.getColorByName("valid_color") } + } + + private fun newSafetyCenterResourcesApk( + resourcesApkAction: String = RESOURCES_APK_ACTION, + resourcesApkPath: String = "", + flags: Int = 0, + fallback: Boolean = false + ) = SafetyCenterResourcesApk(context, resourcesApkAction, resourcesApkPath, flags, fallback) + + companion object { + const val RESOURCES_APK_ACTION = + "com.android.safetycenter.tests.intent.action.SAFETY_CENTER_TEST_RESOURCES_APK" + const val RESOURCES_APK_PKG_NAME = + "com.android.safetycenter.tests.config.safetycenterresourceslibtestresources" + const val CONFIG_NAME = "test" + const val CONFIG_CONTENT = "TEST" + } +} diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt deleted file mode 100644 index 33ff7543e6..0000000000 --- a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.safetycenter.resources - -import android.content.Context -import android.content.pm.PackageManager -import android.content.res.Resources -import androidx.test.core.app.ApplicationProvider.getApplicationContext -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.google.common.truth.Truth.assertThat -import java.lang.IllegalStateException -import kotlin.test.assertFailsWith -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class SafetyCenterResourcesContextTest { - private val context: Context = getApplicationContext() - - @Test - fun init_withValidInputs_returnsTrue() { - val resourcesContext = createNewResourcesContext() - - val initialized = resourcesContext.init() - - assertThat(initialized).isTrue() - } - - @Test - fun init_withWrongAction_returnsFalse() { - val resourcesContext = createNewResourcesContext(resourcesApkAction = "wrong") - - val initialized = resourcesContext.init() - - assertThat(initialized).isFalse() - } - - @Test - fun init_withWrongPath_returnsFalse() { - val resourcesContext = - createNewResourcesContext(resourcesApkPath = "/apex/com.android.permission") - - val initialized = resourcesContext.init() - - assertThat(initialized).isFalse() - } - - @Test - fun init_withWrongFlags_returnsFalse() { - val resourcesContext = createNewResourcesContext(flags = PackageManager.MATCH_SYSTEM_ONLY) - - val initialized = resourcesContext.init() - - assertThat(initialized).isFalse() - } - - @Test - fun getResourcesApkContext_withValidInputs_returnsResourcesApkContext() { - val resourcesContext = createNewResourcesContext() - - val resourcesApkContext = resourcesContext.resourcesApkContext - - assertThat(resourcesApkContext.packageName).isEqualTo(RESOURCES_APK_PKG_NAME) - } - - @Test - fun getResourcesApkContext_withWrongAction_throws() { - val resourcesContext = createNewResourcesContext(resourcesApkAction = "wrong") - - assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } - } - - @Test - fun getResourcesApkContext_withWrongPath_throws() { - val resourcesContext = - createNewResourcesContext(resourcesApkPath = "/apex/com.android.permission") - - assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } - } - - @Test - fun getResourcesApkContext_withWrongFlags_throws() { - val resourcesContext = createNewResourcesContext(flags = PackageManager.MATCH_SYSTEM_ONLY) - - assertFailsWith(IllegalStateException::class) { resourcesContext.resourcesApkContext } - } - - @Test - fun getResources_withValidInputs_returnsResourcesApkContextResources() { - val resourcesContext = createNewResourcesContext() - - val resources = resourcesContext.resources - - assertThat(resources).isEqualTo(resourcesContext.resourcesApkContext.resources) - } - - @Test - fun getResources_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { resourcesContext.resources } - } - - @Test - fun getSafetyCenterConfig_withValidInputs_returnsConfigContent() { - val resourcesContext = createNewResourcesContext() - - val config = resourcesContext.safetyCenterConfig - val configContent = config?.bufferedReader().use { it?.readText() } - - assertThat(config).isNotNull() - assertThat(configContent).isEqualTo(CONFIG_CONTENT) - } - - @Test - fun getSafetyCenterConfig_anotherValidConfigName_returnsConfigContent() { - val resourcesContext = createNewResourcesContext() - - val config = resourcesContext.getSafetyCenterConfig(CONFIG_NAME) - val configContent = config?.bufferedReader().use { it?.readText() } - - assertThat(config).isNotNull() - assertThat(configContent).isEqualTo(CONFIG_CONTENT) - } - - @Test - fun getSafetyCenterConfig_invalidConfigNameWithFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getSafetyCenterConfig("wrong")).isNull() - } - - @Test - fun getSafetyCenterConfig_invalidConfigNameWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getSafetyCenterConfig("wrong") - } - } - - @Test - fun getSafetyCenterConfig_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { resourcesContext.safetyCenterConfig } - } - - @Test - fun getString_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - val ok = resourcesContext.getString(android.R.string.ok) - - assertThat(ok).isEqualTo("OK") - } - - @Test - fun getString_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getString(android.R.string.ok) - } - } - - @Test - fun getStringWithFormatArgs_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - val ok = resourcesContext.getString(android.R.string.ok, "") - - assertThat(ok).isEqualTo("OK") - } - - @Test - fun getStringWithFormatArgs_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getString(android.R.string.ok, "") - } - } - - @Test - fun getStringByName_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getStringByName("valid_string")).isEqualTo("I exist!") - } - - @Test - fun getStringByName_invalidStringWithFallback_returnsEmptyString() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getStringByName("invalid_string")).isEqualTo("") - } - - @Test - fun getStringByName_invalidStringWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getStringByName("invalid_string") - } - } - - @Test - fun getStringByName_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getStringByName("valid_string") - } - } - - @Test - fun getStringByNameWithFormatArgs_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getStringByName("valid_string", "")).isEqualTo("I exist!") - } - - @Test - fun getStringByNameWithFormatArgs_invalidStringWithFallback_returnsEmptyString() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getStringByName("invalid_string", "")).isEqualTo("") - } - - @Test - fun getStringByNameWithFormatArgs_invalidStringWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getStringByName("invalid_string", "") - } - } - - @Test - fun getStringByNameWithFormatArgs_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getStringByName("valid_string", "") - } - } - - @Test - fun getOptionalString_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - val ok = resourcesContext.getOptionalString(android.R.string.ok) - - assertThat(ok).isEqualTo("OK") - } - - @Test - fun getOptionalString_resourceIdNull_returnsNull() { - val resourcesContext = createNewResourcesContext() - - val string = resourcesContext.getOptionalString(Resources.ID_NULL) - - assertThat(string).isNull() - } - - @Test - fun getOptionalString_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getOptionalString(android.R.string.ok) - } - } - - @Test - fun getOptionalStringByName_validString_returnsString() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getOptionalStringByName("valid_string")).isEqualTo("I exist!") - } - - @Test - fun getOptionalStringByName_invalidStringWithFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getOptionalStringByName("invalid_string")).isNull() - } - - @Test - fun getOptionalStringByName_invalidStringWithoutFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertThat(resourcesContext.getOptionalStringByName("invalid_string")).isNull() - } - - @Test - fun getOptionalStringByName_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getOptionalStringByName("valid_string") - } - } - - @Test - fun getDrawableByName_validDrawable_returnsDrawable() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getDrawableByName("valid_drawable", context.theme)).isNotNull() - } - - @Test - fun getDrawableByName_invalidDrawableWithFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getDrawableByName("invalid_drawable", context.theme)).isNull() - } - - @Test - fun getDrawableByName_invalidDrawableWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getDrawableByName("invalid_drawable", context.theme) - } - } - - @Test - fun getDrawableByName_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getDrawableByName("valid_drawable", context.theme) - } - } - - @Test - fun getIconByDrawableName_validDrawable_returnsIcon() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getIconByDrawableName("valid_drawable")).isNotNull() - } - - @Test - fun getIconByDrawableName_invalidDrawableWithFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getIconByDrawableName("invalid_drawable")).isNull() - } - - @Test - fun getIconByDrawableName_invalidDrawableWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getIconByDrawableName("invalid_drawable") - } - } - - @Test - fun getIconByDrawableByName_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getIconByDrawableName("valid_drawable") - } - } - - @Test - fun getColorByName_validColor_returnsColor() { - val resourcesContext = createNewResourcesContext() - - assertThat(resourcesContext.getColorByName("valid_color")).isNotNull() - } - - @Test - fun getColorByName_invalidColorWithFallback_returnsNull() { - val resourcesContext = createNewResourcesContext(fallback = true) - - assertThat(resourcesContext.getColorByName("invalid_color")).isNull() - } - - @Test - fun getColorByName_invalidColorWithoutFallback_throws() { - val resourcesContext = createNewResourcesContext(fallback = false) - - assertFailsWith(Resources.NotFoundException::class) { - resourcesContext.getColorByName("invalid_color") - } - } - - @Test - fun getColorByName_nullContext_throwsRegardlessOfFallback() { - val resourcesContext = - createNewResourcesContext(resourcesApkAction = "wrong", fallback = true) - - assertFailsWith(IllegalStateException::class) { - resourcesContext.getColorByName("valid_color") - } - } - - private fun createNewResourcesContext( - resourcesApkAction: String = RESOURCES_APK_ACTION, - resourcesApkPath: String = "", - flags: Int = 0, - fallback: Boolean = false - ) = SafetyCenterResourcesContext(context, resourcesApkAction, resourcesApkPath, flags, fallback) - - companion object { - const val RESOURCES_APK_ACTION = - "com.android.safetycenter.tests.intent.action.SAFETY_CENTER_TEST_RESOURCES_APK" - const val RESOURCES_APK_PKG_NAME = - "com.android.safetycenter.tests.config.safetycenterresourceslibtestresources" - const val CONFIG_NAME = "test" - const val CONFIG_CONTENT = "TEST" - } -} diff --git a/service/java/com/android/safetycenter/DevicePolicyResources.java b/service/java/com/android/safetycenter/DevicePolicyResources.java index 2368425f72..da51b0190e 100644 --- a/service/java/com/android/safetycenter/DevicePolicyResources.java +++ b/service/java/com/android/safetycenter/DevicePolicyResources.java @@ -28,7 +28,7 @@ import android.os.Binder; import androidx.annotation.RequiresApi; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.util.function.Supplier; @@ -46,31 +46,30 @@ final class DevicePolicyResources { * DevicePolicyResourcesManager#getString}. */ static String getSafetySourceWorkString( - SafetyCenterResourcesContext safetyCenterResourcesContext, + SafetyCenterResourcesApk safetyCenterResourcesApk, String safetySourceId, @StringRes int workResId) { return getEnterpriseString( - safetyCenterResourcesContext.getResourcesApkContext(), + safetyCenterResourcesApk.getContext(), safetySourceId, - () -> safetyCenterResourcesContext.getString(workResId)); + () -> safetyCenterResourcesApk.getString(workResId)); } /** * Returns the updated string for the {@code work_profile_paused} string by calling {@link * DevicePolicyResourcesManager#getString}. */ - static String getWorkProfilePausedString( - SafetyCenterResourcesContext safetyCenterResourcesContext) { + static String getWorkProfilePausedString(SafetyCenterResourcesApk safetyCenterResourcesApk) { return getEnterpriseString( - safetyCenterResourcesContext.getResourcesApkContext(), + safetyCenterResourcesApk.getContext(), WORK_PROFILE_PAUSED_TITLE, - () -> safetyCenterResourcesContext.getStringByName("work_profile_paused")); + () -> safetyCenterResourcesApk.getStringByName("work_profile_paused")); } private static String getEnterpriseString( Context context, String devicePolicyIdentifier, Supplier defaultValueLoader) { // This call requires the caller’s identity to match the package name of the given context. - // However, the SafetyCenterResourcesContext’s has package name "android", which does not + // However, the SafetyCenterResourceApk Context's has package name "android", which does not // necessarily match the caller’s package when making Binder calls, so the calling identity // has to be cleared. final long callingId = Binder.clearCallingIdentity(); diff --git a/service/java/com/android/safetycenter/PendingIntentFactory.java b/service/java/com/android/safetycenter/PendingIntentFactory.java index 4f54e0b822..da9915968d 100644 --- a/service/java/com/android/safetycenter/PendingIntentFactory.java +++ b/service/java/com/android/safetycenter/PendingIntentFactory.java @@ -34,7 +34,7 @@ import android.util.Log; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.util.Arrays; @@ -53,12 +53,11 @@ public final class PendingIntentFactory { private static final String IS_SETTINGS_HOMEPAGE = "is_from_settings_homepage"; private final Context mContext; - private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; - PendingIntentFactory( - Context context, SafetyCenterResourcesContext safetyCenterResourcesContext) { + PendingIntentFactory(Context context, SafetyCenterResourcesApk safetyCenterResourcesApk) { mContext = context; - mSafetyCenterResourcesContext = safetyCenterResourcesContext; + mSafetyCenterResourcesApk = safetyCenterResourcesApk; } /** @@ -146,7 +145,7 @@ public final class PendingIntentFactory { private boolean shouldAddSettingsHomepageExtra(String sourceId) { return Arrays.asList( - mSafetyCenterResourcesContext + mSafetyCenterResourcesApk .getStringByName("config_useSettingsHomepageIntentExtra") .split(",")) .contains(sourceId); diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index 49417369a9..bbd35eb5e8 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -33,7 +33,7 @@ import androidx.annotation.RequiresApi; import com.android.safetycenter.config.ParseException; import com.android.safetycenter.config.SafetyCenterConfigParser; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.io.InputStream; import java.io.PrintWriter; @@ -56,15 +56,15 @@ public final class SafetyCenterConfigReader { private static final String TAG = "SafetyCenterConfigReade"; - private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; @Nullable private SafetyCenterConfigInternal mConfigInternalFromXml; @Nullable private SafetyCenterConfigInternal mConfigInternalOverrideForTests; - /** Creates a {@link SafetyCenterConfigReader} from a {@link SafetyCenterResourcesContext}. */ - SafetyCenterConfigReader(SafetyCenterResourcesContext safetyCenterResourcesContext) { - mSafetyCenterResourcesContext = safetyCenterResourcesContext; + /** Creates a {@link SafetyCenterConfigReader} from a {@link SafetyCenterResourcesApk}. */ + SafetyCenterConfigReader(SafetyCenterResourcesApk safetyCenterResourcesApk) { + mSafetyCenterResourcesApk = safetyCenterResourcesApk; } /** @@ -226,13 +226,13 @@ public final class SafetyCenterConfigReader { @Nullable private SafetyCenterConfig loadSafetyCenterConfig() { - InputStream in = mSafetyCenterResourcesContext.getSafetyCenterConfig(); + InputStream in = mSafetyCenterResourcesApk.getSafetyCenterConfig(); if (in == null) { Log.e(TAG, "Cannot access Safety Center config file"); return null; } - Resources resources = mSafetyCenterResourcesContext.getResources(); + Resources resources = mSafetyCenterResourcesApk.getResources(); try { SafetyCenterConfig safetyCenterConfig = SafetyCenterConfigParser.parseXmlResource(in, resources); diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index 69c8a58c96..198ce1631e 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -63,7 +63,7 @@ import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; import com.android.safetycenter.internaldata.SafetyCenterIssueId; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.util.ArrayList; import java.util.List; @@ -89,7 +89,7 @@ public final class SafetyCenterDataFactory { private static final String ANDROID_LOCK_SCREEN_SOURCES_GROUP_ID = "AndroidLockScreenSources"; private final Context mContext; - private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; private final SafetyCenterConfigReader mSafetyCenterConfigReader; private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; private final PendingIntentFactory mPendingIntentFactory; @@ -98,13 +98,13 @@ public final class SafetyCenterDataFactory { SafetyCenterDataFactory( Context context, - SafetyCenterResourcesContext safetyCenterResourcesContext, + SafetyCenterResourcesApk safetyCenterResourcesApk, SafetyCenterConfigReader safetyCenterConfigReader, SafetyCenterRefreshTracker safetyCenterRefreshTracker, PendingIntentFactory pendingIntentFactory, SafetyCenterDataManager safetyCenterDataManager) { mContext = context; - mSafetyCenterResourcesContext = safetyCenterResourcesContext; + mSafetyCenterResourcesApk = safetyCenterResourcesApk; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; mPendingIntentFactory = pendingIntentFactory; @@ -336,7 +336,7 @@ public final class SafetyCenterDataFactory { if (SdkLevel.isAtLeastU()) { CharSequence issueAttributionTitle = TextUtils.isEmpty(safetySourceIssue.getAttributionTitle()) - ? mSafetyCenterResourcesContext.getOptionalString( + ? mSafetyCenterResourcesApk.getOptionalString( safetySourcesGroup.getTitleResId()) : safetySourceIssue.getAttributionTitle(); safetyCenterIssueBuilder.setAttributionTitle(issueAttributionTitle); @@ -445,7 +445,7 @@ public final class SafetyCenterDataFactory { new SafetyCenterEntryOrGroup( new SafetyCenterEntryGroup.Builder( safetySourcesGroup.getId(), - mSafetyCenterResourcesContext.getString( + mSafetyCenterResourcesApk.getString( safetySourcesGroup.getTitleResId())) .setSeverityLevel(groupSafetyCenterEntryLevel) .setSummary(groupSummary) @@ -514,7 +514,7 @@ public final class SafetyCenterDataFactory { return getRefreshErrorString(); } } - return mSafetyCenterResourcesContext.getStringByName("group_unknown_summary"); + return mSafetyCenterResourcesApk.getStringByName("group_unknown_summary"); } Log.w( @@ -528,8 +528,7 @@ public final class SafetyCenterDataFactory { private CharSequence getDefaultGroupSummary( SafetySourcesGroup safetySourcesGroup, List entries) { CharSequence groupSummary = - mSafetyCenterResourcesContext.getOptionalString( - safetySourcesGroup.getSummaryResId()); + mSafetyCenterResourcesApk.getOptionalString(safetySourcesGroup.getSummaryResId()); if (safetySourcesGroup.getId().equals(ANDROID_LOCK_SCREEN_SOURCES_GROUP_ID) && TextUtils.isEmpty(groupSummary)) { @@ -648,7 +647,7 @@ public final class SafetyCenterDataFactory { .setSummary( inQuietMode ? DevicePolicyResources.getWorkProfilePausedString( - mSafetyCenterResourcesContext) + mSafetyCenterResourcesApk) : safetySourceStatus.getSummary()) .setEnabled(enabled) .setSeverityUnspecifiedIconType(severityUnspecifiedIconType) @@ -709,20 +708,19 @@ public final class SafetyCenterDataFactory { CharSequence title = isUserManaged ? DevicePolicyResources.getSafetySourceWorkString( - mSafetyCenterResourcesContext, + mSafetyCenterResourcesApk, safetySource.getId(), safetySource.getTitleForWorkResId()) - : mSafetyCenterResourcesContext.getString(safetySource.getTitleResId()); + : mSafetyCenterResourcesApk.getString(safetySource.getTitleResId()); CharSequence summary = mSafetyCenterDataManager.sourceHasError( SafetySourceKey.of(safetySource.getId(), userId)) ? getRefreshErrorString() - : mSafetyCenterResourcesContext.getOptionalString( + : mSafetyCenterResourcesApk.getOptionalString( safetySource.getSummaryResId()); if (isQuietModeEnabled) { enabled = false; - summary = - DevicePolicyResources.getWorkProfilePausedString(mSafetyCenterResourcesContext); + summary = DevicePolicyResources.getWorkProfilePausedString(mSafetyCenterResourcesApk); } return new SafetyCenterEntry.Builder( SafetyCenterIds.encodeToString(safetyCenterEntryId), title) @@ -784,7 +782,7 @@ public final class SafetyCenterDataFactory { safetyCenterStaticEntryGroups.add( new SafetyCenterStaticEntryGroup( - mSafetyCenterResourcesContext.getString(safetySourcesGroup.getTitleResId()), + mSafetyCenterResourcesApk.getString(safetySourcesGroup.getTitleResId()), staticEntries)); } @@ -863,7 +861,7 @@ public final class SafetyCenterDataFactory { .setSummary( inQuietMode ? DevicePolicyResources.getWorkProfilePausedString( - mSafetyCenterResourcesContext) + mSafetyCenterResourcesApk) : safetySourceStatus.getSummary()) .setPendingIntent(entryPendingIntent) .build(); @@ -913,19 +911,18 @@ public final class SafetyCenterDataFactory { CharSequence title = isUserManaged ? DevicePolicyResources.getSafetySourceWorkString( - mSafetyCenterResourcesContext, + mSafetyCenterResourcesApk, safetySource.getId(), safetySource.getTitleForWorkResId()) - : mSafetyCenterResourcesContext.getString(safetySource.getTitleResId()); + : mSafetyCenterResourcesApk.getString(safetySource.getTitleResId()); CharSequence summary = mSafetyCenterDataManager.sourceHasError( SafetySourceKey.of(safetySource.getId(), userId)) ? getRefreshErrorString() - : mSafetyCenterResourcesContext.getOptionalString( + : mSafetyCenterResourcesApk.getOptionalString( safetySource.getSummaryResId()); if (isQuietModeEnabled) { - summary = - DevicePolicyResources.getWorkProfilePausedString(mSafetyCenterResourcesContext); + summary = DevicePolicyResources.getWorkProfilePausedString(mSafetyCenterResourcesApk); } return new SafetyCenterStaticEntry.Builder(title) .setSummary(summary) @@ -1087,11 +1084,10 @@ public final class SafetyCenterDataFactory { case SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_UNKNOWN: case SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_OK: if (hasSettingsToReview) { - return mSafetyCenterResourcesContext.getStringByName( + return mSafetyCenterResourcesApk.getStringByName( "overall_severity_level_ok_review_title"); } - return mSafetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_title"); + return mSafetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"); case SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_RECOMMENDATION: return getStatusTitleFromIssueCategories( topNonDismissedIssueInfo, @@ -1125,7 +1121,7 @@ public final class SafetyCenterDataFactory { String dataResourceName, String passwordsResourceName, String personalSafetyResourceName) { - String generalString = mSafetyCenterResourcesContext.getStringByName(generalResourceName); + String generalString = mSafetyCenterResourcesApk.getStringByName(generalResourceName); if (topNonDismissedIssueInfo == null) { Log.w(TAG, "No safety center issues found in a non-green status"); return generalString; @@ -1133,17 +1129,17 @@ public final class SafetyCenterDataFactory { int issueCategory = topNonDismissedIssueInfo.getSafetySourceIssue().getIssueCategory(); switch (issueCategory) { case SafetySourceIssue.ISSUE_CATEGORY_DEVICE: - return mSafetyCenterResourcesContext.getStringByName(deviceResourceName); + return mSafetyCenterResourcesApk.getStringByName(deviceResourceName); case SafetySourceIssue.ISSUE_CATEGORY_ACCOUNT: - return mSafetyCenterResourcesContext.getStringByName(accountResourceName); + return mSafetyCenterResourcesApk.getStringByName(accountResourceName); case SafetySourceIssue.ISSUE_CATEGORY_GENERAL: return generalString; case SafetySourceIssue.ISSUE_CATEGORY_DATA: - return mSafetyCenterResourcesContext.getStringByName(dataResourceName); + return mSafetyCenterResourcesApk.getStringByName(dataResourceName); case SafetySourceIssue.ISSUE_CATEGORY_PASSWORDS: - return mSafetyCenterResourcesContext.getStringByName(passwordsResourceName); + return mSafetyCenterResourcesApk.getStringByName(passwordsResourceName); case SafetySourceIssue.ISSUE_CATEGORY_PERSONAL_SAFETY: - return mSafetyCenterResourcesContext.getStringByName(personalSafetyResourceName); + return mSafetyCenterResourcesApk.getStringByName(personalSafetyResourceName); } Log.w(TAG, "Unexpected SafetySourceIssue.IssueCategory: " + issueCategory); @@ -1167,17 +1163,17 @@ public final class SafetyCenterDataFactory { case SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_OK: if (topNonDismissedIssue == null) { if (safetyCenterOverallState.hasSettingsToReview()) { - return mSafetyCenterResourcesContext.getStringByName( + return mSafetyCenterResourcesApk.getStringByName( "overall_severity_level_ok_review_summary"); } - return mSafetyCenterResourcesContext.getStringByName( + return mSafetyCenterResourcesApk.getStringByName( "overall_severity_level_ok_summary"); } else if (isTip(topNonDismissedIssue.getSafetySourceIssue())) { - return mSafetyCenterResourcesContext.getStringByName( + return mSafetyCenterResourcesApk.getStringByName( "overall_severity_level_tip_summary", numTipIssues); } else if (isAutomatic(topNonDismissedIssue.getSafetySourceIssue())) { - return mSafetyCenterResourcesContext.getStringByName( + return mSafetyCenterResourcesApk.getStringByName( "overall_severity_level_action_taken_summary", numAutomaticIssues); } // Fall through. @@ -1209,7 +1205,7 @@ public final class SafetyCenterDataFactory { private String getIcuPluralsString(String name, int count, Object... formatArgs) { MessageFormat messageFormat = new MessageFormat( - mSafetyCenterResourcesContext.getStringByName(name, formatArgs), + mSafetyCenterResourcesApk.getStringByName(name, formatArgs), Locale.getDefault()); ArrayMap arguments = new ArrayMap<>(); arguments.put("count", count); @@ -1228,7 +1224,7 @@ public final class SafetyCenterDataFactory { } // Fall through. case SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS: - return mSafetyCenterResourcesContext.getStringByName("scanning_title"); + return mSafetyCenterResourcesApk.getStringByName("scanning_title"); } Log.w(TAG, "Unexpected SafetyCenterStatus.RefreshStatus: " + refreshStatus); @@ -1243,7 +1239,7 @@ public final class SafetyCenterDataFactory { return null; case SafetyCenterStatus.REFRESH_STATUS_DATA_FETCH_IN_PROGRESS: case SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS: - return mSafetyCenterResourcesContext.getStringByName("loading_summary"); + return mSafetyCenterResourcesApk.getStringByName("loading_summary"); } Log.w(TAG, "Unexpected SafetyCenterStatus.RefreshStatus: " + refreshStatus); diff --git a/service/java/com/android/safetycenter/SafetyCenterFlags.java b/service/java/com/android/safetycenter/SafetyCenterFlags.java index 62855f532f..018a5525e6 100644 --- a/service/java/com/android/safetycenter/SafetyCenterFlags.java +++ b/service/java/com/android/safetycenter/SafetyCenterFlags.java @@ -30,7 +30,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.io.PrintWriter; import java.time.Duration; @@ -134,24 +134,27 @@ public final class SafetyCenterFlags { private static volatile String sRefreshOnPageOpenSourcesDefault = "AndroidBiometrics,AndroidLockScreen"; - static void init(SafetyCenterResourcesContext resourceContext) { + static void init(SafetyCenterResourcesApk safetyCenterResourcesApk) { String untrackedSourcesDefault = - resourceContext.getOptionalStringByName("config_defaultUntrackedSources"); + safetyCenterResourcesApk.getOptionalStringByName("config_defaultUntrackedSources"); if (untrackedSourcesDefault != null) { sUntrackedSourcesDefault = untrackedSourcesDefault; } String backgroundRefreshDenyDefault = - resourceContext.getOptionalStringByName("config_defaultBackgroundRefreshDeny"); + safetyCenterResourcesApk.getOptionalStringByName( + "config_defaultBackgroundRefreshDeny"); if (backgroundRefreshDenyDefault != null) { sBackgroundRefreshDenyDefault = backgroundRefreshDenyDefault; } String issueCategoryAllowlistDefault = - resourceContext.getOptionalStringByName("config_defaultIssueCategoryAllowlist"); + safetyCenterResourcesApk.getOptionalStringByName( + "config_defaultIssueCategoryAllowlist"); if (issueCategoryAllowlistDefault != null) { sIssueCategoryAllowlistDefault = issueCategoryAllowlistDefault; } String refreshOnPageOpenSourcesDefault = - resourceContext.getOptionalStringByName("config_defaultRefreshOnPageOpenSources"); + safetyCenterResourcesApk.getOptionalStringByName( + "config_defaultRefreshOnPageOpenSources"); if (refreshOnPageOpenSourcesDefault != null) { sRefreshOnPageOpenSourcesDefault = refreshOnPageOpenSourcesDefault; } diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 2b1cd93be6..3270f0cea7 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -86,7 +86,7 @@ import com.android.safetycenter.notifications.SafetyCenterNotificationChannels; import com.android.safetycenter.notifications.SafetyCenterNotificationReceiver; import com.android.safetycenter.notifications.SafetyCenterNotificationSender; import com.android.safetycenter.pendingintents.PendingIntentSender; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import com.android.server.SystemService; import java.io.FileDescriptor; @@ -114,7 +114,7 @@ public final class SafetyCenterService extends SystemService { private final SafetyCenterTimeouts mSafetyCenterTimeouts = new SafetyCenterTimeouts(); @GuardedBy("mApiLock") - private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; @GuardedBy("mApiLock") private final SafetyCenterNotificationChannels mNotificationChannels; @@ -150,8 +150,8 @@ public final class SafetyCenterService extends SystemService { public SafetyCenterService(Context context) { super(context); - mSafetyCenterResourcesContext = new SafetyCenterResourcesContext(context); - mSafetyCenterConfigReader = new SafetyCenterConfigReader(mSafetyCenterResourcesContext); + mSafetyCenterResourcesApk = new SafetyCenterResourcesApk(context); + mSafetyCenterConfigReader = new SafetyCenterConfigReader(mSafetyCenterResourcesApk); mSafetyCenterRefreshTracker = new SafetyCenterRefreshTracker(context); mSafetyCenterDataManager = new SafetyCenterDataManager( @@ -159,17 +159,17 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterDataFactory = new SafetyCenterDataFactory( context, - mSafetyCenterResourcesContext, + mSafetyCenterResourcesApk, mSafetyCenterConfigReader, mSafetyCenterRefreshTracker, - new PendingIntentFactory(context, mSafetyCenterResourcesContext), + new PendingIntentFactory(context, mSafetyCenterResourcesApk), mSafetyCenterDataManager); mSafetyCenterListeners = new SafetyCenterListeners(mSafetyCenterDataFactory); - mNotificationChannels = new SafetyCenterNotificationChannels(mSafetyCenterResourcesContext); + mNotificationChannels = new SafetyCenterNotificationChannels(mSafetyCenterResourcesApk); mNotificationSender = SafetyCenterNotificationSender.newInstance( context, - mSafetyCenterResourcesContext, + mSafetyCenterResourcesApk, mNotificationChannels, mSafetyCenterDataManager); mSafetyCenterBroadcastDispatcher = @@ -197,13 +197,13 @@ public final class SafetyCenterService extends SystemService { } synchronized (mApiLock) { - boolean safetyCenterResourcesInitialized = mSafetyCenterResourcesContext.init(); + boolean safetyCenterResourcesInitialized = mSafetyCenterResourcesApk.init(); if (!safetyCenterResourcesInitialized) { Log.e(TAG, "Cannot init Safety Center resources, Safety Center will be disabled"); return; } - SafetyCenterFlags.init(mSafetyCenterResourcesContext); + SafetyCenterFlags.init(mSafetyCenterResourcesApk); if (!mSafetyCenterConfigReader.loadConfig()) { Log.e(TAG, "Cannot init Safety Center config, Safety Center will be disabled"); @@ -376,7 +376,7 @@ public final class SafetyCenterService extends SystemService { == SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED) { safetyCenterErrorDetails = new SafetyCenterErrorDetails( - mSafetyCenterResourcesContext.getStringByName( + mSafetyCenterResourcesApk.getStringByName( "resolving_action_error")); } if (hasUpdate) { @@ -921,8 +921,7 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterListeners.deliverErrorForUserProfileGroup( mUserProfileGroup, new SafetyCenterErrorDetails( - mSafetyCenterResourcesContext.getStringByName( - "refresh_timeout"))); + mSafetyCenterResourcesApk.getStringByName("refresh_timeout"))); } } } @@ -971,7 +970,7 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterListeners.deliverErrorForUserProfileGroup( mUserProfileGroup, new SafetyCenterErrorDetails( - mSafetyCenterResourcesContext.getStringByName( + mSafetyCenterResourcesApk.getStringByName( "resolving_action_error"))); Log.w( TAG, @@ -1177,10 +1176,9 @@ public final class SafetyCenterService extends SystemService { CharSequence errorMessage; if (safetySourceIssueAction.willResolve()) { errorMessage = - mSafetyCenterResourcesContext.getStringByName("resolving_action_error"); + mSafetyCenterResourcesApk.getStringByName("resolving_action_error"); } else { - errorMessage = - mSafetyCenterResourcesContext.getStringByName("redirecting_error"); + errorMessage = mSafetyCenterResourcesApk.getStringByName("redirecting_error"); } mSafetyCenterListeners.deliverErrorForUserProfileGroup( userProfileGroup, new SafetyCenterErrorDetails(errorMessage)); diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java index 4de16feb68..749e887f1a 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java @@ -34,7 +34,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.util.List; @@ -53,11 +53,10 @@ public final class SafetyCenterNotificationChannels { private static final String CHANNEL_ID_RECOMMENDATION = "safety_center_recommendation"; private static final String CHANNEL_ID_CRITICAL_WARNING = "safety_center_critical_warning"; - private final SafetyCenterResourcesContext mResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; - public SafetyCenterNotificationChannels( - SafetyCenterResourcesContext safetyCenterResourceContext) { - mResourcesContext = safetyCenterResourceContext; + public SafetyCenterNotificationChannels(SafetyCenterResourcesApk safetyCenterResourcesApk) { + mSafetyCenterResourcesApk = safetyCenterResourcesApk; } /** Returns a {@link NotificationManager} which will send notifications to the given user. */ @@ -219,6 +218,6 @@ public final class SafetyCenterNotificationChannels { } private String getString(String name) { - return mResourcesContext.getStringByName(name); + return mSafetyCenterResourcesApk.getStringByName(name); } } diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java index cc3d0c4f3f..4e88cf3204 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java @@ -46,7 +46,7 @@ import com.android.safetycenter.PendingIntentFactory; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.time.Duration; import java.util.List; @@ -63,15 +63,15 @@ final class SafetyCenterNotificationFactory { private final Context mContext; private final SafetyCenterNotificationChannels mNotificationChannels; - private final SafetyCenterResourcesContext mResourcesContext; + private final SafetyCenterResourcesApk mSafetyCenterResourcesApk; SafetyCenterNotificationFactory( Context context, SafetyCenterNotificationChannels notificationChannels, - SafetyCenterResourcesContext resourcesContext) { + SafetyCenterResourcesApk safetyCenterResourcesApk) { mContext = context; mNotificationChannels = notificationChannels; - mResourcesContext = resourcesContext; + mSafetyCenterResourcesApk = safetyCenterResourcesApk; } /** @@ -229,7 +229,7 @@ final class SafetyCenterNotificationFactory { if (severityLevel == SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING) { iconResName = "ic_notification_badge_critical"; } - Icon icon = mResourcesContext.getIconByDrawableName(iconResName); + Icon icon = mSafetyCenterResourcesApk.getIconByDrawableName(iconResName); if (icon == null) { // In case it was impossible to fetch the above drawable for any reason use this // fallback which should be present on all Android devices: @@ -245,12 +245,13 @@ final class SafetyCenterNotificationFactory { if (severityLevel == SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING) { colorResName = "notification_tint_critical"; } - return mResourcesContext.getColorByName(colorResName); + return mSafetyCenterResourcesApk.getColorByName(colorResName); } private Bundle getNotificationExtras() { Bundle extras = new Bundle(); - String appName = mResourcesContext.getStringByName("notification_channel_group_name"); + String appName = + mSafetyCenterResourcesApk.getStringByName("notification_channel_group_name"); if (!TextUtils.isEmpty(appName)) { extras.putString(Notification.EXTRA_SUBSTITUTE_APP_NAME, appName); } diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java index 90be3618ea..3804070d49 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java @@ -47,7 +47,7 @@ import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; import com.android.safetycenter.logging.SafetyCenterStatsdLogger; -import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.io.PrintWriter; import java.lang.annotation.Retention; @@ -120,13 +120,13 @@ public final class SafetyCenterNotificationSender { public static SafetyCenterNotificationSender newInstance( Context context, - SafetyCenterResourcesContext resourcesContext, + SafetyCenterResourcesApk safetyCenterResourcesApk, SafetyCenterNotificationChannels notificationChannels, SafetyCenterDataManager dataManager) { return new SafetyCenterNotificationSender( context, new SafetyCenterNotificationFactory( - context, notificationChannels, resourcesContext), + context, notificationChannels, safetyCenterResourcesApk), dataManager); } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 3288f71ffc..7c8c821787 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -40,7 +40,7 @@ import android.safetycenter.cts.testing.FakeExecutor import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SdkSuppress -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.addOnSafetyCenterDataChangedListenerWithPermission @@ -105,7 +105,7 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SafetyCenterManagerTest { private val context: Context = getApplicationContext() - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestConfigs = SafetyCenterTestConfigs(context) @@ -1314,7 +1314,7 @@ class SafetyCenterManagerTest { assertThat(safetyCenterErrorDetailsFromListener) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("refresh_timeout") + safetyCenterResourcesApk.getStringByName("refresh_timeout") ) ) } @@ -1378,7 +1378,7 @@ class SafetyCenterManagerTest { assertThat(safetyCenterErrorDetailsFromListener) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("refresh_timeout") + safetyCenterResourcesApk.getStringByName("refresh_timeout") ) ) } @@ -2054,7 +2054,7 @@ class SafetyCenterManagerTest { assertThat(error) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("redirecting_error") + safetyCenterResourcesApk.getStringByName("redirecting_error") ) ) } @@ -2080,7 +2080,7 @@ class SafetyCenterManagerTest { assertThat(error) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("resolving_action_error") + safetyCenterResourcesApk.getStringByName("resolving_action_error") ) ) } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt index 3a1503cc2a..3cf2563379 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt @@ -24,7 +24,7 @@ import android.safetycenter.config.SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.safetycenter.config.SafetyCenterConfigParser -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.getSafetyCenterConfigWithPermission import com.android.safetycenter.testing.SafetyCenterTestRule import com.android.safetycenter.testing.SupportsSafetyCenterRule @@ -38,7 +38,7 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class XmlConfigTest { private val context: Context = getApplicationContext() - private val safetyCenterContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java)!! @get:Rule(order = 1) val supportsSafetyCenterRule = SupportsSafetyCenterRule(context) @@ -85,8 +85,8 @@ class XmlConfigTest { private fun parseXmlConfig() = SafetyCenterConfigParser.parseXmlResource( - safetyCenterContext.safetyCenterConfig!!, - safetyCenterContext.resources + safetyCenterResourcesApk.safetyCenterConfig!!, + safetyCenterResourcesApk.resources ) companion object { diff --git a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt index c534a9fb03..7d22348b42 100644 --- a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt +++ b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt @@ -51,7 +51,7 @@ import com.android.bedstead.nene.TestApis import com.android.bedstead.nene.types.OptionalBoolean.TRUE import com.android.compatibility.common.util.DisableAnimationRule import com.android.compatibility.common.util.FreezeRotationRule -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.NotificationCharacteristics import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterActivity @@ -111,7 +111,7 @@ class SafetyCenterMultiUsersTest { } private val context: Context = ApplicationProvider.getApplicationContext() - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestData = SafetyCenterTestData(context) @@ -192,7 +192,7 @@ class SafetyCenterMultiUsersTest { // TODO(b/233188021): This needs to use the Enterprise API to override the "work" // keyword. .setSummary( - safetyCenterResourcesContext.getStringByName("work_profile_paused"), + safetyCenterResourcesApk.getStringByName("work_profile_paused"), ) .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNSPECIFIED) .setEnabled(false) @@ -219,7 +219,7 @@ class SafetyCenterMultiUsersTest { // TODO(b/233188021): This needs to use the Enterprise API to override the "work" // keyword. .setSummary( - safetyCenterResourcesContext.getStringByName("work_profile_paused"), + safetyCenterResourcesApk.getStringByName("work_profile_paused"), ) .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNSPECIFIED) .setEnabled(false) @@ -262,7 +262,7 @@ class SafetyCenterMultiUsersTest { staticAllOptionalForWorkBuilder(inQuietMode = true) // TODO(b/233188021): This needs to use the Enterprise API to override the "work" // keyword. - .setSummary(safetyCenterResourcesContext.getStringByName("work_profile_paused")) + .setSummary(safetyCenterResourcesApk.getStringByName("work_profile_paused")) .setEnabled(false) .build() @@ -299,7 +299,7 @@ class SafetyCenterMultiUsersTest { staticEntryForWorkBuilder(inQuietMode = true) // TODO(b/233188021): This needs to use the Enterprise API to override the "work" // keyword. - .setSummary(safetyCenterResourcesContext.getStringByName("work_profile_paused")) + .setSummary(safetyCenterResourcesApk.getStringByName("work_profile_paused")) .build() private val staticEntryForWorkPausedUpdated @@ -307,7 +307,7 @@ class SafetyCenterMultiUsersTest { staticEntryForWorkBuilder(title = "Unspecified title for Work", inQuietMode = true) // TODO(b/233188021): This needs to use the Enterprise API to override the "work" // keyword. - .setSummary(safetyCenterResourcesContext.getStringByName("work_profile_paused")) + .setSummary(safetyCenterResourcesApk.getStringByName("work_profile_paused")) .build() private val staticEntryForWorkUpdated = @@ -548,9 +548,7 @@ class SafetyCenterMultiUsersTest { SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) .setSummary( - safetyCenterResourcesContext.getStringByName( - "group_unknown_summary" - ) + safetyCenterResourcesApk.getStringByName("group_unknown_summary") ) .setEntries(listOf(dynamicBareboneDefault, dynamicDisabledDefault)) .setSeverityUnspecifiedIconType( @@ -586,9 +584,7 @@ class SafetyCenterMultiUsersTest { SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) .setSummary( - safetyCenterResourcesContext.getStringByName( - "group_unknown_summary" - ) + safetyCenterResourcesApk.getStringByName("group_unknown_summary") ) .setEntries( listOf( @@ -886,9 +882,7 @@ class SafetyCenterMultiUsersTest { SafetyCenterEntryGroup.Builder(SINGLE_SOURCE_GROUP_ID, "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) .setSummary( - safetyCenterResourcesContext.getStringByName( - "group_unknown_summary" - ) + safetyCenterResourcesApk.getStringByName("group_unknown_summary") ) .setEntries( listOf( diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt index 967f4296e7..c37f34d78e 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -70,7 +70,7 @@ import com.android.safetycenter.internaldata.SafetyCenterBundles import com.android.safetycenter.internaldata.SafetyCenterBundles.ISSUES_TO_GROUPS_BUNDLE_KEY import com.android.safetycenter.internaldata.SafetyCenterEntryId import com.android.safetycenter.internaldata.SafetyCenterIds -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.Coroutines.waitForWithTimeout @@ -146,7 +146,7 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SafetyCenterManagerTest { private val context: Context = getApplicationContext() - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestData = SafetyCenterTestData(context) @@ -155,16 +155,16 @@ class SafetyCenterManagerTest { private val safetyCenterStatusOk = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_summary") + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusUnknownScanning = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName("scanning_title"), - safetyCenterResourcesContext.getStringByName("loading_summary") + safetyCenterResourcesApk.getStringByName("scanning_title"), + safetyCenterResourcesApk.getStringByName("loading_summary") ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) .setRefreshStatus(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) @@ -172,7 +172,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusOkOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), safetyCenterTestData.getAlertString(1) ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) @@ -180,9 +180,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusOkReviewOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_title" - ), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), safetyCenterTestData.getAlertString(1) ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) @@ -190,19 +188,15 @@ class SafetyCenterManagerTest { private val safetyCenterStatusOkReview = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_title" - ), - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_summary" - ) + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_summary") ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusGeneralRecommendationOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_safety_recommendation_title" ), safetyCenterTestData.getAlertString(1) @@ -212,7 +206,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusAccountRecommendationOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_account_recommendation_title" ), safetyCenterTestData.getAlertString(1) @@ -222,7 +216,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusDeviceRecommendationOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_device_recommendation_title" ), safetyCenterTestData.getAlertString(1) @@ -232,7 +226,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusGeneralCriticalOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_safety_warning_title" ), safetyCenterTestData.getAlertString(1) @@ -242,7 +236,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusGeneralCriticalTwoAlerts = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_safety_warning_title" ), safetyCenterTestData.getAlertString(2) @@ -252,7 +246,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusAccountCriticalOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_account_warning_title" ), safetyCenterTestData.getAlertString(1) @@ -262,7 +256,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusAccountCriticalTwoAlerts = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_account_warning_title" ), safetyCenterTestData.getAlertString(2) @@ -272,7 +266,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusDeviceCriticalOneAlert = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_device_warning_title" ), safetyCenterTestData.getAlertString(1) @@ -282,7 +276,7 @@ class SafetyCenterManagerTest { private val safetyCenterStatusDeviceCriticalTwoAlerts = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_device_warning_title" ), safetyCenterTestData.getAlertString(2) @@ -302,7 +296,7 @@ class SafetyCenterManagerTest { SafetyCenterEntryOrGroup( SafetyCenterEntryGroup.Builder(MIXED_STATEFUL_GROUP_ID, "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) - .setSummary(safetyCenterResourcesContext.getStringByName("group_unknown_summary")) + .setSummary(safetyCenterResourcesApk.getStringByName("group_unknown_summary")) .setEntries( listOf( safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_IN_STATEFUL_ID), @@ -604,7 +598,7 @@ class SafetyCenterManagerTest { SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) .setSummary( - safetyCenterResourcesContext.getStringByName("group_unknown_summary") + safetyCenterResourcesApk.getStringByName("group_unknown_summary") ) .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY) .setEntries( @@ -791,9 +785,9 @@ class SafetyCenterManagerTest { val status1 = listener.receiveSafetyCenterData().status assertThat(status1.refreshStatus).isEqualTo(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) assertThat(status1.title.toString()) - .isEqualTo(safetyCenterResourcesContext.getStringByName("scanning_title")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("scanning_title")) assertThat(status1.summary.toString()) - .isEqualTo(safetyCenterResourcesContext.getStringByName("loading_summary")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("loading_summary")) val status2 = listener.receiveSafetyCenterData().status assertThat(status2.refreshStatus).isEqualTo(REFRESH_STATUS_NONE) assertThat(status2).isEqualTo(safetyCenterStatusOk) @@ -815,9 +809,9 @@ class SafetyCenterManagerTest { val status1 = listener.receiveSafetyCenterData().status assertThat(status1.refreshStatus).isEqualTo(REFRESH_STATUS_DATA_FETCH_IN_PROGRESS) assertThat(status1.title.toString()) - .isEqualTo(safetyCenterResourcesContext.getStringByName("scanning_title")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("scanning_title")) assertThat(status1.summary.toString()) - .isEqualTo(safetyCenterResourcesContext.getStringByName("loading_summary")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("loading_summary")) val status2 = listener.receiveSafetyCenterData().status assertThat(status2.refreshStatus).isEqualTo(REFRESH_STATUS_NONE) assertThat(status2).isEqualTo(safetyCenterStatusOk) @@ -841,7 +835,7 @@ class SafetyCenterManagerTest { assertThat(status1.refreshStatus).isEqualTo(REFRESH_STATUS_DATA_FETCH_IN_PROGRESS) assertThat(status1.title.toString()).isEqualTo(safetyCenterStatusOk.title.toString()) assertThat(status1.summary.toString()) - .isEqualTo(safetyCenterResourcesContext.getStringByName("loading_summary")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("loading_summary")) val status2 = listener.receiveSafetyCenterData().status assertThat(status2.refreshStatus).isEqualTo(REFRESH_STATUS_NONE) assertThat(status2).isEqualTo(safetyCenterStatusOk) @@ -2814,7 +2808,7 @@ class SafetyCenterManagerTest { safetyCenterManager.getSafetyCenterDataWithPermission().getGroup(SUMMARY_TEST_GROUP_ID) assertThat(group.summary) - .isEqualTo(safetyCenterResourcesContext.getStringByName("group_unknown_summary")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("group_unknown_summary")) assertThat(group.severityLevel).isEqualTo(ENTRY_SEVERITY_LEVEL_UNKNOWN) } @@ -2828,7 +2822,7 @@ class SafetyCenterManagerTest { .getGroup(ANDROID_LOCK_SCREEN_SOURCES_GROUP_ID) assertThat(initialGroup.summary) - .isEqualTo(safetyCenterResourcesContext.getStringByName("group_unknown_summary")) + .isEqualTo(safetyCenterResourcesApk.getStringByName("group_unknown_summary")) assertThat(initialGroup.severityLevel).isEqualTo(ENTRY_SEVERITY_LEVEL_UNKNOWN) safetyCenterTestHelper.setData(DYNAMIC_BAREBONE_ID, safetySourceTestData.unspecified) @@ -3323,7 +3317,7 @@ class SafetyCenterManagerTest { assertThat(error) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("resolving_action_error") + safetyCenterResourcesApk.getStringByName("resolving_action_error") ) ) } @@ -3357,7 +3351,7 @@ class SafetyCenterManagerTest { assertThat(error) .isEqualTo( SafetyCenterErrorDetails( - safetyCenterResourcesContext.getStringByName("resolving_action_error") + safetyCenterResourcesApk.getStringByName("resolving_action_error") ) ) } diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterStatusCardTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterStatusCardTest.kt index 326e805a3b..5655b935b4 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterStatusCardTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterStatusCardTest.kt @@ -22,7 +22,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.uiautomator.By import com.android.compatibility.common.util.DisableAnimationRule import com.android.compatibility.common.util.FreezeRotationRule -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterActivity import com.android.safetycenter.testing.SafetyCenterTestConfigs import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.SINGLE_SOURCE_ID @@ -49,7 +49,7 @@ import org.junit.runner.RunWith class SafetyCenterStatusCardTest { private val context: Context = getApplicationContext() - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestData = SafetyCenterTestData(context) @@ -66,8 +66,8 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("scanning_title"), - safetyCenterResourcesContext.getStringByName("loading_summary") + safetyCenterResourcesApk.getStringByName("scanning_title"), + safetyCenterResourcesApk.getStringByName("loading_summary") ) } } @@ -82,8 +82,8 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName("loading_summary") + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("loading_summary") ) } } @@ -95,12 +95,8 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_title" - ), - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_summary" - ) + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_summary") ) waitButtonDisplayed(RESCAN_BUTTON_LABEL) } @@ -116,8 +112,8 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_summary") + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") ) waitButtonDisplayed(RESCAN_BUTTON_LABEL) } @@ -147,7 +143,7 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), safetyCenterTestData.getAlertString(1) ) waitButtonNotDisplayed(RESCAN_BUTTON_LABEL) @@ -164,7 +160,7 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_safety_recommendation_title" ), safetyCenterTestData.getAlertString(1) @@ -183,7 +179,7 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_safety_warning_title" ), safetyCenterTestData.getAlertString(1) @@ -202,15 +198,15 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_summary") + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") ) waitButtonDisplayed(RESCAN_BUTTON_LABEL) { it.click() } waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("scanning_title"), - safetyCenterResourcesContext.getStringByName("loading_summary") + safetyCenterResourcesApk.getStringByName("scanning_title"), + safetyCenterResourcesApk.getStringByName("loading_summary") ) } } @@ -229,14 +225,14 @@ class SafetyCenterStatusCardTest { context.launchSafetyCenterActivity(withReceiverPermission = true) { waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_summary") + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") ) waitButtonDisplayed(RESCAN_BUTTON_LABEL) { it.click() } waitAllTextDisplayed( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_safety_recommendation_title" ), safetyCenterTestData.getAlertString(1) diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt index ad3ce3344b..932f999178 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt @@ -35,7 +35,7 @@ import com.android.compatibility.common.util.DisableAnimationRule import com.android.compatibility.common.util.FreezeRotationRule import com.android.compatibility.common.util.RetryRule import com.android.compatibility.common.util.UiAutomatorUtils2 -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterActivity @@ -94,7 +94,7 @@ class SafetyCenterSubpagesTest { private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestConfigs = SafetyCenterTestConfigs(context) - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) @get:Rule(order = 1) val supportsSafetyCenterRule = SupportsSafetyCenterRule(context) @get:Rule(order = 2) val safetyCenterTestRule = SafetyCenterTestRule(safetyCenterTestHelper) @@ -957,9 +957,7 @@ class SafetyCenterSubpagesTest { waitAllTextDisplayed( context.getString(source.titleResId), context.getString(source.summaryResId), - safetyCenterResourcesContext.getStringByName( - "test_single_source_group_id_footer" - ) + safetyCenterResourcesApk.getStringByName("test_single_source_group_id_footer") ) } } diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt index 5ff42e23c4..bc5395d74a 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt @@ -48,7 +48,7 @@ import com.android.safetycenter.internaldata.SafetyCenterIds import com.android.safetycenter.internaldata.SafetyCenterIssueActionId import com.android.safetycenter.internaldata.SafetyCenterIssueId import com.android.safetycenter.internaldata.SafetyCenterIssueKey -import com.android.safetycenter.resources.SafetyCenterResourcesContext +import com.android.safetycenter.resources.SafetyCenterResourcesApk import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.SINGLE_SOURCE_GROUP_ID import com.android.safetycenter.testing.SafetySourceTestData.Companion.CRITICAL_ISSUE_ACTION_ID import com.android.safetycenter.testing.SafetySourceTestData.Companion.CRITICAL_ISSUE_ID @@ -66,7 +66,7 @@ import java.util.Locale @RequiresApi(TIRAMISU) class SafetyCenterTestData(context: Context) { - private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) + private val safetyCenterResourcesApk = SafetyCenterResourcesApk.forTests(context) private val safetySourceTestData = SafetySourceTestData(context) /** @@ -74,12 +74,8 @@ class SafetyCenterTestData(context: Context) { */ val safetyCenterStatusUnknown = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_title" - ), - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_ok_review_summary" - ) + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_summary") ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) .build() @@ -103,7 +99,7 @@ class SafetyCenterTestData(context: Context) { numAlerts: Int, ): SafetyCenterStatus = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName(statusResource), + safetyCenterResourcesApk.getStringByName(statusResource), getAlertString(numAlerts) ) .setSeverityLevel(overallSeverityLevel) @@ -117,8 +113,8 @@ class SafetyCenterTestData(context: Context) { numTipIssues: Int, ): SafetyCenterStatus = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName( "overall_severity_level_tip_summary", numTipIssues ) @@ -134,8 +130,8 @@ class SafetyCenterTestData(context: Context) { numAutomaticIssues: Int, ): SafetyCenterStatus = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName( "overall_severity_level_action_taken_summary", numAutomaticIssues ) @@ -149,7 +145,7 @@ class SafetyCenterTestData(context: Context) { */ fun safetyCenterStatusCritical(numAlerts: Int) = SafetyCenterStatus.Builder( - safetyCenterResourcesContext.getStringByName( + safetyCenterResourcesApk.getStringByName( "overall_severity_level_critical_safety_warning_title" ), getAlertString(numAlerts) @@ -428,7 +424,7 @@ class SafetyCenterTestData(context: Context) { private fun getIcuPluralsString(name: String, count: Int, vararg formatArgs: Any): String { val messageFormat = MessageFormat( - safetyCenterResourcesContext.getStringByName(name, formatArgs), + safetyCenterResourcesApk.getStringByName(name, formatArgs), Locale.getDefault() ) val arguments = ArrayMap() -- GitLab From 80ebb5b5f5cc1b3d872cd62385edad7407c40cf4 Mon Sep 17 00:00:00 2001 From: wwtbuaa01 Date: Mon, 15 May 2023 15:43:01 +0800 Subject: [PATCH 147/577] Introduce AppOpsManagerCompat to convert permissions to app ops. Some app op permissions are missing from the mapping in the framework. AppOpsManager.permissionToOp can return null in that situation. Relnote: N/A Bug: 274132354 Test: manual (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:26db8c985e3b7b1d67c4e8cd89ea678d08f88527) Merged-In: I8624feb5665d945d8d50fea47dfc151f2134fee5 Change-Id: I8624feb5665d945d8d50fea47dfc151f2134fee5 --- .../compat/AppOpsManagerCompat.java | 48 +++++++++++++++++++ .../controller/model/AppOpPermissions.java | 4 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java diff --git a/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java new file mode 100644 index 0000000000..8e5a768dfe --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.role.controller.compat; + +import android.app.AppOpsManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.modules.utils.build.SdkLevel; + +import java.util.Objects; + +/** Helper for accessing features in {@link AppOpsManager}. */ +public class AppOpsManagerCompat { + + private AppOpsManagerCompat() {} + + /** + * @see AppOpsManager#permissionToOp(). + */ + @Nullable + public static String permissionToOp(@NonNull String permission) { + if (!SdkLevel.isAtLeastV()) { + // On Android U and below, PACKAGE_USAGE_STATUS is missing from the mapping + // in the framework. + if (Objects.equals(permission, android.Manifest.permission.PACKAGE_USAGE_STATS)) { + return AppOpsManager.OPSTR_GET_USAGE_STATS; + } + } + return AppOpsManager.permissionToOp(permission); + } +} \ No newline at end of file diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java index f3f9b321eb..29939a1a55 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java @@ -24,6 +24,7 @@ import android.os.Build; import androidx.annotation.NonNull; +import com.android.role.controller.compat.AppOpsManagerCompat; import com.android.role.controller.util.ArrayUtils; import com.android.role.controller.util.PackageUtils; @@ -55,7 +56,7 @@ public class AppOpPermissions { if (!ArrayUtils.contains(packageInfo.requestedPermissions, appOpPermission)) { return false; } - String appOp = AppOpsManager.permissionToOp(appOpPermission); + String appOp = AppOpsManagerCompat.permissionToOp(appOpPermission); if (!overrideNonDefaultMode) { Integer currentMode = Permissions.getAppOpMode(packageName, appOp, context); if (currentMode != null && currentMode != Permissions.getDefaultAppOpMode(appOp)) { @@ -96,6 +97,7 @@ public class AppOpPermissions { case AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS: case AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW: case AppOpsManager.OPSTR_WRITE_SETTINGS: + case AppOpsManager.OPSTR_GET_USAGE_STATS: case AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES: case AppOpsManager.OPSTR_START_FOREGROUND: // This isn't an API but we are deprecating it soon anyway. -- GitLab From 2c3ba29a688f73517c1a33dbdb5261611032e9b9 Mon Sep 17 00:00:00 2001 From: Tyler Dewey Date: Tue, 13 Jun 2023 16:02:30 +0000 Subject: [PATCH 148/577] Use non-synchronized lazy initialization for views. Adds a new Kotlin file for lazy view properties. RelNote: N/a Bug: 246519195 Test: atest SafetyCenterActivityFunctionalTestCases Change-Id: I801fec122de28c4cbe78ab96fb3cec218c68944b --- .../safetycenter/ui/view/LazyProperties.kt | 12 ++++++++++++ .../safetycenter/ui/view/MoreIssuesHeaderView.kt | 10 +++++----- .../ui/view/SafetyEntryCommonViewsManager.kt | 10 +++++----- .../safetycenter/ui/view/SafetyEntryGroupView.kt | 14 +++++++------- .../safetycenter/ui/view/SafetyEntryView.kt | 4 ++-- .../safetycenter/ui/view/StatusCardView.kt | 14 ++++++-------- 6 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/LazyProperties.kt diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/LazyProperties.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/LazyProperties.kt new file mode 100644 index 0000000000..542ab1e034 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/LazyProperties.kt @@ -0,0 +1,12 @@ +package com.android.permissioncontroller.safetycenter.ui.view + +import android.view.View + +/** Returns a lazy property wrapping a view with a given ID. */ +fun View.lazyView(childViewId: Int): Lazy = lazyView { findViewById(childViewId) } + +/** Returns a lazy property wrapping a view produced by the given function. */ +fun lazyView(viewProducer: () -> T): Lazy = + // Lazy by default uses synchronization to ensure a variable is only initialized once. This + // is unnecessary and expensive for view properties, so we don't use synchronization here. + lazy(LazyThreadSafetyMode.NONE) { viewProducer() } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt index 264aa488e0..00cfd141a3 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt @@ -43,13 +43,13 @@ constructor( } private val moreIssuesCardAnimator = MoreIssuesCardAnimator() - private val statusIconView: ImageView by lazy { findViewById(R.id.status_icon) } - private val titleView: TextView by lazy { findViewById(R.id.title) } - private val expandCollapseLayout: View by lazy { findViewById(android.R.id.widget_frame) } - private val counterView: TextView by lazy { + private val statusIconView: ImageView by lazyView(R.id.status_icon) + private val titleView: TextView by lazyView(R.id.title) + private val expandCollapseLayout: View by lazyView(android.R.id.widget_frame) + private val counterView: TextView by lazyView { expandCollapseLayout.findViewById(R.id.widget_title) } - private val expandCollapseIcon: ImageView by lazy { + private val expandCollapseIcon: ImageView by lazyView { expandCollapseLayout.findViewById(R.id.widget_icon) } private var cornerAnimator: ValueAnimator? = null diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt index 4be327285f..34565421a0 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt @@ -29,11 +29,11 @@ import com.android.permissioncontroller.safetycenter.ui.SeverityIconPicker internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) { - val titleView: TextView? by lazy { rootEntryView?.findViewById(R.id.title) } - val summaryView: TextView? by lazy { rootEntryView?.findViewById(R.id.summary) } - private val iconView: ImageView? by lazy { rootEntryView?.findViewById(R.id.icon) } - private val iconFrame: View? by lazy { rootEntryView?.findViewById(R.id.icon_frame) } - private val emptySpace: View? by lazy { rootEntryView?.findViewById(R.id.empty_space) } + val titleView: TextView? by lazyView { rootEntryView?.findViewById(R.id.title) } + val summaryView: TextView? by lazyView { rootEntryView?.findViewById(R.id.summary) } + private val iconView: ImageView? by lazyView { rootEntryView?.findViewById(R.id.icon) } + private val iconFrame: View? by lazyView { rootEntryView?.findViewById(R.id.icon_frame) } + private val emptySpace: View? by lazyView { rootEntryView?.findViewById(R.id.empty_space) } fun showDetails( id: String, diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt index 318ade5cbc..7e42232989 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt @@ -59,20 +59,20 @@ constructor( inflate(context, R.layout.safety_center_group, this) } - private val groupHeaderView: LinearLayout? by lazy { findViewById(R.id.group_header) } + private val groupHeaderView: LinearLayout? by lazyView(R.id.group_header) - private val expandedHeaderView: ViewGroup? by lazy { findViewById(R.id.expanded_header) } - private val expandedTitleView: TextView? by lazy { + private val expandedHeaderView: ViewGroup? by lazyView(R.id.expanded_header) + private val expandedTitleView: TextView? by lazyView { expandedHeaderView?.findViewById(R.id.title) } - private val collapsedHeaderView: ViewGroup? by lazy { findViewById(R.id.collapsed_header) } - private val commonEntryView: SafetyEntryCommonViewsManager? by lazy { + private val collapsedHeaderView: ViewGroup? by lazyView(R.id.collapsed_header) + private val commonEntryView: SafetyEntryCommonViewsManager? by lazyView { SafetyEntryCommonViewsManager(collapsedHeaderView) } - private val chevronIconView: ImageView? by lazy { findViewById(R.id.chevron_icon) } - private val entriesContainerView: LinearLayout? by lazy { findViewById(R.id.entries_container) } + private val chevronIconView: ImageView? by lazyView(R.id.chevron_icon) + private val entriesContainerView: LinearLayout? by lazyView(R.id.entries_container) private var isExpanded: Boolean? = null diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt index ff72336865..7d7214ab07 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt @@ -52,10 +52,10 @@ constructor( inflate(context, R.layout.view_entry, this) } - private val commonEntryView: SafetyEntryCommonViewsManager? by lazy { + private val commonEntryView: SafetyEntryCommonViewsManager? by lazyView { SafetyEntryCommonViewsManager(this) } - private val widgetFrame: ViewGroup? by lazy { findViewById(R.id.widget_frame) } + private val widgetFrame: ViewGroup? by lazyView(R.id.widget_frame) fun showEntry( entry: SafetyCenterEntry, diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/StatusCardView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/StatusCardView.kt index 013f32c85e..6a415c563a 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/StatusCardView.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/StatusCardView.kt @@ -42,14 +42,12 @@ constructor( inflate(context, R.layout.view_status_card, this) } - val statusImageView: ImageView by lazy { findViewById(R.id.status_image) } - val titleAndSummaryContainerView: LinearLayout by lazy { - findViewById(R.id.status_title_and_summary) - } - val titleView: TextView by lazy { findViewById(R.id.status_title) } - val summaryView: TextView by lazy { findViewById(R.id.status_summary) } - val reviewSettingsButton: MaterialButton by lazy { findViewById(R.id.review_settings_button) } - val rescanButton: MaterialButton by lazy { findViewById(R.id.rescan_button) } + val statusImageView: ImageView by lazyView(R.id.status_image) + val titleAndSummaryContainerView: LinearLayout by lazyView(R.id.status_title_and_summary) + val titleView: TextView by lazyView(R.id.status_title) + val summaryView: TextView by lazyView(R.id.status_summary) + val reviewSettingsButton: MaterialButton by lazyView(R.id.review_settings_button) + val rescanButton: MaterialButton by lazyView(R.id.rescan_button) fun showButtons(statusUiData: StatusUiData) { rescanButton.isEnabled = !statusUiData.isRefreshInProgress -- GitLab From cb9c8e1f326930f83f9149bd956a1ce884aacb5d Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 14 Jun 2023 15:49:58 +0000 Subject: [PATCH 149/577] Allow running Safety Center tests without the resources APK. Iff the device doesn't support Safety Center. Previously the tests would crash if the resources APK is not found while the device doesn't support SC. Bug: 286532479 Test: atest CtsSafetyCenterTestCases && atest SafetyCenterFunctionalTestCases && atest SafetyCenterActivityFunctionalTestCases && atest SafetyCenterFunctionalMultiUsersTestCases (with SC unsupported and resources APK not found) Relnote: N/A Change-Id: Ia10bb399748afa0aadcc771f447e89c80873ffac --- .../resources/SafetyCenterResourcesApk.java | 5 +- .../multiusers/SafetyCenterMultiUsersTest.kt | 139 ++- .../functional/SafetyCenterManagerTest.kt | 1033 +++++++++-------- .../testing/SafetyCenterTestData.kt | 19 +- 4 files changed, 636 insertions(+), 560 deletions(-) diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java index b0063d051e..fe0908ea0b 100644 --- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesApk.java @@ -189,10 +189,7 @@ public final class SafetyCenterResourcesApk { if (info == null) { // Resource APK not loaded yet, print a stack trace to see where this is called from - Log.e( - TAG, - "Attempted to fetch resources before Safety Center resources APK is loaded!", - new IllegalStateException()); + Log.e(TAG, "Could not find Safety Center resources APK", new IllegalStateException()); return null; } diff --git a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt index 7d22348b42..fb571330bc 100644 --- a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt +++ b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt @@ -23,6 +23,7 @@ import android.content.Context import android.content.Intent import android.os.UserHandle import android.safetycenter.SafetyCenterData +import android.safetycenter.SafetyCenterEntry import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNKNOWN import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED @@ -30,6 +31,7 @@ import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY import android.safetycenter.SafetyCenterEntryGroup import android.safetycenter.SafetyCenterEntryOrGroup +import android.safetycenter.SafetyCenterIssue import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyCenterStaticEntry import android.safetycenter.SafetyCenterStaticEntryGroup @@ -120,53 +122,55 @@ class SafetyCenterMultiUsersTest { private var inQuietMode = false - private val primaryProfileOnlyIssues = - listOf( - safetyCenterTestData.safetyCenterIssueCritical( - DYNAMIC_BAREBONE_ID, - groupId = DYNAMIC_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueCritical( - ISSUE_ONLY_BAREBONE_ID, - attributionTitle = null, - groupId = ISSUE_ONLY_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueRecommendation( - DYNAMIC_DISABLED_ID, - groupId = DYNAMIC_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueRecommendation( - ISSUE_ONLY_ALL_OPTIONAL_ID, - attributionTitle = null, - groupId = ISSUE_ONLY_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueInformation( - DYNAMIC_IN_STATELESS_ID, - groupId = MIXED_STATELESS_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueInformation( - ISSUE_ONLY_IN_STATELESS_ID, - groupId = MIXED_STATELESS_GROUP_ID + private val primaryProfileOnlyIssues: List + get() = + listOf( + safetyCenterTestData.safetyCenterIssueCritical( + DYNAMIC_BAREBONE_ID, + groupId = DYNAMIC_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueCritical( + ISSUE_ONLY_BAREBONE_ID, + attributionTitle = null, + groupId = ISSUE_ONLY_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueRecommendation( + DYNAMIC_DISABLED_ID, + groupId = DYNAMIC_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueRecommendation( + ISSUE_ONLY_ALL_OPTIONAL_ID, + attributionTitle = null, + groupId = ISSUE_ONLY_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueInformation( + DYNAMIC_IN_STATELESS_ID, + groupId = MIXED_STATELESS_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueInformation( + ISSUE_ONLY_IN_STATELESS_ID, + groupId = MIXED_STATELESS_GROUP_ID + ) ) - ) - private val dynamicBareboneDefault = - safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_BAREBONE_ID) + private val dynamicBareboneDefault: SafetyCenterEntry + get() = safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_BAREBONE_ID) - private val dynamicBareboneUpdated = - safetyCenterTestData.safetyCenterEntryCritical(DYNAMIC_BAREBONE_ID) + private val dynamicBareboneUpdated: SafetyCenterEntry + get() = safetyCenterTestData.safetyCenterEntryCritical(DYNAMIC_BAREBONE_ID) - private val dynamicDisabledDefault = - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_DISABLED_ID) - .setPendingIntent(null) - .setEnabled(false) - .build() + private val dynamicDisabledDefault: SafetyCenterEntry + get() = + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_DISABLED_ID) + .setPendingIntent(null) + .setEnabled(false) + .build() - private val dynamicDisabledUpdated = - safetyCenterTestData.safetyCenterEntryRecommendation(DYNAMIC_DISABLED_ID) + private val dynamicDisabledUpdated: SafetyCenterEntry + get() = safetyCenterTestData.safetyCenterEntryRecommendation(DYNAMIC_DISABLED_ID) - private val dynamicDisabledForWorkDefaultBuilder + private val dynamicDisabledForWorkDefaultBuilder: SafetyCenterEntry.Builder get() = safetyCenterTestData .safetyCenterEntryDefaultBuilder( @@ -177,10 +181,10 @@ class SafetyCenterMultiUsersTest { .setPendingIntent(null) .setEnabled(false) - private val dynamicDisabledForWorkDefault + private val dynamicDisabledForWorkDefault: SafetyCenterEntry get() = dynamicDisabledForWorkDefaultBuilder.build() - private val dynamicDisabledForWorkPausedUpdated + private val dynamicDisabledForWorkPausedUpdated: SafetyCenterEntry get() = safetyCenterTestData .safetyCenterEntryDefaultBuilder( @@ -198,13 +202,17 @@ class SafetyCenterMultiUsersTest { .setEnabled(false) .build() - private val dynamicDisabledForWorkUpdated + private val dynamicDisabledForWorkUpdated: SafetyCenterEntry get() = safetyCenterEntryOkForWork(DYNAMIC_DISABLED_ID, deviceState.workProfile().id()) - private val dynamicHiddenUpdated = - safetyCenterTestData.safetyCenterEntryUnspecified(DYNAMIC_HIDDEN_ID, pendingIntent = null) + private val dynamicHiddenUpdated: SafetyCenterEntry + get() = + safetyCenterTestData.safetyCenterEntryUnspecified( + DYNAMIC_HIDDEN_ID, + pendingIntent = null + ) - private val dynamicHiddenForWorkUpdated + private val dynamicHiddenForWorkUpdated: SafetyCenterEntry get() = safetyCenterEntryOkForWork(DYNAMIC_HIDDEN_ID, deviceState.workProfile().id()) private val dynamicHiddenForWorkPausedUpdated @@ -266,17 +274,19 @@ class SafetyCenterMultiUsersTest { .setEnabled(false) .build() - private val staticEntry = - SafetyCenterStaticEntry.Builder("OK") - .setSummary("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + private val staticEntry: SafetyCenterStaticEntry + get() = + SafetyCenterStaticEntry.Builder("OK") + .setSummary("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() - private val staticEntryUpdated = - SafetyCenterStaticEntry.Builder("Unspecified title") - .setSummary("Unspecified summary") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + private val staticEntryUpdated: SafetyCenterStaticEntry + get() = + SafetyCenterStaticEntry.Builder("Unspecified title") + .setSummary("Unspecified summary") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() private fun staticEntryForWorkBuilder( title: CharSequence = "Paste", @@ -291,10 +301,10 @@ class SafetyCenterMultiUsersTest { ) ) - private val staticEntryForWork + private val staticEntryForWork: SafetyCenterStaticEntry get() = staticEntryForWorkBuilder().build() - private val staticEntryForWorkPaused + private val staticEntryForWorkPaused: SafetyCenterStaticEntry get() = staticEntryForWorkBuilder(inQuietMode = true) // TODO(b/233188021): This needs to use the Enterprise API to override the "work" @@ -310,11 +320,12 @@ class SafetyCenterMultiUsersTest { .setSummary(safetyCenterResourcesApk.getStringByName("work_profile_paused")) .build() - private val staticEntryForWorkUpdated = - SafetyCenterStaticEntry.Builder("Unspecified title for Work") - .setSummary("Unspecified summary") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + private val staticEntryForWorkUpdated: SafetyCenterStaticEntry + get() = + SafetyCenterStaticEntry.Builder("Unspecified title for Work") + .setSummary("Unspecified summary") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() private val safetyCenterDataForAdditionalUser get() = diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt index c37f34d78e..2376e42aa3 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -153,551 +153,614 @@ class SafetyCenterManagerTest { private val safetyCenterTestConfigs = SafetyCenterTestConfigs(context) private val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java)!! - private val safetyCenterStatusOk = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) - .build() - - private val safetyCenterStatusUnknownScanning = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("scanning_title"), - safetyCenterResourcesApk.getStringByName("loading_summary") - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) - .setRefreshStatus(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) - .build() - - private val safetyCenterStatusOkOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), - safetyCenterTestData.getAlertString(1) - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) - .build() - - private val safetyCenterStatusOkReviewOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), - safetyCenterTestData.getAlertString(1) - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) - .build() - - private val safetyCenterStatusOkReview = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_summary") - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) - .build() - - private val safetyCenterStatusGeneralRecommendationOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_safety_recommendation_title" - ), - safetyCenterTestData.getAlertString(1) - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) - .build() + private val safetyCenterStatusOk: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_summary") + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) + .build() - private val safetyCenterStatusAccountRecommendationOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_account_recommendation_title" - ), - safetyCenterTestData.getAlertString(1) + private val safetyCenterStatusUnknownScanning: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName("scanning_title"), + safetyCenterResourcesApk.getStringByName("loading_summary") + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) + .setRefreshStatus(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) + .build() + + private val safetyCenterStatusOkOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_title"), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) + .build() + + private val safetyCenterStatusOkReviewOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_ok_review_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) + .build() + + private val safetyCenterStatusOkReview: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_ok_review_title" + ), + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_ok_review_summary" + ) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) + .build() + + private val safetyCenterStatusGeneralRecommendationOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_safety_recommendation_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) + .build() + + private val safetyCenterStatusAccountRecommendationOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_account_recommendation_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) + .build() + + private val safetyCenterStatusDeviceRecommendationOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_device_recommendation_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) + .build() + + private val safetyCenterStatusGeneralCriticalOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_safety_warning_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterStatusGeneralCriticalTwoAlerts: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_safety_warning_title" + ), + safetyCenterTestData.getAlertString(2) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterStatusAccountCriticalOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_account_warning_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterStatusAccountCriticalTwoAlerts: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_account_warning_title" + ), + safetyCenterTestData.getAlertString(2) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterStatusDeviceCriticalOneAlert: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_device_warning_title" + ), + safetyCenterTestData.getAlertString(1) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterStatusDeviceCriticalTwoAlerts: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_critical_device_warning_title" + ), + safetyCenterTestData.getAlertString(2) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) + .build() + + private val safetyCenterEntryOrGroupRecommendation: SafetyCenterEntryOrGroup + get() = + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) + ) + + private val safetyCenterEntryOrGroupCritical: SafetyCenterEntryOrGroup + get() = + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryCritical(SINGLE_SOURCE_ID) + ) + + private val safetyCenterEntryGroupMixedFromComplexConfig: SafetyCenterEntryOrGroup + get() = + SafetyCenterEntryOrGroup( + SafetyCenterEntryGroup.Builder(MIXED_STATEFUL_GROUP_ID, "OK") + .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) + .setSummary(safetyCenterResourcesApk.getStringByName("group_unknown_summary")) + .setEntries( + listOf( + safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_IN_STATEFUL_ID), + SafetyCenterEntry.Builder( + SafetyCenterTestData.entryId(STATIC_IN_STATEFUL_ID), + "OK" + ) + .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNSPECIFIED) + .setSummary("OK") + .setPendingIntent( + safetySourceTestData.testActivityRedirectPendingIntent + ) + .setSeverityUnspecifiedIconType( + SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ICON + ) + .build() + ) + ) + .setSeverityUnspecifiedIconType( + SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION + ) + .build() ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) - .build() - private val safetyCenterStatusDeviceRecommendationOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_device_recommendation_title" - ), - safetyCenterTestData.getAlertString(1) + private val safetyCenterStaticEntryGroupFromComplexConfig: SafetyCenterStaticEntryGroup + get() = + SafetyCenterStaticEntryGroup( + "OK", + listOf( + SafetyCenterStaticEntry.Builder("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build(), + SafetyCenterStaticEntry.Builder("OK") + .setSummary("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() + ) ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) - .build() - private val safetyCenterStatusGeneralCriticalOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_safety_warning_title" - ), - safetyCenterTestData.getAlertString(1) + private val safetyCenterStaticEntryGroupMixedFromComplexConfig: SafetyCenterStaticEntryGroup + get() = + SafetyCenterStaticEntryGroup( + "OK", + listOf( + SafetyCenterStaticEntry.Builder("OK") + .setSummary("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build(), + SafetyCenterStaticEntry.Builder("OK") + .setSummary("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() + ) ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterStatusGeneralCriticalTwoAlerts = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_safety_warning_title" - ), - safetyCenterTestData.getAlertString(2) + private val safetyCenterStaticEntryGroupMixedUpdatedFromComplexConfig: + SafetyCenterStaticEntryGroup + get() = + SafetyCenterStaticEntryGroup( + "OK", + listOf( + SafetyCenterStaticEntry.Builder("Unspecified title") + .setSummary("Unspecified summary") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build(), + SafetyCenterStaticEntry.Builder("OK") + .setSummary("OK") + .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) + .build() + ) ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterStatusAccountCriticalOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_account_warning_title" + private val safetyCenterDataFromConfigScanning: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusUnknownScanning, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryDefault(SINGLE_SOURCE_ID) + ) ), - safetyCenterTestData.getAlertString(1) + emptyList() ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterStatusAccountCriticalTwoAlerts = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_account_warning_title" + private val safetyCenterDataFromConfig: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterTestData.safetyCenterStatusUnknown, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryDefault(SINGLE_SOURCE_ID) + ) ), - safetyCenterTestData.getAlertString(2) + emptyList() ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterStatusDeviceCriticalOneAlert = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_device_warning_title" + private val safetyCenterDataUnspecified: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOk, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryUnspecified(SINGLE_SOURCE_ID) + ) ), - safetyCenterTestData.getAlertString(1) + emptyList() ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterStatusDeviceCriticalTwoAlerts = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName( - "overall_severity_level_critical_device_warning_title" + private val safetyCenterDataOk: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOk, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryOk(SINGLE_SOURCE_ID) + ) ), - safetyCenterTestData.getAlertString(2) + emptyList() ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) - .build() - private val safetyCenterEntryOrGroupRecommendation = - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) - ) - - private val safetyCenterEntryOrGroupCritical = - SafetyCenterEntryOrGroup(safetyCenterTestData.safetyCenterEntryCritical(SINGLE_SOURCE_ID)) - - private val safetyCenterEntryGroupMixedFromComplexConfig = - SafetyCenterEntryOrGroup( - SafetyCenterEntryGroup.Builder(MIXED_STATEFUL_GROUP_ID, "OK") - .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) - .setSummary(safetyCenterResourcesApk.getStringByName("group_unknown_summary")) - .setEntries( - listOf( - safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_IN_STATEFUL_ID), - SafetyCenterEntry.Builder( - SafetyCenterTestData.entryId(STATIC_IN_STATEFUL_ID), - "OK" - ) - .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNSPECIFIED) - .setSummary("OK") - .setPendingIntent( + private val safetyCenterDataOkWithIconAction: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOk, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData + .safetyCenterEntryOkBuilder(SINGLE_SOURCE_ID) + .setIconAction( + ICON_ACTION_TYPE_INFO, safetySourceTestData.testActivityRedirectPendingIntent ) - .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ICON) .build() ) - ) - .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION) - .build() - ) - - private val safetyCenterStaticEntryGroupFromComplexConfig = - SafetyCenterStaticEntryGroup( - "OK", - listOf( - SafetyCenterStaticEntry.Builder("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build(), - SafetyCenterStaticEntry.Builder("OK") - .setSummary("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + ), + emptyList() ) - ) - private val safetyCenterStaticEntryGroupMixedFromComplexConfig = - SafetyCenterStaticEntryGroup( - "OK", - listOf( - SafetyCenterStaticEntry.Builder("OK") - .setSummary("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build(), - SafetyCenterStaticEntry.Builder("OK") - .setSummary("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + private val safetyCenterDataUnknownScanningWithError: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusUnknownScanning, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryError(SINGLE_SOURCE_ID) + ) + ), + emptyList() ) - ) - private val safetyCenterStaticEntryGroupMixedUpdatedFromComplexConfig = - SafetyCenterStaticEntryGroup( - "OK", - listOf( - SafetyCenterStaticEntry.Builder("Unspecified title") - .setSummary("Unspecified summary") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build(), - SafetyCenterStaticEntry.Builder("OK") - .setSummary("OK") - .setPendingIntent(safetySourceTestData.testActivityRedirectPendingIntent) - .build() + private val safetyCenterDataUnknownReviewError: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterTestData.safetyCenterStatusUnknown, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryError(SINGLE_SOURCE_ID) + ) + ), + emptyList() ) - ) - private val safetyCenterDataFromConfigScanning = - SafetyCenterData( - safetyCenterStatusUnknownScanning, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryDefault(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) - - private val safetyCenterDataFromConfig = - SafetyCenterData( - safetyCenterTestData.safetyCenterStatusUnknown, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryDefault(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) - - private val safetyCenterDataUnspecified = - SafetyCenterData( - safetyCenterStatusOk, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryUnspecified(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) - - private val safetyCenterDataOk = - SafetyCenterData( - safetyCenterStatusOk, - emptyList(), - listOf( - SafetyCenterEntryOrGroup(safetyCenterTestData.safetyCenterEntryOk(SINGLE_SOURCE_ID)) - ), - emptyList() - ) - - private val safetyCenterDataOkWithIconAction = - SafetyCenterData( - safetyCenterStatusOk, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData - .safetyCenterEntryOkBuilder(SINGLE_SOURCE_ID) - .setIconAction( - ICON_ACTION_TYPE_INFO, - safetySourceTestData.testActivityRedirectPendingIntent - ) - .build() - ) - ), - emptyList() - ) + private val safetyCenterDataOkOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOkOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueInformation(SINGLE_SOURCE_ID)), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryOk(SINGLE_SOURCE_ID) + ) + ), + emptyList() + ) - private val safetyCenterDataUnknownScanningWithError = - SafetyCenterData( - safetyCenterStatusUnknownScanning, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryError(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) + private val safetyCenterDataOkReviewCriticalEntry: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOkReview, + emptyList(), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() + ) - private val safetyCenterDataUnknownReviewError = - SafetyCenterData( - safetyCenterTestData.safetyCenterStatusUnknown, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryError(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) - - private val safetyCenterDataOkOneAlert = - SafetyCenterData( - safetyCenterStatusOkOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueInformation(SINGLE_SOURCE_ID)), - listOf( - SafetyCenterEntryOrGroup(safetyCenterTestData.safetyCenterEntryOk(SINGLE_SOURCE_ID)) - ), - emptyList() - ) - - private val safetyCenterDataOkReviewCriticalEntry = - SafetyCenterData( - safetyCenterStatusOkReview, - emptyList(), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) - - private val safetyCenterDataOkReviewRecommendationEntry = - SafetyCenterData( - safetyCenterStatusOkReview, - emptyList(), - listOf(safetyCenterEntryOrGroupRecommendation), - emptyList() - ) - - private val safetyCenterDataOkReviewOneAlert = - SafetyCenterData( - safetyCenterStatusOkReviewOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueInformation(SINGLE_SOURCE_ID)), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) - - private val safetyCenterDataGeneralRecommendationOneAlert = - SafetyCenterData( - safetyCenterStatusGeneralRecommendationOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) + private val safetyCenterDataOkReviewRecommendationEntry: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOkReview, + emptyList(), + listOf(safetyCenterEntryOrGroupRecommendation), + emptyList() + ) - private val safetyCenterDataGeneralRecommendationAlertWithConfirmation = - SafetyCenterData( - safetyCenterStatusGeneralRecommendationOneAlert, - listOf( - safetyCenterTestData.safetyCenterIssueRecommendation( - SINGLE_SOURCE_ID, - confirmationDialog = true - ) - ), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) + private val safetyCenterDataOkReviewOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOkReviewOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueInformation(SINGLE_SOURCE_ID)), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() + ) - private val safetyCenterDataAccountRecommendationOneAlert = - SafetyCenterData( - safetyCenterStatusAccountRecommendationOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) + private val safetyCenterDataGeneralRecommendationOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusGeneralRecommendationOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) + ) + ), + emptyList() + ) - private val safetyCenterDataDeviceRecommendationOneAlert = - SafetyCenterData( - safetyCenterStatusDeviceRecommendationOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), - listOf( - SafetyCenterEntryOrGroup( - safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) - ) - ), - emptyList() - ) + private val safetyCenterDataGeneralRecommendationAlertWithConfirmation: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusGeneralRecommendationOneAlert, + listOf( + safetyCenterTestData.safetyCenterIssueRecommendation( + SINGLE_SOURCE_ID, + confirmationDialog = true + ) + ), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) + ) + ), + emptyList() + ) - private val safetyCenterDataGeneralCriticalOneAlert = - SafetyCenterData( - safetyCenterStatusGeneralCriticalOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) + private val safetyCenterDataAccountRecommendationOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusAccountRecommendationOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) + ) + ), + emptyList() + ) - private val safetyCenterDataAccountCriticalOneAlert = - SafetyCenterData( - safetyCenterStatusAccountCriticalOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) + private val safetyCenterDataDeviceRecommendationOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusDeviceRecommendationOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueRecommendation(SINGLE_SOURCE_ID)), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterTestData.safetyCenterEntryRecommendation(SINGLE_SOURCE_ID) + ) + ), + emptyList() + ) - private val safetyCenterDataDeviceCriticalOneAlert = - SafetyCenterData( - safetyCenterStatusDeviceCriticalOneAlert, - listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) + private val safetyCenterDataGeneralCriticalOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusGeneralCriticalOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() + ) - private val safetyCenterDataCriticalOneAlertInFlight = - SafetyCenterData( - safetyCenterStatusGeneralCriticalOneAlert, - listOf( - safetyCenterTestData.safetyCenterIssueCritical( - SINGLE_SOURCE_ID, - isActionInFlight = true - ) - ), - listOf(safetyCenterEntryOrGroupCritical), - emptyList() - ) + private val safetyCenterDataAccountCriticalOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusAccountCriticalOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() + ) - private val safetyCenterDataOkReviewOneDismissedAlertInFlight = - SafetyCenterData( - safetyCenterStatusOkReview, - emptyList(), + private val safetyCenterDataDeviceCriticalOneAlert: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusDeviceCriticalOneAlert, + listOf(safetyCenterTestData.safetyCenterIssueCritical(SINGLE_SOURCE_ID)), listOf(safetyCenterEntryOrGroupCritical), emptyList() ) - .withDismissedIssuesIfAtLeastU( + + private val safetyCenterDataCriticalOneAlertInFlight: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusGeneralCriticalOneAlert, listOf( safetyCenterTestData.safetyCenterIssueCritical( SINGLE_SOURCE_ID, isActionInFlight = true ) - ) + ), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() ) - private val safetyCenterDataFromComplexConfig = - SafetyCenterData( - safetyCenterTestData.safetyCenterStatusUnknown, - emptyList(), - listOf( - SafetyCenterEntryOrGroup( - SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") - .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) - .setSummary( - safetyCenterResourcesApk.getStringByName("group_unknown_summary") + private val safetyCenterDataOkReviewOneDismissedAlertInFlight: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterStatusOkReview, + emptyList(), + listOf(safetyCenterEntryOrGroupCritical), + emptyList() + ) + .withDismissedIssuesIfAtLeastU( + listOf( + safetyCenterTestData.safetyCenterIssueCritical( + SINGLE_SOURCE_ID, + isActionInFlight = true ) - .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY) - .setEntries( - listOf( - safetyCenterTestData.safetyCenterEntryDefault(DYNAMIC_BAREBONE_ID), - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_ALL_OPTIONAL_ID) - .setEnabled(false) - .build(), - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_DISABLED_ID) - .setPendingIntent(null) - .setEnabled(false) - .build(), - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_OTHER_PACKAGE_ID) - .setPendingIntent(null) - .setEnabled(false) - .build() + ) + ) + + private val safetyCenterDataFromComplexConfig: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterTestData.safetyCenterStatusUnknown, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") + .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) + .setSummary( + safetyCenterResourcesApk.getStringByName("group_unknown_summary") ) - ) - .build() + .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY) + .setEntries( + listOf( + safetyCenterTestData.safetyCenterEntryDefault( + DYNAMIC_BAREBONE_ID + ), + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_ALL_OPTIONAL_ID) + .setEnabled(false) + .build(), + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_DISABLED_ID) + .setPendingIntent(null) + .setEnabled(false) + .build(), + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_OTHER_PACKAGE_ID) + .setPendingIntent(null) + .setEnabled(false) + .build() + ) + ) + .build() + ), + safetyCenterEntryGroupMixedFromComplexConfig ), - safetyCenterEntryGroupMixedFromComplexConfig - ), - listOf( - safetyCenterStaticEntryGroupFromComplexConfig, - safetyCenterStaticEntryGroupMixedFromComplexConfig + listOf( + safetyCenterStaticEntryGroupFromComplexConfig, + safetyCenterStaticEntryGroupMixedFromComplexConfig + ) ) - ) - private val safetyCenterDataFromComplexConfigUpdated = - SafetyCenterData( - safetyCenterTestData.safetyCenterStatusCritical(6), - listOf( - safetyCenterTestData.safetyCenterIssueCritical( - DYNAMIC_BAREBONE_ID, - groupId = DYNAMIC_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueCritical( - ISSUE_ONLY_BAREBONE_ID, - groupId = ISSUE_ONLY_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueRecommendation( - DYNAMIC_DISABLED_ID, - groupId = DYNAMIC_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueRecommendation( - ISSUE_ONLY_ALL_OPTIONAL_ID, - groupId = ISSUE_ONLY_GROUP_ID - ), - safetyCenterTestData.safetyCenterIssueInformation( - DYNAMIC_IN_STATELESS_ID, - groupId = MIXED_STATELESS_GROUP_ID + private val safetyCenterDataFromComplexConfigUpdated: SafetyCenterData + get() = + SafetyCenterData( + safetyCenterTestData.safetyCenterStatusCritical(6), + listOf( + safetyCenterTestData.safetyCenterIssueCritical( + DYNAMIC_BAREBONE_ID, + groupId = DYNAMIC_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueCritical( + ISSUE_ONLY_BAREBONE_ID, + groupId = ISSUE_ONLY_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueRecommendation( + DYNAMIC_DISABLED_ID, + groupId = DYNAMIC_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueRecommendation( + ISSUE_ONLY_ALL_OPTIONAL_ID, + groupId = ISSUE_ONLY_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueInformation( + DYNAMIC_IN_STATELESS_ID, + groupId = MIXED_STATELESS_GROUP_ID + ), + safetyCenterTestData.safetyCenterIssueInformation( + ISSUE_ONLY_IN_STATELESS_ID, + groupId = MIXED_STATELESS_GROUP_ID + ) ), - safetyCenterTestData.safetyCenterIssueInformation( - ISSUE_ONLY_IN_STATELESS_ID, - groupId = MIXED_STATELESS_GROUP_ID - ) - ), - listOf( - SafetyCenterEntryOrGroup( - SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") - .setSeverityLevel(ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING) - .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY) - .setSummary("Critical summary") - .setEntries( - listOf( - safetyCenterTestData.safetyCenterEntryCritical(DYNAMIC_BAREBONE_ID), - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_ALL_OPTIONAL_ID) - .setEnabled(false) - .build(), - safetyCenterTestData.safetyCenterEntryRecommendation( - DYNAMIC_DISABLED_ID - ), - safetyCenterTestData.safetyCenterEntryUnspecified( - DYNAMIC_HIDDEN_ID, - pendingIntent = null - ), - safetyCenterTestData.safetyCenterEntryOk( - DYNAMIC_HIDDEN_WITH_SEARCH_ID - ), - safetyCenterTestData - .safetyCenterEntryDefaultBuilder(DYNAMIC_OTHER_PACKAGE_ID) - .setPendingIntent(null) - .setEnabled(false) - .build() + listOf( + SafetyCenterEntryOrGroup( + SafetyCenterEntryGroup.Builder(DYNAMIC_GROUP_ID, "OK") + .setSeverityLevel(ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING) + .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY) + .setSummary("Critical summary") + .setEntries( + listOf( + safetyCenterTestData.safetyCenterEntryCritical( + DYNAMIC_BAREBONE_ID + ), + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_ALL_OPTIONAL_ID) + .setEnabled(false) + .build(), + safetyCenterTestData.safetyCenterEntryRecommendation( + DYNAMIC_DISABLED_ID + ), + safetyCenterTestData.safetyCenterEntryUnspecified( + DYNAMIC_HIDDEN_ID, + pendingIntent = null + ), + safetyCenterTestData.safetyCenterEntryOk( + DYNAMIC_HIDDEN_WITH_SEARCH_ID + ), + safetyCenterTestData + .safetyCenterEntryDefaultBuilder(DYNAMIC_OTHER_PACKAGE_ID) + .setPendingIntent(null) + .setEnabled(false) + .build() + ) ) - ) - .build() + .build() + ), + safetyCenterEntryGroupMixedFromComplexConfig ), - safetyCenterEntryGroupMixedFromComplexConfig - ), - listOf( - safetyCenterStaticEntryGroupFromComplexConfig, - safetyCenterStaticEntryGroupMixedUpdatedFromComplexConfig + listOf( + safetyCenterStaticEntryGroupFromComplexConfig, + safetyCenterStaticEntryGroupMixedUpdatedFromComplexConfig + ) ) - ) @get:Rule(order = 1) val supportsSafetyCenterRule = SupportsSafetyCenterRule(context) @get:Rule(order = 2) val safetyCenterTestRule = SafetyCenterTestRule(safetyCenterTestHelper) diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt index bc5395d74a..fb83f8e87a 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt @@ -72,13 +72,18 @@ class SafetyCenterTestData(context: Context) { /** * The [SafetyCenterStatus] used when the overall status is unknown and no scan is in progress. */ - val safetyCenterStatusUnknown = - SafetyCenterStatus.Builder( - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_title"), - safetyCenterResourcesApk.getStringByName("overall_severity_level_ok_review_summary") - ) - .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) - .build() + val safetyCenterStatusUnknown: SafetyCenterStatus + get() = + SafetyCenterStatus.Builder( + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_ok_review_title" + ), + safetyCenterResourcesApk.getStringByName( + "overall_severity_level_ok_review_summary" + ) + ) + .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN) + .build() /** * Returns a [SafetyCenterStatus] with one alert and the given [statusResource] and -- GitLab From 585169f532372db2bcf2c945bc4ca87b99328242 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Fri, 16 Jun 2023 09:56:46 +0000 Subject: [PATCH 150/577] Update description of v34 mic_toggle_description. There should not be a full stop at the end of this sentence, which is why it was updated on UDC (see ag/22354512). However, some translations currently have a full stop at the end of the sentence, causing the resources to get merged with the non-UDC string. Given this only happens in some locales, this causes resources resolution issues. See b/287453782 for more details. Bug: 285108009 Test: manual Relnote: Updating description for better translations Change-Id: Ic0a5157b7950581c8b3932f163f18b796bcad77e --- PermissionController/res/values-v34/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PermissionController/res/values-v34/strings.xml b/PermissionController/res/values-v34/strings.xml index 30181aa028..26a9b4bccb 100644 --- a/PermissionController/res/values-v34/strings.xml +++ b/PermissionController/res/values-v34/strings.xml @@ -28,7 +28,7 @@ Location access - + For apps and services. If this setting is off, microphone data may still be shared when you call an emergency number For apps and services -- GitLab From 088a545e2dc0104f49ddadeb3acda745fe8bd905 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Fri, 14 Apr 2023 12:00:21 -0700 Subject: [PATCH 151/577] Use parent MediaProvider in clone profiles clone profiles have no MediaProvider, so they must use that of the parent profile, or else the photo picker will be nonfunctional Bug: 277166838 Test: manual Change-Id: If3dd5ffd64c44e1c8e6a6b57022ee7fa744eb9cc (cherry picked from commit 6e5d255b68621afc3c871fb8775179c939bde409) --- .../ui/model/GrantPermissionsViewModel.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index 4e88d4c9bb..24dc51bdff 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -39,6 +39,7 @@ import android.health.connect.HealthPermissions.HEALTH_PERMISSION_GROUP import android.os.Build import android.os.Bundle import android.os.Process +import android.os.UserManager import android.permission.PermissionManager import android.provider.MediaStore import android.util.Log @@ -1346,10 +1347,18 @@ class GrantPermissionsViewModel( } requestInfosLiveData.update() } - activity.startActivityForResult(Intent(MediaStore.ACTION_USER_SELECT_IMAGES_FOR_APP) + // A clone profile doesn't have a MediaProvider. If this user is a clone profile, open + // the photo picker in the parent profile + val userManager = activity.getSystemService(UserManager::class.java)!! + val user = if (userManager.isCloneProfile) { + userManager.getProfileParent(Process.myUserHandle()) ?: Process.myUserHandle() + } else { + Process.myUserHandle() + } + activity.startActivityForResultAsUser(Intent(MediaStore.ACTION_USER_SELECT_IMAGES_FOR_APP) .putExtra(Intent.EXTRA_UID, packageInfo.uid) .setType(KotlinUtils.getMimeTypeForPermissions(unfilteredAffectedPermissions)), - PHOTO_PICKER_REQUEST_CODE) + PHOTO_PICKER_REQUEST_CODE, user) } /** -- GitLab From 293eb42cda301b90b378337ab04e8aafbbe09892 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 19 Jun 2023 11:45:40 +0000 Subject: [PATCH 152/577] Make safety_center_is_enabled flag value match default. Unlike the other flags which are set to their default values at the start of each test, this flag is expected to match the default value in code. If the default value doesn't match the prod code value, this can cause inconsistencies. Bug: 287898326 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: Id30c0d809d19b2597ba1a7091fccc9e84ce626f1 --- .../java/com/android/safetycenter/SafetyCenterService.java | 6 ++++++ .../com/android/safetycenter/testing/SafetyCenterFlags.kt | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 3270f0cea7..d55b1fe7fe 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -840,12 +840,18 @@ public final class SafetyCenterService extends SystemService { @Override public void onPropertiesChanged(DeviceConfig.Properties properties) { + Log.v(TAG, "SafetyCenterEnabledListener#onPropertiesChanged(" + properties + ")"); if (!properties.getKeyset().contains(PROPERTY_SAFETY_CENTER_ENABLED)) { return; } boolean safetyCenterEnabled = properties.getBoolean(PROPERTY_SAFETY_CENTER_ENABLED, false); if (mSafetyCenterEnabled == safetyCenterEnabled) { + Log.v( + TAG, + "Safety Center is already " + + (mSafetyCenterEnabled ? "enabled" : "disabled") + + ", ignoring change"); return; } onSafetyCenterEnabledChanged(safetyCenterEnabled); diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt index 1dee375320..bcd7bb79ce 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt @@ -33,6 +33,7 @@ import android.safetycenter.SafetyCenterManager.REFRESH_REASON_PERIODIC import android.safetycenter.SafetyCenterManager.REFRESH_REASON_RESCAN_BUTTON_CLICK import android.safetycenter.SafetyCenterManager.REFRESH_REASON_SAFETY_CENTER_ENABLED import android.safetycenter.SafetySourceData +import com.android.modules.utils.build.SdkLevel import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity import java.time.Duration @@ -43,7 +44,7 @@ object SafetyCenterFlags { /** Flag that determines whether Safety Center is enabled. */ private val isEnabledFlag = - Flag("safety_center_is_enabled", defaultValue = false, BooleanParser()) + Flag("safety_center_is_enabled", defaultValue = SdkLevel.isAtLeastU(), BooleanParser()) /** Flag that determines whether Safety Center can send notifications. */ private val notificationsFlag = -- GitLab From 031ded607091bd8dcc19bf02c2b489b6f877880e Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Tue, 20 Jun 2023 12:10:40 +0000 Subject: [PATCH 153/577] Remove unused argument. Bug: 267476663 Test: atest SafetyCenterFunctionalTestCases Relnote: N/A Change-Id: I23d7daa29567b8da646f2898ba56fe58b48cc512 --- .../notifications/SafetyCenterNotificationFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java index 4e88cf3204..4a141b33ef 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java @@ -271,7 +271,7 @@ final class SafetyCenterNotificationFactory { if (issueAction.willResolve()) { return getReceiverPendingIntentForResolvingAction(issueKey, issueAction); } else { - return getDirectPendingIntentForNonResolvingAction(issueKey, issueAction); + return getDirectPendingIntentForNonResolvingAction(issueAction); } } @@ -292,7 +292,7 @@ final class SafetyCenterNotificationFactory { } private PendingIntent getDirectPendingIntentForNonResolvingAction( - SafetyCenterIssueKey issueKey, SafetySourceIssue.Action issueAction) { + SafetySourceIssue.Action issueAction) { return issueAction.getPendingIntent(); } } -- GitLab From 75287ee4da3dc0e6e2c57ce91ab45770bfec0b68 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Thu, 27 Apr 2023 15:46:59 -0700 Subject: [PATCH 154/577] DO NOT MERGE On upgrade to U, grant RMVUS to apps granted RMI/V If an app is granted a permission in the READ_MEDIA_VISUAL group, then on upgrade, grant it READ_MEDIA_VISUAL_USER_SELECTED Fixes: 279969768 Relnote: N/A Test: atest RuntimePermissionsUpgradeControllerTest Change-Id: I19a18443d286045683bccdf7617c20968eda93cd (cherry picked from commit 3bfc9d4737154f754afe5a580b07a6aaed30cc2f) --- .../RuntimePermissionsUpgradeController.kt | 57 +++++++++++++----- ...RuntimePermissionsUpgradeControllerTest.kt | 58 +++++++++++++++++++ 2 files changed, 99 insertions(+), 16 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt index 3405ab0144..11299def9f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeController.kt @@ -42,6 +42,7 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPerm import com.android.permissioncontroller.permission.utils.IPC import com.android.permissioncontroller.permission.utils.KotlinUtils.grantBackgroundRuntimePermissions import com.android.permissioncontroller.permission.utils.KotlinUtils.grantForegroundRuntimePermissions +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.PermissionMapping.getPlatformPermissionNamesOfGroup import com.android.permissioncontroller.permission.utils.PermissionMapping.getRuntimePlatformPermissionNames import com.android.permissioncontroller.permission.utils.application @@ -55,7 +56,9 @@ internal object RuntimePermissionsUpgradeController { private val LOG_TAG = RuntimePermissionsUpgradeController::class.java.simpleName // The latest version of the runtime permissions database - private val LATEST_VERSION = if (SdkLevel.isAtLeastT()) { + private val LATEST_VERSION = if (SdkLevel.isAtLeastU()) { + 11 + } else if (SdkLevel.isAtLeastT()) { 10 } else { 9 @@ -134,6 +137,7 @@ internal object RuntimePermissionsUpgradeController { val needBackgroundAppPermGroups = sdkUpgradedFromP && currentVersion <= 6 val needAccessMediaAppPermGroups = !isNewUser && currentVersion <= 7 val needGrantedExternalStorage = currentVersion <= 9 && SdkLevel.isAtLeastT() + val needGrantedReadMediaVisual = currentVersion <= 10 && SdkLevel.isAtLeastU() val isDeviceUpgrading = context.packageManager.isDeviceUpgrading // All data needed by this method. @@ -156,24 +160,17 @@ internal object RuntimePermissionsUpgradeController { private val pkgInfoProvider = UserPackageInfosLiveData[myUserHandle()] /** Provides all {@link LightAppPermGroup} this upgrade needs */ - private var permGroupProviders: MutableList? = null + private var permGroupProviders: MutableSet? = null /** {@link #permGroupProviders} that already provided a result */ private val permGroupProvidersDone = mutableSetOf() init { // First step: Load packages + perm infos - // TODO ntmyren: remove once b/154796729 is fixed - Log.i("RuntimePermissions", "observing UserPackageInfoLiveData for " + - "${myUserHandle().identifier} in RuntimePermissionsUpgradeController") addSource(pkgInfoProvider) { pkgInfos -> if (pkgInfos != null) { removeSource(pkgInfoProvider) - // TODO ntmyren: remove once b/154796729 is fixed - Log.i("RuntimePermissions", "observing " + - "PreinstalledUserPackageInfoLiveData for ${myUserHandle().identifier}" + - " in RuntimePermissionsUpgradeController") addSource(preinstalledPkgInfoProvider) { preinstalledPkgInfos -> if (preinstalledPkgInfos != null) { removeSource(preinstalledPkgInfoProvider) @@ -203,15 +200,16 @@ internal object RuntimePermissionsUpgradeController { if (permGroupProviders == null && pkgInfoProvider.value != null) { // Second step: Trigger load of app-perm-groups - permGroupProviders = mutableListOf() + permGroupProviders = mutableSetOf() // Only load app-perm-groups needed for this upgrade if (needBackgroundAppPermGroups || needAccessMediaAppPermGroups || - needGrantedExternalStorage) { + needGrantedExternalStorage || needGrantedReadMediaVisual) { for ((pkgName, _, requestedPerms, requestedPermFlags) in pkgInfoProvider.value!!) { var requestsAccessMediaLocation = false var hasGrantedExternalStorage = false + var hasGrantedReadMediaVisual = false for ((perm, flags) in requestedPerms.zip(requestedPermFlags)) { if (needBackgroundAppPermGroups && @@ -220,17 +218,22 @@ internal object RuntimePermissionsUpgradeController { permission_group.LOCATION, myUserHandle()]) } - if (needAccessMediaAppPermGroups || needGrantedExternalStorage) { + if (needAccessMediaAppPermGroups || needGrantedExternalStorage || + needGrantedReadMediaVisual) { if (needAccessMediaAppPermGroups && perm == permission.ACCESS_MEDIA_LOCATION) { requestsAccessMediaLocation = true } - if (perm == permission.READ_EXTERNAL_STORAGE && - flags and PackageInfo.REQUESTED_PERMISSION_GRANTED - != 0) { + val isGranted = + flags and PackageInfo.REQUESTED_PERMISSION_GRANTED != 0 + if (perm == permission.READ_EXTERNAL_STORAGE && isGranted) { hasGrantedExternalStorage = true } + if (PermissionMapping.getGroupOfPlatformPermission(perm) + == permission_group.READ_MEDIA_VISUAL && isGranted) { + hasGrantedReadMediaVisual = true + } } } @@ -255,6 +258,10 @@ internal object RuntimePermissionsUpgradeController { accessMediaLocationPermGroup, myUserHandle()]) } } + if (hasGrantedReadMediaVisual && needGrantedReadMediaVisual) { + permGroupProviders!!.add(LightAppPermGroupLiveData[pkgName, + permission_group.READ_MEDIA_VISUAL, myUserHandle()]) + } } } @@ -536,6 +543,24 @@ internal object RuntimePermissionsUpgradeController { currentVersion = 10 } + if (currentVersion == 10 && SdkLevel.isAtLeastU()) { + // On U, if the app is granted READ_MEDIA_VISUAL, expand the grant to + // READ_MEDIA_VISUAL_USER_SELECTED + if (isDeviceUpgrading && !isNewUser) { + Log.i(LOG_TAG, "Grandfathering READ_MEDIA_VISUAL_USER_SELECTED to apps already " + + "granted visual permissions") + val visualAppPermGroups = storageAndMediaAppPermGroups.filter { + it.packageInfo.targetSdkVersion >= Build.VERSION_CODES.TIRAMISU && + it.permGroupInfo.name == permission_group.READ_MEDIA_VISUAL && + it.isGranted && it.isUserSet + } + visualAppPermGroups.forEach { + grants.add(Grant(false, it)) + } + } + currentVersion = 11 + } + // XXX: Add new upgrade steps above this point. return Triple(currentVersion, exemptions, grants) @@ -591,7 +616,7 @@ internal object RuntimePermissionsUpgradeController { private val isBackground: Boolean, /** Group to be granted */ private val group: LightAppPermGroup, - /** Which of th permissions in the group should be granted */ + /** Which of the permissions in the group should be granted */ private val permissions: List = group.permissions.keys.toList() ) { /** diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/RuntimePermissionsUpgradeControllerTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/RuntimePermissionsUpgradeControllerTest.kt index d576f29243..86aab9b600 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/RuntimePermissionsUpgradeControllerTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/RuntimePermissionsUpgradeControllerTest.kt @@ -24,6 +24,7 @@ import android.Manifest.permission.READ_EXTERNAL_STORAGE import android.Manifest.permission.READ_MEDIA_AUDIO import android.Manifest.permission.READ_MEDIA_IMAGES import android.Manifest.permission.READ_MEDIA_VIDEO +import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED import android.Manifest.permission.SEND_SMS import android.Manifest.permission.WRITE_EXTERNAL_STORAGE import android.app.ActivityManager @@ -547,6 +548,63 @@ class RuntimePermissionsUpgradeControllerTest { verifyGranted(TEST_PKG_NAME, READ_MEDIA_IMAGES) } + @Test + fun userSelectedGrantedIfReadMediaVisualGrantedWhenVersionIs10() { + Assume.assumeTrue(SdkLevel.isAtLeastU()) + whenever(packageManager.isDeviceUpgrading).thenReturn(true) + setInitialDatabaseVersion(10) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_MEDIA_VIDEO, isGranted = true, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_IMAGES, isGranted = true, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_VISUAL_USER_SELECTED, isGranted = false), + targetSdkVersion = 33 + ) + ) + + upgradeIfNeeded() + + verifyGranted(TEST_PKG_NAME, READ_MEDIA_VISUAL_USER_SELECTED) + } + + @Test + fun userSelectedNotGrantedIfDeviceNotUpgradingWhenVersionIs10() { + Assume.assumeTrue(SdkLevel.isAtLeastU()) + whenever(packageManager.isDeviceUpgrading).thenReturn(false) + setInitialDatabaseVersion(10) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_MEDIA_VIDEO, isGranted = true, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_IMAGES, isGranted = true, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_VISUAL_USER_SELECTED, isGranted = false), + targetSdkVersion = 33 + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, READ_MEDIA_VISUAL_USER_SELECTED) + } + + @Test + fun userSelectedNotGrantedIfReadMediaVisualNotGrantedWhenVersionIs10() { + Assume.assumeTrue(SdkLevel.isAtLeastU()) + whenever(packageManager.isDeviceUpgrading).thenReturn(false) + setInitialDatabaseVersion(10) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_MEDIA_VIDEO, isGranted = false, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_IMAGES, isGranted = false, flags = FLAG_PERMISSION_USER_SET), + Permission(READ_MEDIA_VISUAL_USER_SELECTED, isGranted = false), + targetSdkVersion = 33 + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, READ_MEDIA_VISUAL_USER_SELECTED) + } + @After fun resetSystem() { // Send low memory notifications for all data repositories which will clear cached data -- GitLab From 78ef7e9728935014ebdcac292da67b8024544fa8 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 19 Jun 2023 15:57:37 +0000 Subject: [PATCH 155/577] Use a lock for SafetyCenterEnabledListener#mSafetyCenterEnabled. Supposedly it was thread-safe already due to being called on the same thread, but this setup is rather error-prone and relied on the initial state being setup on the same thread as the one updating the listener. This thread is instantiated rather shortly after boot, so I wonder if that's why the initial state wasn't the expected one in b/287898326. It appears `#setInitialState` wasn't being called (or was called with the wrong value). Bug: 287898326 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: Iee1d056a7d0d12dceab28ce4e45342e9eaee63ed --- .../safetycenter/SafetyCenterService.java | 85 ++++++++++--------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index d55b1fe7fe..5d38476834 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -93,9 +93,6 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; -import java.util.concurrent.Executor; - -import javax.annotation.concurrent.NotThreadSafe; /** * Service for the safety center. @@ -229,22 +226,35 @@ public final class SafetyCenterService extends SystemService { return; } - registerSafetyCenterEnabledListener(); SafetyCenterPullAtomCallback pullAtomCallback; synchronized (mApiLock) { + registerSafetyCenterEnabledListenerLocked(); pullAtomCallback = newSafetyCenterPullAtomCallbackLocked(); mNotificationChannels.createAllChannelsForAllUsers(getContext()); } registerSafetyCenterPullAtomCallback(pullAtomCallback); } - private void registerSafetyCenterEnabledListener() { - Executor foregroundThreadExecutor = ForegroundThread.getExecutor(); - SafetyCenterEnabledListener listener = new SafetyCenterEnabledListener(); - // Ensure the listener is called first with the current state on the same thread. - foregroundThreadExecutor.execute(listener::setInitialState); + @GuardedBy("mApiLock") + private void registerSafetyCenterEnabledListenerLocked() { + SafetyCenterEnabledListener safetyCenterEnabledListener = new SafetyCenterEnabledListener(); DeviceConfig.addOnPropertiesChangedListener( - DeviceConfig.NAMESPACE_PRIVACY, foregroundThreadExecutor, listener); + DeviceConfig.NAMESPACE_PRIVACY, + ForegroundThread.getExecutor(), + safetyCenterEnabledListener); + // Set the initial state *after* registering the listener, in the unlikely event that the + // flag changes between creating the listener and registering it (in which case we could + // miss an update and end up with an inconsistent state). + setInitialStateLocked(safetyCenterEnabledListener); + } + + @GuardedBy("mApiLock") + @SuppressWarnings("GuardedBy") + // @GuardedBy is unable to infer that the `SafetyCenterService.this.mApiLock` in + // `SafetyCenterService` is the same as the one in `SafetyCenterEnabledListener` here, so it + // has to be suppressed. + private void setInitialStateLocked(SafetyCenterEnabledListener safetyCenterEnabledListener) { + safetyCenterEnabledListener.setInitialStateLocked(); } @GuardedBy("mApiLock") @@ -830,61 +840,60 @@ public final class SafetyCenterService extends SystemService { * value maps to {@link SafetyCenterManager#isSafetyCenterEnabled()}. It should only be * registered if the device supports SafetyCenter and the {@link SafetyCenterConfig} was loaded * successfully. - * - *

This listener is not thread-safe; it should be called on a single thread. */ - @NotThreadSafe private final class SafetyCenterEnabledListener implements OnPropertiesChangedListener { + @GuardedBy("mApiLock") private boolean mSafetyCenterEnabled; @Override public void onPropertiesChanged(DeviceConfig.Properties properties) { - Log.v(TAG, "SafetyCenterEnabledListener#onPropertiesChanged(" + properties + ")"); if (!properties.getKeyset().contains(PROPERTY_SAFETY_CENTER_ENABLED)) { return; } boolean safetyCenterEnabled = properties.getBoolean(PROPERTY_SAFETY_CENTER_ENABLED, false); - if (mSafetyCenterEnabled == safetyCenterEnabled) { - Log.v( - TAG, - "Safety Center is already " - + (mSafetyCenterEnabled ? "enabled" : "disabled") - + ", ignoring change"); - return; + synchronized (mApiLock) { + if (mSafetyCenterEnabled == safetyCenterEnabled) { + Log.i( + TAG, + "Safety Center is already " + + (mSafetyCenterEnabled ? "enabled" : "disabled") + + ", ignoring change"); + return; + } + onSafetyCenterEnabledChangedLocked(safetyCenterEnabled); } - onSafetyCenterEnabledChanged(safetyCenterEnabled); } - private void setInitialState() { + @GuardedBy("mApiLock") + private void setInitialStateLocked() { mSafetyCenterEnabled = SafetyCenterFlags.getSafetyCenterEnabled(); Log.i(TAG, "Safety Center is " + (mSafetyCenterEnabled ? "enabled" : "disabled")); } - private void onSafetyCenterEnabledChanged(boolean safetyCenterEnabled) { - Log.i(TAG, "Safety Center is now " + (safetyCenterEnabled ? "enabled" : "disabled")); - + @GuardedBy("mApiLock") + private void onSafetyCenterEnabledChangedLocked(boolean safetyCenterEnabled) { if (safetyCenterEnabled) { - onApiEnabled(); + onApiEnabledLocked(); } else { - onApiDisabled(); + onApiDisabledLocked(); } + mSafetyCenterEnabled = safetyCenterEnabled; + Log.i(TAG, "Safety Center is now " + (mSafetyCenterEnabled ? "enabled" : "disabled")); } - private void onApiEnabled() { - synchronized (mApiLock) { - mSafetyCenterBroadcastDispatcher.sendEnabledChanged(); - } + @GuardedBy("mApiLock") + private void onApiEnabledLocked() { + mSafetyCenterBroadcastDispatcher.sendEnabledChanged(); } - private void onApiDisabled() { - synchronized (mApiLock) { - clearDataLocked(); - mSafetyCenterListeners.clear(); - mSafetyCenterBroadcastDispatcher.sendEnabledChanged(); - } + @GuardedBy("mApiLock") + private void onApiDisabledLocked() { + clearDataLocked(); + mSafetyCenterListeners.clear(); + mSafetyCenterBroadcastDispatcher.sendEnabledChanged(); } } -- GitLab From d3e64f3912206d8d1f5addc9f50f9870c03099c0 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 21 Jun 2023 12:43:26 +0000 Subject: [PATCH 156/577] Fix more error-prone warnings. Bug: 266202404 Bug: 267476663 Test: no error-prone warning shows up Relnote: N/A Change-Id: Ie969694fcdb7b782952896ddab8b64426b2e7c27 --- .../android/safetycenter/SafetyCenterConfigReader.java | 8 ++++---- .../safetycenter/SafetyCenterShellCommandHandler.java | 9 ++++++++- .../data/SafetyCenterIssueDismissalRepository.java | 10 ++++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index bbd35eb5e8..caeee02f26 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -137,15 +137,15 @@ public final class SafetyCenterConfigReader { @Nullable public ExternalSafetySource getExternalSafetySource( String safetySourceId, String callingPackageName) { - SafetyCenterConfigInternal currentConfig = getCurrentConfigInternal(); + SafetyCenterConfigInternal testConfig = mConfigInternalOverrideForTests; SafetyCenterConfigInternal xmlConfig = requireNonNull(mConfigInternalFromXml); - if (currentConfig == xmlConfig) { + if (testConfig == null) { // No override, access source directly. - return currentConfig.getExternalSafetySources().get(safetySourceId); + return xmlConfig.getExternalSafetySources().get(safetySourceId); } ExternalSafetySource externalSafetySourceInTestConfig = - currentConfig.getExternalSafetySources().get(safetySourceId); + testConfig.getExternalSafetySources().get(safetySourceId); ExternalSafetySource externalSafetySourceInRealConfig = xmlConfig.getExternalSafetySources().get(safetySourceId); diff --git a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java index 9d6b40bfa7..137cd04385 100644 --- a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java +++ b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java @@ -89,11 +89,18 @@ final class SafetyCenterShellCommandHandler extends BasicShellCommandHandler { return handleDefaultCommands(cmd); } } catch (RemoteException | IllegalArgumentException e) { - e.printStackTrace(getErrPrintWriter()); + printError(e); return 1; } } + // We want to log the stack trace on a specific PrintWriter here, this is a false positive as + // the warning does not consider the overload that takes a PrintWriter as an argument (yet). + @SuppressWarnings("CatchAndPrintStackTrace") + private void printError(Throwable error) { + error.printStackTrace(getErrPrintWriter()); + } + private int onEnabled() throws RemoteException { getOutPrintWriter().println(mSafetyCenterManager.isSafetyCenterEnabled()); return 0; diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java index 299da60a9f..7af2b10f23 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java @@ -436,12 +436,18 @@ final class SafetyCenterIssueDismissalRepository { try { Files.copy(issueDismissalRepositoryFile.toPath(), new FileOutputStream(fd)); } catch (IOException e) { - // TODO(b/266202404) - e.printStackTrace(fout); + printError(e, fout); } fout.println(); } + // We want to dump the stack trace on a specific PrintWriter here, this is a false positive as + // the warning does not consider the overload that takes a PrintWriter as an argument (yet). + @SuppressWarnings("CatchAndPrintStackTrace") + private void printError(Throwable error, PrintWriter fout) { + error.printStackTrace(fout); + } + @Nullable private IssueData getOrWarn(SafetyCenterIssueKey issueKey, String reason) { IssueData issueData = mIssues.get(issueKey); -- GitLab From e6dbc95ce24eb3e7d4c8731acddcf6e0a581fc53 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 21 Jun 2023 16:09:02 +0000 Subject: [PATCH 157/577] Re-enable multi-users test on presubmit. As large tests since they can take longer than 1m to run. Bug: 264992293 Test: atest SafetyCenterFunctionalMultiUsersTestCases Relnote: N/A Change-Id: Ibeb3744c1c5a74d6b5acc779d73c8774852ed911 --- .../multiusers/SafetyCenterMultiUsersTest.kt | 34 ++----------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt index fb571330bc..227b7e7bd5 100644 --- a/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt +++ b/tests/functional/safetycenter/multiusers/src/android/safetycenter/functional/multiusers/SafetyCenterMultiUsersTest.kt @@ -40,13 +40,13 @@ import android.safetycenter.SafetyCenterStatus.REFRESH_STATUS_NONE import android.safetycenter.SafetyEvent import android.safetycenter.SafetySourceData import androidx.test.core.app.ApplicationProvider +import androidx.test.filters.LargeTest import com.android.bedstead.harrier.BedsteadJUnit4 import com.android.bedstead.harrier.DeviceState import com.android.bedstead.harrier.annotations.EnsureHasAdditionalUser import com.android.bedstead.harrier.annotations.EnsureHasCloneProfile import com.android.bedstead.harrier.annotations.EnsureHasNoWorkProfile import com.android.bedstead.harrier.annotations.EnsureHasWorkProfile -import com.android.bedstead.harrier.annotations.Postsubmit import com.android.bedstead.harrier.annotations.enterprise.EnsureHasDeviceOwner import com.android.bedstead.harrier.annotations.enterprise.EnsureHasNoDeviceOwner import com.android.bedstead.nene.TestApis @@ -105,6 +105,7 @@ import org.junit.runner.RunWith * Functional tests for our APIs and UI on a device with multiple users. e.g. with a managed or * additional user(s). */ +@LargeTest @RunWith(BedsteadJUnit4::class) class SafetyCenterMultiUsersTest { @@ -370,7 +371,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile // TODO(b/242999951): Write these tests using the getSafetyCenterData() method instead. fun getSafetyCenterData_withProfileOwner_hasWorkPolicyInfo() { @@ -380,7 +380,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasDeviceOwner // TODO(b/242999951): Write these tests using the getSafetyCenterData() method instead. fun getSafetyCenterData_withDeviceOwner_hasWorkPolicyInfo() { @@ -390,7 +389,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile // TODO(b/242999951): Write these tests using the getSafetyCenterData() method instead. fun launchActivity_withQuietModeEnabled_hasWorkPolicyInfo() { @@ -402,7 +400,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasNoWorkProfile @EnsureHasNoDeviceOwner // TODO(b/242999951): Write these tests using the getSafetyCenterData() method instead. @@ -413,7 +410,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetySourceData_withQuietModeEnabled_dataIsNotCleared() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -435,7 +431,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) fun getSafetySourceData_afterAdditionalUserRemoved_returnsNull() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -464,7 +459,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetySourceData_withoutInteractAcrossUserPermission_shouldThrowError() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -477,7 +471,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetySourceData_withoutAppInstalledForWorkProfile_shouldReturnNull() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -499,7 +492,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetySourceData_withRemovedProfile_shouldReturnNull() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -521,7 +513,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetySourceData_withProfileInQuietMode_shouldReturnData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -543,7 +534,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasNoWorkProfile fun getSafetyCenterData_withComplexConfigWithoutWorkProfile_returnsPrimaryDataFromConfig() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexAllProfileConfig) @@ -579,7 +569,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_withComplexConfigWithoutDataProvided_returnsDataFromConfig() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexAllProfileConfig) @@ -628,7 +617,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_withComplexConfigWithPrimaryDataProvided_returnsPrimaryDataProvided() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexAllProfileConfig) @@ -682,7 +670,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_withComplexConfigWithAllDataProvided_returnsAllDataProvided() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexAllProfileConfig) @@ -792,7 +779,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_withQuietMode_shouldHaveWorkProfilePausedSummaryAndNoWorkIssues() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexAllProfileConfig) @@ -853,7 +839,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_withDataForDifferentUserProfileGroup_shouldBeUnaffected() { @@ -878,7 +863,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun getSafetyCenterData_afterManagedProfileRemoved_returnsDefaultData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -950,7 +934,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) fun getSafetyCenterData_afterAdditionalUserRemoved_returnsDefaultData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -972,7 +955,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_primaryProfileIssueOnlySource_shouldNotBeAbleToSetDataToWorkProfile() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) @@ -990,7 +972,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_withoutInteractAcrossUserPermission_shouldThrowError() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1008,7 +989,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_withoutAppInstalledForWorkProfile_shouldNoOp() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1030,7 +1010,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_withRemovedProfile_shouldNoOp() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1052,7 +1031,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasCloneProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_withUnsupportedProfile_shouldNoOp() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1073,7 +1051,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_withProfileInQuietMode_shouldSetData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1095,7 +1072,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_issuesOnlySourceWithWorkProfile_shouldBeAbleToSetData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceAllProfileConfig) @@ -1123,7 +1099,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_primaryProfileSource_shouldNotBeAbleToSetDataToWorkProfile() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -1140,7 +1115,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_sourceWithWorkProfile_shouldBeAbleToSetData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1166,7 +1140,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasWorkProfile(installInstrumentedApp = TRUE) fun setSafetySourceData_notificationsAllowed_workProfile_sendsNotification() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceAllProfileConfig) @@ -1193,7 +1166,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) fun setSafetySourceData_forStoppedUser_shouldSetData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -1215,7 +1187,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) fun setSafetySourceData_forBothPrimaryAdditionalUser_shouldSetData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -1241,7 +1212,6 @@ class SafetyCenterMultiUsersTest { } @Test - @Postsubmit(reason = "Test takes too much time to setup") @EnsureHasAdditionalUser(installInstrumentedApp = TRUE) fun setSafetySourceData_forAdditionalUser_shouldNotAffectDataForPrimaryUser() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) -- GitLab From 8378b4dfc2709ec6702f5737f41868179dabf9c3 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Thu, 22 Jun 2023 09:21:21 +0000 Subject: [PATCH 158/577] Add retries on a test. This should hopefully make it less flaky on presubmit while we work on a fix. This seems better than just disabling the test to keep the coverage. Bug: 288381777 Test: atest SafetyCenterActivityFunctionalTestCases Relnote: N/A Change-Id: Icb289244a93a953754deceda6699bfe0be2bf87c --- .../safetycenter/functional/ui/SafetyCenterActivityTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 2afaa7057c..36f75b40b0 100644 --- a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -1124,7 +1124,7 @@ class SafetyCenterActivityTest { ) safetyCenterTestHelper.setData(SOURCE_ID_3, safetySourceTestData.informationWithIssue) - context.launchSafetyCenterActivity { + context.launchSafetyCenterActivity(withRetry = true) { clickMoreIssuesCard() val uiDevice = getUiDevice() -- GitLab From cead7d3195b56318b26ea6a58d0ab16f9a92ba26 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Thu, 22 Jun 2023 14:25:43 +0000 Subject: [PATCH 159/577] Don't run receivers code if SC is disabled. Bug: 287971377 Test: manual Relnote: N/A Change-Id: Ic3bd12a09aba846f7b937e8c0cdf2285166b69ef --- .../safetycenter/SafetyCenterService.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 5d38476834..2d714127ed 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -1012,7 +1012,7 @@ public final class SafetyCenterService extends SystemService { /** {@link BroadcastReceiver} which handles Locale changes. */ private final class LocaleBroadcastReceiver extends BroadcastReceiver { - private static final String TAG = "LocaleBroadcastReceiver"; + private static final String TAG = "SafetyCenterLocaleBroad"; void register(Context context) { IntentFilter filter = new IntentFilter(); @@ -1026,6 +1026,17 @@ public final class SafetyCenterService extends SystemService { @Override public void onReceive(Context context, Intent intent) { + if (!SafetyCenterFlags.getSafetyCenterEnabled()) { + Log.i(TAG, "Safety Center is disabled, ignoring intent: " + intent); + return; + } + + String action = intent.getAction(); + if (!TextUtils.equals(action, Intent.ACTION_LOCALE_CHANGED)) { + Log.w(TAG, "Received unexpected action: " + action); + return; + } + Log.d(TAG, "Locale changed broadcast received"); synchronized (mApiLock) { mNotificationChannels.createAllChannelsForAllUsers(getContext()); @@ -1039,7 +1050,7 @@ public final class SafetyCenterService extends SystemService { */ private final class UserBroadcastReceiver extends BroadcastReceiver { - private static final String TAG = "UserBroadcastReceiver"; + private static final String TAG = "SafetyCenterUserBroadca"; void register(Context context) { IntentFilter filter = new IntentFilter(); @@ -1058,6 +1069,11 @@ public final class SafetyCenterService extends SystemService { @Override public void onReceive(Context context, Intent intent) { + if (!SafetyCenterFlags.getSafetyCenterEnabled()) { + Log.i(TAG, "Safety Center is disabled, ignoring intent: " + intent); + return; + } + String action = intent.getAction(); if (action == null) { Log.w(TAG, "Received broadcast with null action"); -- GitLab From 867a07a32b221fd5e55c103d4fa48cda448b3da2 Mon Sep 17 00:00:00 2001 From: Pyuli Naithani Date: Thu, 13 Apr 2023 19:29:25 +0000 Subject: [PATCH 160/577] Don't show Health Permissions if the app doesn't handle VIEW_PERMISSION_USAGE Relnote: Filter invalid health permission usage apps BUG:273946678 Test: atest HealthConnectAppPermissionFragmentTest Test: atest HealthConnectAllAppPermissionFragmentTest Change-Id: I6892177329471591ee3cfb67ce570453e6baf231 --- .../data/AppPermGroupUiInfoLiveData.kt | 4 +- .../ui/model/AllAppPermissionsViewModel.kt | 2 + .../ui/model/GrantPermissionsViewModel.kt | 8 +- .../permission/utils/Utils.java | 70 ++++++++- .../tests/permissionui/Android.bp | 2 + .../tests/permissionui/AndroidTest.xml | 4 + .../Android.bp | 34 +++++ .../AndroidManifest.xml | 26 ++++ .../appthatrequestpermission/DummyActivity.kt | 21 +++ .../Android.bp | 34 +++++ .../AndroidManifest.xml | 34 +++++ .../appthatrequestpermission/DummyActivity.kt | 21 +++ ...althConnectAllAppPermissionFragmentTest.kt | 135 ++++++++++++++++++ .../HealthConnectAppPermissionFragmentTest.kt | 112 +++++++++++++++ .../permissionui/ui/TestAppUtils.kt | 11 +- 15 files changed, 506 insertions(+), 12 deletions(-) create mode 100644 PermissionController/tests/permissionui/PermissionUiInvalidUseHealthConnectPermissionApp/Android.bp create mode 100644 PermissionController/tests/permissionui/PermissionUiInvalidUseHealthConnectPermissionApp/AndroidManifest.xml create mode 100644 PermissionController/tests/permissionui/PermissionUiInvalidUseHealthConnectPermissionApp/src/com/android/permissioncontroller/tests/appthatrequestpermission/DummyActivity.kt create mode 100644 PermissionController/tests/permissionui/PermissionUiUseHealthConnectPermissionApp/Android.bp create mode 100644 PermissionController/tests/permissionui/PermissionUiUseHealthConnectPermissionApp/AndroidManifest.xml create mode 100644 PermissionController/tests/permissionui/PermissionUiUseHealthConnectPermissionApp/src/com/android/permissioncontroller/tests/appthatrequestpermission/DummyActivity.kt create mode 100644 PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt create mode 100644 PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt index b9d2d237ad..7c69d6078c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt @@ -62,6 +62,7 @@ class AppPermGroupUiInfoLiveData private constructor( private val permGroupLiveData = PermGroupLiveData[permGroupName] private val permissionStateLiveData = PermStateLiveData[packageName, permGroupName, user] private val isStorage = permGroupName == STORAGE + private val isHealth = Utils.isHealthPermissionGroup(permGroupName) init { isSpecialLocation = LocationUtils.isLocationGroupAndProvider(app, @@ -127,7 +128,8 @@ class AppPermGroupUiInfoLiveData private constructor( val shouldShow = packageInfo.enabled && isGrantableAndNotLegacyPlatform(packageInfo, groupInfo, requestedPermissionInfos) && - (!isStorage || Utils.shouldShowStorage(packageInfo)) + (!isStorage || Utils.shouldShowStorage(packageInfo)) && + (!isHealth || Utils.shouldShowHealthPermission(packageInfo, groupInfo.name)) val isSystemApp = !isUserSensitive(permissionState) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt index d789f4e1eb..226208041e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt @@ -81,6 +81,8 @@ class AllAppPermissionsViewModel( .filter { filterGroup == null || it.key == filterGroup } .filter { (it.key != Manifest.permission_group.STORAGE || Utils.shouldShowStorage(packageInfo)) } + .filter { (!Utils.isHealthPermissionGroup(it.key) || + Utils.shouldShowHealthPermission(packageInfo, it.key))} } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index 36d63d8ed7..d773b5ff75 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -43,7 +43,6 @@ import android.os.UserManager import android.permission.PermissionManager import android.provider.MediaStore import android.util.Log -import androidx.annotation.ChecksSdkIntAtLeast import androidx.core.util.Consumer import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider @@ -619,7 +618,7 @@ class GrantPermissionsViewModel( if (rhsHasOneTime && !lhsHasOneTime) { -1 } else if ((!rhsHasOneTime && lhsHasOneTime) || - isHealthPermissionGroup(rhs.groupName) + Utils.isHealthPermissionGroup(rhs.groupName) ) { 1 } else { @@ -1280,11 +1279,6 @@ class GrantPermissionsViewModel( } } - @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) - private fun isHealthPermissionGroup(permGroupName: String): Boolean { - return SdkLevel.isAtLeastU() && HEALTH_PERMISSION_GROUP.equals(permGroupName) - } - fun handleHealthConnectPermissions(activity: Activity) { if (activityResultCallback == null) { activityResultCallback = Consumer { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java index d4354bd72f..6b3dc98ad0 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java @@ -42,6 +42,7 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_W import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED; import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY; import static android.health.connect.HealthConnectManager.ACTION_MANAGE_HEALTH_PERMISSIONS; +import static android.health.connect.HealthPermissions.HEALTH_PERMISSION_GROUP; import static android.os.UserHandle.myUserId; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; @@ -73,6 +74,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.hardware.SensorPrivacyManager; +import android.health.connect.HealthConnectManager; import android.os.Binder; import android.os.Build; import android.os.Parcelable; @@ -109,6 +111,8 @@ import com.android.permissioncontroller.permission.model.AppPermissionGroup; import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup; import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo; +import kotlin.Triple; + import java.lang.annotation.Retention; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -120,8 +124,6 @@ import java.util.Locale; import java.util.Random; import java.util.Set; -import kotlin.Triple; - public final class Utils { @Retention(SOURCE) @@ -942,6 +944,70 @@ public final class Utils { } } + /** + * Returns true if the group name passed is that of the Platform health group. + * @param permGroupName name of the group that needs to be checked. + */ + @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + public static Boolean isHealthPermissionGroup(String permGroupName) { + return SdkLevel.isAtLeastU() && HEALTH_PERMISSION_GROUP.equals(permGroupName); + } + + /** + * Return whether health permission setting entry should be shown or not + * + * Should not show Health permissions preference if the package doesn't handle + * VIEW_PERMISSION_USAGE_INTENT. + * + * Will show if above is true AND permission is already granted. + * + * @param packageInfo the {@link PackageInfo} app which uses the permission + * @param permGroupName the health permission group name to show + * @return {@code TRUE} iff health permission should be shown + */ + @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + public static Boolean shouldShowHealthPermission(LightPackageInfo packageInfo, + String permGroupName) { + if (!isHealthPermissionGroup(permGroupName)) { + return false; + } + + PermissionControllerApplication app = PermissionControllerApplication.get(); + PackageManager pm = app.getPackageManager(); + Context context = getUserContext(app, UserHandle.getUserHandleForUid(packageInfo.getUid())); + + List permissions = new ArrayList<>(); + try { + permissions.addAll(getPermissionInfosForGroup(pm, permGroupName)); + } catch (NameNotFoundException e) { + Log.e(LOG_TAG, "No permissions found for permission group " + permGroupName); + return false; + } + + // Check in permission is already granted as we should not hide it in the UX at that point. + List grantedPermissions = packageInfo.getGrantedPermissions(); + for (PermissionInfo permission : permissions) { + boolean isCurrentlyGranted = grantedPermissions.contains(permission.name); + if (isCurrentlyGranted) { + Log.d(LOG_TAG, "At least one Health permission group permission is granted, " + + "show permission group entry"); + return true; + } + } + + Intent viewUsageIntent = new Intent(Intent.ACTION_VIEW_PERMISSION_USAGE); + viewUsageIntent.addCategory(HealthConnectManager.CATEGORY_HEALTH_PERMISSIONS); + viewUsageIntent.setPackage(packageInfo.getPackageName()); + + ResolveInfo resolveInfo = pm.resolveActivity(viewUsageIntent, PackageManager.MATCH_ALL); + if (resolveInfo == null) { + Log.e(LOG_TAG, "Package that asks for Health permission must also handle " + + "VIEW_PERMISSION_USAGE_INTENT."); + return false; + } + return true; + } + /** * Get a device protected storage based shared preferences. Avoid storing sensitive data in it. * diff --git a/PermissionController/tests/permissionui/Android.bp b/PermissionController/tests/permissionui/Android.bp index 704307c1f8..9a898d88b6 100644 --- a/PermissionController/tests/permissionui/Android.bp +++ b/PermissionController/tests/permissionui/Android.bp @@ -60,6 +60,8 @@ android_test { ":CtsAppThatRequestsLocationPermission29", ":PermissionUiUseStoragePermissionApp", ":PermissionUiUseCameraPermissionApp", + ":PermissionUiUseHealthConnectPermissionApp", + ":PermissionUiInvalidUseHealthConnectPermissionApp", ":PermissionUiDefineAdditionalPermissionApp", ":PermissionUiUseAdditionalPermissionApp", ":PermissionUiUseTwoAdditionalPermissionsApp", diff --git a/PermissionController/tests/permissionui/AndroidTest.xml b/PermissionController/tests/permissionui/AndroidTest.xml index 62fc6ed3f3..9cea3b243a 100644 --- a/PermissionController/tests/permissionui/AndroidTest.xml +++ b/PermissionController/tests/permissionui/AndroidTest.xml @@ -43,6 +43,10 @@ value="/data/local/tmp/permissioncontroller/tests/permissionui/PermissionUiUseStoragePermissionApp.apk" />

If not set, the default value is {@link Bundle#EMPTY}. */ @NonNull @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setExtras(@NonNull Bundle extras) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mExtras = requireNonNull(extras); return this; @@ -319,7 +322,8 @@ public final class SafetySourceData implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder clearExtras() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mExtras = Bundle.EMPTY; return this; diff --git a/framework-s/java/android/safetycenter/SafetySourceIssue.java b/framework-s/java/android/safetycenter/SafetySourceIssue.java index 9851317642..de75aa298d 100644 --- a/framework-s/java/android/safetycenter/SafetySourceIssue.java +++ b/framework-s/java/android/safetycenter/SafetySourceIssue.java @@ -337,7 +337,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public CharSequence getAttributionTitle() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mAttributionTitle; } @@ -418,7 +419,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Notification getCustomNotification() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mCustomNotification; } @@ -449,7 +451,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public int getNotificationBehavior() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mNotificationBehavior; } @@ -482,7 +485,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public String getDeduplicationId() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mDeduplicationId; } @@ -505,7 +509,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public int getIssueActionability() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mIssueActionability; } @@ -739,7 +744,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public ConfirmationDialogDetails getConfirmationDialogDetails() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mConfirmationDialogDetails; } @@ -938,7 +944,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull Action action) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(action); mId = action.mId; @@ -984,7 +991,8 @@ public final class SafetySourceIssue implements Parcelable { public Builder setConfirmationDialogDetails( @Nullable ConfirmationDialogDetails confirmationDialogDetails) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mConfirmationDialogDetails = confirmationDialogDetails; return this; @@ -1229,7 +1237,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull SafetySourceIssue safetySourceIssue) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(safetySourceIssue); mId = safetySourceIssue.mId; @@ -1266,7 +1275,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public Builder setAttributionTitle(@Nullable CharSequence attributionTitle) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mAttributionTitle = attributionTitle; return this; @@ -1335,7 +1345,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setCustomNotification(@Nullable Notification customNotification) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mCustomNotification = customNotification; return this; @@ -1355,7 +1366,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setNotificationBehavior(@NotificationBehavior int notificationBehavior) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mNotificationBehavior = validateNotificationBehavior(notificationBehavior); return this; @@ -1370,7 +1382,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setDeduplicationId(@Nullable String deduplicationId) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mDeduplicationId = deduplicationId; return this; @@ -1388,7 +1401,8 @@ public final class SafetySourceIssue implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setIssueActionability(@IssueActionability int issueActionability) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mIssueActionability = validateIssueActionability(issueActionability); return this; diff --git a/framework-s/java/android/safetycenter/SafetySourceStatus.java b/framework-s/java/android/safetycenter/SafetySourceStatus.java index 37095eb594..d8900f8d97 100644 --- a/framework-s/java/android/safetycenter/SafetySourceStatus.java +++ b/framework-s/java/android/safetycenter/SafetySourceStatus.java @@ -348,7 +348,8 @@ public final class SafetySourceStatus implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull SafetySourceStatus safetySourceStatus) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(safetySourceStatus); mTitle = safetySourceStatus.mTitle; diff --git a/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java b/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java index c94cedbd64..f6c6c2156a 100644 --- a/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java +++ b/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java @@ -122,7 +122,8 @@ public final class SafetyCenterConfig implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull SafetyCenterConfig safetyCenterConfig) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(safetyCenterConfig); mSafetySourcesGroups.addAll(safetyCenterConfig.mSafetySourcesGroups); diff --git a/framework-s/java/android/safetycenter/config/SafetySource.java b/framework-s/java/android/safetycenter/config/SafetySource.java index fddb8b6223..8aa8978501 100644 --- a/framework-s/java/android/safetycenter/config/SafetySource.java +++ b/framework-s/java/android/safetycenter/config/SafetySource.java @@ -297,7 +297,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public String getOptionalPackageName() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mPackageName; } @@ -488,7 +489,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public boolean areNotificationsAllowed() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mNotificationsAllowed; } @@ -503,7 +505,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public String getDeduplicationGroup() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mDeduplicationGroup; } @@ -525,7 +528,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Set getPackageCertificateHashes() { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } return mPackageCertificateHashes; } @@ -668,7 +672,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull SafetySource safetySource) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(safetySource); mType = safetySource.mType; @@ -884,7 +889,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setNotificationsAllowed(boolean notificationsAllowed) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mNotificationsAllowed = notificationsAllowed; return this; @@ -903,7 +909,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder setDeduplicationGroup(@Nullable String deduplicationGroup) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mDeduplicationGroup = deduplicationGroup; return this; @@ -919,7 +926,8 @@ public final class SafetySource implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder addPackageCertificateHash(@NonNull String packageCertificateHash) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } mPackageCertificateHashes.add(packageCertificateHash); return this; diff --git a/framework-s/java/android/safetycenter/config/SafetySourcesGroup.java b/framework-s/java/android/safetycenter/config/SafetySourcesGroup.java index 1bbe25bbb9..9f9ff96cd8 100644 --- a/framework-s/java/android/safetycenter/config/SafetySourcesGroup.java +++ b/framework-s/java/android/safetycenter/config/SafetySourcesGroup.java @@ -314,7 +314,8 @@ public final class SafetySourcesGroup implements Parcelable { @RequiresApi(UPSIDE_DOWN_CAKE) public Builder(@NonNull SafetySourcesGroup original) { if (!SdkLevel.isAtLeastU()) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "Method not supported on versions lower than UPSIDE_DOWN_CAKE"); } requireNonNull(original); mSafetySources.addAll(original.mSafetySources); diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt index 8d44f27363..486cc3ccfd 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt @@ -255,11 +255,7 @@ class SafetyCenterIssueTest { SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") .build() - val exception = assertFailsWith(UnsupportedOperationException::class) { issue.groupId } - - assertThat(exception) - .hasMessageThat() - .isEqualTo("Method not supported for versions lower than UPSIDE_DOWN_CAKE") + assertFailsWith(UnsupportedOperationException::class) { issue.groupId } } @Test @@ -277,14 +273,9 @@ class SafetyCenterIssueTest { assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") - val exception = - assertFailsWith(UnsupportedOperationException::class) { - SafetyCenterIssue.Builder(issue1).setGroupId("group_id").build() - } - - assertThat(exception) - .hasMessageThat() - .isEqualTo("Method not supported for versions lower than UPSIDE_DOWN_CAKE") + assertFailsWith(UnsupportedOperationException::class) { + SafetyCenterIssue.Builder(issue1).setGroupId("group_id").build() + } } @Test diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 7c8c821787..1e972a51b8 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -1590,17 +1590,12 @@ class SafetyCenterManagerTest { assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) - val exception = - assertFailsWith(UnsupportedOperationException::class) { - safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( - REFRESH_REASON_PAGE_OPEN, - safetySourceIds = listOf(SOURCE_ID_1, SOURCE_ID_3) - ) - } - - assertThat(exception) - .hasMessageThat() - .isEqualTo("Method not supported for versions lower than UPSIDE_DOWN_CAKE") + assertFailsWith(UnsupportedOperationException::class) { + safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( + REFRESH_REASON_PAGE_OPEN, + safetySourceIds = listOf(SOURCE_ID_1, SOURCE_ID_3) + ) + } } @Test -- GitLab From 38cf1ee25c9fa7383e22b2873aa415f4d7c78192 Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Wed, 28 Jun 2023 22:57:07 +0000 Subject: [PATCH 174/577] Add CtsHibernationTestCases to postsubmit test mapping Ensure CtsHibernationTestCases are running in postsubmit test mapping configs. Relnote: N/A (no user-visible or partner changes) Bug: 288324294 Test: presubmit Change-Id: I5dba19bdc83910b23e112267c8a3ecd6d424ba49 --- .../com/android/permissioncontroller/permission/TEST_MAPPING | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/TEST_MAPPING b/PermissionController/src/com/android/permissioncontroller/permission/TEST_MAPPING index b65eb6710d..52f0fd1a52 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/TEST_MAPPING +++ b/PermissionController/src/com/android/permissioncontroller/permission/TEST_MAPPING @@ -74,5 +74,10 @@ } ] } + ], + "postsubmit": [ + { + "name": "CtsHibernationTestCases" + } ] } -- GitLab From c3d11b695ed4168bd83b84caaf759f1b66a49219 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Wed, 28 Jun 2023 18:02:41 -0700 Subject: [PATCH 175/577] Only enforce component being exported for required activities. Because activities are often default handlers that are supposed to be startable by normal apps, however things like services and receivers may indeed only be invoked by the system itself which bypasses exposed check. Bug: 273995779 Fixes: 288292649 Test: adb shell dumpsys role | grep -1 SYSTEM_ACTIVITY_RECOGNIZER Change-Id: Ic84fc3754db39ca9d0c1e4cb33834726e8b54573 --- .../role/controller/behavior/AssistantRoleBehavior.java | 3 --- .../android/role/controller/model/RequiredActivity.java | 5 +++++ .../android/role/controller/model/RequiredComponent.java | 8 ++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java index a96af65996..eb1ceb3fa3 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java @@ -112,9 +112,6 @@ public class AssistantRoleBehavior implements RoleBehavior { ResolveInfo serviceResolveInfo = serviceResolveInfos.get(i); ServiceInfo serviceInfo = serviceResolveInfo.serviceInfo; - if (!serviceInfo.exported) { - continue; - } if (!isAssistantVoiceInteractionService(userPackageManager, serviceInfo)) { if (filterPackageName != null) { Log.w(LOG_TAG, "Package " + filterPackageName diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RequiredActivity.java b/PermissionController/role-controller/java/com/android/role/controller/model/RequiredActivity.java index 788d66a326..25c97aefb1 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RequiredActivity.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RequiredActivity.java @@ -51,6 +51,11 @@ public class RequiredActivity extends RequiredComponent { return userPackageManager.queryIntentActivities(intent, flags); } + @Override + protected boolean isComponentQualified(@NonNull ResolveInfo resolveInfo) { + return resolveInfo.activityInfo.exported; + } + @NonNull @Override protected ComponentInfo getComponentComponentInfo(@NonNull ResolveInfo resolveInfo) { diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RequiredComponent.java b/PermissionController/role-controller/java/com/android/role/controller/model/RequiredComponent.java index 28bec4f771..f1ef502098 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RequiredComponent.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RequiredComponent.java @@ -196,8 +196,7 @@ public abstract class RequiredComponent { for (int resolveInfosIndex = 0; resolveInfosIndex < resolveInfosSize; resolveInfosIndex++) { ResolveInfo resolveInfo = resolveInfos.get(resolveInfosIndex); - ComponentInfo componentInfo = getComponentComponentInfo(resolveInfo); - if (!componentInfo.exported) { + if (!isComponentQualified(resolveInfo)) { continue; } @@ -215,6 +214,7 @@ public abstract class RequiredComponent { } } + ComponentInfo componentInfo = getComponentComponentInfo(resolveInfo); if (hasMetaData) { Bundle componentMetaData = componentInfo.metaData; if (componentMetaData == null) { @@ -263,6 +263,10 @@ public abstract class RequiredComponent { protected abstract List queryIntentComponentsAsUser(@NonNull Intent intent, int flags, @NonNull UserHandle user, @NonNull Context context); + protected boolean isComponentQualified(@NonNull ResolveInfo resolveInfo) { + return true; + } + /** * Get the {@code ComponentInfo} of a component. * -- GitLab From 38c40564efc6addc109f1b94f87e55af0d1b1d36 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 28 Jun 2023 15:18:18 +0000 Subject: [PATCH 176/577] Prevent waitForBroadcast timeouts. It looks like ag/19084766 wasn't sufficient, so we have to revert to limiting the length of that operation. Also technically that operation is only needed when the receiver is called without the permission in the test, so ensured that this only happens there and not elsewhere. Bug: 270434248 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: I43404b7f0bb45b73730e41406ea2837a45ce8be8 --- .../cts/SafetyCenterManagerTest.kt | 27 +++---- .../cts/SafetyCenterUnsupportedTest.kt | 2 +- .../SafetyCenterEnabledChangedReceiver.kt | 16 ++-- .../testing/SafetySourceReceiver.kt | 38 ++++------ .../safetycenter/testing/WaitForBroadcasts.kt | 74 +++++++++++++++++++ 5 files changed, 107 insertions(+), 50 deletions(-) create mode 100644 tests/utils/safetycenter/java/com/android/safetycenter/testing/WaitForBroadcasts.kt diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 1e972a51b8..7dc183c7fb 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -812,10 +812,7 @@ class SafetyCenterManagerTest { val enabledChangedReceiver = SafetyCenterEnabledChangedReceiver(context) assertFailsWith(TimeoutCancellationException::class) { - enabledChangedReceiver.setSafetyCenterEnabledWithoutReceiverPermissionAndWait( - false, - TIMEOUT_SHORT - ) + enabledChangedReceiver.setSafetyCenterEnabledWithoutReceiverPermissionAndWait(false) } enabledChangedReceiver.unregister() } @@ -852,10 +849,7 @@ class SafetyCenterManagerTest { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) assertFailsWith(TimeoutCancellationException::class) { - SafetySourceReceiver.setSafetyCenterEnabledWithoutReceiverPermissionAndWait( - false, - TIMEOUT_SHORT - ) + SafetySourceReceiver.setSafetyCenterEnabledWithoutReceiverPermissionAndWait(false) } } @@ -933,7 +927,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } @@ -991,7 +985,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } val apiSafetySourceDataBeforeSettingFlag = @@ -1113,8 +1107,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithoutReceiverPermissionAndWait( - REFRESH_REASON_RESCAN_BUTTON_CLICK, - TIMEOUT_SHORT + REFRESH_REASON_RESCAN_BUTTON_CLICK ) } val apiSafetySourceData = @@ -1132,7 +1125,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } } @@ -1404,7 +1397,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } } @@ -1500,7 +1493,7 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PERIODIC, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } @@ -1573,8 +1566,8 @@ class SafetyCenterManagerTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT, - emptyList() + safetySourceIds = emptyList(), + timeout = TIMEOUT_SHORT, ) } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt index a4d1ef4368..d882fc3cb7 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt @@ -215,7 +215,7 @@ class SafetyCenterUnsupportedTest { assertFailsWith(TimeoutCancellationException::class) { safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( REFRESH_REASON_PAGE_OPEN, - TIMEOUT_SHORT + timeout = TIMEOUT_SHORT ) } } diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt index b948dc52c3..f8926caac9 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt @@ -24,8 +24,8 @@ import android.content.IntentFilter import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetyCenterManager.ACTION_SAFETY_CENTER_ENABLED_CHANGED import androidx.annotation.RequiresApi -import com.android.compatibility.common.util.SystemUtil import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG +import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.Coroutines.runBlockingWithTimeout import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity import java.time.Duration @@ -55,20 +55,18 @@ class SafetyCenterEnabledChangedReceiver(private val context: Context) : Broadca fun setSafetyCenterEnabledWithReceiverPermissionAndWait( value: Boolean, timeout: Duration = TIMEOUT_LONG - ) = + ): Boolean = callWithShellPermissionIdentity(READ_SAFETY_CENTER_STATUS) { - setSafetyCenterEnabledWithoutReceiverPermissionAndWait(value, timeout) + SafetyCenterFlags.isEnabled = value + receiveSafetyCenterEnabledChanged(timeout) } fun setSafetyCenterEnabledWithoutReceiverPermissionAndWait( value: Boolean, - timeout: Duration = TIMEOUT_LONG - ): Boolean { + ) { SafetyCenterFlags.isEnabled = value - if (timeout < TIMEOUT_LONG) { - SystemUtil.waitForBroadcasts() - } - return receiveSafetyCenterEnabledChanged(timeout) + WaitForBroadcasts.waitForBroadcasts() + receiveSafetyCenterEnabledChanged(TIMEOUT_SHORT) } fun unregister() { diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt index 2ba87040a6..29072c989e 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt @@ -35,8 +35,8 @@ import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyCenterManager.ACTION_SAFETY_CENTER_ENABLED_CHANGED import androidx.annotation.RequiresApi import androidx.test.core.app.ApplicationProvider -import com.android.compatibility.common.util.SystemUtil import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG +import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.Coroutines.runBlockingWithTimeout import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.dismissSafetyCenterIssueWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.executeSafetyCenterIssueActionWithPermission @@ -164,46 +164,38 @@ class SafetySourceReceiver : BroadcastReceiver() { fun SafetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( refreshReason: Int, - timeout: Duration = TIMEOUT_LONG, - safetySourceIds: List? = null - ) = + safetySourceIds: List? = null, + timeout: Duration = TIMEOUT_LONG + ): String = callWithShellPermissionIdentity(SEND_SAFETY_CENTER_UPDATE) { - refreshSafetySourcesWithoutReceiverPermissionAndWait( - refreshReason, - timeout, - safetySourceIds - ) + refreshSafetySourcesWithPermission(refreshReason, safetySourceIds) + receiveRefreshSafetySources(timeout) } fun SafetyCenterManager.refreshSafetySourcesWithoutReceiverPermissionAndWait( refreshReason: Int, - timeout: Duration, safetySourceIds: List? = null - ): String { + ) { refreshSafetySourcesWithPermission(refreshReason, safetySourceIds) - if (timeout < TIMEOUT_LONG) { - SystemUtil.waitForBroadcasts() - } - return receiveRefreshSafetySources(timeout) + WaitForBroadcasts.waitForBroadcasts() + receiveRefreshSafetySources(TIMEOUT_SHORT) } fun setSafetyCenterEnabledWithReceiverPermissionAndWait( value: Boolean, timeout: Duration = TIMEOUT_LONG - ) = + ): Boolean = callWithShellPermissionIdentity(SEND_SAFETY_CENTER_UPDATE) { - setSafetyCenterEnabledWithoutReceiverPermissionAndWait(value, timeout) + SafetyCenterFlags.isEnabled = value + receiveSafetyCenterEnabledChanged(timeout) } fun setSafetyCenterEnabledWithoutReceiverPermissionAndWait( value: Boolean, - timeout: Duration = TIMEOUT_LONG - ): Boolean { + ) { SafetyCenterFlags.isEnabled = value - if (timeout < TIMEOUT_LONG) { - SystemUtil.waitForBroadcasts() - } - return receiveSafetyCenterEnabledChanged(timeout) + WaitForBroadcasts.waitForBroadcasts() + receiveSafetyCenterEnabledChanged(TIMEOUT_SHORT) } fun SafetyCenterManager.executeSafetyCenterIssueActionWithPermissionAndWait( diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/WaitForBroadcasts.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/WaitForBroadcasts.kt new file mode 100644 index 0000000000..3c19ea1804 --- /dev/null +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/WaitForBroadcasts.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.safetycenter.testing + +import android.util.Log +import androidx.annotation.GuardedBy +import com.android.compatibility.common.util.SystemUtil +import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG +import com.android.safetycenter.testing.Coroutines.runBlockingWithTimeout +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock + +/** A class to help waiting on broadcasts to be processed by the system. */ +object WaitForBroadcasts { + + private const val TAG: String = "WaitForBroadcasts" + + private val mutex = Mutex() + @GuardedBy("mutex") private var currentJob: Job? = null + + /** + * Waits for broadcasts for at most [TIMEOUT_LONG] and prints a warning if that operation timed + * out. + * + * The [SystemUtil.waitForBroadcasts] operation will keep on running even after the timeout as + * it is not interruptible. Further calls to [WaitForBroadcasts.waitForBroadcasts] will re-use + * the currently running [SystemUtil.waitForBroadcasts] call if it hasn't completed. + */ + fun waitForBroadcasts() { + try { + runBlockingWithTimeout { + mutex + .withLock { + val newJob = currentJob.maybeStartNewWaitForBroadcasts() + currentJob = newJob + newJob + } + .join() + } + } catch (e: TimeoutCancellationException) { + Log.w(TAG, "Waiting for broadcasts timed out, proceeding anyway", e) + } + } + + // We're using a GlobalScope here as there doesn't seem to be a straightforward way to timeout + // and interrupt the waitForBroadcasts() call. Given it's uninterruptible, we'd rather just have + // at most one globally-bound waitForBroadcasts() call running at any given time. + @OptIn(DelicateCoroutinesApi::class) + private fun Job?.maybeStartNewWaitForBroadcasts(): Job = + if (this != null && isActive) { + this + } else { + GlobalScope.launch(Dispatchers.IO) { SystemUtil.waitForBroadcasts() } + } +} -- GitLab From 9763c63d2b33a3949534e8edbf35afca07a5347b Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Fri, 30 Jun 2023 14:09:57 +0000 Subject: [PATCH 177/577] Make sure PRIVACY_CONTROLS redirects to appropriate place. When SC is disabled. Bug: 289183566 Test: atest SafetyCenterFunctionalTestCases Relnote: Handle PRIVACY_CONTROLS intent action with Security & Privacy disabled. Change-Id: I5d2f5a7191f8f1eb901c704aa8f4703435438186 --- .../safetycenter/ui/SafetyCenterActivity.java | 13 ++++- .../functional/ui/SafetyCenterActivityTest.kt | 47 +++++++++++++------ .../testing/SafetyCenterActivityLauncher.kt | 3 +- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java index 8f31da828c..9fd3292569 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java @@ -36,6 +36,7 @@ import android.safetycenter.SafetyCenterManager; import android.safetycenter.config.SafetyCenterConfig; import android.safetycenter.config.SafetySource; import android.safetycenter.config.SafetySourcesGroup; +import android.text.TextUtils; import android.util.Log; import androidx.annotation.Nullable; @@ -132,13 +133,23 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity { if (mSafetyCenterManager == null || !mSafetyCenterManager.isSafetyCenterEnabled()) { Log.w(TAG, "Safety Center disabled, redirecting to settings page"); startActivity( - new Intent(Settings.ACTION_SETTINGS).addFlags(FLAG_ACTIVITY_FORWARD_RESULT)); + new Intent(getActionToRedirectWhenDisabled()) + .addFlags(FLAG_ACTIVITY_FORWARD_RESULT)); finish(); return true; } return false; } + private String getActionToRedirectWhenDisabled() { + boolean isPrivacyControls = + TextUtils.equals(getIntent().getAction(), PRIVACY_CONTROLS_ACTION); + if (isPrivacyControls) { + return Settings.ACTION_PRIVACY_SETTINGS; + } + return Settings.ACTION_SETTINGS; + } + private boolean maybeRedirectIntoTwoPaneSettings() { return shouldUseTwoPaneSettings() && tryRedirectTwoPaneSettings(); } diff --git a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 36f75b40b0..4d13267bf0 100644 --- a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -57,6 +57,7 @@ import com.android.safetycenter.testing.SafetySourceReceiver import com.android.safetycenter.testing.SafetySourceTestData import com.android.safetycenter.testing.SafetySourceTestData.Companion.CRITICAL_ISSUE_ID import com.android.safetycenter.testing.SafetySourceTestData.Companion.RECOMMENDATION_ISSUE_ID +import com.android.safetycenter.testing.SettingsPackage.getSettingsPackageName import com.android.safetycenter.testing.SupportsSafetyCenterRule import com.android.safetycenter.testing.UiTestHelper.MORE_ISSUES_LABEL import com.android.safetycenter.testing.UiTestHelper.RESCAN_BUTTON_LABEL @@ -72,10 +73,10 @@ import com.android.safetycenter.testing.UiTestHelper.waitButtonDisplayed import com.android.safetycenter.testing.UiTestHelper.waitCollapsedIssuesDisplayed import com.android.safetycenter.testing.UiTestHelper.waitDisplayed import com.android.safetycenter.testing.UiTestHelper.waitExpandedIssuesDisplayed +import com.android.safetycenter.testing.UiTestHelper.waitPageTitleDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceDataDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueNotDisplayed -import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit.MILLISECONDS import org.junit.After import org.junit.Assume.assumeFalse @@ -106,7 +107,7 @@ class SafetyCenterActivityTest { val timeoutRule = Timeout( InstrumentationRegistry.getArguments().getString("timeout_msec", "60000").toLong(), - TimeUnit.MILLISECONDS + MILLISECONDS ) @After @@ -1474,17 +1475,35 @@ class SafetyCenterActivityTest { } } - companion object { - private const val EXPAND_ISSUE_GROUP_QS_FRAGMENT_KEY = "expand_issue_group_qs_fragment_key" - private const val SAFETY_SOURCE_1_TITLE = "Safety Source 1 Title" - private const val SAFETY_SOURCE_1_SUMMARY = "Safety Source 1 Summary" - private const val SAFETY_SOURCE_2_TITLE = "Safety Source 2 Title" - private const val SAFETY_SOURCE_2_SUMMARY = "Safety Source 2 Summary" - private const val SAFETY_SOURCE_3_TITLE = "Safety Source 3 Title" - private const val SAFETY_SOURCE_3_SUMMARY = "Safety Source 3 Summary" - private const val SAFETY_SOURCE_4_TITLE = "Safety Source 4 Title" - private const val SAFETY_SOURCE_4_SUMMARY = "Safety Source 4 Summary" - private const val SAFETY_SOURCE_5_TITLE = "Safety Source 5 Title" - private const val SAFETY_SOURCE_5_SUMMARY = "Safety Source 5 Summary" + @Test + fun launchActivity_openWithPrivacyControlsIntent_showsPrivacyControls() { + context.launchSafetyCenterActivity(intentAction = PRIVACY_CONTROLS_ACTION) { + waitPageTitleDisplayed("Privacy controls") + } + } + + @Test + fun launchActivity_openWithPrivacyControlsIntentWithScDisabled_showsLegacyPrivacyPage() { + safetyCenterTestHelper.setEnabled(false) + + context.launchSafetyCenterActivity(intentAction = PRIVACY_CONTROLS_ACTION) { + waitDisplayed(By.pkg(context.getSettingsPackageName())) + waitPageTitleDisplayed("Privacy") + } + } + + private companion object { + const val EXPAND_ISSUE_GROUP_QS_FRAGMENT_KEY = "expand_issue_group_qs_fragment_key" + const val SAFETY_SOURCE_1_TITLE = "Safety Source 1 Title" + const val SAFETY_SOURCE_1_SUMMARY = "Safety Source 1 Summary" + const val SAFETY_SOURCE_2_TITLE = "Safety Source 2 Title" + const val SAFETY_SOURCE_2_SUMMARY = "Safety Source 2 Summary" + const val SAFETY_SOURCE_3_TITLE = "Safety Source 3 Title" + const val SAFETY_SOURCE_3_SUMMARY = "Safety Source 3 Summary" + const val SAFETY_SOURCE_4_TITLE = "Safety Source 4 Title" + const val SAFETY_SOURCE_4_SUMMARY = "Safety Source 4 Summary" + const val SAFETY_SOURCE_5_TITLE = "Safety Source 5 Title" + const val SAFETY_SOURCE_5_SUMMARY = "Safety Source 5 Summary" + const val PRIVACY_CONTROLS_ACTION = "android.settings.PRIVACY_CONTROLS" } } diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt index 647b77be11..a1e5646bdf 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt @@ -48,6 +48,7 @@ object SafetyCenterActivityLauncher { */ fun Context.launchSafetyCenterActivity( intentExtras: Bundle? = null, + intentAction: String = ACTION_SAFETY_CENTER, withReceiverPermission: Boolean = false, withRetry: Boolean = false, preventTrampolineToSettings: Boolean = true, @@ -55,7 +56,7 @@ object SafetyCenterActivityLauncher { ) { val launchSafetyCenterIntent = createIntent( - ACTION_SAFETY_CENTER, + intentAction, intentExtras, preventTrampolineToSettings = preventTrampolineToSettings ) -- GitLab From 2aa49745877cdf2a31115182136f58864615c695 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 3 Jul 2023 11:36:45 +0000 Subject: [PATCH 178/577] Use order instead of RuleChain. See https://g3doc.corp.google.com/devtools/staticanalysis/errorprone/g3doc/bugpattern/DoNotUseRuleChain.md?cl=head Bug: 283078285 Test: atest SafetyCenterHostSideTestCases Relnote: N/A Change-Id: Ia346e5fa1bc60c3f585e2d81266782a6a0f3845e --- .../SafetyCenterInteractionLoggingHostTest.kt | 10 +++----- ...enterSystemEventReportedLoggingHostTest.kt | 24 ++++++++----------- ...fetySourceStateCollectedLoggingHostTest.kt | 10 +++----- 3 files changed, 16 insertions(+), 28 deletions(-) diff --git a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt index 5ef8ed84a3..57231ba2a9 100644 --- a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt +++ b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt @@ -32,19 +32,15 @@ import org.junit.Before import org.junit.Ignore import org.junit.Rule import org.junit.Test -import org.junit.rules.RuleChain import org.junit.runner.RunWith /** Host-side tests for Safety Center statsd logging. */ @RunWith(DeviceJUnit4ClassRunner::class) class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { - private val safetyCenterRule = RequireSafetyCenterRule(this) - private val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) - - @Rule - @JvmField - val rules: RuleChain = RuleChain.outerRule(safetyCenterRule).around(helperAppRule) + @get:Rule(order = 1) val safetyCenterRule = RequireSafetyCenterRule(this) + @get:Rule(order = 2) + val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) @Before fun setUp() { diff --git a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterSystemEventReportedLoggingHostTest.kt b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterSystemEventReportedLoggingHostTest.kt index 65e47fa91c..4563d2e635 100644 --- a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterSystemEventReportedLoggingHostTest.kt +++ b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterSystemEventReportedLoggingHostTest.kt @@ -31,18 +31,14 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.RuleChain import org.junit.runner.RunWith @RunWith(DeviceJUnit4ClassRunner::class) class SafetyCenterSystemEventReportedLoggingHostTest : BaseHostJUnit4Test() { - private val safetyCenterRule = RequireSafetyCenterRule(this) - private val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) - - @Rule - @JvmField - val rules: RuleChain = RuleChain.outerRule(safetyCenterRule).around(helperAppRule) + @get:Rule(order = 1) val safetyCenterRule = RequireSafetyCenterRule(this) + @get:Rule(order = 2) + val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) @Before fun setUp() { @@ -183,18 +179,18 @@ class SafetyCenterSystemEventReportedLoggingHostTest : BaseHostJUnit4Test() { @Test fun refreshAllSources_secondTime_someSourcesChanged_dataChangedCorrect() { helperAppRule.runTest( - ".SafetySourceStateCollectedLoggingHelperTests", - "refreshAllSources_twiceDifferentData_onlySource1Unchanged" + ".SafetySourceStateCollectedLoggingHelperTests", + "refreshAllSources_twiceDifferentData_onlySource1Unchanged" ) val systemEventAtoms = - ReportUtils.getEventMetricDataList(device).mapNotNull { - it.atom.safetyCenterSystemEventReported - } + ReportUtils.getEventMetricDataList(device).mapNotNull { + it.atom.safetyCenterSystemEventReported + } assertWithMessage("the number of atoms with dataChanged=false") - .that(systemEventAtoms.count { !it.dataChanged }) - .isEqualTo(1) // Only source 1 + .that(systemEventAtoms.count { !it.dataChanged }) + .isEqualTo(1) // Only source 1 } companion object { diff --git a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetySourceStateCollectedLoggingHostTest.kt b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetySourceStateCollectedLoggingHostTest.kt index 22a380e12d..da24f99d28 100644 --- a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetySourceStateCollectedLoggingHostTest.kt +++ b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetySourceStateCollectedLoggingHostTest.kt @@ -29,19 +29,15 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.RuleChain import org.junit.runner.RunWith /** Host-side tests for Safety Center statsd logging. */ @RunWith(DeviceJUnit4ClassRunner::class) class SafetySourceStateCollectedLoggingHostTest : BaseHostJUnit4Test() { - private val safetyCenterRule = RequireSafetyCenterRule(this) - private val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) - - @Rule - @JvmField - val rules: RuleChain = RuleChain.outerRule(safetyCenterRule).around(helperAppRule) + @get:Rule(order = 1) val safetyCenterRule = RequireSafetyCenterRule(this) + @get:Rule(order = 2) + val helperAppRule = HelperAppRule(this, HelperApp.APK_NAME, HelperApp.PACKAGE_NAME) @Before fun setUp() { -- GitLab From c796a4ff0353defb82ad6770095a8d6acbc68a41 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Wed, 21 Jun 2023 15:56:59 +0000 Subject: [PATCH 179/577] Remove codename checks now that U is no-longer in pre-release. Bug: 258228790 Test: atest CtsSafetyCenterTestCases && atest SafetyCenterFunctionalTestCases Relnote: N/A Change-Id: I948c59e6c1f6e04c14f4214aa56a58f0dbba114f --- .../safetycenter/cts/SafetyCenterDataTest.kt | 62 ++++---- .../safetycenter/cts/SafetyCenterIssueTest.kt | 52 +++---- .../cts/SafetyCenterManagerTest.kt | 21 +-- .../safetycenter/cts/SafetyEventTest.kt | 4 +- .../safetycenter/cts/SafetySourceDataTest.kt | 16 +- .../safetycenter/cts/SafetySourceIssueTest.kt | 139 ++++++------------ .../cts/SafetySourceStatusTest.kt | 4 +- .../cts/config/SafetyCenterConfigTest.kt | 4 +- .../cts/config/SafetySourceTest.kt | 10 +- .../cts/config/SafetySourcesGroupTest.kt | 8 +- .../functional/ui/SafetyCenterActivityTest.kt | 23 +-- .../functional/SafetyCenterManagerTest.kt | 74 +++++----- .../SafetyCenterNotificationTest.kt | 22 +-- .../functional/ui/PrivacySubpageTest.kt | 2 +- .../functional/ui/SafetyCenterSubpagesTest.kt | 2 +- 15 files changed, 184 insertions(+), 259 deletions(-) diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterDataTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterDataTest.kt index 33f52b564f..c344d7ebd7 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterDataTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterDataTest.kt @@ -19,7 +19,7 @@ package android.safetycenter.cts import android.app.PendingIntent import android.content.Context import android.content.Intent -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle import android.safetycenter.SafetyCenterData import android.safetycenter.SafetyCenterEntry @@ -164,7 +164,7 @@ class SafetyCenterDataTest { SafetyCenterData(status2, listOf(issue2), listOf(entryOrGroup2), listOf(staticEntryGroup2)) @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getStatus_withDefaultBuilder_returnsStatus() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -172,7 +172,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getIssues_withDefaultBuilder_returnsEmptyList() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -180,7 +180,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getIssues_whenSetExplicitly_returnsIssues() { val safetyCenterData = SafetyCenterData.Builder(status1).addIssue(issue1).addIssue(issue2).build() @@ -189,7 +189,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getEntriesOrGroups_withDefaultBuilder_returnsEmptyList() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -197,7 +197,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getEntriesOrGroups_whenSetExplicitly_returnsEntriesOrGroups() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -211,7 +211,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getStaticGroups_withDefaultBuilder_returnsEmptyList() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -219,7 +219,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getStaticEntryGroups_whenSetExplicitly_returnsStaticEntryGroups() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -233,7 +233,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDismissedIssues_withDefaultBuilder_returnsEmptyList() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -241,7 +241,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDismissedIssues_whenSetExplicitly_returnsIssues() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -253,7 +253,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_withDefaultBuilder_returnsEmptyBundle() { val safetyCenterData = SafetyCenterData.Builder(status1).build() @@ -261,7 +261,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_whenSetExplicitly_returnsExtras() { val safetyCenterData = SafetyCenterData.Builder(status1).setExtras(filledExtrasIssuesToGroups1).build() @@ -275,7 +275,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_whenCleared_returnsEmptyBundle() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -299,7 +299,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDismissedIssues_returnsDismissedIssues() { val data3 = data1.withDismissedIssuesIfAtLeastU(listOf(issue2)) @@ -308,7 +308,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDismissedIssues_mutationsAreNotAllowed() { val mutatedDismissedIssues = data1.dismissedIssues @@ -353,7 +353,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_addIssue_doesNotMutatePreviouslyBuiltInstance() { val safetyCenterDataBuilder = SafetyCenterData.Builder(status1).addIssue(issue1) val issues = safetyCenterDataBuilder.build().issues @@ -364,7 +364,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_clearIssues_removesAllIssues() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -377,7 +377,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_addEntryOrGroup_doesNotMutatePreviouslyBuiltInstance() { val safetyCenterDataBuilder = SafetyCenterData.Builder(status1).addEntryOrGroup(entryOrGroup1) @@ -389,7 +389,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_clearEntriesOrGroups_removesAllEntriesOrGroups() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -402,7 +402,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_addStaticEntryGroup_doesNotMutatePreviouslyBuiltInstance() { val safetyCenterDataBuilder = SafetyCenterData.Builder(status1).addStaticEntryGroup(staticEntryGroup1) @@ -414,7 +414,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_clearStaticEntryGroups_removesAllStaticEntryGroups() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -427,7 +427,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_addDismissedIssue_doesNotMutatePreviouslyBuiltInstance() { val safetyCenterDataBuilder = SafetyCenterData.Builder(status1).addDismissedIssue(issue1) val dismissedIssues = safetyCenterDataBuilder.build().dismissedIssues @@ -438,7 +438,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun builder_clearDismissedIssues_removesAllDismissedIssues() { val safetyCenterData = SafetyCenterData.Builder(status1) @@ -463,7 +463,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_withDismissedIssues_recreatesEqual() { val data3 = data1.withDismissedIssuesIfAtLeastU(listOf(issue2)) val data4 = data2.withDismissedIssuesIfAtLeastU(listOf(issue1)) @@ -473,7 +473,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_withExtras_recreatesEqual() { val safetyCenterDataWithExtras = data1.withExtrasIfAtLeastU(filledAllExtras) val safetyCenterDatafromParcel = @@ -545,7 +545,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCode_atLeastU_usingEqualsHashCodeToStringTester() { EqualsHashCodeToStringTester.ofParcelable( parcelableCreator = SafetyCenterData.CREATOR, @@ -680,7 +680,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withSingleKnownExtra_containsKnownExtra() { val safetyCenterDataWithExtras = data1.withExtrasIfAtLeastU(filledExtrasIssuesToGroups1) @@ -693,7 +693,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withAllKnownExtras_containsKnownExtras() { val safetyCenterDataWithAllExtras = data1.withExtrasIfAtLeastU(filledAllExtras) @@ -706,7 +706,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withOneKnowAndOneUnknownExtra_containsKnownAndUnknownExtras() { val safetyCenterDataWithExtras = data1.withExtrasIfAtLeastU(filledOneKnownOneUnknown) @@ -719,7 +719,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withSingleUnknownExtra_containsUnknownExtras() { val safetyCenterDataWithExtras = data1.withExtrasIfAtLeastU(unknownExtras) @@ -732,7 +732,7 @@ class SafetyCenterDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withoutExtras_containsNoExtras() { val safetyCenterDataWithoutExtras = data1 diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt index 486cc3ccfd..4ea71b8f03 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterIssueTest.kt @@ -19,7 +19,6 @@ package android.safetycenter.cts import android.app.PendingIntent import android.content.Context import android.content.Intent -import android.os.Build import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetyCenterIssue @@ -32,7 +31,6 @@ import androidx.test.filters.SdkSuppress import com.android.safetycenter.testing.EqualsHashCodeToStringTester import com.google.common.truth.Truth.assertThat import kotlin.test.assertFailsWith -import org.junit.Assume.assumeFalse import org.junit.Test import org.junit.runner.RunWith @@ -111,7 +109,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getAttributionTitle_returnsAttributionTitle() { assertThat( SafetyCenterIssue.Builder(issue1) @@ -130,7 +128,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getAttributionTitle_withNullAttributionTitle_returnsNull() { val safetyCenterIssue = SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") @@ -228,7 +226,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getGroupId_withNonNullValue_returnsGroupId() { val issue = SafetyCenterIssue.Builder(issue1).setGroupId("group_id").build() @@ -236,7 +234,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getGroupId_withNullValue_returnsNull() { val issue = SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") @@ -248,9 +246,6 @@ class SafetyCenterIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getGroupId_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val issue = SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") .build() @@ -259,7 +254,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setGroupId_withNullValue_returnsNull() { val issue = SafetyCenterIssue.Builder(issue1).setGroupId(null).build() @@ -269,10 +264,6 @@ class SafetyCenterIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setGroupId_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") - assertFailsWith(UnsupportedOperationException::class) { SafetyCenterIssue.Builder(issue1).setGroupId("group_id").build() } @@ -291,7 +282,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_recreatesEqual_atLeastAndroidU() { val safetyCenterIssue = SafetyCenterIssue.Builder("issue_id", "Everything's good", "Please acknowledge this") @@ -321,7 +312,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { newUpsideDownCakeEqualsHashCodeToStringTester().test() } @@ -365,19 +356,12 @@ class SafetyCenterIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun action_getConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") - assertFailsWith(UnsupportedOperationException::class) { action1.confirmationDialogDetails } } @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun action_setConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") assertFailsWith(UnsupportedOperationException::class) { SafetyCenterIssue.Action.Builder("action_id", "Action label", pendingIntent1) .setConfirmationDialogDetails( @@ -387,7 +371,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_getConfirmationDialogDetails_withDefaultBuilder_returnsNull() { val action = SafetyCenterIssue.Action.Builder("action_id", "Action label", pendingIntent1).build() @@ -396,7 +380,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_getConfirmationDialogDetails_whenSetExplicitly_returnsConfirmation() { val action = SafetyCenterIssue.Action.Builder("action_id", "Action label", pendingIntent1) @@ -422,7 +406,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_parcelRoundTrip_recreatesEqual_atLeastAndroidU() { val action = SafetyCenterIssue.Action.Builder(action1) @@ -440,7 +424,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") issueActionNewTiramisuEqualsHashCodeToStringTester( @@ -587,7 +571,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getTitle_returnsTitle() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -595,7 +579,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getText_returnsText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -603,7 +587,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getAcceptButtonText_returnsAcceptButtonText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -611,7 +595,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getDenyButtonText_returnsDenyButtonText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -619,7 +603,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_describeContents_returns0() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -627,7 +611,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_parcelRoundTrip_recreatesEqual() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -635,7 +619,7 @@ class SafetyCenterIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_equalsHashCodeToString_usingEqualsHashCodeToStringTester() { EqualsHashCodeToStringTester.ofParcelable( parcelableCreator = ConfirmationDialogDetails.CREATOR diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 7dc183c7fb..2f94f35990 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -17,7 +17,6 @@ package android.safetycenter.cts import android.content.Context -import android.os.Build import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.UserHandle.USER_NULL @@ -95,7 +94,6 @@ import com.google.common.truth.Truth.assertThat import com.google.common.util.concurrent.MoreExecutors.directExecutor import kotlin.test.assertFailsWith import kotlinx.coroutines.TimeoutCancellationException -import org.junit.Assume.assumeFalse import org.junit.Assume.assumeTrue import org.junit.Rule import org.junit.Test @@ -229,7 +227,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_wronglySignedPackage_throwsIllegalArgumentException() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceWithFakeCert) @@ -244,7 +242,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_wronglySignedPackageButAllowedByFlag_isAllowed() { SafetyCenterFlags.allowedAdditionalPackageCerts = mapOf(context.packageName to setOf(safetyCenterTestConfigs.packageCertHash)) @@ -259,7 +257,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_invalidPackageCertificate_throwsIllegalArgumentException() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceWithInvalidCert) @@ -1481,7 +1479,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun refreshSafetySources_withRefreshReasonPeriodic_noBackgroundRefreshSourceDoesNotSendData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) SafetySourceReceiver.setResponse( @@ -1503,7 +1501,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun refreshSafetySources_withRefreshReasonPeriodic_backgroundRefreshSourceSendsData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) SafetySourceReceiver.setResponse( @@ -1520,7 +1518,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun refreshSafetySources_withSafetySourceIds_onlySpecifiedSourcesSendData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) SafetySourceReceiver.apply { @@ -1555,7 +1553,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun refreshSafetySources_withEmptySafetySourceIds_noSourcesSendData() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) SafetySourceReceiver.setResponse( @@ -1578,9 +1576,6 @@ class SafetyCenterManagerTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun refreshSafetySources_versionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig) assertFailsWith(UnsupportedOperationException::class) { @@ -1592,7 +1587,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun refreshSafetySources_withSafetySourceIds_withoutPermission_throwsSecurityException() { assertFailsWith(SecurityException::class) { safetyCenterManager.refreshSafetySources(REFRESH_REASON_PAGE_OPEN, listOf()) diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyEventTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyEventTest.kt index 3dec4f509b..4d1cb6a8b7 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyEventTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyEventTest.kt @@ -16,7 +16,7 @@ package android.safetycenter.cts -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetyEvent import android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_DEVICE_LOCALE_CHANGED import android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_DEVICE_REBOOTED @@ -190,7 +190,7 @@ class SafetyEventTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { newTiramisuEqualsHashCodeToStringTester( createCopyFromBuilder = { SafetyEvent.Builder(it).build() } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceDataTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceDataTest.kt index d7208c098b..ba2ab3d764 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceDataTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceDataTest.kt @@ -20,7 +20,7 @@ import android.app.PendingIntent import android.app.PendingIntent.FLAG_IMMUTABLE import android.content.Context import android.content.Intent -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING @@ -96,7 +96,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_withDefaultBuilder_returnsEmptyBundle() { val safetySourceData = SafetySourceData.Builder().setStatus(createStatus(SEVERITY_LEVEL_INFORMATION)).build() @@ -105,7 +105,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_whenSetExplicitly_returnsExtras() { val safetySourceData = SafetySourceData.Builder() @@ -118,7 +118,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getExtras_whenCleared_returnsEmptyBundle() { val safetySourceData = SafetySourceData.Builder() @@ -325,7 +325,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_withExtras_recreatesEqual() { val safetySourceData = SafetySourceData.Builder() @@ -384,7 +384,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCode_atLeastU_usingEqualsHashCodeToStringTester() { val firstStatus = createStatus(SEVERITY_LEVEL_INFORMATION, 1) val secondStatus = createStatus(SEVERITY_LEVEL_INFORMATION, 2) @@ -454,7 +454,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withExtras_containsHasExtras() { val safetySourceDataWithExtras = SafetySourceData.Builder() @@ -468,7 +468,7 @@ class SafetySourceDataTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun toString_withoutExtras_doesNotContainHasExtras() { val safetySourceDataWithoutExtras = SafetySourceData.Builder().setStatus(createStatus(SEVERITY_LEVEL_INFORMATION)).build() diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt index 4749c36167..d7a7bf7177 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt @@ -20,7 +20,6 @@ import android.app.PendingIntent import android.app.PendingIntent.FLAG_IMMUTABLE import android.content.Context import android.content.Intent -import android.os.Build import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING @@ -43,7 +42,6 @@ import com.android.modules.utils.build.SdkLevel import com.android.safetycenter.testing.EqualsHashCodeToStringTester import com.google.common.truth.Truth.assertThat import kotlin.test.assertFailsWith -import org.junit.Assume.assumeFalse import org.junit.Test import org.junit.runner.RunWith @@ -120,9 +118,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun action_getConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val action = Action.Builder("action_id", "Action label", pendingIntent1).build() assertFailsWith(UnsupportedOperationException::class) { action.confirmationDialogDetails } @@ -131,9 +126,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun action_setConfirmationDialogDetails_withVersionLessThanU_throwsUnsupportedOperation() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") assertFailsWith(UnsupportedOperationException::class) { Action.Builder("action_id", "Action label", pendingIntent1) .setConfirmationDialogDetails( @@ -143,7 +135,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_getConfirmationDialogDetails_withDefaultBuilder_returnsNull() { val action = Action.Builder("action_id", "Action label", pendingIntent1).build() @@ -151,7 +143,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_getConfirmationDialogDetails_whenSetExplicitly_returnsConfirmation() { val action = Action.Builder("action_id", "Action label", pendingIntent1) @@ -186,7 +178,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_build_withActivityPendingIntentAndWillResolve_throwsIllegalArgumentException() { assertFailsWith(IllegalArgumentException::class) { Action.Builder("action_id", "Action label", pendingIntent1).setWillResolve(true).build() @@ -211,7 +203,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_parcelRoundTrip_recreatesEqual_atLeastAndroidU() { val action = Action.Builder("action_id", "Action label", pendingIntent1) @@ -229,7 +221,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun action_equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") actionNewTiramisuEqualsHashCodeToStringTester( @@ -293,7 +285,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_getTitle_returnsTitle() { val notification = Notification.Builder("Notification title", "Notification text").build() @@ -301,7 +293,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_getText_returnsText() { val notification = Notification.Builder("Notification title", "Notification text").build() @@ -309,7 +301,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_getActions_withDefaultBuilder_returnsEmptyList() { val notification = Notification.Builder("", "").build() @@ -317,7 +309,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_getActions_returnsActions() { val notification = Notification.Builder("", "").addAction(action1).addAction(action2).build() @@ -326,7 +318,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_getActions_mutationsAreNotAllowed() { val notification = Notification.Builder("", "").addAction(action1).addAction(action2).build() @@ -335,7 +327,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_describeContents_returns0() { val notification = Notification.Builder("Notification title", "Notification text") @@ -347,7 +339,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_parcelRoundTrip_recreatesEqual() { val notification = Notification.Builder("Notification title", "Notification text") @@ -359,7 +351,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_withNullTitle_throwsNullPointerException() { assertFailsWith(NullPointerException::class) { Notification.Builder(Generic.asNull(), "Notification text") @@ -367,7 +359,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_withNullText_throwsNullPointerException() { assertFailsWith(NullPointerException::class) { Notification.Builder("Notification title", Generic.asNull()) @@ -375,7 +367,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_addAction_doesNotMutatePreviouslyBuiltInstance() { val notificationBuilder = Notification.Builder("", "").addAction(action1) val actions = notificationBuilder.build().actions @@ -386,7 +378,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_addAction_withNull_throwsIllegalArgumentException() { assertFailsWith(NullPointerException::class) { Notification.Builder("", "").addAction(Generic.asNull()) @@ -394,7 +386,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_addActions_keepsPreviouslyAddedActions() { val notificationBuilder = Notification.Builder("", "").addAction(action1) @@ -404,7 +396,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_addActions_doesNotMutatePreviouslyBuiltInstance() { val notificationBuilder = Notification.Builder("", "").addActions(listOf(action1)) val actions = notificationBuilder.build().actions @@ -415,7 +407,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_addActions_withNull_throwsIllegalArgumentException() { assertFailsWith(NullPointerException::class) { Notification.Builder("", "").addActions(Generic.asNull()) @@ -423,7 +415,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_builder_clearActions_removesAllActions() { val notification = Notification.Builder("", "") @@ -437,7 +429,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_build_withDuplicateActionIds_throwsIllegalArgumentException() { val notificationBuilder = Notification.Builder("Notification title", "Notification text") @@ -452,7 +444,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_build_withMoreThanTwoActions_throwsIllegalArgumentException() { val notificationBuilder = Notification.Builder("Notification title", "Notification text") @@ -468,7 +460,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun notification_equalsHashCodeToString_usingEqualsHashCodeToStringTester() { EqualsHashCodeToStringTester.ofParcelable( parcelableCreator = Notification.CREATOR, @@ -490,7 +482,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getTitle_returnsTitle() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -498,7 +490,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getText_returnsText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -506,7 +498,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getAcceptButtonText_returnsAcceptButtonText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -514,7 +506,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_getDenyButtonText_returnsDenyButtonText() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -522,7 +514,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_describeContents_returns0() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -530,7 +522,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_parcelRoundTrip_recreatesEqual() { val confirmationDialogDetails = ConfirmationDialogDetails("Title", "Text", "Accept", "Deny") @@ -538,7 +530,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun actionConfirmation_equalsHashCodeToString_usingEqualsHashCodeToStringTester() { EqualsHashCodeToStringTester.ofParcelable( parcelableCreator = ConfirmationDialogDetails.CREATOR @@ -636,7 +628,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getAttributionTitle_withNullAttributionTitle_returnsNull() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -653,7 +645,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getAttributionTitle_returnsAttributionTitle() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -673,9 +665,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getAttributionTitle_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -693,9 +682,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setAttributionTitle_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -760,7 +746,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getIssueCategory_whenSetExplicitlyWithUValueOnU_returnsIssueCategory() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -884,7 +870,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDeduplicationId_withDefaultBuilder_returnsNull() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -901,7 +887,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getDeduplicationId_whenSetExplicitly_returnsDeduplicationId() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -921,9 +907,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getDeduplicationId_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -941,9 +924,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setDeduplicationId_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -975,7 +955,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getCustomNotification_withDefaultBuilder_returnsNull() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -992,7 +972,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getCustomNotification_whenSetExplicitly_returnsCustomNotification() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1021,9 +1001,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getCustomNotification_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1043,9 +1020,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setCustomNotification_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1061,7 +1035,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getNotificationBehavior_withDefaultBuilder_returnsUnspecified() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1079,7 +1053,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getNotificationBehavior_whenSetExplicitly_returnsSpecifiedBehavior() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1100,9 +1074,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getNotificationBehavior_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1120,7 +1091,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setNotificationBehavior_withInvalidNotificationBehavior_throwsIllegalArgumentException() { val builder = SafetySourceIssue.Builder( @@ -1142,9 +1113,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setNotificationBehavior_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1160,7 +1128,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getIssueActionability_withDefaultBuilder_returnsManual() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1178,7 +1146,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getIssueActionability_whenSetExplicitly_returnsValueSet() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1199,9 +1167,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getIssueActionability_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssue = SafetySourceIssue.Builder( "Issue id", @@ -1219,7 +1184,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setIssueActionability_withInvalidIssueActionability_throwsIllegalArgumentException() { val builder = SafetySourceIssue.Builder( @@ -1241,9 +1206,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun setIssueActionability_withVersionLessThanU_throwsUnsupportedOperationException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val safetySourceIssueBuilder = SafetySourceIssue.Builder( "Issue id", @@ -1366,9 +1328,6 @@ class SafetySourceIssueTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun build_withUIssueCategoryValueOnT_throwsIllegalArgumentException() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") val builder = SafetySourceIssue.Builder( "Issue id", @@ -1480,7 +1439,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_withNoActionsAndManualActionabilityOnU_throwsIllegalArgumentException() { val safetySourceIssueBuilder = SafetySourceIssue.Builder( @@ -1500,7 +1459,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_withNoActionsAndTipActionabilityOnU_success() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1517,7 +1476,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_withNoActionsAndAutomaticActionabilityOnU_success() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1574,7 +1533,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_recreatesEqual_atLeastAndroidU() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1601,7 +1560,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun parcelRoundTrip_recreatesEqual_atLeastUpsideDownCake() { val safetySourceIssue = SafetySourceIssue.Builder( @@ -1636,7 +1595,7 @@ class SafetySourceIssueTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastUpsideDownCake() { newUpsideDownCakeEqualsHashCodeToStringTester().test() } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceStatusTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceStatusTest.kt index 5aeea21f16..2a20cd45d6 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceStatusTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceStatusTest.kt @@ -20,7 +20,7 @@ import android.app.PendingIntent import android.app.PendingIntent.FLAG_IMMUTABLE import android.content.Context import android.content.Intent -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_INFORMATION import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED @@ -285,7 +285,7 @@ class SafetySourceStatusTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { newTiramisuEqualsHashCodeToStringTester( createCopyFromBuilder = { SafetySourceStatus.Builder(it).build() } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetyCenterConfigTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetyCenterConfigTest.kt index 7dff9dd548..68dcd4a11a 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetyCenterConfigTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetyCenterConfigTest.kt @@ -16,7 +16,7 @@ package android.safetycenter.cts.config -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.config.SafetyCenterConfig import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.truth.os.ParcelableSubject.assertThat @@ -86,7 +86,7 @@ class SafetyCenterConfigTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun equalsHashCodeToString_usingEqualsHashCodeToStringTester_atLeastAndroidU() { newTiramisuEqualsHashCodeToStringTester( createCopyFromBuilder = { SafetyCenterConfig.Builder(it).build() } diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourceTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourceTest.kt index 055e82ad3a..59cc6547a3 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourceTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourceTest.kt @@ -17,7 +17,7 @@ package android.safetycenter.cts.config import android.content.res.Resources -import android.os.Build +import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.config.SafetySource import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.truth.os.ParcelableSubject.assertThat @@ -75,7 +75,7 @@ class SafetySourceTest { } @Test - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getOptionalPackageName_returnsPackageNameOrNull() { assertThat(DYNAMIC_BAREBONE.optionalPackageName).isEqualTo(PACKAGE_NAME) assertThat(dynamicAllOptional().optionalPackageName).isEqualTo(PACKAGE_NAME) @@ -259,7 +259,7 @@ class SafetySourceTest { assertThat(issueOnlyAllOptional().isRefreshOnPageOpenAllowed).isEqualTo(true) } - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) @Test fun areNotificationsAllowed_returnsNotificationsAllowed() { assertThat(DYNAMIC_BAREBONE.areNotificationsAllowed()).isFalse() @@ -273,7 +273,7 @@ class SafetySourceTest { assertThat(issueOnlyAllOptional().areNotificationsAllowed()).isTrue() } - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) @Test fun getDeduplicationGroupsList_returnsDeduplicationGroups() { assertThat(DYNAMIC_BAREBONE.deduplicationGroup).isNull() @@ -287,7 +287,7 @@ class SafetySourceTest { assertThat(issueOnlyAllOptional().deduplicationGroup).isEqualTo(DEDUPLICATION_GROUP) } - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) @Test fun getPackageCertificateHashes_returnsPackageCerts() { assertThat(DYNAMIC_BAREBONE.packageCertificateHashes).isEmpty() diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourcesGroupTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourcesGroupTest.kt index 015d188429..f741369ebe 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourcesGroupTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/SafetySourcesGroupTest.kt @@ -211,7 +211,7 @@ class SafetySourcesGroupTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_hiddenGroupWithDynamicSource_throwsIllegalStateException() { val builder = SafetySourcesGroup.Builder() @@ -228,7 +228,7 @@ class SafetySourcesGroupTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_hiddenGroupWithStaticSource_throwsIllegalStateException() { val builder = SafetySourcesGroup.Builder() @@ -245,7 +245,7 @@ class SafetySourcesGroupTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_statefulGroupWithIssueOnlySource_throwsIllegalStateException() { val builder = SafetySourcesGroup.Builder() @@ -264,7 +264,7 @@ class SafetySourcesGroupTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun build_statelessGroupWithIssueOnlySource_throwsIllegalStateException() { val builder = SafetySourcesGroup.Builder() diff --git a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 4d13267bf0..67dd84a6eb 100644 --- a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -17,7 +17,6 @@ package android.safetycenter.functional.ui import android.content.Context -import android.os.Build.VERSION.CODENAME import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle @@ -79,7 +78,6 @@ import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueDisplayed import com.android.safetycenter.testing.UiTestHelper.waitSourceIssueNotDisplayed import java.util.concurrent.TimeUnit.MILLISECONDS import org.junit.After -import org.junit.Assume.assumeFalse import org.junit.Rule import org.junit.Test import org.junit.rules.Timeout @@ -549,7 +547,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_withAttribution_hasProperContentDescriptions() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -722,7 +720,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_resolveIssue_withDialogClickYes_resolves() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData( @@ -748,7 +746,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_resolveIssue_withDialog_rotates_clickYes_resolves() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData( @@ -778,7 +776,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_resolveIssue_withDialogClicksNo_cancels() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData( @@ -880,7 +878,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_withAttributionTitleSetBySource_displaysAttributionTitle() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -891,7 +889,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_attributionNotSetBySource_displaysGroupTitleAsAttribution() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) @@ -902,7 +900,7 @@ class SafetyCenterActivityTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun issueCard_attributionNotSetBySourceAndGroupTitleNull_doesNotDisplayAttributionTitle() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceNoGroupTitleConfig) @@ -915,9 +913,6 @@ class SafetyCenterActivityTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun issueCard_attributionNotSetBySourceOnTiramisu_doesNotDisplayAttributionTitle() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(CODENAME == "UpsideDownCake") - assumeFalse(CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) val data = safetySourceTestData.recommendationWithGeneralIssue @@ -1418,10 +1413,6 @@ class SafetyCenterActivityTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun launchSafetyCenter_enableSubpagesFlagOnT_stillShowsExpandAndCollapseEntries() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(CODENAME == "UpsideDownCake") - assumeFalse(CODENAME == "VanillaIceCream") - SafetyCenterFlags.showSubpages = true val sourceTestData = safetySourceTestData.information val config = safetyCenterTestConfigs.multipleSourceGroupsConfig diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt index 2376e42aa3..9c91740adc 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -19,7 +19,6 @@ package android.safetycenter.functional import android.app.PendingIntent import android.content.Context import android.content.Intent -import android.os.Build import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.UserHandle @@ -980,7 +979,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_attributionTitleProvidedBySource_returnsIssueWithAttributionTitle() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData( @@ -996,7 +995,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_attributionTitleNotProvided_returnsGroupTitleAsAttributionTitle() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.informationWithIssue) @@ -1009,7 +1008,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_attributionNotSetAndGroupTitleNull_returnsNullAttributionTitle() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceNoGroupTitleConfig) safetyCenterTestHelper.setData( @@ -1037,9 +1036,6 @@ class SafetyCenterManagerTest { @Test @SdkSuppress(maxSdkVersion = TIRAMISU) fun getSafetyCenterData_attributionNotSetBySourceOnTiramisu_returnsNullAttributionTitle() { - // TODO(b/258228790): Remove after U is no longer in pre-release - assumeFalse(Build.VERSION.CODENAME == "UpsideDownCake") - assumeFalse(Build.VERSION.CODENAME == "VanillaIceCream") safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.informationWithIssue) @@ -1114,7 +1110,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withActionConfirmation_returnsRecommendationWithActionConfirmation() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData( @@ -1194,7 +1190,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withRecommendationDataIssue_returnsDataRecommendationStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1219,7 +1215,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withCriticalDataIssue_returnsDataCriticalStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1244,7 +1240,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withRecommendationPasswordsIssue_returnsDataRecommendationStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1269,7 +1265,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withCriticalPasswordsIssue_returnsDataCriticalStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1294,7 +1290,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withRecommendationPersonalIssue_returnsDataRecommendationStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1319,7 +1315,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withCriticalPersonalIssue_returnsDataCriticalStatus() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1344,7 +1340,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusTipFirstIssueSingleTip_infoStatusWithTipSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1364,7 +1360,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusTipFirstIssueMultiTips_infoStatusWithTipsSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1400,7 +1396,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusActionFirstIssueSingleAction_infoStatusWithActionSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1420,7 +1416,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusActionFirstIssueMultiActions_infoStatusWithActionsSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1456,7 +1452,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusManualFirstIssueSingleManual_infoStatusWithAlertSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1482,7 +1478,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_infoStatusManualFirstIssueMultiManual_infoStatusWithAlertsSummary() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceConfig) safetyCenterTestHelper.setData( @@ -1520,7 +1516,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_withStaticEntryGroups_hasStaticEntriesToIdsMapping() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.staticSourcesConfig) @@ -1600,7 +1596,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesOfSameSeverities_issueOfFirstSourceInConfigShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1632,7 +1628,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesInDifferentSourceGroups_topIssueRelevantForBothGroups() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1662,7 +1658,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesInSameSourceGroups_topIssueRelevantForThatGroup() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1692,7 +1688,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_noDuplicateIssues_noGroupBelongingSpecified() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1720,7 +1716,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_differentDuplicationId_bothIssuesShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1757,7 +1753,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_differentDuplicationGroup_bothIssuesShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1794,7 +1790,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_threeDuplicateIssues_onlyOneIssueShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1833,7 +1829,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesOfDifferentSeverities_moreSevereIssueShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1865,7 +1861,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_multipleDuplicationsOfIssues_correctlyDeduplicated() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1941,7 +1937,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesBothDismissed_topOneShownAsDismissed() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -1982,7 +1978,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesLowerSeverityOneDismissed_topOneShown() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -2020,7 +2016,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesHigherSeverityOneDismissed_topOneShownAsDismissed() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -2058,7 +2054,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_dupIssuesLowerPrioritySameSeverityOneDismissed_topShownAsDismissed() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -2096,7 +2092,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_dupIssuesTopOneDismissedThenDisappears_bottomOneReemergesTimely() { SafetyCenterFlags.tempHiddenIssueResurfaceDelay = Duration.ZERO SafetyCenterFlags.resurfaceIssueMaxCounts = mapOf(SEVERITY_LEVEL_CRITICAL_WARNING to 99L) @@ -2150,7 +2146,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_dupsOfDiffSeveritiesTopOneDismissedThenGone_bottomOneReemergesTimely() { SafetyCenterFlags.tempHiddenIssueResurfaceDelay = Duration.ZERO SafetyCenterFlags.resurfaceIssueMaxCounts = @@ -2213,7 +2209,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesLowerOneResurfaces_lowerOneStillFilteredOut() { SafetyCenterFlags.resurfaceIssueMaxCounts = mapOf( @@ -2276,7 +2272,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_duplicateIssuesTopOneResurfaces_topOneShown() { SafetyCenterFlags.resurfaceIssueMaxCounts = mapOf( @@ -2337,7 +2333,7 @@ class SafetyCenterManagerTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun getSafetyCenterData_dupIssuesTopOneResolved_bottomOneReemergesAfterTemporaryHiddenPeriod() { SafetyCenterFlags.tempHiddenIssueResurfaceDelay = RESURFACE_DELAY safetyCenterTestHelper.setConfig( diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterNotificationTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterNotificationTest.kt index 5d73d53e33..c0f144acc3 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterNotificationTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterNotificationTest.kt @@ -143,7 +143,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationBehaviorNever_noNotification() { val data = safetySourceTestData @@ -162,7 +162,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationBehaviorDelay_noImmediateNotification() { SafetyCenterFlags.notificationsMinDelay = Duration.ofDays(1) val data = @@ -182,7 +182,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationBehaviorDelay_sendsNotificationAfterDelay() { SafetyCenterFlags.notificationsMinDelay = Duration.ofDays(1) val delayedNotificationIssue = @@ -227,7 +227,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationBehaviorDelayOfZero_sendsNotificationImmediately() { SafetyCenterFlags.immediateNotificationBehaviorIssues = emptySet() SafetyCenterFlags.notificationsMinDelay = Duration.ofSeconds(0) @@ -254,7 +254,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationBehaviorImmediately_sendsNotification() { SafetyCenterFlags.immediateNotificationBehaviorIssues = emptySet() val data = @@ -331,7 +331,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withNotificationsAllowedForSourceByConfig_sendsNotification() { SafetyCenterFlags.notificationsAllowedSources = emptySet() SafetyCenterFlags.immediateNotificationBehaviorIssues = emptySet() @@ -362,7 +362,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withCustomNotification_usesCustomValues() { val intent1 = safetySourceTestData.testActivityRedirectPendingIntent(identifier = "1") val intent2 = safetySourceTestData.testActivityRedirectPendingIntent(identifier = "2") @@ -408,7 +408,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_withEmptyCustomActions_notificationHasNoActions() { val notification = SafetySourceIssue.Notification.Builder("Custom title", "Custom text") @@ -636,7 +636,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_duplicateIssues_sendsOneNotification() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -666,7 +666,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun setSafetySourceData_duplicateIssueOfLowerSeverityDismissed_sendsNotification() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig @@ -790,7 +790,7 @@ class SafetyCenterNotificationTest { } @Test - @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") + @SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) fun dismissingNotification_withDuplicateIssues_allDismissed() { safetyCenterTestHelper.setConfig( safetyCenterTestConfigs.multipleSourcesWithDeduplicationInfoConfig diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/PrivacySubpageTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/PrivacySubpageTest.kt index cc1ba34aa8..07554d78c4 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/PrivacySubpageTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/PrivacySubpageTest.kt @@ -60,7 +60,7 @@ import org.junit.runner.RunWith /** Functional tests for the Privacy subpage in Safety Center. */ @RunWith(AndroidJUnit4::class) -@SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") +@SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) class PrivacySubpageTest { private val context: Context = getApplicationContext() diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt index 932f999178..e8f3c2e35a 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt @@ -87,7 +87,7 @@ import org.junit.runner.RunWith /** Functional tests for generic subpages in Safety Center. */ @RunWith(AndroidJUnit4::class) -@SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake") +@SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE) class SafetyCenterSubpagesTest { private val context: Context = getApplicationContext() -- GitLab From 8616482e31892714a64c5edf5eaa38589a3f34e9 Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Mon, 3 Jul 2023 14:19:15 +0000 Subject: [PATCH 180/577] Make all safety center classes RequiresApi(TIRAMISU) by default. Bug: 260989965 Test: atest CtsSafetyCenterTestCases Relnote: N/A Change-Id: I2d85acad1940eca3acf3a64ba4abc27b7c62e8f9 --- .../RequiresTiramisuByDefault.java | 40 +++++++++++++++++++ .../com/android/safetycenter/ApiLock.java | 5 --- .../safetycenter/DevicePolicyResources.java | 5 --- .../safetycenter/PendingIntentFactory.java | 4 -- .../android/safetycenter/RefreshReasons.java | 4 -- .../SafetyCenterBroadcastDispatcher.java | 3 -- .../SafetyCenterConfigReader.java | 4 -- .../SafetyCenterDataChangeNotifier.java | 5 --- .../safetycenter/SafetyCenterDataFactory.java | 3 -- .../safetycenter/SafetyCenterFlags.java | 3 -- .../safetycenter/SafetyCenterListeners.java | 4 -- .../SafetyCenterRefreshTracker.java | 3 -- .../safetycenter/SafetyCenterService.java | 2 - .../SafetyCenterShellCommandHandler.java | 3 -- .../safetycenter/SafetyCenterTimeouts.java | 5 --- .../safetycenter/SafetySourceIssueInfo.java | 6 +-- .../android/safetycenter/SafetySourceKey.java | 6 +-- .../android/safetycenter/SafetySources.java | 5 --- .../safetycenter/SafetySourcesGroups.java | 5 --- .../safetycenter/UserProfileGroup.java | 4 -- .../data/AndroidLockScreenFix.java | 4 -- .../data/SafetyCenterDataManager.java | 4 -- ...tyCenterInFlightIssueActionRepository.java | 4 -- .../data/SafetyCenterIssueDeduplicator.java | 4 -- .../SafetyCenterIssueDismissalRepository.java | 4 -- .../data/SafetyCenterIssueRepository.java | 5 --- .../safetycenter/data/SafetyEventFix.java | 3 -- .../data/SafetySourceDataRepository.java | 4 -- .../data/SafetySourceDataValidator.java | 4 -- .../SafetySourceStateCollectedLogger.java | 4 -- .../safetycenter/data/package-info.java | 2 + .../logging/SafetyCenterPullAtomCallback.java | 5 --- .../logging/SafetyCenterStatsdLogger.java | 4 -- .../safetycenter/logging/package-info.java | 2 + .../SafetyCenterNotificationChannels.java | 4 -- .../SafetyCenterNotificationFactory.java | 3 -- .../SafetyCenterNotificationReceiver.java | 4 -- .../SafetyCenterNotificationSender.java | 3 -- .../notifications/package-info.java | 2 + .../android/safetycenter/package-info.java | 2 + 40 files changed, 50 insertions(+), 140 deletions(-) create mode 100644 SafetyCenter/Annotations/java/com/android/safetycenter/annotations/RequiresTiramisuByDefault.java diff --git a/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/RequiresTiramisuByDefault.java b/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/RequiresTiramisuByDefault.java new file mode 100644 index 0000000000..6e1f4c3b77 --- /dev/null +++ b/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/RequiresTiramisuByDefault.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.safetycenter.annotations; + +import static android.os.Build.VERSION_CODES.TIRAMISU; + +import static java.lang.annotation.ElementType.PACKAGE; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.CLASS; + +import androidx.annotation.RequiresApi; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Specifies that all types are {@code RequiresApi(TIRAMISU)} within the annotated package, unless + * tagged another {@code @RequiresApi} annotation. + */ +@Retention(CLASS) +@Target(PACKAGE) +@TypeQualifierDefault({TYPE}) +@RequiresApi(TIRAMISU) +public @interface RequiresTiramisuByDefault {} diff --git a/service/java/com/android/safetycenter/ApiLock.java b/service/java/com/android/safetycenter/ApiLock.java index 91466d3d5c..f80e2ea323 100644 --- a/service/java/com/android/safetycenter/ApiLock.java +++ b/service/java/com/android/safetycenter/ApiLock.java @@ -16,10 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - -import androidx.annotation.RequiresApi; - /** * A class that is used to strongly type the {@link Object} used to synchronize the Safety Center * APIs. @@ -29,7 +25,6 @@ import androidx.annotation.RequiresApi; * * @hide */ -@RequiresApi(TIRAMISU) public final class ApiLock { ApiLock() {} } diff --git a/service/java/com/android/safetycenter/DevicePolicyResources.java b/service/java/com/android/safetycenter/DevicePolicyResources.java index da51b0190e..8d31c254b8 100644 --- a/service/java/com/android/safetycenter/DevicePolicyResources.java +++ b/service/java/com/android/safetycenter/DevicePolicyResources.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static java.util.Objects.requireNonNull; import android.annotation.StringRes; @@ -26,14 +24,11 @@ import android.app.admin.DevicePolicyResourcesManager; import android.content.Context; import android.os.Binder; -import androidx.annotation.RequiresApi; - import com.android.safetycenter.resources.SafetyCenterResourcesApk; import java.util.function.Supplier; /** A class that handles dynamically updating enterprise-related resources. */ -@RequiresApi(TIRAMISU) final class DevicePolicyResources { private static final String SAFETY_CENTER_PREFIX = "SafetyCenter."; diff --git a/service/java/com/android/safetycenter/PendingIntentFactory.java b/service/java/com/android/safetycenter/PendingIntentFactory.java index da9915968d..b52365c380 100644 --- a/service/java/com/android/safetycenter/PendingIntentFactory.java +++ b/service/java/com/android/safetycenter/PendingIntentFactory.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static java.util.Objects.requireNonNull; import android.annotation.UserIdInt; @@ -32,7 +30,6 @@ import android.os.UserHandle; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.safetycenter.resources.SafetyCenterResourcesApk; @@ -43,7 +40,6 @@ import java.util.Arrays; * * @hide */ -@RequiresApi(TIRAMISU) public final class PendingIntentFactory { private static final String TAG = "PendingIntentFactory"; diff --git a/service/java/com/android/safetycenter/RefreshReasons.java b/service/java/com/android/safetycenter/RefreshReasons.java index af15d19685..f62d4cddb1 100644 --- a/service/java/com/android/safetycenter/RefreshReasons.java +++ b/service/java/com/android/safetycenter/RefreshReasons.java @@ -16,7 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA; import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA; @@ -33,10 +32,7 @@ import android.safetycenter.SafetyCenterManager.RefreshReason; import android.safetycenter.SafetyCenterManager.RefreshRequestType; import android.util.Log; -import androidx.annotation.RequiresApi; - /** Helpers to do with {@link RefreshReason}. */ -@RequiresApi(TIRAMISU) final class RefreshReasons { private static final String TAG = "RefreshReasons"; diff --git a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java index bc386f3f82..4752ada4c7 100644 --- a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java +++ b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java @@ -19,7 +19,6 @@ package com.android.safetycenter; import static android.Manifest.permission.READ_SAFETY_CENTER_STATUS; import static android.Manifest.permission.SEND_SAFETY_CENTER_UPDATE; import static android.content.Intent.FLAG_RECEIVER_FOREGROUND; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.os.PowerExemptionManager.REASON_REFRESH_SAFETY_SOURCES; import static android.os.PowerExemptionManager.TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED; import static android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES; @@ -47,7 +46,6 @@ import android.util.Log; import android.util.SparseArray; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.PackageUtils; import com.android.safetycenter.SafetyCenterConfigReader.Broadcast; @@ -66,7 +64,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterBroadcastDispatcher { private static final String TAG = "SafetyCenterBroadcastDi"; diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index caeee02f26..e3e39cc9a5 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; @@ -29,7 +27,6 @@ import android.util.ArrayMap; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.safetycenter.config.ParseException; import com.android.safetycenter.config.SafetyCenterConfigParser; @@ -50,7 +47,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterConfigReader { diff --git a/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java b/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java index e8bf2626a6..0e5617c8d8 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java @@ -16,12 +16,8 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.annotation.UserIdInt; -import androidx.annotation.RequiresApi; - import com.android.safetycenter.notifications.SafetyCenterNotificationSender; import java.util.List; @@ -34,7 +30,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterDataChangeNotifier { diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index 198ce1631e..6caaf8ab7d 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -16,7 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; import static com.android.safetycenter.internaldata.SafetyCenterBundles.ISSUES_TO_GROUPS_BUNDLE_KEY; @@ -52,7 +51,6 @@ import android.util.ArrayMap; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.permission.util.UserUtils; @@ -80,7 +78,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterDataFactory { diff --git a/service/java/com/android/safetycenter/SafetyCenterFlags.java b/service/java/com/android/safetycenter/SafetyCenterFlags.java index 018a5525e6..788575effd 100644 --- a/service/java/com/android/safetycenter/SafetyCenterFlags.java +++ b/service/java/com/android/safetycenter/SafetyCenterFlags.java @@ -16,7 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyCenterManager.RefreshReason; import android.os.Binder; @@ -27,7 +26,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.safetycenter.resources.SafetyCenterResourcesApk; @@ -40,7 +38,6 @@ import java.time.Duration; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyCenterFlags { private static final String TAG = "SafetyCenterFlags"; diff --git a/service/java/com/android/safetycenter/SafetyCenterListeners.java b/service/java/com/android/safetycenter/SafetyCenterListeners.java index 6a83b5e818..5f89f46ff0 100644 --- a/service/java/com/android/safetycenter/SafetyCenterListeners.java +++ b/service/java/com/android/safetycenter/SafetyCenterListeners.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.annotation.UserIdInt; import android.os.IBinder; import android.os.RemoteCallbackList; @@ -30,7 +28,6 @@ import android.util.Log; import android.util.SparseArray; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import java.io.PrintWriter; import java.util.concurrent.atomic.AtomicReference; @@ -43,7 +40,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterListeners { diff --git a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java index 080dfff68b..17688063a1 100644 --- a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java +++ b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java @@ -16,7 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_RESCAN_BUTTON_CLICK; import static com.android.permission.PermissionStatsLog.SAFETY_CENTER_SYSTEM_EVENT_REPORTED__RESULT__TIMEOUT; @@ -34,7 +33,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; import com.android.safetycenter.logging.SafetyCenterStatsdLogger; @@ -53,7 +51,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterRefreshTracker { private static final String TAG = "SafetyCenterRefreshTrac"; diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index 720681f153..ba3a201703 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -21,7 +21,6 @@ import static android.Manifest.permission.READ_SAFETY_CENTER_STATUS; import static android.Manifest.permission.SEND_SAFETY_CENTER_UPDATE; import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_DEVICE_LOCALE_CHANGE; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_OTHER; @@ -103,7 +102,6 @@ import java.util.List; * @hide */ @Keep -@RequiresApi(TIRAMISU) public final class SafetyCenterService extends SystemService { private static final String TAG = "SafetyCenterService"; diff --git a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java index 137cd04385..82983f0bba 100644 --- a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java +++ b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java @@ -16,7 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_DEVICE_LOCALE_CHANGE; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_DEVICE_REBOOT; import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_OTHER; @@ -34,7 +33,6 @@ import android.safetycenter.ISafetyCenterManager; import android.safetycenter.SafetyCenterManager.RefreshReason; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.BasicShellCommandHandler; import com.android.modules.utils.build.SdkLevel; @@ -48,7 +46,6 @@ import java.util.Map; * *

Example usage: $ adb shell cmd safety_center refresh --reason PAGE_OPEN --user 10 */ -@RequiresApi(TIRAMISU) final class SafetyCenterShellCommandHandler extends BasicShellCommandHandler { private static final Map REASONS = createReasonMap(); diff --git a/service/java/com/android/safetycenter/SafetyCenterTimeouts.java b/service/java/com/android/safetycenter/SafetyCenterTimeouts.java index f8bfd691e0..b37951fb16 100644 --- a/service/java/com/android/safetycenter/SafetyCenterTimeouts.java +++ b/service/java/com/android/safetycenter/SafetyCenterTimeouts.java @@ -16,12 +16,8 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.os.Handler; -import androidx.annotation.RequiresApi; - import com.android.permission.util.ForegroundThread; import java.io.PrintWriter; @@ -36,7 +32,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterTimeouts { diff --git a/service/java/com/android/safetycenter/SafetySourceIssueInfo.java b/service/java/com/android/safetycenter/SafetySourceIssueInfo.java index 51e6567d73..0dfa7c8145 100644 --- a/service/java/com/android/safetycenter/SafetySourceIssueInfo.java +++ b/service/java/com/android/safetycenter/SafetySourceIssueInfo.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; import android.annotation.UserIdInt; @@ -25,8 +23,6 @@ import android.safetycenter.SafetySourceIssue; import android.safetycenter.config.SafetySource; import android.safetycenter.config.SafetySourcesGroup; -import androidx.annotation.RequiresApi; - import com.android.safetycenter.internaldata.SafetyCenterIssueKey; import java.util.Objects; @@ -36,7 +32,6 @@ import java.util.Objects; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetySourceIssueInfo { private final SafetySourceIssue mSafetySourceIssue; @@ -65,6 +60,7 @@ public final class SafetySourceIssueInfo { public SafetyCenterIssueKey getSafetyCenterIssueKey() { return mSafetyCenterIssueKey; } + /** Returns the {@link SafetySourceIssue}. */ public SafetySourceIssue getSafetySourceIssue() { return mSafetySourceIssue; diff --git a/service/java/com/android/safetycenter/SafetySourceKey.java b/service/java/com/android/safetycenter/SafetySourceKey.java index 511fbef731..9e1400e302 100644 --- a/service/java/com/android/safetycenter/SafetySourceKey.java +++ b/service/java/com/android/safetycenter/SafetySourceKey.java @@ -16,13 +16,9 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.annotation.UserIdInt; import android.safetycenter.SafetySourceData; -import androidx.annotation.RequiresApi; - import java.util.Objects; /** @@ -32,7 +28,7 @@ import java.util.Objects; * @hide */ // TODO(b/219697341): Look into using AutoValue for this data class. -@RequiresApi(TIRAMISU) + public final class SafetySourceKey { private final String mSourceId; diff --git a/service/java/com/android/safetycenter/SafetySources.java b/service/java/com/android/safetycenter/SafetySources.java index c0b0bdc484..02d83d27b7 100644 --- a/service/java/com/android/safetycenter/SafetySources.java +++ b/service/java/com/android/safetycenter/SafetySources.java @@ -16,20 +16,15 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.safetycenter.SafetySourceData; import android.safetycenter.config.SafetySource; import android.util.Log; -import androidx.annotation.RequiresApi; - /** * A helper class to facilitate working with {@link SafetySource} objects. * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetySources { private static final String TAG = "SafetySources"; diff --git a/service/java/com/android/safetycenter/SafetySourcesGroups.java b/service/java/com/android/safetycenter/SafetySourcesGroups.java index 5233302aa2..a86eccada8 100644 --- a/service/java/com/android/safetycenter/SafetySourcesGroups.java +++ b/service/java/com/android/safetycenter/SafetySourcesGroups.java @@ -16,16 +16,11 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.safetycenter.config.SafetySourcesGroup; -import androidx.annotation.RequiresApi; - import com.android.modules.utils.build.SdkLevel; /** Static utilities for working with {@link SafetySourcesGroup} objects. */ -@RequiresApi(TIRAMISU) final class SafetySourcesGroups { /** diff --git a/service/java/com/android/safetycenter/UserProfileGroup.java b/service/java/com/android/safetycenter/UserProfileGroup.java index f0407f6b3e..74b9b136f6 100644 --- a/service/java/com/android/safetycenter/UserProfileGroup.java +++ b/service/java/com/android/safetycenter/UserProfileGroup.java @@ -16,8 +16,6 @@ package com.android.safetycenter; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static java.util.Objects.requireNonNull; import android.annotation.UserIdInt; @@ -30,7 +28,6 @@ import android.os.UserManager; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; @@ -45,7 +42,6 @@ import java.util.Objects; * * @hide */ -@RequiresApi(TIRAMISU) public final class UserProfileGroup { private static final String TAG = "UserProfileGroup"; diff --git a/service/java/com/android/safetycenter/data/AndroidLockScreenFix.java b/service/java/com/android/safetycenter/data/AndroidLockScreenFix.java index 22af4ed4d9..e46ba2f4d7 100644 --- a/service/java/com/android/safetycenter/data/AndroidLockScreenFix.java +++ b/service/java/com/android/safetycenter/data/AndroidLockScreenFix.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; @@ -30,7 +28,6 @@ import android.safetycenter.SafetySourceStatus; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.safetycenter.PendingIntentFactory; @@ -44,7 +41,6 @@ import java.util.List; * * @hide */ -@RequiresApi(TIRAMISU) public final class AndroidLockScreenFix { private static final String TAG = "AndroidLockScreenFix"; diff --git a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java index 912cea47ca..3925b64aa6 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.safetycenter.logging.SafetyCenterStatsdLogger.toSystemEventResult; import android.annotation.UserIdInt; @@ -33,7 +31,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.safetycenter.ApiLock; import com.android.safetycenter.SafetyCenterConfigReader; @@ -61,7 +58,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterDataManager { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java index fd8a12fc4e..bcf83dd9e6 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; import android.annotation.UserIdInt; @@ -29,7 +27,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; @@ -43,7 +40,6 @@ import java.util.List; import javax.annotation.concurrent.NotThreadSafe; /** Maintains data about in-flight issue actions. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterInFlightIssueActionRepository { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java index 2353f6ce69..1a86640ddc 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java @@ -16,7 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; @@ -48,7 +47,6 @@ import java.util.Set; import javax.annotation.concurrent.NotThreadSafe; /** Deduplicates issues based on deduplication info provided by the source and the issue. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterIssueDeduplicator { @@ -56,7 +54,6 @@ final class SafetyCenterIssueDeduplicator { private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - @RequiresApi(TIRAMISU) SafetyCenterIssueDeduplicator( SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { this.mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; @@ -329,7 +326,6 @@ final class SafetyCenterIssueDeduplicator { } /** Encapsulates deduplication result along with some additional information. */ - @RequiresApi(TIRAMISU) // to simplify code and minimize code path differences across SDKs static final class DeduplicationInfo { private final List mDeduplicatedIssues; private final List mFilteredOutDuplicates; diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java index 7af2b10f23..e73e17fc3a 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; import android.annotation.UserIdInt; @@ -30,7 +28,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.BackgroundThread; import com.android.safetycenter.ApiLock; @@ -66,7 +63,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterIssueDismissalRepository { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java index ac2fc96ebb..2e6f707a3e 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.safetycenter.data.SafetyCenterIssueDeduplicator.DeduplicationInfo; import static java.util.Collections.emptyList; @@ -32,8 +30,6 @@ import android.safetycenter.config.SafetySource; import android.safetycenter.config.SafetySourcesGroup; import android.util.SparseArray; -import androidx.annotation.RequiresApi; - import com.android.modules.utils.build.SdkLevel; import com.android.permission.util.UserUtils; import com.android.safetycenter.SafetyCenterConfigReader; @@ -56,7 +52,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

Responsible for generating lists of issues and deduplication of issues. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetyCenterIssueRepository { diff --git a/service/java/com/android/safetycenter/data/SafetyEventFix.java b/service/java/com/android/safetycenter/data/SafetyEventFix.java index 658b5f0788..4050eddfb4 100644 --- a/service/java/com/android/safetycenter/data/SafetyEventFix.java +++ b/service/java/com/android/safetycenter/data/SafetyEventFix.java @@ -16,7 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED; import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED; @@ -28,7 +27,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; @@ -40,7 +38,6 @@ import java.util.List; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyEventFix { private static final String TAG = "SafetyEventFix"; diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java index df360c5db8..5941d408e6 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.permission.PermissionStatsLog.SAFETY_SOURCE_STATE_COLLECTED__SOURCE_STATE__DATA_PROVIDED; import static com.android.permission.PermissionStatsLog.SAFETY_SOURCE_STATE_COLLECTED__SOURCE_STATE__NO_DATA_PROVIDED; import static com.android.permission.PermissionStatsLog.SAFETY_SOURCE_STATE_COLLECTED__SOURCE_STATE__REFRESH_TIMEOUT; @@ -37,7 +35,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.safetycenter.SafetySourceKey; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; @@ -56,7 +53,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetySourceDataRepository { diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java index acb4d95f00..8a3151c9f3 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.annotation.UserIdInt; import android.content.Context; import android.content.pm.PackageManager; @@ -29,7 +27,6 @@ import android.safetycenter.config.SafetySource; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.permission.util.UserUtils; @@ -48,7 +45,6 @@ import javax.annotation.concurrent.NotThreadSafe; * *

This class isn't thread safe. Thread safety must be handled by the caller. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetySourceDataValidator { diff --git a/service/java/com/android/safetycenter/data/SafetySourceStateCollectedLogger.java b/service/java/com/android/safetycenter/data/SafetySourceStateCollectedLogger.java index 2e1235c96a..e734595989 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceStateCollectedLogger.java +++ b/service/java/com/android/safetycenter/data/SafetySourceStateCollectedLogger.java @@ -16,8 +16,6 @@ package com.android.safetycenter.data; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.annotation.ElapsedRealtimeLong; import android.content.Context; import android.safetycenter.SafetyCenterManager; @@ -27,7 +25,6 @@ import android.safetycenter.SafetySourceIssue; import android.safetycenter.SafetySourceStatus; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; import com.android.safetycenter.SafetySourceIssueInfo; @@ -44,7 +41,6 @@ import javax.annotation.concurrent.NotThreadSafe; * Collates information from various data-related classes and uses that information to log {@code * SafetySourceStateCollected} atoms. */ -@RequiresApi(TIRAMISU) @NotThreadSafe final class SafetySourceStateCollectedLogger { diff --git a/service/java/com/android/safetycenter/data/package-info.java b/service/java/com/android/safetycenter/data/package-info.java index 5978475056..e82755370f 100644 --- a/service/java/com/android/safetycenter/data/package-info.java +++ b/service/java/com/android/safetycenter/data/package-info.java @@ -14,6 +14,8 @@ * limitations under the License. */ @NonNullByDefault +@RequiresTiramisuByDefault package com.android.safetycenter.data; import com.android.safetycenter.annotations.NonNullByDefault; +import com.android.safetycenter.annotations.RequiresTiramisuByDefault; diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java index af66cae5c0..168d73a0f6 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java @@ -16,8 +16,6 @@ package com.android.safetycenter.logging; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.permission.PermissionStatsLog.SAFETY_STATE; import android.annotation.UserIdInt; @@ -30,8 +28,6 @@ import android.safetycenter.config.SafetySourcesGroup; import android.util.Log; import android.util.StatsEvent; -import androidx.annotation.RequiresApi; - import com.android.internal.annotations.GuardedBy; import com.android.modules.utils.build.SdkLevel; import com.android.permission.PermissionStatsLog; @@ -56,7 +52,6 @@ import java.util.List; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback { private static final String TAG = "SafetyCenterPullAtom"; diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java b/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java index 0d026e7678..710c3f7acf 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java @@ -16,8 +16,6 @@ package com.android.safetycenter.logging; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static com.android.permission.PermissionStatsLog.SAFETY_CENTER_INTERACTION_REPORTED; import static com.android.permission.PermissionStatsLog.SAFETY_CENTER_INTERACTION_REPORTED__ACTION__ISSUE_PRIMARY_ACTION_CLICKED; import static com.android.permission.PermissionStatsLog.SAFETY_CENTER_INTERACTION_REPORTED__ACTION__ISSUE_SECONDARY_ACTION_CLICKED; @@ -83,7 +81,6 @@ import android.util.Log; import android.util.StatsEvent; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.PermissionStatsLog; import com.android.safetycenter.SafetyCenterFlags; @@ -101,7 +98,6 @@ import java.time.Duration; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyCenterStatsdLogger { private static final String TAG = "SafetyCenterStatsdLog"; diff --git a/service/java/com/android/safetycenter/logging/package-info.java b/service/java/com/android/safetycenter/logging/package-info.java index dcc1828b4c..47575f2d91 100644 --- a/service/java/com/android/safetycenter/logging/package-info.java +++ b/service/java/com/android/safetycenter/logging/package-info.java @@ -14,6 +14,8 @@ * limitations under the License. */ @NonNullByDefault +@RequiresTiramisuByDefault package com.android.safetycenter.logging; import com.android.safetycenter.annotations.NonNullByDefault; +import com.android.safetycenter.annotations.RequiresTiramisuByDefault; diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java index 749e887f1a..8898998413 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java @@ -16,8 +16,6 @@ package com.android.safetycenter.notifications; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import static java.util.Objects.requireNonNull; import android.app.NotificationChannel; @@ -31,7 +29,6 @@ import android.safetycenter.SafetySourceIssue; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.permission.util.UserUtils; import com.android.safetycenter.resources.SafetyCenterResourcesApk; @@ -43,7 +40,6 @@ import java.util.List; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyCenterNotificationChannels { private static final String TAG = "SafetyCenterNC"; diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java index 4a141b33ef..694aa697f6 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java @@ -16,7 +16,6 @@ package com.android.safetycenter.notifications; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_USER_HANDLE; @@ -39,7 +38,6 @@ import android.safetycenter.SafetySourceIssue; import android.text.TextUtils; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.safetycenter.PendingIntentFactory; @@ -55,7 +53,6 @@ import java.util.List; * Factory that builds {@link Notification} objects from {@link SafetySourceIssue} instances with * appropriate {@link PendingIntent}s for click and dismiss callbacks. */ -@RequiresApi(TIRAMISU) final class SafetyCenterNotificationFactory { private static final int OPEN_SAFETY_CENTER_REQUEST_CODE = 1221; diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationReceiver.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationReceiver.java index bb4977bb56..29af9a99b6 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationReceiver.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationReceiver.java @@ -16,8 +16,6 @@ package com.android.safetycenter.notifications; -import static android.os.Build.VERSION_CODES.TIRAMISU; - import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -27,7 +25,6 @@ import android.safetycenter.SafetySourceIssue; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.internal.annotations.GuardedBy; import com.android.permission.util.UserUtils; @@ -54,7 +51,6 @@ import com.android.safetycenter.logging.SafetyCenterStatsdLogger; * * @hide */ -@RequiresApi(TIRAMISU) public final class SafetyCenterNotificationReceiver extends BroadcastReceiver { private static final String TAG = "SafetyCenterNR"; diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java index 3804070d49..4e66bd156b 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java @@ -16,7 +16,6 @@ package com.android.safetycenter.notifications; -import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; @@ -36,7 +35,6 @@ import android.util.ArraySet; import android.util.Log; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; import com.android.permission.util.UserUtils; @@ -66,7 +64,6 @@ import javax.annotation.concurrent.NotThreadSafe; * * @hide */ -@RequiresApi(TIRAMISU) @NotThreadSafe public final class SafetyCenterNotificationSender { diff --git a/service/java/com/android/safetycenter/notifications/package-info.java b/service/java/com/android/safetycenter/notifications/package-info.java index 85b487b309..e16c06d58f 100644 --- a/service/java/com/android/safetycenter/notifications/package-info.java +++ b/service/java/com/android/safetycenter/notifications/package-info.java @@ -14,6 +14,8 @@ * limitations under the License. */ @NonNullByDefault +@RequiresTiramisuByDefault package com.android.safetycenter.notifications; import com.android.safetycenter.annotations.NonNullByDefault; +import com.android.safetycenter.annotations.RequiresTiramisuByDefault; diff --git a/service/java/com/android/safetycenter/package-info.java b/service/java/com/android/safetycenter/package-info.java index 0bccf89fad..72774d21e7 100644 --- a/service/java/com/android/safetycenter/package-info.java +++ b/service/java/com/android/safetycenter/package-info.java @@ -14,6 +14,8 @@ * limitations under the License. */ @NonNullByDefault +@RequiresTiramisuByDefault package com.android.safetycenter; import com.android.safetycenter.annotations.NonNullByDefault; +import com.android.safetycenter.annotations.RequiresTiramisuByDefault; -- GitLab From d5e77dc0f965f6442c2c71c5e4470ebc2a76128e Mon Sep 17 00:00:00 2001 From: Elliot Sisteron Date: Tue, 4 Jul 2023 09:53:39 +0000 Subject: [PATCH 181/577] Fix a test name. Bug: 267476663 Test: atest SafetyCenterResourcesLibTests Relnote: N/A Change-Id: Ifae9d5a1edb404134f00116357e2925f52370f22 --- SafetyCenter/ResourcesLib/tests/AndroidTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SafetyCenter/ResourcesLib/tests/AndroidTest.xml b/SafetyCenter/ResourcesLib/tests/AndroidTest.xml index 6dcfb0362c..e15ecf22a7 100644 --- a/SafetyCenter/ResourcesLib/tests/AndroidTest.xml +++ b/SafetyCenter/ResourcesLib/tests/AndroidTest.xml @@ -19,7 +19,7 @@