summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/Android.bp2
-rw-r--r--PermissionController/res/values-af/strings.xml24
-rw-r--r--PermissionController/res/values-am/strings.xml24
-rw-r--r--PermissionController/res/values-ar/strings.xml32
-rw-r--r--PermissionController/res/values-as/strings.xml24
-rw-r--r--PermissionController/res/values-az/strings.xml24
-rw-r--r--PermissionController/res/values-b+sr+Latn-v33/strings.xml2
-rw-r--r--PermissionController/res/values-b+sr+Latn/strings.xml24
-rw-r--r--PermissionController/res/values-be/strings.xml24
-rw-r--r--PermissionController/res/values-bg/strings.xml24
-rw-r--r--PermissionController/res/values-bn/strings.xml24
-rw-r--r--PermissionController/res/values-bs/strings.xml24
-rw-r--r--PermissionController/res/values-ca/strings.xml24
-rw-r--r--PermissionController/res/values-cs-v33/strings.xml2
-rw-r--r--PermissionController/res/values-cs/strings.xml28
-rw-r--r--PermissionController/res/values-da/strings.xml24
-rw-r--r--PermissionController/res/values-de/strings.xml26
-rw-r--r--PermissionController/res/values-el/strings.xml24
-rw-r--r--PermissionController/res/values-en-rAU/strings.xml24
-rw-r--r--PermissionController/res/values-en-rCA/strings.xml18
-rw-r--r--PermissionController/res/values-en-rGB/strings.xml24
-rw-r--r--PermissionController/res/values-en-rIN/strings.xml24
-rw-r--r--PermissionController/res/values-es-rUS/strings.xml24
-rw-r--r--PermissionController/res/values-es-v33/strings.xml2
-rw-r--r--PermissionController/res/values-es/strings.xml26
-rw-r--r--PermissionController/res/values-et/strings.xml29
-rw-r--r--PermissionController/res/values-eu/strings.xml24
-rw-r--r--PermissionController/res/values-fa/strings.xml28
-rw-r--r--PermissionController/res/values-fi-v33/strings.xml4
-rw-r--r--PermissionController/res/values-fi/strings.xml26
-rw-r--r--PermissionController/res/values-fr-rCA/strings.xml32
-rw-r--r--PermissionController/res/values-fr/strings.xml24
-rw-r--r--PermissionController/res/values-gl/strings.xml24
-rw-r--r--PermissionController/res/values-gu/strings.xml26
-rw-r--r--PermissionController/res/values-hi-v33/strings.xml2
-rw-r--r--PermissionController/res/values-hi/strings.xml24
-rw-r--r--PermissionController/res/values-hr/strings.xml24
-rw-r--r--PermissionController/res/values-hu-v33/strings.xml2
-rw-r--r--PermissionController/res/values-hu/strings.xml26
-rw-r--r--PermissionController/res/values-hy/strings.xml24
-rw-r--r--PermissionController/res/values-in/strings.xml24
-rw-r--r--PermissionController/res/values-is/strings.xml24
-rw-r--r--PermissionController/res/values-it/strings.xml24
-rw-r--r--PermissionController/res/values-iw/strings.xml28
-rw-r--r--PermissionController/res/values-ja/strings.xml28
-rw-r--r--PermissionController/res/values-ka/strings.xml24
-rw-r--r--PermissionController/res/values-kk/strings.xml24
-rw-r--r--PermissionController/res/values-km/strings.xml24
-rw-r--r--PermissionController/res/values-kn/strings.xml24
-rw-r--r--PermissionController/res/values-ko/strings.xml24
-rw-r--r--PermissionController/res/values-ky/strings.xml24
-rw-r--r--PermissionController/res/values-lo/strings.xml24
-rw-r--r--PermissionController/res/values-lt/strings.xml28
-rw-r--r--PermissionController/res/values-lv/strings.xml24
-rw-r--r--PermissionController/res/values-mk/strings.xml26
-rw-r--r--PermissionController/res/values-ml/strings.xml24
-rw-r--r--PermissionController/res/values-mn/strings.xml24
-rw-r--r--PermissionController/res/values-mr-television/strings.xml2
-rw-r--r--PermissionController/res/values-mr-watch/strings.xml2
-rw-r--r--PermissionController/res/values-mr/strings.xml38
-rw-r--r--PermissionController/res/values-ms/strings.xml24
-rw-r--r--PermissionController/res/values-my/strings.xml24
-rw-r--r--PermissionController/res/values-nb/strings.xml26
-rw-r--r--PermissionController/res/values-ne-v33/strings.xml2
-rw-r--r--PermissionController/res/values-ne/strings.xml34
-rw-r--r--PermissionController/res/values-nl/strings.xml26
-rw-r--r--PermissionController/res/values-or/strings.xml28
-rw-r--r--PermissionController/res/values-pa/strings.xml28
-rw-r--r--PermissionController/res/values-pl/strings.xml26
-rw-r--r--PermissionController/res/values-pt-rBR/strings.xml24
-rw-r--r--PermissionController/res/values-pt-rPT/strings.xml24
-rw-r--r--PermissionController/res/values-pt/strings.xml24
-rw-r--r--PermissionController/res/values-ro/strings.xml28
-rw-r--r--PermissionController/res/values-ru-v33/strings.xml2
-rw-r--r--PermissionController/res/values-ru/strings.xml24
-rw-r--r--PermissionController/res/values-si/strings.xml24
-rw-r--r--PermissionController/res/values-sk/strings.xml30
-rw-r--r--PermissionController/res/values-sl/strings.xml24
-rw-r--r--PermissionController/res/values-sq/strings.xml24
-rw-r--r--PermissionController/res/values-sr-v33/strings.xml2
-rw-r--r--PermissionController/res/values-sr/strings.xml24
-rw-r--r--PermissionController/res/values-sv/strings.xml24
-rw-r--r--PermissionController/res/values-sw/strings.xml24
-rw-r--r--PermissionController/res/values-ta/strings.xml24
-rw-r--r--PermissionController/res/values-te/strings.xml24
-rw-r--r--PermissionController/res/values-th/strings.xml24
-rw-r--r--PermissionController/res/values-tl/strings.xml24
-rw-r--r--PermissionController/res/values-tr/strings.xml24
-rw-r--r--PermissionController/res/values-uk/strings.xml26
-rw-r--r--PermissionController/res/values-ur/strings.xml24
-rw-r--r--PermissionController/res/values-uz/strings.xml24
-rw-r--r--PermissionController/res/values-vi/strings.xml24
-rw-r--r--PermissionController/res/values-zh-rCN/strings.xml24
-rw-r--r--PermissionController/res/values-zh-rHK-v34/strings.xml2
-rw-r--r--PermissionController/res/values-zh-rHK/strings.xml24
-rw-r--r--PermissionController/res/values-zh-rTW/strings.xml26
-rw-r--r--PermissionController/res/values-zu/strings.xml24
-rw-r--r--PermissionController/res/values/config.xml9
-rw-r--r--PermissionController/res/values/overlayable.xml11
-rw-r--r--PermissionController/res/values/strings.xml22
-rw-r--r--PermissionController/res/xml/roles.xml7
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/v33/CompanionDeviceAppStreamingRoleBehavior.java4
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/v34/CompanionDeviceNearbyDeviceStreamingRoleBehavior.java4
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleBehavior.java (renamed from PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java)6
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/AppOp.java3
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/Permission.java3
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/Role.java72
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java3
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/service/RoleControllerServiceImpl.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/util/IntentCompat.java25
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/util/RoleFlags.java12
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/util/SignedPackage.java35
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/util/SignedPackageUtils.java22
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java30
-rw-r--r--PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt15
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt10
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt241
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt81
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java1
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt22
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtils.java7
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/Role.md8
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java109
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppConfirmationDialogFragment.java26
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java8
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppViewModel.java25
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java8
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java6
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java6
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java17
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java17
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java16
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java23
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java16
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v35/WalletRoleUiBehavior.java78
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java (renamed from PermissionController/src/com/android/permissioncontroller/role/ui/behavior/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java)6
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java17
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java17
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java16
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRoleApplicationPreference.kt16
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRolePreference.kt19
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java15
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt5
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java40
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt13
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt51
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/expressive/SafetyBannerMessagePreference.kt190
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/IssueUiData.kt (renamed from PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java)15
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt41
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt28
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/ArrayUtilsTest.kt (renamed from PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/ArrayUtilsTest.kt)3
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/CollectionUtilsTest.kt (renamed from PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/CollectionUtilsTest.kt)3
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/KotlinUtilsTest.kt (renamed from PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt)3
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/PermissionMappingTest.kt (renamed from PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt)4
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/UtilsTest.kt (renamed from PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt)3
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtilsTest.kt62
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/utils/AdminRestrictedPermissionsUtilsTest.kt155
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetycenter/ui/model/SafetyCenterUiDataTest.kt212
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt9
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt7
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt7
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt7
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt7
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt49
-rw-r--r--PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt15
-rw-r--r--SafetyCenter/OWNERS1
-rw-r--r--SafetyCenter/Resources/res/values-iw/strings.xml2
-rw-r--r--SafetyCenter/Resources/res/values-mk-v35/strings.xml2
-rw-r--r--SafetyCenter/Resources/res/values-mk/strings.xml4
-rw-r--r--SafetyCenter/Resources/res/values-sk/strings.xml2
-rw-r--r--SafetyCenter/Resources/shared_res/values-fa/strings.xml2
-rw-r--r--SafetyCenter/Resources/shared_res/values-ky/strings.xml2
-rw-r--r--flags/flags.aconfig9
-rw-r--r--service/java/com/android/ecm/EnhancedConfirmationCallTrackerService.java13
-rw-r--r--service/java/com/android/ecm/EnhancedConfirmationManagerLocal.java6
-rw-r--r--service/java/com/android/ecm/EnhancedConfirmationService.java52
-rw-r--r--service/java/com/android/permission/util/UserUtils.java32
-rw-r--r--service/java/com/android/role/RoleService.java9
-rw-r--r--service/java/com/android/safetycenter/UserProfileGroup.java5
-rw-r--r--tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java97
-rw-r--r--tests/cts/permission/permissionTestUtilLib/src/android/permission/cts/PermissionUtils.java9
-rw-r--r--tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt182
-rw-r--r--tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java58
-rw-r--r--tests/cts/permissionpolicy/res/raw/android_manifest.xml774
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt6
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt6
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt25
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt36
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt10
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt2
-rw-r--r--tests/cts/role/src/android/app/role/cts/RoleManagerSecurityTest.kt148
-rw-r--r--tests/cts/role/src/android/app/role/cts/RoleManagerTest.java6
-rw-r--r--tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt714
-rw-r--r--tests/cts/safetycenter/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/multiusers/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/safetycenteractivity/Android.bp1
-rw-r--r--tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt34
-rw-r--r--tests/functional/safetycenter/singleuser/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt23
-rw-r--r--tests/functional/safetycenter/subpages/AndroidTest.xml4
-rw-r--r--tests/hostside/safetycenter/AndroidTest.xml4
-rw-r--r--tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterNotificationLoggingHelperTests.kt8
-rw-r--r--tests/utils/safetycenter/Android.bp1
-rw-r--r--tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt30
-rw-r--r--tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt103
208 files changed, 4538 insertions, 2094 deletions
diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp
index dd1b82dc7..c1a54619b 100644
--- a/PermissionController/Android.bp
+++ b/PermissionController/Android.bp
@@ -131,6 +131,7 @@ android_library {
"SettingsLibSearchWidget",
"SettingsLibLayoutPreference",
"SettingsLibBarChartPreference",
+ "SettingsLibBannerMessagePreference",
"SettingsLibActionBarShadow",
"SettingsLibProgressBar",
"SettingsLibCollapsingToolbarBaseActivity",
@@ -153,6 +154,7 @@ android_library {
"safety-label",
"role-controller",
"android.permission.flags-aconfig-java-export",
+ "android.xr.flags-aconfig-java-export",
"com.android.permission.flags-aconfig-java-export",
"androidx.compose.foundation_foundation",
"androidx.compose.runtime_runtime",
diff --git a/PermissionController/res/values-af/strings.xml b/PermissionController/res/values-af/strings.xml
index 10e7b627c..cde04659b 100644
--- a/PermissionController/res/values-af/strings.xml
+++ b/PermissionController/res/values-af/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g>toegang vir hierdie app op <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Sien al <xliff:g id="APP">%1$s</xliff:g> se toestemmings"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Sien alle apps met hierdie toestemming"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Inligting"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Instellings"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Wys Assistent-mikrofoongebruik"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Instellings vir ongebruikte apps"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Verwyder toestemmings as app nie gebruik word nie"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Oopmaak van skakels"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Verstek vir werk"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Verstek vir privaat ruimte"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Geoptimeer vir toestel"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Ander"</string>
<string name="default_app_none" msgid="9084592086808194457">"Geen"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Stelselverstek)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Geen apps nie"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil graag ontfoutingsinligting oplaai."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Deel ontfoutingsdata?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Die stelsel het \'n probleem bespeur."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> versoek tans om \'n foutverslag wat op <xliff:g id="DATE">%2$s</xliff:g> om <xliff:g id="TIME">%3$s</xliff:g> op hierdie toestel gegenereer is, op te laai. Foutverslae sluit persoonlike inligting oor jou toestel of wat deur programme aangemeld is in, byvoorbeeld gebruikername, liggingdata, toestelidentifiseerders en netwerkinligting. Deel foutverslae net met mense en programme wat jy met hierdie inligting vertrou. Laat <xliff:g id="APP_NAME_1">%4$s</xliff:g> toe om \'n foutverslag op te laai?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Kon nie die foutverslag vir <xliff:g id="APP_NAME">%1$s</xliff:g> verwerk nie. Die deel van die gedetailleerde ontfoutingdata is geweier. Jammer oor die onderbreking."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Laat toe"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Weier"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Laat beperkte instellings toe"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Beperkte instelling"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Hierdie instelling is vir jou veiligheid tans onbeskikbaar."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Handeling nie beskikbaar tydens ’n foonoproep nie"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Swendelaars versoek dikwels hierdie soort handeling tydens foonoproepgesprekke en dis dus geblokkeer om jou te beskerm. As jy aangesê word om hierdie handeling te doen deur iemand wat jy nie ken nie, kan dit ’n swendelary wees."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Jy kan nie tydens ’n foonoproep apps toelaat om ander apps te installeer nie."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Jy kan nie tydens ’n foonoproep ’n app toegang tot toeganklikheid gee nie."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Jy kan nie tydens ’n foonoproep hierdie instelling aktiveer nie."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Kan nie handeling tydens oproep voltooi nie"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Toegang tot <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> is geweier vir die app"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Die app het toegang tot toestemming vir sensitiewe inligting versoek wat jou persoonlike en finansiële inligting in gevaar kan stel.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Dit is moontlik dat die app nie reg sal werk sonder hierdie beperkte toestemming nie. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Kry meer inligting oor hoe om toegang toe te laat&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Toegang is geweier vir app om die verstek <xliff:g id="ROLE_NAME">%1$s</xliff:g> te wees"</string>
diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml
index fee1cc54a..591438820 100644
--- a/PermissionController/res/values-am/strings.xml
+++ b/PermissionController/res/values-am/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> ላይ ለዚህ መተግበሪያ የ<xliff:g id="PERM">%1$s</xliff:g> መዳረሻ"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ሁሉንም <xliff:g id="APP">%1$s</xliff:g> ፈቃዶች ይመልከቱ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ከዚህ መተግበሪያ ጋር ሁሉንም መተግበሪያዎች ይመልከቱ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"መረጃ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ቅንብሮች"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"የረዳት ማይክሮፎን አጠቃቀምን አሳይ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ሥራ ላይ ያልዋሉ የመተግበሪያ ቅንብሮች"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"መተግበሪያ ጥቅም ላይ ካልዋለ ፈቃዶችን አስወግድ"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"አገናኞችን በመክፈት ላይ"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ለሥራ ነባሪ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ለግል ቦታ ነባሪ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ለመሣሪያ የተባ"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ሌሎች"</string>
<string name="default_app_none" msgid="9084592086808194457">"ምንም"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(የሥርዓት ነባሪ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"መተግበሪያዎች የሉም"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> የሳንካ ማረሚያ መረጃን መስቀል ይፈልጋል።"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"የሳንካ ማረሚያ ውሂብ ይጋራ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ስርዓቱ አንድ ችግር አግኝቷል።"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> የሳንካ ሪፖርት ከዚህ መሣሪያ በ<xliff:g id="DATE">%2$s</xliff:g> ላይ በ<xliff:g id="TIME">%3$s</xliff:g> የተወሰደ የሳንካ ሪፖርትን ለመስቀል እየጠየቀ ነው። የሳንካ ሪፖርቶች ስለ የእርስዎ መሣሪያ ወይም በመተግበሪያዎች የተመዘገበ ለምሳሌ እንደ የተጠቃሚ ስሞች፣ የመገኛ አካባቢ ውሂብ፣ የመሣሪያ ለይቶ ማወቂያዎች እና የአውታረ መረብ መረጃን ያካትታል። ይህን መረጃ ከሚያምኗቸው ሰዎች እና መተግበሪያዎች ጋር ብቻ የሳንካ ሪፖርቶችን ያጋሩ። የሳንካ ሪፖርትን <xliff:g id="APP_NAME_1">%4$s</xliff:g> እንዲሰቅል ይፈቀድ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"የ<xliff:g id="APP_NAME">%1$s</xliff:g> የሳንካ ሪፖርትን ማስሄድ ላይ አንድ ስህተት ነበር። ስለዚህ ዝርዝር የማረሚያ ውሂቡን ማጋራት ተከልክሏል። ለመቋረጡ ይቅርታ እንጠይቃለን።"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ፍቀድ"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ከልክል"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"የተገደቡ ቅንብሮችን ፍቀድ"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"የተገደበ ቅንብር"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ለእርስዎ ደህንነት ሲባል ይህ ቅንብር በአሁኑ ጊዜ አይገኝም።"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"በስልክ ጥሪ ላይ ሳለ እርምጃ አይገኝም"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n አጭበርባሪዎች ብዙ ጊዜ እንደዚህ ዓይነት እርምጃ በስልክ ጥሪ ውይይቶች ወቅት ይጠይቃሉ፣ ስለዚህ እርስዎን ለመጠበቅ ታግዷል። ይህን እርምጃ በማያውቁት ሰው እንዲወስዱ እየተመሩ ከሆነ፣ ማጭበርበር ሊሆን ይችላል።"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"መተግበሪያዎች በስልክ ጥሪ ወቅት ሌሎች መተግበሪያዎችን እንዲጭኑ መፍቀድ አይፈቀድም።"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"በስልክ ጥሪ ጊዜ ለመተግበሪያ የተደራሽነት መዳረሻ መስጠት አይፈቀድም።"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"በስልክ ጥሪ ወቅት ይህን ቅንብር ማንቃት አይፈቀድም።"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"በጥሪ ወቅት እርምጃን ማጠናቀቅ አይቻልም"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"መተግበሪያ የ<xliff:g id="PERMISSION_NAME">%1$s</xliff:g> መዳረሻ ተከልክሏል"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"መተግበሪያው የእርስዎን የግል እና የፋይናንስ መረጃ አደጋ ላይ የሚጥል አደገኛ ፈቃድ እንዲደርስ ጠይቋል።<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ያለዚህ የተገደበ ፈቃድ መተግበሪያው በትክክል ላይሰራ ይችላል። &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;እንዴት መዳረሻን እንደሚፈቅዱ ይረዱ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"መተግበሪያ ነባሪ <xliff:g id="ROLE_NAME">%1$s</xliff:g> የመሆን መዳረሻ ተከልክሏል"</string>
diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml
index bc573dcd5..f80e0491f 100644
--- a/PermissionController/res/values-ar/strings.xml
+++ b/PermissionController/res/values-ar/strings.xml
@@ -84,7 +84,7 @@
<string name="storage_supergroup_warning_allow" msgid="103093462784523190">"‏تمّ تصميم هذا التطبيق لإصدار قديم من Android. إذا منحته هذا الإذن، سيتم السماح بوصوله إلى كل مساحة التخزين (بما في ذلك الصور والفيديوهات والموسيقى والصوت والملفات الأخرى)."</string>
<string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"‏تمّ تصميم هذا التطبيق لإصدار قديم من Android. إذا رفضت منحه هذا الإذن، سيتم رفض وصوله إلى كل مساحة التخزين (بما في ذلك الصور والفيديوهات والموسيقى والصوت والملفات الأخرى)."</string>
<string name="default_permission_description" msgid="4624464917726285203">"تنفيذ إجراء غير معروف"</string>
- <string name="app_permissions_group_summary" msgid="8788419008958284002">"تمّ السماح لـ <xliff:g id="COUNT_0">%1$d</xliff:g> من أصل <xliff:g id="COUNT_1">%2$d</xliff:g> تطبيق."</string>
+ <string name="app_permissions_group_summary" msgid="8788419008958284002">"عدد التطبيقات المسموح لها: <xliff:g id="COUNT_0">%1$d</xliff:g> من أصل <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="app_permissions_group_summary2" msgid="4329922444840521150">"التطبيقات التي تم منحها الإذن: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="menu_show_system" msgid="4254021607027872504">"إظهار تطبيقات النظام"</string>
<string name="menu_hide_system" msgid="3855390843744028465">"إخفاء تطبيقات النظام"</string>
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"إذن \"<xliff:g id="PERM">%1$s</xliff:g>\" لهذا التطبيق على \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\""</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"الاطّلاع على جميع أذونات تطبيق \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"الاطّلاع على جميع التطبيقات التي لديها هذا الإذن"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"معلومات"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"الإعدادات"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"‏عرض أذونات استخدام ميكروفون \"مساعد Google\""</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"إعدادات التطبيقات غير المُستخدَمة"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"إزالة الأذونات في حال عدم استخدام التطبيق"</string>
@@ -255,7 +253,7 @@
<string name="app_permission_never_accessed_summary" msgid="401346181461975090">"لم يستخدم الإذن مطلقًا"</string>
<string name="app_permission_never_accessed_denied_summary" msgid="6596000497490905146">"تم الرفض / لم يسبق الحصول على الإذن"</string>
<string name="allowed_header" msgid="7769277978004790414">"التطبيقات المسموح لها"</string>
- <string name="allowed_always_header" msgid="6455903312589013545">"تطبيقات مسموح لها بالوصول طوال الوقت"</string>
+ <string name="allowed_always_header" msgid="6455903312589013545">"الإذن ممنوحٌ طوال الوقت"</string>
<string name="allowed_foreground_header" msgid="6845655788447833353">"تطبيقات يمكنها الوصول عند استخدامها فقط"</string>
<string name="allowed_storage_scoped" msgid="5383645873719086975">"التطبيقات المسموح لها بالوصول إلى الوسائط فقط"</string>
<string name="allowed_storage_full" msgid="5356699280625693530">"التطبيقات المسموح لها بإدارة كل الملفات"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"فتح الروابط"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"التطبيقات التلقائية للعمل"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"التطبيقات التلقائية في المساحة الخاصّة"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"متوافقة مع الجهاز"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"غير ذلك"</string>
<string name="default_app_none" msgid="9084592086808194457">"غير محدَّد"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(الإعداد التلقائي للنظام)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ليست هناك تطبيقات."</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"يريد تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> تحميل معلومات تصحيح الأخطاء."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"هل تريد مشاركة بيانات تصحيح الأخطاء؟"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"رصَد النظام مشكلة."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"يطلب تطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> تحميل تقرير للأخطاء من هذا الجهاز تم تسجيله بتاريخ <xliff:g id="DATE">%2$s</xliff:g> في <xliff:g id="TIME">%3$s</xliff:g>. وتشمل تقارير الأخطاء المعلومات الشخصية حول جهازك أو المعلومات التي سجلتها التطبيقات، مثل أسماء المستخدمين وبيانات الموقع الجغرافي ومعرّفات الأجهزة ومعلومات الشبكة. ويجب عدم مشاركة تقارير الأخطاء إلا مع المستخدمين والتطبيقات التي تثق بمشاركة هذه المعلومات معها. هل تريد السماح لتطبيق <xliff:g id="APP_NAME_1">%4$s</xliff:g> بتحميل تقرير أخطاء؟"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"حدث خطأ أثناء معالجة تقرير الخطأ لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g>، ولذلك تم رفض مشاركة بيانات تصحيح الأخطاء التفصيلية. نأسف للمقاطعة."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"سماح"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"رفض"</string>
@@ -475,7 +476,7 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى جهات الاتصال؟"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى جهات اتصالك على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"‏هل مطلوب السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي الخاص بـ &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"لن يكون بإمكان التطبيق الوصول إلى الموقع الجغرافي إلا عند استخدامك لهذا التطبيق."</string>
<string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
@@ -495,7 +496,7 @@
<string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"تقريبي"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى التقويم؟"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى تقويمك على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
- <string name="permgrouprequest_sms" msgid="5672063688745420991">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بإرسال رسائل SMS وعرضها؟"</string>
+ <string name="permgrouprequest_sms" msgid="5672063688745420991">"‏هل مطلوب السماح لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> بإرسال رسائل SMS وعرضها؟"</string>
<string name="permgrouprequest_device_aware_sms" msgid="6639977653040502291">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بإرسال الرسائل القصيرة وعرضها على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequest_storage" msgid="8717773092518621602">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط والملفات على جهازك؟"</string>
<string name="permgrouprequest_device_aware_storage" msgid="6933251810928606636">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط والملفات على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"السماح بالإعدادات المحظورة"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"الإعداد محظور"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"للحفاظ على أمانك، هذا الإعداد غير متوفِّر حاليًا."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"لا يتوفّر هذا الإجراء أثناء إجراء مكالمة هاتفية"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n يطلب المخادِعون غالبًا هذا النوع من الإجراءات أثناء المكالمات الهاتفية، لذا تم حظره لحماية بياناتك. إذا طلبَ منك شخص غير معروف اتّخاذ هذا الإجراء، قد يكون ذلك عملية خداع."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"لا يُسمح للتطبيقات بتثبيت تطبيقات أخرى أثناء إجراء مكالمة هاتفية."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"لا يُسمح لأي تطبيق بالوصول إلى خدمة مخصّصة لتسهيل الاستخدام أثناء إجراء مكالمة هاتفية."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"لا يُسمح بتفعيل هذه الإعدادات أثناء إجراء مكالمة هاتفية."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"يتعذّر إكمال الإجراء أثناء إجراء مكالمة"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"تم منع التطبيق من الوصول إلى <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"‏طلب التطبيق أحد أذونات الوصول إلى المعلومات الحساسة، ما قد يعرّض معلوماتك الشخصية والمالية للخطر.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>من المحتمل ألا يعمل التطبيق بشكل صحيح إذا لم يحصل على هذا الإذن المقيَّد. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;مزيد من المعلومات حول كيفية منح الأذونات&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"لم يُسمَح للتطبيق بأن يكون <xliff:g id="ROLE_NAME">%1$s</xliff:g> التلقائي"</string>
diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml
index ca28a1d28..44aa7ca33 100644
--- a/PermissionController/res/values-as/strings.xml
+++ b/PermissionController/res/values-as/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>ত এই এপৰ <xliff:g id="PERM">%1$s</xliff:g>ৰ এক্সেছ"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"আটাইবোৰ <xliff:g id="APP">%1$s</xliff:g> অনুমতি চাওক"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"এই অনুমতি থকা আটাইবোৰ এপ্ চাওক"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"তথ্য"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ছেটিং"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"সহায়ক মাইক্ৰ’ফ’নৰ ব্যৱহাৰ দেখুৱাওক"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ব্যৱহাৰ নকৰা এপৰ ছেটিং"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"যদি এপ্‌টো ব্যৱহাৰ কৰা নাই অনুমতিসমূহ আঁতৰাওক"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"লিংকসমূহ খুলি থকা হৈছে"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"কৰ্মস্থানৰ বাবে ডিফ’ল্ট"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"প্ৰাইভেট স্পে’চৰ বাবে ডিফ’ল্ট"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ডিভাইচৰ বাবে অপ্টিমাইজ কৰা হৈছে"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"অন্য"</string>
<string name="default_app_none" msgid="9084592086808194457">"নাই"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ছিষ্টেম ডিফ\'ল্ট)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"কোনো এপ্‌ নাই"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ ডিবাগ তথ্য আপল’ড কৰিব বিচাৰিছে।"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ডিবাগ কৰা ডেটা শ্বেয়াৰ কৰিবনে?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ছিষ্টেমটোৱে কিবা সমস্যা চিনাক্ত কৰিছে।"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>এ এই ডিভাইচটোৰ <xliff:g id="DATE">%2$s</xliff:g> তাৰিখে <xliff:g id="TIME">%3$s</xliff:g>ত সংগ্ৰহ কৰা এটা বাগ ৰিপ’ৰ্ট আপল’ড কৰাৰ অনুমতি বিচাৰিছে। সেই বাগ ৰিপ’ৰ্টটোত আপোনাৰ ডিভাইচটোৰ বিষয়ে ব্যক্তিগত তথ্য বা এপে লগ কৰা তথ্য, যেনে ব্যৱহাৰকাৰীৰ নাম, অৱস্থান ডেটা, ডিভাইচ পৰিচায়ক আৰু নেটৱৰ্ক সম্পৰ্কীয় তথ্য ইত্যাদি অন্তৰ্ভুক্ত থাকিব। এইখিনি তথ্যৰ ক্ষেত্ৰত কেৱল আপুনি বিশ্বাস কৰা ব্যক্তি বা এপৰ সৈতেহে বাগ ৰিপ’ৰ্ট শ্বেয়াৰ কৰক। <xliff:g id="APP_NAME_1">%4$s</xliff:g>ক বাগ ৰিপ’ৰ্ট আপল’ড কৰাৰ অনুমতি দিবনে?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বিষয়ে বাগ ৰিপ’ৰ্টটোৰ প্ৰক্ৰিয়া চলাওঁতে আসোঁৱাহ হৈছে। গতিকে বিতং ডিবাগিং ডেটা শ্বেয়াৰ কৰিবলৈ অস্বীকাৰ কৰা হৈছে। এই ব্যাঘাতৰ বাবে দুঃখিত।"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"অনুমতি দিয়ক"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"অস্বীকাৰ কৰক"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"প্ৰতিবন্ধিত ছেটিঙৰ অনুমতি দিয়ক"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"প্ৰতিবন্ধিত ছেটিং"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"আপোনাৰ সুৰক্ষাৰ বাবে, এই ছেটিংটো বৰ্তমান উপলব্ধ নহয়।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ফ’ন কল চলি থকাৰ সময়ত এই কাৰ্যটো কৰিব নোৱাৰি"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ফ’ন কলত বাৰ্তালাপ চলি থকাৰ সময়ত প্ৰৱঞ্চকে প্ৰায়েই এই ধৰণৰ কাৰ্য কৰিবলৈ অনুৰোধ কৰে, গতিকে আপোনাক সুৰক্ষিত কৰিবলৈ এইটো অৱৰোধ কৰা হৈছে। যদি আপোনাক আপুনি চিনি নোপোৱা কোনো লোকে এই কাৰ্যটো কৰিবলৈ নিৰ্দেশনা দিয়ে, সেয়া প্ৰৱঞ্চনা হ’ব পাৰে।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ফ’ন কল চলি থকাৰ সময়ত কোনো এপক অন্য এপ্‌ ইনষ্টল কৰিবলৈ অনুমতি দিয়া নহয়।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"কোনো এপক ফ’ন কলৰ সময়ত সাধ্য সুবিধাৰ এক্সেছ প্ৰদান কৰাৰ অনুমতি দিয়া নহয়।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ফ’ন কল চলি থকাৰ সময়ত এই ছেটিংটো সক্ষম কৰাৰ অনুমতি দিয়া নহয়।"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"কলৰ সময়ত কাৰ্য সম্পূৰ্ণ কৰিব নোৱাৰি"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"এপ্‌টোক <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>ৰ এক্সেছ প্ৰত্যাখ্যান কৰা হৈছে"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"এপ্‌টোৱে সংবেদনশীল অনুমতি এক্সেছ কৰিবলৈ অনুৰোধ কৰিছে, যিটোৱে আপোনাৰ ব্যক্তিগত আৰু বিত্তীয় তথ্য বিপদাপন্ন কৰিব পাৰে।<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>এপ্‌টোৱে এই প্ৰতিবন্ধিত অনুমতিটোৰ অবিহনে সঠিককৈ কাম নকৰাটো সম্ভৱ হ’ব পাৰে। &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;কেনেকৈ এক্সেছৰ অনুমতি দিব লাগে জানক&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"এপ্‌টোক ডিফ’ল্ট <xliff:g id="ROLE_NAME">%1$s</xliff:g>ৰ এক্সেছ প্ৰত্যাখ্যান কৰা হৈছে"</string>
diff --git a/PermissionController/res/values-az/strings.xml b/PermissionController/res/values-az/strings.xml
index fcd23f01e..28e05bdab 100644
--- a/PermissionController/res/values-az/strings.xml
+++ b/PermissionController/res/values-az/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> cihazında bu tətbiq üçün <xliff:g id="PERM">%1$s</xliff:g> girişi"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Bütün <xliff:g id="APP">%1$s</xliff:g> icazələrinə baxın"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Bu icazəyə sahib olan bütün tətbiqlərə baxın"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Məlumat"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ayarlar"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistent üçün mikrofon istifadəsini göstərin"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"İstifadə edilməyən tətbiq ayarları"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Tətbiq işlənməyəndə icazə ləğv edilsin"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Linklərin açılması"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"İş üçün defolt"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Şəxsi sahə üçün defolt"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Cihaz üçün optimallaşdırılıb"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Digərləri"</string>
<string name="default_app_none" msgid="9084592086808194457">"Yoxdur"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sistem defoltu)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Tətbiq yoxdur"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> sazlama məlumatını yükləmək istəyir."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Sazlama datası paylaşılsın?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem xətası aşkarlandı."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> bu cihazdan <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g> tarixində götürülmüş baq hesabatını yükləmək istəyir. Baq hesabatlarına istifadəçi adları, məkan datası, cihaz identifikatorları və şəbəkə məlumatı kimi cihaz və ya tətbiqlər haqqında məxfi məlumat daxildir. Baq hesabatlarını yalnız güvəndiyiniz şəxs və tətbiqlərlə paylaşın. <xliff:g id="APP_NAME_1">%4$s</xliff:g> tətbiqinə baq hesabatını yükləməyə icazə verilsin?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün baq hesabatı işlənərkən xəta baş verdi. Sazlanma datası haqqında ətraflı məlumatın paylaşılması rədd edildi. Problemə görə üzr istəyirik."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"İcazə verin"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Rədd edin"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Məhdudlaşdırılmış ayarlara icazə verin"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Məhdudlaşdırılmış ayar"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Güvənlik üçün bu ayar əlçatan deyil."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Telefon zəngi zamanı əməliyyat mümkün deyil"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Adətən, fırıldaqçılar telefon danışıqları zamanı bu cür əməliyyatı icra etməyinizi tələb edirlər, ona görə də sizi qorumaq üçün bloklanıb. Tanımadığınız şəxsin bu əməliyyatı icra etməyinizi istəməsi fırıldaqçılıq ola bilər."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefon zəngi zamanı tətbiqlərin digər tətbiqləri quraşdırmağına icazə verilmir."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefon zəngi zamanı tətbiqə xüsusi imkanlara giriş icazəsi verilmir."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Telefon zəngi zamanı bu ayarın aktivləşdirilməsinə icazə verilmir."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Zəng zamanı əməliyyatı tamamlamaq olmur"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Tətbiqə <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> icazəsinə giriş verilmədi"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Tətbiq şəxsi və maliyyə məlumatlarınızı riskə ata biləcək həssas məlumat icazəsinə giriş istədi.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Bu məhdud icazə olmadan tətbiq düzgün işləməyə bilər. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Girişə icazə vermək haqqında ətraflı&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Tətbiqə defolt <xliff:g id="ROLE_NAME">%1$s</xliff:g> roluna giriş verilmədi"</string>
diff --git a/PermissionController/res/values-b+sr+Latn-v33/strings.xml b/PermissionController/res/values-b+sr+Latn-v33/strings.xml
index b2087a41d..8da4acd5c 100644
--- a/PermissionController/res/values-b+sr+Latn-v33/strings.xml
+++ b/PermissionController/res/values-b+sr+Latn-v33/strings.xml
@@ -33,7 +33,7 @@
<string name="safety_center_more_issues_card_collapse_action" msgid="7485597582198474637">"Skupi"</string>
<string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"Obaveštenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string>
<string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"Radnja je dovršena"</string>
- <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Proverite podešavanja koja mogu da dodaju zaštitu uređaju"</string>
+ <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Proverite podešavanja koja mogu da doprinesu boljoj zaštiti uređaja"</string>
<string name="safety_center_qs_page_landing" msgid="1717368301679228128">"Brza podešavanja bezbednosti i privatnosti"</string>
<string name="safety_center_qs_close_button" msgid="1352313308176244599">"Zatvori"</string>
<string name="safety_center_qs_expand_action" msgid="2193190557696484169">"Proširi i prikaži opcije"</string>
diff --git a/PermissionController/res/values-b+sr+Latn/strings.xml b/PermissionController/res/values-b+sr+Latn/strings.xml
index 275dfce8c..88ddd8329 100644
--- a/PermissionController/res/values-b+sr+Latn/strings.xml
+++ b/PermissionController/res/values-b+sr+Latn/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Ova aplikacija ima pristup za: <xliff:g id="PERM">%1$s</xliff:g> na uređaju <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Prikaži sve dozvole za: <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Prikaži sve aplikacije sa ovom dozvolom"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacije"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Podešavanja"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Prikaži kako Pomoćnik koristi mikrofon"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Podešavanja nekorišćenih aplikacija"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni dozvole ako se aplikacija ne koristi"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otvaranje linkova"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Podrazumevana za posao"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Podrazumevano za privatan prostor"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizovano za uređaj"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Drugo"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ništa"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Podrazumevana sistemska)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nema aplikacija"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi da otpremi informacije za otklanjanje grešaka."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Želite da delite podatke o otklanjanju grešaka?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem je otkrio problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> traži da otpremi izveštaj o greškama sa ovog uređaja koji je napravljen <xliff:g id="DATE">%2$s</xliff:g> u <xliff:g id="TIME">%3$s</xliff:g>. Izveštaji o greškama obuhvataju lične podatke o uređaju ili podatke koje su evidentirale aplikacije, na primer, korisnička imena, podatke o lokaciji, identifikatore uređaja i informacije o mreži. Delite izveštaje o greškama samo sa ljudima i aplikacijama koje smatrate pouzdanim za te informacije. Želite li da dozvolite da <xliff:g id="APP_NAME_1">%4$s</xliff:g> otpremi izveštaj o grešci?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Došlo je do greške pri obradi izveštaja o grešci za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>. Zato je odbijeno deljenje detaljnih podataka o otklanjanju grešaka. Izvinjavamo se zbog prekida."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Dozvoli"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Odbij"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Dozvoli ograničena podešavanja"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ograničeno podešavanje"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ovo podešavanje je trenutno nedostupno radi vaše bezbednosti."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Radnja nije dostupna tokom telefonskog poziva"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Prevaranti često traže ovaj tip radnje tokom telefonskog poziva, pa smo je blokirali da bismo vas zaštitili. Ako vas neko koga ne poznajete upućuje na ovu radnju, to bi mogla da bude prevara."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Nije dozvoljeno da aplikacije instaliraju druge aplikacije tokom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Nije dozvoljeno da aplikacija dobije pristup usluzi pristupačnosti tokom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Omogućavanje ovog podešavanja nije dozvoljeno tokom telefonskog poziva."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Radnja ne može da se završi tokom poziva"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikaciji nije dozvoljen pristup dozvoli: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacija je zatražila pristup osetljivoj dozvoli, što može da ugrozi bezbednost ličnih i finansijskih podataka.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Aplikacija možda neće raditi ispravno bez ove ograničene dozvole. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Saznajte kako da dozvolite pristup&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikaciji nije dozvoljen pristup da postane podrazumevana: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-be/strings.xml b/PermissionController/res/values-be/strings.xml
index 257045bed..e74422f2c 100644
--- a/PermissionController/res/values-be/strings.xml
+++ b/PermissionController/res/values-be/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Дазвол \"<xliff:g id="PERM">%1$s</xliff:g>\" для гэтай праграмы на прыладзе \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\""</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Паказаць усе дазволы праграмы \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Паказаць усе праграмы з гэтым дазволам"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Інфармацыя"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Налады"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Паказваць выкарыстанне мікрафона памочнікам"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Налады неактыўных праграм"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Выдаляць дазволы, калі праграма не выкарыстоўваецца"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Адкрыццё спасылак"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Стандартныя для працы"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Стандартныя праграмы для прыватнай прасторы"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Аптымізаваныя для прылады"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Іншыя"</string>
<string name="default_app_none" msgid="9084592086808194457">"Няма"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Стандартная сістэмная)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Няма праграм"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" спрабуе запампаваць звесткі пра адладку."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Абагуліць даныя адладкі?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Сістэма выявіла праблему."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Праграма \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" запытвае запампоўку справаздачы пра памылкі з гэтай прылады ад <xliff:g id="DATE">%2$s</xliff:g> у <xliff:g id="TIME">%3$s</xliff:g>. Справаздача пра памылкі ўключае персанальную інфармацыю пра вашу прыладу ці зарэгістраваныя праграмы, напрыклад імёны карыстальнікаў, звесткі пра месцазнаходжанне, ідэнтыфікатары прылады і даныя пра сетку. Абагульвайце справаздачы пра памылкі толькі з людзьмі і праграмамі, якім давяраеце. Дазволіць праграме \"<xliff:g id="APP_NAME_1">%4$s</xliff:g>\" запампаваць справаздачу пра памылкі?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Узнікла памылка пры апрацоўцы справаздачы пра памылкі для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\". Абагульванне падрабязных звестак пра адладку адхілена. Просім прабачэння за збой."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Дазволіць"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Адмовіць"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Дазволіць абмежаваныя налады"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Налада з абмежаваным доступам"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"У мэтах бяспекі гэта налада цяпер недаступная."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Дзеянне недаступнае падчас тэлефоннага выкліку"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n У тэлефонных размовах махляры часта просяць усталяваць праграмы, таму ў мэтах бяспекі мы блакіруем такія дзеянні. Запыт ад невядомай вам асобы выканаць падобнае дзеянне можа расцэньвацца як махлярства."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Падчас тэлефоннага выкліку забараняецца даваць дазвол праграмам усталёўваць іншыя праграмы."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Падчас тэлефоннага выкліку забараняецца даваць праграмам доступ да спецыяльных магчымасцей."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Падчас тэлефоннага выкліку забараняецца ўключаць гэту наладу."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Нельга выканаць гэта дзеянне падчас выкліку"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Праграме адмоўлена ў дазволе \"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>\""</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Праграма запытала дазвол на доступ да канфідэнцыяльнай інфармацыі. Калі вы яго дасце, ваша асабістая і фінансавая інфармацыя можа аказацца ў небяспецы.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Магчыма, без гэтага абмежаванага дазволу праграма не будзе працаваць належным чынам. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Даведацца, як дазволіць доступ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Праграме адмоўлена ў дазволе стандартна выконваць наступную ролю: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-bg/strings.xml b/PermissionController/res/values-bg/strings.xml
index e5e2ec131..0e754219f 100644
--- a/PermissionController/res/values-bg/strings.xml
+++ b/PermissionController/res/values-bg/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Достъп до <xliff:g id="PERM">%1$s</xliff:g> на <xliff:g id="DEVICE_NAME">%2$s</xliff:g> за това приложение"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Преглед на всички разрешения, предоставени за: <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Преглед на всички приложения с това разрешение"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Информация"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Настройки"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Показване на употребата на микрофона за Асистент"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Настройки за неизползваните приложения"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Премахване на разрешенията, ако приложението не се използва"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Отваряне на връзки"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"По подразбиране за работа"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Стандартни за частното пространство"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Оптимизирано за устройството"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Други"</string>
<string name="default_app_none" msgid="9084592086808194457">"Няма"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Стандартно за системата)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Няма приложения"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска да качи информация за отстраняване на грешки."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Споделяне на данните за отстраняване на грешки?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Системата откри проблем."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> иска да качи сигнал за програмна грешка от това устройство, създаден на <xliff:g id="DATE">%2$s</xliff:g> в <xliff:g id="TIME">%3$s</xliff:g>. Сигналите за програмни грешки включват лична информация за устройството ви или регистрирана от приложенията, като например потребителски имена, данни за местоположението, идентификатори на устройството и информация за мрежата. Споделяйте сигналите за програмни грешки само с хора и приложения, на които бихте доверили тази информация. Да се разреши ли на <xliff:g id="APP_NAME_1">%4$s</xliff:g> да качи сигнал за програмна грешка?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"При обработката на сигнала за програмна грешка за <xliff:g id="APP_NAME">%1$s</xliff:g> възникна проблем. Затова споделянето на подробните данни за отстраняването на грешки бе отказано. Извиняваме се за прекъсването."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Разрешаване"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Отказ"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Разрешаване на ограничените настройки"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ограничена настройка"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"От съображения за сигурност понастоящем тази настройка не е налице."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Действието не е налице по време на тел. обаждане"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\nТова действие е блокирано от съображения за сигурност, защото често се използва от измамници по време на телефонни разговори. Ако човек, когото не познавате, ви напътства, за да предприемете това действие, възможно е да става дума за измама."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"По време на телефонно обаждане не можете да разрешавате на приложенията да инсталират други приложения."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"По време на телефонно обаждане не е разрешено да давате на приложение достъп до услугата за достъпност."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Активирането на тази настройка не е разрешено по време на телефонно обаждане."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Действието не е възможно по време на обаждане"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"На приложението бе отказан достъп до <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Приложението поиска разрешение за достъп до поверителни данни, което може да изложи на риск личната или финансовата ви информация.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Възможно е приложението да не работи правилно без това ограничено разрешение. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Научете как да разрешите достъпа&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Приложението не получи разрешение да бъде по подразбиране: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-bn/strings.xml b/PermissionController/res/values-bn/strings.xml
index ce70aa4e8..b6b2a05ba 100644
--- a/PermissionController/res/values-bn/strings.xml
+++ b/PermissionController/res/values-bn/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>-এ এই অ্যাপের জন্য <xliff:g id="PERM">%1$s</xliff:g>-এর অ্যাক্সেস"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g>-এর ক্ষেত্রে দেওয়া সব অনুমতি দেখুন"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"যেসব অ্যাপের এই অনুমতি আছে সেগুলি দেখুন"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"তথ্য"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"সেটিংস"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant-এর মাইক্রোফোন ব্যবহার সম্পর্কিত ডেটা দেখুন"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ব্যবহার করা হয়নি এমন অ্যাপ সেটিংস"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"অ্যাপ ব্যবহার করা না হলে সেটি থেকে অনুমতি প্রত্যাহার করে নিন"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"লিঙ্ক খোলা"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"অফিসের জন্য ডিফল্ট"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"প্রাইভেট স্পেসের জন্য ডিফল্ট"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ডিভাইসের জন্য অপ্টিমাইজ করা হয়েছে"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"অন্যান্য"</string>
<string name="default_app_none" msgid="9084592086808194457">"কোনওটিই নয়"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(সিস্টেম ডিফল্ট)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"কোনও অ্যাপ নেই"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ডিবাগিংয়ের তথ্য আপলোড করতে চায়।"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ডিবাগিং ডেটা শেয়ার করবেন?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"সিস্টেম একটি সমস্যা শনাক্ত করেছে।"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"এই ডিভাইস থেকে <xliff:g id="DATE">%2$s</xliff:g> তারিখে <xliff:g id="TIME">%3$s</xliff:g>-এ নেওয়া একটি সমস্যার রিপোর্ট <xliff:g id="APP_NAME_0">%1$s</xliff:g> আপলোড করতে চাইছে। ইউজার নেম, লোকেশন ডেটা, ডিভাইসের শনাক্তকারী ও নেটওয়ার্কের তথ্যের মতো আপনার ডিভাইস ও লগ-ইন করা অ্যাপের ব্যাপারে ব্যক্তিগত তথ্য সমস্যার রিপোর্টে অন্তর্ভুক্ত থাকে। যেসব লোকজন বা অ্যাপকে আপনি এই তথ্য জানানোর ব্যাপারে বিশ্বাস করতে পারেন শুধুমাত্র তাদের সাথেই সমস্যার রিপোর্ট শেয়ার করুন। একটি সমস্যার রিপোর্ট আপলোড করতে <xliff:g id="APP_NAME_1">%4$s</xliff:g>-কে অনুমতি দিতে চান?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর ত্রুটির প্রতিবেদন প্রসেস করার সময় সমস্যা হয়েছে। তাই ডিবাগিং সংক্রান্ত বিস্তারিত ডেটা শেয়ার করার প্রক্রিয়াটি বাতিল করা হয়েছে। বিঘ্ন ঘটায় দুঃখিত।"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"অনুমতি দিন"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"অনুমতি দেবেন না"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"বিধিনিষেধযুক্ত সেটিংসের অনুমতি দিন"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"বিধিনিষেধযুক্ত সেটিংস"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"আপনার নিরাপত্তার জন্য, এই সেটিং বর্তমানে উপলভ্য নেই।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ফোন কলের সময় অ্যাকশন নেওয়া যাবে না"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ফোন কলের সময় স্ক্যামার প্রায়ই এই ধরনের অ্যাকশনের অনুরোধ করেন, তাই আপনাকে সুরক্ষিত রাখতে এটি ব্লক করা হয়েছে। আপনি চেনেন না এমন কেউ আপনাকে এই অ্যাকশন নিতে বললে, সেটি স্ক্যাম হতে পারে।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ফোন কলের সময় অ্যাপকে অন্য অ্যাপ ইনস্টল করার অনুমতি দেওয়া হয় না।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ফোন কল চলার সময় কোনও অ্যাপকে অ্যাক্সেসিবিলিটির অ্যাক্সেস দেওয়ার অনুমতি দেওয়া হয় না।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ফোন কল চলার সময় এই সেটিংস চালু করার অনুমতি দেওয়া হয় না।"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"কল চলাকালীন অ্যাকশন সম্পূর্ণ করা যাচ্ছে না"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"অ্যাপকে <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> অ্যাক্সেস করতে দেওয়া হয়নি"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"অ্যাপটি সংবেদনশীল অনুমতি অ্যাক্সেস করার অনুরোধ জানিয়েছে, যার জন্য আপনার ব্যক্তিগত ও আর্থিক অবস্থা সম্পর্কিত তথ্যের ক্ষেত্রে ঝুঁকির সম্ভাবনা থাকতে পারে।<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>এই সীমাবদ্ধ অনুমতি ছাড়া অ্যাপটি সঠিকভাবে কাজ না করার সম্ভাবনাও আছে। &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;কীভাবে অ্যাক্সেস করার অনুমতি দেবেন সেই সম্পর্কে জানুন&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"অ্যাপকে ডিফল্ট <xliff:g id="ROLE_NAME">%1$s</xliff:g> হিসেবে কাজ করার অ্যাক্সেস দেওয়া হয়নি"</string>
diff --git a/PermissionController/res/values-bs/strings.xml b/PermissionController/res/values-bs/strings.xml
index 9f4a12a50..1bd81c121 100644
--- a/PermissionController/res/values-bs/strings.xml
+++ b/PermissionController/res/values-bs/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Pristup aplikaciji \"<xliff:g id="PERM">%1$s</xliff:g>\" za ovu aplikaciju na uređaju \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\""</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Prikaži sva odobrenja aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Prikaži sve aplikacije s ovim odobrenjem"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacije"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Postavke"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Prikaži korištenje mikrofona asistenta"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Postavke za nekorištene aplikacije"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni odobrenja ako se aplikacija ne koristi"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otvaranje linkova"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Uobičajeno za rad"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Zadano za privatni prostor"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizirano za uređaj"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Drugo"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nema"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sistemski zadano)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nema aplikacija"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> želi otpremiti informacije o otklanjanju grešaka."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Podijeliti podatke o otklanjanju grešaka?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem je otkrio problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> traži da s ovog uređaja otpremi izvještaj o greškama napravljen <xliff:g id="DATE">%2$s</xliff:g> u <xliff:g id="TIME">%3$s</xliff:g>. Izvještaji o greškama uključuju lične informacije o vašem uređaju ili koje su zabilježile aplikacije, npr. korisnička imena, podatke o lokaciji, identifikatore uređaja i informacije o mreži. Izvještaje o greškama dijelite samo s osobama i aplikacijama kojim vjerujete. Dozvoliti aplikaciji <xliff:g id="APP_NAME_1">%4$s</xliff:g> da otpremi izvještaj o greškama?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Došlo je do greške prilikom obrade izvještaja o greškama za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>. Stoga je odbijeno dijeljenje detaljnih podataka o otklanjanju grešaka. Izvinjavamo se na prekidu."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Dozvoli"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Odbij"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Dozvoli ograničene postavke"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ograničena postavka"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Radi vaše sigurnosti postavka trenutno nije dostupna."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Radnja nije dostupna tokom telefonskog poziva"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Prevaranti često traže ovu vrstu radnje tokom telefonskih razgovora, pa ovo blokiramo da vas zaštitimo. Ako neko koga ne poznajete traži da poduzmete ovu radnju, to može biti prevara."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Dozvoljavanje aplikacijama da instaliraju druge aplikacije nije dozvoljeno tokom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Davanje aplikaciji pristup pristupačnosti nije dozvoljeno tokom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Omogućavanje ove postavke nije dozvoljeno tokom telefonskog poziva."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Nije moguće izvršiti radnju tokom poziva"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikaciji je odbijen pristup odobrenju <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacija je zatražila pristup osjetljivom odobrenju, što može ugroziti vaše lične i finansijske informacije.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Moguće je da aplikacija neće ispravno raditi bez ovog ograničenog odobrenja. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Saznajte kako dozvoliti pristup&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikaciji je odbijen pristup da bude zadana <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-ca/strings.xml b/PermissionController/res/values-ca/strings.xml
index 48cf957d1..0cc63e1f7 100644
--- a/PermissionController/res/values-ca/strings.xml
+++ b/PermissionController/res/values-ca/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Accés de <xliff:g id="PERM">%1$s</xliff:g> a aquesta aplicació (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>)"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Mostra tots els permisos per a <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Mostra totes les aplicacions que tenen aquest permís"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informació"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Configuració"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostra l\'ús del micròfon de l\'Assistent"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Configuració d\'aplicació no utilitzada"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Suprimeix els permisos si no s\'utilitza l\'aplicació"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Obertura d\'enllaços"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predeterminada per a la feina"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Predeterminades per a l\'espai privat"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimitzades per al dispositiu"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Altres"</string>
<string name="default_app_none" msgid="9084592086808194457">"Cap"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Opció predeterminada del sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Cap aplicació"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vol penjar informació de depuració."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vols compartir les dades de depuració?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"El sistema ha detectat un problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> sol·licita penjar un informe d\'errors des d\'aquest dispositiu generat el dia <xliff:g id="DATE">%2$s</xliff:g> (<xliff:g id="TIME">%3$s</xliff:g>). Els informes d\'errors inclouen informació personal sobre el dispositiu o informació registrada per les aplicacions, com ara noms d\'usuaris, dades de la ubicació, identificadors del dispositiu i informació de la xarxa. Comparteix informes d\'errors només amb persones i aplicacions de confiança. Vols permetre que <xliff:g id="APP_NAME_1">%4$s</xliff:g> pengi un informe d\'errors?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Hi ha hagut un error en processar l\'informe d\'errors de l\'aplicació <xliff:g id="APP_NAME">%1$s</xliff:g> i, per tant, s\'han denegat les dades de depuració detallades. Sentim la interrupció."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permet"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Denega"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permet la configuració restringida"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Opció de configuració restringida"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Per a la teva seguretat, aquesta opció de configuració no està disponible en aquests moments."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Acció no disponible durant les trucades"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Els estafadors solen demanar aquest tipus d\'acció durant les trucades, de manera que s\'ha bloquejat per protegir-te. Si algú que no coneixes t\'indica que facis aquesta acció, pot ser que es tracti d\'una estafa."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"No es permet que les aplicacions instal·lin altres aplicacions durant una trucada."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"No es permet donar a una aplicació accés a l\'accessibilitat durant una trucada."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"No es permet activar aquesta opció de configuració durant una trucada."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"No es pot completar l\'acció durant la trucada"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"A l\'aplicació se li ha denegat l\'accés a <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"L\'aplicació ha demanat accés a un permís sensible, el qual pot posar en risc la teva informació personal o financera.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>És possible que l\'aplicació no funcioni correctament sense aquest permís restringit. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Més informació sobre com pots permetre l\'accés&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"A l\'aplicació se li ha denegat l\'accés per ser <xliff:g id="ROLE_NAME">%1$s</xliff:g> de manera predeterminada"</string>
diff --git a/PermissionController/res/values-cs-v33/strings.xml b/PermissionController/res/values-cs-v33/strings.xml
index 628424d1c..0f17ff2d3 100644
--- a/PermissionController/res/values-cs-v33/strings.xml
+++ b/PermissionController/res/values-cs-v33/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="role_dialer_request_description" msgid="6188305064871543419">"Tato aplikace vám bude moci zasílat oznámení a bude mít přístup k fotoaparátu, kontaktům, mikrofonu, telefonu a SMS"</string>
- <string name="role_sms_request_description" msgid="1506966389698625395">"Tato aplikace vám bude moci zasílat oznámení a bude mít přístup k fotoaparátu, kontaktům, souborům, mikrofonu, telefonu a SMS"</string>
+ <string name="role_sms_request_description" msgid="1506966389698625395">"Tato aplikace vám bude moct zasílat oznámení a bude mít přístup k fotoaparátu, kontaktům, souborům, mikrofonu, telefonu a SMS"</string>
<string name="permission_description_summary_storage" msgid="1917071243213043858">"Aplikace s tímto oprávněním mají přístup ke všem souborům v tomto zařízení"</string>
<string name="work_policy_title" msgid="832967780713677409">"Informace o vašich pracovních zásadách"</string>
<string name="work_policy_summary" msgid="3886113358084963931">"Nastavení spravuje IT administrátor"</string>
diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml
index 582071f3c..fe43a953a 100644
--- a/PermissionController/res/values-cs/strings.xml
+++ b/PermissionController/res/values-cs/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Přístup k <xliff:g id="PERM">%1$s</xliff:g> pro tuto aplikaci v zařízení <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Zobrazit všechna oprávnění aplikace <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Zobrazit všechny aplikace s tímto oprávněním"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informace"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Nastavení"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Zobrazit používání mikrofonu asistentem"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nastavení nepoužívaných aplikací"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Odebrat oprávnění, pokud se aplikace nepoužívá"</string>
@@ -385,7 +383,7 @@
<string name="role_emergency_search_keywords" msgid="1920007722599213358">"v případě nouze"</string>
<string name="role_home_label" msgid="3871847846649769412">"Výchozí aplikace pro domácnost"</string>
<string name="role_home_short_label" msgid="8544733747952272337">"Vstupní aplikace"</string>
- <string name="role_home_description" msgid="7997371519626556675">"Aplikace (tzv. spouštěče), které nahrazují plochu na zařízení Android a dávají vám přístup k obsahu a funkcím zařízení."</string>
+ <string name="role_home_description" msgid="7997371519626556675">"Aplikace (tzv. spouštěče), které nahrazují plochu na zařízení Android a dávají vám přístup k obsahu a funkcím zařízení."</string>
<string name="role_home_request_title" msgid="738136983453341081">"Nastavit <xliff:g id="APP_NAME">%1$s</xliff:g> jako výchozí aplikaci pro domácnost?"</string>
<string name="role_home_request_description" msgid="2658833966716057673">"Není potřeba žádné oprávnění"</string>
<string name="role_home_search_keywords" msgid="3830755001192666285">"spouštěč"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otevírání odkazů"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Výchozí pracovní"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Výchozí pro soukromý prostor"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimalizováno pro zařízení"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Jiné"</string>
<string name="default_app_none" msgid="9084592086808194457">"Žádná aplikace"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Výchozí nastavení systému)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Žádné aplikace"</string>
@@ -454,13 +454,14 @@
<string name="special_app_access_no_apps" msgid="4102911722787886970">"Žádné aplikace"</string>
<string name="home_missing_work_profile_support" msgid="1756855847669387977">"Nepodporuje pracovní profil"</string>
<string name="encryption_unaware_confirmation_message" msgid="8274491794636402484">"Poznámka: Pokud restartujete zařízení a máte nastavený zámek obrazovky, tato aplikace se nespustí, dokud zařízení neodemknete."</string>
- <string name="assistant_confirmation_message" msgid="7476540402884416212">"Asistent bude moci číst informace o aplikacích používaných v systému, včetně údajů viditelných na obrazovce a přístupných v rámci aplikací."</string>
+ <string name="assistant_confirmation_message" msgid="7476540402884416212">"Asistent bude moct číst informace o aplikacích používaných v systému, včetně údajů viditelných na obrazovce a přístupných v rámci aplikací."</string>
<string name="incident_report_channel_name" msgid="3144954065936288440">"Sdílet data ladění"</string>
<string name="incident_report_notification_title" msgid="4635984625656519773">"Sdílet podrobná data pro ladění?"</string>
<string name="incident_report_notification_text" msgid="3376480583513587923">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> chce nahrát informace pro ladění."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Sdílet data ladění?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Systém zjistil problém."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Aplikace <xliff:g id="APP_NAME_0">%1$s</xliff:g> chce nahrát zprávu o chybě tohoto zařízení, která byla pořízena <xliff:g id="DATE">%2$s</xliff:g> v <xliff:g id="TIME">%3$s</xliff:g>. Zprávy o chybě zahrnují osobní údaje o zařízení a údaje z aplikací, např. uživatelská jména, údaje o poloze, identifikátory zařízení a informace o sítích. Zprávy o chybách sdílejte jen s lidmi a aplikacemi, kterým důvěřujete. Chcete aplikaci <xliff:g id="APP_NAME_1">%4$s</xliff:g> povolit nahrát zprávu o chybě?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Při zpracování zprávy o chybě aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> došlo k chybě. Sdílení podrobných údajů o ladění proto bylo zamítnuto. Omlouváme se za přerušení."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Povolit"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Zamítnout"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Povolit omezená nastavení"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Blokované nastavení"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Z důvodu vaší bezpečnosti toto nastavení momentálně není dostupné."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Akce není během telefonního hovoru k dispozici"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n O tento typ akce během hovorů často žádají podvodníci. Kvůli vaší ochraně je proto blokována. Pokud vás k této akci navádí někdo, koho neznáte, může se jednat o podvod."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Během telefonního hovoru nelze aplikacím povolit instalovat další aplikace."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Během telefonního hovoru aplikacím přístup k funkcím pro usnadnění přístup povolit nelze."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Během telefonního hovoru toto nastavení povolit nelze."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Akci nelze dokončit během hovoru"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikaci byl odepřen přístup k oprávnění <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikace požádala o přístup k citlivému oprávnění, které může ohrozit vaše osobní a finanční údaje.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Je možné, že aplikace bez tohoto oprávnění nebude fungovat správně. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Jak povolit přístup&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikaci byla odepřena role výchozí <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml
index c5df3e499..1ab279ad3 100644
--- a/PermissionController/res/values-da/strings.xml
+++ b/PermissionController/res/values-da/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"adgang til <xliff:g id="PERM">%1$s</xliff:g> for denne app på <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Se alle tilladelser for <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Se alle apps med denne tilladelse"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Oplysninger"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Indstillinger"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Vis brug af Assistent-mikrofonen"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ubrugte appindstillinger"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Fjern tilladelser, hvis appen ikke bruges"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Åbning af links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Standard til arbejde"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Standard for privat område"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimeret til enheden"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Andre"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ingen"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Systemstandard)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ingen apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vil gerne uploade fejretningsoplysninger."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vil du dele fejlretningsdata?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Systemet har registreret et problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> anmoder om at uploade en fejlrapport fra denne enhed, som stammer fra <xliff:g id="DATE">%2$s</xliff:g> kl. <xliff:g id="TIME">%3$s</xliff:g>. Fejlrapporter indeholder personlige oplysninger om din enhed, eller som er registreret af apps, f.eks. brugernavne, lokationsdata, enheds-id\'er og netværksoplysninger. Oplysningerne i fejlrapporterne må kun deles med personer og apps, du har tillid til. Vil du give <xliff:g id="APP_NAME_1">%4$s</xliff:g> tilladelse til at uploade en fejlrapport?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Der opstod en fejl i behandlingen af fejlrapporten for <xliff:g id="APP_NAME">%1$s</xliff:g>. Det er derfor ikke muligt at dele detaljerede fejlretningsdata. Vi beklager ulejligheden."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Tillad"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Afvis"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Tillad begrænsede indstillinger"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Begrænset indstilling"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Af hensyn til din sikkerhed er denne indstilling i øjeblikket ikke tilgængelig."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Handlingen er utilgængelig under et telefonopkald"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Svindlere opfordrer ofte til denne type handling under telefonopkald, så den er blokeret for at beskytte dig. Hvis du bliver bedt om at foretage denne handling af en person, du ikke kender, kan det være svindel."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Det er ikke tilladt at give apps tilladelse til at installere andre apps under et telefonopkald."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Det er ikke tilladt at give en app adgang til hjælpefunktioner under et telefonopkald."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Det er ikke tilladt at aktivere denne indstilling under et telefonopkald."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Handlingen kan ikke udføres under opkald"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Appen blev nægtet adgang til <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Appen anmodede om adgang til en følsom tilladelse, der kan kompromittere dine personlige eller økonomiske oplysninger.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Appen fungerer muligvis ikke korrekt uden denne begrænsede tilladelse. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Se, hvordan du giver tilladelse&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Appen blev nægtet adgang til at være <xliff:g id="ROLE_NAME">%1$s</xliff:g> som standard"</string>
diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml
index 886b75834..6a5721579 100644
--- a/PermissionController/res/values-de/strings.xml
+++ b/PermissionController/res/values-de/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g>-Zugriff für diese App auf dem <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Alle Berechtigungen der App „<xliff:g id="APP">%1$s</xliff:g>“ anzeigen"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Alle Apps mit dieser Berechtigung anzeigen"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informationen"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Einstellungen"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Nutzung der Berechtigung \"Mikrofon\" für Assistant anzeigen"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nicht verwendete App-Einstellungen"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Berechtigungen entfernen, wenn die App nicht verwendet wird"</string>
@@ -366,7 +364,7 @@
<string name="role_browser_request_title" msgid="2895200507835937192">"<xliff:g id="APP_NAME">%1$s</xliff:g> als Standard-Browser-App festlegen?"</string>
<string name="role_browser_request_description" msgid="5888803407905985941">"Keine Berechtigungen erforderlich"</string>
<string name="role_dialer_label" msgid="1100224146343237968">"Standard-App zum Telefonieren"</string>
- <string name="role_dialer_short_label" msgid="7186888549465352489">"Telefon"</string>
+ <string name="role_dialer_short_label" msgid="7186888549465352489">"Telefon App"</string>
<string name="role_dialer_description" msgid="8768708633696539612">"Apps, mit denen du dein Gerät zum Telefonieren benutzen kannst"</string>
<string name="role_dialer_request_title" msgid="5959618560705912058">"<xliff:g id="APP_NAME">%1$s</xliff:g> als Standard-App zum Telefonieren festlegen?"</string>
<string name="role_dialer_request_description" msgid="6288839625724909320">"Diese App erhält Zugriff auf Folgendes: Kamera, Kontakte, Mikrofon, Telefon und SMS"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Links öffnen"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Standard-Apps für Arbeit"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Standard-Apps für das vertrauliche Profil"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Für dein Gerät optimiert"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Sonstige"</string>
<string name="default_app_none" msgid="9084592086808194457">"Keine"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System-Standard­einstellung)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Keine Apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> möchte Informationen zur Fehlerbehebung hochladen."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Daten zur Fehlerbehebung teilen?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Das System hat ein Problem erkannt."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> möchte einen Fehlerbericht von diesem Gerät hochladen, der am <xliff:g id="DATE">%2$s</xliff:g> um <xliff:g id="TIME">%3$s</xliff:g> erstellt wurde. Fehlerberichte enthalten Informationen zu deinem Gerät, die du persönlich eingegeben hast oder die von Apps aufgezeichnet werden, z. B. Nutzernamen, Standortdaten, Geräte-IDs und Netzwerk­informationen. Teile Fehlerberichte nur mit Personen und Apps, denen du vertraust. Darf <xliff:g id="APP_NAME_1">%4$s</xliff:g> einen Fehlerbericht hochladen?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Bei der Verarbeitung des Fehlerberichts für <xliff:g id="APP_NAME">%1$s</xliff:g> ist ein Fehler aufgetreten. Die detaillierten Daten zur Fehlerbehebung wurden daher nicht geteilt. Wir entschuldigen uns für die Störung."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Zulassen"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Ablehnen"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Eingeschränkte Einstellungen zulassen"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Eingeschränkte Einstellung"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Aus Sicherheitsgründen ist diese Einstellung derzeit nicht verfügbar."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Aktion während Anrufen nicht verfügbar"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Betrüger versuchen oft, dich am Telefon genau dazu zu bringen, daher haben wir diese Art von Aktion zu deinem Schutz blockiert. Drängt dich jemand Unbekanntes dazu, könnte es sich um Betrug handeln."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Während eines Anrufs kannst du Apps nicht erlauben, andere Apps zu installieren."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Während eines Anrufs kannst du einer App keinen Zugriff auf die Bedienungshilfen gewähren."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Während eines Anrufs kannst du diese Einstellung nicht aktivieren."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Aktion während eines Anrufs nicht möglich"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App wurde Zugriff auf „<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>“ verweigert"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Die App hat Zugriff auf eine vertrauliche Berechtigung angefordert. Wenn du diesen zulässt, sind deine privaten Daten und Finanzdaten eventuell gefährdet.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Die App funktioniert ohne diese eingeschränkte Berechtigung aber möglicherweise nicht richtig. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Informationen dazu, wie du den Zugriff erlaubst&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App wurde der Zugriff verweigert, die standardmäßige <xliff:g id="ROLE_NAME">%1$s</xliff:g> zu sein"</string>
diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml
index 240f7277f..9e0d89fe8 100644
--- a/PermissionController/res/values-el/strings.xml
+++ b/PermissionController/res/values-el/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Πρόσβαση στην άδεια <xliff:g id="PERM">%1$s</xliff:g> για αυτή την εφαρμογή στη συσκευή <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Εμφάνιση όλων των αδειών της εφαρμογής <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Εμφάνιση όλων των εφαρμογών με αυτή την άδεια"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Πληροφορίες"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ρυθμίσεις"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Εμφάνιση χρήσης μικροφώνου βοηθού"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ρυθμίσεις μη χρησιμοποιούμενων εφαρμογών"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Καταργήστε τις άδειες, εάν η εφαρμογή δεν χρησιμοποιείται."</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Άνοιγμα συνδέσμων"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Προεπιλογή για εργασία"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Προεπιλογή για ιδιωτικό χώρο"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Βελτιστοποιημένες για τη συσκευή"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Άλλες"</string>
<string name="default_app_none" msgid="9084592086808194457">"Καμία"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Προεπιλογή συστήματος)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Δεν υπάρχουν εφαρμογές"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> θέλει να ανεβάσει πληροφορίες εντοπισμού σφαλμάτων."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Κοινοπ. δεδομ. εντοπισμού και διόρθωσης σφαλμάτων;"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Το σύστημα εντόπισε ένα πρόβλημα."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Η εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> ζητάει να ανεβάσει μια αναφορά σφαλμάτων από αυτήν τη συσκευή η οποία λήφθηκε στις <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. Οι αναφορές σφαλμάτων περιλαμβάνουν προσωπικά στοιχεία σχετικά με τη συσκευή σας ή στοιχεία που έχουν καταγράψει οι εφαρμογές σας, για παράδειγμα, ονόματα χρηστών, δεδομένα τοποθεσίας, αναγνωριστικά συσκευών και πληροφορίες δικτύου. Να κοινοποιείτε αναφορές σφαλμάτων μόνο σε άτομα και εφαρμογές που θεωρείτε ότι μπορείτε να εμπιστευτείτε με αυτές τις πληροφορίες. Επιτρέπετε στο <xliff:g id="APP_NAME_1">%4$s</xliff:g> να ανεβάσει μια αναφορά σφαλμάτων;"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Παρουσιάστηκε ένα σφάλμα κατά την επεξεργασία της αναφοράς σφάλματος για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>. Γι\' αυτόν τον λόγο, η κοινοποίηση λεπτομερών δεδομένων εντοπισμού και διόρθωσης σφαλμάτων απορρίφθηκε. Λυπούμαστε για τη διακοπή."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Να επιτρέπεται"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Να μην επιτρέπεται"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Επιτρέπονται περιορισμένες ρυθμίσεις"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Περιορισμένη ρύθμιση"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Για την ασφάλειά σας, αυτή η ρύθμιση δεν είναι διαθέσιμη αυτή τη στιγμή."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Δεν διατίθεται κατά τη διάρκεια τηλεφωνικής κλήσης"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Οι απατεώνες συχνά ζητούν να κάνετε τέτοιες ενέργειες κατά τη διάρκεια τηλεφωνικών κλήσεων, επομένως η ενέργεια έχει αποκλειστεί για την προστασία σας. Αν κάποιος που δεν γνωρίζετε σας ζητάει να πραγματοποιήσετε αυτή την ενέργεια, ενδέχεται να πρόκειται για απάτη."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Κατά τη διάρκεια μιας τηλεφωνικής κλήσης, δεν επιτρέπεται η παραχώρηση άδειας σε μια εφαρμογή για εγκατάσταση άλλων εφαρμογών."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Κατά τη διάρκεια μιας τηλεφωνικής κλήσης, δεν επιτρέπεται η παραχώρηση πρόσβασης σε μια εφαρμογή στη λειτουργία προσβασιμότητας."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Κατά τη διάρκεια μιας τηλεφωνικής κλήσης, δεν επιτρέπεται η ενεργοποίηση αυτής της ρύθμισης."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Αδύνατη ολοκλήρωση της ενέργειας κατά την κλήση"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Απορρίφθηκε η πρόσβαση της εφαρμογής στην άδεια <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Η εφαρμογή ζήτησε πρόσβαση σε μια άδεια πρόσβασης σε ευαίσθητες πληροφορίες, γεγονός που μπορεί να θέσει σε κίνδυνο τα προσωπικά και οικονομικά στοιχεία σας.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Είναι πιθανό η εφαρμογή να μην λειτουργεί σωστά χωρίς αυτή την περιορισμένη άδεια. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Μάθετε πώς μπορείτε να επιτρέψετε την πρόσβαση&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Δεν επιτράπηκε στην εφαρμογή να οριστεί ως η προεπιλεγμένη <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-en-rAU/strings.xml b/PermissionController/res/values-en-rAU/strings.xml
index e5e95f4e8..a175ce057 100644
--- a/PermissionController/res/values-en-rAU/strings.xml
+++ b/PermissionController/res/values-en-rAU/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> access for this app on <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"See all <xliff:g id="APP">%1$s</xliff:g> permissions"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"See all apps with this permission"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Information"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Settings"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Show Assistant microphone usage"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Unused app settings"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Opening links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default for work"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default for private space"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimised for device"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Others"</string>
<string name="default_app_none" msgid="9084592086808194457">"None"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System default)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"No apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> would like to upload debugging information."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Share debugging data?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"The system has detected a problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> would like to upload a bug report from this device taken on <xliff:g id="DATE">%2$s</xliff:g> at <xliff:g id="TIME">%3$s</xliff:g>. Bug reports include personal information about your device or data logged by apps, such as user names, location data, device identifiers and network information. Only share bug reports with people and apps that you trust with this information. Allow <xliff:g id="APP_NAME_1">%4$s</xliff:g> to upload a bug report?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"There was an error processing the bug report for <xliff:g id="APP_NAME">%1$s</xliff:g>. So sharing the detailed debugging data has been denied. Sorry for the interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Allow"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Deny"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Allow restricted settings"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Restricted setting"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"For your security, this setting is currently unavailable."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action not available while on a phone call"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammers often request this type of action during phone call conversations, so it\'s blocked to protect you. If you are being guided to take this action by someone whom you don\'t know, it might be a scam."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Allowing apps to install other apps is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Giving an app access to accessibility is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Enabling this setting is not allowed during a phone call."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Can\'t complete action during call"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App was denied access to <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"The app requested access to a sensitive permission which can put your personal and financial info at risk.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>It\'s possible that the app won\'t work properly without this restricted permission. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Learn how to allow access&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App was denied access to be default <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-en-rCA/strings.xml b/PermissionController/res/values-en-rCA/strings.xml
index 8b657acf3..c6f8464a3 100644
--- a/PermissionController/res/values-en-rCA/strings.xml
+++ b/PermissionController/res/values-en-rCA/strings.xml
@@ -440,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Opening links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default for work"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default for private space"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimized for device"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Others"</string>
<string name="default_app_none" msgid="9084592086808194457">"None"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System default)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"No apps"</string>
@@ -458,7 +460,7 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> would like to upload debugging information."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Share debugging data?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"The system has detected a problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="DATE">%2$s</xliff:g> at <xliff:g id="TIME">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information. Allow <xliff:g id="APP_NAME_1">%4$s</xliff:g> to upload a bug report?"</string>
+ <string name="incident_report_dialog_text" msgid="1819244417678973362">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="DATE">%2$s</xliff:g> at <xliff:g id="TIME">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information.\n\nAllow <xliff:g id="APP_NAME_1">%4$s</xliff:g> to upload a bug report?"</string>
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"There was an error processing the bug report for <xliff:g id="APP_NAME">%1$s</xliff:g>. So sharing the detailed debugging data has been denied. Sorry for the interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Allow"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Deny"</string>
@@ -676,11 +678,15 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Allow restricted settings"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Restricted setting"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"For your security, this setting is currently unavailable."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action not available while on a phone call"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammers often request this type of action during phone call conversations, so it’s blocked to protect you. If you are being guided to take this action by someone you don’t know, it might be a scam."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Allowing apps to install other apps is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Giving an app access to accessibility is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Enabling this setting is not allowed during a phone call."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Can’t complete action during call"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="3803423079498712549">"This setting is blocked to protect your device and data.<xliff:g id="SCAM_USE_SETTING_DESCRIPTION">%1$s</xliff:g>"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_install_desc" msgid="6400007048943674066">"<xliff:g id="EMPTY_LINE">
+
+</xliff:g>Scammers may try to install harmful apps by asking you to install unknown apps from a new source."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_a11y_desc" msgid="6567523001053288057">"<xliff:g id="EMPTY_LINE">
+
+</xliff:g>Scammers may try to take control of your device by asking you to allow accessibility access for an app."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App was denied access to <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"The app requested access to a sensitive permission which can put your personal and financial info at risk.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>It\'s possible the app won\'t work properly without this restricted permission. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Learn how to allow access&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App was denied access to be default <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-en-rGB/strings.xml b/PermissionController/res/values-en-rGB/strings.xml
index 242828ffc..dbbafcd93 100644
--- a/PermissionController/res/values-en-rGB/strings.xml
+++ b/PermissionController/res/values-en-rGB/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> access for this app on <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"See all <xliff:g id="APP">%1$s</xliff:g> permissions"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"See all apps with this permission"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Information"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Settings"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Show Assistant microphone usage"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Unused app settings"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Opening links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default for work"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default for private space"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimised for device"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Others"</string>
<string name="default_app_none" msgid="9084592086808194457">"None"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System default)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"No apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> would like to upload debugging information."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Share debugging data?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"The system has detected a problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> would like to upload a bug report from this device taken on <xliff:g id="DATE">%2$s</xliff:g> at <xliff:g id="TIME">%3$s</xliff:g>. Bug reports include personal information about your device or data logged by apps, such as user names, location data, device identifiers and network information. Only share bug reports with people and apps that you trust with this information. Allow <xliff:g id="APP_NAME_1">%4$s</xliff:g> to upload a bug report?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"There was an error processing the bug report for <xliff:g id="APP_NAME">%1$s</xliff:g>. So sharing the detailed debugging data has been denied. Sorry for the interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Allow"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Deny"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Allow restricted settings"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Restricted setting"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"For your security, this setting is currently unavailable."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action not available while on a phone call"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammers often request this type of action during phone call conversations, so it\'s blocked to protect you. If you are being guided to take this action by someone whom you don\'t know, it might be a scam."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Allowing apps to install other apps is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Giving an app access to accessibility is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Enabling this setting is not allowed during a phone call."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Can\'t complete action during call"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App was denied access to <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"The app requested access to a sensitive permission which can put your personal and financial info at risk.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>It\'s possible that the app won\'t work properly without this restricted permission. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Learn how to allow access&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App was denied access to be default <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-en-rIN/strings.xml b/PermissionController/res/values-en-rIN/strings.xml
index 242828ffc..dbbafcd93 100644
--- a/PermissionController/res/values-en-rIN/strings.xml
+++ b/PermissionController/res/values-en-rIN/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> access for this app on <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"See all <xliff:g id="APP">%1$s</xliff:g> permissions"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"See all apps with this permission"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Information"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Settings"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Show Assistant microphone usage"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Unused app settings"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Opening links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default for work"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default for private space"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimised for device"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Others"</string>
<string name="default_app_none" msgid="9084592086808194457">"None"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System default)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"No apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> would like to upload debugging information."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Share debugging data?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"The system has detected a problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> would like to upload a bug report from this device taken on <xliff:g id="DATE">%2$s</xliff:g> at <xliff:g id="TIME">%3$s</xliff:g>. Bug reports include personal information about your device or data logged by apps, such as user names, location data, device identifiers and network information. Only share bug reports with people and apps that you trust with this information. Allow <xliff:g id="APP_NAME_1">%4$s</xliff:g> to upload a bug report?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"There was an error processing the bug report for <xliff:g id="APP_NAME">%1$s</xliff:g>. So sharing the detailed debugging data has been denied. Sorry for the interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Allow"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Deny"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Allow restricted settings"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Restricted setting"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"For your security, this setting is currently unavailable."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action not available while on a phone call"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammers often request this type of action during phone call conversations, so it\'s blocked to protect you. If you are being guided to take this action by someone whom you don\'t know, it might be a scam."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Allowing apps to install other apps is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Giving an app access to accessibility is not allowed during a phone call."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Enabling this setting is not allowed during a phone call."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Can\'t complete action during call"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App was denied access to <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"The app requested access to a sensitive permission which can put your personal and financial info at risk.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>It\'s possible that the app won\'t work properly without this restricted permission. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Learn how to allow access&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App was denied access to be default <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml
index 6acc5a959..edc0efb1b 100644
--- a/PermissionController/res/values-es-rUS/strings.xml
+++ b/PermissionController/res/values-es-rUS/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acceso a <xliff:g id="PERM">%1$s</xliff:g> para esta app en <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todos los permisos de <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ver todas las apps que tienen este permiso"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Información"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Configuración"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar el uso del micrófono del Asistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Configuración de apps sin usar"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Quitar los permisos si la app no se usa"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Abrir vínculos"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predeterminadas de trabajo"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Configuración predeterminada del espacio privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizadas para el dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Otros"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ninguna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Predeterminada del sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Sin apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere subir información de depuración."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"¿Deseas compartir datos de depuración?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"El sistema detectó un problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> solicita subir un informe de errores de este dispositivo generado el <xliff:g id="DATE">%2$s</xliff:g> a las <xliff:g id="TIME">%3$s</xliff:g>. Los informes de errores pueden incluir información personal sobre tu dispositivo o registrada por apps, como nombres de usuario, datos de ubicación, identificadores del dispositivo y datos de red. Solo debes compartir los informes de errores con personas y apps de confianza. ¿Permitir que <xliff:g id="APP_NAME_1">%4$s</xliff:g> suba un informe de errores?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Se produjo un error al procesar el informe de errores para <xliff:g id="APP_NAME">%1$s</xliff:g>. Por lo tanto, no es posible compartir los datos detallados de depuración. Lamentamos la interrupción."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Rechazar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir configuración restringida"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Parámetro restringido"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Por seguridad, este parámetro de configuración no está disponible actualmente."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"La acción no está disponible durante una llamada telefónica"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Esta es una medida de protección contra estafadores que puedan solicitar este tipo de acciones durante conversaciones telefónicas. Si alguien que no conoces te indica que realices esta acción, es posible que se trate de una estafa."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"No se permite que las apps instalen otras apps durante una llamada telefónica."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"No se permite que una app acceda a los servicios de accesibilidad durante una llamada telefónica."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"No se puede habilitar este parámetro de configuración durante una llamada telefónica."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"No se puede completar la acción durante la llamada"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"A la app se le negó el acceso a <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"La app solicitó acceso a un permiso sensible, lo que puede poner en riesgo tu información financiera y personal.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Es posible que la app no funcione como corresponde sin este permiso restringido. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Descubre cómo permitir el acceso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"A la app se le negó el acceso para usarse como <xliff:g id="ROLE_NAME">%1$s</xliff:g> de forma predeterminada"</string>
diff --git a/PermissionController/res/values-es-v33/strings.xml b/PermissionController/res/values-es-v33/strings.xml
index 251059388..fec5ccaee 100644
--- a/PermissionController/res/values-es-v33/strings.xml
+++ b/PermissionController/res/values-es-v33/strings.xml
@@ -33,7 +33,7 @@
<string name="safety_center_more_issues_card_collapse_action" msgid="7485597582198474637">"Ocultar"</string>
<string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string>
<string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"Acción completada"</string>
- <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Comprueba los ajustes que pueden proteger más tu dispositivo"</string>
+ <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Comprueba los ajustes que pueden ofrecer una mayor protección a tu dispositivo"</string>
<string name="safety_center_qs_page_landing" msgid="1717368301679228128">"Ajustes rápidos de seguridad y privacidad"</string>
<string name="safety_center_qs_close_button" msgid="1352313308176244599">"Cerrar"</string>
<string name="safety_center_qs_expand_action" msgid="2193190557696484169">"Desplegar y mostrar opciones"</string>
diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml
index 05b24e718..4855ae95a 100644
--- a/PermissionController/res/values-es/strings.xml
+++ b/PermissionController/res/values-es/strings.xml
@@ -195,17 +195,15 @@
<string name="app_permission_button_allow_limited_access" msgid="8824410215149764113">"Permitir acceso limitado"</string>
<string name="precise_image_description" msgid="6349638632303619872">"Ubicación precisa"</string>
<string name="approximate_image_description" msgid="938803699637069884">"Ubicación aproximada"</string>
- <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Usar ubic. precisa"</string>
+ <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Ubicación precisa"</string>
<string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"Cuando la ubicación precisa está desactivada, las aplicaciones pueden consultar tu ubicación aproximada"</string>
<string name="app_permission_title" msgid="2090897901051370711">"Permiso de <xliff:g id="PERM">%1$s</xliff:g>"</string>
<string name="app_permission_header" msgid="2951363137032603806">"Acceso a <xliff:g id="PERM">%1$s</xliff:g> para esta aplicación"</string>
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acceso de <xliff:g id="PERM">%1$s</xliff:g> a esta aplicación en <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todos los permisos de <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ver todas las aplicaciones con este permiso"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Información"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ajustes"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar el uso del micrófono del Asistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ajustes de aplicaciones sin usar"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Quitar permisos si la aplicación no se usa"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Abrir enlaces"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predeterminadas para trabajo"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Predeterminadas para el espacio privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizadas para el dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Otras"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ninguna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Predeterminado del sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"No hay aplicaciones"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere subir información de depuración."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"¿Quieres compartir datos de depuración?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"El sistema ha detectado un problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> solicita subir el informe de errores de este dispositivo generado el <xliff:g id="DATE">%2$s</xliff:g> a las <xliff:g id="TIME">%3$s</xliff:g>. Los informes de errores incluyen información personal sobre el dispositivo o datos registrados por las aplicaciones, como nombres de usuario, datos de ubicación, identificadores del dispositivo e información de red. Comparte estos informes únicamente con personas y aplicaciones de confianza. ¿Permitir que <xliff:g id="APP_NAME_1">%4$s</xliff:g> suba un informe de errores?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"No se ha podido procesar el informe de errores de <xliff:g id="APP_NAME">%1$s</xliff:g>, por lo que no se han podido compartir los datos de depuración detallados. Sentimos las molestias."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Denegar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir ajustes restringidos"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ajuste restringido"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Por seguridad, este ajuste no está disponible actualmente."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Acción no disponible durante una llamada"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Los estafadores suelen solicitar este tipo de acciones durante las conversaciones telefónicas, por lo que esta acción se bloquea para protegerte. Si alguien que no conoces te indica que debes realizar esta acción, podría tratarse de una estafa."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"No es posible permitir que las aplicaciones instalen otras aplicaciones durante una llamada telefónica."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"No se puede dar acceso a los servicios de accesibilidad a una aplicación durante una llamada."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"No se puede habilitar este ajuste durante una llamada telefónica."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"No se puede completar la acción durante la llamada"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Se ha denegado el acceso a <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> a la aplicación"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"La aplicación ha solicitado acceso a un permiso sensible que puede poner en riesgo tu información personal y financiera.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Es posible que la aplicación no funcione correctamente sin este permiso restringido. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Consulta cómo permitir el acceso&lt;/a&gt;."</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Se ha denegado el acceso para que la aplicación sea <xliff:g id="ROLE_NAME">%1$s</xliff:g> predeterminada"</string>
diff --git a/PermissionController/res/values-et/strings.xml b/PermissionController/res/values-et/strings.xml
index 55c147f99..33555dfef 100644
--- a/PermissionController/res/values-et/strings.xml
+++ b/PermissionController/res/values-et/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> juurdepääs sellele rakendusele seadmes <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Kuva rakenduse <xliff:g id="APP">%1$s</xliff:g> kõik load"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Kuva kõik selle loaga rakendused"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Teave"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Seaded"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Kuva assistendi mikrofoni kasutamine"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Kasutamata rakenduse seaded"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Eemalda load, kui rakendust ei kasutata"</string>
@@ -304,7 +302,7 @@
<string name="accessibility_remove_access_button_label" msgid="44145801526711640">"Eemalda juurdepääs"</string>
<string name="accessibility_show_all_apps_button_label" msgid="960067249326392280">"Kuva täieliku juurdepääsuga rakendused"</string>
<string name="accessibility_remove_access_success_label" msgid="4380995302917014670">"Juurdepääs eemaldati"</string>
- <string name="safety_center_notification_app_label" msgid="2457720616141926534">"Android-süsteem"</string>
+ <string name="safety_center_notification_app_label" msgid="2457720616141926534">"Androidi süsteem"</string>
<string name="auto_revoke_after_notification_title" msgid="5417761027669887431">"Rakenduse load eemaldati privaatsuse kaitsmiseks"</string>
<string name="auto_revoke_after_notification_content_one" msgid="6804038707453662753">"Rakendust <xliff:g id="APP_NAME">%s</xliff:g> ei ole mõne kuu jooksul kasutatud. Puudutage ülevaatamiseks."</string>
<string name="auto_revoke_after_notification_content_two" msgid="9108709764831425172">"Rakendust <xliff:g id="APP_NAME">%s</xliff:g> ja veel 1 rakendust ei ole mõne kuu jooksul kasutatud. Puudutage ülevaatamiseks."</string>
@@ -365,8 +363,7 @@
<string name="role_browser_description" msgid="3465253637499842671">"Rakendused, mis võimaldavad juurdepääsu internetile ja kuvavad puudutatavaid linke"</string>
<string name="role_browser_request_title" msgid="2895200507835937192">"Kas määrata rakendus <xliff:g id="APP_NAME">%1$s</xliff:g> vaikebrauseriks?"</string>
<string name="role_browser_request_description" msgid="5888803407905985941">"Lube ei ole vaja"</string>
- <!-- no translation found for role_dialer_label (1100224146343237968) -->
- <skip />
+ <string name="role_dialer_label" msgid="1100224146343237968">"Telefoni vaikerakendus"</string>
<string name="role_dialer_short_label" msgid="7186888549465352489">"Telefonirakendus"</string>
<string name="role_dialer_description" msgid="8768708633696539612">"Rakendused, mis võimaldavad teil seadmes telefonikõnesid teha ja vastu võtta"</string>
<string name="role_dialer_request_title" msgid="5959618560705912058">"Kas soovite määrata rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> telefoni vaikerakenduseks?"</string>
@@ -443,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Linkide avamine"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Vaikerakendused töö jaoks"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Privaatse ruumi vaikerakendused"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Seadme jaoks optimeeritud"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Muud"</string>
<string name="default_app_none" msgid="9084592086808194457">"Puudub"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Süsteemi vaikeseade)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Rakendusi pole"</string>
@@ -461,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> soovib üles laadida silumisteavet."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Kas soovite silumisandmeid jagada?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Süsteem tuvastas probleemi."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> palub luba sellest seadmest veaaruande üleslaadimiseks (jäädvustati <xliff:g id="DATE">%2$s</xliff:g> kell <xliff:g id="TIME">%3$s</xliff:g>). Veaaruanded hõlmavad teie seadmega seotud isiklikke andmeid või rakenduste logitud isiklikke andmeid (nt kasutajanimesid, asukohaandmeid, seadme ID-sid ja võrguteavet). Jagage veaaruandeid ainult inimeste ja rakendustega, keda/mida usaldate. Kas lubada rakendusel <xliff:g id="APP_NAME_1">%4$s</xliff:g> veaaruanne üles laadida?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> veaaruande töötlemisel ilmnes viga. Seetõttu keelati üksikasjalike silumisandmete jagamine. Vabandage katkestuse pärast!"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Luba"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Keela"</string>
@@ -679,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Piiratud seadete lubamine"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Piiratud seade"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Teie turvalisuse huvides pole see seade praegu saadaval."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Toiming pole telefonikõne ajal saadaval"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Petised taotlevad telefonivestluse ajal sageli seda tüüpi toimingut, mistõttu on see teie kaitsmiseks blokeeritud. Kui keegi, keda te ei tea, suunab teid seda toimingut tegema, võib tegu olla pettusega."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefonikõne ajal pole lubatud anda rakendustele luba installida teisi rakendusi."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefonikõne ajal rakendusele juurdepääsu andmine juurdepääsetavusfunktsioonidele ei ole lubatud."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Selle seade lubamine telefonikõne ajal ei ole lubatud."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Seda toimingut ei saa kõne ajal teha"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Rakendusele ei antud luba <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Rakendus taotles tundlikku luba, mis võib teie isikuandmed ja finantsteabe ohtu seada.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Võimalik, et rakendus ei tööta ilma selle piiratud loata korralikult. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt; Teave juurdepääsu andmise kohta&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Rakendusele ei antud luba olla vaikimisi <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml
index a89ff9025..6f64c70e8 100644
--- a/PermissionController/res/values-eu/strings.xml
+++ b/PermissionController/res/values-eu/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> erabiltzeko baimena aplikazio honetarako <xliff:g id="DEVICE_NAME">%2$s</xliff:g> gailuan"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ikusi <xliff:g id="APP">%1$s</xliff:g> aplikazioaren baimen guztiak"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ikusi baimen hau duten aplikazio guztiak"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informazioa"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ezarpenak"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Erakutsi laguntzaileak mikrofonoa erabiltzeko duen baimena"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Erabili gabeko aplikazioen ezarpenak"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Kendu baimenak aplikazioa erabiltzen ez bada"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Irekiko diren estekak"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Lanerako aplikazio lehenetsiak"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Eremu pribatuko aplikazio lehenetsiak"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Gailurako optimizatuta"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Beste batzuk"</string>
<string name="default_app_none" msgid="9084592086808194457">"Bat ere ez"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(sistemaren aplikazio lehenetsia)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ez dago aplikaziorik"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak arazketa-informazioa kargatu nahi du."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Arazketa-datuak partekatu nahi dituzu?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Arazo bat hauteman du sistemak."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="DATE">%2$s</xliff:g> (<xliff:g id="TIME">%3$s</xliff:g>) datan sortutako akatsen txostena kargatzeko baimena eskatzen ari da <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Akatsen txostenek zure gailuari buruzkoa den edo aplikazioek erregistratu duten informazio pertsonala dute; adibidez, erabiltzaile-izenak, kokapenari buruzko datuak, gailu-identifikatzaileak eta sareari buruzko informazioa. Informazio hori izateko fidagarriak iruditzen zaizkizun pertsona eta aplikazioekin soilik partekatu beharko zenituzke akatsen txostenak. <xliff:g id="APP_NAME_1">%4$s</xliff:g> aplikazioari akatsen txostena kargatzeko baimena eman nahi diozu?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Errore bat gertatu da <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren akatsen txostena prozesatzean; beraz, ezin izan dira partekatu arazketa-datu xehatuak. Barkatu eragozpenak."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Eman baimena"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Ukatu"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Eman ezarpen mugatuak erabiltzeko baimena"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Murriztapenak ditu ezarpenak"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Zure segurtasuna bermatzeko, ezarpena ez dago erabilgarri une honetan."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Ekintza hori ez dago erabilgarri telefono-deietan"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Iruzurgileek halako ekintzak egiteko eskatu ohi dute telefono bidezko elkarrizketetan; beraz, aukera hori blokeatu dugu zu babesteko. Ezagutzen ez duzun norbaitek halako zerbait egiteko esaten badizu, baliteke azpikeria izatea."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefono-dei batean zaudenean ezin diezu eman beste aplikazio batzuk instalatzeko baimena aplikazioei."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefono-deiak egin bitartean ezin zaio eman erabilerraztasuna erabiltzeko baimena inongo aplikaziori."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Telefono-dei batean zaudenean ezin da gaitu ezarpen hau."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Ezin da osatu ekintza deia abian den bitartean"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikazioari <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> erabiltzeko baimena ukatu zaio"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Kontuzko informazioa erabiltzeko baimen bat eskatu du aplikazioak, eta agian horrek arriskuan jarriko ditu zure informazio pertsonala eta finantzei buruzko informazioa.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Baliteke aplikazioak behar bezala ez funtzionatzea baimen murriztu hori gabe. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Lortu baimena emateko argibideak&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikazioari <xliff:g id="ROLE_NAME">%1$s</xliff:g> lehenetsia izateko baimena ukatu zaio"</string>
diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml
index 9da73c13f..7029fe546 100644
--- a/PermissionController/res/values-fa/strings.xml
+++ b/PermissionController/res/values-fa/strings.xml
@@ -200,12 +200,10 @@
<string name="app_permission_title" msgid="2090897901051370711">"اجازه <xliff:g id="PERM">%1$s</xliff:g>"</string>
<string name="app_permission_header" msgid="2951363137032603806">"دسترسی <xliff:g id="PERM">%1$s</xliff:g> برای این برنامه"</string>
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"دسترسی <xliff:g id="PERM">%1$s</xliff:g> از این برنامه در <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
- <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"مشاهده همه اجازه‌های <xliff:g id="APP">%1$s</xliff:g>"</string>
+ <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"دیدن همه اجازه‌های <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"دیدن همه برنامه‌هایی که این مجوز را دارند"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"اطلاعات"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"تنظیمات"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"نمایش میزان استفاده «دستیار» از میکروفون"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"تنظیمات برنامه‌های استفاده‌نشده"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"اگر از برنامه استفاده نمی‌شود، اجازه‌ها برداشته شوند"</string>
@@ -277,7 +275,7 @@
<string name="unused_apps_notification_content" msgid="9195026773244581246">"اجازه‌ها و فایل‌های موقت حذف شده‌اند و اعلان‌ها متوقف شده‌اند. برای مرور، تک‌ضرب بزنید."</string>
<string name="unused_apps_safety_center_card_title" msgid="5638409355530099149">"مرور برنامه‌هایی که اجازه‌های آن‌ها برداشته شده است"</string>
<string name="unused_apps_safety_center_card_content" msgid="1088557243627427820">"اجازه‌ها و فایل‌های موقت مربوط به برنامه‌هایی که مدتی از آن‌ها استفاده نکرده‌اید برداشته شدند و اعلان‌ها متوقف شدند."</string>
- <string name="unused_apps_safety_center_action_title" msgid="8865914432518993194">"مرور برنامه‌ها"</string>
+ <string name="unused_apps_safety_center_action_title" msgid="8865914432518993194">"بازبینی برنامه‌ها"</string>
<string name="post_drive_permission_decision_reminder_title" msgid="1290697371418139976">"بررسی اجازه‌های اخیر"</string>
<string name="post_drive_permission_decision_reminder_summary_1_app_1_permission" msgid="670521503734140711">"درحین رانندگی، به <xliff:g id="APP">%1$s</xliff:g> اجازه دسترسی به <xliff:g id="PERMISSION">%2$s</xliff:g> را دادید"</string>
<string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"درحین رانندگی، به <xliff:g id="APP">%1$s</xliff:g> اجازه دسترسی به <xliff:g id="PERMISSION_1">%2$s</xliff:g> و <xliff:g id="PERMISSION_2">%3$s</xliff:g> را دادید"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"باز کردن پیوندها"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"پیش‌فرض برای کار"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"برنامه‌های پیش‌فرض برای فضای خصوصی"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"بهینه‌سازی‌شده برای دستگاه"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"موارد دیگر"</string>
<string name="default_app_none" msgid="9084592086808194457">"هیچ‌کدام"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(پیش‌فرض سیستم)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"برنامه‌ای موجود نیست"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> می‌خواهد اطلاعات اشکال‌زدایی را بارگذاری کند."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"داده‌های اشکال‌زدایی هم‌رسانی شود؟"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"سیستم مشکلی را تشخیص داده است."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> درخواست بارگذاری گزارش اشکالی را دارد که در <xliff:g id="DATE">%2$s</xliff:g> ساعت <xliff:g id="TIME">%3$s</xliff:g> در این دستگاه پیش آمده است. گزارش‌های اشکال شامل اطلاعات شخصی درباره دستگاه شما است یا اطلاعاتی که توسط برنامه‌ها گزارش شده است، برای مثال نام‌های کاربر، داده‌های مکان، شناسه‌های دستگاه و اطلاعات شبکه. گزارش‌های اشکال را تنها با افراد و برنامه‌هایی هم‌رسانی کنید که به آن‌ها در این‌باره اعتماد دارید. به <xliff:g id="APP_NAME_1">%4$s</xliff:g> اجازه بارگذاری گزارش اشکال داده شود؟"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"هنگام پردازش گزارش اشکال برای <xliff:g id="APP_NAME">%1$s</xliff:g> خطایی رخ داد. بنابراین هم‌رسانی داده‌های اشکال‌زدایی دقیق رد شد. از وقفه پیش‌آمده پوزش می‌طلبیم."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"اجازه دادن"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"مجاز نبودن"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"مجاز کردن تنظیمات محدودشده"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"تنظیم محدودشده"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"برای حفظ امنیت شما، درحال‌حاضر این تنظیم دردسترس نیست."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"اقدام درطول تماس تلفنی دردسترس نیست"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n افراد کلاهبردار اغلب این نوع اقدامات را درطول مکالمه‌های تلفنی درخواست می‌کنند، بنابراین این کار برای محافظت از شما مسدود شده است. اگر شخص ناآشنایی شما را ترغیب به انجام این اقدام می‌کند، ممکن است موضوع کلاهبرداری باشد."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"درطول تماس تلفنی، اجازه دادن به برنامه‌ها برای نصب برنامه‌های دیگر مجاز نیست."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"درطول تماس تلفنی، ارائه دسترسی به دسترس‌پذیری به برنامه مجاز نیست."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"درطول تماس تلفنی، فعال کردن این تنظیمات مجاز نیست."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"این کنش درطول تماس تکمیل نمی‌شود"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"درخواست برنامه برای دسترسی به <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> رد شد"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"‏این برنامه درخواست دسترسی به اجازه‌ای حساس را داشته است که می‌تواند اطلاعات شخصی و مالی‌تان را درمعرض خطر قرار دهد.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ممکن است برنامه بدون این اجازه محدودشده به‌درستی کار نکند. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;با نحوه اعطای دسترسی آشنا شوید&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"درخواست دسترسی برنامه برای تبدیل شدن به <xliff:g id="ROLE_NAME">%1$s</xliff:g> پیش‌فرض رد شد"</string>
diff --git a/PermissionController/res/values-fi-v33/strings.xml b/PermissionController/res/values-fi-v33/strings.xml
index 5cb118ed8..edb8737b3 100644
--- a/PermissionController/res/values-fi-v33/strings.xml
+++ b/PermissionController/res/values-fi-v33/strings.xml
@@ -16,8 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="role_dialer_request_description" msgid="6188305064871543419">"Sovellus saa luvan lähettää sinulle ilmoituksia ja pääsyn kameraan, yhteystietoihin, mikrofoniin, puhelimeen ja tekstiviesteihin"</string>
- <string name="role_sms_request_description" msgid="1506966389698625395">"Sovellus saa luvan lähettää sinulle ilmoituksia ja pääsyn kameraan, yhteystietoihin, tiedostoihin, mikrofoniin, puhelimeen ja tekstiviesteihin"</string>
+ <string name="role_dialer_request_description" msgid="6188305064871543419">"Sovellus saa luvan lähettää sinulle ilmoituksia ja se saa pääsyn kameraan, yhteystietoihin, mikrofoniin, puhelimeen ja tekstiviesteihin"</string>
+ <string name="role_sms_request_description" msgid="1506966389698625395">"Sovellus saa luvan lähettää sinulle ilmoituksia ja se saa pääsyn kameraan, yhteystietoihin, tiedostoihin, mikrofoniin, puhelimeen ja tekstiviesteihin"</string>
<string name="permission_description_summary_storage" msgid="1917071243213043858">"Sovellukset, joilla on tämä lupa, saavat pääsyn kaikkiin laitteen tiedostoihin"</string>
<string name="work_policy_title" msgid="832967780713677409">"Työkäytäntötietosi"</string>
<string name="work_policy_summary" msgid="3886113358084963931">"IT-järjestelmänvalvojan ylläpitämät asetukset"</string>
diff --git a/PermissionController/res/values-fi/strings.xml b/PermissionController/res/values-fi/strings.xml
index b1c827b58..8fb150888 100644
--- a/PermissionController/res/values-fi/strings.xml
+++ b/PermissionController/res/values-fi/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Tällä sovelluksella on pääsy (<xliff:g id="PERM">%1$s</xliff:g>) laitteella <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Näytä kaikki luvat, jotka <xliff:g id="APP">%1$s</xliff:g> on saanut"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Näytä kaikki sovellukset, joilla on tämä lupa"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Tiedot"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Asetukset"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Näytä Assistantin mikrofonin käyttö"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Käyttämättömien sovellusten asetukset"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Poista luvat, jos sovellusta ei käytetä"</string>
@@ -414,7 +412,7 @@
<string name="role_wallet_label" msgid="3719419175656204207">"Oletuslompakkosovellus"</string>
<string name="role_wallet_short_label" msgid="6521288403762457452">"Lompakkosovellus"</string>
<string name="role_wallet_description" msgid="3726535836165949838">"Lompakkosovelluksista on apua erilaisissa tilanteissa, koska niihin voi tallentaa esimerkiksi credit- ja kanta-asiakaskortit ja autonavaimet"</string>
- <string name="role_wallet_request_title" msgid="4770217108262737093">"Valitaanko <xliff:g id="APP_NAME">%1$s</xliff:g> oletuslompakkosovelluksesi?"</string>
+ <string name="role_wallet_request_title" msgid="4770217108262737093">"Asetetaanko <xliff:g id="APP_NAME">%1$s</xliff:g> oletuslompakkosovelluksesi?"</string>
<string name="role_wallet_request_description" msgid="6305487425777483053">"Lupia ei tarvita"</string>
<string name="request_role_current_default" msgid="738722892438247184">"Nykyinen oletus"</string>
<string name="request_role_dont_ask_again" msgid="3556017886029520306">"Älä kysy uudelleen"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Linkkien avaaminen"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Työkäytön oletus"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Oletus yksityiselle tilalle"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimoitu laitteelle"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Muut"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ei mitään"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Järjestelmän oletusarvo)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ei sovelluksia"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> haluaa ladata virheenkorjaustietoja palvelimelle."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Jaetaanko virheenkorjausdataa?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Järjestelmä on havainnut ongelman."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pyytää saada ladata laitteelta virheraportin, joka luotiin <xliff:g id="DATE">%2$s</xliff:g> kello <xliff:g id="TIME">%3$s</xliff:g>. Virheraportit sisältävät yksityisiä laitetietoja ja sovellusten kirjaamia tietoja, esimerkiksi käyttäjänimiä, sijaintitietoja, laitteen tunnistetietoja ja verkkotietoja. Jaa virheraportteja vain ihmisille ja sovelluksille, joiden tietojen käsittelyyn luotat. Saako <xliff:g id="APP_NAME_1">%4$s</xliff:g> lähettää virheraportin?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Virheraportin (<xliff:g id="APP_NAME">%1$s</xliff:g>) käsittelyssä tapahtui virhe. Yksityiskohtaisen virheenkorjausdatan jakaminen on siis estetty. Pahoittelut keskeytyksestä."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Salli"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Estä"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Salli rajoitetut asetukset"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Rajoitettu asetus"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Asetus ei ole tällä hetkellä käytettävissä turvallisuussyistä."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Toiminto ei ole käytettävissä puhelun aikana"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Huijarit pyytävät usein tätä puhelun aikana, joten se on estetty suojataksesi sinua. Jos joku, jota et tunne, kehottaa sinua toimimaan näin, kyseessä voi olla huijaus."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Sovellusten ei sallita asentaa muita sovelluksia puhelun aikana."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Sovelluksen pääsyä saavutettavuusominaisuuksiin ei sallita puhelun aikana."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Asetusta ei voi ottaa käyttöön puhelun aikana."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Toimintoa ei voi suorittaa puhelun aikana"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Sovellukselta on evätty pääsy: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Sovellus on pyytänyt pääsyä arkaluontoiseen lupaan, joka voi vaarantaa henkilökohtaisia tietojasi ja taloustietojasi.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Sovellus ei välttämättä toimi oikein ilman tätä rajoitettua lupaa. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Lue, miten voit sallia pääsyn&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Sovellus ei saa olla oletuksena <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml
index d48c8da8c..c21d68958 100644
--- a/PermissionController/res/values-fr-rCA/strings.xml
+++ b/PermissionController/res/values-fr-rCA/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Accès <xliff:g id="PERM">%1$s</xliff:g> pour cette appli sur <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Afficher toutes les autorisations pour <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Afficher toutes les applis qui possèdent cette autorisation"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Renseignements"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Paramètres"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Afficher l\'usage du microphone de l\'assistant"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Paramètres des applis inutilisées"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Retirer les autorisations si l\'appli est inutilisée"</string>
@@ -361,11 +359,11 @@
<string name="role_assistant_short_label" msgid="3369003713187703399">"Appli d\'assistant numérique"</string>
<string name="role_assistant_description" msgid="6622458130459922952">"Les applis d\'assistance peuvent vous aider en fonction de l\'information affichée à l\'écran. Certaines applis sont compatibles à la fois avec le lanceur d\'applis et les services d\'entrée vocale, vous permettant de bénéficier d\'une assistance intégrée."</string>
<string name="role_browser_label" msgid="2877796144554070207">"Appli de navigation par défaut"</string>
- <string name="role_browser_short_label" msgid="6745009127123292296">"Appli de navigateur"</string>
+ <string name="role_browser_short_label" msgid="6745009127123292296">"Appli de navigation"</string>
<string name="role_browser_description" msgid="3465253637499842671">"Applis qui vous donnent accès à Internet et qui affichent des liens que vous pouvez toucher"</string>
<string name="role_browser_request_title" msgid="2895200507835937192">"Définir <xliff:g id="APP_NAME">%1$s</xliff:g> comme appli par défaut pour la navigation?"</string>
<string name="role_browser_request_description" msgid="5888803407905985941">"Aucune autorisation nécessaire"</string>
- <string name="role_dialer_label" msgid="1100224146343237968">"Appli de téléphone par défaut"</string>
+ <string name="role_dialer_label" msgid="1100224146343237968">"Appli Téléphone par défaut"</string>
<string name="role_dialer_short_label" msgid="7186888549465352489">"Appli Téléphone"</string>
<string name="role_dialer_description" msgid="8768708633696539612">"Applis qui vous permettent de faire et de recevoir des appels téléphoniques sur votre appareil"</string>
<string name="role_dialer_request_title" msgid="5959618560705912058">"Définir <xliff:g id="APP_NAME">%1$s</xliff:g> comme appli de téléphonie par défaut?"</string>
@@ -384,8 +382,8 @@
<string name="role_emergency_request_description" msgid="131645948770262850">"Aucune autorisation nécessaire"</string>
<string name="role_emergency_search_keywords" msgid="1920007722599213358">"En cas d\'urgence"</string>
<string name="role_home_label" msgid="3871847846649769412">"Appli d\'accueil par défaut"</string>
- <string name="role_home_short_label" msgid="8544733747952272337">"Appli sur l\'écran d\'accueil"</string>
- <string name="role_home_description" msgid="7997371519626556675">"Applis qui remplacent les écrans d\'accueil sur votre appareil Android et qui vous donnent accès au contenu et aux fonctionnalités de votre appareil"</string>
+ <string name="role_home_short_label" msgid="8544733747952272337">"Appli d\'accueil"</string>
+ <string name="role_home_description" msgid="7997371519626556675">"Applis, aussi appelées lanceurs d\'applis, qui remplacent les écrans d\'accueil sur votre appareil Android et qui vous donnent accès au contenu et aux fonctionnalités de votre appareil"</string>
<string name="role_home_request_title" msgid="738136983453341081">"Définir <xliff:g id="APP_NAME">%1$s</xliff:g> comme appli d\'écran d\'accueil par défaut?"</string>
<string name="role_home_request_description" msgid="2658833966716057673">"Aucune autorisation nécessaire"</string>
<string name="role_home_search_keywords" msgid="3830755001192666285">"lanceur d\'applis"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Ouverture des liens"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Par défaut pour util. profess."</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Applis par défaut pour l\'Espace privé"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimisée pour l\'appareil"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Autres"</string>
<string name="default_app_none" msgid="9084592086808194457">"Aucune"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Paramètre(s) système par défaut)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Aucune appli"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> souhaite téléverser des données de débogage."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Partager les données de débogage?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Le système a détecté un problème."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"L\'appli <xliff:g id="APP_NAME_0">%1$s</xliff:g> souhaite téléverser un rapport de bogue créé le <xliff:g id="DATE">%2$s</xliff:g> à <xliff:g id="TIME">%3$s</xliff:g> sur cet appareil. Les rapports de bogue contiennent des données personnelles relatives à votre appareil ou enregistrées par des applis, comme des noms d\'utilisateur, des données de localisation, des identifiants d\'appareils et des renseignements relatifs au réseau. Ne partagez les rapports de bogue qu\'avec des personnes et des applis que vous jugez fiables. Autoriser l\'appli <xliff:g id="APP_NAME_1">%4$s</xliff:g> à téléverser un rapport de bogue?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Une erreur s\'est produite lors du traitement du rapport de bogue pour <xliff:g id="APP_NAME">%1$s</xliff:g>, alors le partage des données de débogage détaillées a été refusé. Nous sommes désolés de l\'interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Autoriser"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Refuser"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Autoriser les paramètres restreints"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Paramètre restreint"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Pour protéger votre sécurité, ce paramètre n\'est pas accessible actuellement."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action non proposée lors d\'un appel téléphonique"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Les escrocs demandent souvent ce type d\'action lors de conversations téléphoniques, alors ces actions sont bloquées pour vous protéger. Si quelqu\'un que vous ne connaissez pas vous guide dans cette démarche, il pourrait s\'agir d\'une escroquerie."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Autoriser les applis à installer d\'autres applis n\'est pas permis lors d\'un appel téléphonique."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Donner à une appli l\'accès au service d\'accessibilité n\'est pas permis lors d\'un appel téléphonique."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"L\'activation de ce paramètre n\'est pas permise lors d\'un appel téléphonique."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Impossible d\'effectuer l\'action pendant un appel"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"L\'appli n\'a pas obtenu l\'accès à <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"L\'appli a demandé l\'accès à une autorisation sensible qui pose un risque pour vos renseignements personnels et financiers.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Il est possible que l\'appli ne fonctionne pas correctement sans cette autorisation limitée. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Découvrir comment autoriser l\'accès&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"L\'appli n\'a pas obtenu l\'accès pour avoir le rôle<xliff:g id="ROLE_NAME">%1$s</xliff:g> par défaut"</string>
diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml
index b0e7e27de..94f3989b3 100644
--- a/PermissionController/res/values-fr/strings.xml
+++ b/PermissionController/res/values-fr/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Accès à <xliff:g id="PERM">%1$s</xliff:g> pour cette application sur <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Voir toutes les autorisations pour <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Voir toutes les applis ayant cette autorisation"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informations"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Paramètres"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Afficher l\'utilisation du micro par l\'Assistant"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Paramètres des applis inutilisées"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Supprimer les autorisations si l\'application n\'est pas utilisée"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Ouverture des liens"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Par défaut pour utilisation pro"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Paramètres par défaut d\'Espace privé"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimisées pour l\'appareil"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Autres"</string>
<string name="default_app_none" msgid="9084592086808194457">"Aucune"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Application système par défaut)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Aucune application"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"L\'application <xliff:g id="APP_NAME">%1$s</xliff:g> souhaite transférer des informations de débogage."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Partager les données de débogage ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Le système a détecté un problème."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"L\'application <xliff:g id="APP_NAME_0">%1$s</xliff:g> souhaite transférer un rapport de bug créé le <xliff:g id="DATE">%2$s</xliff:g> à <xliff:g id="TIME">%3$s</xliff:g> depuis cet appareil. Les rapports de bug contiennent des informations personnelles relatives à votre appareil ou enregistrées par des applications, telles que des noms d\'utilisateur, des données de localisation, des identifiants d\'appareils et des informations relatives au réseau. Ne partagez les rapports de bug qu\'avec des personnes et des applications que vous estimez fiables. Autoriser l\'application <xliff:g id="APP_NAME_1">%4$s</xliff:g> à transférer un rapport de bug ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Une erreur s\'est produite lors du traitement du rapport de bug pour <xliff:g id="APP_NAME">%1$s</xliff:g>. Le partage des informations détaillées de débogage a donc été refusé. Veuillez nous excuser pour cette interruption."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Autoriser"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Refuser"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Autoriser les paramètres restreints"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Paramètre restreint"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Pour votre sécurité, ce paramètre est actuellement indisponible."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Action non disponible lors d\'un appel téléphonique"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Les escrocs demandent souvent d\'effectuer ce type d\'action lors d\'appels téléphoniques. Cette action est donc bloquée pour vous protéger. Si quelqu\'un que vous ne connaissez pas vous demande d\'effectuer cette action, il s\'agit peut-être d\'une escroquerie."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Vous ne pouvez pas autoriser des applis à installer d\'autres applis pendant un appel téléphonique."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Vous ne pouvez pas autoriser une appli à accéder aux fonctionnalités d\'accessibilité pendant un appel téléphonique."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Vous ne pouvez pas activer ce paramètre pendant un appel téléphonique."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Action impossible pendant un appel"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"L\'appli s\'est vu refuser l\'accès à <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Cette appli a demandé l\'accès à une autorisation sensible susceptible d\'exposer vos informations financières et personnelles à un risque.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Si elle ne dispose pas d\'un accès à cette autorisation restreinte, l\'appli peut ne pas fonctionner correctement. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Découvrez comment autoriser l\'accès&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"L\'appli s\'est vu refuser l\'accès au statut de <xliff:g id="ROLE_NAME">%1$s</xliff:g> par défaut"</string>
diff --git a/PermissionController/res/values-gl/strings.xml b/PermissionController/res/values-gl/strings.xml
index 2c2f159c4..8bf1079e7 100644
--- a/PermissionController/res/values-gl/strings.xml
+++ b/PermissionController/res/values-gl/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Esta aplicación ten o seguinte permiso de acceso en <xliff:g id="DEVICE_NAME">%2$s</xliff:g>: <xliff:g id="PERM">%1$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todos os permisos de <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ver todas as aplicacións que teñen este permiso"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Información"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Configuración"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar uso do micrófono do Asistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Configuración das aplicacións sen uso"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Quitar permisos se non se usa a aplicación"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Apertura de ligazóns"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predeterminadas para o traballo"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Aplicacións predeterminadas do espazo privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizadas para o dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Outras"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ningunha"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Opción predeterminada do sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Non hai ningunha aplicación"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> quere cargar información de depuración."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Queres compartir os datos de depuración?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"O sistema detectou un problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"A aplicación <xliff:g id="APP_NAME_0">%1$s</xliff:g> quere subir un informe de erros deste dispositivo, xerado o <xliff:g id="DATE">%2$s</xliff:g> (<xliff:g id="TIME">%3$s</xliff:g>). Os informes de erros inclúen información persoal sobre o dispositivo ou datos rexistrados polas aplicacións, como os nomes de usuario, os datos de localización, os identificadores do dispositivo e a información da rede. Comparte estes informes unicamente con persoas e aplicacións de confianza. Queres permitir que a aplicación <xliff:g id="APP_NAME_1">%4$s</xliff:g> cargue un informe de erros?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Houbo un erro ao procesar o informe de erros da aplicación <xliff:g id="APP_NAME">%1$s</xliff:g>, polo cal se denegou o uso compartido dos datos de depuración detallados. Lamentamos a interrupción."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Denegar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir opcións restrinxidas"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Opción de configuración restrinxida"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Pola túa seguranza, esta opción de configuración non está dispoñible nestes momentos."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Acción non dispoñible nas chamadas telefónicas"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Como os estafadores adoitan solicitar este tipo de accións durante as chamadas telefónicas, bloqueámola para protexerte. Se alguén pretende que realices esta acción, é posible que sexa unha estafa."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Non está permitido que as aplicacións instalen outras aplicacións durante as chamadas telefónicas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Non está permitido que as aplicacións accedan ao servizo de accesibilidade durante as chamadas telefónicas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Non está permitido activar esta opción de configuración durante as chamadas telefónicas."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Non se pode completar a acción durante as chamadas"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Denegóuselle á aplicación o acceso ao permiso: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"A aplicación solicitou acceso a un permiso confidencial que pode poñer en perigo a túa información persoal e financeira.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>É posible que a aplicación non funcione correctamente sen este permiso restrinxido. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Máis información sobre como permitir o acceso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Denegóuselle á aplicación o acceso para actuar como <xliff:g id="ROLE_NAME">%1$s</xliff:g> de forma predeterminada"</string>
diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml
index 53a0d39f7..d61c1c39e 100644
--- a/PermissionController/res/values-gu/strings.xml
+++ b/PermissionController/res/values-gu/strings.xml
@@ -64,7 +64,7 @@
<string name="unused_apps" msgid="2058057455175955094">"ન વપરાયેલી ઍપ"</string>
<string name="edit_photos_description" msgid="5540108003480078892">"આ ઍપ માટે પસંદ કરેલા ફોટામાં ફેરફાર કરો"</string>
<string name="no_unused_apps" msgid="12809387670415295">"કોઈ બિનવપરાયેલી ઍપ નથી"</string>
- <string name="zero_unused_apps" msgid="9024448554157499748">"બિનવપરાયેલી 0 ઍપ"</string>
+ <string name="zero_unused_apps" msgid="9024448554157499748">"0 બિનવપરાયેલી ઍપ"</string>
<string name="review_permission_decisions" msgid="309559429150613632">"પરવાનગી સંબંધિત નિર્ણયો"</string>
<string name="review_permission_decisions_view_all" msgid="90391040431566130">"તાજેતરની પરવાનગી સંબંધિત બધા નિર્ણયો જુઓ"</string>
<string name="review_permission_decisions_empty" msgid="8120775336417279806">"તાજેતરની પરવાનગી સંબંધિત કોઈ નિર્ણય નથી"</string>
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> પર આ ઍપ માટે <xliff:g id="PERM">%1$s</xliff:g>નો ઍક્સેસ"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g>ની બધી પરવાનગીઓ જુઓ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"આ પરવાનગી સાથે બધી ઍપ જુઓ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"માહિતી"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"સેટિંગ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"આસિસ્ટંટ દ્વારા વપરાયેલો માઇક્રોફોનની પરવાનગીનો ડેટા બતાવો"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ન વપરાયેલી ઍપના સેટિંગ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ઍપ ઉપયોગમાં ન હોવા પર પરવાનગીઓ કાઢી નાખો"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"લિંક ખોલવી"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"કાર્ય માટે ડિફૉલ્ટ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ખાનગી સ્પેસ માટે ડિફૉલ્ટ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ડિવાઇસ માટે ઑપ્ટિમાઇઝ કરેલી છે"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"અન્ય"</string>
<string name="default_app_none" msgid="9084592086808194457">"કોઈ નહીં"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(સિસ્ટમ ડિફૉલ્ટ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"કોઈ ઍપ નથી"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>, ડિબગીંગ માહિતી અપલોડ કરવા માગે છે"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"શું ડિબગીંગનો ડેટા શેર કરવો છે?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"સિસ્ટમને સમસ્યા મળી છે."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> આ ડિવાઇસથી <xliff:g id="DATE">%2$s</xliff:g>ના રોજ <xliff:g id="TIME">%3$s</xliff:g> વાગ્યે લેવામાં આવેલ બગ રિપોર્ટ અપલોડ કરવાની મંજૂરી માગી રહી છે. બગ રિપોર્ટમાં તમારા ડિવાઇસ વિશે અથવા ઍપ દ્વારા લૉગ કરવામાં આવેલી વ્યક્તિગત માહિતી શામેલ હોય છે, જેમ કે વપરાશકર્તાનું નામ, સ્થાન ડેટા, ડિવાઇસ ઓળખકર્તા અને નેટવર્કની માહિતી. બગ રિપોર્ટને માત્ર તેવા જ લોકો અને ઍપ સાથે શેર કરો કે જેની પર તમે માહિતી બાબતે વિશ્વાસ કરો છો. <xliff:g id="APP_NAME_1">%4$s</xliff:g>ને બગ રિપોર્ટ અપલોડ કરવાની મંજૂરી આપીએ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે ખામીની જાણકારીના રિપોર્ટ પર પ્રક્રિયા કરવામાં ભૂલ આવી હતી. તેથી ડિબગીંગના વિગતવાર ડેટાને શેર કરવાની વિનંતી નકારવામાં આવી છે. વિક્ષેપ બદલ માફ કરશો."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"મંજૂરી આપો"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"નકારો"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"પ્રતિબંધિત સેટિંગને મંજૂરી આપો"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"પ્રતિબંધિત સેટિંગ"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"તમારી સુરક્ષા માટે, આ સેટિંગ હાલમાં ઉપલબ્ધ નથી."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ફોન કૉલ પર હોવા દરમિયાન આ ક્રિયા ઉપલબ્ધ હોતી નથી"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n સ્કૅમર દ્વારા ફોન કૉલ પરની વાતચીતો દરમિયાન આ પ્રકારની ક્રિયાની વિનંતી સામાન્ય રીતે કરવામાં આવતી હોય છે, તેથી તમારી સુરક્ષા માટે આને બ્લૉક કરવામાં આવે છે. જો કોઈ અજાણી વ્યક્તિ દ્વારા આ ક્રિયા કરવા માટે તમને માર્ગદર્શન આપવામાં આવતું હોય, તો આ સ્કૅમ હોઈ શકે છે."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ફોન કૉલ દરમિયાન, ઍપને બીજી ઍપ ઇન્સ્ટૉલ કરવાની મંજૂરી આપવામાં આવતી નથી."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ફોન કૉલ દરમિયાન કોઈ ઍપને ઍક્સેસિબિલિટીનો ઍક્સેસ આપવાની મંજૂરી આપવામાં આવતી નથી."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ફોન કૉલ દરમિયાન આ સેટિંગ ચાલુ કરવાની મંજૂરી આપવામાં આવતી નથી."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"કૉલ દરમિયાન ક્રિયા પૂર્ણ કરી શકાતી નથી"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"ઍપને <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>નો ઍક્સેસ નકારવામાં આવ્યો"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"આ ઍપ દ્વારા કોઈ સંવેદનશીલ માહિતીની પરવાનગીના ઍક્સેસની વિનંતી કરવામાં આવી છે, જેને કારણે તમારી વ્યક્તિગત અને નાણાકીય માહિતી જોખમમાં આવી શકે છે.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>એ પણ શક્ય છે કે આ પ્રતિબંધિત પરવાનગી વિના ઍપ કદાચ યોગ્ય રીતે કામ ન પણ કરી શકે. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ઍક્સેસ મંજૂર કરવાની રીત જાણો&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ઍપને ડિફૉલ્ટ <xliff:g id="ROLE_NAME">%1$s</xliff:g> બનવાનો ઍક્સેસ નકારવામાં આવ્યો"</string>
diff --git a/PermissionController/res/values-hi-v33/strings.xml b/PermissionController/res/values-hi-v33/strings.xml
index 701dd64f9..ef727a060 100644
--- a/PermissionController/res/values-hi-v33/strings.xml
+++ b/PermissionController/res/values-hi-v33/strings.xml
@@ -41,7 +41,7 @@
<string name="safety_center_qs_privacy_control" msgid="1160682635058529673">"स्विच करें. <xliff:g id="PRIVACY_CONTROL_TITLE">%1$s</xliff:g>. <xliff:g id="PRIVACY_CONTROL_STATUS">%2$s</xliff:g>"</string>
<string name="safety_center_qs_toggle_action" msgid="5920465736488119255">"टॉगल करें"</string>
<string name="safety_center_qs_open_action" msgid="2760200829912423728">"खोलें"</string>
- <string name="safety_center_review_settings_button" msgid="938981137942443930">"सेटिंग की समीक्षा करें"</string>
+ <string name="safety_center_review_settings_button" msgid="938981137942443930">"सेटिंग देखें"</string>
<string name="safety_center_gear_label" msgid="5175877094379694098">"सेटिंग"</string>
<string name="safety_center_info_label" msgid="8993181584061825412">"जानकारी"</string>
</resources>
diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml
index 55fec2550..7570bf06d 100644
--- a/PermissionController/res/values-hi/strings.xml
+++ b/PermissionController/res/values-hi/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> पर इस ऐप्लिकेशन के लिए <xliff:g id="PERM">%1$s</xliff:g> का ऐक्सेस"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> को मिली सभी अनुमतियां देखें"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"इस अनुमति वाले सभी ऐप्लिकेशन देखें"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"जानकारी"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"सेटिंग"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"असिस्टेंट माइक्रोफ़ोन के इस्तेमाल से जुड़ा डेटा दिखाएं"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"इस्तेमाल न हो रहे ऐप के लिए सेटिंग"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ऐप्लिकेशन का इस्तेमाल न होने पर अनुमतियां हटाएं"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"खुलने वाले लिंक"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"काम के लिए डिफ़ॉल्ट"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"प्राइवेट स्पेस के लिए डिफ़ॉल्ट ऐप्लिकेशन"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"डिवाइस के लिए ऑप्टिमाइज़ किया गया"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"अन्य"</string>
<string name="default_app_none" msgid="9084592086808194457">"कोई नहीं"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(सिस्टम डिफ़ॉल्ट)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"कोई ऐप्लिकेशन नहीं"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> डीबग करने की जानकारी अपलोड करना चाहता है."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"डीबग करने से जुड़ा डेटा शेयर करना चाहते हैं?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"सिस्टम को किसी समस्या का पता चला है."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> इस डिवाइस से <xliff:g id="DATE">%2$s</xliff:g> को <xliff:g id="TIME">%3$s</xliff:g> बजे ली गई गड़बड़ी की रिपोर्ट अपलोड करने की मंज़ूरी मांग रहा है. गड़बड़ी की रिपोर्ट में आपके डिवाइस के बारे में या ऐप्लिकेशन की ओर से लॉग की गई निजी जानकारी शामिल होती है, जैसे कि उपयोगकर्ता नाम, जगह की जानकारी का डेटा, डिवाइस पहचानकर्ता, और नेटवर्क की जानकारी. गड़बड़ी की रिपोर्ट सिर्फ़ उन लोगों और ऐप्लिकेशन के साथ शेयर करें जिन पर आप इस जानकारी को लेकर भरोसा करते हैं. क्या आप <xliff:g id="APP_NAME_1">%4$s</xliff:g> को गड़बड़ी की रिपोर्ट अपलोड करने देना चाहते हैं?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए गड़बड़ी की रिपोर्ट तैयार करने में दिक्कत हुई. इसलिए, डीबग करने के बारे में ज़्यादा जानकारी का डेटा शेयर नहींं किया जा सका. रुकावट के लिए खेद है."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"अनुमति दें"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"अनुमति न दें"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"पाबंदी वाली सेटिंग को अनुमति दें"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"इस सेटिंग पर पाबंदी लगाई गई है"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"आपकी सुरक्षा के लिए, यह सेटिंग फ़िलहाल उपलब्ध नहीं है."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"फ़ोन कॉल के दौरान, कार्रवाई नहीं की जा सकती"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n फ़ोन कॉल पर बातचीत करते समय, धोखाधड़ी करने वाले लोग अक्सर इस तरह की कार्रवाई करने का अनुरोध करते हैं. इसलिए, आपको सुरक्षित रखने के लिए यह अनुमति नहीं दी जाती है. अगर कोई अनज़ान व्यक्ति, आपको यह कार्रवाई करने के निर्देश देता है, तो हो सकता है कि आपके साथ धोखाधड़ी की कोशिश की जा रही हो."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"फ़ोन कॉल के दौरान, ऐप्लिकेशन को अन्य ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"फ़ोन कॉल के दौरान, किसी ऐप्लिकेशन को सुलभता सेवा का ऐक्सेस देने की अनुमति नहीं है."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"फ़ोन कॉल के दौरान, इस सेटिंग को चालू करने की अनुमति नहीं है."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"कॉल के दौरान कार्रवाई पूरी नहीं की जा सकती"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"ऐप्लिकेशन को, <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> को ऐक्सेस करने की अनुमति नहीं मिली"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"इस ऐप्लिकेशन ने संवेदनशील जानकारी ऐक्सेस करने का अनुरोध किया है. इसे अनुमति देने पर, आपकी निजी और वित्तीय जानकारी की सुरक्षा को खतरा हो सकता है.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>हालांकि, हो सकता है कि पाबंदी वाली अनुमति न मिलने पर, ऐप्लिकेशन सही तरह से काम न करें. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ऐक्सेस देने का तरीका जानें&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ऐप्लिकेशन को डिफ़ॉल्ट <xliff:g id="ROLE_NAME">%1$s</xliff:g> के तौर पर सेट करने की अनुमति नहीं दी गई"</string>
diff --git a/PermissionController/res/values-hr/strings.xml b/PermissionController/res/values-hr/strings.xml
index ca2a0c4c8..97ce2feea 100644
--- a/PermissionController/res/values-hr/strings.xml
+++ b/PermissionController/res/values-hr/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Pristup značajke <xliff:g id="PERM">%1$s</xliff:g> za ovu aplikaciju na uređaju <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Pogledajte sva dopuštenja aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Pogledajte sve aplikacije s tim dopuštenjem"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacije"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Postavke"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Prikaz korištenja mikrofona Asistenta"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Postavke nekorištenih aplikacija"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni dopuštenja ako se aplikacija ne upotrebljava"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otvaranje veza"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Zadano za posao"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Zadano za privatni prostor"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizirano za uređaj"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Ostalo"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nijedna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Zadana postavka sustava)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nema aplikacija"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi prenijeti informacije o otklanjanju pogrešaka."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Dijeli podatke o otklanjanju pogrešaka?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem je otkrio problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> zahtijeva prijenos izvješća o programskim pogreškama s ovog uređaja od <xliff:g id="DATE">%2$s</xliff:g> u <xliff:g id="TIME">%3$s</xliff:g>. Izvješća o programskim pogreškama sadržavaju osobne podatke o uređaju ili one koje su zabilježile aplikacije, kao što su korisnička imena, podaci o lokaciji, identifikatori uređaja i podaci o mreži. Izvješća o programskim pogreškama dijelite samo s osobama i aplikacijama koje smatrate pouzdanim. Želite li dopustiti aplikaciji <xliff:g id="APP_NAME_1">%4$s</xliff:g> prijenos izvješća o programskim pogreškama?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Došlo je do pogreške pri obradi izvješća o programskoj pogrešci za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>. Stoga je odbijeno dijeljenje detaljnih podataka o otklanjanju pogrešaka. Ispričavamo se zbog prekida."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Dopusti"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Odbij"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Dopusti ograničene postavke"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ograničena postavka"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Radi vaše sigurnosti ova postavka trenutačno nije dostupna."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Radnja nije dostupna tijekom telefonskog poziva"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Prevaranti često zahtijevaju tu vrstu radnje tijekom telefonskih razgovora, pa je ona blokirana radi vaše zaštite. Ako vas netko koga ne poznajete navodi na tu radnju, možda je riječ o prijevari."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Aplikacijama nije dopušteno instalirati druge aplikacije tijekom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Omogućivanje pristupa usluzi pristupačnosti za aplikaciju nije dopušteno tijekom telefonskog poziva."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Omogućivanje te postavke nije dopušteno tijekom telefonskog poziva."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Radnja se ne može dovršiti tijekom poziva"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikaciji je odbijen pristup dopuštenju <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacija je zatražila pristup dopuštenju za osjetljive podatke koje može ugroziti vaše osobne i financijske podatke.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Moguće je da aplikacija neće pravilno funkcionirati bez tog uskraćenog dopuštenja. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Saznajte kako omogućiti pristup&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikaciji je uskraćeno da bude zadana <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-hu-v33/strings.xml b/PermissionController/res/values-hu-v33/strings.xml
index 2ab18af60..ede269016 100644
--- a/PermissionController/res/values-hu-v33/strings.xml
+++ b/PermissionController/res/values-hu-v33/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="role_dialer_request_description" msgid="6188305064871543419">"Az alkalmazás engedélyt kap értesítések küldésére, és hozzáférhet majd a következőkhöz: Kamera, Névjegyek, Mikrofon, Telefon és SMS."</string>
- <string name="role_sms_request_description" msgid="1506966389698625395">"Az alkalmazás engedélyt kap értesítések küldésére, és hozzáférhet majd a következőkhöz: Kamera, Címtár, Files, Mikrofon, Telefon és SMS."</string>
+ <string name="role_sms_request_description" msgid="1506966389698625395">"Az alkalmazás engedélyt kap értesítések küldésére, és hozzáférhet majd a következőkhöz: Kamera, Névjegyek, Fájlok, Mikrofon, Telefon és SMS."</string>
<string name="permission_description_summary_storage" msgid="1917071243213043858">"Az ezzel az engedéllyel rendelkező alkalmazások hozzáférhetnek az ezen az eszközön lévő összes fájlhoz"</string>
<string name="work_policy_title" msgid="832967780713677409">"Munkahelyi házirendekkel kapcsolatos adatok"</string>
<string name="work_policy_summary" msgid="3886113358084963931">"A rendszergazda által kezelt beállítások"</string>
diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml
index 52467905e..0f9a9314b 100644
--- a/PermissionController/res/values-hu/strings.xml
+++ b/PermissionController/res/values-hu/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> – hozzáférés az alkalmazás számára a(z) <xliff:g id="DEVICE_NAME">%2$s</xliff:g> eszközön"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"A(z) <xliff:g id="APP">%1$s</xliff:g> összes engedélyének megtekintése"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Az ezzel az engedéllyel rendelkező összes alkalmazás megtekintése"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Információ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Beállítások"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mikrofon Segéd általi használatának megjelenítése"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nem használt alkalmazások beállításai"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Engedélyek eltávolítása, ha nem használja az alkalmazást"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Linkek megnyitása"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Munkahelyi alapértelmezett"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Alapértelmezett a magánterületnél"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Az eszközre optimalizálva"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Egyéb"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nincs"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Alapértelmezett)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nincs alkalmazás"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> hibakeresési adatokat szeretne feltölteni."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Megosztja a hibakeresési adatokat?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"A rendszer problémát észlelt."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"A(z) <xliff:g id="APP_NAME_0">%1$s</xliff:g> hibajelentést szeretne feltölteni az eszközről (a jelentés létrehozásának időpontja: <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>). A hibajelentések eszközre vonatkozó vagy alkalmazások által rögzített személyes adatokat tartalmazhatnak, például felhasználóneveket, helyadatokat, eszközazonosítókat és hálózati adatokat. Csak megbízható személyekkel és alkalmazásokkal osszon meg hibajelentéseket. Engedélyezi, hogy a(z) <xliff:g id="APP_NAME_1">%4$s</xliff:g> hibajelentést töltsön fel?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Hiba történt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás hibajelentésének feldolgozásakor, ezért a rendszer megtagadta a részletes hibaelhárítási adatok megosztását. Elnézést a megszakításért."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Engedélyezés"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Elutasítás"</string>
@@ -495,7 +496,7 @@
<string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"Hozzávetőleges"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára, hogy hozzáférjen a naptárhoz?"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára, hogy hozzáférjen a naptárához ezen az eszközön: &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>’s&lt;/b&gt;?"</string>
- <string name="permgrouprequest_sms" msgid="5672063688745420991">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára, hogy SMS-eket küldhessen és tekinthessen meg?"</string>
+ <string name="permgrouprequest_sms" msgid="5672063688745420991">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára SMS-ek küldését és megtekintését?"</string>
<string name="permgrouprequest_device_aware_sms" msgid="6639977653040502291">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára az SMS-ek küldését és megtekintését ezen az eszközön: &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequest_storage" msgid="8717773092518621602">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára, hogy hozzáférjen az eszközön tárolt fotókhoz, médiatartalmakhoz és fájlokhoz?"</string>
<string name="permgrouprequest_device_aware_storage" msgid="6933251810928606636">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára, hogy fotókhoz, médiatartalmakhoz és fájlokhoz férjen hozzá ezen az eszközön: &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Korlátozott beállítások engedélyezése"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Korlátozott beállítás"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Biztonsága érdekében ez a beállítás jelenleg nem használható."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"A művelet nem végezhető el telefonhívás közben"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n A csalók gyakran kérik ilyen jellegű műveletek végrehajtását a telefonhívások során, ezért a rendszer az Ön védelme érdekében letiltja ezt a lehetőséget. Ha valaki, akit nem ismer, arra kéri, hogy végezze el ezt a műveletet, előfordulhat, hogy csalárd szándékkal teszi."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefonhívás közben nem lehet engedélyezni, hogy alkalmazások más alkalmazásokat telepítsenek."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefonhívás közben nem lehet hozzáférést adni az alkalmazásoknak a kisegítő lehetőségekhez."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"A beállítás engedélyezése nem lehetséges telefonhívás közben."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"A művelet nem végezhető el hívás közben"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Az app nem kapott hozzáférést a következőhöz: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Az alkalmazás hozzáférési engedélyt kért a bizalmas adatokhoz, ami veszélybe sodorhatja az Ön személyes és pénzügyi adatait.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Lehetséges, hogy az alkalmazás nem működik megfelelően enélkül a korlátozott engedély nélkül. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;További információ a hozzáférés megadásának módjáról.&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Az app nem kapott hozzáférést a következőhöz: alapértelmezett <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-hy/strings.xml b/PermissionController/res/values-hy/strings.xml
index ac6aa8fe0..427677236 100644
--- a/PermissionController/res/values-hy/strings.xml
+++ b/PermissionController/res/values-hy/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g>ն օգտագործելու թույլտվություն այս հավելվածի համար <xliff:g id="DEVICE_NAME">%2$s</xliff:g> սարքում"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Տեսնել «<xliff:g id="APP">%1$s</xliff:g>» հավելվածի բոլոր թույլտվությունները"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Դիտել այս թույլտվությունն ունեցող հավելվածների ցանկը"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Տեղեկություններ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Կարգավորումներ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Ցույց տալ օգնականի կողմից խոսափողի օգտագործման վիճակագրությունը"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Չօգտագործվող հավելվածների կարգավորումներ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Հեռացնել թույլտվությունները, եթե հավելվածը չի օգտագործվում"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Հղումների բացում"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Կանխադրված՝ աշխատանքի համար"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Կանխադրված հավելվածներ մասնավոր տարածքի համար"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Սարքի համար օպտիմալացված"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Այլ"</string>
<string name="default_app_none" msgid="9084592086808194457">"Չկա"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Համակարգի կանխադրված հավելված)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Հավելվածներ չկան"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ն ուզում է վերբեռնել վրիպազերծման տվյալները:"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Ուղարկե՞լ վրիպազերծման տվյալները"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Համակարգը խնդիր է հայտնաբերել"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>-ը թույլտվություն է խնդրում՝ <xliff:g id="DATE">%2$s</xliff:g>, ժամը <xliff:g id="TIME">%3$s</xliff:g> ստեղծված վրիպակների հաշվետվությունն այս սարքից վերբեռնելու համար: Վրիպակների հաշվետվությունները ներառում են տվյալներ ձեր սարքի մասին կամ անձնական տվյալներ, որոնք գրանցվել են հավելվածների կողմից, օրինակ՝ օգտատերերի անուններ, տեղադրության մասին տվյալներ, սարքերի ID-ներ և ցանցի մասին տեղեկություններ: Վրիպակների հաշվետվություններով կիսվեք միայն այն մարդկանց ու հավելվածների հետ, որոնց կարող եք վստահել այս տեղեկությունները: Թույլատրե՞լ <xliff:g id="APP_NAME_1">%4$s</xliff:g>-ին վերբեռնել վրիպակների հաշվետվությունը:"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Չհաջողվեց մշակել <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածում սխալի մասին տեղեկությունները։ Վրիպազերծման տվյալների ուղարկումը չեղարկվել է։ Հայցում ենք ձեր ներողամտությունը պատճառած անհարմարության համար:"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Թույլատրել"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Մերժել"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Թույլատրել սահմանափակ ռեժիմի կարգավորումները"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Սահմանափակումներով կարգավորում"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Անվտանգության նկատառումներից ելնելով՝ այս կարգավորումը ներկայումս անհասանելի է։"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Գործողությունը հասանելի չէ հեռախոսազանգի ժամանակ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Խաբեբաները սովորաբար ցանկանում են այս տեսակի գործողություններն անել հեռախոսային զրույցների ժամանակ, ուստի դա արգելափակված է՝ ձեր անվտանգության նկատառումներից ելնելով։ Եթե որևէ անծանոթ մարդ ձեզանից խնդրել է նմանատիպ թույլտվություն, ամենայն հավանականությամբ դա խարդախություն է։"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Հեռախոսազանգի ժամանակ չի թույլատրվում թույլատրել հավելվածներին տեղադրել այլ հավելվածներ։"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Հեռախոսազանգի ժամանակ չի թույլատրվում հատուկ գործառույթները հասանելի դարձնել որևէ հավելվածի։"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Հեռախոսազանգի ժամանակ չի թույլատրվում միացնել այս կարգավորումը։"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Զանգի ընթացքում հնարավոր չէ կատարել գործողությունը"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Հավելվածին մերժվել է <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>ի օգտագործման թույլտվությունը"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Հավելվածը հայցել է կոնֆիդենցիալ տեղեկությունների օգտագործման թույլտվություն, որը կարող է վտանգի ենթարկել ձեր անձնական և ֆինանսական տեղեկությունները։<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Հնարավոր է, որ առանց այս սահմանափակված թույլտվության՝ հավելվածը չաշխատի պատշաճ կերպով։ &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Ինչպես տրամադրել տվյալների օգտագործման թույլտվություն&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Հավելվածին մերժվել է «<xliff:g id="ROLE_NAME">%1$s</xliff:g>» կատեգորիայում կանխադրված լինելու թույլտվությունը"</string>
diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml
index 33cbc2103..cc8c02135 100644
--- a/PermissionController/res/values-in/strings.xml
+++ b/PermissionController/res/values-in/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Akses <xliff:g id="PERM">%1$s</xliff:g> untuk aplikasi ini di <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Lihat semua izin <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Lihat semua aplikasi yang memiliki izin ini"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informasi"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Setelan"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Tampilkan penggunaan mikrofon Asisten"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Setelan aplikasi yang tidak digunakan"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Hapus izin jika aplikasi tidak digunakan"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Membuka link"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default untuk kerja"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default untuk ruang privasi"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Dioptimalkan untuk perangkat"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Lainnya"</string>
<string name="default_app_none" msgid="9084592086808194457">"Tidak ada"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Default sistem)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Tidak ada aplikasi"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ingin mengupload informasi proses debug."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Bagikan data proses debug?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem mendeteksi adanya masalah."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> meminta untuk mengupload laporan bug dari perangkat ini yang diambil pada <xliff:g id="DATE">%2$s</xliff:g> pukul <xliff:g id="TIME">%3$s</xliff:g>. Laporan bug mencakup informasi pribadi tentang perangkat Anda atau yang dicatat dalam log oleh aplikasi, misalnya, nama pengguna, data lokasi, ID perangkat, dan informasi jaringan. Bagikan laporan bug hanya kepada orang dan aplikasi yang Anda percayai dengan informasi ini. Izinkan <xliff:g id="APP_NAME_1">%4$s</xliff:g> mengupload laporan bug?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Terjadi error saat memproses laporan bug untuk <xliff:g id="APP_NAME">%1$s</xliff:g>. Jadi, tindakan membagikan detail data proses debug telah ditolak. Mohon maaf atas gangguan ini."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Izinkan"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Tolak"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Izinkan setelan terbatas"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Setelan terbatas"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Demi keamanan Anda, setelan ini tidak tersedia untuk saat ini."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Tindakan tidak tersedia selama panggilan telepon"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammer sering meminta jenis tindakan ini selama percakapan panggilan telepon, jadi tindakan ini diblokir untuk melindungi Anda. Jika Anda diarahkan untuk melakukan tindakan ini oleh seseorang yang tidak Anda kenal, hal tersebut mungkin merupakan scam."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Mengizinkan aplikasi menginstal aplikasi lain tidak diizinkan selama panggilan telepon berlangsung."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Memberikan akses aksesibilitas ke aplikasi tidak diizinkan selama panggilan telepon."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Mengaktifkan setelan ini tidak diizinkan selama panggilan telepon berlangsung."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Tidak bisa selesaikan tindakan selama panggilan"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikasi ditolak aksesnya ke <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikasi meminta akses ke izin sensitif yang dapat membahayakan info pribadi dan keuangan Anda.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Aplikasi mungkin tidak dapat berfungsi dengan baik tanpa izin terbatas ini. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&amp;gtPelajari cara mengizinkan akses&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikasi ditolak aksesnya untuk menjadi <xliff:g id="ROLE_NAME">%1$s</xliff:g> default"</string>
diff --git a/PermissionController/res/values-is/strings.xml b/PermissionController/res/values-is/strings.xml
index b997d55d8..82a8493c5 100644
--- a/PermissionController/res/values-is/strings.xml
+++ b/PermissionController/res/values-is/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Aðgangur að <xliff:g id="PERM">%1$s</xliff:g> fyrir þetta forrit í <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Sjá allar heimildir fyrir „<xliff:g id="APP">%1$s</xliff:g>“"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Sjá öll forrit með þessa heimild"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Upplýsingar"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Stillingar"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Sýna hljóðnemanotkun hjálpara"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ónotaðar forritastillingar"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Fjarlægja heimildir ef forrit er ekki notað"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Opnun tengla"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Sjálfgefið fyrir vinnu"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Sjálfgefið fyrir leynirými"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Fínstillt fyrir tæki"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Annað"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ekkert"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sjálfgildi kerfis)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Engin forrit"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vill hlaða inn upplýsingum um villuleit."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Viltu deila villuleitargögnum?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Kerfið greindi vandamál."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> biður um að hlaða inn villutilkynningu úr þessu tæki frá <xliff:g id="DATE">%2$s</xliff:g> kl. <xliff:g id="TIME">%3$s</xliff:g>. Villutilkynningar innihalda persónuupplýsingar um tækið eða upplýsingar sem forrit skrá, til dæmis notendanöfn, staðsetningargögn, auðkenni tækis og upplýsingar um netkerfi. Deildu aðeins villutilkynningum með fólki og forritum sem þú treystir fyrir þessum upplýsingum. Leyfa <xliff:g id="APP_NAME_1">%4$s</xliff:g> að hlaða inn villutilkynningu?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Villa kom upp við vinnslu villuskýrslu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g> og því er ekki hægt að deila ítarlegum villuleitargögnum. Afsakaðu truflunina."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Leyfa"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Hafna"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Leyfa takmarkaðar stillingar"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Takmörkuð stilling"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Til að tryggja öryggi þitt er þessi stilling ekki tiltæk eins og er."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Aðgerð ekki í boði á meðan á símtali stendur"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Svikarar eiga það til að biðja notendur um að framkvæma aðgerðir á borð við þessa á meðan á samtali stendur. Þar af leiðandi er lokað á hana til að vernda þig. Ef einhver sem þú þekkir ekki bað þig um að framkvæma þessa aðgerð gæti verið um svik að ræða."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Ekki er heimilt að leyfa forritum að setja önnur forrit upp á meðan á símtali stendur."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Ekki er heimilt að veita forriti aðgang að aðgengi á meðan á símtali stendur."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Ekki er heimilt að kveikja á þessari stillingu á meðan á símtali stendur."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Ekki hægt að ljúka við aðgerð á meðan á símtali stendur"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Forritið fékk ekki aðgang að <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Forritið bað um aðgang að heimild fyrir viðkvæmu efni sem getur stofnað persónu- og fjármálaupplýsingum þínum í hættu.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Forritið virkar hugsanlega ekki sem skyldi án þessarar takmörkuðu heimildar. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Kynntu þér hvernig þú leyfir aðgang&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Forritið fékk ekki aðgang að sjálfgefnu <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-it/strings.xml b/PermissionController/res/values-it/strings.xml
index 8b5909516..af4b7e10d 100644
--- a/PermissionController/res/values-it/strings.xml
+++ b/PermissionController/res/values-it/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> accesso per questa app su <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Mostra tutte le autorizzazioni di <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Mostra tutte le app con questa autorizzazione"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informazioni"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Impostazioni"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostra utilizzo microfono dell\'assistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Impostazioni app inutilizzate"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Rimuovi autorizzazioni se non in uso"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Apertura link"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predefinite per il lavoro"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Predefinite per lo spazio privato"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Ottimizzate per il dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Altre"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nessuna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Predefinita)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nessuna app"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> vorrebbe caricare informazioni di debug."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vuoi condividere i dati di debug?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Il sistema ha rilevato un problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"L\'app <xliff:g id="APP_NAME_0">%1$s</xliff:g> chiede di caricare una segnalazione di bug da questo dispositivo fatta il giorno <xliff:g id="DATE">%2$s</xliff:g> alle ore <xliff:g id="TIME">%3$s</xliff:g>. Le segnalazioni di bug includono informazioni personali relative al tuo dispositivo oppure registrate dalle app, ad esempio nomi utente, dati sulla posizione, identificatori dei dispositivi e informazioni sulle reti. Condividi le segnalazioni di bug solo con persone e app che ritieni affidabili. Consentire all\'app <xliff:g id="APP_NAME_1">%4$s</xliff:g> di caricare una segnalazione di bug?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Si è verificato un errore durante l\'elaborazione della segnalazione di bug per l\'app <xliff:g id="APP_NAME">%1$s</xliff:g>. Di conseguenza, la condivisione dei dati di debug dettagliati è stata negata. Siamo spiacenti per l\'interruzione."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Consenti"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Rifiuta"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Consenti impostazioni con limitazioni"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Impostazione con limitazioni"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Per la tua sicurezza, questa impostazione non è al momento disponibile."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Azione non disponibile durante una telefonata"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n I truffatori richiedono spesso questo tipo di azione durante le conversazioni telefoniche, quindi è bloccata per proteggerti. Se qualcuno che non conosci ti guida a compiere questa azione, potrebbe trattarsi di una frode."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"È vietato consentire alle app di installare altre app durante una telefonata."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"È vietato concedere a un\'app l\'accesso al servizio di accessibilità durante una telefonata."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Non è consentito attivare questa impostazione durante una telefonata."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Impossibile completare l\'azione durante la chiamata"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"All\'app è stato negato l\'accesso a <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"L\'app ha richiesto l\'accesso a un\'autorizzazione sensibile che può mettere a rischio le tue informazioni finanziarie e personali.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>È possibile che l\'app non funzioni correttamente senza questa autorizzazione limitata. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Scopri di più su come consentire l\'accesso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"All\'app è stato negato l\'accesso al ruolo <xliff:g id="ROLE_NAME">%1$s</xliff:g> predefinita"</string>
diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml
index 4e0b9ec0d..aa33cb370 100644
--- a/PermissionController/res/values-iw/strings.xml
+++ b/PermissionController/res/values-iw/strings.xml
@@ -202,15 +202,13 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"גישה ל<xliff:g id="PERM">%1$s</xliff:g> לאפליקציה הזו ב<xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"הצגת כל ההרשאות של \'<xliff:g id="APP">%1$s</xliff:g>\'"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"אני רוצה לראות את כל האפליקציות עם ההרשאה הזו"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"מידע"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"הגדרות"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"‏השימוש במיקרופון של Assistant"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"הגדרות של אפליקציות שמזמן לא השתמשת בהן"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"הסרת ההרשאות כשלא בשימוש"</string>
<string name="unused_apps_label" msgid="2595428768404901064">"הסרת הרשאות ופינוי מקום אחסון"</string>
- <string name="unused_apps_label_v2" msgid="7058776770056517980">"השהיית הפעילות באפליקציה אם אין בה שימוש"</string>
+ <string name="unused_apps_label_v2" msgid="7058776770056517980">"השהיית האפליקציה אם מזמן לא נפתחה"</string>
<string name="unused_apps_label_v3" msgid="693340578642156657">"הגבלת האפליקציה כשהיא לא בשימוש"</string>
<string name="unused_apps_summary" msgid="8839466950318403115">"הסרת ההרשאות, מחיקה של הקבצים הזמניים, הפסקה של קבלת ההתראות"</string>
<string name="unused_apps_summary_v2" msgid="5011313200815115802">"ההרשאות יוסרו, הקבצים הזמניים יימחקו, ההתראות יופסקו והאפליקציה תעבור לארכיון"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"פתיחת קישורים"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ברירת מחדל לעבודה"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ברירת מחדל עבור המרחב הפרטי"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"מותאמות למכשיר"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"אחרות"</string>
<string name="default_app_none" msgid="9084592086808194457">"ללא"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ברירת מחדל של המערכת)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"אין אפליקציות"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת להעלות נתונים של ניפוי באגים."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"לשתף נתונים של ניפוי באגים?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"המערכת איתרה בעיה."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"‫<xliff:g id="APP_NAME_0">%1$s</xliff:g> מבקשת להעלות דוח על באגים מהמכשיר הזה, שנוצר בתאריך <xliff:g id="DATE">%2$s</xliff:g> בשעה <xliff:g id="TIME">%3$s</xliff:g>. דוחות על באגים כוללים מידע אישי על המכשיר או מידע אישי שנשמר באמצעות אפליקציות. למשל, שמות משתמשים, נתוני מיקום, מזהי מכשיר ופרטי רשת. יש לשתף דוחות על באגים רק עם אפליקציות ואנשים שאמינים בעיניך. לאפשר לאפליקציית <xliff:g id="APP_NAME_1">%4$s</xliff:g> להעלות דוח על באגים?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"אירעה שגיאה בעיבוד הדוח על הבאג עבור <xliff:g id="APP_NAME">%1$s</xliff:g>. לכן, נדחה שיתוף הנתונים המפורטים לגבי ניפוי השגיאות. מצטערים על ההפרעה."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"כן, זה בסדר"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"אני לא מרשה"</string>
@@ -475,7 +476,7 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"‏לתת לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; הרשאת גישה לתמונות ולמדיה במכשיר &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"‏לתת לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; הרשאת גישה לאנשי הקשר שלך?"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"‏לתת לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; הרשאת גישה לאנשי הקשר במכשיר &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"‏לתת לאפליקציה \'&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;\' הרשאת גישה למיקום המכשיר?"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"‏לתת לאפליקציה \"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;\" הרשאת גישה למיקום המכשיר?"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"‏לתת לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; הרשאת גישה למיקום של &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"לאפליקציה תהיה גישה אל נתוני המיקום רק בזמן השימוש בה"</string>
<string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"‏לתת לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; הרשאת גישה למיקום המכשיר?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"הרשאה להגדרות מוגבלות"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"הגדרה מוגבלת"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"מטעמי אבטחה, ההגדרה הזו לא זמינה כרגע."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"הפעולה לא זמינה במהלך שיחת טלפון"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n לרוב, אנשים שמבצעים תרמיות מבקשים לבצע פעולות מהסוג הזה בזמן שיחות טלפון, לכן הפעולה הזו חסומה כדי להגן עליך. אם מישהו לא מוכר מנחה אותך לבצע את הפעולה הזו, יכול להיות שמדובר בתרמית."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"אי אפשר לתת לאפליקציות הרשאה להתקין אפליקציות אחרות בזמן שיחת טלפון."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"אי אפשר לתת לאפליקציה הרשאת גישה לתכונות הנגישות בזמן שיחת טלפון."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"אי אפשר להפעיל את ההגדרה הזו בזמן שיחת טלפון."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"אי אפשר להשלים את הפעולה במהלך שיחה"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"בקשת הגישה של האפליקציה ל<xliff:g id="PERMISSION_NAME">%1$s</xliff:g> נדחתה"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"‏האפליקציה ביקשה הרשאת גישה למידע רגיש שעלולה לסכן את המידע האישי והפיננסי שלך.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>יכול להיות שהאפליקציה לא תעבוד כמו שצריך ללא ההרשאה המוגבלת הזו. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;מידע נוסף על מתן גישה להרשאות&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"בקשת הגישה של האפליקציה לשמש כברירת המחדל של <xliff:g id="ROLE_NAME">%1$s</xliff:g> נדחתה"</string>
diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml
index ded17d3f8..9d4b38c39 100644
--- a/PermissionController/res/values-ja/strings.xml
+++ b/PermissionController/res/values-ja/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> でこのアプリに <xliff:g id="PERM">%1$s</xliff:g> へのアクセス権が付与されています"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"「<xliff:g id="APP">%1$s</xliff:g>」アプリの権限をすべて表示"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"この権限があるアプリをすべて表示"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"情報"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"設定"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"アシスタントのマイクの使用を表示"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"使用していないアプリの設定"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"アプリが使用されていない場合に権限を削除"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"リンクを開く"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"デフォルトの仕事用アプリ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"プライベート スペースのデフォルト"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"デバイス向けに最適化"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"その他"</string>
<string name="default_app_none" msgid="9084592086808194457">"なし"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(システムのデフォルト)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"アプリなし"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> がデバッグ情報のアップロードをリクエストしています。"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"デバッグデータを共有しますか?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"システムで問題が検出されました。"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> が、<xliff:g id="DATE">%2$s</xliff:g>、<xliff:g id="TIME">%3$s</xliff:g>にこのデバイスから取得したバグレポートのアップロードをリクエストしています。バグレポートには、ユーザー名、位置情報、デバイスの識別情報、ネットワーク情報など、デバイスに関する個人情報やアプリで記録された個人情報が含まれます。この情報を含むバグレポートは、信頼できる人やアプリとのみ共有してください。<xliff:g id="APP_NAME_1">%4$s</xliff:g> にバグレポートのアップロードを許可しますか?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> のバグレポートの処理中にエラーが発生しました。詳細なデバッグデータの共有が許可されませんでした。ご不便をおかけして申し訳ありません。"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"許可"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"許可しない"</string>
@@ -491,8 +492,8 @@
<string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;の位置情報に対する &lt;b&gt;<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>&lt;/b&gt; のアクセス権を「おおよそ」から「正確」に変更しますか?"</string>
<string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"このデバイスのおおよその位置情報へのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
<string name="permgrouprequest_device_aware_coarselocation" msgid="8367540370912066757">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;のおおよその位置情報へのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
- <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"正確"</string>
- <string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"おおよそ"</string>
+ <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"正確な位置"</string>
+ <string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"おおよその位置"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"カレンダーへのアクセスを「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」に許可しますか?"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;内のカレンダーへのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
<string name="permgrouprequest_sms" msgid="5672063688745420991">"SMS メッセージの送信と表示を「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」に許可しますか?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"制限付き設定を許可"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"制限付き設定"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"セキュリティ保護のため、この設定は現在利用できません。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"この操作は通話中はできません"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n このような操作は、詐欺師が電話での会話中に要求することが多いため、ユーザー保護を目的に禁止されています。知らない相手からこのような操作を求められた場合は、詐欺の可能性があります。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"通話中にアプリが他のアプリをインストールすることはできません。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"通話中はアプリにユーザー補助へのアクセスを許可できません。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"通話中はこの設定を有効にできません。"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"通話中は操作を完了できません"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"アプリは<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>へのアクセスを拒否されました"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"機密情報に関わる権限へのアクセスをアプリがリクエストしました。この権限へのアクセスは、あなたの個人情報や財務情報を危険にさらす恐れがあります。<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>この制限付きの権限がないとアプリは正しく動作しない可能性があります。&lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;アクセスを許可する方法の詳細&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"アプリはデフォルトの<xliff:g id="ROLE_NAME">%1$s</xliff:g>としてのアクセスを拒否されました"</string>
diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml
index 45d76168e..ada0b0417 100644
--- a/PermissionController/res/values-ka/strings.xml
+++ b/PermissionController/res/values-ka/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"(<xliff:g id="PERM">%1$s</xliff:g>) წვდომა ამ აპისთვის <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-ზე"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ყველა ნებართვის ნახვა: <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ამ ნებართვის მქონე ყველა აპის ნახვა"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ინფორმაცია"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"პარამეტრები"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"ასისტენტის მიკროფონის გამოყენების ჩვენება"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"გამოუყენებელი აპის პარამეტრები"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ნებართვების ამოშლა აპის გამოუყენებლობის შემთხვევაში."</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ბმულების გახსნა"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ნაგულისხმევი სამსახურისთვის"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"კერძო სივრცისთვის ნაგულისხმევი აპები"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ოპტიმიზებულია მოწყობილობისთვის"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"სხვა"</string>
<string name="default_app_none" msgid="9084592086808194457">"არცერთი"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(სისტემის ნაგულისხმევი)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"აპები არ არის"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს გამართვის ინფორმაციის ატვირთვას."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"გააზიარებთ შეცდომების გამართვის მონაცემებს?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"სისტემამ აღმოაჩინა პრობლემა."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ითხოვს ამ მოწყობილობიდან ხარვეზების ანგარიშის ატვირთვას, რომლის შექმნის თარიღია <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. ხარვეზების ანგარიშები მოიცავს პერსონალურ ინფორმაციას თქვენი მოწყობილობის შესახებ ან აპების ჟურნალებში დაფიქსირებულ მონაცემებს, მაგალითად, მომხმარებლის სახელებს, მდებარეობის მონაცემებს, მოწყობილობების იდენტიფიკატორებსა და ქსელის ინფორმაციას. გირჩევთ, ხარვეზების ანგარიშები გაუზიაროთ მხოლოდ იმ ადამიანებსა და აპებს, რომლებსაც შეგიძლიათ ანდოთ ეს ინფორმაცია. გსურთ, <xliff:g id="APP_NAME_1">%4$s</xliff:g>-მა ატვირთოს ხარვეზების ანგარიში?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის სისტემის ხარვეზის ანგარიშის დამუშავებისას შეცდომა დაფიქსირდა. ამიტომ შეცდომების გამართვის დეტალური მონაცემების გაზიარება უარყოფილია. ბოდიშს გიხდით წყვეტის გამო."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"დაშვება"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"უარყოფა"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"შეზღუდული პარამეტრების დაშვება"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"შეზღუდული პარამეტრი"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"თქვენივე უსაფრთხოებისთვის ეს პარამეტრი ამჟამად მიუწვდომელია."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"სატელეფონო ზარისას მოქმედება არ არის ხელმისაწვდომი"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n თაღლითები ხშირად ითხოვენ ამ ტიპის ქმედებას სატელეფონო საუბრებისას, შესაბამისად, აღნიშნული ქმედება დაბლოკილია თქვენი უსაფრთხოებისთვის. თუ ამ ქმედების განხორციელებისკენ მიგითითათ ვინმემ, ვისაც არ იცნობთ, ეს შესაძლოა თაღლითური სქემა იყოს."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"აპებისთვის სხვა აპების ინსტალაციის დაშვება არ არის ნებადართული სატელეფონო ზარის დროს."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"მარტივ წვდომაზე აპისთვის წვდომის მიცემა არ არის ნებადართული სატელეფონო ზარის დროს."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ამ პარამეტრის ჩართვა არ არის ნებადართული სატელეფონო ზარის დროს."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ზარის დროს მოქმედების დასრულება შეუძლებელია"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"აპისთვის უარყოფილია ნებართვაზე წვდომა: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"აპმა სენსიტიურ ინფორმაციაზე წვდომა მოითხოვა, რაც თქვენს პირად და ფინანსურ ინფორმაციას საფრთხის ქვეშ აყენებს.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>შესაძლოა აპმა ამ შეზღუდული ნებართვის გარეშე სათანადოდ ვერ იმუშაოს. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;შეიტყვეთ მეტი ნებართვის დაშვების შესახებ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"აპისთვის ნაგულისხმევ როლზე (<xliff:g id="ROLE_NAME">%1$s</xliff:g>) წვდომა უარყოფილია"</string>
diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml
index 1f3bff9e9..3ba715ccd 100644
--- a/PermissionController/res/values-kk/strings.xml
+++ b/PermissionController/res/values-kk/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Құрылғыдағы (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) осы қолданбаның рұқсаты: <xliff:g id="PERM">%1$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Барлық <xliff:g id="APP">%1$s</xliff:g> рұқсаттарын көру"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Осы рұқсатқа ие барлық қолданбаларды көру"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Ақпарат"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Параметрлер"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant микрофонының пайдаланылуын көрсету"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Пайдаланылмайтын қолданба параметрлері"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Қолданба пайдаланылмаса, рұқсаттарды өшіру"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Сілтемелер ашу"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Жұмыс үшін әдепкі қолданба"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Құпия кеңістікке арналған әдепкі қолданбалар"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Құрылғы үшін оңтайландырылған"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Басқа"</string>
<string name="default_app_none" msgid="9084592086808194457">"Жоқ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(жүйенің әдепкі қолданбасы)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Қолданба жоқ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы түзету туралы ақпаратты жүктеп салғысы келеді."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Түзету туралы деректер бөлісілсін бе?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Жүйе мәселені анықтады."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> қолданбасы осы құрылғыдан <xliff:g id="DATE">%2$s</xliff:g> күні <xliff:g id="TIME">%3$s</xliff:g> кезінде алынған қате туралы есепті жүктеп салуды сұрауда. Мұндай есептерге құрылғыңыз туралы немесе қолданбалар арқылы тіркелген жеке ақпарат (пайдаланушы аттары, геодерек, құрылғы идентификаторлары және желі туралы ақпарат) кіреді. Қате туралы есептерді тек сенімді адамдармен және қолданбалармен бөлісіңіз. <xliff:g id="APP_NAME_1">%4$s</xliff:g> қолданбасына қате туралы есепті жүктеп салуға рұқсат етілсін бе?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасының қате туралы есебін өңдеу кезінде қате шықты. Түзету туралы толық деректерді бөлісуден бас тартылды. Кедергі келтіргеніміз үшін кешірім сұраймыз."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Рұқсат беру"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Тыйым салу"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Шектелген параметрлерге рұқсат беру"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Шектелген параметр"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Қауіпсіздік мақсатында бұл параметрді қазір пайдалану мүмкін емес."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Телефон қоңырауы кезінде бұл әрекет мүмкін емес"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Алаяқтар телефонмен сөйлесу кезінде көбіне осындай әрекеттерді жасауды сұрайды, сондықтан сізді қорғау үшін бұл әрекет блокталған. Таныс емес адам осылай әрекет етуге нұсқау берсе, бұл алаяқтық болуы мүмкін."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Телефон қоңырауы кезінде қолданбаларға басқа қолданбаларды орнатуға рұқсат берілмейді."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Телефон қоңырауы кезінде қолданбаға арнайы мүмкіндіктерді пайдалану рұқсаты берілмейді."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Телефон қоңырауы кезінде бұл параметрді қосуға рұқсат берілмейді."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Қоңырау кезінде әрекетті аяқтау мүмкін емес"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Қолданбаға <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> рұқсаты берілмеді"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Қолданба жеке және қаржылық ақпаратыңызға қауіп төндіруі мүмкін құпия ақпарат рұқсатын сұрады.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Қолданба бұл шектеулі рұқсатсыз дұрыс жұмыс істемеуі мүмкін. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Рұқсат беру туралы ақпарат&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Қолданбаға әдепкі <xliff:g id="ROLE_NAME">%1$s</xliff:g> болу рұқсаты берілмеді"</string>
diff --git a/PermissionController/res/values-km/strings.xml b/PermissionController/res/values-km/strings.xml
index f5269b85b..2dd2f92f1 100644
--- a/PermissionController/res/values-km/strings.xml
+++ b/PermissionController/res/values-km/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"សិទ្ធិចូលប្រើ <xliff:g id="PERM">%1$s</xliff:g> សម្រាប់កម្មវិធីនេះនៅលើ <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"មើល​ការអនុញ្ញាតទាំងអស់ឱ្យទៅ <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"មើលកម្មវិធី​ទាំងអស់​ដែលមាន​ការអនុញ្ញាត​នេះ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ព័ត៌មាន"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ការកំណត់"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"បង្ហាញការប្រើប្រាស់​មីក្រូហ្វូនរបស់ជំនួយការ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ការកំណត់កម្មវិធីដែលមិនប្រើ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ដកការ​អនុញ្ញាតចេញ ប្រសិនបើ​មិនប្រើប្រាស់​កម្មវិធី"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ការបើកតំណ"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"លំនាំដើម​សម្រាប់ការងារ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"លំនាំដើមសម្រាប់លំហឯកជន"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"បានបង្កើនប្រសិទ្ធភាពសម្រាប់ឧបករណ៍"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ផ្សេងទៀត"</string>
<string name="default_app_none" msgid="9084592086808194457">"គ្មាន"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(លំនាំដើមប្រព័ន្ធ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"គ្មានកម្មវិធី​ទេ​"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ចង់​បង្ហោះ​ព័ត៌មាននៃ​ការជួសជុល។"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ចែករំលែក​ទិន្នន័យ​នៃការ​ជួសជុល​ឬ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ប្រព័ន្ធ​បានរកឃើញ​បញ្ហា​មួយ។"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> កំពុង​ស្នើសុំ​បង្ហោះ​របាយការណ៍​អំពី​បញ្ហាពី​ឧបករណ៍​នេះ ដែល​បាន​ធ្វើឡើង​នៅថ្ងៃទី <xliff:g id="DATE">%2$s</xliff:g> នៅម៉ោង <xliff:g id="TIME">%3$s</xliff:g>។ របាយការណ៍​អំពី​បញ្ហា​រួមមាន​ព័ត៌មានផ្ទាល់ខ្លួន​អំពី​ឧបករណ៍​របស់អ្នក​ ឬ​ដែលបាន​កត់ត្រា​ដោយ​កម្មវិធី​ដូចជា ឈ្មោះ​អ្នកប្រើប្រាស់ ទិន្នន័យទីតាំង ព័ត៌មាន​សម្គាល់​ឧបករណ៍ និង​ព័ត៌មាន​បណ្ដាញ​ជាដើម។ ចែករំលែក​របាយការណ៍​អំពី​បញ្ហា​ជាមួយ​កម្មវិធី និង​មនុស្សដែល​អ្នកទុកចិត្ត​ប៉ុណ្ណោះ ពាក់ព័ន្ធនឹង​ព័ត៌មាន​នេះ។ អនុញ្ញាត​ឱ្យ <xliff:g id="APP_NAME_1">%4$s</xliff:g> បង្ហោះ​របាយការណ៍​អំពី​បញ្ហាទេ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"មាន​បញ្ហា​ក្នុងការ​ដំណើរការ​របាយការណ៍អំពីបញ្ហា​សម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ។ ដូច្នេះ ការចែករំលែក​ទិន្នន័យ​ជួសជុល​លម្អិត​ត្រូវបានបដិសេធ។ សូមអភ័យទោស​ចំពោះ​ការរំខាន។"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"អនុញ្ញាត"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"បដិសេធ"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"អនុញ្ញាតការកំណត់​ដែលបានដាក់កំហិត"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ការកំណត់​ដែលបានដាក់កំហិត"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ដើម្បីសុវត្ថិភាព​របស់អ្នក បច្ចុប្បន្នមិនអាចប្រើការកំណត់នេះបានទេ។"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"មិនអាចធ្វើសកម្មភាពបានទេ ពេលកំពុងហៅទូរសព្ទ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ជារឿយៗ ជនឆបោកស្នើសុំសកម្មភាពប្រភេទនេះ ក្នុងអំឡុងពេលសន្ទនាតាមទូរសព្ទ ដូច្នេះសកម្មភាពនេះត្រូវបានទប់ស្កាត់ដើម្បីការពារអ្នក។ ប្រសិនបើអ្នកត្រូវបានណែនាំឱ្យធ្វើសកម្មភាពនេះដោយនរណាម្នាក់ដែលអ្នកមិនស្គាល់ វាអាចជាការឆបោក។"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ការអនុញ្ញាតឱ្យកម្មវិធីដំឡើងកម្មវិធីផ្សេងទៀតមិនត្រូវបានអនុញ្ញាត ក្នុងអំឡុងការហៅទូរសព្ទទេ។"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ការផ្ដល់សិទ្ធិឱ្យកម្មវិធីចូលប្រើភាពងាយស្រួលមិនត្រូវបានអនុញ្ញាត ក្នុងអំឡុងការហៅទូរសព្ទទេ។"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ការបើកការកំណត់នេះមិនត្រូវបានអនុញ្ញាត ក្នុងអំឡុងការហៅទូរសព្ទទេ។"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"មិនអាចបញ្ចប់សកម្មភាពក្នុងអំឡុងពេលហៅទូរសព្ទបានទេ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"កម្មវិធីត្រូវបានបដិសេធមិនឱ្យចូលប្រើ<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"កម្មវិធីបានស្នើសុំសិទ្ធិចូលប្រើការអនុញ្ញាត​ដែលមានលក្ខណៈរសើប ដែលអាចធ្វើឱ្យព័ត៌មានហិរញ្ញវត្ថុ និងព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នកប្រឈមនឹងហានិភ័យ។<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>កម្មវិធីអាចនឹងមិនដំណើរការបានត្រឹមត្រូវទេ ប្រសិនបើគ្មានការអនុញ្ញាតដែលមានការរឹតបន្តឹងនេះ។ &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ស្វែងយល់អំពីរបៀបផ្ដល់សិទ្ធិចូលប្រើ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"កម្មវិធីត្រូវបានបដិសេធមិនឱ្យចូលប្រើជា<xliff:g id="ROLE_NAME">%1$s</xliff:g>លំនាំដើម"</string>
diff --git a/PermissionController/res/values-kn/strings.xml b/PermissionController/res/values-kn/strings.xml
index a73c16f47..e482f3231 100644
--- a/PermissionController/res/values-kn/strings.xml
+++ b/PermissionController/res/values-kn/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> ನಲ್ಲಿ ಈ ಆ್ಯಪ್‌ಗಾಗಿ <xliff:g id="PERM">%1$s</xliff:g> ಆ್ಯಕ್ಸೆಸ್"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ಎಲ್ಲಾ <xliff:g id="APP">%1$s</xliff:g> ಅನುಮತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ಈ ಅನುಮತಿಯನ್ನು ಹೊಂದಿರುವ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ಮಾಹಿತಿ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"ಅಸಿಸ್ಟೆಂಟ್‌ನ ಮೈಕ್ರೋಫೋನ್ ಬಳಕೆಯನ್ನು ತೋರಿಸಿ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ಬಳಕೆಯಾಗದಿರುವ ಆ್ಯಪ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ಆ್ಯಪ್‌ ಬಳಸದಿದ್ದರೆ ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ಲಿಂಕ್‍‍ಗಳನ್ನು ತೆರೆಯುವುದು"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ಕೆಲಸದ ಕುರಿತಾದ ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ಪ್ರೈವೆಟ್ ಸ್ಪೇಸ್‌ನ ಡೀಫಾಲ್ಟ್"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ಸಾಧನಕ್ಕಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ಇತರೆ"</string>
<string name="default_app_none" msgid="9084592086808194457">"ಯಾವುದೂ ಬೇಡ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ಸಿಸ್ಟಂ ಡಿಫಾಲ್ಟ್)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ಯಾವುದೇ ಆ್ಯಪ್‌ಗಳು ಇಲ್ಲ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಆ್ಯಪ್, ಡೀಬಗ್ ಮಾಡುವಿಕೆಯ ಮಾಹಿತಿಯನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಬಯಸುತ್ತದೆ."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬೇಕೆ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ಸಮಸ್ಯೆಯೊಂದನ್ನು ಸಿಸ್ಟಮ್ ಪತ್ತೆಹಚ್ಚಿದೆ."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="DATE">%2$s</xliff:g> ದಿನಾಂಕದಂದು <xliff:g id="TIME">%3$s</xliff:g> ಸಮಯಕ್ಕೆ ತೆಗೆದುಕೊಂಡ ಬಗ್ ವರದಿಯನ್ನು ಈ ಸಾಧನದಿಂದ ಅಪ್‌ಲೋಡ್ ಮಾಡುವಂತೆ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ಆ್ಯಪ್ ವಿನಂತಿಸುತ್ತಿದೆ. ಬಗ್ ವರದಿಗಳು, ನಿಮ್ಮ ಸಾಧನ ಅಥವಾ ಆ್ಯಪ್‌ಗಳ ಮೂಲಕ ಲಾಗ್ ಮಾಡಿದ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು, ಉದಾಹರಣೆಗೆ ಬಳಕೆದಾರರ ಹೆಸರುಗಳು, ಸ್ಥಳದ ಡೇಟಾ, ಸಾಧನ ಗುರುತಿಸುವಿಕೆಗಳು ಮತ್ತು ನೆಟ್‌ವರ್ಕ್‌ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ಮಾಹಿತಿ ಒಳಗೊಂಡಂತೆ, ನೀವು ನಂಬುವ ಜನರು ಮತ್ತು ಆ್ಯಪ್‌ಗಳ ಜೊತೆಗೆ ಮಾತ್ರ ಬಗ್ ವರದಿಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ. ಬಗ್ ವರದಿಯನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಲು <xliff:g id="APP_NAME_1">%4$s</xliff:g> ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುವುದೇ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಬಗ್ ವರದಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ. ಆದ್ದರಿಂದ, ವಿವರವಾದ ದೋಷ ಡೀಬಗ್ ಮಾಡುವಿಕೆಯ ಡೇಟಾ ಹಂಚಿಕೊಳ್ಳುವುದನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ. ಅಡಚಣೆಗಾಗಿ ಕ್ಷಮಿಸಿ."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ಅನುಮತಿಸಿ"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ನಿರಾಕರಿಸಿ"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"ನಿರ್ಬಂಧಿಸಲಾದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಅನುಮತಿಸಿ"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ನಿರ್ಬಂಧಿಸಲಾದ ಸೆಟ್ಟಿಂಗ್"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಗಾಗಿ, ಈ ಸೆಟ್ಟಿಂಗ್ ಪ್ರಸ್ತುತ ಲಭ್ಯವಿಲ್ಲ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ಫೋನ್ ಕರೆಯಲ್ಲಿರುವಾಗ ಕ್ರಿಯೆ ಲಭ್ಯವಿರುವುದಿಲ್ಲ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ಫೋನ್ ಕರೆ ಸಂಭಾಷಣೆಯ ಸಮಯದಲ್ಲಿ ಸ್ಕ್ಯಾಮರ್‌ಗಳು ಆಗಾಗ್ಗೆ ಈ ರೀತಿಯ ಕ್ರಿಯೆಯನ್ನು ವಿನಂತಿಸುತ್ತಾರೆ, ಆದ್ದರಿಂದ ನಿಮ್ಮನ್ನು ರಕ್ಷಿಸಲು ಇದನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗುತ್ತದೆ. ನಿಮಗೆ ಪರಿಚಯವಿಲ್ಲದ ಯಾರಾದರೂ ಈ ಕ್ರಮವನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ನಿಮಗೆ ಮಾರ್ಗದರ್ಶನ ನೀಡುತ್ತಿದ್ದರೆ, ಅದು ಸ್ಕ್ಯಾಮ್ ಆಗಿರಬಹುದು."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ಫೋನ್ ಕರೆಯ ಸಮಯದಲ್ಲಿ ಇತರ ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುವುದಕ್ಕೆ ಆ್ಯಪ್‌ಗಳನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ಫೋನ್ ಕರೆಯ ಸಮಯದಲ್ಲಿ ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿಗೆ ಆ್ಯಪ್ ಆ್ಯಕ್ಸೆಸ್ ನೀಡುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ಫೋನ್ ಕರೆಯ ಸಮಯದಲ್ಲಿ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ಕರೆಯ ಸಮಯದಲ್ಲಿ ಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g> ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ನಿರಾಕರಿಸಲಾಗಿದೆ"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮತ್ತು ಹಣಕಾಸಿನ ಮಾಹಿತಿಯನ್ನು ಅಪಾಯಕ್ಕೆ ಸಿಲುಕಿಸಬಹುದಾದ ಸೂಕ್ಷ್ಮ ಅನುಮತಿಗೆ ಆ್ಯಪ್ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ವಿನಂತಿಸಿದೆ.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>.ಈ ನಿರ್ಬಂಧಿತ ಅನುಮತಿಯಿಲ್ಲದೆ ಆ್ಯಪ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವ ಸಾಧ್ಯತೆಯಿದೆ. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೇಗೆ ಅನುಮತಿಸುವುದು ಎಂಬುದನ್ನು ತಿಳಿಯಿರಿ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ಡೀಫಾಲ್ಟ್ <xliff:g id="ROLE_NAME">%1$s</xliff:g> ಆಗಿರಲು ಆ್ಯಪ್‌ಗೆ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ"</string>
diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml
index 0206df4cb..8f97c2e55 100644
--- a/PermissionController/res/values-ko/strings.xml
+++ b/PermissionController/res/values-ko/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"이 앱의 <xliff:g id="DEVICE_NAME">%2$s</xliff:g> <xliff:g id="PERM">%1$s</xliff:g> 액세스 권한"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> 권한 모두 보기"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"이 권한이 있는 앱 모두 보기"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"정보"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"설정"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"어시스턴트 마이크 사용 표시"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"사용하지 않는 앱 설정"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"앱이 사용되지 않는 경우 권한 삭제"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"링크 열기"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"직장용 기본 앱"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"비공개 스페이스의 기본값"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"기기에 최적화된 앱"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"기타"</string>
<string name="default_app_none" msgid="9084592086808194457">"없음"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(시스템 기본값)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"앱 없음"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 디버깅 정보를 업로드하려고 합니다."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"디버깅 데이터를 공유하시겠습니까?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"시스템에 문제가 감지되었습니다"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>이(가) 이 기기에서 <xliff:g id="DATE">%2$s</xliff:g> <xliff:g id="TIME">%3$s</xliff:g>에 만들어진 버그 신고를 업로드하려고 합니다. 버그 신고에는 기기에 관한 개인정보나 앱이 기록한 개인정보(예: 사용자 이름, 위치 데이터, 기기 식별자, 네트워크 정보)가 포함됩니다. 이 정보는 신뢰할 수 있는 사람 또는 앱에 한해 공유해야 합니다. <xliff:g id="APP_NAME_1">%4$s</xliff:g>에서 버그 신고를 업로드하도록 허용할까요?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 관한 버그 신고를 처리하는 중에 오류가 발생했습니다. 따라서 상세한 디버깅 데이터 공유가 거부되었습니다. 불편을 끼쳐 드려 죄송합니다."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"허용"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"거부"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"제한된 설정 허용"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"제한된 설정"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"보안을 위해 이 설정은 현재 사용할 수 없습니다."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"통화 중에 수행할 수 없는 작업입니다"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n 사기범은 전화 통화 중에 종종 이러한 유형의 작업을 요청하므로, 사용자를 보호하기 위해 해당 작업은 차단됩니다. 모르는 사람이 이 작업을 수행하도록 안내하는 경우 사기일 수도 있습니다."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"통화 중에는 앱이 다른 앱을 설치하도록 허용할 수 없습니다."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"통화 중에는 앱에 접근성 액세스 권한을 부여할 수 없습니다."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"통화 중에는 이 설정을 사용할 수 없습니다."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"통화 중에는 작업을 완료할 수 없습니다"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>에 대한 앱의 액세스가 거부됨"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"앱에서 개인 정보 및 금융 정보가 위험에 노출될 수 있는 민감한 권한에 대한 액세스를 요청했습니다.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>이 제한된 권한 없이는 앱이 제대로 작동하지 않을 수 있습니다. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;액세스 허용 방법 알아보기&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"앱을 기본 <xliff:g id="ROLE_NAME">%1$s</xliff:g>으로 사용하기 위한 액세스가 거부됨"</string>
diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml
index 0de820408..578bac910 100644
--- a/PermissionController/res/values-ky/strings.xml
+++ b/PermissionController/res/values-ky/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> түзмөгүндө бул колдонмо үчүн <xliff:g id="PERM">%1$s</xliff:g> уруксаты"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Бардык <xliff:g id="APP">%1$s</xliff:g> уруксаттарын көрүү"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ушундай уруксат берилген бардык колдонмолорду көрүү"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Маалымат"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Параметрлер"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Кошумча микрофондун иштешин көрсөтүү"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Колдонулбаган колдонмолордун параметрлери"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Эгер колдонмо пайдаланылбаса, уруксаттар өчүрүлсүн"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Шилтемелерди ачуу"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Жумуш үчүн демейки жөндөөлөр"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Жеке мейкиндик үчүн демейки колдонмолор"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Түзмөккө оптималдаштырылды"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Башкалар"</string>
<string name="default_app_none" msgid="9084592086808194457">"Жок"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Демейки тутум)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Бир да колдонмо жок"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> мүчүлүштүктөрдү оңдоо маалыматын жүктөп бергиси келет."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Мүчүлүштүктөр тууралуу кабарлансынбы?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Система бир мүчүлүштүктү аныктады."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"\"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" колдонмосу ушул түзмөктөн <xliff:g id="DATE">%2$s</xliff:g>, саат <xliff:g id="TIME">%3$s</xliff:g> түзүлгөн мүчүлүштүктөр тууралуу отчетту жүктөөгө уруксат сурап жатат. Отчетто колдонуучулардын аттары, жүргөн жерлери, түзмөктүн идентификаторлору жана тармактын дайын-даректери сыяктуу түзмөгүңүздөгү же колдонмолоруңуздагы жеке маалымат камтылышы мүмкүн. Андыктан мүчүлүштүктөр тууралуу отчетту ишенимдүү адамдар жана колдонмолор менен гана бөлүшүңүз. \"<xliff:g id="APP_NAME_1">%4$s</xliff:g>\" колдонмосу мүчүлүштүк тууралуу отчетту жүктөй берсинби?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосундагы мүчүлүштүк тууралуу кабарды иштетүүдө ката кетти. Мүчүлүштүктөрдү аныктоо тууралуу кеңири маалыматтарды бөлүшүү сурамы четке кагылды. Ыңгайсыздык үчүн кечирим сурайбыз."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Уруксат берүү"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Тыюу салынат"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Чектелген параметрлерге уруксат берүү"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Чектелген функция"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Коопсуздук максатында бул параметр азырынча иштебейт."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Телефон чалуу учурунда аракет жеткиликсиз"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Телефон чалуу аркылуу сүйлөшүп жатканда шылуундар көбүнчө ушул сыяктуу аракетти аткарууну суранышат, андыктан коопсуздугуңузду коргоо үчүн бул нерсе бөгөттөлдү. Эгер сиз тааныбаган адам мындай аракетти аткарууну айтса, ал кесепчилик болушу мүмкүн."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Телефон чалуу учурунда колдонмолорго башка колдонмолорду орнотууга уруксат берүүгө болбойт."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Телефон чалуу учурунда колдонмого атайын мүмкүнчүлүктөрдү пайдаланууга уруксат берүүгө болбойт."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Телефон чалуу учурунда бул параметрди иштетүүгө болбойт."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Чалуу учурунда аракетти бүтүрүү мүмкүн эмес"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Колдонмого <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> параметрин колдонууга тыюу салынды"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Колдонмо жеке жана каржы маалыматыңызга коркунуч жаратышы мүмкүн болгон купуя маалыматты көрүүгө уруксат сурады.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Мындай уруксатсыз колдонмо ойдогудай иштебей коюшу мүмкүн. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Мүмкүнчүлүк берүү жөнүндө кеңири маалымат&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Колдонмого демейки <xliff:g id="ROLE_NAME">%1$s</xliff:g> ролуна тыюу салынды"</string>
diff --git a/PermissionController/res/values-lo/strings.xml b/PermissionController/res/values-lo/strings.xml
index e4f104116..abb4da480 100644
--- a/PermissionController/res/values-lo/strings.xml
+++ b/PermissionController/res/values-lo/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> ເຂົ້າເຖິງແອັບນີ້ຢູ່ <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ເບິ່ງສິດອະນຸຍາດ <xliff:g id="APP">%1$s</xliff:g> ທັງໝົດ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ເບິ່ງແອັບທັງໝົດທີ່ມີສິດອະນຸຍາດນີ້"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ຂໍ້ມູນ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ການຕັ້ງຄ່າ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"ສະແດງການໃຊ້ໄມໂຄຣໂຟນຂອງຜູ້ຊ່ວຍ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ການຕັ້ງຄ່າແອັບທີ່ບໍ່ໄດ້ໃຊ້"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ລຶບສິດອະນຸຍາດຫາກບໍ່ໄດ້ໃຊ້ແອັບ"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ການເປີດລິ້ງ"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ຄ່າເລີ່ມຕົ້ນສຳລັບບ່ອນເຮັດວຽກ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ຄ່າເລີ່ມຕົ້ນສຳລັບພື້ນທີ່ສ່ວນບຸກຄົນ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ໄດ້ຮັບການເພີ່ມປະສິດທິພາບສຳລັບອຸປະກອນ"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ອື່ນໆ"</string>
<string name="default_app_none" msgid="9084592086808194457">"ບໍ່ມີ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ຄ່າເລີ່ມຕົ້ນຂອງລະບົບ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ບໍ່ມີແອັບ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ຕ້ອງການອັບໂຫລດຂໍ້ມູນການດີບັກ."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ແບ່ງປັນຂໍ້ມູນການດີບັກບໍ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ລະບົບກວດພົບບັນຫາ."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍໃຫ້ອັບໂຫລດລາຍງານຂໍ້ຜິດພາດຈາກອຸປະກອນນີ້ຖືກບັນທຶກມາເມື່ອ <xliff:g id="DATE">%2$s</xliff:g> ເວລາ <xliff:g id="TIME">%3$s</xliff:g>. ລາຍງານຂໍ້ຜິດພາດຕ່າງໆຈະຮວມເອົາຂໍ້ມູນສ່ວນຕົວກ່ຽວກັບອຸປະກອນຂອງທ່ານ ຫຼື ຂໍ້ມູນທີ່ຈັດເກັບໄວ້ໂດຍແອັບ, ຕົວຢ່າງ ເຊັ່ນ: ຊື່ຜູ້ໃຊ້, ຂໍ້ມູນສະຖານທີ່, ຕົວລະບຸອຸປະກອນ ແລະ ຂໍ້ມູນເຄືອຂ່າຍ. ກະລຸນາແບ່ງປັນລາຍງານຂໍ້ຜິດພາດໃຫ້ສະເພາະຄົນ ແລະ ແອັບທີ່ທ່ານເຊື່ອຖືໃຫ້ເຂົ້າເຖິງຂໍ້ມູນນີ້ໄດ້ເທົ່ານັ້ນ. ອະນຸຍາດໃຫ້ <xliff:g id="APP_NAME_1">%4$s</xliff:g> ອັບໂຫລດລາຍງານຂໍ້ຜິດພາດບໍ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"ເກີດບັນຫາໃນການປະມວນຜົນລາຍງານຂໍ້ຜິດພາດສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>. ດັ່ງນັ້ນການແບ່ງປັນຂໍ້ມູນການດີບັກແບບລະອຽດຈຶ່ງຖືກປະຕິເສດ. ຂໍອະໄພສຳລັບການລົບກວນດັ່ງກ່າວ."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ອະນຸຍາດ"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ປະຕິເສດ"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"ອະນຸຍາດການຕັ້ງຄ່າທີ່ຈຳກັດ"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ການຕັ້ງຄ່າທີ່ຈຳກັດ"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ຕອນນີ້ຈຶ່ງບໍ່ສາມາດໃຊ້ການຕັ້ງຄ່ານີ້ໄດ້."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ການດຳເນີນການບໍ່ພ້ອມນຳໃຊ້ໃນຂະນະທີ່ກຳລັງໂທລະສັບ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ສະແກມເມີມັກຈະຮ້ອງຂໍການດຳເນີນການປະເພດນີ້ໃນລະຫວ່າງການສົນທະນາທາງໂທລະສັບ, ດັ່ງນັ້ນລະບົບຈຶ່ງບລັອກໄວ້ເພື່ອປົກປ້ອງທ່ານ. ຫາກມີຄົນທີ່ທ່ານບໍ່ຮູ້ຈັກບອກໃຫ້ທ່ານດຳເນີນການດັ່ງກ່າວ, ນັ້ນອາດເປັນສະແກມ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ບໍ່ອະນຸຍາດໃຫ້ແອັບຕິດຕັ້ງແອັບອື່ນໆໃນລະຫວ່າງການໂທລະສັບ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ບໍ່ອະນຸຍາດໃຫ້ແອັບມີສິດເຂົ້າເຖິງການຊ່ວຍເຂົ້າເຖິງໃນລະຫວ່າງການໂທລະສັບ."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ບໍ່ອະນຸຍາດການເປີດການນຳໃຊ້ການຕັ້ງຄ່ານີ້ໃນລະຫວ່າງການໂທລະສັບ."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ບໍ່ສາມາດດຳເນີນການໃຫ້ສຳເລັດໄດ້ໃນລະຫວ່າງການໂທ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"ແອັບຖືກປະຕິເສດສິດເຂົ້າເຖິງຫາ <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ແອັບໄດ້ຮ້ອງຂໍການສິດເຖິງການອະນຸຍາດທີ່ລະອຽດອ່ອນ ເຊິ່ງສາມາດເຮັດໃຫ້ຂໍ້ມູນສ່ວນຕົວ ແລະ ຂໍ້ມູນການເງິນຂອງທ່ານມີຄວາມສ່ຽງ.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ມັນເປັນໄປໄດ້ວ່າແອັບດັ່ງກ່າວຈະບໍ່ເຮັດວຽກຢ່າງຖືກຕ້ອງໂດຍບໍ່ມີການອະນຸຍາດທີ່ຖືກຈຳກັດໄວ້ນີ້. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ສຶກສາວິທີອະນຸຍາດສິດເຂົ້າເຖິງ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ແອັບຖືກປະຕິເສດສິດເຂົ້າເຖິງໃຫ້ເປັນ <xliff:g id="ROLE_NAME">%1$s</xliff:g> ຄ່າເລີ່ມຕົ້ນ"</string>
diff --git a/PermissionController/res/values-lt/strings.xml b/PermissionController/res/values-lt/strings.xml
index 1dad58494..d834afa18 100644
--- a/PermissionController/res/values-lt/strings.xml
+++ b/PermissionController/res/values-lt/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g> prieiga šiai programai „<xliff:g id="DEVICE_NAME">%2$s</xliff:g>“"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Žr. visus „<xliff:g id="APP">%1$s</xliff:g>“ leidimus"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Žr. visas programas, kurioms suteiktas šis leidimas"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacija"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Nustatymai"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Rodyti Padėjėjo mikrofono naudojimą"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nenaudojamos programos nustatymai"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Pašalinti leidimus, jei programa nenaudojama"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Nuorodų atidarymas"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Numatytosios darbo programos"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Privačios erdvės numatytosios programos"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizuota pagal įrenginį"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Kita"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nėra"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sistemos numatytoji programa)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nėra programų"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ norėtų įkelti derinimo informaciją."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Bendrinti derinimo duomenis?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistemoje aptikta problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Programa „<xliff:g id="APP_NAME_0">%1$s</xliff:g>“ prašo iš šio įrenginio įkelti pranešimą apie riktą, užfiksuotą <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. Į pranešimus apie riktus įtraukiama asmens informacija apie įrenginį arba programų į žurnalą įrašyta informacija, pavyzdžiui, naudotojų vardai, vietovių duomenys, įrenginių identifikatoriai ir tinklo informacija. Pranešimus apie riktus bendrinkite tik su tais žmonėmis ir programomis, kuriais pasitikite ir kuriems galite patikėti šią informaciją. Leisti programai „<xliff:g id="APP_NAME_1">%4$s</xliff:g>“ įkelti pranešimą apie riktą?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Apdorojant „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimą apie riktą įvyko klaida, todėl išsamių derinimo duomenų bendrinimas buvo atmestas. Atsiprašome už nepatogumus."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Leisti"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Atmesti"</string>
@@ -588,7 +589,7 @@
<string name="privacy_controls_qs" msgid="5780144882040591169">"Jūsų privatumo valdikliai"</string>
<string name="security_settings_button_label_qs" msgid="8280343822465962330">"Daugiau nustatymų"</string>
<string name="camera_toggle_label_qs" msgid="3880261453066157285">"Prieiga prie fotoaparato"</string>
- <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Prieiga prie mikrofono"</string>
+ <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Mikrofonas"</string>
<string name="permissions_removed_qs" msgid="8957319130625294572">"Leidimas pašalintas"</string>
<string name="camera_usage_qs" msgid="4394233566086665994">"Žr. pastarąjį vaizdo kameros naudojimą"</string>
<string name="microphone_usage_qs" msgid="8527666682168170417">"Žr. pastarąjį mikrofono naudojimą"</string>
@@ -629,7 +630,7 @@
<string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"Prieiga pakeista"</string>
<string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"Žr. pastarąjį vietovės nustatymo funkcijos naudojimą"</string>
<string name="privacy_controls_title" msgid="7605929972256835199">"Privatumo valdikliai"</string>
- <string name="camera_toggle_title" msgid="1251201397431837666">"Prieiga prie fotoaparato"</string>
+ <string name="camera_toggle_title" msgid="1251201397431837666">"Fotoaparatas"</string>
<string name="mic_toggle_title" msgid="2649991093496110162">"Prieiga prie mikrofono"</string>
<string name="perm_toggle_description" msgid="7801326363741451379">"Skirta programoms ir paslaugoms"</string>
<string name="mic_toggle_description" msgid="9163104307990677157">"Skirta programoms ir paslaugoms. Jei šis nustatymas išjungtas, mikrofono duomenys vis tiek gali būti bendrinami, skambinant pagalbos numeriu."</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Leisti apribotus nustatymus"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Apribotas nustatymas"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Šis nustatymas šiuo metu nepasiekiamas dėl jūsų saugumo."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Veiksmas nepasiekiamas vykstant pokalbiui telefonu"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Aferistai dažnai prašo atlikti tokio tipo veiksmus vykstant telefono skambučiui, todėl šis veiksmas blokuojamas siekiant jus apsaugoti. Jei nepažįstamas asmuo prašo atlikti šį veiksmą, tai gali būti sukčiavimas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Vykstant telefono skambučiui programoms neleidžiama suteikti leidimo įdiegti kitas programas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Vykstant telefono skambučiui programai neleidžiama suteikti prieigos prie pritaikomumo paslaugos."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Vykstant telefono skambučiui neleidžiama įgalinti šio nustatymo."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Nepavyko atlikti veiksmo per skambutį"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Programai prieiga nesuteikta:<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Programa pateikė leidimo pasiekti neskelbtiną informaciją, dėl kurio gali kilti pavojus jūsų asmens ir finansinei informacijai, užklausą.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Gali būti, kad be šio apriboto leidimo programa neveiks tinkamai. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Sužinokite, kaip suteikti prieigą&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Programai nesuteikta prieiga kaip numatytojo šio vaidmens: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml
index cec314759..2f3b68abd 100644
--- a/PermissionController/res/values-lv/strings.xml
+++ b/PermissionController/res/values-lv/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Šai lietotnei ir piešķirta piekļuves atļauja “<xliff:g id="PERM">%1$s</xliff:g>” šajā ierīcē: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Skatīt visas lietotnei <xliff:g id="APP">%1$s</xliff:g> piešķirtās atļaujas"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Skatīt visas lietotnes, kam ir šī atļauja"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informācija"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Iestatījumi"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Rādīt Asistenta mikrofona lietojumu"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Neizmantoto lietotņu iestatījumi"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Noņemt atļaujas, ja lietotne netiek izmantota"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Saišu atvēršana"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Noklusējuma iestatījums darbam"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Noklusējums privātajai telpai"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizētas ierīcei"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Citas"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nav"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sistēmas noklusējums)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nav lietotņu"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vēlas augšupielādēt atkļūdošanas informāciju."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vai kopīgot atkļūdošanas datus?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistēmā tika konstatēta problēma."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pieprasa augšupielādēt kļūdas pārskatu no šīs ierīces, kas veikts: <xliff:g id="DATE">%2$s</xliff:g> plkst. <xliff:g id="TIME">%3$s</xliff:g>. Kļūdu pārskatos ir ietverta personas informācija par jūsu ierīci vai lietotnēs reģistrēta informācija, piemēram, lietotājvārdi, atrašanās vietas dati, ierīču identifikatori un tīkla informācija. Kopīgojiet kļūdu pārskatus tikai ar lietotājiem un lietotnēm, kuriem uzticat šo informāciju. Vai atļaut <xliff:g id="APP_NAME_1">%4$s</xliff:g> augšupielādēt kļūdas pārskatu?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Apstrādājot lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> kļūdas pārskatu, radās problēma. Tāpēc detalizēto atkļūdošanas datu kopīgošana tika liegta. Atvainojiet par traucējumu!"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Atļaut"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Neatļaut"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Atļaut ierobežotos iestatījumus"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ierobežots iestatījums"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Drošības apsvērumu dēļ šis iestatījums pašlaik nav pieejams."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Darbība nav pieejama tālruņa zvana laikā"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Šāda veida darbību tālruņa zvana laikā bieži pieprasa krāpnieki, tāpēc šī iespēja ir bloķēta, lai jūs aizsargātu. Ja jums nepazīstama persona jums iesaka veikt šo darbību, tas var būt krāpniecības mēģinājums."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Tālruņa zvana laikā lietotnēm nav atļauts instalēt citas lietotnes."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Tālruņa zvana laikā nav atļauts piešķirt lietotnei piekļuvi pieejamības funkcijām."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Tālruņa zvana laikā nav atļauts iespējot šo iestatījumu."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Nevar pabeigt darbību zvana laikā"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Lietotnes piekļuve atļaujai “<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>” tika liegta"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Lietotne ir pieprasījusi piekļuvi sensitīvai atļaujai, kas var apdraudēt jūsu personas un finanšu informāciju.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Iespējams, lietotne nedarbosies pareizi bez šīs ierobežotās atļaujas. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Uzziniet, kā piešķirt piekļuvi.&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Lietotnes piekļuve noklusējuma lomai “<xliff:g id="ROLE_NAME">%1$s</xliff:g>” tika liegta"</string>
diff --git a/PermissionController/res/values-mk/strings.xml b/PermissionController/res/values-mk/strings.xml
index eae530379..9e58759df 100644
--- a/PermissionController/res/values-mk/strings.xml
+++ b/PermissionController/res/values-mk/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Пристап до <xliff:g id="PERM">%1$s</xliff:g> за апликацијава на <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Прикажи ги сите дозволи за <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Прикажи ги сите апликации со оваа дозвола"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Информации"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Поставки"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Прикажи го користењето на микрофонот на „Помошникот“"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Поставки за некористени апликации"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Отстрани ги дозволите ако апликацијата не се користи"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"За отворање линкови"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Стандардно за работа"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Стандардно за „Приватен простор“"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Оптимизирано за уредот"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Други"</string>
<string name="default_app_none" msgid="9084592086808194457">"Нема"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Стандардно за системот)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Нема апликации"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> сака да прикачи информации за отстранување грешки."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Да се споделат податоци за отстранување грешки?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Системот откри проблем."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> бара да прикачи извештај за грешка од уредов снимен на <xliff:g id="DATE">%2$s</xliff:g> во <xliff:g id="TIME">%3$s</xliff:g>. Извештаите за грешки вклучуваат лични податоци за вашиот уред или пак податоци евидентирани од апликациите, на пр., кориснички имиња, податоци за локацијата, идентификатори на уредот и податоци за мрежата. Споделувајте извештаи за грешки само со луѓе и апликации во кои имате доверба кога станува збор за овие податоци. Да ѝ се дозволи на <xliff:g id="APP_NAME_1">%4$s</xliff:g> да прикачи извештај за грешка?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Настана грешка при обработката на извештајот за грешки за <xliff:g id="APP_NAME">%1$s</xliff:g>. Затоа е одбиено споделувањето на податоците за отстранување грешки. Се извинуваме за прекинот."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Дозволи"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Одбиј"</string>
@@ -628,7 +629,7 @@
<string name="safety_center_background_location_access_reminder_summary" msgid="7431657777510537658">"Апликацијава може секогаш да пристапува до вашата локација, дури и кога е затворена.\n\nНа одредени апликации за безбедност и итни случаи им е потребен пристап до вашата локација во заднината за правилно да функционираат."</string>
<string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"Пристапот е променет"</string>
<string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"Погледнете го неодамнешното користење на локацијата"</string>
- <string name="privacy_controls_title" msgid="7605929972256835199">"Контроли на приватноста"</string>
+ <string name="privacy_controls_title" msgid="7605929972256835199">"Контроли за приватност"</string>
<string name="camera_toggle_title" msgid="1251201397431837666">"Пристап до камерата"</string>
<string name="mic_toggle_title" msgid="2649991093496110162">"Пристап до микрофонот"</string>
<string name="perm_toggle_description" msgid="7801326363741451379">"За апликации и услуги"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Дозволете ограничени поставки"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ограничена поставка"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"За ваша безбедност, поставкава е недостапна во моментов."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Дејството не е достапно при телефонски повик"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Измамниците често бараат ваков тип дејства при телефонските разговори, па блокирано е за да ве заштити. Ако некој што не го познавате ве води да го преземете дејствово, тоа може да биде измама."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Дозволувањето апликациите да инсталираат други апликации е оневозможено при телефонски повик."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Не е дозволено давање пристап до пристапноста на апликацијата при телефонски повик."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Овозможувањето на поставкава не е дозволено при телефонски повик."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Дејството не може да се заврши во тек на повик"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Барањето за пристап на апликацијата до <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> е одбиено"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Апликацијата побара пристап до дозвола за чувствителни податоци што може да ја загрози безбедноста на вашите лични и финансиски податоци.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Можно е апликацијата да не функционира правилно без ограниченава дозвола. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Дознајте како да дозволите пристап&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Барањето на апликацијата да биде стандарднa <xliff:g id="ROLE_NAME">%1$s</xliff:g> е одбиено"</string>
diff --git a/PermissionController/res/values-ml/strings.xml b/PermissionController/res/values-ml/strings.xml
index d8a2f29b2..faea71c93 100644
--- a/PermissionController/res/values-ml/strings.xml
+++ b/PermissionController/res/values-ml/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> എന്നതിലെ ഈ ആപ്പിനുള്ള <xliff:g id="PERM">%1$s</xliff:g> ആക്സസ്"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"എല്ലാ <xliff:g id="APP">%1$s</xliff:g> അനുമതികളും കാണുക"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ഈ അനുമതിയുള്ള എല്ലാ ആപ്പുകളും കാണുക"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"വിവരങ്ങൾ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ക്രമീകരണം"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"സഹായ മൈക്രോഫോൺ ഉപയോഗം കാണിക്കുക"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ഉപയോഗിക്കാത്ത ആപ്പ് ക്രമീകരണം"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ഉപയോഗിക്കാത്ത ആപ്പാണെങ്കിൽ അനുമതികൾ നീക്കം ചെയ്യുക"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ലിങ്കുകൾ തുറക്കൽ"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ജോലി ആവശ്യങ്ങൾക്ക് ഡിഫോൾട്ട്"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"സ്വകാര്യ സ്പേസിനായുള്ള ഡിഫോൾട്ട്"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ഉപകരണത്തിനായി ഒപ്റ്റിമൈസ് ചെയ്‌തു"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"മറ്റുള്ളവ"</string>
<string name="default_app_none" msgid="9084592086808194457">"ഒന്നുമില്ല"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(സിസ്‌റ്റം ഡിഫോൾട്ട്)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ആപ്പുകൾ ഒന്നുമില്ല"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"ഡീബഗ്ഗ് ചെയ്യൽ വിവരങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ <xliff:g id="APP_NAME">%1$s</xliff:g> താൽപ്പര്യപ്പെടുന്നു."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ഡീബഗ്ഗ് ചെയ്യൽ ഡാറ്റ പങ്കിടണോ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"സിസ്‌റ്റം ഒരു പ്രശ്‌നം കണ്ടെത്തി."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"ഈ ഉപകരണത്തിൽ നിന്ന് <xliff:g id="DATE">%2$s</xliff:g>-ന് <xliff:g id="TIME">%3$s</xliff:g>-ന് എടുത്ത ഒരു ബഗ് റിപ്പോർട്ട് അപ്‌ലോഡ് ചെയ്യാൻ <xliff:g id="APP_NAME_0">%1$s</xliff:g> അഭ്യർത്ഥിക്കുന്നു. നിങ്ങളുടെ ഉപകരണത്തെക്കുറിച്ചുള്ള വ്യക്തിപരമായ വിവരങ്ങളോ ആപ്പുകൾ ലോഗ് ചെയ്യുമ്പോൾ നൽകുന്ന വിവരമോ, ഉദാഹരണത്തിന് നെറ്റ്‌വർക്ക് വിവരങ്ങൾ, ഉപകരണ ഐഡന്റിഫയറുകൾ, ലൊക്കേഷൻ ഡാറ്റ, ഉപയോക്തൃനാമങ്ങൾ എന്നിവ ബഗ് റിപ്പോർട്ടുകളിൽ ഉൾപ്പെടുന്നു. ഈ വിവരം ഉപയോഗിച്ച് നിങ്ങൾ വിശ്വസിക്കുന്ന ആപ്പുകൾക്കും ആളുകൾക്കും മാത്രം ബഗ് റിപ്പോർട്ടുകൾ പങ്കിടുക. <xliff:g id="APP_NAME_1">%4$s</xliff:g> എന്നതിനെ ഒരു ബഗ് റിപ്പോർട്ട് അപ്‌ലോഡ് ചെയ്യാൻ അനുവദിക്കണോ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്ന ആപ്പിൻ്റെ ബഗ് റിപ്പോർട്ട് പ്രോസസ് ചെയ്യുന്നതിൽ ഒരു പിശകുണ്ടായി. അതിനാൽ വിശദമായ ഡീബഗ്ഗ് ചെയ്യൽ ഡാറ്റ പങ്കിടുന്നത് തടഞ്ഞു. തടസ്സം നേരിട്ടതിൽ ഖേദിക്കുന്നു."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"അനുവദിക്കുക"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"നിരസിക്കുക"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"നിയന്ത്രിത ക്രമീകരണം അനുവദിക്കുക"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"നിയന്ത്രിത ക്രമീകരണം"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഈ ക്രമീകരണം നിലവിൽ ലഭ്യമല്ല."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ഫോൺ കോളിനിടെ പ്രവർത്തനം ലഭ്യമല്ല"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ഫോൺ കോൾ സംഭാഷണത്തിനിടെ സ്‌കാമർമാർ പലപ്പോഴും ഇത്തരത്തിലുള്ള പ്രവർത്തനം അഭ്യർത്ഥിക്കാറുണ്ട്, അതിനാൽ നിങ്ങളെ പരിരക്ഷിക്കുന്നതിനായി ഇത് ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു. പരിചയമില്ലാത്ത ആരെങ്കിലുമാണ് ഈ പ്രവർത്തനം നിങ്ങളോട് നിർദ്ദേശിക്കുന്നതെങ്കിൽ, അതൊരു സ്കാം ആയേക്കാം."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ഫോൺ കോളിനിടെ മറ്റ് ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാനുള്ള അനുവാദം ആപ്പുകൾക്കില്ല."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ഒരു ഫോൺ കോളിനിടെ ആപ്പിന് ഉപയോഗസഹായിലേക്ക് ആക്‌സസ് നൽകുന്നത് അനുവദനീയമല്ല."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ഫോൺ കോളിനിടെ ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുന്നത് അനുവദനീയമല്ല."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"കോളിനിടെ പ്രവർത്തനം പൂർത്തിയാക്കാനാവില്ല"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"ആപ്പിന് <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> എന്നതിലേക്കുള്ള ആക്‌സസ് നിരസിച്ചു"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ആപ്പ് സെൻസിറ്റീവ് വിവരങ്ങൾക്കുള്ള അനുമതിയിലേക്ക് ആക്‌സസ് അഭ്യർത്ഥിച്ചു, ഇത് നിങ്ങളുടെ വ്യക്തിപരവും സാമ്പത്തികവുമായ വിവരങ്ങളെ അപകടത്തിലാക്കിയേക്കാം.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ഈ നിയന്ത്രിത അനുമതിയില്ലാതെ ആപ്പ് ശരിയായി പ്രവർത്തിച്ചേക്കില്ല. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ആക്സസ് എങ്ങനെ അനുവദിക്കുന്നുവെന്നറിയുക&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ആപ്പിന് ഡിഫോൾട്ട് <xliff:g id="ROLE_NAME">%1$s</xliff:g> ആകാനുള്ള ആക്‌സസ് നിരസിച്ചു"</string>
diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml
index fc08b4b3a..7ccda556a 100644
--- a/PermissionController/res/values-mn/strings.xml
+++ b/PermissionController/res/values-mn/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> дээрх энэ аппын <xliff:g id="PERM">%1$s</xliff:g>-д хандах эрх"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g>-н бүх зөвшөөрлийг харах"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Энэ зөвшөөрөлтэй бүх аппыг харах"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Мэдээлэл"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Тохиргоо"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Туслах микрофон ашиглалтыг харуулах"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ашиглаагүй аппын тохиргоо"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Аппыг ашигладаггүй бол зөвшөөрлийг нь хасах"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Холбоосыг нээх сонголт"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Ажлын өгөгдмөл апп"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Хаалттай орон зайн өгөгдмөл"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Төхөөрөмжид зориулж оновчилсон"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Бусад"</string>
<string name="default_app_none" msgid="9084592086808194457">"Тохируулсан апп алга"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Системийн өгөгдмөл)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Апп алга"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> алдаа засах мэдээллийг байршуулах хүсэлтэй байна."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Дебаг хийх өгөгдлийг хуваалцах уу?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Систем асуудал илрүүллээ."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> энэ төхөөрөмжөөс <xliff:g id="DATE">%2$s</xliff:g>-н <xliff:g id="TIME">%3$s</xliff:g>-д авсан алдааны мэдээг байршуулах хүсэлт тавьж байна. Алдааны мэдээнд таны төхөөрөмжийн талаарх эсвэл хэрэглэгчийн нэр, байршлын өгөгдөл, төхөөрөмжийн танигч болон сүлжээний мэдээлэл зэрэг аппуудын бүртгэсэн хувийн мэдээллийг агуулна. Та алдааны мэдээг зөвхөн энэ мэдээллийг хуваалцахдаа итгэлтэй байгаа хүмүүс болон аппуудтай хуваалцана уу. <xliff:g id="APP_NAME_1">%4$s</xliff:g>-д алдааны мэдээг байршуулахыг зөвшөөрөх үү?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н алдааны мэдээг боловсруулахад алдаа гарсан тул алдаа засах дэлгэрэнгүй өгөгдлийг хуваалцахаас татгалзлаа. Төвөг удсанд хүлцэл өчье."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Зөвшөөрөх"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Татгалзах"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Хязгаарлагдсан тохиргоог зөвшөөрөх"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Хязгаарлагдсан тохиргоо"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Таны аюулгүй байдлын үүднээс энэ тохиргоо одоогоор боломжгүй байна."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Утасны дуудлага хийж байхад үйлдэл хийх боломжгүй"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Залилагчид утасны дуудлагын харилцан ярианы үеэр ийм төрлийн үйлдлийг ихэвчлэн хүсдэг тул таныг хамгаалахаар уг үйлдлийг блоклосон. Хэрэв таны танихгүй хүн ийм үйлдэл хийлгэхээр таныг чиглүүлж байгаа бол энэ нь заль мэх байж болно."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Утасны дуудлагын үеэр аппуудад бусад апп суулгахыг зөвшөөрдөггүй."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Утасны дуудлагын үеэр аппад хандалтад хандах эрх өгөхийг зөвшөөрдөггүй."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Утасны дуудлагын үеэр энэ тохиргоог идэвхжүүлэхийг зөвшөөрдөггүй."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Дуудлагын үеэр үйлдэл гүйцэтгэх боломжгүй"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Аппад <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>-д хандах эрх олгохоос татгалзсан"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Апп нь таны хувийн болон санхүүгийн мэдээллийг эрсдэлд оруулж болох эмзэг зөвшөөрөлд хандах эрх хүссэн.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Энэ хязгаарлагдмал зөвшөөрөлгүйгээр уг апп зохих ёсоор ажиллахгүй байх боломжтой. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Хандах эрхийг хэрхэн зөвшөөрөх талаар мэдэж авах&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Аппад өгөгдмөл <xliff:g id="ROLE_NAME">%1$s</xliff:g> болох эрх олгохоос татгалзсан"</string>
diff --git a/PermissionController/res/values-mr-television/strings.xml b/PermissionController/res/values-mr-television/strings.xml
index 4d6abe830..7184f2b1e 100644
--- a/PermissionController/res/values-mr-television/strings.xml
+++ b/PermissionController/res/values-mr-television/strings.xml
@@ -19,7 +19,7 @@
<string name="grant_dialog_button_deny_dont_ask_again" msgid="747769682501286250">"नकार द्या आणि पुन्हा विचारू नका"</string>
<string name="grant_dialog_how_to_change" msgid="997462845048160559">"तुम्ही हे नंतर सेटिंग्ज आणि अ‍ॅप्स मध्ये बदलू शकता"</string>
<string name="current_permission_template" msgid="6240787325714651204">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
- <string name="preference_show_system_apps" msgid="4262140518693221093">"सिस्टम अ‍ॅप्स दाखवा"</string>
+ <string name="preference_show_system_apps" msgid="4262140518693221093">"सिस्टीम ॲप्स दाखवा"</string>
<string name="app_permissions_decor_title" msgid="7438716722786036814">"अ‍ॅप परवानग्या"</string>
<string name="manage_permissions_decor_title" msgid="4138423885439613577">"अ‍ॅप परवानग्या"</string>
<string name="permission_apps_decor_title" msgid="2811550489429789828">"<xliff:g id="PERMISSION">%1$s</xliff:g> परवानग्या"</string>
diff --git a/PermissionController/res/values-mr-watch/strings.xml b/PermissionController/res/values-mr-watch/strings.xml
index 77d7ee44a..261296356 100644
--- a/PermissionController/res/values-mr-watch/strings.xml
+++ b/PermissionController/res/values-mr-watch/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5709879604352260492">"नकार द्या, पुन्हा विचारू नका"</string>
<string name="current_permission_template" msgid="6634462553790549887">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
- <string name="preference_show_system_apps" msgid="1055740303992024300">"सिस्टम अ‍ॅप्स दाखवा"</string>
+ <string name="preference_show_system_apps" msgid="1055740303992024300">"सिस्टीम ॲप्स दाखवा"</string>
<string name="permission_summary_enforced_by_policy" msgid="2352478756952948019">"बदलू शकत नाही"</string>
<string name="generic_yes" msgid="2489207724988649846">"होय"</string>
<string name="generic_cancel" msgid="2631708607129269698">"रद्द करा"</string>
diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml
index 688f31707..0f7759d26 100644
--- a/PermissionController/res/values-mr/strings.xml
+++ b/PermissionController/res/values-mr/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"या अ‍ॅपसाठी <xliff:g id="DEVICE_NAME">%2$s</xliff:g> वरील <xliff:g id="PERM">%1$s</xliff:g> चा अ‍ॅक्सेस"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"सर्व <xliff:g id="APP">%1$s</xliff:g> परवानग्या पहा"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ही परवानगी असलेली सर्व अ‍ॅप्स पहा"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"माहिती"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"सेटिंग्ज"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant ने मायक्रोफोनचा केलेला वापर दाखवा"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"न वापरलेली ॲप सेटिंग्ज"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"अ‍ॅप वापरले नसल्यास, परवानग्या काढून टाका"</string>
@@ -422,9 +420,9 @@
<string name="phone_call_uses_microphone" msgid="233569591461187177">"मायक्रोफोन &lt;b&gt;फोन कॉल&lt;/b&gt; मध्ये वापरत आहे"</string>
<string name="phone_call_uses_microphone_and_camera" msgid="6291898755681748189">"कॅमेरा आणि मायक्रोफोन &lt;b&gt;व्हिडिओ कॉल&lt;/b&gt; मध्ये वापरत आहे"</string>
<string name="phone_call_uses_camera" msgid="2048417022147857418">"कॅमेरा &lt;b&gt;व्हिडिओ कॉल&lt;/b&gt; मध्ये वापरत आहे"</string>
- <string name="system_uses_microphone" msgid="576672130318877143">"सिस्टम सेवा वापरून मायक्रोफोन ॲक्सेस करत आहे"</string>
- <string name="system_uses_microphone_and_camera" msgid="5124478304275138804">"सिस्टम सेवा वापरून कॅमेरा आणि मायक्रोफोन ॲक्सेस करत आहे"</string>
- <string name="system_uses_camera" msgid="1911223105234441470">"सिस्टम सेवा वापरून कॅमेरा ॲक्सेस करत आहे"</string>
+ <string name="system_uses_microphone" msgid="576672130318877143">"सिस्टीम सेवा वापरून मायक्रोफोन ॲक्सेस करत आहे"</string>
+ <string name="system_uses_microphone_and_camera" msgid="5124478304275138804">"सिस्टीम सेवा वापरून कॅमेरा आणि मायक्रोफोन ॲक्सेस करत आहे"</string>
+ <string name="system_uses_camera" msgid="1911223105234441470">"सिस्टीम सेवा वापरून कॅमेरा ॲक्सेस करत आहे"</string>
<string name="other_use" msgid="6564855051022776692">"इतर वापर:"</string>
<string name="ongoing_usage_dialog_ok" msgid="103556809118460072">"समजले"</string>
<string name="ongoing_usage_dialog_title" msgid="683836493556628569">"<xliff:g id="TYPES_LIST">%s</xliff:g> चा अलीकडील वापर"</string>
@@ -442,8 +440,10 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"उघडणार्‍या लिंक"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"कार्यासाठी डीफॉल्ट"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"खाजगी स्पेससाठी डीफॉल्ट"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ऑप्टिमाइझ केलेले डिव्हाइस"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"इतर"</string>
<string name="default_app_none" msgid="9084592086808194457">"काहीही नाही"</string>
- <string name="default_app_system_default" msgid="6218386768175513760">"(सिस्टम डीफॉल्ट)"</string>
+ <string name="default_app_system_default" msgid="6218386768175513760">"(सिस्टीम डीफॉल्ट)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"अ‍ॅप्स नाहीत"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"इतर NFC सेवा"</string>
<string name="car_default_app_selected" msgid="5416420830430644174">"निवडले"</string>
@@ -460,14 +460,15 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ला डीबगिंग माहिती अपलोड करायला आवडेल."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"डीबगिंग डेटा शेअर करायचा आहे का?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"सिस्टममध्ये समस्या आली"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> <xliff:g id="DATE">%2$s</xliff:g> रोजी <xliff:g id="TIME">%3$s</xliff:g> वाजता घेतलेल्या या डिव्हाइसमधून बग रिपोर्ट अपलोड करण्याची विनंती करत आहे. बग रिपोर्टमध्ये तुमच्या डिव्हाइसविषयीच्या किंवा अ‍ॅप्सने लॉग केलेल्या वैयक्तिक माहितीचा समावेश अहे, उदाहरणार्थ वापरकर्ता नावे, स्थान डेटा, डिव्हाइस आयडेंटिफायर आणि नेटवर्क माहिती. या माहितीसह फक्त तुम्हाला विश्वास असलेल्या लोकांसह आणि अ‍ॅप्ससह बग रिपोर्ट शेअर करा. <xliff:g id="APP_NAME_1">%4$s</xliff:g> ला बग रिपोर्ट अपलोड करण्याची अनुमती द्यायची का?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> च्या बग रिपोर्टवर प्रक्रिया करताना एरर आली. त्यामुळे तपशीलवार डीबगिंग डेटा शेअर करणे नाकारले गेले आहे. व्यत्ययाबद्दल क्षमस्व."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"अनुमती द्या"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"नकार द्या"</string>
<string name="adjust_user_sensitive_title" msgid="4196724451314280527">"प्रगत सेटिंग्ज"</string>
<string name="menu_adjust_user_sensitive" msgid="6497923610654425780">"प्रगत सेटिंग्ज"</string>
- <string name="adjust_user_sensitive_globally_title" msgid="8649190949066029174">"सिस्टम अ‍ॅपचा वापर दाखवा"</string>
- <string name="adjust_user_sensitive_globally_summary" msgid="129467818433773912">"स्टेटस बार, डॅशबोर्ड आणि इतरत्र परवानग्यांसाठी सिस्टम अ‍ॅपचा वापर दाखवा"</string>
+ <string name="adjust_user_sensitive_globally_title" msgid="8649190949066029174">"सिस्टीम ॲपचा वापर दाखवा"</string>
+ <string name="adjust_user_sensitive_globally_summary" msgid="129467818433773912">"स्टेटस बार, डॅशबोर्ड आणि इतरत्र परवानग्यांसाठी सिस्टीम ॲपचा वापर दाखवा"</string>
<string name="adjust_user_sensitive_per_app_header" msgid="4543506440989005648">"पुढील गोष्टींचा वापर ठळक करा"</string>
<string name="assistant_record_audio_user_sensitive_title" msgid="5532123360322362378">"असिस्टंट ट्रिगर डिटेक्शन दाखवा"</string>
<string name="assistant_record_audio_user_sensitive_summary" msgid="6482937591816401619">"व्हॉइस असिस्टंट अ‍ॅक्टिव्हेट करण्यासाठी मायक्रोफोन वापरला जाईल तेव्हा स्टेटस बारमध्ये आयकन दाखवा"</string>
@@ -546,7 +547,7 @@
<string name="auto_granted_permission_notification_body" msgid="5040234389205471318">"तुमची संस्था <xliff:g id="APP_NAME">%1$s</xliff:g> ला तुमचे स्थान अ‍ॅक्सेस करण्याची अनुमती देते"</string>
<string name="other_permissions_label" msgid="8986184335503271992">"इतर परवानग्या"</string>
<string name="not_used_permissions_label" msgid="3939839426115141264">"सिस्टमद्वारे वापरल्या जाणाऱ्या परवानग्या"</string>
- <string name="not_used_permissions_description" msgid="7595514824169388718">"फक्त सिस्टम ॲप्लिकेशनद्वारे वापरल्या जाणाऱ्या परवानग्या."</string>
+ <string name="not_used_permissions_description" msgid="7595514824169388718">"फक्त सिस्टीम ॲप्लिकेशनद्वारे वापरल्या जाणाऱ्या परवानग्या."</string>
<string name="additional_permissions_label" msgid="7693557637462569046">"अतिरिक्त परवानग्या"</string>
<string name="additional_permissions_description" msgid="2186611950890732112">"अ‍ॅप्लिकेशनद्वारे परिभाषित केलेल्या परवानग्या."</string>
<string name="privdash_label_camera" msgid="1426440033626198096">"कॅमेरा"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"प्रतिबंधित सेटिंग्जना अनुमती द्या"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"प्रतिबंधित सेटिंग"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"तुमच्या सुरक्षेसाठी, हे सेटिंग सध्या उपलब्ध नाही."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"फोन कॉलवर असताना कृती उपलब्ध नाही"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n फोन कॉल संभाषणांदरम्यान घोटाळेबाज व्यक्ती या प्रकारच्या कृतीची विनंती करतात, यामुळे तुमचे संरक्षण करण्यासाठी ती ब्लॉक केली आहे. तुम्ही ओळखत नसलेल्या एखाद्या व्यक्तीद्वारे तुम्हाला ही कृती करण्यास सांगितले जात असल्यास, तो घोटाळा असू शकतो."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"फोन कॉलदरम्यान ॲप्सना इतर ॲप्स इंस्टॉल करण्याची अनुमती नाही."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"फोन कॉलदरम्यान अ‍ॅपला अ‍ॅक्सेसिबिलिटीचा अ‍ॅक्सेस देण्याची अनुमती नाही."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"फोन कॉलदरम्यान ही सेटिंग सुरू करण्याची अनुमती नाही."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"कॉलदरम्यान कृती पूर्ण करू शकत नाही"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"अ‍ॅपचा <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> साठीचा अ‍ॅक्सेस नाकारला गेला आहे"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ॲपने संवेदनशील परवानगीसाठी अ‍ॅक्सेसची विनंती केली आहे, ज्यामुळे तुमची वैयक्तिक आणि आर्थिक माहिती धोक्यात येऊ शकते.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>या प्रतिबंधित परवानगीशिवाय ॲप कदाचित योग्यरीत्या काम करणार नाही. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;अ‍ॅक्सेसला अनुमती कशी द्यावी हे जाणून घ्या&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"अ‍ॅपचा डीफॉल्ट <xliff:g id="ROLE_NAME">%1$s</xliff:g> असण्यासाठीचा अ‍ॅक्सेस नाकारला गेला आहे"</string>
diff --git a/PermissionController/res/values-ms/strings.xml b/PermissionController/res/values-ms/strings.xml
index 2cd37caa0..f58963ef6 100644
--- a/PermissionController/res/values-ms/strings.xml
+++ b/PermissionController/res/values-ms/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"akses <xliff:g id="PERM">%1$s</xliff:g> untuk apl ini pada <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Lihat semua kebenaran <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Lihat semua apl dengan kebenaran ini"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Maklumat"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Tetapan"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Tunjukkan penggunaan mikrofon pembantu"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Tetapan apl yang tidak digunakan"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Alih keluar kebenaran jika apl tidak digunakan"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Membuka pautan"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Lalai untuk kerja"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Lalai untuk ruang privasi"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Dioptimumkan untuk peranti"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Lain-lain"</string>
<string name="default_app_none" msgid="9084592086808194457">"Tiada"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Ciri lalai sistem)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Tiada apl"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> mahu memuat naik maklumat penyahpepijatan."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Kongsi data penyahpepijatan?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem telah mengesan masalah."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> mahu memuat naik laporan pepijat daripada peranti ini yang diambil pada <xliff:g id="DATE">%2$s</xliff:g> pada <xliff:g id="TIME">%3$s</xliff:g>. Laporan pepijat termasuk maklumat peribadi tentang peranti anda atau yang dilog oleh apl, contohnya, nama pengguna, data lokasi, pengecam peranti dan maklumat rangkaian. Kongsi laporan pepijat dengan orang dan apl yang anda percayai sahaja berhubung maklumat ini. Benarkan <xliff:g id="APP_NAME_1">%4$s</xliff:g> memuat naik laporan pepijat?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Ralat telah berlaku semasa memproses laporan pepijat untuk <xliff:g id="APP_NAME">%1$s</xliff:g>. Oleh sebab itu, perkongsian data penyahpepijatan yang terperinci telah ditolak. Kami memohon maaf kerana gangguan ini."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Benarkan"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Tolak"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Benarkan tetapan terhad"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Tetapan terhad"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Untuk keselamatan anda, tetapan ini tidak tersedia pada masa ini."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Tindakan tidak tersedia semasa panggilan telefon"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Penipu sering meminta jenis tindakan ini semasa perbualan panggilan telefon, maka tindakan ini disekat untuk melindungi anda. Jika anda dibimbing untuk mengambil tindakan ini oleh seseorang yang anda tidak kenali, perkara ini mungkin merupakan komplot."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Tindakan membenarkan apl memasang apl lain adalah tidak dibenarkan semasa panggilan telefon."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Tindakan memberikan apl akses kepada kebolehaksesan tidak dibenarkan semasa membuat panggilan telefon."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Tindakan mendayakan tetapan ini tidak dibenarkan semasa membuat panggilan telefon."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Tidak dapat melengkapkan tindakan semasa panggilan"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Akses apl kepada <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> telah ditolak"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Apl meminta akses kepada kebenaran sensitif yang boleh mengakibatkan risiko terhadap maklumat peribadi dan kewangan anda.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Apl tersebut mungkin tidak dapat berfungsi dengan betul tanpa kebenaran terhad ini. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Ketahui cara membenarkan akses&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Akses apl untuk menjadi <xliff:g id="ROLE_NAME">%1$s</xliff:g> lalai telah ditolak"</string>
diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml
index 85297b795..d7cda3434 100644
--- a/PermissionController/res/values-my/strings.xml
+++ b/PermissionController/res/values-my/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> တွင် ဤအက်ပ်အတွက် <xliff:g id="PERM">%1$s</xliff:g> သုံးခွင့်"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> ခွင့်ပြုချက်အားလုံး ကြည့်ရန်"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ဤခွင့်ပြုချက်ရှိသော အက်ပ်အားလုံးကို ကြည့်ရန်"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"အချက်အလက်"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ဆက်တင်များ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant မိုက်ကရိုဖုန်း အသုံးပြုမှုကို ပြပါ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"အသုံးမပြုသော အက်ပ်ဆက်တင်များ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"အက်ပ်ကိုအသုံးမပြုလျှင် ခွင့်ပြုချက်များ ဖယ်ရှားရန်"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"လင့်ခ်များကို ဖွင့်ခြင်း"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"အလုပ်အတွက် မူရင်း"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"သီးသန့်နေရာအတွက် မူလအက်ပ်များ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"စက်အတွက် အကောင်းဆုံးပြင်ထားသည်"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"အခြား"</string>
<string name="default_app_none" msgid="9084592086808194457">"မရှိ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(စနစ်မူရင်း)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"အက်ပ် မရှိပါ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> က အမှားရှာပြင်သည့် အချက်အလက်ကို အပ်လုဒ်လုပ်လိုသည်။"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"အမှားရှာပြင်သည့် ဒေတာ မျှဝေမှာလား။"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"စနစ်သည် ပြဿနာတစ်ခု တွေ့ရှိထားသည်။"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> သည် ဤကိရိယာက <xliff:g id="DATE">%2$s</xliff:g> <xliff:g id="TIME">%3$s</xliff:g> တွင် ရယူထားသည့် ချွတ်ယွင်းမှု အစီရင်ခံစာကို အပ်လုဒ်လုပ်ရန် တောင်းဆိုနေသည်။ ချွတ်ယွင်းမှု အစီရင်ခံစာတွင် သင့်ကိရိယာ သို့မဟုတ် အက်ပ်များဖြင့် အကောင့်ဝင်ရောက်ထားသည့် အသုံးပြုသူအမည်၊ တည်နေရာဒေတာ၊ ကိရိယာ သတ်မှတ်မှုစနစ်များနှင့် ကွန်ရက်အချက်အလက်တို့ကဲ့သို့ ကိုယ်ရေးကိုယ်တာအချက်လက်များ ပါဝင်သည်။ ဤအချက်အလက်နှင့် ပတ်သက်ပြီး သင်ယုံကြည်ရသည့် လူ၊ အက်ပ်များနှင့်သာ ချွတ်ယွင်းမှု အစီရင်ခံစာကို မျှဝေပါ။ <xliff:g id="APP_NAME_1">%4$s</xliff:g> ကို ချွတ်ယွင်းမှု အစီရင်ခံစာ အပ်လုဒ်လုပ်ခွင့်ပေးမလား။"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် ချွတ်ယွင်းမှု အစီရင်ခံစာ လုပ်ဆောင်ရာတွင် အမှားဖြစ်သွားသည်။ ထို့ကြောင့် အသေးစိတ် အမှားရှာပြင်သည့် ဒေတာ မျှဝေခြင်းကို ငြင်းဆိုထားပါသည်။ အနှောင့်အယှက်ဖြစ်သွားသည့်အတွက် ဝမ်းနည်းပါသည်။"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ခွင့်ပြုရန်"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ငြင်းပယ်ရန်"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"ကန့်သတ်ဆက်တင်များ ခွင့်ပြုရန်"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ကန့်သတ်ဆက်တင်"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"သင့်လုံခြုံရေးအတွက် ဤဆက်တင်ကို လောလောဆယ် မရနိုင်ပါ။"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ဖုန်းခေါ်နေစဉ်အတွင်း လုပ်ဆောင်ချက်များ မရနိုင်ပါ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n လူလိမ်များသည် ဤကဲ့သို့ လုပ်ဆောင်ချက်ကို ဖုန်းပြောဆိုနေစဉ်အတွင်း တောင်းဆိုလေ့ရှိကြသောကြောင့် သင့်အား ကာကွယ်ပေးရန် ၎င်းကိုပိတ်ထားသည်။ သင်မသိသော ပုဂ္ဂိုလ်တစ်ဦးဦးက ဤလုပ်ဆောင်ချက်ကို ဆောင်ရွက်ရန် သင့်အားပြောဆိုနေပါက လိမ်လည်မှုဖြစ်နိုင်သည်။"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ဖုန်းခေါ်ဆိုမှုအတွင်း အခြားအက်ပ်များ ထည့်သွင်းရန် အက်ပ်များအား ခွင့်ပြုခြင်းကို လုပ်ခွင့်မပြုပါ။"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ဖုန်းခေါ်ဆိုမှုအတွင်း အက်ပ်တစ်ခုကို အများသုံးနိုင်မှုသုံးခွင့်ပေးခြင်း ခွင့်မပြုပါ။"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ဖုန်းခေါ်ဆိုမှုအတွင်း ဤဆက်တင်ဖွင့်ခြင်း ခွင့်မပြုပါ။"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ခေါ်ဆိုနေစဉ် လုပ်ဆောင်ချက်ကို အပြီးသတ်၍မရပါ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"အက်ပ်ကို <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> သုံးခွင့် ငြင်းပယ်ထားသည်"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"အက်ပ်သည် သင်၏ ပုဂ္ဂိုလ်ရေးနှင့် ငွေကြေးဆိုင်ရာ အချက်အလက်များကို အန္တရာယ်ဖြစ်စေနိုင်သော သတိထားရမည့် ခွင့်ပြုချက်သုံးရန် တောင်းဆိုထားသည်။<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>အက်ပ်သည် ဤကန့်သတ်ထားသော ခွင့်ပြုချက်မရှိပါက ကောင်းစွာမလုပ်ဆောင်ခြင်း ဖြစ်နိုင်သည်။ &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;သုံးခွင့်ပြုနည်းကို လေ့လာရန်&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"အက်ပ်အား မူရင်း <xliff:g id="ROLE_NAME">%1$s</xliff:g> အဖြစ် လုပ်ဆောင်ခွင့် ငြင်းပယ်ထားသည်"</string>
diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml
index 61d7e6cce..fb7871499 100644
--- a/PermissionController/res/values-nb/strings.xml
+++ b/PermissionController/res/values-nb/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g>-tilgang for denne appen på <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Se alle tillatelsene <xliff:g id="APP">%1$s</xliff:g> har"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Se alle apper med denne tillatelsen"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informasjon"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Innstillinger"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Vis bruk av assistentmikrofonen"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Innstillinger for ubrukte apper"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Fjern tillatelser hvis appen ikke brukes"</string>
@@ -442,8 +440,10 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Åpning av linker"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Jobbstandard"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Standard for privat område"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimalisert for enheten"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Andre"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ingen"</string>
- <string name="default_app_system_default" msgid="6218386768175513760">"(System-&amp;shy;standard)"</string>
+ <string name="default_app_system_default" msgid="6218386768175513760">"(System-&amp;#173;standard)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ingen apper"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"Andre NFC-tjenester"</string>
<string name="car_default_app_selected" msgid="5416420830430644174">"Valgt"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vil laste opp feilsøkingsinformasjon."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vil du dele feilsøkingsdata?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Systemet har oppdaget et problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ber om å laste opp en feilrapport fra denne enheten fra <xliff:g id="DATE">%2$s</xliff:g> klokken <xliff:g id="TIME">%3$s</xliff:g>. Feilrapporter inkluderer personopplysninger om enheten eller opplysninger som er loggført av apper, for eksempel brukernavn, posisjonsdata, enhetsidentifikatorer og nettverksinformasjon. Du bør bare dele feilrapporter med personer og apper du stoler på. Vil du gi <xliff:g id="APP_NAME_1">%4$s</xliff:g> tillatelse til å laste opp en feilrapport?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Det oppsto en feil under behandling av feilrapporten for <xliff:g id="APP_NAME">%1$s</xliff:g>. Derfor har deling av de detaljerte feilsøkingsdataene blitt avvist. Vi beklager avbrytelsen."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Tillat"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Avvis"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Tillat begrensede innstillinger"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Begrenset innstilling"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Av sikkerhetshensyn er denne innstillingen utilgjengelig for øyeblikket."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Handlingen er utilgjengelig under telefonsamtaler"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Svindlere ber ofte om slike handlinger under telefonsamtaler, så det er blokkert for å beskytte deg. Hvis noen du ikke kjenner, ber deg om å gjøre dette, kan det være svindel."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Det er ikke tillatt å la apper installere andre apper under telefonsamtaler."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Det er ikke tillatt å gi apper tilgang til tilgjengelighetsfunksjoner under telefonsamtaler."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Du kan ikke slå på denne innstillingen under telefonsamtaler."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Kan ikke fullføre handlingen under samtaler"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Appens tilgang til <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> ble avvist"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Appen ba om tilgang til en sensitiv tillatelse som kan utsette den personlige og økonomiske informasjonen din for fare.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Det kan hende at appen ikke fungerer skikkelig uten denne begrensede tillatelsen. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Finn ut hvordan du gir tilgang&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Appen fikk ikke tillatelse til å være standard <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-ne-v33/strings.xml b/PermissionController/res/values-ne-v33/strings.xml
index 59de5b71b..b41931d2a 100644
--- a/PermissionController/res/values-ne-v33/strings.xml
+++ b/PermissionController/res/values-ne-v33/strings.xml
@@ -33,7 +33,7 @@
<string name="safety_center_more_issues_card_collapse_action" msgid="7485597582198474637">"कोल्याप्स गर्नुहोस्"</string>
<string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"सतर्कता अपनाउनुहोस्। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string>
<string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"यो कार्य पूरा भएको छ"</string>
- <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"तपाईंको डिभाइस थप सुरक्षित गर्न सक्ने सेटिङ जाँच्नुहोस्"</string>
+ <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"तपाईंको डिभाइसलाई थप सुरक्षित राख्न सक्ने सेटिङ जाँच्नुहोस्"</string>
<string name="safety_center_qs_page_landing" msgid="1717368301679228128">"सुरक्षा तथा गोपनीयतासम्बन्धी द्रुत सेटिङ"</string>
<string name="safety_center_qs_close_button" msgid="1352313308176244599">"बन्द गर्नुहोस्"</string>
<string name="safety_center_qs_expand_action" msgid="2193190557696484169">"एक्स्पान्ड गर्नुहोस् र विकल्पहरू देखाउनुहोस्"</string>
diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml
index 4c5b37c3f..7ae6bab2d 100644
--- a/PermissionController/res/values-ne/strings.xml
+++ b/PermissionController/res/values-ne/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"यो एपलाई <xliff:g id="DEVICE_NAME">%2$s</xliff:g> को <xliff:g id="PERM">%1$s</xliff:g> प्रयोग गर्ने अनुमति"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> सँग भएका सबै अनुमति हेर्नुहोस्"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"यो अनुमति पाएका सबै एपहरू हेर्नुहोस्"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"जानकारी"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"सेटिङ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"सहायकको माइक्रोफोन प्रयोगसम्बन्धी डेटा देखाउनुहोस्"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"प्रयोग नगरिएको एपसम्बन्धी सेटिङ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"यो एप प्रयोग नहुँदा यसलाई दिइएका अनुमतिहरू रद्द गर्नुहोस्"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"लिंकहरू खोल्दा"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"कार्यका लागि डिफल्ट"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"निजी स्पेसका लागि डिफल्ट एपहरू"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"यो डिभाइसका लागि अप्टिमाइज गरिएका"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"अन्य"</string>
<string name="default_app_none" msgid="9084592086808194457">"कुनै पनि होइन"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(सिस्टम डिफल्ट)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"कुनै पनि एप छैन"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> डिबग प्रक्रियासम्बन्धी जानकारी अपलोड गर्न चाहन्छ।"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"डिबग प्रक्रियासम्बन्धी डेटा सेयर गर्ने हो?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"प्रणालीले कुनै समस्या फेला पारेको छ"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ले <xliff:g id="DATE">%2$s</xliff:g> <xliff:g id="TIME">%3$s</xliff:g> मा यो डिभाइसबाट लिएको बगको रिपोर्ट अपलोड गर्ने अनुरोध गर्दै छ। बग रिपोर्टमा प्रयोगकर्ताका नाम, लोकेसन डेटा, डिभाइसका पहिचानकर्ता र नेटवर्कसम्बन्धी जानकारी जस्ता तपाईंको डिभाइसको व्यक्तिगत जानकारी वा एपले लग गरेको जानकारी समावेश छ। तपाईंलाई यो जानकारी दिँदा फरक पर्दैन जस्तो लाग्ने विश्वसनीय मान्छे वा एपसँग मात्र बग रिपोर्टहरू सेयर गर्नुहोस्। <xliff:g id="APP_NAME_1">%4$s</xliff:g> लाई बग रिपोर्ट अपलोड गर्न दिने हो?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> को बगसम्बन्धी रिपोर्ट प्रक्रियामा लैजाने क्रममा त्रुटि भयो। त्यस कारण विस्तृत डिबग प्रक्रियासम्बन्धी डेटा आदान प्रदान गर्ने कार्य अस्वीकार गरिएको छ। व्यवधानका लागि क्षमा गर्नुहोला।"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"अनुमति दिनुहोस्"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"अनुमति नदिनुहोस्"</string>
@@ -475,10 +476,10 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt; मा भएका फोटो तथा मिडिया एक्सेस गर्ने अनुमति दिने हो?"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई तपाईंका कन्ट्याक्टहरू एक्सेस गर्ने अनुमति दिने हो?"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt; मा भएका तपाईंका कन्ट्याक्ट एक्सेस गर्ने अनुमति दिने हो?"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई यो डिभाइसको लोकेसन प्रयोग दिने हो?"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई यो डिभाइसको लोकेसन प्रयोग गर्न दिने हो?"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g> को&lt;/b&gt; लोकेसन एक्सेस गर्ने अनुमति दिने हो?"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"तपाईंले एप प्रयोग गरिरहेका बेला मात्र उक्त एपले स्थानमाथि पहुँच राख्न सक्ने छ"</string>
- <string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई यो डिभाइसको लोकेसन प्रयोग दिने हो?"</string>
+ <string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई यो डिभाइसको लोकेसन प्रयोग गर्न दिने हो?"</string>
<string name="permgroupbackgroundrequest_device_aware_location" msgid="1264484517831380016">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g> को&lt;/b&gt; लोकेसन एक्सेस गर्ने अनुमति दिने हो?"</string>
<string name="permgroupbackgroundrequestdetail_location" msgid="8021219324989662957">"तपाईं उक्त एप प्रयोग नगरिरहेका बेलामा लगायत जुनसुकै समयमा यो एपले तपाईंको स्थानमाथि पहुँच राख्न सक्छ। "<annotation id="link">"सेटिङमा गई अनुमति दिनुहोस्।"</annotation></string>
<string name="permgroupupgraderequest_location" msgid="8328408946822691636">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; का लागि स्थानसम्बन्धी पहुँच परिवर्तन गर्ने हो?"</string>
@@ -584,10 +585,10 @@
<string name="security_settings" msgid="3808106921175271317">"सुरक्षासम्बन्धी सेटिङ"</string>
<string name="sensor_permissions_qs" msgid="1022267900031317472">"अनुमति"</string>
<string name="safety_privacy_qs_tile_title" msgid="727301867710374052">"सुरक्षा तथा गोपनीयता"</string>
- <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"स्थिति जाँच गर्नुहोस्"</string>
+ <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"स्थिति जाँच्नुहोस्"</string>
<string name="privacy_controls_qs" msgid="5780144882040591169">"तपाईंका गोपनीयतासम्बन्धी सेटिङ"</string>
<string name="security_settings_button_label_qs" msgid="8280343822465962330">"थप सेटिङ"</string>
- <string name="camera_toggle_label_qs" msgid="3880261453066157285">"क्यामेरा प्रयोग गर्ने अनुमति"</string>
+ <string name="camera_toggle_label_qs" msgid="3880261453066157285">"क्यामेरा एक्सेस"</string>
<string name="microphone_toggle_label_qs" msgid="8132912469813396552">"माइक एक्सेस"</string>
<string name="permissions_removed_qs" msgid="8957319130625294572">"अनुमति हटाइएको छ"</string>
<string name="camera_usage_qs" msgid="4394233566086665994">"हालसालै गरिएको क्यामेराको प्रयोगसम्बन्धी जानकारी हेर्नुहोस्"</string>
@@ -629,7 +630,7 @@
<string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"अनुमति बदलियो"</string>
<string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"हालसालै कहिले लोकेसनसम्बन्धी प्रयोग गरिएको थियो हेर्नुहोस्"</string>
<string name="privacy_controls_title" msgid="7605929972256835199">"गोपनीयतासम्बन्धी सेटिङ"</string>
- <string name="camera_toggle_title" msgid="1251201397431837666">"क्यामेरा प्रयोग गर्ने अनुमति"</string>
+ <string name="camera_toggle_title" msgid="1251201397431837666">"क्यामेरा एक्सेस"</string>
<string name="mic_toggle_title" msgid="2649991093496110162">"माइक्रोफोन प्रयोग गर्ने अनुमति"</string>
<string name="perm_toggle_description" msgid="7801326363741451379">"एप तथा सेवाहरूका हकमा"</string>
<string name="mic_toggle_description" msgid="9163104307990677157">"एप तथा सेवाहरूका हकमा। यो सेटिङ अफ गरिएको अवस्थामा तपाईंले आपत्‍कालीन नम्बरमा कल गर्नुभयो भने माइक्रोफोनसम्बन्धी डेटा अझै पनि सेयर गरिन सक्छ।"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"प्रतिबन्ध लगाइएका सेटिङ अनलक गर्नुहोस्"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"प्रतिबन्ध लगाइएका सेटिङ"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"तपाईंको खाताको सुरक्षार्थ यो सेटिङ हाल उपलब्ध छैन।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"फोन कल चलिरहेका बेला यो कारबाही गर्न मिल्दैन"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n स्क्याम गर्ने व्यक्तिले फोन कल चलिरहेका बेला प्रायः यस प्रकारको कारबाही गर्न अनुरोध गर्ने भएकाले तपाईंको सुरक्षार्थ यो कारबाही गर्न रोक लगाइएको हो। तपाईंलाई कुनै अपरिचित व्यक्तिले यो कारबाही गर्ने मार्गदर्शन गर्दै छ भने त्यो जालसाजी हुन सक्छ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"फोन कल चलिरहेका बेला एपहरूलाई अन्य एप इन्स्टल गर्ने अनुमति दिन मिल्दैन।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"फोन कल चलिरहेका बेला एपलाई सर्वसुलभतासम्बन्धी सेवा एक्सेस गर्ने अनुमति दिन मिल्दैन।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"फोन कल चलिरहेका बेला यो सेटिङ अन गर्ने अनुमति दिन मिल्दैन।"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"कल भइरहेका बेला यो कारबाही पूरा गर्न सकिँदैन"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"एपले <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> प्रयोग गर्न मागेको अनुमति अस्वीकार गरिएको छ"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"यो एपले तपाईंको व्यक्तिगत तथा वित्तीय जानकारी जोखिममा पार्न सक्ने खालको संवेदनशील अनुमति मागेको छ।<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>तपाईले उक्त प्रतिबन्धित अनुमति नदिएका खण्डमा यो एपले राम्रोसँग काम नगर्न सक्छ। &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;अनुमति दिने तरिका सिक्नुहोस्&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"यो एपले डिफल्ट <xliff:g id="ROLE_NAME">%1$s</xliff:g> का रूपमा काम गर्न मागेको अनुमति अस्वीकार गरिएको छ"</string>
diff --git a/PermissionController/res/values-nl/strings.xml b/PermissionController/res/values-nl/strings.xml
index 55f4c2d44..2779e124c 100644
--- a/PermissionController/res/values-nl/strings.xml
+++ b/PermissionController/res/values-nl/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Toegang tot <xliff:g id="PERM">%1$s</xliff:g> voor deze app op <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Alle rechten van <xliff:g id="APP">%1$s</xliff:g> bekijken"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Alle apps met dit recht bekijken"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informatie"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Instellingen"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Gebruik van Assistent-microfoon tonen"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Niet-gebruikte app-instellingen"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Rechten intrekken als app niet wordt gebruikt"</string>
@@ -442,8 +440,10 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Links openen"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Standaard voor werk"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Standaard voor privégedeelte"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Geoptimaliseerd voor apparaat"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Anders"</string>
<string name="default_app_none" msgid="9084592086808194457">"Geen"</string>
- <string name="default_app_system_default" msgid="6218386768175513760">"(Systeem­standaard)"</string>
+ <string name="default_app_system_default" msgid="6218386768175513760">"(Systeem­stan­daard)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Geen apps"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"Andere NFC-services"</string>
<string name="car_default_app_selected" msgid="5416420830430644174">"Geselecteerd"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil foutopsporingsinformatie uploaden."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Foutopsporings­informatie delen?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Het systeem heeft een probleem gedetecteerd."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> wil een bugrapport van dit apparaat uploaden dat is gemaakt op <xliff:g id="DATE">%2$s</xliff:g> om <xliff:g id="TIME">%3$s</xliff:g>. Bugrapporten omvatten persoonlijke informatie over je apparaat of gegevens die zijn geregistreerd door apps, zoals gebruikersnamen, locatiegegevens, apparaat-ID\'s en netwerkgegevens. Deel alleen bugrapporten met mensen en apps die je met deze informatie vertrouwt. Wil je <xliff:g id="APP_NAME_1">%4$s</xliff:g> toestaan een bugrapport te uploaden?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Er is een fout opgetreden bij het verwerken van het bugrapport voor <xliff:g id="APP_NAME">%1$s</xliff:g>. Het delen van de gedetailleerde foutopsporingsinformatie is daarom geweigerd. Onze excuses voor de onderbreking."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Toestaan"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Weigeren"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Beperkte instellingen toestaan"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Beperkte instelling"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ter beveiliging is deze instelling op dit moment niet beschikbaar."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Actie niet beschikbaar tijdens een telefoongesprek"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Scammers vragen vaak om dit soort acties tijdens telefoongesprekken. Daarom is deze actie geblokkeerd om je te beschermen. Als iemand die je niet kent je aanspoort om deze actie uit te voeren, kan dit een scam zijn."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Apps toestaan om andere apps te installeren is niet toegestaan tijdens een telefoongesprek."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Een app toegang geven tot toegankelijkheid is niet toegestaan tijdens een telefoongesprek."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Deze instelling aanzetten is niet toegestaan tijdens een telefoongesprek."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Kan actie niet afronden tijdens gesprek"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"App heeft geen toegang gekregen tot <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"De app heeft toegang gevraagd tot een gevoelig recht, waardoor je persoonlijke en financiële informatie risico kunnen lopen.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Het is mogelijk dat de app niet goed werkt zonder dit beperkte recht. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Meer informatie over hoe je toegang geeft&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"App heeft geen toegang gekregen om de standaard <xliff:g id="ROLE_NAME">%1$s</xliff:g> te worden"</string>
diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml
index 51b45c726..9b90e672b 100644
--- a/PermissionController/res/values-or/strings.xml
+++ b/PermissionController/res/values-or/strings.xml
@@ -52,7 +52,7 @@
<string name="permission_revoked_none" msgid="9213345075484381180">"କୌଣସି ଅନୁମତି ଅକ୍ଷମ କରାଯାଇନାହିଁ"</string>
<string name="grant_dialog_button_allow" msgid="5314677880021102550">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"ସବୁବେଳେ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"ଆପ୍ ବ୍ୟବହାର କରିବା ସମୟରେ"</string>
+ <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"ଆପ ବ୍ୟବହାର କରିବା ସମୟରେ"</string>
<string name="grant_dialog_button_change_to_precise_location" msgid="3273115879467236033">"ସଠିକ୍ ଲୋକେସନକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
<string name="grant_dialog_button_keey_approximate_location" msgid="438025182769080011">"ଆନୁମାନିକ ଲୋକେସନ୍ ରଖନ୍ତୁ"</string>
<string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"କେବଳ ଏହି ସମୟ ପାଇଁ"</string>
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>ରେ ଏହି ଆପ ପାଇଁ <xliff:g id="PERM">%1$s</xliff:g> ଆକ୍ସେସ ଅଛି"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ସମସ୍ତ <xliff:g id="APP">%1$s</xliff:g> ଅନୁମତି ଦେଖନ୍ତୁ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ଏହି ଅନୁମତି ଥିବା ସମସ୍ତ ଆପ୍ସ ଦେଖନ୍ତୁ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ସୂଚନା"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ସେଟିଂସ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର ଦେଖାନ୍ତୁ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ଅବ୍ୟବହୃତ ଆପ ସେଟିଂସ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ଯଦି ଆପ୍ ବ୍ୟବହାର କରାଯାଇନାହିଁ, ତେବେ ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ଓପନିଂ ଲିଙ୍କ୍"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"କାର୍ଯ୍ୟ ପାଇଁ ଡିଫଲ୍ଟ ଅଛି"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ପ୍ରାଇଭେଟ ସ୍ପେସ ପାଇଁ ଡିଫଲ୍ଟ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ଡିଭାଇସ ପାଇଁ ଅପ୍ଟିମାଇଜ କରାଯାଇଛି"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ଅନ୍ୟ"</string>
<string name="default_app_none" msgid="9084592086808194457">"କିଛି ଆପ ସେଟ କରାଯାଇନାହିଁ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ସିଷ୍ଟମ୍ ଡିଫଲ୍ଟ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"କୌଣସି ଆପ୍‌ ନାହିଁ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଡିବଗିଂ ସୂଚନା ଅପ୍‌ଲୋଡ୍ କରିବାକୁ ଚାହାନ୍ତି।"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ଡିବଗିଂ ଡାଟା ସେୟାର୍ କରିବେ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ସିଷ୍ଟମ୍ ଗୋଟିଏ ସମସ୍ୟା ଚିହ୍ନଟ କରିଛି"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> <xliff:g id="DATE">%2$s</xliff:g> <xliff:g id="TIME">%3$s</xliff:g>ରେ ଏହି ଡିଭାଇସ୍‌ରୁ ନିଆଯାଇଥିବା ଏକ ବଗ୍ ରିପୋର୍ଟ ଅପ୍‌ଲୋଡ୍ କରିବାକୁ ଅନୁରୋଧ କରୁଛି। ବଗ୍ ରିପୋର୍ଟରେ ଆପଣଙ୍କ ଡିଭାଇସ୍ ସମ୍ବନ୍ଧରେ ବ୍ୟକ୍ତିଗତ ସୂଚନା ବା ଆପ୍ସ ଲଗ୍ କରିଥିବା ବ୍ୟକ୍ତିଗତ ସୂଚନା, ଉଦାହରଣ ସ୍ୱରୂପ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ନାମ, ଲୋକେସନ୍ ଡାଟା, ଡିଭାଇସ୍ ଚିହ୍ନଟକାରୀ, ଏବଂ ନେଟୱାର୍କ ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ରହିଛି। ଏହି ସୂଚନା ସେୟାର୍ କରିବା ପାଇଁ ଆପଣ ଯାହାକୁ ଭରସା କରୁଛନ୍ତି କେବଳ ସେହି ଲୋକ ଏବଂ ଆପ୍ସ ସହିତ ବଗ୍ ରିପୋର୍ଟ ସେୟାର୍ କରନ୍ତୁ। ଏକ ବଗ୍ ରିପୋର୍ଟ ଅପ୍‌ଲୋଡ୍ କରିବା ପାଇଁ <xliff:g id="APP_NAME_1">%4$s</xliff:g>କୁ ଅନୁମତି ଦେବେ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ବଗ୍ ରିପୋର୍ଟ ପ୍ରକ୍ରିୟାକରଣରେ ଏକ ତ୍ରୁଟି ହୋଇଛି। ତେଣୁ ଡିବଗିଂ ବିବରଣୀ ଡାଟା ସେୟାରିଂ ପ୍ରତ୍ୟାକ୍ଷାନ ହୋଇଛି। ଅସୁବିଧା ପାଇଁ ଦୁଃଖିତ।"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
@@ -491,7 +492,7 @@
<string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;ରେ <xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>ର ଲୋକେସନ ଆକ୍ସେସକୁ ଆନୁମାନିକରୁ ସଠିକକୁ ପରିବର୍ତ୍ତନ କରିବେ?"</string>
<string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"ଏହି ଡିଭାଇସର ଆନୁମାନିକ ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
<string name="permgrouprequest_device_aware_coarselocation" msgid="8367540370912066757">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;ର ଆନୁମାନିକ ଲୋକେସନକୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
- <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"ସଠିକ୍"</string>
+ <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"ସଠିକ"</string>
<string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"(ଆନୁମାନିକ)"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;କୁ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍‌କୁ ଆକ୍ସେସ୍‍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;ରେ ଆପଣଙ୍କ କେଲେଣ୍ଡରକୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"ପ୍ରତିବନ୍ଧିତ ସେଟିଂସକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ପ୍ରତିବନ୍ଧିତ ସେଟିଂ"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ ଏହି ସେଟିଂ ବର୍ତ୍ତମାନ ଅନୁପଲବ୍ଧ ଅଟେ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"କୌଣସି ଫୋନ କଲରେ ଥିବା ସମୟରେ କାର୍ଯ୍ୟ ଉପଲବ୍ଧ ନାହିଁ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ଫୋନ କଲ ବାର୍ତ୍ତାଳାପ ସମୟରେ ସ୍କାମରମାନେ ପ୍ରାୟତଃ ଏହି ପ୍ରକାରର କାର୍ଯ୍ୟ ପାଇଁ ଅନୁରୋଧ କରନ୍ତି, ତେଣୁ ଆପଣଙ୍କୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ ଏହାକୁ ବ୍ଲକ କରାଯାଏ। ଯଦି ଆପଣଙ୍କୁ ଏହି ପଦକ୍ଷେପ ନେବାକୁ ଆପଣ ଜାଣିନଥିବା ବ୍ୟକ୍ତିଙ୍କ ଦ୍ୱାରା ମାର୍ଗଦର୍ଶନ କରାଯାଉଛି, ତେବେ ଏହା ଏକ ସ୍କାମ ହୋଇପାରେ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"କୌଣସି ଫୋନ କଲ ସମୟରେ ଅନ୍ୟ ଆପ୍ସକୁ ଇନଷ୍ଟଲ କରିବା ପାଇଁ ଆପ୍ସକୁ ଅନୁମତି ଦିଆଯାଏ ନାହିଁ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ଏକ ଫୋନ କଲ ସମୟରେ ଆକ୍ସେସିବିଲିଟୀ ପାଇଁ ଏକ ଆପ ଆକ୍ସେସ ଦେବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ଏକ ଫୋନ କଲ ସମୟରେ ଏହି ସେଟିଂ ସକ୍ଷମ କରିବାକୁ ଅନୁମତି ଦିଆଯାଏ ନାହିଁ।"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"କଲ ସମୟରେ କାର୍ଯ୍ୟ ସମ୍ପୂର୍ଣ୍ଣ କରାଯାଇପାରିବ ନାହିଁ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>କୁ ଆପର ଆକ୍ସେସକୁ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ଏବଂ ଆର୍ଥିକ ସୂଚନାକୁ ବିପଦରେ ପକାଇପାରୁଥିବା ଏକ ସମ୍ବେଦନଶୀଳ ଅନୁମତିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପଟି ଅନୁରୋଧ କରିଛି।<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ଏହା ସମ୍ଭବ ଯେ ଏହି ପ୍ରତିବନ୍ଧିତ ଅନୁମତି ବିନା ଆପ ସଠିକ ଭାବେ କାର୍ଯ୍ୟ କରିବ ନାହିଁ। &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ଆକ୍ସେସକୁ କିପରି ଅନୁମତି ଦେବେ ତାହା ଜାଣନ୍ତୁ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ଡିଫଲ୍ଟ <xliff:g id="ROLE_NAME">%1$s</xliff:g> ହେବା ପାଇଁ ଆପର ଆକ୍ସେସକୁ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି"</string>
diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml
index b5d0dab61..9b4bf9dd3 100644
--- a/PermissionController/res/values-pa/strings.xml
+++ b/PermissionController/res/values-pa/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> \'ਤੇ ਇਸ ਐਪ ਲਈ <xliff:g id="PERM">%1$s</xliff:g> ਦੀ ਪਹੁੰਚ"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> ਦੀਆਂ ਸਾਰੀਆਂ ਇਜਾਜ਼ਤਾਂ ਦੇਖੋ"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ਇਸ ਇਜਾਜ਼ਤ ਵਾਲੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਦੇਖੋ"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ਜਾਣਕਾਰੀ"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ਸੈਟਿੰਗਾਂ"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistant ਦੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਦਿਖਾਓ"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ਅਣਵਰਤੀ ਐਪ ਦੀਆਂ ਸੈਟਿੰਗਾਂ"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ਐਪ ਨੂੰ ਨਾ ਵਰਤੇ ਜਾਣ \'ਤੇ ਇਸ ਲਈ ਦਿੱਤੀਆਂ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਹਟਾ ਦਿਓ"</string>
@@ -255,7 +253,7 @@
<string name="app_permission_never_accessed_summary" msgid="401346181461975090">"ਕਦੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ"</string>
<string name="app_permission_never_accessed_denied_summary" msgid="6596000497490905146">"ਮਨ੍ਹਾ ਕੀਤਾ ਗਿਆ / ਕਦੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ"</string>
<string name="allowed_header" msgid="7769277978004790414">"ਮਨਜ਼ੂਰਸ਼ੁਦਾ"</string>
- <string name="allowed_always_header" msgid="6455903312589013545">"ਹਰ ਵੇਲੇ ਪਹੁੰਚ ਵਾਲੀਆਂ"</string>
+ <string name="allowed_always_header" msgid="6455903312589013545">"ਹਰ ਵੇਲੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੈ"</string>
<string name="allowed_foreground_header" msgid="6845655788447833353">"ਸਿਰਫ਼ ਐਪ ਵਰਤੋਂ ਵੇਲੇ ਪਹੁੰਚ ਵਾਲੀਆਂ"</string>
<string name="allowed_storage_scoped" msgid="5383645873719086975">"ਸਿਰਫ਼ ਮੀਡੀਆ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੱਤੀ ਗਈ"</string>
<string name="allowed_storage_full" msgid="5356699280625693530">"ਸਾਰੀਆਂ ਫ਼ਾਈਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦਿੱਤਾ ਗਿਆ"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"ਖੁੱਲ੍ਹਣ ਵਾਲੇ ਲਿੰਕ"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ਕੰਮ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ਡੀਵਾਈਸ ਲਈ ਸੁਯੋਗ ਬਣਾਈਆਂ"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ਹੋਰ"</string>
<string name="default_app_none" msgid="9084592086808194457">"ਕੋਈ ਨਹੀਂ"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ਕੋਈ ਐਪਾਂ ਨਹੀਂ"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਡੀਬੱਗਿੰਗ ਜਾਣਕਾਰੀ ਨੂੰ ਅੱਪਲੋਡ ਕਰਨਾ ਚਾਹੁੰਦੀ ਹੈ।"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ਕੀ ਡੀਬੱਗਿੰਗ ਡਾਟਾ ਸਾਂਝਾ ਕਰਨਾ ਹੈ?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ਸਿਸਟਮ ਵਿੱਚ ਕਿਸੇ ਸਮੱਸਿਆ ਦਾ ਪਤਾ ਲੱਗਿਆ।"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ਇਸ ਡੀਵਾਈਸ ਤੋਂ <xliff:g id="DATE">%2$s</xliff:g> ਨੂੰ <xliff:g id="TIME">%3$s</xliff:g> ਵਜੇ ਬਣਾਈ ਗਈ ਬੱਗ ਰਿਪੋਰਟ ਨੂੰ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ। ਬੱਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਬਾਰੇ ਜਾਂ ਐਪਾਂ ਵੱਲੋਂ ਲੌਗ ਕੀਤੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ, ਉਦਾਹਰਨ ਲਈ, ਵਰਤੋਂਕਾਰ ਨਾਮ, ਟਿਕਾਣਾ ਡਾਟਾ, ਡੀਵਾਈਸ ਪਛਾਣਕਰਤਾ ਅਤੇ ਨੈੱਟਵਰਕ ਜਾਣਕਾਰੀ। ਬੱਗ ਰਿਪੋਰਟਾਂ ਸਿਰਫ਼ ਉਹਨਾਂ ਲੋਕਾਂ ਅਤੇ ਐਪਾਂ ਨਾਲ ਸਾਂਝੀਆਂ ਕਰੋ ਜਿਨ੍ਹਾਂ \'ਤੇ ਤੁਸੀਂ ਇਸ ਜਾਣਕਾਰੀ ਨੂੰ ਲੈ ਕੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ। ਕੀ <xliff:g id="APP_NAME_1">%4$s</xliff:g> ਨੂੰ ਬੱਗ ਰਿਪੋਰਟ ਅੱਪਲੋਡ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਦੀ ਬੱਗ ਰਿਪੋਰਟ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋ ਗਈ। ਇਸ ਕਰਕੇ ਵੇਰਵੇ-ਸਹਿਤ ਡੀਬੱਗ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਤੋਂ ਮਨ੍ਹਾ ਕੀਤਾ ਗਿਆ। ਰੁਕਾਵਟ ਲਈ ਮਾਫ਼ੀ।"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ਕਰਨ ਦਿਓ"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ਨਾ ਕਰਨ ਦਿਓ"</string>
@@ -475,7 +476,7 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt; \'ਤੇ ਫ਼ੋਟੋਆਂ ਅਤੇ ਮੀਡੀਆ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt; \'ਤੇ ਆਪਣੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt; ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਐਪ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਹੀ ਐਪ ਕੋਲ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ"</string>
<string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"ਪ੍ਰਤਿਬੰਧਿਤ ਸੈਟਿੰਗਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"ਪ੍ਰਤਿਬੰਧਿਤ ਸੈਟਿੰਗਾਂ"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਫ਼ਿਲਹਾਲ ਇਹ ਸੈਟਿੰਗ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ਫ਼ੋਨ ਕਾਲ \'ਤੇ ਹੋਣ ਦੌਰਾਨ ਕਾਰਵਾਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ਘਪਲੇਬਾਜ਼ ਅਕਸਰ ਫ਼ੋਨ ਕਾਲ ਦੀਆਂ ਗੱਲਾਂਬਾਤਾਂ ਦੌਰਾਨ ਇਸ ਕਿਸਮ ਦੀ ਕਾਰਵਾਈ ਦੀ ਬੇਨਤੀ ਕਰਦੇ ਹਨ, ਇਸ ਲਈ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣ ਲਈ ਇਸਨੂੰ ਬਲਾਕ ਕੀਤਾ ਹੁੰਦਾ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਕਿਸੇ ਅਨਜਾਣ ਵਿਅਕਤੀ ਵੱਲੋਂ ਇਹ ਕਾਰਵਾਈ ਕਰਨ ਲਈ ਸੇਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ ਇੱਕ ਘਪਲਾ ਹੋਵੇ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ਫ਼ੋਨ ਕਾਲ ਦੌਰਾਨ ਐਪਾਂ ਨੂੰ ਹੋਰ ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੱਤੀ ਜਾਂਦੀ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ਫ਼ੋਨ ਕਾਲ ਦੌਰਾਨ ਐਪ ਨੂੰ ਪਹੁੰਚਯੋਗਤਾ ਤੱਕ ਪਹੁੰਚ ਦੇਣ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੱਤੀ ਜਾਂਦੀ।"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ਫ਼ੋਨ ਕਾਲ ਦੌਰਾਨ ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੱਤੀ ਜਾਂਦੀ।"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ਕਾਲ ਦੌਰਾਨ ਇਹ ਕਾਰਵਾਈ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"ਐਪ ਨੂੰ <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੱਤੀ ਗਈ"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"ਐਪ ਨੇ ਸੰਵੇਦਨਸ਼ੀਲ ਇਜਾਜ਼ਤ ਤੱਕ ਪਹੁੰਚ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ, ਜਿਸ ਨਾਲ ਤੁਹਾਡੀ ਨਿੱਜੀ ਅਤੇ ਵਿੱਤੀ ਜਾਣਕਾਰੀ ਜੋਖਮ ਵਿੱਚ ਪੈ ਸਕਦੀ ਹੈ।<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ਇਹ ਸੰਭਵ ਹੈ, ਕਿ ਐਪ ਇਸ ਪ੍ਰਤਿਬੰਧਿਤ ਇਜਾਜ਼ਤ ਤੋਂ ਬਿਨਾਂ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ। &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣ ਦੇ ਤਰੀਕੇ ਬਾਰੇ ਜਾਣੋ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ਐਪ ਨੂੰ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ <xliff:g id="ROLE_NAME">%1$s</xliff:g> ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੱਤੀ ਗਈ"</string>
diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml
index fe983f17e..1c0b64eb9 100644
--- a/PermissionController/res/values-pl/strings.xml
+++ b/PermissionController/res/values-pl/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Aplikacja ma przyznane uprawnienie <xliff:g id="PERM">%1$s</xliff:g> na tym urządzeniu: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Zobacz wszystkie uprawnienia aplikacji <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Wyświetl wszystkie aplikacje z tym uprawnieniem"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacje"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ustawienia"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Pokaż użycie mikrofonu w Asystencie"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ustawienia nieużywanych aplikacji"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Usuń uprawnienia, jeśli aplikacja jest nieużywana"</string>
@@ -350,7 +348,7 @@
<string name="no_apps_allowed" msgid="7718822655254468631">"Nie zezwolono żadnym aplikacjom"</string>
<string name="no_apps_allowed_full" msgid="8011716991498934104">"Brak aplikacji z uprawnieniami dla wszystkich plików"</string>
<string name="no_apps_allowed_scoped" msgid="4908850477787659501">"Brak aplikacji z uprawnieniami tylko dla multimediów"</string>
- <string name="no_apps_denied" msgid="7663435886986784743">"Nie zabroniono dostępu żadnym aplikacjom"</string>
+ <string name="no_apps_denied" msgid="7663435886986784743">"Nie odmówiono dostępu żadnym aplikacjom"</string>
<string name="car_permission_selected" msgid="180837028920791596">"Wybrana"</string>
<string name="settings" msgid="5409109923158713323">"Ustawienia"</string>
<string name="accessibility_service_dialog_title_single" msgid="7956432823014102366">"Usługa <xliff:g id="SERVICE_NAME">%s</xliff:g> ma pełny dostęp do urządzenia"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otwieranie linków"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Domyślne do pracy"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Domyślne dla przestrzeni prywatnej"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Zoptymalizowane dla danego urządzenia"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Inne"</string>
<string name="default_app_none" msgid="9084592086808194457">"Brak"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Domyślna aplikacja systemowa)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Brak aplikacji"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce przesłać informacje debugowania."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Udostępnić dane debugowania?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"System wykrył problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> prosi o zezwolenie na przesłanie raportu o błędzie z tego urządzenia. Raport utworzono <xliff:g id="DATE">%2$s</xliff:g> o <xliff:g id="TIME">%3$s</xliff:g>. Raporty o błędach zawierają dane prywatne powiązane z Twoim urządzeniem lub zarejestrowane w aplikacjach, na przykład nazwy użytkowników, dane o lokalizacji, identyfikatory urządzeń i informacje o sieciach. Raporty o błędach zawierające te informacje udostępniaj tylko osobom i aplikacjom, którym ufasz. Zezwolić aplikacji <xliff:g id="APP_NAME_1">%4$s</xliff:g> na przesłanie raportu o błędzie?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Podczas przetwarzania zgłoszenia błędu w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> wystąpił błąd. Odmówiono udostępnienia szczegółowych danych debugowania. Przepraszamy za niedogodności."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Zezwól"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Odmów"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Zezwól na ustawienia z ograniczonym dostępem"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ustawienie z ograniczonym dostępem"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ze względów bezpieczeństwa to ustawienie jest obecnie niedostępne."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Działanie niedostępne podczas rozmowy telefonicznej"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Oszuści często proszą o takie działania podczas rozmów telefonicznych, dlatego blokujemy je, aby Cię chronić. Jeśli ktoś, kogo nie znasz, prosi Cię o podjęcie takiego działania, może to być oszustwo."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Podczas rozmowy telefonicznej nie można zezwolić aplikacjom na instalowanie innych aplikacji."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Podczas rozmowy telefonicznej nie można zezwolić na korzystanie z ułatwień dostępu w aplikacji."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Podczas rozmowy telefonicznej nie można włączyć tego ustawienia."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Nie można wykonać działania podczas połączenia"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikacja nie otrzymała dostępu do uprawnień <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacja wymaga dostępu do uprawnień newralgicznych, co może zagrażać Twoim danym osobowym i informacjom finansowym.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Możliwe, że bez tego uprawnienia z ograniczeniami aplikacja nie będzie działać poprawnie. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Jak zezwolić na dostęp&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikacja nie otrzymała dostępu jako domyślna <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-pt-rBR/strings.xml b/PermissionController/res/values-pt-rBR/strings.xml
index 286140617..b44256b2a 100644
--- a/PermissionController/res/values-pt-rBR/strings.xml
+++ b/PermissionController/res/values-pt-rBR/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acesso de <xliff:g id="PERM">%1$s</xliff:g> para esse app no <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todas as permissões do app <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Mostrar todos os apps que têm esta permissão"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informações"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Configurações"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar uso de microfone pelo Assistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Configurações de apps não usados"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remover permissões se o app não for usado"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Abrir links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Padrão para trabalho"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Padrão para o espaço privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Otimizados para o dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Outros"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nenhuma"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Padrão do sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nenhum app"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Solicitação do <xliff:g id="APP_NAME">%1$s</xliff:g> para upload de informações de depuração."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Compartilhar dados de depuração?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"O sistema detectou um problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Há uma solicitação do <xliff:g id="APP_NAME_0">%1$s</xliff:g> para upload de um relatório de bug criado neste dispositivo no dia <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. Os relatórios de bug incluem informações pessoais do seu dispositivo ou registradas por apps, como nomes de usuário, dados de local, identificadores do dispositivo e informações de rede. Por isso, só compartilhe relatórios de bug com pessoas e apps de sua confiança. Permitir que o <xliff:g id="APP_NAME_1">%4$s</xliff:g> faça upload do relatório de bug?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Ocorreu um erro ao processar o relatório de bug do app <xliff:g id="APP_NAME">%1$s</xliff:g>. Por isso, o compartilhamento dos dados detalhados de depuração foi negado. Lamentamos a interrupção."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Negar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir configurações restritas"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Configuração restrita"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Para sua segurança, essa configuração está indisponível no momento."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Ação indisponível durante uma ligação"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Golpistas costumam pedir esse tipo de ação durante ligações, então ela fica bloqueada para sua proteção. Se você está recebendo instruções de uma pessoa desconhecida para realizar essa ação, isso pode ser um golpe."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Não é possível permitir que apps instalem outros apps durante uma ligação."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Não é possível dar a um app acesso aos recursos de acessibilidade durante uma ligação."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Não é permitido ativar essa configuração durante uma ligação."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Não é possível realizar a ação durante uma ligação"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"O app não recebeu a seguinte permissão de acesso: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"O app solicitou acesso a uma permissão sensível que pode colocar suas informações pessoais e financeiras em risco.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>É possível que o app não funcione corretamente sem essa permissão restrita. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Aprenda a conceder acesso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"O app não recebeu o acesso para ser a escolha padrão de: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-pt-rPT/strings.xml b/PermissionController/res/values-pt-rPT/strings.xml
index edd22cfe0..08b8d6fe8 100644
--- a/PermissionController/res/values-pt-rPT/strings.xml
+++ b/PermissionController/res/values-pt-rPT/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acesso a <xliff:g id="PERM">%1$s</xliff:g> para esta app no dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todas as autorizações da app <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ver todas as apps com esta autorização"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informações"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Definições"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar utilização do microfone do assistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Definições de apps não usadas"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remover autorizações se a app não for utilizada"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Abertura de links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predefinição para o trabalho"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Predefinição para espaço privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Otimizadas para o dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Outras"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nenhuma"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Predefinição do sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Sem apps"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> quer carregar informações de depuração."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Quer partilhar dados de depuração?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"O sistema detetou um problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"A app <xliff:g id="APP_NAME_0">%1$s</xliff:g> está a solicitar o carregamento de um relatório de erro a partir deste dispositivo realizado a <xliff:g id="DATE">%2$s</xliff:g> à(s) <xliff:g id="TIME">%3$s</xliff:g>. Os relatórios de erros incluem informações pessoais acerca do seu dispositivo ou registadas por app, por exemplo, nomes de utilizador, dados de localização, identificadores do dispositivo e informações da rede. Apenas partilhe relatórios de erros com pessoas e apps nas quais confia. Permite que a app <xliff:g id="APP_NAME_1">%4$s</xliff:g> carregue um relatório de erro?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Ocorreu um erro ao processar o relatório de erro para a app <xliff:g id="APP_NAME">%1$s</xliff:g>. Como tal, a partilha dos dados de depuração detalhados foi negada. Pedimos desculpa pela interrupção."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Recusar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir definições restritas"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Definição restrita"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Para sua segurança, esta definição está indisponível atualmente."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Ação não disponível durante uma chamada"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Os autores de esquemas pedem frequentemente este tipo de ação durante as conversas telefónicas, por isso, a opção é bloqueada para sua proteção. Se alguém que não conhece lhe pedir para realizar esta ação, pode tratar-se de um esquema."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Não é permitido autorizar que as apps instalem outras apps durante uma chamada telefónica."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Não é permitido conceder a uma app acesso à acessibilidade durante uma chamada telefónica."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Não é permitido ativar esta definição durante uma chamada telefónica."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Não é possível concluir a ação durante a chamada"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"O acesso a <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> foi negado à app"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"A app pediu acesso a uma autorização confidencial que pode pôr em risco as suas informações pessoais e financeiras.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>É possível que a app não funcione corretamente sem esta autorização restrita. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Saiba como permitir o acesso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"O acesso à função predefinida <xliff:g id="ROLE_NAME">%1$s</xliff:g> foi negado à app"</string>
diff --git a/PermissionController/res/values-pt/strings.xml b/PermissionController/res/values-pt/strings.xml
index 286140617..b44256b2a 100644
--- a/PermissionController/res/values-pt/strings.xml
+++ b/PermissionController/res/values-pt/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acesso de <xliff:g id="PERM">%1$s</xliff:g> para esse app no <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ver todas as permissões do app <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Mostrar todos os apps que têm esta permissão"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informações"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Configurações"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Mostrar uso de microfone pelo Assistente"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Configurações de apps não usados"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Remover permissões se o app não for usado"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Abrir links"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Padrão para trabalho"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Padrão para o espaço privado"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Otimizados para o dispositivo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Outros"</string>
<string name="default_app_none" msgid="9084592086808194457">"Nenhuma"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Padrão do sistema)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nenhum app"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Solicitação do <xliff:g id="APP_NAME">%1$s</xliff:g> para upload de informações de depuração."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Compartilhar dados de depuração?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"O sistema detectou um problema."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Há uma solicitação do <xliff:g id="APP_NAME_0">%1$s</xliff:g> para upload de um relatório de bug criado neste dispositivo no dia <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. Os relatórios de bug incluem informações pessoais do seu dispositivo ou registradas por apps, como nomes de usuário, dados de local, identificadores do dispositivo e informações de rede. Por isso, só compartilhe relatórios de bug com pessoas e apps de sua confiança. Permitir que o <xliff:g id="APP_NAME_1">%4$s</xliff:g> faça upload do relatório de bug?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Ocorreu um erro ao processar o relatório de bug do app <xliff:g id="APP_NAME">%1$s</xliff:g>. Por isso, o compartilhamento dos dados detalhados de depuração foi negado. Lamentamos a interrupção."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permitir"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Negar"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permitir configurações restritas"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Configuração restrita"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Para sua segurança, essa configuração está indisponível no momento."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Ação indisponível durante uma ligação"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Golpistas costumam pedir esse tipo de ação durante ligações, então ela fica bloqueada para sua proteção. Se você está recebendo instruções de uma pessoa desconhecida para realizar essa ação, isso pode ser um golpe."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Não é possível permitir que apps instalem outros apps durante uma ligação."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Não é possível dar a um app acesso aos recursos de acessibilidade durante uma ligação."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Não é permitido ativar essa configuração durante uma ligação."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Não é possível realizar a ação durante uma ligação"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"O app não recebeu a seguinte permissão de acesso: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"O app solicitou acesso a uma permissão sensível que pode colocar suas informações pessoais e financeiras em risco.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>É possível que o app não funcione corretamente sem essa permissão restrita. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Aprenda a conceder acesso&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"O app não recebeu o acesso para ser a escolha padrão de: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml
index 76cd84d73..6177c65e0 100644
--- a/PermissionController/res/values-ro/strings.xml
+++ b/PermissionController/res/values-ro/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Acces de <xliff:g id="PERM">%1$s</xliff:g> pentru această aplicație pe <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Vezi toate permisiunile aplicației <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Vezi toate aplicațiile cu această permisiune"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informații"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Setări"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Afișează datele de utilizare a microfonului cu Asistentul"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Setările aplicațiilor nefolosite"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Elimină permisiunile dacă aplicația nu este folosită"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Deschiderea linkurilor"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Prestabilite pentru serviciu"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Prestabilit pentru spațiul privat"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizate pentru dispozitiv"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Altele"</string>
<string name="default_app_none" msgid="9084592086808194457">"Niciuna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Prestabilită de sistem)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nicio aplicație"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> dorește să încarce informațiile despre remedierea erorilor."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Trimiți datele despre remedierea erorilor?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistemul a detectat o problemă."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> solicită încărcarea unui raport de eroare de pe acest dispozitiv creat în data de <xliff:g id="DATE">%2$s</xliff:g> la <xliff:g id="TIME">%3$s</xliff:g>. Rapoartele de erori conțin informații cu caracter personal despre dispozitiv sau înregistrate de aplicații, de exemplu: nume de utilizator, date privind locațiile, identificatori ai dispozitivului și informații despre rețea. Trimite rapoarte de erori doar persoanelor și aplicațiilor de încredere. Permiți ca <xliff:g id="APP_NAME_1">%4$s</xliff:g> să încarce un raport de eroare?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"A apărut o eroare la procesarea raportului de eroare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>. Astfel, accesul la datele detaliate de remedierea erorilor a fost refuzat. Ne cerem scuze pentru întrerupere."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permite"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Refuz"</string>
@@ -475,7 +476,7 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"Permiți accesul &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; la fotografiile și conținutul media de pe &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să-ți acceseze agenda?"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze agenda ta de pe &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze locația acestui dispozitiv?"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"Permiți accesarea de către &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; a locației acestui dispozitiv?"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze locația dispozitivului &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"Aplicația va avea acces la locație doar când o folosești"</string>
<string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze locația acestui dispozitiv?"</string>
@@ -529,7 +530,7 @@
<string name="permgroupupgraderequestdetail_camera" msgid="6642747548010962597">"Aplicația dorește să fotografieze și să înregistreze videoclipuri permanent, chiar și când nu o folosești. "<annotation id="link">"Acordă această permisiune din setări."</annotation></string>
<string name="permgrouprequest_calllog" msgid="2065327180175371397">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să-ți acceseze jurnalele de apeluri?"</string>
<string name="permgrouprequest_device_aware_calllog" msgid="8220927190376843309">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să-ți acceseze jurnalele de apeluri telefonice de pe &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
- <string name="permgrouprequest_phone" msgid="1829234136997316752">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să dea și să gestioneze apeluri telefonice?"</string>
+ <string name="permgrouprequest_phone" msgid="1829234136997316752">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să și să gestioneze apeluri telefonice?"</string>
<string name="permgrouprequest_device_aware_phone" msgid="590399263670349955">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să inițieze și să gestioneze apeluri telefonice pe &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
<string name="permgrouprequest_sensors" msgid="4397358316850652235">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze datele de la senzori despre semnele vitale?"</string>
<string name="permgrouprequest_device_aware_sensors" msgid="3874451050573615157">"Permiți ca &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să acceseze datele de la senzori despre semnele tale vitale de pe &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;?"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Permite setările restricționate"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Setare restricționată"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Pentru securitatea ta, setarea este momentan indisponibilă."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Acțiune indisponibilă în timpul apelului telefonic"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Escrocii solicită adesea acest tip de acțiune în timpul conversațiilor telefonice, astfel că opțiunea este blocată pentru a te proteja. Dacă o persoană necunoscută te îndrumă să faci această acțiune, este posibil să fie o escrocherie."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Nu este permisă instalarea altor aplicații în timpul unui apel telefonic."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Nu este permisă acordarea accesului la accesibilitate pentru o aplicație în timpul unui apel telefonic."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Activarea acestei setări nu este permisă în timpul unui apel telefonic."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Nu se poate finaliza acțiunea în timpul apelului"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Accesul aplicației la <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> a fost refuzat"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplicația a solicitat acces la o permisiune de accesare a informațiilor sensibile care îți poate pune în pericol informațiile financiare și cu caracter personal.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Este posibil ca aplicația să nu funcționeze corect fără această permisiune restricționată. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Află cum să permiți accesul&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Accesul aplicației pentru a deveni <xliff:g id="ROLE_NAME">%1$s</xliff:g> prestabilită a fost refuzat"</string>
diff --git a/PermissionController/res/values-ru-v33/strings.xml b/PermissionController/res/values-ru-v33/strings.xml
index b45662712..5506ccd97 100644
--- a/PermissionController/res/values-ru-v33/strings.xml
+++ b/PermissionController/res/values-ru-v33/strings.xml
@@ -41,7 +41,7 @@
<string name="safety_center_qs_privacy_control" msgid="1160682635058529673">"Переключатель: <xliff:g id="PRIVACY_CONTROL_TITLE">%1$s</xliff:g> (<xliff:g id="PRIVACY_CONTROL_STATUS">%2$s</xliff:g>)"</string>
<string name="safety_center_qs_toggle_action" msgid="5920465736488119255">"Переключатель"</string>
<string name="safety_center_qs_open_action" msgid="2760200829912423728">"Открыть"</string>
- <string name="safety_center_review_settings_button" msgid="938981137942443930">"Перейти в настройки"</string>
+ <string name="safety_center_review_settings_button" msgid="938981137942443930">"Открыть настройки"</string>
<string name="safety_center_gear_label" msgid="5175877094379694098">"Настройки"</string>
<string name="safety_center_info_label" msgid="8993181584061825412">"Информация"</string>
</resources>
diff --git a/PermissionController/res/values-ru/strings.xml b/PermissionController/res/values-ru/strings.xml
index f4058b0f4..df9c874c1 100644
--- a/PermissionController/res/values-ru/strings.xml
+++ b/PermissionController/res/values-ru/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Разрешение \"<xliff:g id="PERM">%1$s</xliff:g>\" для этого приложения на устройстве \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\""</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Все разрешения приложения \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Все приложения с этим разрешением"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Информация"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Настройки"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Показывать сведения об использовании микрофона Ассистентом"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Настройки неиспользуемых приложений"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Отзывать разрешения, если приложение не используется"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Переход по ссылкам"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Стандартные для работы"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Приложения по умолчанию для личного пространства"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Оптимизированные для устройства"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Прочие"</string>
<string name="default_app_none" msgid="9084592086808194457">"Нет"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(по умолчанию)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Приложений нет"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение на загрузку данных об отладке."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Отправить данные об отладке?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"В системе обнаружена проблема"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Приложение \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" запрашивает разрешение загрузить с этого устройства отчет об ошибке, созданный <xliff:g id="DATE">%2$s</xliff:g> в <xliff:g id="TIME">%3$s</xliff:g>. Отчет может содержать персональную информацию об устройстве или сведения, сохраненные приложениями, например имена пользователей, геоданные, идентификаторы устройства и информацию о сетях. Отправляйте отчеты об ошибке только тем приложениям и пользователям, которым доверяете. Разрешить приложению \"<xliff:g id="APP_NAME_1">%4$s</xliff:g>\" загрузить отчет об ошибке?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Не удалось обработать информацию об ошибке в приложении \"<xliff:g id="APP_NAME">%1$s</xliff:g>\". Данные об отладке не отправлены. Приносим извинения за неудобства."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Разрешить"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Запретить"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Разрешить доступ к настройкам"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Настройки с ограниченным доступом"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"В целях безопасности эти настройки пока недоступны."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Действие недоступно во время звонка."</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Об этом часто просят телефонные мошенники. Мы заблокировали эту функцию, чтобы защитить вас. Если незнакомый человек предлагает вам использовать ее, возможно это мошенник."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Во время звонка нельзя дать приложениям разрешение на установку приложений."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Во время звонка нельзя дать приложению доступ к специальным возможностям."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Этот параметр нельзя включить во время звонка."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Нельзя выполнить действие во время звонка"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Для приложения заблокировано разрешение \"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>\""</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Приложение запрашивает разрешение на доступ к конфиденциальной информации. Если вы предоставите его, ваши личные и финансовые данные могут оказаться под угрозой.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Без такого разрешения приложение может работать неправильно. Узнайте, &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;как предоставить доступ к данным&lt;/a&gt;."</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Запрос на использование в качестве приложения по умолчанию (<xliff:g id="ROLE_NAME">%1$s</xliff:g>) отклонен"</string>
diff --git a/PermissionController/res/values-si/strings.xml b/PermissionController/res/values-si/strings.xml
index e158d0e27..395db3b32 100644
--- a/PermissionController/res/values-si/strings.xml
+++ b/PermissionController/res/values-si/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> මත මෙම යෙදුම සඳහා <xliff:g id="PERM">%1$s</xliff:g> ප්‍රවේශය"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"සියලුම <xliff:g id="APP">%1$s</xliff:g> අවසර බලන්න"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"මෙම අවසරය සහිත සියලුම යෙදුම් බලන්න"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"තොරතුරු"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"සැකසීම්"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"සහායක මයික්‍රෆෝන භාවිතය පෙන්වන්න"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"භාවිත නොකළ යෙදුම් සැකසීම්"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"යෙදුම භාවිත කර නැති නම් අවසර ඉවත් කරන්න"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"සබැඳි විවෘත කිරීම"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"වැඩ සඳහා පෙරනිමි"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"රහසිගත අවකාශය සඳහා පෙරනිමිය"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"උපාංගය සඳහා ප්‍රශස්ත කර ඇත"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"වෙනත්"</string>
<string name="default_app_none" msgid="9084592086808194457">"කිසිවක් නැත"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(පද්ධතිය පෙරනිමි)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"යෙදුම් නොමැත"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> නිදොසීම් තොරතුරු උඩුගත කිරීමට කැමතිය."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"නිදොසීම් දත්ත බෙදා ගන්නද?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"පද්ධතිය ගැටලුවක් අනාවරණ කර ඇත."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> මෙම උපාංගයෙන් <xliff:g id="DATE">%2$s</xliff:g> හි <xliff:g id="TIME">%3$s</xliff:g> හිදී ගෙන ඇති දෝෂ වාර්තාවක් උඩුගත කිරීමට ඉල්ලා සිටී. දෝෂ වාර්තාවල ඔබේ උපාංගය පිළිබඳ හෝ යෙදුම් විසින් සටහන් කර ඇති පුද්ගලික තොරතුරු, උදාහරණයක් ලෙස, පරිශීලක නාම, ස්ථාන දත්ත, උපාංග හැඳුනුම්කාරක සහ ජාල තොරතුරු ඇතුළත් වේ. ඔබ මෙම තොරතුරු සමඟ විශ්වාස කරන පුද්ගලයින් සහ යෙදුම් සමඟ පමණක් දෝෂ වාර්තා බෙදා ගන්න. <xliff:g id="APP_NAME_1">%4$s</xliff:g> හට දෝෂ වාර්තාවක් උඩුගත කිරීමට ඉඩ දෙන්න ද?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා දෝෂ වාර්තාව සැකසීමේ දෝෂයක් ඇති විය. එබැවින් විස්තරාත්මක නිදොසීම් දත්ත බෙදා ගැනීම ප්‍රතික්‍ෂේප කර ඇත. බාධා කිරීම ගැන කනගාටුයි."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"ඉඩ දෙන්න"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ප්‍රතික්ෂේප කරන්න"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"සීමා කළ සැකසීම්වලට ඉඩ දෙන්න"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"සීමා කළ සැකසීම"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"ඔබේ ආරක්ෂාව සඳහා, මෙම සැකසීම දැනට නොමැත."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"දුරකථන ඇමතුමක සිටින අතරතුර ක්‍රියාව ලබා ගත නොහැක."</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n වංචාකරුවන් බොහෝ විට දුරකථන ඇමතුම් සංවාද අතරතුර මෙවැනි ක්‍රියාමාර්ග ඉල්ලා සිටින බැවින්, ඔබව ආරක්ෂා කිරීමට එය අවහිර කර ඇත. ඔබ නොදන්නා කෙනෙකු විසින් මෙම ක්‍රියාමාර්ගය ගැනීමට ඔබට මඟ පෙන්වනු ලැබුවහොත්, එය වංචාවක් විය හැක."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"දුරකථන ඇමතුමක් අතරතුර යෙදුම් වලට වෙනත් යෙදුම් ස්ථාපනය කිරීමට ඉඩ නොදෙයි."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"දුරකථන ඇමතුමක් අතරතුර යෙදුමකට ප්‍රවේශ්‍යතාවයට ප්‍රවේශය ලබා දීමට ඉඩ දී නැත."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"දුරකථන ඇමතුමක් අතරතුර මෙම සැකසීම සබල කිරීමට ඉඩ දී නැත."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ඇමතුම අතරතුර ක්‍රියාව සම්පූර්ණ කළ නොහැක."</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"යෙදුම <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> වෙත ප්‍රවේශය ප්‍රතික්ෂේප කරන ලදි"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"යෙදුම ඔබේ පුද්ගලික සහ මූල්‍ය තොරතුරු අවදානමට ලක් කළ හැකි සංවේදී අවසරයකට ප්‍රවේශය ඉල්ලා ඇත.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>මෙම සීමා කළ අවසරය නොමැතිව යෙදුම නිසි ලෙස ක්‍රියා නොකරනු ඇත. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ප්‍රවේශයට ඉඩ දෙන ආකාරය දැන ගන්න&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"යෙදුම පෙරනිමි <xliff:g id="ROLE_NAME">%1$s</xliff:g> වීමට ප්‍රවේශය ප්‍රතික්ෂේප කරන ලදි"</string>
diff --git a/PermissionController/res/values-sk/strings.xml b/PermissionController/res/values-sk/strings.xml
index 92a77873f..8ef230e8f 100644
--- a/PermissionController/res/values-sk/strings.xml
+++ b/PermissionController/res/values-sk/strings.xml
@@ -74,7 +74,7 @@
<string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Dnes}=1{Pred 1 dňom}few{Pred # dňami}many{Pred # dňa}other{Pred # dňami}}"</string>
<string name="app_disable_dlg_positive" msgid="7418444149981904940">"Deaktivovať aplikáciu"</string>
<string name="app_disable_dlg_text" msgid="3126943217146120240">"Ak aplikáciu deaktivujete, systém a ďalšie aplikácie už nemusia fungovať podľa očakávaní. Upozorňujeme, že túto aplikáciu nemôžete odstrániť, pretože bola vo vašom zariadení predinštalovaná. Deaktiváciou ju vypnete a skryjete v zariadení."</string>
- <string name="app_permission_manager" msgid="3903811137630909550">"Správca povolení"</string>
+ <string name="app_permission_manager" msgid="3903811137630909550">"Správa povolení"</string>
<string name="never_ask_again" msgid="4728762438198560329">"Nabudúce sa nepýtať"</string>
<string name="no_permissions" msgid="3881676756371148563">"Žiadne povolenia"</string>
<string name="additional_permissions" msgid="5801285469338873430">"Ďalšie povolenia"</string>
@@ -86,7 +86,7 @@
<string name="default_permission_description" msgid="4624464917726285203">"umožňuje vykonať neznámu akciu"</string>
<string name="app_permissions_group_summary" msgid="8788419008958284002">"Povolené pri <xliff:g id="COUNT_0">%1$d</xliff:g> z(o) <xliff:g id="COUNT_1">%2$d</xliff:g> aplik."</string>
<string name="app_permissions_group_summary2" msgid="4329922444840521150">"Počet povolených aplikácií: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
- <string name="menu_show_system" msgid="4254021607027872504">"Zobraziť systémové"</string>
+ <string name="menu_show_system" msgid="4254021607027872504">"Zobraziť systémové aplikácie"</string>
<string name="menu_hide_system" msgid="3855390843744028465">"Skryť systémové aplikácie"</string>
<string name="menu_show_7_days_data" msgid="8979611198508523706">"Zobraziť 7 dní"</string>
<string name="menu_show_24_hours_data" msgid="8228054833323380780">"Zobraziť 24 hodín"</string>
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Prístup k položke <xliff:g id="PERM">%1$s</xliff:g> pre túto aplikáciu v zariadení <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Zobraziť všetky povolenia aplikácie <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Zobraziť všetky aplikácie s týmto povolením"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informácia"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Nastavenia"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Zobraziť používanie mikrofónu Asistentom"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nastavenia nepoužívaných aplikácií"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Odstrániť povolenia, ak sa aplikácia nepoužíva"</string>
@@ -442,7 +440,9 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Otváranie odkazov"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Predvolené na prácu"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Predvolené pre súkromný priestor"</string>
- <string name="default_app_none" msgid="9084592086808194457">"Žiadna"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimalizované pre zariadenie"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Iné"</string>
+ <string name="default_app_none" msgid="9084592086808194457">"Žiadna aplikácia"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Predvolené systémom)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Žiadne aplikácie"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"Ďalšie služby NFC"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce nahrať informácie o ladení."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Chcete zdieľať údaje ladenia?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Systém zistil problém."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> žiada o nahranie hlásenia chyby z tohto zariadenia vytvoreného <xliff:g id="DATE">%2$s</xliff:g> o <xliff:g id="TIME">%3$s</xliff:g>. Hlásenia chýb zahŕňajú osobné údaje o zariadení alebo osobné údaje zapísané aplikáciami, napríklad používateľské mená, údaje o polohe, identifikátory zariadenia a informácie o sieti. Hlásenia chýb zdieľajte iba s dôveryhodnými osobami a aplikáciami. Chcete povoliť aplikácii <xliff:g id="APP_NAME_1">%4$s</xliff:g> nahrať hlásenie chyby?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Pri spracúvaní hlásenia chyby pre <xliff:g id="APP_NAME">%1$s</xliff:g> sa vyskytla chyba. Zdieľanie podrobných údajov o ladení bolo preto zamietnuté. Ospravedlňujeme sa za prerušenie."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Povoliť"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Zamietnuť"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Povoliť obmedzené nastavenia"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Obmedzené nastavenie"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Z bezpečnostných dôvodov nie je toto nastavenie momentálne k dispozícii."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Akcia nie je počas telefonovania k dispozícii"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Podvodníci často žiadajú o tento typ akcie počas telefonických hovorov, preto je daná akcia z dôvodu vašej ochrany blokovaná. Ak vás o túto akciu žiada niekto, koho nepoznáte, môže ísť o podvod."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Počas telefonického hovoru nie je povolená inštalácia aplikácií inými aplikáciami."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Počas telefonického hovoru nie je povolené udeliť aplikácii prístup k službe dostupnosti."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Počas telefonického hovoru nie je povolené zapnúť toto nastavenie."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Počas hovoru sa akcia nedá dokončiť"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikácii bol prístup k povoleniu <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> zamietnutý"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Táto aplikácia vyžaduje prístup k citlivému povoleniu, čo môže ohroziť vaše osobné údaje a finančné informácie.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Je možné, že bez tohto obmedzeného povolenia nebude aplikácia správne fungovať. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Ako povoliť prístup&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikácii bol zamietnutý prístup a predvolene nemôže byť <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-sl/strings.xml b/PermissionController/res/values-sl/strings.xml
index 3a9b71fa0..f0311deba 100644
--- a/PermissionController/res/values-sl/strings.xml
+++ b/PermissionController/res/values-sl/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Dostop do dovoljenja »<xliff:g id="PERM">%1$s</xliff:g>« za to aplikacijo v napravi <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ogled vseh dovoljenj za aplikacijo <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ogled vseh aplikacij s tem dovoljenjem"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacije"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Nastavitve"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Prikaz uporabe pomožnega mikrofona"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Nastavitve neuporabljenih aplikacij"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Odstrani dovoljenja, če aplikacija ni v uporabi"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Odpiranje povezav"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Privzeto za delo"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Privzeto za zasebni prostor"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizirano za napravo"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Drugo"</string>
<string name="default_app_none" msgid="9084592086808194457">"Brez"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(privzeta v sistemu)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ni aplikacij"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> želi naložiti podatke za odpravljanje napak."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Želite poslati podatke za odpravljanje napak?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem je odkril težavo."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> želi iz te naprave naložiti poročilo o napakah, pripravljeno dne <xliff:g id="DATE">%2$s</xliff:g> ob <xliff:g id="TIME">%3$s</xliff:g>. Poročila o napakah vključujejo osebne podatke o vaši napravi ali osebne podatke, ki so jih zabeležile aplikacije, na primer uporabniška imena, lokacijske podatke, identifikatorje naprave in podatke o omrežju. Poročila o napakah delite samo z osebami in aplikacijami, ki jim te podatke lahko zaupate. Ali aplikaciji <xliff:g id="APP_NAME_1">%4$s</xliff:g> dovolite, da naloži poročilo o napakah?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Pri obdelavi poročila o napakah za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> je prišlo do napake, zato je bilo deljenje podrobnih podatkov za odpravljanje napak zavrnjeno. Oprostite zaradi prekinitve."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Dovoli"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Zavrni"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Dovoli omejene nastavitve"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Omejena nastavitev"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Zaradi vaše varnosti ta nastavitev trenutno ni na voljo."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Dejanje ni na voljo med telefonskim klicem"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Goljufi med pogovori v telefonskih klicih pogosto zahtevajo to vrsto dejanja, zato je to dejanje blokirano zaradi vaše zaščite. Če vas k temu dejanju napeljuje nekdo, ki ga ne poznate, gre morda za poskus goljufije."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Med telefonskim klicem ni dovoljeno omogočati aplikacijam nameščanja drugih aplikacij."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Med telefonskim klicem ni dovoljeno omogočiti aplikaciji dostopa do dostopnosti."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Med telefonskim klicem ni dovoljeno omogočiti te nastavitve."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Dejanja ni mogoče izvesti med klicem"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikaciji je bil zavrnjen dostop do dovoljenja »<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>«"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacija je zahtevala dostop do občutljivega dovoljenja, ki lahko ogrozi vaše osebne in finančne podatke.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Aplikacija morda ne bo pravilno delovala brez tega omejenega dovoljenja. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Preberite, kako omogočite dostop&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikaciji je bil zavrnjen dostop do privzete vloge »<xliff:g id="ROLE_NAME">%1$s</xliff:g>«"</string>
diff --git a/PermissionController/res/values-sq/strings.xml b/PermissionController/res/values-sq/strings.xml
index 74d19dca0..c2bd76835 100644
--- a/PermissionController/res/values-sq/strings.xml
+++ b/PermissionController/res/values-sq/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Qasja te <xliff:g id="PERM">%1$s</xliff:g> për këtë aplikacion në <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Shiko të gjitha lejet e aplikacionit \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Shiko të gjitha aplikacionet me këtë leje"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Informacione"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Cilësimet"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Shfaq përdorimin e mikrofonit të \"Asistentit\""</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Cilësimet e aplikacioneve të papërdorura"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Hiq lejet nëse aplikacioni nuk është përdorur"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Hapja e lidhjeve"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Të parazgjedhura për punën"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Të parazgjedhurat për hapësirën private"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimizuar për pajisjen"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Të tjera"</string>
<string name="default_app_none" msgid="9084592086808194457">"Asnjë"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Parazgjedhja e sistemit)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Nuk ka aplikacione"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> dëshiron të ngarkojë informacionin e korrigjimit."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Të ndahen të dhënat e korrigjimit?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistemi ka zbuluar një problem."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> kërkon të ngarkojë një raport të defekteve në kod nga kjo pajisje të regjistruar më <xliff:g id="DATE">%2$s</xliff:g> në <xliff:g id="TIME">%3$s</xliff:g>. Raportet e defekteve në kod përfshijnë informacione personale rreth pajisjes sate ose të regjistruara nga aplikacionet, për shembull emrat e përdoruesve, të dhënat e vendndodhjes, identifikuesit e pajisjeve, si dhe informacione të rrjetit. Ndaji raportet e defekteve në kod vetëm me personat dhe aplikacionet që i beson me këtë informacion. Të lejohet <xliff:g id="APP_NAME_1">%4$s</xliff:g> të ngarkojë një raport të defekteve në kod?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Kishte një gabim me përpunimin e raportit të defekteve në kod për <xliff:g id="APP_NAME">%1$s</xliff:g>. Kështu që ndarja e të dhënave të detajuara të korrigjimit është refuzuar. Na vjen keq për ndërprerjen."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Lejo"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Refuzo"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Lejo cilësimet e kufizuara"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Cilësim i kufizuar"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Për sigurinë tënde, ky cilësim nuk ofrohet për momentin."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Veprimi nuk ofrohet kur je në një telefonatë"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Mashtruesit e kërkojnë shpesh këtë lloj veprimi gjatë bisedave të telefonatave, prandaj kjo është bllokuar për të të mbrojtur ty. Nëse po udhëzohesh ta kryesh këtë veprim nga dikush që nuk e njeh, mund të jetë një mashtrim."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Nuk lejohet që aplikacionet të lejohen të instalojnë aplikacione të tjera gjatë një telefonate."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Nuk lejohet t\'i japësh një aplikacioni qasje te qasshmëria gjatë një telefonate."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Aktivizimi i këtij cilësimi nuk lejohet gjatë një telefonate."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Veprimi nuk mund të përfundohet gjatë telefonatës"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Aplikacionit iu refuzua qasja te: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Aplikacioni kërkoi qasje në një leje delikate që mund t\'i vendosë në rrezik informacionet e tua personale dhe financiare.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Ka mundësi që aplikacioni të mos funksionojë si duhet pa këtë leje të kufizuar. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Mëso se si të lejosh qasjen&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Aplikacionit iu refuzua qasja për të qenë parazgjedhja për: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-sr-v33/strings.xml b/PermissionController/res/values-sr-v33/strings.xml
index 235357c27..d778b2a31 100644
--- a/PermissionController/res/values-sr-v33/strings.xml
+++ b/PermissionController/res/values-sr-v33/strings.xml
@@ -33,7 +33,7 @@
<string name="safety_center_more_issues_card_collapse_action" msgid="7485597582198474637">"Скупи"</string>
<string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"Обавештење. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string>
<string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"Радња је довршена"</string>
- <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Проверите подешавања која могу да додају заштиту уређају"</string>
+ <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"Проверите подешавања која могу да допринесу бољој заштити уређаја"</string>
<string name="safety_center_qs_page_landing" msgid="1717368301679228128">"Брза подешавања безбедности и приватности"</string>
<string name="safety_center_qs_close_button" msgid="1352313308176244599">"Затвори"</string>
<string name="safety_center_qs_expand_action" msgid="2193190557696484169">"Прошири и прикажи опције"</string>
diff --git a/PermissionController/res/values-sr/strings.xml b/PermissionController/res/values-sr/strings.xml
index 19815a0d4..228728d4b 100644
--- a/PermissionController/res/values-sr/strings.xml
+++ b/PermissionController/res/values-sr/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Ова апликација има приступ за: <xliff:g id="PERM">%1$s</xliff:g> на уређају <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Прикажи све дозволе за: <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Прикажи све апликације са овом дозволом"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Информације"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Подешавања"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Прикажи како Помоћник користи микрофон"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Подешавања некоришћених апликација"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Уклони дозволе ако се апликација не користи"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Отварање линкова"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Подразумевана за посао"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Подразумевано за приватан простор"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Оптимизовано за уређај"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Друго"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ништа"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Подразумевана системска)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Нема апликација"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> жели да отпреми информације за отклањање грешака."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Желите да делите податке о отклањању грешака?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Систем је открио проблем."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> тражи да отпреми извештај о грешкама са овог уређаја који је направљен <xliff:g id="DATE">%2$s</xliff:g> у <xliff:g id="TIME">%3$s</xliff:g>. Извештаји о грешкама обухватају личне податке о уређају или податке које су евидентирале апликације, на пример, корисничка имена, податке о локацији, идентификаторе уређаја и информације о мрежи. Делите извештаје о грешкама само са људима и апликацијама које сматрате поузданим за те информације. Желите ли да дозволите да <xliff:g id="APP_NAME_1">%4$s</xliff:g> отпреми извештај о грешци?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Дошло је до грешке при обради извештаја о грешци за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>. Зато је одбијено дељење детаљних података о отклањању грешака. Извињавамо се због прекида."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Дозволи"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Одбиј"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Дозволи ограничена подешавања"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Ограничено подешавање"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ово подешавање је тренутно недоступно ради ваше безбедности."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Радња није доступна током телефонског позива"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Преваранти често траже овај тип радње током телефонског позива, па смо је блокирали да бисмо вас заштитили. Ако вас неко кога не познајете упућује на ову радњу, то би могла да буде превара."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Није дозвољено да апликације инсталирају друге апликације током телефонског позива."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Није дозвољено да апликација добије приступ услузи приступачности током телефонског позива."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Омогућавање овог подешавања није дозвољено током телефонског позива."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Радња не може да се заврши током позива"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Апликацији није дозвољен приступ дозволи: <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Апликација је затражила приступ осетљивој дозволи, што може да угрози безбедност личних и финансијских података.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Апликација можда неће радити исправно без ове ограничене дозволе. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Сазнајте како да дозволите приступ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Апликацији није дозвољен приступ да постане подразумевана: <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-sv/strings.xml b/PermissionController/res/values-sv/strings.xml
index 710c8692d..7e4c79fd8 100644
--- a/PermissionController/res/values-sv/strings.xml
+++ b/PermissionController/res/values-sv/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Åtkomst till <xliff:g id="PERM">%1$s</xliff:g> för den här appen på <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Visa alla behörigheter för <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Visa alla appar med den här behörigheten"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Information"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Inställningar"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Visa mikrofonanvändning för assistenten"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Inställningar för appar som inte används"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ta bort behörigheter om en app inte används"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Öppna länkar"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Standardinställning för jobbet"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Standard för privat utrymme"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Optimerade för enheten"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Andra"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ingen"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(System­standard)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Inga appar"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vill ladda upp felsökningsinformation."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Vill du dela felsöknings­information?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Ett problem har upptäckts i systemet."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> begär tillstånd att ladda upp en felrapport som sparades <xliff:g id="DATE">%2$s</xliff:g> kl. <xliff:g id="TIME">%3$s</xliff:g> från den här enheten. Felrapporter innehåller personlig information om enheten eller information som loggats av appar, t.ex. användarnamn, platsdata, enhetsidentifierare och nätverksinformation. Dela bara felrapporter med personer och appar du litar på. Tillåter du att <xliff:g id="APP_NAME_1">%4$s</xliff:g> laddar upp en felrapport?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Ett fel uppstod när felrapporten för <xliff:g id="APP_NAME">%1$s</xliff:g> skulle behandlas. Därför har delning av utförlig felsökningsdata nekats. Ursäkta avbrottet."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Tillåt"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Neka"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Tillåt blockerade inställningar"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Begränsad inställning"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Av säkerhetsskäl är den här inställningen inte tillgänglig för närvarande."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Åtgärden är inte tillgänglig under pågående samtal"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Bedragare vill ofta att man gör sådana här saker under telefonsamtalet, så vi har blockerat den möjligheten för att skydda dig. Om du blir tillsagd att göra detta av någon du inte känner kan det vara ett bedrägeri."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Det går inte att tillåta att appar installerar andra appar under ett telefonsamtal."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Det går inte att ge en app åtkomst till tillgänglighetsfunktioner under ett telefonsamtal."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Det går inte att aktivera den här inställningen under ett telefonsamtal."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Det går inte att slutföra åtgärden under samtal"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Appen nekades åtkomst till <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Appen begärde åtkomstbehörighet till känsliga uppgifter, vilket kan utsätta din personliga och finansiella information för risk.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Appen kanske inte fungerar som den ska utan denna begränsade behörighet. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&amp;gtLäs mer om hur du tillåter åtkomst&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Appen nekades åtkomst till standardrollen för <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml
index 8eef23afa..403e22568 100644
--- a/PermissionController/res/values-sw/strings.xml
+++ b/PermissionController/res/values-sw/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Ufikaiji wa <xliff:g id="PERM">%1$s</xliff:g> katika programu hii kwenye <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Angalia ruhusa zote za <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Angalia programu zote zenye ruhusa hii"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Maelezo"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Mipangilio"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Onyesha matumizi ya maikrofoni ya mratibu"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Mipangilio ya programu zisizotumika"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ondoa ruhusa ikiwa programu haitumiki"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Kufungua viungo"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Programu chaguomsingi kazini"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Programu chaguomsingi za sehemu ya faragha"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Zilizoboreshwa ili kufaa kifaa chako"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Nyingine"</string>
<string name="default_app_none" msgid="9084592086808194457">"Hakuna"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Programu chaguomsingi ya mfumo)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Hakuna programu"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> inataka kupakia maelezo ya utatuzi."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Ungependa kushiriki data ya utatuzi?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Mfumo umetambua hitilafu."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> inaomba kupakia ripoti ya hitilafu kutoka kifaa hiki, iliyochakatwa tarehe <xliff:g id="DATE">%2$s</xliff:g> saa <xliff:g id="TIME">%3$s</xliff:g>. Ripoti za hitilafu hujumuisha taarifa binafsi kuhusu kifaa chako au iliyohifadhiwa na programu, kwa mfano, majina ya watumiaji, data ya mahali, vitambulisho vya vifaa na maelezo ya mtandao. Tuma tu ripoti za hitilafu kwa watu au programu unazoamini. Ungependa kuruhusu <xliff:g id="APP_NAME_1">%4$s</xliff:g> ipakie ripoti ya hitilafu?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Hitilafu imetokea wakati wa kuchakata ripoti ya hitilafu ya <xliff:g id="APP_NAME">%1$s</xliff:g>. Kwa hivyo, kushiriki data ya maelezo ya kina ya utatuzi kumekataliwa. Samahani kwa usumbufu."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Ruhusu"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Kataa"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Ruhusu mipangilio yenye mipaka"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Mipangilio imezuiwa"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ili kulinda usalama wako, mipangilio hii haipatikani kwa sasa."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Kitendo hiki hakipatikani unapopiga simu"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Mara nyingi, walaghai hukuomba utekeleze kitendo cha aina hii wakati wa mazungumzo ya simu, kwa hivyo kimezuiwa ili kukulinda. Iwapo unaelekezwa utekeleze kitendo hiki na mtu usiyemjua, huenda ikawa ni ulaghai."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Programu haziruhusiwi kuweka programu nyingine kwenye kifaa wakati unapiga simu."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Huruhusiwi kuwasha huduma ya ufikivu kwenye programu wakati unapiga simu."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Huruhusiwi kuwasha mipangilio hii wakati unapiga simu."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Huwezi kukamilisha kitendo hiki simu inapopigwa"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Programu haijapewa idhini ya kufikia <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Programu imeomba kufikia ruhusa nyeti, hali ambayo inaweza kuhatarisha maelezo yako ya kifedha na ya binafsi.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Kuna uwezekano kuwa programu haitafanya kazi vizuri bila ruhusa hii inayodhibitiwa. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Pata maelezo kuhusu jinsi ya kuruhusu ufikiaji&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Programu haijapewa idhini ya kuwa <xliff:g id="ROLE_NAME">%1$s</xliff:g> chaguomsingi"</string>
diff --git a/PermissionController/res/values-ta/strings.xml b/PermissionController/res/values-ta/strings.xml
index c218cde22..8e8ac2bab 100644
--- a/PermissionController/res/values-ta/strings.xml
+++ b/PermissionController/res/values-ta/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> சாதனத்தில் இந்த ஆப்ஸுக்கான <xliff:g id="PERM">%1$s</xliff:g> அணுகல்"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"அனைத்து <xliff:g id="APP">%1$s</xliff:g> அனுமதிகளையும் காட்டு"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"இந்த அனுமதியைக் கொண்டுள்ள அனைத்து ஆப்ஸையும் காட்டு"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"தகவல்கள்"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"அமைப்புகள்"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"அசிஸ்டண்ட் மைக்ரோஃபோன் உபயோகத்தைக் காட்டு"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"பயன்படுத்தப்படாத ஆப்ஸ் அமைப்புகள்"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"இந்த ஆப்ஸ் பயன்படுத்தப்படவில்லை என்றால் அனுமதிகளை அகற்றவும்"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"இணைப்புகளைத் திறத்தல்"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"பணிக்கான இயல்பு நிலை ஆப்ஸ்"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ரகசிய இடத்திற்கான இயல்பு"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"சாதனத்திற்காக மேம்படுத்தப்பட்டவை"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"மற்றவை"</string>
<string name="default_app_none" msgid="9084592086808194457">"ஏதுமில்லை"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(சிஸ்டத்தின் இயல்புநிலை)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ஆப்ஸ் இல்லை"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"பிழைதிருத்தத் தகவலை <xliff:g id="APP_NAME">%1$s</xliff:g> பதிவேற்ற விரும்புகிறது."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"பிழைதிருத்தத் தரவைப் பகிர வேண்டுமா?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"சிக்கல் இருப்பதை சிஸ்டம் கண்டறிந்துள்ளது."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"இந்தச் சாதனத்திலிருந்து <xliff:g id="DATE">%2$s</xliff:g> அன்று <xliff:g id="TIME">%3$s</xliff:g> மணிக்கு எடுக்கப்பட்ட பிழை அறிக்கையைப் பதிவேற்றுமாறு <xliff:g id="APP_NAME_0">%1$s</xliff:g> கோருகிறது. இதில் பயனர் பெயர்கள், இருப்பிடத் தரவு, சாதன அடையாளங்காட்டிகள் மற்றும் நெட்வொர்க் தகவல்கள் போன்ற உங்கள் சாதனம் அல்லது உள்நுழைந்துள்ள ஆப்ஸ் பற்றிய தனிப்பட்ட தகவல்களும் உள்ளடங்கும். இந்தத் தகவல்களுடனான பிழை அறிக்கைகளை நம்பகமானவர்களுடனும் ஆப்ஸுடனும் மட்டுமே பகிரவும். பிழை அறிக்கையைப் பதிவேற்ற <xliff:g id="APP_NAME_1">%4$s</xliff:g> ஆப்ஸை அனுமதிக்கவா?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸிற்கான பிழை அறிக்கையைச் செயல்படுத்துவதில் பிழை ஏற்பட்டுள்ளது. பிழைதிருத்தத்திற்கான தரவைப் பகிர்வது மறுக்கப்பட்டுள்ளது. தடங்கலுக்கு வருந்துகிறோம்."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"அனுமதி"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"நிராகரி"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"கட்டுப்படுத்தப்பட்ட அமைப்பை அனுமதி"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"கட்டுப்படுத்தப்பட்ட அமைப்பு"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"உங்கள் பாதுகாப்பிற்காக, இந்த அமைப்பு தற்போது இல்லை."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"மொபைல் அழைப்பின்போது இந்தச் செயலைச் செய்ய முடியாது"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n மொபைல் அழைப்பு உரையாடல்களின்போது, மோசடி செய்பவர்கள் அடிக்கடி இதுபோன்ற செயலைச் செய்யுமாறு கேட்கின்றனர், எனவே இவற்றிலிருந்து உங்களைப் பாதுகாக்கவே அனுமதி தடுக்கப்பட்டுள்ளது. உங்களுக்குத் தெரியாத ஒருவரால் இந்தச் செயலைச் செய்வதற்கு நீங்கள் வழிகாட்டப்பட்டால் அது மோசடியாக இருக்கலாம்."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"மொபைல் அழைப்பின்போது ஓர் ஆப்ஸ் பிற ஆப்ஸை நிறுவ அனுமதிப்பது அனுமதிக்கப்படாது."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"மொபைல் அழைப்பின்போது ஓர் ஆப்ஸுக்கு மாற்றுத்திறன் வசதிக்கான அணுகலை வழங்குவது அனுமதிக்கப்படாது."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"மொபைல் அழைப்பின்போது இந்த அமைப்பை இயக்குவது அனுமதிக்கப்படாது."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"அழைப்பின்போது செயலை நிறைவுசெய்ய முடியாது"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>க்கான ஆப்ஸ் அணுகல் நிராகரிக்கப்பட்டது"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"பாதுகாக்க வேண்டிய தகவல்களுக்கான அனுமதியை வழங்க ஆப்ஸ் கேட்டுள்ளது, இது உங்கள் தனிப்பட்ட மற்றும் நிதித் தகவல்களை ஆபத்துக்குள்ளாக்கலாம்.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>இந்தக் கட்டுப்படுத்தப்பட்ட அனுமதி இல்லாமல் ஆப்ஸ் சரியாக வேலை செய்யாமல் போகக்கூடும். &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;எப்படி அணுகல் வழங்குவதென அறிக&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"இயல்புநிலை <xliff:g id="ROLE_NAME">%1$s</xliff:g>க்கான ஆப்ஸ் அணுகல் நிராகரிக்கப்பட்டது"</string>
diff --git a/PermissionController/res/values-te/strings.xml b/PermissionController/res/values-te/strings.xml
index eb871fafa..3f06ed3c0 100644
--- a/PermissionController/res/values-te/strings.xml
+++ b/PermissionController/res/values-te/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> పరికరంలో ఈ యాప్‌నకు <xliff:g id="PERM">%1$s</xliff:g> యాక్సెస్"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"అన్ని \'<xliff:g id="APP">%1$s</xliff:g>\' అనుమతులను చూడండి"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ఈ అనుమతి ఉన్న అన్ని యాప్‌లను చూడండి"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"సమాచారం"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"సెట్టింగ్‌లు"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"అసిస్టెంట్ మైక్రోఫోన్ వినియోగాన్ని చూపు"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"ఉపయోగించని యాప్ సెట్టింగ్‌లు"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"యాప్‌ని ఉపయోగించకపోతే, అనుమతులను తీసివేయండి"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"లింక్‌లను తెరవడం"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"వర్క్‌ ప్లేస్ కోసం ఆటోమేటిక్"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ఆటోమేటిక్‌గా ప్రైవేట్ స్పేస్"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"పరికరం కోసం ఆప్టిమైజ్ చేసినవి"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"ఇతర యాప్‌లు"</string>
<string name="default_app_none" msgid="9084592086808194457">"ఏదీ కాదు"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(సిస్టమ్ ఆటోమేటిక్)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ఏ యాప్ లేదు"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>డీబగ్గింగ్ సమాచారాన్ని అప్‌లో డ్ చేయదలుచుకుంటున్నారు."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"డీబగ్గింగ్ డేటాను షేర్ చేయమంటారా?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"సిస్టమ్ ఒక సమస్యను గుర్తించింది."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> <xliff:g id="DATE">%2$s</xliff:g>న <xliff:g id="TIME">%3$s</xliff:g>కు ఈ డివైజ్‌లో జ‌నరేట్ అయిన‌ డీబగ్ రిపోర్ట్‌ను అప్‌లోడ్ చేయండి అని అభ్యర్థిస్తోంది. బగ్ రిపోర్ట్‌లు మీ డివైజ్‌ లేదా లాగిన్ చేసిన యాప్‌ల వ్యక్తిగత సమాచారం, ఉదాహరణకు యూజ‌ర్‌ పేర్లు, లొకేష‌న్‌ డేటా, డివైజ్ గుర్తింపుల‌తో పాటు నెట్‌వర్క్ సమాచారాన్ని కలిగి ఉంటాయి. ఈ సమాచారం విషయంలో మీకు నమ్మకం ఉన్న‌ వ్యక్తులకు, యాప్‌లకు మాత్రమే బగ్ రిపోర్ట్‌ వివరాలను షేర్ చేయండి. బగ్ రిపోర్ట్‌ను అప్‌లోడ్ చేయడానికి <xliff:g id="APP_NAME_1">%4$s</xliff:g>ను అనుమతించాలా?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం బగ్ రిపోర్ట్‌ ప్రాసెస్ చేయడంలో ఎర్రర్ ఉంది. కాబట్టి వివరణాత్మక డీబగ్గింగ్ డేటాను షేర్ చేయడాన్ని నిరాకరించారు. అంతరాయానికి చింతిస్తున్నాము."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"అనుమతించండి"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"తిరస్కరించు"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"పరిమితం చేసిన సెట్టింగ్‌లను అనుమతించండి"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"పరిమితం చేయబడిన సెట్టింగ్"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"మీ సెక్యూరిటీ కోసం, ఈ సెట్టింగ్ ప్రస్తుతం అందుబాటులో లేదు."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"ఫోన్ కాల్‌లో ఉండగా ఈ చర్య అందుబాటులో ఉండదు"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n ఫోన్ కాల్ సంభాషణల సమయంలో స్కామర్‌లు తరచుగా ఈ రకమైన చర్యను రిక్వెస్ట్ చేస్తారు, కాబట్టి మిమ్మల్ని రక్షించడానికి ఈ ఫీచర్ బ్లాక్ చేయబడుతుంది. మీకు తెలియని వారు ఈ చర్య తీసుకోవాల్సిందిగా మిమ్మల్ని గైడ్ చేస్తే, అది స్కామ్ కావచ్చు."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ఫోన్ కాల్ మాట్లాడే సమయంలో ఇతర యాప్‌లను ఇన్‌స్టాల్ చేయడానికి యాప్‌లను అనుమతించడానికి వీలు లేదు."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ఫోన్ కాల్ మాట్లాడే సమయంలో యాప్‌నకు యాక్సెసిబిలిటీ యాక్సెస్ ఇవ్వడం అనుమతించబడదు."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ఫోన్ కాల్ మాట్లాడే సమయంలో ఈ సెట్టింగ్‌ను ఎనేబుల్ చేయడం అనుమతించడబడదు."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"కాల్ మాట్లాడే సమయంలో చర్యను పూర్తి చేయడం కుదరదు"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"యాప్ <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>‌కు యాక్సెస్ తిరస్కరించబడింది"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"మీ వ్యక్తిగత, ఆర్థిక సమాచారాన్ని ప్రమాదంలో పడేసే గోప్యమైన సమాచార యాక్సెస్ అనుమతికి యాప్ యాక్సెస్‌ను రిక్వెస్ట్ చేయడం జరిగింది.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>ఈ అదనపు అవసరాలు గల అనుమతి లేకుండా యాప్ సరిగ్గా పని చేయకపోయే అవకాశం ఉంది. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;యాక్సెస్‌ను అనుమతించడం ఎలాగో తెలుసుకోండి&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ఆటోమేటిక్ <xliff:g id="ROLE_NAME">%1$s</xliff:g>‌గా ఉండటానికి యాప్‌నకు యాక్సెస్ నిరాకరించబడింది"</string>
diff --git a/PermissionController/res/values-th/strings.xml b/PermissionController/res/values-th/strings.xml
index d5b507a73..6d185c95e 100644
--- a/PermissionController/res/values-th/strings.xml
+++ b/PermissionController/res/values-th/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"สิทธิ์เข้าถึง<xliff:g id="PERM">%1$s</xliff:g>สำหรับแอปนี้บน <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ดูสิทธิ์ทั้งหมดของ \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ดูแอปทั้งหมดที่มีสิทธิ์นี้"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"ข้อมูล"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"การตั้งค่า"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"แสดงการใช้ไมโครโฟนของ Assistant"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"การตั้งค่าแอปที่ไม่ได้ใช้"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"นำสิทธิ์ออกหากไม่ได้ใช้งานแอป"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"การเปิดลิงก์"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"ค่าเริ่มต้นสำหรับงาน"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"ค่าเริ่มต้นสำหรับพื้นที่ส่วนตัว"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"ได้รับการเพิ่มประสิทธิภาพสำหรับอุปกรณ์"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"อื่นๆ"</string>
<string name="default_app_none" msgid="9084592086808194457">"ไม่มี"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(ค่าเริ่มต้นของระบบ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"ไม่มีแอป"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ต้องการอัปโหลดข้อมูลการแก้ไขข้อบกพร่อง"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"แชร์ข้อมูลการแก้ไขข้อบกพร่องไหม"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"ระบบตรวจพบปัญหา"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> กำลังขออัปโหลดรายงานข้อบกพร่องจากอุปกรณ์นี้ซึ่งบันทึกไว้เมื่อวันที่ <xliff:g id="DATE">%2$s</xliff:g> เวลา <xliff:g id="TIME">%3$s</xliff:g> รายงานข้อบกพร่องมีข้อมูลส่วนบุคคลเกี่ยวกับอุปกรณ์ของคุณหรือที่แอปต่างๆ บันทึกไว้ เช่น ชื่อผู้ใช้ ข้อมูลตำแหน่ง ตัวระบุอุปกรณ์ และข้อมูลเครือข่าย โปรดแชร์รายงานข้อบกพร่องกับบุคคลและแอปที่คุณไว้วางใจให้เห็นข้อมูลนี้เท่านั้น อนุญาตให้ <xliff:g id="APP_NAME_1">%4$s</xliff:g> อัปโหลดรายงานข้อบกพร่องไหม"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"เกิดข้อผิดพลาดในการประมวลผลรายงานข้อบกพร่องของ <xliff:g id="APP_NAME">%1$s</xliff:g> การแชร์ข้อมูลการแก้ไขข้อบกพร่องอย่างละเอียดจึงถูกปฏิเสธ ขออภัยสำหรับความขัดข้อง"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"อนุญาต"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"ปฏิเสธ"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"อนุญาตการตั้งค่าที่จำกัด"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"การตั้งค่าที่จำกัด"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"การตั้งค่านี้ใช้ไม่ได้ในตอนนี้เพื่อความปลอดภัยของคุณ"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"การดำเนินการไม่พร้อมใช้งานขณะกำลังโทรศัพท์"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n สแกมเมอร์มักขอการดำเนินการประเภทนี้ระหว่างการสนทนาทางโทรศัพท์ ดังนั้นระบบจึงบล็อกไว้เพื่อปกป้องคุณ หากมีคนที่คุณไม่รู้จักบอกให้คุณดำเนินการดังกล่าว นั่นอาจเป็นการหลอกลวง"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"ไม่อนุญาตให้แอปติดตั้งแอปอื่นๆ ระหว่างการโทร"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"ไม่อนุญาตให้แอปเข้าถึงการช่วยเหลือพิเศษระหว่างการโทร"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"ไม่อนุญาตให้เปิดใช้การตั้งค่านี้ระหว่างการโทร"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"ดำเนินการให้เสร็จสิ้นระหว่างการโทรไม่ได้"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"แอปถูกปฏิเสธไม่ให้เข้าถึง <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"แอปขอเข้าถึงสิทธิ์ที่มีความละเอียดอ่อนซึ่งอาจทำให้ข้อมูลส่วนบุคคลและข้อมูลทางการเงินของคุณมีความเสี่ยง<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>แอปอาจทำงานได้ไม่ถูกต้องหากไม่มีสิทธิ์ที่จำกัดนี้ &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;ดูวิธีอนุญาตให้เข้าถึง&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"แอปถูกปฏิเสธไม่ให้เข้าถึงเพื่อเป็น<xliff:g id="ROLE_NAME">%1$s</xliff:g> เริ่มต้น"</string>
diff --git a/PermissionController/res/values-tl/strings.xml b/PermissionController/res/values-tl/strings.xml
index 85c4f0460..4b5001b3b 100644
--- a/PermissionController/res/values-tl/strings.xml
+++ b/PermissionController/res/values-tl/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"access sa <xliff:g id="PERM">%1$s</xliff:g> para sa app na ito sa <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Tingnan ang lahat ng pahintulot ng <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Tingnan ang lahat ng app na may ganitong pahintulot"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Impormasyon"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Mga Setting"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Ipakita ang paggamit ng mikropono ng assistant"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Mga setting ng hindi ginagamit na app"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Alisin ang mga pahintulot kung hindi ginagamit ang app"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Pagbubukas ng mga link"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Default para sa trabaho"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Default para sa pribadong space"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Na-optimize para sa device"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Iba pa"</string>
<string name="default_app_none" msgid="9084592086808194457">"Wala"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Default ng system)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Walang app"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Gustong mag-upload ng <xliff:g id="APP_NAME">%1$s</xliff:g> ng impormasyon sa pag-debug."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Ibahagi ang data sa pag-debug?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"May natukoy na problema ang system."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Hinihiling ng <xliff:g id="APP_NAME_0">%1$s</xliff:g> na mag-upload ng ulat ng bug mula sa device na ito na kinuha noong <xliff:g id="DATE">%2$s</xliff:g> sa ganap na <xliff:g id="TIME">%3$s</xliff:g>. Kabilang sa mga ulat ng bug ang personal na impormasyon tungkol sa iyong device o naka-log ayon sa mga app, halimbawa, mga user name, data ng lokasyon, pagkakakilanlan ng device, at impormasyon ng network. Magbahagi lang ng mga ulat ng bug sa mga tao at app na pinagkakatiwalaan mo ng impormasyong ito. Payagan ang <xliff:g id="APP_NAME_1">%4$s</xliff:g> na mag-upload ng ulat ng bug?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Nagka-error sa pagproseso ng ulat ng bug para sa <xliff:g id="APP_NAME">%1$s</xliff:g>. Kaya naman tinanggihan ang pagbabahagi ng detalyadong data ng pag-debug. Paumanhin sa pagkaantala."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Payagan"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Tanggihan"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Payagan ang mga pinaghihigpitang setting"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Pinaghihigpitang setting"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Para sa iyong seguridad, hindi available ang setting na ito sa ngayon."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Hindi available ang pagkilos habang may tumatawag"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Madalas na humihiling ng ganitong uri ng pagkilos ang mga scammer habang tumatawag sa telepono, kaya na-block ito para protektahan ka. Kung ginagabayan kang gawin ang pagkilos na ito ng taong hindi mo kilala, posibleng scam ito."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Hindi pinapayagan ang pagpayag sa pag-install ng mga app ng iba pang app habang may tawag sa telepono."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Hindi pinapayagan ang pagbibigay ng access sa accessibility sa app habang may tawag sa telepono."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Hindi pinapayagan ang pag-enable sa setting na ito habang may tawag sa telepono."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Hindi magawa ang aksyon habang tumatawag"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Tinanggihan ang access ng appp sa <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Humiling ang app ng access sa pahintulot sa sensitibong impormasyon na posibleng maglagay ng iyong personal at pinansyal na impormasyon sa panganib.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Posibleng hindi gumana nang maayos ang app kung wala ang pinaghihigpitang pahintulot na ito. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Alamin kung paano payagan ang pag-access&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Tinanggihan ang access ng app na maging default na <xliff:g id="ROLE_NAME">%1$s</xliff:g>"</string>
diff --git a/PermissionController/res/values-tr/strings.xml b/PermissionController/res/values-tr/strings.xml
index 2742a17d6..90cda9d02 100644
--- a/PermissionController/res/values-tr/strings.xml
+++ b/PermissionController/res/values-tr/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> adlı cihazda bu uygulamanın <xliff:g id="PERM">%1$s</xliff:g> erişimi"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Tüm <xliff:g id="APP">%1$s</xliff:g> izinlerini göster"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Bu izne sahip tüm uygulamaları göster"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Bilgi"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Ayarlar"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Yardımcı mikrofon kullanımını göster"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Kullanılmayan uygulama ayarları"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Uygulama kullanılmıyorsa izinleri kaldır"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Bağlantıları açma"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"İş için varsayılan"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Özel alan için varsayılan"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Cihaz için optimize edilenler"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Diğer"</string>
<string name="default_app_none" msgid="9084592086808194457">"Yok"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Sistem varsayılanı)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Uygulama yok"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>, hata ayıklama bilgilerini yüklemek istiyor."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Hata ayıklama verileri paylaşılsın mı?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistem bir sorun algıladı."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>, bu cihazda <xliff:g id="DATE">%2$s</xliff:g> saat <xliff:g id="TIME">%3$s</xliff:g> itibarıyla kaydedilen hata raporunu yüklemek istiyor. Hata raporları cihazınızla ilgili veya uygulamalar tarafından günlüğe kaydedilmiş kişisel bilgiler (örneğin kullanıcı adları, konum verisi, cihaz tanımlayıcılar ve ağ bilgileri) içerir. Hata raporlarını yalnızca bu bilgileri verme konusunda güvendiğiniz kişi ve uygulamalarla paylaşın. <xliff:g id="APP_NAME_1">%4$s</xliff:g> uygulamasının hata raporu yüklemesine izin verilsin mi?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> hata raporunu işlemeyle ilgili sorun oluştu. Ayrıntılı hata ayıklama verilerinin paylaşılması reddedildi. Kesinti için üzgünüz."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"İzin ver"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Reddet"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Kısıtlanmış ayarlara izin verme"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Kısıtlanmış ayar"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Güvenliğiniz için bu ayar şu anda kullanılamıyor."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"İşlem, telefon görüşmesi sırasında yapılamaz"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Dolandırıcıların genellikle telefon görüşmesi sırasında talep ettiği bu tür işlemler sizi korumak için engellenir. Tanımadığınız biri tarafından bu işlemi yapmanız isteniyorsa dolandırılıyor olabilirsiniz."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefon görüşmesi sırasında uygulamaların başka uygulama yüklemesine izin verilmez."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefon görüşmesi sırasında bir uygulamaya erişilebilirlik izni verilemez."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Telefon görüşmesi sırasında bu ayarın etkinleştirilmesine izin verilmez."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"İşlem, arama sırasında tamamlanamaz"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Uygulamanın <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> iznine erişimi reddedildi"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Uygulama, kişisel ve finansal bilgilerinizi riske atabilecek hassas bir izne erişim istedi.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Bu kısıtlı izin olmadan uygulama düzgün çalışmayabilir. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Erişime nasıl izin vereceğinizi öğrenin&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Uygulamanın varsayılan <xliff:g id="ROLE_NAME">%1$s</xliff:g> olarak kullanılma erişimi reddedildi"</string>
diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml
index b3b8c444f..b360e2777 100644
--- a/PermissionController/res/values-uk/strings.xml
+++ b/PermissionController/res/values-uk/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="PERM">%1$s</xliff:g>: доступ для цього додатка (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>)"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Переглянути всі дозволи додатка <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Переглянути всі додатки з цим дозволом"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Інформація"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Налаштування"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Показати статус мікрофона Асистента"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Налаштування невикористовуваних додатків"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Відкликати дозволи, якщо додаток не використовується"</string>
@@ -283,7 +281,7 @@
<string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"Під час руху ви надали додатку <xliff:g id="APP">%1$s</xliff:g> дозвіл на доступ до таких об’єктів: <xliff:g id="PERMISSION_1">%2$s</xliff:g> і <xliff:g id="PERMISSION_2">%3$s</xliff:g>"</string>
<string name="post_drive_permission_decision_reminder_summary_1_app_multi_permission" msgid="4080701771111456927">"Під час руху ви надали додатку <xliff:g id="APP">%2$s</xliff:g> стільки дозволів: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
<string name="post_drive_permission_decision_reminder_summary_multi_apps" msgid="5253882771252863902">"{count,plural, =1{Під час руху ви надали дозвіл на доступ додатку <xliff:g id="APP_0">%1$s</xliff:g> і ще одному додатку}one{Під час руху ви надали дозвіл на доступ додатку <xliff:g id="APP_1">%1$s</xliff:g> і ще # додатку}few{Під час руху ви надали дозвіл на доступ додатку <xliff:g id="APP_1">%1$s</xliff:g> і ще # додаткам}many{Під час руху ви надали дозвіл на доступ додатку <xliff:g id="APP_1">%1$s</xliff:g> і ще # додаткам}other{Під час руху ви надали дозвіл на доступ додатку <xliff:g id="APP_1">%1$s</xliff:g> і ще # додатка}}"</string>
- <string name="go_to_settings" msgid="1053735612211228335">"Перейти до налаштувань"</string>
+ <string name="go_to_settings" msgid="1053735612211228335">"Відкрити налаштування"</string>
<string name="auto_revoke_setting_subtitle" msgid="8631720570723050460">"Деякі додатки не використовувалися кілька місяців"</string>
<string name="permissions_removed_category_title" msgid="1064754271178447643">"Скасовані дозволи"</string>
<string name="permission_removed_page_title" msgid="2627436155091001209">"Дозволи скасовано"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Відкривання посилань"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Для роботи за умовчанням"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"За умовчанням для приватного простору"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Оптимізовано для пристрою"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Інші"</string>
<string name="default_app_none" msgid="9084592086808194457">"Немає"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(За умовчанням)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Немає додатків"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> хоче завантажити інформацію про налагодження."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Поділитися даними про налагодження?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Система виявила проблему."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"Додаток <xliff:g id="APP_NAME_0">%1$s</xliff:g> запитує, чи можна завантажити повідомлення про помилку, створене на цьому пристрої <xliff:g id="DATE">%2$s</xliff:g> о <xliff:g id="TIME">%3$s</xliff:g>. Повідомлення про помилки містять особисту інформацію про ваш пристрій або відомості, записані додатками, як-от імена користувачів, місцеположення, ідентифікатори пристроїв та інформацію про мережу. Діліться повідомленнями про помилки лише з тими людьми й додатками, яким довіряєте. Дозволити додатку <xliff:g id="APP_NAME_1">%4$s</xliff:g> завантажити повідомлення про помилку?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Не вдалося обробити повідомлення про помилку в додатку <xliff:g id="APP_NAME">%1$s</xliff:g>. Дані про налагодження не надіслано. Вибачте за незручності."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Дозволити"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Заборонити"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Дозволити налаштування з обмеженнями"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Налаштування з обмеженнями"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"З міркувань безпеки це налаштування наразі недоступне."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Дія недоступна під час телефонного виклику"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Шахраї часто просять виконати такі дії під час телефонних розмов, тому цю можливість заблоковано задля вашого захисту. Якщо незнайома особа просить вас виконати таку дію, це може бути шахрайством."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Під час телефонного виклику не можна надавати додаткам дозвіл на встановлення інших додатків."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Під час телефонного виклику додатку не можна надавати доступ до функцій доступності."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Під час телефонного виклику не можна вмикати це налаштування."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Неможливо виконати дію під час виклику"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Додатку не надано дозвіл \"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>\""</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Додаток запитав дозвіл на доступ до чутливих даних, що може поставити під загрозу вашу особисту й фінансову інформацію.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Без цього обмеженого дозволу додаток може не працювати належним чином. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Як надати доступ&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Додатку не надано доступ до ролі \"<xliff:g id="ROLE_NAME">%1$s</xliff:g>\" за умовчанням"</string>
diff --git a/PermissionController/res/values-ur/strings.xml b/PermissionController/res/values-ur/strings.xml
index 04a340176..40580fd61 100644
--- a/PermissionController/res/values-ur/strings.xml
+++ b/PermissionController/res/values-ur/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g> پر اس ایپ تک رسائی حاصل کریں<xliff:g id="PERM">%1$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> کی سبھی اجازتیں دیکھیں"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"اس اجازت والی سبھی ایپس دیکھیں"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"معلومات"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"ترتیبات"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"اسسٹنٹ مائیکروفون کا استعمال دکھائیں"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"غیر استعمال شدہ ایپ کی ترتیبات"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"ایپ کے استعمال نہ ہونے پر اجازتیں ہٹائیں"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"شروعاتی لنکس"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"کام کیلئے ڈیفالٹ"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"پرائیویٹ اسپیس کے لیے ڈیفالٹ"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"آلہ کیلئے بہتر بنایا گیا"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"دیگر"</string>
<string name="default_app_none" msgid="9084592086808194457">"کوئی نہیں"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(سسٹم ڈیفالٹ)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"کوئی ایپس نہیں ہیں"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ڈیبگنگ کی معلومات اپ لوڈ کرنا چاہتی ہے۔"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"ڈیبگنگ ڈیٹا کا اشتراک کریں؟"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"سسٹم نے ایک مسئلے کا پتا لگایا ہے۔"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> <xliff:g id="DATE">%2$s</xliff:g> کو <xliff:g id="TIME">%3$s</xliff:g> پر اس آلہ سے لی گئی بگ رپورٹ اپ لوڈ کرنے کی درخواست کر رہی ہے۔ بگ رپورٹس میں آپ کے آلہ کے بارے میں یا ایپس کے ذریعے لاگ کی گئی ذاتی معلومات، جیسے کہ صارف کے نام، مقام کا ڈیٹا، آلہ کے شناخت کاران اور نیٹ ورک کی معلومات شامل ہوتی ہیں۔ صرف ان ہی لوگوں اور ایپس کے ساتھ بگ رپورٹس کا اشتراک کریں جن پر آپ کو اس معلومات کے تعلق سے بھروسہ ہے۔ <xliff:g id="APP_NAME_1">%4$s</xliff:g> کو بگ رپورٹ اپ لوڈ کرنے کی اجازت دیں؟"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے بگ رپورٹ پر کارروائی کرنے میں ایک خرابی تھی۔ اس لئے ڈیبگنگ کے مفصل ڈیٹا کے اشتراک کی اجازت نہیں دی گئی۔ رکاوٹ کیلئے معذرت۔"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"اجازت دیں"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"مسترد کریں"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"پابندی والی ترتیبات کی اجازت دیں"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"محدود ترتیب"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"آپ کی سیکیورٹی کیلئے، یہ ترتیب فی الحال دستیاب نہیں ہے۔"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"فون کال کے دوران کارروائی دستیاب نہیں ہے"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n دھوکے باز اکثر فون کال گفتگوؤں کے دوران اس قسم کی کارروائی کی درخواست کرتے ہیں، اس لیے اسے آپ کی حفاظت کے لیے مسدود کر دیا جاتا ہے۔ اگر آپ کو کسی ایسے شخص کے ذریعے سے یہ کارروائی کرنے کے لیے رہنمائی کی جا رہی ہے جس کو آپ نہیں جانتے ہیں تو یہ ایک فریب کاری ہو سکتی ہے۔"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"فون کال کے دوران ایپس کو دوسری ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"فون کال کے دوران کسی ایپ کو ایکسیسبیلٹی تک رسائی دینے کی اجازت نہیں ہے۔"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"فون کال کے دوران اس ترتیب کو فعال کرنے کی اجازت ہے۔"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"کال کے دوران کارروائی مکمل نہیں کر سکتے"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g> تک ایپ کی رسائی کو مسترد کر دیا گیا"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"‏ایپ نے ایک حساس اجازت تک رسائی کی درخواست کی ہے جو آپ کی ذاتی اور مالی معلومات کو خطرے میں ڈال سکتی ہے۔<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>یہ ممکن ہے کہ اس محدود اجازت کے بغیر ایپ ٹھیک سے کام نہ کرے۔ &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;رسائی کی اجازت دینے کا طریقہ جانیں&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"ڈیفالٹ <xliff:g id="ROLE_NAME">%1$s</xliff:g> ہونے کے لیے ایپ کی رسائی کو مسترد کر دیا گیا"</string>
diff --git a/PermissionController/res/values-uz/strings.xml b/PermissionController/res/values-uz/strings.xml
index 8632221f4..db1379435 100644
--- a/PermissionController/res/values-uz/strings.xml
+++ b/PermissionController/res/values-uz/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>da bu ilova uchun <xliff:g id="PERM">%1$s</xliff:g> kirish ruxsati"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"<xliff:g id="APP">%1$s</xliff:g> uchun berilgan barcha ruxsatlar"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Bu ruxsatga ega barcha ilovalar"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Axborot"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Sozlamalar"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Assistent uchun mikrofondan foydalanishni koʻrsatish"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Ishlatilmagan ilova sozlamalari"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Ishlatilmayotgan ilovalardan ruxsatlarni olib tashlash"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Havolalarni ochish"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Ish uchun birlamchi"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Maxfiy makon uchun standart"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Qurilma uchun optimallangan"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Boshqalar"</string>
<string name="default_app_none" msgid="9084592086808194457">"Hech qanday"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Birlamchi)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Hech qanday ilova topilmadi"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi nosozliklarni aniqlash axborotini yuklamoqchi."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Nosozliklarni aniqlash axboroti ulashilsinmi?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Tizim muammo topdi."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ilovasi bu qurilmadan <xliff:g id="DATE">%2$s</xliff:g> sanasida <xliff:g id="TIME">%3$s</xliff:g> da olingan xatoliklar hisobotini yuklashni talab etmoqda. Xatoliklar hisobotiga foydalanuvchi nomlari, joylashuv axboroti, qurilma identifikatorlari va tarmoq maʼlumotlari kabi qurilmangiz yoki qayd qilingan ilovalar haqida shaxsiy maʼlumotlar kiradi. Bunday maʼlumotlarni faqat ishonchli odamlar va ilovalarga yuboring. <xliff:g id="APP_NAME_1">%4$s</xliff:g> ilovasiga xatoliklar hisobotini yuklashga ruxsat berilsinmi?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun nosozlik axborotini yuborishda xatolik yuz berdi, shuning uchun batafsil nosozlik axborotini uzatish taqiqlandi. Nosozlik uchun uzr soʻraymiz."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Ruxsat"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Rad etish"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Cheklangan sozlamalarga ruxsat berish"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Cheklangan sozlama"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Xavfsizlik maqsadida bu sozlama hozir ishlamaydi."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Telefon chaqiruvi paytida amal ishlamaydi"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Tovlamachilar koʻpincha telefon chaqiruvi orqali suhbatlar paytida shu turdagi amalni bajarishni soʻraydi, shu bois u sizni himoyalash uchun bloklanadi. Sizga notanish biror kishi shu amalni bajarishga undasa, bu tovlamachilik boʻlishi mumkin."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Telefon chaqiruvi paytida ilovalarga boshqa ilovalarni oʻrnatishga ruxsat berish mumkin emas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Telefon chaqiruvi vaqtida ilovaga qulaylik ruxsatini berish mumkin emas."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Bu sozlamani telefon chaqiruvi davomida yoqish mumkin emas."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Chaqiruv paytida bu amalni bajarish imkonsiz"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Ilovaga <xliff:g id="PERMISSION_NAME">%1$s</xliff:g> ruxsati berilmadi"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Ilova maxfiy maʼlumotlarga kirish uchun ruxsat soʻramoqda. Ruxsat bersangiz, shaxsiy va moliyaviy maʼlumotlaringiz xavf ostida qolishi mumkin.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g> Bu cheklangan ruxsatsiz ilova toʻgʻri ishlamasligi mumkin. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Qanday ruxsat berish haqida batafsil&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Ilovadan <xliff:g id="ROLE_NAME">%1$s</xliff:g> turkumidagi standart sifatida foydalanish taqiqlangan"</string>
diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml
index 1ebbc4cf2..8a831e32b 100644
--- a/PermissionController/res/values-vi/strings.xml
+++ b/PermissionController/res/values-vi/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Quyền truy cập <xliff:g id="PERM">%1$s</xliff:g> cho ứng dụng này trên <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Xem tất cả các quyền của <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Xem tất cả ứng dụng có quyền này"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Thông tin"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Cài đặt"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Hiển thị việc sử dụng micrô của Trợ lý"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Chế độ cài đặt cho ứng dụng không dùng đến"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Thu hồi quyền nếu bạn không dùng ứng dụng"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Mở đường liên kết"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Ứng dụng mặc định cho công việc"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Ứng dụng mặc định cho không gian riêng tư"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Tối ưu hoá cho thiết bị"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Ứng dụng khác"</string>
<string name="default_app_none" msgid="9084592086808194457">"Không có"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Ứng dụng mặc định của hệ thống)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Không có ứng dụng nào"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> muốn tải thông tin gỡ lỗi lên."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Chia sẻ dữ liệu gỡ lỗi?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Hệ thống đã phát hiện thấy một vấn đề."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> đang yêu cầu tải lên một báo cáo lỗi trên thiết bị này được thực hiện vào <xliff:g id="DATE">%2$s</xliff:g> lúc <xliff:g id="TIME">%3$s</xliff:g>. Báo cáo lỗi bao gồm thông tin cá nhân về thiết bị của bạn hoặc do ứng dụng ghi nhật ký, ví dụ như tên người dùng, dữ liệu vị trí, mã nhận dạng thiết bị và thông tin mạng. Chỉ chia sẻ báo cáo lỗi với người và ứng dụng bạn tin cậy để truy cập thông tin này. Bạn muốn cho phép <xliff:g id="APP_NAME_1">%4$s</xliff:g> tải báo cáo lỗi lên?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Đã xảy ra lỗi khi xử lý báo cáo lỗi cho <xliff:g id="APP_NAME">%1$s</xliff:g>. Vì vậy, yêu cầu chia sẻ dữ liệu gỡ lỗi chi tiết đã bị từ chối. Rất tiếc vì sự gián đoạn này."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Cho phép"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Từ chối"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Cho phép các chế độ cài đặt bị hạn chế"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Chế độ cài đặt bị hạn chế"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Để đảm bảo an toàn cho bạn, chế độ cài đặt này hiện không dùng được."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Không thao tác được khi đang gọi điện"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Kẻ lừa đảo thường yêu cầu bạn cài đặt ứng dụng trong khi gọi điện, vì vậy, hành động này bị chặn để bảo vệ bạn. Nếu người mà bạn không quen biết hướng dẫn bạn cài đặt ứng dụng, thì đó có thể là thủ đoạn lừa đảo."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Không cho phép ứng dụng cài đặt các ứng dụng khác trong khi bạn gọi điện."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Không được cấp cho một ứng dụng quyền truy cập vào tính năng hỗ trợ tiếp cận trong khi gọi điện."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Không được bật chế độ cài đặt này trong khi gọi điện."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Không thực hiện được thao tác trong khi gọi điện"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"Ứng dụng đã bị từ chối cấp quyền truy cập vào <xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"Ứng dụng này yêu cầu quyền truy cập vào thông tin nhạy cảm. Việc đó có thể khiến thông tin cá nhân và thông tin tài chính của bạn gặp rủi ro.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Có thể ứng dụng sẽ hoạt động không đúng cách nếu không được cấp quyền bị hạn chế này. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Tìm hiểu cách cấp quyền&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"Ứng dụng đã bị từ chối cấp quyền để làm <xliff:g id="ROLE_NAME">%1$s</xliff:g> mặc định"</string>
diff --git a/PermissionController/res/values-zh-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml
index 3dac8ef31..38bb41896 100644
--- a/PermissionController/res/values-zh-rCN/strings.xml
+++ b/PermissionController/res/values-zh-rCN/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"此应用在<xliff:g id="DEVICE_NAME">%2$s</xliff:g>上的<xliff:g id="PERM">%1$s</xliff:g>访问权限"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"查看“<xliff:g id="APP">%1$s</xliff:g>”的所有权限"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"查看具有此权限的所有应用"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"信息"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"设置"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"显示 Google 助理麦克风使用情况"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"闲置应用设置"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"如果未使用此应用,则移除相关权限"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"打开链接"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"默认工作应用"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"私密空间的默认应用"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"针对设备进行了优化"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"其他"</string>
<string name="default_app_none" msgid="9084592086808194457">"无"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(系统默认)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"没有应用"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g>请求上传调试信息。"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"要分享调试数据吗?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"系统已检测到一个问题。"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> 请求上传此设备在 <xliff:g id="DATE">%2$s</xliff:g><xliff:g id="TIME">%3$s</xliff:g> 获取的错误报告。错误报告包含与您的设备相关或者由应用记录的个人信息,例如用户名、位置数据、设备标识符和网络信息。请务必只与您信任的用户和应用分享错误报告。要允许 <xliff:g id="APP_NAME_1">%4$s</xliff:g> 上传错误报告吗?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"处理<xliff:g id="APP_NAME">%1$s</xliff:g>的错误报告时出错,因此系统已拒绝分享详细的调试数据。不便之处,敬请见谅。"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"允许"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"拒绝"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"允许受限制的设置"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"受限制的设置"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"出于安全考虑,此设置目前不可用。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"通话期间无法执行此类操作"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n诈骗者经常会在通话过程中要求执行此类操作,所以系统阻止了此类操作来保障您的安全。如果您正在陌生人的指引下执行此类操作,要当心,这可能是骗局。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"在通话期间,不允许应用安装其他应用。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"在通话期间,不允许授予应用无障碍服务访问权限。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"在通话期间,不允许启用此设置。"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"无法在通话期间完成操作"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"系统已拒绝向此应用授予<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>访问权限"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"该应用请求获得敏感权限,授予这项权限可能会导致您的个人信息和财务信息面临风险。<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>如果不授予这项受限权限,该应用可能无法正常运行。&lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;了解如何授予访问权限&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"系统已拒绝向此应用授予作为默认<xliff:g id="ROLE_NAME">%1$s</xliff:g>的访问权限"</string>
diff --git a/PermissionController/res/values-zh-rHK-v34/strings.xml b/PermissionController/res/values-zh-rHK-v34/strings.xml
index 12f494881..3bd6abe6e 100644
--- a/PermissionController/res/values-zh-rHK-v34/strings.xml
+++ b/PermissionController/res/values-zh-rHK-v34/strings.xml
@@ -19,7 +19,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="security_privacy_brand_name" msgid="7303621734258440812">"安全性和私隱"</string>
<string name="privacy_subpage_controls_header" msgid="4152396976713749322">"控制項"</string>
- <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string>
+ <string name="health_connect_title" msgid="2132233890867430855">"健康資料同步"</string>
<string name="health_connect_summary" msgid="815473513776882296">"管理應用程式的健康資料存取權"</string>
<string name="location_settings" msgid="8863940440881290182">"位置資料存取權"</string>
<string name="mic_toggle_description" msgid="1504101620086616040">"適用於應用程式和服務。如果關閉此設定,系統仍會在你撥打緊急電話號碼時提供麥克風的資料"</string>
diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml
index 9d4ae5129..53818715a 100644
--- a/PermissionController/res/values-zh-rHK/strings.xml
+++ b/PermissionController/res/values-zh-rHK/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"此應用程式在<xliff:g id="DEVICE_NAME">%2$s</xliff:g>上的<xliff:g id="PERM">%1$s</xliff:g>存取權"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"查看「<xliff:g id="APP">%1$s</xliff:g>」的所有權限"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"查看擁有此權限的所有應用程式"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"資料"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"設定"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"顯示「Google 助理」麥克風使用情況"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"不使用的應用程式設定"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"如不使用應用程式,即移除權限"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"開啟連結"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"預設用於工作"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"私人空間的預設應用程式"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"已針對你的裝置優化"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"其他"</string>
<string name="default_app_none" msgid="9084592086808194457">"無"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(系統預設)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"沒有應用程式"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」要求上載偵錯資料。"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"分享偵錯資料?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"系統偵測到問題。"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」要求上載此裝置於 <xliff:g id="DATE">%2$s</xliff:g> <xliff:g id="TIME">%3$s</xliff:g> 傳送的錯誤報告。錯誤報告包括你的裝置或應用程式記錄的個人資料,例如使用者名稱、位置資料、裝置識別碼和網絡資訊。只與你信任可存取這些資料的使用者和應用程式分享錯誤報告。要允許「<xliff:g id="APP_NAME_1">%4$s</xliff:g>」上載錯誤報告嗎?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"系統處理「<xliff:g id="APP_NAME">%1$s</xliff:g>」的錯誤報告時發生錯誤,因此已拒絕分享詳細的偵錯資料。很抱歉發生中斷情況。"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"允許"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"拒絕"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"允許受限設定"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"受限設定"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"為安全起見,系統目前不提供此設定。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"通話期間無法執行此操作"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n由於騙徒經常在電話對話中要求這類操作,因此我們封鎖此功能以保障你的安全。如果有陌生人引導你執行此操作,那可能是詐騙。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"通話期間,應用程式不可安裝其他應用程式。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"通話期間,不可授予應用程式無障礙功能存取權。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"通話期間,不可啟用此設定。"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"通話期間無法完成操作"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"系統已拒絕授予應用程式「<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>」存取權"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"應用程式要求存取敏感資料權限,授予此權限可能會危害你的個人和財務資料。<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>如沒有此受限制權限,應用程式可能無法正常運作。&lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;進一步瞭解如何授予存取權&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"系統已拒絕授予應用程式作為預設<xliff:g id="ROLE_NAME">%1$s</xliff:g>的存取權"</string>
diff --git a/PermissionController/res/values-zh-rTW/strings.xml b/PermissionController/res/values-zh-rTW/strings.xml
index 4e5482bdb..81810cd1c 100644
--- a/PermissionController/res/values-zh-rTW/strings.xml
+++ b/PermissionController/res/values-zh-rTW/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"這個應用程式在<xliff:g id="DEVICE_NAME">%2$s</xliff:g>上的<xliff:g id="PERM">%1$s</xliff:g>存取權"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"查看「<xliff:g id="APP">%1$s</xliff:g>」的所有權限"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"查看具備此權限的所有應用程式"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"資訊"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"設定"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"顯示 Google 助理的麥克風使用狀況"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"未使用的應用程式設定"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"如果應用程式未使用,讓系統移除相關權限"</string>
@@ -362,7 +360,7 @@
<string name="role_assistant_description" msgid="6622458130459922952">"小幫手應用程式可根據當下的螢幕內容提供協助。某些應用程式同時支援啟動器和語音輸入服務,提供更完善的服務。"</string>
<string name="role_browser_label" msgid="2877796144554070207">"預設瀏覽器應用程式"</string>
<string name="role_browser_short_label" msgid="6745009127123292296">"瀏覽器應用程式"</string>
- <string name="role_browser_description" msgid="3465253637499842671">"你可以透過這類應用程式連上網際網路,也可以輕觸顯示的連結"</string>
+ <string name="role_browser_description" msgid="3465253637499842671">"透過這類應用程式你可以連上網際網路和顯示你輕觸的連結"</string>
<string name="role_browser_request_title" msgid="2895200507835937192">"要將 <xliff:g id="APP_NAME">%1$s</xliff:g> 設為預設的瀏覽器應用程式嗎?"</string>
<string name="role_browser_request_description" msgid="5888803407905985941">"無需任何權限"</string>
<string name="role_dialer_label" msgid="1100224146343237968">"預設電話應用程式"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"開啟連結"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"預設的工作應用程式"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"私人空間的預設應用程式"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"已針對裝置最佳化"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"其他"</string>
<string name="default_app_none" msgid="9084592086808194457">"無"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(系統預設)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"沒有可用的應用程式"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」要求上傳偵錯資訊。"</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"要分享偵錯資料嗎?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"系統偵測到問題。"</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」要求上傳這個裝置在 <xliff:g id="DATE">%2$s</xliff:g><xliff:g id="TIME">%3$s</xliff:g> 取得的錯誤報告。錯誤報告包含與裝置相關或由應用程式記錄的個人資訊,例如:使用者名稱、位置資料、裝置 ID 和網路資訊。請務必只與你信任的使用者和應用程式分享錯誤報告。要允許「<xliff:g id="APP_NAME_1">%4$s</xliff:g>」上傳錯誤報告嗎?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"處理「<xliff:g id="APP_NAME">%1$s</xliff:g>」的錯誤報告時發生錯誤,因此系統已拒絕分享詳細的偵錯資料。不便之處,敬請見諒。"</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"允許"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"拒絕"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"解除受限制的設定"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"受限制的設定"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"為了安全起見,目前無法使用這項設定。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"無法在通話期間執行這項操作"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n詐騙者經常會在電話對話中要求這類操作,因此系統加以封鎖來保護你的安全。如果有陌生人引導你採取這類操作,請提高警覺,這可能是詐騙行為。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"通話期間不允許應用程式安裝其他應用程式。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"通話期間不允許授予應用程式無障礙服務存取權。"</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"通話期間不允許啟用這項設定。"</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"通話期間無法完成動作"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"系統已拒絕授予應用程式「<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>」存取權"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"這個應用程式要求取得私密資訊權限,授予這項權限可能導致你的個人資訊和財務資訊面臨風險。<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>如果未取得這項受限制權限,應用程式可能無法正常運作。&lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;瞭解如何授予權限&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"系統已拒絕授予應用程式做為預設「<xliff:g id="ROLE_NAME">%1$s</xliff:g>」的存取權"</string>
diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml
index 696946243..3b477d309 100644
--- a/PermissionController/res/values-zu/strings.xml
+++ b/PermissionController/res/values-zu/strings.xml
@@ -202,10 +202,8 @@
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"Ukufinyelela kwe-<xliff:g id="PERM">%1$s</xliff:g> kwale app kuvuliwe ku-<xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Bona zonke izimvume ze-<xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Bona zonke izinhlelo zokusebenza ngale mvume"</string>
- <!-- no translation found for app_permission_info_button (8973692370208562556) -->
- <skip />
- <!-- no translation found for app_permission_settings_button (4582916817451973752) -->
- <skip />
+ <string name="app_permission_info_button" msgid="8973692370208562556">"Ulwazi"</string>
+ <string name="app_permission_settings_button" msgid="4582916817451973752">"Amasethingi"</string>
<string name="assistant_mic_label" msgid="1011432357152323896">"Bonisa ukusetshenziswa kwe-microphone kamsizi"</string>
<string name="unused_apps_category_title" msgid="2988455616845243901">"Amasethingi we-app engasetshenziswanga"</string>
<string name="auto_revoke_label" msgid="5068393642936571656">"Susa izimvume uma uhlelo lokusebenza lungasetshenziswa"</string>
@@ -442,6 +440,8 @@
<string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"Ivula amalinki"</string>
<string name="default_apps_for_work" msgid="4970308943596201811">"Okuzenzakalelayo kokusebenza"</string>
<string name="default_apps_for_private_profile" msgid="2022024112144880785">"Okuzenzakalelayo kwendawo engasese"</string>
+ <string name="default_app_recommended" msgid="5669584821778942909">"Ilungiselelwe idivayisi"</string>
+ <string name="default_app_others" msgid="7793029848126079876">"Amanye"</string>
<string name="default_app_none" msgid="9084592086808194457">"Lutho"</string>
<string name="default_app_system_default" msgid="6218386768175513760">"(Okuzenzakalelayo kwesistimu)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Azikho izinhlelo zokusebenza"</string>
@@ -460,7 +460,8 @@
<string name="incident_report_notification_text" msgid="3376480583513587923">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ingathanda ukulayisha ulwazi lokususa iphutha."</string>
<string name="incident_report_dialog_title" msgid="669104389325204095">"Yabelana ngedatha yokulungisa amaphutha?"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Isistimu ithole inkinga."</string>
- <string name="incident_report_dialog_text" msgid="5675553296891757523">"I-<xliff:g id="APP_NAME_0">%1$s</xliff:g> icela ukulayisha umbiko wesiphazamisi kusukela kule divayisi othathwe ngomhla ka-<xliff:g id="DATE">%2$s</xliff:g> ngo-<xliff:g id="TIME">%3$s</xliff:g>. Imibiko yesiphazamisi ifaka ulwazi lomuntu siqu olumayelana nedivayisi yakho noma olufakwe ngezinhlelo zokusebenza, isibonelo, amagama abasebenzisi, idatha yendawo, izikhombi zedivayisi, nolwazi lwedivayisi. Yabelana kuphela ngemibiko yesiphazamisi nabantu nezinhlelo zokusebenza ozithembayo ngalolu lwazi. Vumela i-<xliff:g id="APP_NAME_1">%4$s</xliff:g> ukuthi ilayishe umbiko wesiphazamisi?"</string>
+ <!-- no translation found for incident_report_dialog_text (1819244417678973362) -->
+ <skip />
<string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Kube nephutha ukucubungula umbiko wesiphazamisi we-<xliff:g id="APP_NAME">%1$s</xliff:g>. Ngakho-ke ukwabelana ngedatha yokususa isiphazamiso inqatshiwe. Uxolo ngokuphazamisa."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Vumela"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Phika"</string>
@@ -678,11 +679,14 @@
<string name="allow_restricted_settings" msgid="8073000189478396881">"Vumela amasethingi akhawulelwe"</string>
<string name="enhanced_confirmation_dialog_title" msgid="7562437438040966351">"Amasethingi akhawulelwe"</string>
<string name="enhanced_confirmation_dialog_desc" msgid="5921240234843839219">"Ukuze uphephe, leli sethingi okwamanje alitholakali."</string>
- <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5230100829862738467">"Isenzo asitholakali ngenkathi ufona"</string>
- <string name="enhanced_confirmation_phone_state_dialog_desc" msgid="8861786545031902839">"<xliff:g id="SETTING_DESCRIPTION">%1$s</xliff:g>\n\n Amaqola ngokuvamile acela lolu hlobo lwesenzo phakathi nezingxoxo zekholi, ngakho-ke kuvinjiwe ukuze uvikeleke. Uma uqondiswa ukuthi wenze lesi senzo ngumuntu ongamazi, kungase kube umkhonyovu."</string>
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix" msgid="2832355924914011814">"Ukuvumela ama-app ukuthi afake amanye ama-app akuvunyelwe phakathi nekholi yefoni."</string>
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix" msgid="5336417371950046729">"Ukunikeza i-app ukufinyelela ekufinyelelekeni akuvunyelwe ngesikhathi sekholi yefoni."</string>
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix" msgid="4453183594330342865">"Ukunika amandla leli sethingi akuvunyelwe ngesikhathi sekholi yefoni."</string>
+ <string name="enhanced_confirmation_phone_state_dialog_title" msgid="5054064107559019689">"Ayikwazi ukuqedela isenzo phakathi nekholi"</string>
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_desc (3803423079498712549) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_install_desc (6400007048943674066) -->
+ <skip />
+ <!-- no translation found for enhanced_confirmation_phone_state_dialog_a11y_desc (6567523001053288057) -->
+ <skip />
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" msgid="158278816955957088"></string>
<string name="enhanced_confirmation_dialog_title_permission" msgid="2149144789394238266">"I-app inqatshelwe ukufinyelela ku-<xliff:g id="PERMISSION_NAME">%1$s</xliff:g>"</string>
<string name="enhanced_confirmation_dialog_desc_permission" msgid="3150778951946468945">"I-app icele ukufinyelela emvumweni ezwelayo okungabeka imininingwane yakho siqu neyezimali engozini.<xliff:g id="ID_1">&lt;br&gt;&lt;br&gt;</xliff:g>Kungenzeka ukuthi i-app ingasebenzi kahle ngaphandle kwemvume enomkhawulo. &lt;a href=<xliff:g id="LEARN_MORE_LINK">%1$s</xliff:g>&gt;Funda ukuthi ungakuvumela kanjani ukufinyelela&lt;/a&gt;"</string>
<string name="enhanced_confirmation_dialog_title_role" msgid="1737023798483772780">"I-app iye yanqatshelwa ukufinyelela ukuze ibe yi-<xliff:g id="ROLE_NAME">%1$s</xliff:g> ezenzakalelayo"</string>
diff --git a/PermissionController/res/values/config.xml b/PermissionController/res/values/config.xml
index 675368cba..657dc07dd 100644
--- a/PermissionController/res/values/config.xml
+++ b/PermissionController/res/values/config.xml
@@ -19,6 +19,15 @@
<bool name="config_showBrowserRole">true</bool>
<bool name="config_showDialerRole">true</bool>
<bool name="config_showSmsRole">true</bool>
+ <!--
+ ~ Semicolon separated list of packages that are recommended for the assistant role.
+ ~ <p>
+ ~ This follows the same format as config_defaultAssistant and also requires a signing
+ ~ certificate digest (separated by a colon from the package name) if the app is not a system
+ ~ app.
+ -->
+ <string name="config_recommendedAssistants"></string>
+
<bool name="config_useAlternativePermGroupSummary">false</bool>
<bool name="config_useWindowBlur">false</bool>
<bool name="config_useMaterial3PermissionGrantDialog">false</bool>
diff --git a/PermissionController/res/values/overlayable.xml b/PermissionController/res/values/overlayable.xml
index e94c5bd04..72896fcdb 100644
--- a/PermissionController/res/values/overlayable.xml
+++ b/PermissionController/res/values/overlayable.xml
@@ -371,14 +371,15 @@
<item type="style" name="ThemeOverlay.PermissionSettings" />
<!-- END THEMES -->
- <!-- START VISIBILITY CONFIGS -->
- <!-- Assistant role uses: config_showDefaultAssistant -->
- <!-- Home role uses: config_showDefaultHome -->
- <!-- Emergency role uses: config_showDefaultEmergency -->
+ <!-- START ROLE CONFIGS -->
+ <!-- Assistant role uses android:bool/config_showDefaultAssistant -->
+ <!-- Home role uses android:bool/config_showDefaultHome -->
+ <!-- Emergency role uses android:bool/config_showDefaultEmergency -->
<item type="bool" name="config_showBrowserRole" />
<item type="bool" name="config_showDialerRole" />
<item type="bool" name="config_showSmsRole" />
- <!-- END VISIBILITY CONFIGS -->
+ <item type="string" name="config_recommendedAssistants" />
+ <!-- END ROLE CONFIGS -->
<!-- START CAR DIMENS -->
<item type="dimen" name="car_action_bar_height" />
diff --git a/PermissionController/res/values/strings.xml b/PermissionController/res/values/strings.xml
index 48747bd2a..f5a997674 100644
--- a/PermissionController/res/values/strings.xml
+++ b/PermissionController/res/values/strings.xml
@@ -1337,6 +1337,12 @@
<!-- Title for category of default apps for private profile [CHAR LIMIT=50] -->
<string name="default_apps_for_private_profile">Default for private space</string>
+ <!-- Title for category of apps that are optimized for the device [CHAR LIMIT=50] -->
+ <string name="default_app_recommended">Optimized for device</string>
+
+ <!-- Title for category of other apps [CHAR LIMIT=50] -->
+ <string name="default_app_others">Others</string>
+
<!-- Summary of a default app when there is no app set [CHAR LIMIT=60] -->
<string name="default_app_none">None</string>
@@ -1403,9 +1409,7 @@
<!-- Content for dialog shown when the user should confirm an incident / bug report.
[CHAR LIMIT=none] -->
- <string name="incident_report_dialog_text">"<xliff:g id="app_name" example="Gmail">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="date" example="December 26, 2018">%2$s</xliff:g> at <xliff:g id="time" example="1:20 PM">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information.
-
-Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug report?"</string>
+ <string name="incident_report_dialog_text">"<xliff:g id="app_name" example="Gmail">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="date" example="December 26, 2018">%2$s</xliff:g> at <xliff:g id="time" example="1:20 PM">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information.\n\nAllow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug report?"</string>
<!-- Content for dialog shown when there was an error parsing the incident / bug report.
[CHAR LIMIT=none] -->
@@ -2025,17 +2029,15 @@ Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug repo
<!--Title for dialog displayed to tell user that settings are blocked due to the phone state (such as being in a call with an unknown number) [CHAR LIMIT=50] -->
<string name="enhanced_confirmation_phone_state_dialog_title">Can\u2019t complete action during call</string>
<!--Content for dialog displayed to tell user that settings are blocked due to the phone state (such as being in a call with an unknown number) [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_desc"><xliff:g id="setting_description" example="allowing apps to install other apps">%1$s</xliff:g>\n\n
- This setting is blocked to protect your device and data</string>
+ <string name="enhanced_confirmation_phone_state_dialog_desc">This setting is blocked to protect your device and data.<xliff:g id="scam_use_setting_description" example="scammers may ask you to allow apps to install other apps">%1$s</xliff:g></string>
<!--Content explaining that the "install other apps" setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix">Scammers may try to install harmful apps by asking you to install unknown apps from a new source.</string>
+ <string name="enhanced_confirmation_phone_state_dialog_install_desc"><xliff:g id="empty_line">\n\n</xliff:g>Scammers may try to install harmful apps by asking you to install unknown apps from a new source.</string>
<!--Content explaining that the "enable accessibility service" setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix">Scammers may try to take control of your device by asking you to allow accessibility access for an app.</string>
-
- <!--Content explaining that a generic setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix">Scammers may attempt to harm your device with this setting.</string>
+ <string name="enhanced_confirmation_phone_state_dialog_a11y_desc"><xliff:g id="empty_line">\n\n</xliff:g>Scammers may try to take control of your device by asking you to allow accessibility access for an app.</string>
+ <!--Content explaining that a generic setting is blocked due to the phone state in a dialog displayed to the user. currently empty [CHAR LIMIT=NONE] -->
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" />
<!--Title for dialog displayed to tell user that permissions are blocked by setting restrictions [CHAR LIMIT=50] -->
<string name="enhanced_confirmation_dialog_title_permission">App was denied access to <xliff:g id="permission_name" example="contacts">%1$s</xliff:g></string>
diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml
index 72e1d9654..4ba524462 100644
--- a/PermissionController/res/xml/roles.xml
+++ b/PermissionController/res/xml/roles.xml
@@ -902,6 +902,8 @@
<permission name="android.permission.READ_SMS" minSdkVersion="33" />
<permission name="android.permission.READ_PEOPLE_DATA" />
<permission name="android.permission.READ_GLOBAL_APP_SEARCH_DATA" />
+ <permission name="android.permission.READ_BLOCKED_NUMBERS"
+ featureFlag="android.permission.flags.Flags.grantReadBlockedNumbersToSystemUiIntelligence" />
</permissions>
</role>
@@ -1878,19 +1880,20 @@
-->
<role
name="android.app.role.RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY"
- behavior="ReservedForTestingProfileGroupExclusivityRoleBehavior"
+ behavior="v36.ReservedForTestingProfileGroupExclusivityRoleBehavior"
description="@string/role_for_testing_profile_group_exclusivity_description"
exclusive="true"
exclusivity="profileGroup"
fallBackToDefaultHolder="true"
featureFlag="com.android.permission.flags.Flags.crossUserRoleEnabled"
label="@string/role_for_testing_profile_group_exclusivity_label"
+ minSdkVersion="36"
requestable="true"
requestDescription="@string/role_for_testing_profile_group_exclusivity_request_description"
requestTitle="@string/role_for_testing_profile_group_exclusivity_request_title"
shortLabel="@string/role_for_testing_profile_group_exclusivity_short_label"
showNone="true"
- uiBehavior="ReservedForTestingProfileGroupExclusivityRoleUiBehavior"
+ uiBehavior="v36.ReservedForTestingProfileGroupExclusivityRoleUiBehavior"
visible="false"/>
<!---
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/v33/CompanionDeviceAppStreamingRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/v33/CompanionDeviceAppStreamingRoleBehavior.java
index e99ffb58c..85c4be569 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/v33/CompanionDeviceAppStreamingRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/v33/CompanionDeviceAppStreamingRoleBehavior.java
@@ -22,10 +22,10 @@ import android.os.UserHandle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.modules.utils.build.SdkLevel;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.RoleBehavior;
import com.android.role.controller.util.NotificationUtils;
-import com.android.role.controller.util.RoleFlags;
import com.android.role.controller.util.UserUtils;
/**
@@ -52,6 +52,6 @@ public class CompanionDeviceAppStreamingRoleBehavior implements RoleBehavior {
@Override
@Nullable
public Boolean shouldAllowBypassingQualification(@NonNull Role role, @NonNull Context context) {
- return !RoleFlags.isAtLeastB();
+ return !SdkLevel.isAtLeastB();
}
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/v34/CompanionDeviceNearbyDeviceStreamingRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/v34/CompanionDeviceNearbyDeviceStreamingRoleBehavior.java
index b0f58f40b..f941ec68d 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/v34/CompanionDeviceNearbyDeviceStreamingRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/v34/CompanionDeviceNearbyDeviceStreamingRoleBehavior.java
@@ -21,9 +21,9 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.modules.utils.build.SdkLevel;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.RoleBehavior;
-import com.android.role.controller.util.RoleFlags;
/**
* Class for behavior of the "Nearby Device Streaming" Companion device profile role.
@@ -33,6 +33,6 @@ public class CompanionDeviceNearbyDeviceStreamingRoleBehavior implements RoleBeh
@Override
@Nullable
public Boolean shouldAllowBypassingQualification(@NonNull Role role, @NonNull Context context) {
- return !RoleFlags.isAtLeastB();
+ return !SdkLevel.isAtLeastB();
}
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
index 5299886f6..e50f33ffd 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
@@ -14,15 +14,17 @@
* limitations under the License.
*/
-package com.android.role.controller.behavior;
+package com.android.role.controller.behavior.v36;
import android.app.role.RoleManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
+import android.os.Build;
import android.os.UserHandle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.RoleBehavior;
@@ -33,7 +35,7 @@ import com.android.role.controller.util.UserUtils;
import java.util.ArrayList;
import java.util.List;
-// TODO(b/383538899): make minSdk36
+@RequiresApi(Build.VERSION_CODES.BAKLAVA)
public class ReservedForTestingProfileGroupExclusivityRoleBehavior implements RoleBehavior {
@Nullable
@Override
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/AppOp.java b/PermissionController/role-controller/java/com/android/role/controller/model/AppOp.java
index 99145c747..a0007dcc0 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/AppOp.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/AppOp.java
@@ -26,7 +26,6 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.modules.utils.build.SdkLevel;
-import com.android.role.controller.util.RoleFlags;
import com.android.role.controller.util.PackageUtils;
import java.util.Objects;
@@ -139,7 +138,7 @@ public class AppOp {
}
return Build.VERSION.SDK_INT >= mMinSdkVersion
// Workaround to match the value 36 for B in roles.xml before SDK finalization.
- || (mMinSdkVersion == 36 && RoleFlags.isAtLeastB());
+ || (mMinSdkVersion == 36 && SdkLevel.isAtLeastB());
}
private boolean isAvailableAsUser(@NonNull String packageName,
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Permission.java b/PermissionController/role-controller/java/com/android/role/controller/model/Permission.java
index 889f5263d..c3404be8b 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/Permission.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/Permission.java
@@ -26,7 +26,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.modules.utils.build.SdkLevel;
-import com.android.role.controller.util.RoleFlags;
import com.android.role.controller.util.UserUtils;
import java.util.Objects;
@@ -99,7 +98,7 @@ public class Permission {
}
if (Build.VERSION.SDK_INT >= mMinSdkVersion
// Workaround to match the value 36 for B in roles.xml before SDK finalization.
- || (mMinSdkVersion == 36 && RoleFlags.isAtLeastB())) {
+ || (mMinSdkVersion == 36 && SdkLevel.isAtLeastB())) {
return true;
}
if (Build.VERSION.SDK_INT >= mOptionalMinSdkVersion) {
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
index 64682ba79..0f79b19c0 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
@@ -26,7 +26,6 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.SharedLibraryInfo;
-import android.content.pm.Signature;
import android.content.res.Resources;
import android.os.Build;
import android.os.UserHandle;
@@ -47,6 +46,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.modules.utils.build.SdkLevel;
import com.android.role.controller.util.CollectionUtils;
+import com.android.role.controller.util.IntentCompat;
import com.android.role.controller.util.PackageUtils;
import com.android.role.controller.util.RoleFlags;
import com.android.role.controller.util.RoleManagerCompat;
@@ -500,12 +500,18 @@ public class Role {
}
return (Build.VERSION.SDK_INT >= mMinSdkVersion
// Workaround to match the value 36 for B in roles.xml before SDK finalization.
- || (mMinSdkVersion == 36 && RoleFlags.isAtLeastB()))
+ || (mMinSdkVersion == 36 && SdkLevel.isAtLeastB()))
&& Build.VERSION.SDK_INT <= mMaxSdkVersion;
}
- public boolean isStatic() {
- return mStatic;
+ /**
+ * Check whether this role is static, which may change due to bypassing qualification.
+ *
+ * @param context the {@code Context} to retrieve system services
+ * @return whether this role is static
+ */
+ public boolean isStatic(@NonNull Context context) {
+ return mStatic && !isBypassingQualification(context);
}
/**
@@ -620,6 +626,12 @@ public class Role {
return mAllowBypassingQualification;
}
+ private boolean isBypassingQualification(@NonNull Context context) {
+ RoleManager roleManager = context.getSystemService(RoleManager.class);
+ return shouldAllowBypassingQualification(context)
+ && RoleManagerCompat.isBypassingRoleQualification(roleManager);
+ }
+
/**
* Check whether a package is qualified for this role, i.e. whether it contains all the required
* components (plus meeting some other general restrictions).
@@ -632,9 +644,7 @@ public class Role {
*/
public boolean isPackageQualifiedAsUser(@NonNull String packageName, @NonNull UserHandle user,
@NonNull Context context) {
- RoleManager roleManager = context.getSystemService(RoleManager.class);
- if (shouldAllowBypassingQualification(context)
- && RoleManagerCompat.isBypassingRoleQualification(roleManager)) {
+ if (isBypassingQualification(context)) {
return true;
}
@@ -982,7 +992,14 @@ public class Role {
*/
public void onHolderAddedAsUser(@NonNull String packageName, @NonNull UserHandle user,
@NonNull Context context) {
- RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, user, context);
+ if (RoleFlags.isProfileGroupExclusivityAvailable()
+ && com.android.permission.flags.Flags.crossUserRoleUxBugfixEnabled()
+ && getExclusivity() == Role.EXCLUSIVITY_PROFILE_GROUP) {
+ UserHandle profileParent = UserUtils.getProfileParentOrSelf(user, context);
+ RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, profileParent, context);
+ } else {
+ RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, user, context);
+ }
}
/**
@@ -1090,14 +1107,37 @@ public class Role {
@Nullable
public Intent getRestrictionIntentAsUser(@NonNull UserHandle user, @NonNull Context context) {
if (SdkLevel.isAtLeastU() && isExclusive()) {
- // TODO(b/379143953): if role is profile group exclusive
- // check DISALLOW_CONFIG_DEFAULT_APPS for all users
- UserManager userManager = context.getSystemService(UserManager.class);
- if (userManager.hasUserRestrictionForUser(UserManager.DISALLOW_CONFIG_DEFAULT_APPS,
- user)) {
- return new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS)
- .putExtra(DevicePolicyManager.EXTRA_RESTRICTION,
- UserManager.DISALLOW_CONFIG_DEFAULT_APPS);
+ boolean crossUserRoleUxBugfixEnabled =
+ com.android.permission.flags.Flags.crossUserRoleUxBugfixEnabled();
+ if (crossUserRoleUxBugfixEnabled && getExclusivity() == EXCLUSIVITY_PROFILE_GROUP) {
+ DevicePolicyManager devicePolicyManager =
+ context.getSystemService(DevicePolicyManager.class);
+ if (!devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile()) {
+ // For profileGroup exclusive roles users on BYOD are free to choose personal or
+ // work profile app regardless of DISALLOW_CONFIG_DEFAULT_APPS
+ return null;
+ }
+ }
+
+ // Otherwise if role is profileGroup exclusive check DISALLOW_CONFIG_DEFAULT_APPS for
+ // all users
+ List<UserHandle> profiles =
+ (crossUserRoleUxBugfixEnabled && getExclusivity() == EXCLUSIVITY_PROFILE_GROUP)
+ ? UserUtils.getUserProfiles(user, context, true)
+ : List.of(user);
+ final int profilesSize = profiles.size();
+ for (int i = 0; i < profilesSize; i++) {
+ UserHandle profile = profiles.get(i);
+ UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager.hasUserRestrictionForUser(
+ UserManager.DISALLOW_CONFIG_DEFAULT_APPS, profile)) {
+ return new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS)
+ .putExtra(
+ DevicePolicyManager.EXTRA_RESTRICTION,
+ UserManager.DISALLOW_CONFIG_DEFAULT_APPS)
+ .putExtra(Intent.EXTRA_USER, profile)
+ .putExtra(IntentCompat.EXTRA_USER_ID, profile.getIdentifier());
+ }
}
}
return null;
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
index 9c3746b79..f0a730647 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
@@ -436,10 +436,9 @@ public class RoleParser {
exclusivity = Role.EXCLUSIVITY_USER;
break;
case EXCLUSIVITY_PROFILE_GROUP:
- // TODO(b/372743073): change to isAtLeastB once available
// EXCLUSIVITY_PROFILE behavior only available for B+
// fallback to default of EXCLUSIVITY_USER
- exclusivity = SdkLevel.isAtLeastV()
+ exclusivity = SdkLevel.isAtLeastB()
? Role.EXCLUSIVITY_PROFILE_GROUP
: Role.EXCLUSIVITY_USER;
break;
diff --git a/PermissionController/role-controller/java/com/android/role/controller/service/RoleControllerServiceImpl.java b/PermissionController/role-controller/java/com/android/role/controller/service/RoleControllerServiceImpl.java
index d00fd47af..1a0c83ab8 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/service/RoleControllerServiceImpl.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/service/RoleControllerServiceImpl.java
@@ -173,7 +173,7 @@ public class RoleControllerServiceImpl extends RoleControllerService {
// or fallback holders, if any.
currentPackageNames = mUserRoleManager.getRoleHolders(roleName);
currentPackageNamesSize = currentPackageNames.size();
- boolean isStaticRole = role.isStatic();
+ boolean isStaticRole = role.isStatic(mContext);
if (currentPackageNamesSize == 0 || isStaticRole) {
List<String> packageNamesToAdd = null;
if (addedRoleNames.contains(roleName) || isStaticRole) {
diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/IntentCompat.java b/PermissionController/role-controller/java/com/android/role/controller/util/IntentCompat.java
new file mode 100644
index 000000000..9771ad4cf
--- /dev/null
+++ b/PermissionController/role-controller/java/com/android/role/controller/util/IntentCompat.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2025 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.util;
+
+/** Compat class for {@link android.content.Intent} */
+public final class IntentCompat {
+ /**
+ * An int representing the user ID to be used. Copy of
+ * {@link android.content.Intent#EXTRA_USER_ID}
+ */
+ public static final String EXTRA_USER_ID = "android.intent.extra.USER_ID";
+}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/RoleFlags.java b/PermissionController/role-controller/java/com/android/role/controller/util/RoleFlags.java
index 2c5a247b6..23e3a2c65 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/util/RoleFlags.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/util/RoleFlags.java
@@ -20,7 +20,7 @@ import android.os.Build;
import androidx.annotation.ChecksSdkIntAtLeast;
-import java.util.Objects;
+import com.android.modules.utils.build.SdkLevel;
/** Util class for getting shared feature flag check logic. */
public final class RoleFlags {
@@ -32,14 +32,6 @@ public final class RoleFlags {
*/
@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.BAKLAVA)
public static boolean isProfileGroupExclusivityAvailable() {
- // TODO(b/372743073): change to isAtLeastB once available
- return isAtLeastB() && com.android.permission.flags.Flags.crossUserRoleEnabled();
- }
-
- // TODO(b/372743073): remove once SdkLevel.isAtLeastB available
- @ChecksSdkIntAtLeast(api = 36 /* BUILD_VERSION_CODES.Baklava */)
- public static boolean isAtLeastB() {
- return Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
- || Objects.equals(Build.VERSION.CODENAME, "Baklava");
+ return SdkLevel.isAtLeastB() && com.android.permission.flags.Flags.crossUserRoleEnabled();
}
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackage.java b/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackage.java
index a3869b349..b13ac3731 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackage.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackage.java
@@ -30,6 +30,7 @@ import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
/**
* A package name with an optional signing certificate.
@@ -120,7 +121,7 @@ public class SignedPackage {
return signedPackages;
}
- /*
+ /**
* Checks whether this signed package is available, i.e. it is installed, and either has the
* specified signing certificate or is a system app if no signing certificate is specified.
*
@@ -152,4 +153,36 @@ public class SignedPackage {
}
return true;
}
+
+ /**
+ * Checks whether an {@link ApplicationInfo} matches this signed package, i.e. it has the same
+ * package name, and either has the specified signing certificate or is a system app if no
+ * signing certificate is specified.
+ *
+ * @param applicationInfo the {@link ApplicationInfo} to check for
+ * @param context the {@code Context} to retrieve system services
+ *
+ * @return whether the {@link ApplicationInfo} matches this signed package
+ */
+ public boolean matches(@NonNull ApplicationInfo applicationInfo, @NonNull Context context) {
+ if (!Objects.equals(applicationInfo.packageName, mPackageName)) {
+ return false;
+ }
+ if (mCertificate != null) {
+ UserHandle user = UserHandle.getUserHandleForUid(applicationInfo.uid);
+ if (!PackageUtils.hasSigningCertificateAsUser(mPackageName, mCertificate, user,
+ context)) {
+ Log.w(LOG_TAG, "Package doesn't have required signing certificate: "
+ + mPackageName);
+ return false;
+ }
+ } else {
+ if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ Log.w(LOG_TAG, "Package didn't specify a signing certificate and isn't a" +
+ " system app: " + mPackageName);
+ return false;
+ }
+ }
+ return true;
+ }
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackageUtils.java b/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackageUtils.java
index 817c31c5f..169bed347 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackageUtils.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/util/SignedPackageUtils.java
@@ -17,6 +17,7 @@
package com.android.role.controller.util;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.UserHandle;
@@ -81,4 +82,25 @@ public final class SignedPackageUtils {
}
return signedPackage.getPackageName();
}
+
+ /**
+ * Check whether an {@link ApplicationInfo} matches any of the {@link SignedPackage}s.
+ *
+ * @param applicationInfo the {@link ApplicationInfo} to check for
+ * @param signedPackages the list of {@link SignedPackage}s to check against
+ * @param context the {@code Context} to retrieve system services
+ *
+ * @return whether the {@link ApplicationInfo} matches any of the {@link SignedPackage}s
+ */
+ public static boolean matchesAny(@NonNull ApplicationInfo applicationInfo,
+ @NonNull List<SignedPackage> signedPackages, @NonNull Context context) {
+ int signedPackagesSize = signedPackages.size();
+ for (int i = 0; i < signedPackagesSize; i++) {
+ SignedPackage signedPackage = signedPackages.get(i);
+ if (signedPackage.matches(applicationInfo, context)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java b/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java
index 598057b16..41233a23e 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java
@@ -28,6 +28,9 @@ import androidx.annotation.Nullable;
import com.android.modules.utils.build.SdkLevel;
+import java.util.ArrayList;
+import java.util.List;
+
/** Utility class to deal with Android users. */
public final class UserUtils {
@@ -132,4 +135,31 @@ public final class UserUtils {
UserManager userManager = userContext.getSystemService(UserManager.class);
return userManager.getProfileParent(user);
}
+
+ /**
+ * Returns all the enabled user profiles on the device
+ *
+ * @param user the {@link UserHandle} to get profiles for
+ * @param context the {@link Context}
+ * @param excludePrivate {@code true} to exclude private profiles from returned list of users
+ */
+ @NonNull
+ public static List<UserHandle> getUserProfiles(@NonNull UserHandle user,
+ @NonNull Context context, boolean excludePrivate) {
+ Context userContext = getUserContext(context, user);
+ UserManager userUserManager = userContext.getSystemService(UserManager.class);
+ List<UserHandle> profiles = userUserManager.getUserProfiles();
+ if (!excludePrivate) {
+ return profiles;
+ }
+ List<UserHandle> filteredProfiles = new ArrayList<>();
+ final int profilesSize = profiles.size();
+ for (int i = 0; i < profilesSize; i++) {
+ UserHandle profile = profiles.get(i);
+ if (!isPrivateProfile(profile, userContext)) {
+ filteredProfiles.add(profile);
+ }
+ }
+ return filteredProfiles;
+ }
}
diff --git a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
index d3c7e3a0b..c5191938e 100644
--- a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
+++ b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
@@ -153,8 +153,8 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
var message: CharSequence?
if (settingType == SettingType.BLOCKED_DUE_TO_PHONE_STATE) {
title = settingType.titleRes?.let { context.getString(it) }
- val messagePrefix = getPhoneStateMessagePrefix(context, settingIdentifier)
- message = settingType.messageRes?.let { context.getString(it, messagePrefix) }
+ val settingMessage = getPhoneStateSettingMessage(context, settingIdentifier)
+ message = settingType.messageRes?.let { context.getString(it, settingMessage) }
} else {
val url =
context.getString(R.string.help_url_action_disabled_by_restricted_settings)
@@ -165,18 +165,17 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
return Setting(title, message)
}
- private fun getPhoneStateMessagePrefix(
+ private fun getPhoneStateSettingMessage(
context: Context,
settingsIdentifier: String,
): String {
return context.getString(
when (settingsIdentifier) {
AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE ->
- R.string.enhanced_confirmation_phone_state_dialog_a11y_desc_prefix
+ R.string.enhanced_confirmation_phone_state_dialog_a11y_desc
AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES ->
- R.string.enhanced_confirmation_phone_state_dialog_install_desc_prefix
- else ->
- R.string.enhanced_confirmation_phone_state_dialog_generic_desc_prefix
+ R.string.enhanced_confirmation_phone_state_dialog_install_desc
+ else -> R.string.enhanced_confirmation_phone_state_dialog_generic_desc
}
)
}
@@ -278,7 +277,7 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
return AlertDialog.Builder(dialogActivity)
.setView(createDialogView(dialogActivity, title, message))
- .setPositiveButton(R.string.enhanced_confirmation_dialog_ok) { _, _ ->
+ .setPositiveButton(R.string.dialog_close) { _, _ ->
dialogActivity.onDialogResult(DialogResult.Okay)
}
.create()
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java b/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java
index a5234562b..50e3688e2 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java
@@ -33,7 +33,6 @@ import com.android.permission.flags.Flags;
import com.android.permissioncontroller.R;
import com.android.permissioncontroller.permission.ui.handheld.max35.LegacyAppPermissionFragment;
import com.android.permissioncontroller.permission.ui.handheld.v36.AppPermissionFragment;
-import com.android.role.controller.util.RoleFlags;
/** Helper methods for AppPermissionFragment across SDKs for compatibility. */
public class AppPermissionFragmentCompat {
@@ -45,7 +44,7 @@ public class AppPermissionFragmentCompat {
*/
@NonNull
public static PreferenceFragmentCompat createFragment(@NonNull Context context) {
- if ((RoleFlags.isAtLeastB() && Flags.appPermissionFragmentUsesPreferences())
+ if ((SdkLevel.isAtLeastB() && Flags.appPermissionFragmentUsesPreferences())
|| (SdkLevel.isAtLeastV() && context.getResources().getBoolean(
R.bool.config_usePreferenceForAppPermissionSettings))) {
return new AppPermissionFragment();
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt
deleted file mode 100644
index 061bcb8a3..000000000
--- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.android.permissioncontroller.permission.model.livedatatypes.v31
-
-import android.os.UserHandle
-
-/** Identifier for an app permission group combination. */
-data class AppPermissionId(
- val packageName: String,
- val userHandle: UserHandle,
- val permissionGroup: String,
-)
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt
deleted file mode 100644
index 04cc8a796..000000000
--- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt
+++ /dev/null
@@ -1,241 +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.permissioncontroller.permission.model.livedatatypes.v31
-
-import android.app.AppOpsManager.AttributedHistoricalOps
-import android.app.AppOpsManager.AttributedOpEntry
-import android.app.AppOpsManager.HistoricalOp
-import android.app.AppOpsManager.HistoricalPackageOps
-import android.app.AppOpsManager.OP_FLAG_SELF
-import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED
-import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXY
-import android.app.AppOpsManager.OpEventProxyInfo
-import android.os.UserHandle
-import com.android.permissioncontroller.permission.utils.PermissionMapping.getPlatformPermissionGroupForOp
-
-/**
- * Light version of [HistoricalPackageOps] class, tracking the last permission access for system
- * permission groups.
- */
-data class LightHistoricalPackageOps(
- /** Name of the package. */
- val packageName: String,
- /** [UserHandle] running the package. */
- val userHandle: UserHandle,
- /**
- * Data about permission accesses, one [AppPermissionDiscreteAccesses] for each permission
- * group.
- */
- // TODO(b/262042582): Consider removing this field and using attributed accesses aggregated over
- // attribution tags instead.
- val appPermissionDiscreteAccesses: List<AppPermissionDiscreteAccesses>,
- /**
- * Attributed data about permission accesses, one [AttributedAppPermissionDiscreteAccesses] for
- * each permission group.
- */
- val attributedAppPermissionDiscreteAccesses: List<AttributedAppPermissionDiscreteAccesses>
-) {
- constructor(
- historicalPackageOps: HistoricalPackageOps,
- userHandle: UserHandle,
- opNames: Set<String>
- ) : this(
- historicalPackageOps.packageName,
- userHandle,
- historicalPackageOps.getAppPermissionDiscreteAccesses(userHandle, opNames),
- historicalPackageOps.getAttributedAppPermissionDiscreteAccesses(userHandle, opNames),
- )
-
- /** Companion object for [LightHistoricalPackageOps]. */
- companion object {
- /** String to represent the absence of an attribution tag. */
- const val NO_ATTRIBUTION_TAG = "no_attribution_tag"
- /** String to represent the absence of a permission group. */
- private const val NO_PERM_GROUP = "no_perm_group"
- private const val DISCRETE_ACCESS_OP_FLAGS =
- OP_FLAG_SELF or OP_FLAG_TRUSTED_PROXIED or OP_FLAG_TRUSTED_PROXY
-
- /**
- * Creates a list of [AppPermissionDiscreteAccesses] for the provided package, user and ops.
- */
- private fun HistoricalPackageOps.getAppPermissionDiscreteAccesses(
- userHandle: UserHandle,
- opNames: Set<String>
- ): List<AppPermissionDiscreteAccesses> {
- val permissionsToOpNames = partitionOpsByPermission(opNames)
- val appPermissionDiscreteAccesses = mutableListOf<AppPermissionDiscreteAccesses>()
- for (permissionToOpNames in permissionsToOpNames.entries) {
- this.getDiscreteAccesses(permissionToOpNames.value)?.let {
- appPermissionDiscreteAccesses.add(
- AppPermissionDiscreteAccesses(
- AppPermissionId(packageName, userHandle, permissionToOpNames.key),
- it
- )
- )
- }
- }
-
- return appPermissionDiscreteAccesses
- }
-
- /**
- * Creates a list of [AttributedAppPermissionDiscreteAccesses] for the provided package,
- * user and ops.
- */
- private fun HistoricalPackageOps.getAttributedAppPermissionDiscreteAccesses(
- userHandle: UserHandle,
- opNames: Set<String>
- ): List<AttributedAppPermissionDiscreteAccesses> {
- val permissionsToOpNames = partitionOpsByPermission(opNames)
- val attributedAppPermissionDiscreteAccesses =
- mutableMapOf<AppPermissionId, MutableMap<String, List<DiscreteAccess>>>()
-
- val attributedHistoricalOpsList = mutableListOf<AttributedHistoricalOps>()
- for (i in 0 until attributedOpsCount) {
- attributedHistoricalOpsList.add(getAttributedOpsAt(i))
- }
-
- for (permissionToOpNames in permissionsToOpNames.entries) {
- attributedHistoricalOpsList.forEach { attributedHistoricalOps ->
- attributedHistoricalOps.getDiscreteAccesses(permissionToOpNames.value)?.let {
- discAccessData ->
- val appPermissionId =
- AppPermissionId(packageName, userHandle, permissionToOpNames.key)
- if (!attributedAppPermissionDiscreteAccesses.containsKey(appPermissionId)) {
- attributedAppPermissionDiscreteAccesses[appPermissionId] =
- mutableMapOf()
- }
- attributedAppPermissionDiscreteAccesses[appPermissionId]?.put(
- attributedHistoricalOps.tag ?: NO_ATTRIBUTION_TAG,
- discAccessData
- )
- }
- }
- }
-
- return attributedAppPermissionDiscreteAccesses.map {
- AttributedAppPermissionDiscreteAccesses(it.key, it.value)
- }
- }
-
- /**
- * Retrieves all discrete accesses for the provided op names, if any.
- *
- * Returns null if there are no accesses.
- */
- private fun HistoricalPackageOps.getDiscreteAccesses(
- opNames: List<String>
- ): List<DiscreteAccess>? {
- if (opCount == 0) {
- return null
- }
-
- val historicalOps = mutableListOf<HistoricalOp>()
- for (opName in opNames) {
- getOp(opName)?.let { historicalOps.add(it) }
- }
-
- val discreteAccessList = mutableListOf<DiscreteAccess>()
- historicalOps.forEach {
- for (i in 0 until it.discreteAccessCount) {
- val opEntry: AttributedOpEntry = it.getDiscreteAccessAt(i)
- discreteAccessList.add(
- DiscreteAccess(
- it.opName,
- opEntry.getLastAccessTime(DISCRETE_ACCESS_OP_FLAGS),
- opEntry.getLastDuration(DISCRETE_ACCESS_OP_FLAGS),
- opEntry.getLastProxyInfo(DISCRETE_ACCESS_OP_FLAGS)
- )
- )
- }
- }
-
- if (discreteAccessList.isEmpty()) {
- return null
- }
- return discreteAccessList.sortedWith(compareBy { -it.accessTimeMs })
- }
-
- /**
- * Retrieves all discrete accesses for the provided op names, if any.
- *
- * Returns null if there are no accesses.
- */
- private fun AttributedHistoricalOps.getDiscreteAccesses(
- opNames: List<String>
- ): List<DiscreteAccess>? {
- if (opCount == 0) {
- return null
- }
-
- val historicalOps = mutableListOf<HistoricalOp>()
- for (opName in opNames) {
- getOp(opName)?.let { historicalOps.add(it) }
- }
-
- val discreteAccessList = mutableListOf<DiscreteAccess>()
- historicalOps.forEach {
- for (i in 0 until it.discreteAccessCount) {
- val attributedOpEntry: AttributedOpEntry = it.getDiscreteAccessAt(i)
- discreteAccessList.add(
- DiscreteAccess(
- it.opName,
- attributedOpEntry.getLastAccessTime(DISCRETE_ACCESS_OP_FLAGS),
- attributedOpEntry.getLastDuration(DISCRETE_ACCESS_OP_FLAGS),
- attributedOpEntry.getLastProxyInfo(DISCRETE_ACCESS_OP_FLAGS)
- )
- )
- }
- }
-
- if (discreteAccessList.isEmpty()) {
- return null
- }
- return discreteAccessList.sortedWith(compareBy { -it.accessTimeMs })
- }
-
- private fun partitionOpsByPermission(ops: Set<String>): Map<String, List<String>> =
- ops.groupBy { getPlatformPermissionGroupForOp(it) ?: NO_PERM_GROUP }
- .filter { it.key != NO_PERM_GROUP }
- }
-
- /**
- * Data class representing permissions accesses for a particular permission group by a
- * particular package and user.
- */
- data class AppPermissionDiscreteAccesses(
- val appPermissionId: AppPermissionId,
- val discreteAccesses: List<DiscreteAccess>
- )
-
- /**
- * Data class representing permissions accesses for a particular permission group by a
- * particular package and user, partitioned by attribution tag.
- */
- data class AttributedAppPermissionDiscreteAccesses(
- val appPermissionId: AppPermissionId,
- val attributedDiscreteAccesses: Map<String, List<DiscreteAccess>>
- )
-
- /** Data class representing a discrete permission access. */
- data class DiscreteAccess(
- val opName: String,
- val accessTimeMs: Long,
- val accessDurationMs: Long,
- val proxy: OpEventProxyInfo?
- )
-}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt
deleted file mode 100644
index b65fda5ea..000000000
--- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt
+++ /dev/null
@@ -1,81 +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.permissioncontroller.permission.model.livedatatypes.v31
-
-import android.app.AppOpsManager.OP_FLAG_SELF
-import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED
-import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXY
-import android.app.AppOpsManager.PackageOps
-import android.os.UserHandle
-import com.android.permissioncontroller.permission.utils.PermissionMapping.getPlatformPermissionGroupForOp
-
-/**
- * Light version of [PackageOps] class, tracking the last permission access for system permission
- * groups.
- */
-data class LightPackageOps(
- /** Name of the package. */
- val packageName: String,
- /** [UserHandle] running the package. */
- val userHandle: UserHandle,
- /**
- * Mapping of permission group name to the last access time of any op backing a permission in
- * the group.
- */
- val lastPermissionGroupAccessTimesMs: Map<String, Long>
-) {
- constructor(
- ops: Set<String>,
- packageOps: PackageOps
- ) : this(
- packageOps.packageName,
- UserHandle.getUserHandleForUid(packageOps.uid),
- createLastPermissionGroupAccessTimesMap(ops, packageOps)
- )
-
- /** Companion object for [LightPackageOps]. */
- companion object {
- /** Flags to use for querying an op's last access time. */
- private const val OPS_LAST_ACCESS_FLAGS =
- OP_FLAG_SELF or OP_FLAG_TRUSTED_PROXIED or OP_FLAG_TRUSTED_PROXY
-
- /** Creates a mapping from permission group to the last time it was accessed. */
- private fun createLastPermissionGroupAccessTimesMap(
- opNames: Set<String>,
- packageOps: PackageOps
- ): Map<String, Long> {
- val lastAccessTimeMs = mutableMapOf<String, Long>()
- // Add keys for all permissions groups covered by the provided ops, regardless of
- // whether they have been observed recently.
- for (permissionGroup in
- opNames.mapNotNull { getPlatformPermissionGroupForOp(it) }.toSet()) {
- lastAccessTimeMs[permissionGroup] = -1
- }
-
- for (opEntry in packageOps.ops) {
- val permissionGroupOfOp = getPlatformPermissionGroupForOp(opEntry.opStr) ?: continue
- lastAccessTimeMs[permissionGroupOfOp] =
- maxOf(
- lastAccessTimeMs[permissionGroupOfOp] ?: -1,
- opEntry.getLastAccessTime(OPS_LAST_ACCESS_FLAGS)
- )
- }
-
- return lastAccessTimeMs
- }
- }
-}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java
index c42594fcb..768b00e39 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java
@@ -561,7 +561,6 @@ public class AppPermissionFragment extends SettingsWithLargeHeader
mDetails.setSummary(getPreferenceManager().getContext().getString(
detailResIds.getFirst(), detailResIds.getSecond()));
} else {
- mDetails.setOnSecondTargetClickListener(null);
mDetails.setSummary(getPreferenceManager().getContext().getString(
detailResIds.getFirst()));
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
index 7f714e083..93a1a66df 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
@@ -27,6 +27,7 @@ import android.util.Log
import com.android.modules.utils.build.SdkLevel
import com.android.permission.safetylabel.DataCategoryConstants
import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup
+import com.android.permissioncontroller.permission.utils.v31.AdminRestrictedPermissionsUtils
/**
* This file contains the canonical mapping of permission to permission group, used in the
@@ -145,6 +146,24 @@ object PermissionMapping {
PLATFORM_PERMISSIONS[Manifest.permission.RANGING] =
Manifest.permission_group.NEARBY_DEVICES
}
+ // Android XR permissions
+ if (android.xr.Flags.xrManifestEntries()) {
+ PLATFORM_PERMISSIONS[Manifest.permission.EYE_TRACKING_COARSE] =
+ Manifest.permission_group.XR_TRACKING
+ PLATFORM_PERMISSIONS[Manifest.permission.FACE_TRACKING] =
+ Manifest.permission_group.XR_TRACKING
+ PLATFORM_PERMISSIONS[Manifest.permission.HAND_TRACKING] =
+ Manifest.permission_group.XR_TRACKING
+ PLATFORM_PERMISSIONS[Manifest.permission.SCENE_UNDERSTANDING_COARSE] =
+ Manifest.permission_group.XR_TRACKING
+
+ PLATFORM_PERMISSIONS[Manifest.permission.EYE_TRACKING_FINE] =
+ Manifest.permission_group.XR_TRACKING_SENSITIVE
+ PLATFORM_PERMISSIONS[Manifest.permission.HEAD_TRACKING] =
+ Manifest.permission_group.XR_TRACKING_SENSITIVE
+ PLATFORM_PERMISSIONS[Manifest.permission.SCENE_UNDERSTANDING_FINE] =
+ Manifest.permission_group.XR_TRACKING_SENSITIVE
+ }
// Any updates to the permissions for the CALL_LOG permission group must also be made in
// Permissions {@link com.android.role.controller.model.Permissions} in the role
@@ -332,6 +351,9 @@ object PermissionMapping {
PLATFORM_PERMISSIONS[permission] = HEALTH_PERMISSION_GROUP
PLATFORM_PERMISSION_GROUPS[HEALTH_PERMISSION_GROUP]?.add(permission)
HEALTH_PERMISSIONS_SET.add(permission)
+ if (Flags.replaceBodySensorPermissionEnabled()) {
+ AdminRestrictedPermissionsUtils.addAdminRestrictedPermission(permission)
+ }
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtils.java
index 4fde616e3..a3b885752 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtils.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtils.java
@@ -54,6 +54,12 @@ public final class AdminRestrictedPermissionsUtils {
if (SdkLevel.isAtLeastT()) {
ADMIN_RESTRICTED_SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND);
}
+
+ }
+
+ /** Adds a new permission to the list of admin restricted permissions. */
+ public static void addAdminRestrictedPermission(String permission) {
+ ADMIN_RESTRICTED_SENSORS_PERMISSIONS.add(permission);
}
/**
@@ -91,7 +97,6 @@ public final class AdminRestrictedPermissionsUtils {
boolean isAdminRestrictedSensorPermissionGroup = permissionGroup != null
&& PermissionMapping.getPlatformPermissionNamesOfGroup(permissionGroup).stream()
.anyMatch(ADMIN_RESTRICTED_SENSORS_PERMISSIONS::contains);
-
if (!ADMIN_RESTRICTED_SENSORS_PERMISSIONS.contains(permission)
&& !isAdminRestrictedSensorPermissionGroup) {
return true;
diff --git a/PermissionController/src/com/android/permissioncontroller/role/Role.md b/PermissionController/src/com/android/permissioncontroller/role/Role.md
index 255214495..29a184190 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/Role.md
+++ b/PermissionController/src/com/android/permissioncontroller/role/Role.md
@@ -55,7 +55,13 @@ apps, separated by a colon (`:`) with the package name, for instance
receive short text messages, photos, videos, and more". For default apps, this string will appear in
the default app detail page as a footer. This attribute is required if the role is `visible`.
- `exclusive`: Whether the role is exclusive. If a role is exclusive, at most one application is
-allowed to be its holder.
+allowed to be its holder. This attribute is being deprecated and `exclusivity` should be used.
+- `exclusivity`: Whether the role is exclusive and what type of exclusivity behavior it has. A role
+can have exclusivity of `none`, `user`, or `profileGroup`.
+ - `none`: Role allows multiple holders
+ - `user`: Role allows at most one holder within each user
+ - `profileGroup`: (SDK 36+ only, falls back to `user` on lower SDK) Role allows at most one holder
+within a profile group (e.g. full user and work profile)
- `fallBackToDefaultHolder`: Whether the role should fall back to the default holder. This attribute
is optional and defaults to `false`.
- `featureFlag`: Optional feature flag for the role be available, as the fully qualified name of
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java
index 5f870b1e3..36d9cc3a0 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java
@@ -16,6 +16,8 @@
package com.android.permissioncontroller.role.ui;
+import static com.android.permissioncontroller.PermissionControllerStatsLog.ROLE_SETTINGS_FRAGMENT_ACTION_REPORTED;
+
import android.app.Activity;
import android.app.role.RoleManager;
import android.content.Context;
@@ -23,6 +25,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.os.Process;
import android.os.UserHandle;
import android.util.ArrayMap;
@@ -32,6 +35,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceManager;
@@ -39,6 +43,8 @@ import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference;
import com.android.modules.utils.build.SdkLevel;
+import com.android.permission.flags.Flags;
+import com.android.permissioncontroller.PermissionControllerStatsLog;
import com.android.permissioncontroller.R;
import com.android.permissioncontroller.permission.utils.Utils;
import com.android.permissioncontroller.role.utils.PackageUtils;
@@ -46,6 +52,7 @@ import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils;
import com.android.permissioncontroller.role.utils.SettingsCompat;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.Roles;
+import com.android.settingslib.utils.applications.AppUtils;
import java.util.List;
import java.util.Objects;
@@ -63,6 +70,10 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
implements DefaultAppConfirmationDialogFragment.Listener,
Preference.OnPreferenceClickListener {
+ private static final String PREFERENCE_KEY_RECOMMENDED_CATEGORY =
+ DefaultAppChildFragment.class.getName() + ".preference.RECOMMENDED_CATEGORY";
+ private static final String PREFERENCE_KEY_OTHERS_CATEGORY =
+ DefaultAppChildFragment.class.getName() + ".preference.OTHERS_CATEGORY";
private static final String PREFERENCE_KEY_NONE = DefaultAppChildFragment.class.getName()
+ ".preference.NONE";
private static final String PREFERENCE_KEY_DESCRIPTION = DefaultAppChildFragment.class.getName()
@@ -71,8 +82,8 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
DefaultAppChildFragment.class.getName() + ".preference.OTHER_NFC_SERVICES";
private static final String PREFERENCE_EXTRA_PACKAGE_NAME =
DefaultAppChildFragment.class.getName() + ".extra.PACKAGE_NAME";
- private static final String PREFERENCE_EXTRA_USER = DefaultAppChildFragment.class.getName()
- + ".extra.USER";
+ private static final String PREFERENCE_EXTRA_UID = DefaultAppChildFragment.class.getName()
+ + ".extra.UID";
@NonNull
private String mRoleName;
@@ -125,14 +136,21 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
ViewModelProvider.Factory viewModelFactory = new DefaultAppViewModel.Factory(mRole, mUser,
activity.getApplication());
mViewModel = new ViewModelProvider(this, viewModelFactory).get(DefaultAppViewModel.class);
+ mViewModel.getRecommendedLiveData().observe(this,
+ applicationItems -> onApplicationListChanged());
mViewModel.getLiveData().observe(this, applicationItems -> onApplicationListChanged());
mViewModel.getManageRoleHolderStateLiveData().observe(this,
this::onManageRoleHolderStateChanged);
}
private void onApplicationListChanged() {
- List<RoleApplicationItem> applicationItems = mViewModel.getLiveData().getValue();
- if (applicationItems == null) {
+ List<RoleApplicationItem> recommendedApplicationItems =
+ mViewModel.getRecommendedLiveData().getValue();
+ if (recommendedApplicationItems == null) {
+ return;
+ }
+ List<RoleApplicationItem> otherApplicationItems = mViewModel.getLiveData().getValue();
+ if (otherApplicationItems == null) {
return;
}
@@ -141,17 +159,43 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
Context context = preferenceManager.getContext();
PreferenceScreen preferenceScreen = preferenceFragment.getPreferenceScreen();
+ PreferenceCategory oldRecommendedPreferenceCategory = null;
+ PreferenceCategory oldOthersPreferenceCategory = null;
ArrayMap<String, Preference> oldPreferences = new ArrayMap<>();
if (preferenceScreen == null) {
preferenceScreen = preferenceManager.createPreferenceScreen(context);
preferenceFragment.setPreferenceScreen(preferenceScreen);
} else {
+ if (Flags.defaultAppsRecommendationEnabled()) {
+ oldRecommendedPreferenceCategory =
+ preferenceScreen.findPreference(PREFERENCE_KEY_RECOMMENDED_CATEGORY);
+ clearPreferenceCategory(oldRecommendedPreferenceCategory, oldPreferences);
+ oldOthersPreferenceCategory =
+ preferenceScreen.findPreference(PREFERENCE_KEY_OTHERS_CATEGORY);
+ clearPreferenceCategory(oldOthersPreferenceCategory, oldPreferences);
+ }
clearPreferences(preferenceScreen, oldPreferences);
}
- boolean noneChecked = !hasHolderApplication(applicationItems);
- addNonePreferenceIfNeeded(preferenceScreen, noneChecked, oldPreferences, context);
- addApplicationPreferences(preferenceScreen, applicationItems, oldPreferences, context);
+ if (Flags.defaultAppsRecommendationEnabled() && !recommendedApplicationItems.isEmpty()) {
+ addApplicationPreferenceCategory(oldRecommendedPreferenceCategory,
+ PREFERENCE_KEY_RECOMMENDED_CATEGORY,
+ getString(R.string.default_app_recommended), preferenceScreen, false, false,
+ recommendedApplicationItems, oldPreferences, context);
+ if (mRole.shouldShowNone() || !otherApplicationItems.isEmpty()) {
+ boolean noneChecked = !(hasHolderApplication(recommendedApplicationItems)
+ || hasHolderApplication(otherApplicationItems));
+ addApplicationPreferenceCategory(oldOthersPreferenceCategory,
+ PREFERENCE_KEY_OTHERS_CATEGORY, getString(R.string.default_app_others),
+ preferenceScreen, true, noneChecked, otherApplicationItems, oldPreferences,
+ context);
+ }
+ } else {
+ boolean noneChecked = !hasHolderApplication(otherApplicationItems);
+ addNonePreferenceIfNeeded(preferenceScreen, noneChecked, oldPreferences, context);
+ addApplicationPreferences(preferenceScreen, otherApplicationItems, oldPreferences,
+ context);
+ }
addNonPaymentNfcServicesPreference(preferenceScreen, oldPreferences, context);
addDescriptionPreference(preferenceScreen, oldPreferences);
@@ -159,6 +203,16 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
preferenceFragment.onPreferenceScreenChanged();
}
+ private static void clearPreferenceCategory(@Nullable PreferenceCategory preferenceCategory,
+ @NonNull ArrayMap<String, Preference> oldPreferences) {
+ if (preferenceCategory == null) {
+ return;
+ }
+ clearPreferences(preferenceCategory, oldPreferences);
+ preferenceCategory.getParent().removePreference(preferenceCategory);
+ preferenceCategory.setOrder(Preference.DEFAULT_ORDER);
+ }
+
private static void clearPreferences(@NonNull PreferenceGroup preferenceGroup,
@NonNull ArrayMap<String, Preference> oldPreferences) {
for (int i = preferenceGroup.getPreferenceCount() - 1; i >= 0; --i) {
@@ -170,6 +224,25 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
}
}
+ private void addApplicationPreferenceCategory(
+ @Nullable PreferenceCategory oldPreferenceCategory, @NonNull String key,
+ @Nullable String title, @NonNull PreferenceScreen preferenceScreen,
+ boolean addNonePreferenceIfNeeded, boolean noneChecked,
+ @NonNull List<RoleApplicationItem> applicationItems,
+ @NonNull ArrayMap<String, Preference> oldPreferences, @NonNull Context context) {
+ PreferenceCategory preferenceCategory = oldPreferenceCategory;
+ if (preferenceCategory == null) {
+ preferenceCategory = new PreferenceCategory(context);
+ preferenceCategory.setKey(key);
+ preferenceCategory.setTitle(title);
+ }
+ preferenceScreen.addPreference(preferenceCategory);
+ if (addNonePreferenceIfNeeded) {
+ addNonePreferenceIfNeeded(preferenceCategory, noneChecked, oldPreferences, context);
+ }
+ addApplicationPreferences(preferenceCategory, applicationItems, oldPreferences, context);
+ }
+
private static boolean hasHolderApplication(
@NonNull List<RoleApplicationItem> applicationItems) {
int applicationItemsSize = applicationItems.size();
@@ -234,10 +307,13 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
// the `NONE` item passes a null applicationinfo object. NFC uses a different preference
// method for adding, and a different onclick method
if (applicationInfo != null) {
+ UserHandle user = UserHandle.getUserHandleForUid(applicationInfo.uid);
+ roleApplicationPreference.setContentDescription(
+ AppUtils.getAppContentDescription(
+ context, applicationInfo.packageName, user.getIdentifier()));
Bundle extras = preference.getExtras();
extras.putString(PREFERENCE_EXTRA_PACKAGE_NAME, applicationInfo.packageName);
- extras.putParcelable(PREFERENCE_EXTRA_USER,
- UserHandle.getUserHandleForUid(applicationInfo.uid));
+ extras.putInt(PREFERENCE_EXTRA_UID, applicationInfo.uid);
}
} else {
preference = roleApplicationPreference.asTwoStatePreference();
@@ -276,28 +352,31 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat
public boolean onPreferenceClick(@NonNull Preference preference) {
String key = preference.getKey();
if (Objects.equals(key, PREFERENCE_KEY_NONE)) {
+ PermissionControllerStatsLog.write(
+ ROLE_SETTINGS_FRAGMENT_ACTION_REPORTED, Process.INVALID_UID, null, mRoleName);
mViewModel.setNoneDefaultApp();
} else {
String packageName =
preference.getExtras().getString(PREFERENCE_EXTRA_PACKAGE_NAME);
- UserHandle user =
- preference.getExtras().getParcelable(PREFERENCE_EXTRA_USER);
+ int uid = preference.getExtras().getInt(PREFERENCE_EXTRA_UID);
CharSequence confirmationMessage =
RoleUiBehaviorUtils.getConfirmationMessage(mRole, packageName,
requireContext());
if (confirmationMessage != null) {
- DefaultAppConfirmationDialogFragment.show(packageName, user, confirmationMessage,
+ DefaultAppConfirmationDialogFragment.show(packageName, uid, confirmationMessage,
this);
} else {
- setDefaultApp(packageName, user);
+ setDefaultApp(packageName, uid);
}
}
return true;
}
@Override
- public void setDefaultApp(@NonNull String packageName, @NonNull UserHandle user) {
- mViewModel.setDefaultApp(packageName, user);
+ public void setDefaultApp(@NonNull String packageName, int uid) {
+ PermissionControllerStatsLog.write(
+ ROLE_SETTINGS_FRAGMENT_ACTION_REPORTED, uid, packageName, mRoleName);
+ mViewModel.setDefaultApp(packageName, UserHandle.getUserHandleForUid(uid));
}
private void addNonPaymentNfcServicesPreference(@NonNull PreferenceScreen preferenceScreen,
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppConfirmationDialogFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppConfirmationDialogFragment.java
index 5f399a0b8..9a9606291 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppConfirmationDialogFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppConfirmationDialogFragment.java
@@ -20,11 +20,9 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
-import android.os.UserHandle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.core.os.BundleCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
@@ -34,27 +32,27 @@ import androidx.fragment.app.Fragment;
public class DefaultAppConfirmationDialogFragment extends DialogFragment {
private String mPackageName;
- private UserHandle mUser;
+ private int mUid;
private CharSequence mMessage;
/**
* Create a new instance of this fragment.
*
* @param packageName the package name of the application
- * @param user the user the specified package is running in
+ * @param uid the UID the specified package is running in
* @param message the confirmation message
*
* @return a new instance of this fragment
*
- * @see #show(String, UserHandle, CharSequence, Fragment)
+ * @see #show(String, int, CharSequence, Fragment)
*/
@NonNull
public static DefaultAppConfirmationDialogFragment newInstance(@NonNull String packageName,
- @NonNull UserHandle user, @NonNull CharSequence message) {
+ int uid, @NonNull CharSequence message) {
DefaultAppConfirmationDialogFragment fragment = new DefaultAppConfirmationDialogFragment();
Bundle arguments = new Bundle();
arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
- arguments.putParcelable(Intent.EXTRA_USER, user);
+ arguments.putInt(Intent.EXTRA_UID, uid);
arguments.putCharSequence(Intent.EXTRA_TEXT, message);
fragment.setArguments(arguments);
return fragment;
@@ -64,15 +62,15 @@ public class DefaultAppConfirmationDialogFragment extends DialogFragment {
* Show a new instance of this fragment.
*
* @param packageName the package name of the application
- * @param user the user the specified package is running in
+ * @param uid the UID the specified package is running in
* @param message the confirmation message
* @param fragment the parent fragment
*
- * @see #newInstance(String, UserHandle, CharSequence)
+ * @see #newInstance(String, int, CharSequence)
*/
- public static void show(@NonNull String packageName, @NonNull UserHandle user,
+ public static void show(@NonNull String packageName, int uid,
@NonNull CharSequence message, @NonNull Fragment fragment) {
- newInstance(packageName, user, message).show(fragment.getChildFragmentManager(), null);
+ newInstance(packageName, uid, message).show(fragment.getChildFragmentManager(), null);
}
@Override
@@ -81,7 +79,7 @@ public class DefaultAppConfirmationDialogFragment extends DialogFragment {
Bundle arguments = getArguments();
mPackageName = arguments.getString(Intent.EXTRA_PACKAGE_NAME);
- mUser = BundleCompat.getParcelable(arguments, Intent.EXTRA_USER, UserHandle.class);
+ mUid = arguments.getInt(Intent.EXTRA_UID);
mMessage = arguments.getCharSequence(Intent.EXTRA_TEXT);
}
@@ -97,7 +95,7 @@ public class DefaultAppConfirmationDialogFragment extends DialogFragment {
private void onOk() {
Listener listener = (Listener) getParentFragment();
- listener.setDefaultApp(mPackageName, mUser);
+ listener.setDefaultApp(mPackageName, mUid);
}
/**
@@ -110,6 +108,6 @@ public class DefaultAppConfirmationDialogFragment extends DialogFragment {
*
* @param packageName the package name of the application
*/
- void setDefaultApp(@NonNull String packageName, @NonNull UserHandle user);
+ void setDefaultApp(@NonNull String packageName, int uid);
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java
index 2a987167e..fd91d0d3b 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java
@@ -40,10 +40,12 @@ import androidx.preference.PreferenceScreen;
import com.android.modules.utils.build.SdkLevel;
import com.android.permissioncontroller.R;
import com.android.permissioncontroller.permission.utils.Utils;
+import com.android.permissioncontroller.role.UserPackage;
import com.android.permissioncontroller.role.utils.PackageUtils;
import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.Roles;
+import com.android.settingslib.utils.applications.AppUtils;
import java.util.List;
@@ -241,10 +243,16 @@ public class DefaultAppListChildFragment<PF extends PreferenceFragmentCompat
if (holderApplicationInfos.isEmpty()) {
preference.setIcon(null);
preference.setSummary(R.string.default_app_none);
+ rolePreference.setSummaryContentDescription(null);
} else {
ApplicationInfo holderApplicationInfo = holderApplicationInfos.get(0);
preference.setIcon(Utils.getBadgedIcon(context, holderApplicationInfo));
preference.setSummary(Utils.getAppLabel(holderApplicationInfo, context));
+ UserPackage userPackage = UserPackage.from(holderApplicationInfo);
+ rolePreference.setSummaryContentDescription(
+ AppUtils.getAppContentDescription(context,
+ userPackage.packageName,
+ userPackage.user.getIdentifier()));
}
RoleUiBehaviorUtils.preparePreferenceAsUser(role, holderApplicationInfos,
rolePreference, user, context);
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppViewModel.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppViewModel.java
index 790c55d84..f4ba94f1d 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppViewModel.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppViewModel.java
@@ -28,10 +28,12 @@ import androidx.lifecycle.Transformations;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
+import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils;
import com.android.permissioncontroller.role.utils.UserUtils;
import com.android.role.controller.model.Role;
import java.util.List;
+import java.util.function.Predicate;
/**
* {@link ViewModel} for a default app.
@@ -46,6 +48,9 @@ public class DefaultAppViewModel extends AndroidViewModel {
private final UserHandle mUser;
@NonNull
+ private final LiveData<List<RoleApplicationItem>> mRecommendedLiveData;
+
+ @NonNull
private final LiveData<List<RoleApplicationItem>> mLiveData;
@NonNull
@@ -61,22 +66,34 @@ public class DefaultAppViewModel extends AndroidViewModel {
mUser = role.getExclusivity() == Role.EXCLUSIVITY_PROFILE_GROUP
? UserUtils.getProfileParentOrSelf(user, application)
: user;
- RoleLiveData liveData = new RoleLiveData(role, mUser, application);
+ RoleLiveData userLiveData = new RoleLiveData(role, mUser, application);
RoleSortFunction sortFunction = new RoleSortFunction(application);
+ LiveData<List<RoleApplicationItem>> liveData;
if (role.getExclusivity() == Role.EXCLUSIVITY_PROFILE_GROUP) {
// Context user might be work profile, ensure we get a non-null UserHandle if work
// profile exists. getWorkProfile returns null if context user is work profile.
UserHandle workProfile = UserUtils.getWorkProfileOrSelf(application);
if (workProfile != null) {
RoleLiveData workLiveData = new RoleLiveData(role, workProfile, application);
- mLiveData = Transformations.map(new MergeRoleLiveData(liveData, workLiveData),
+ liveData = Transformations.map(new MergeRoleLiveData(userLiveData, workLiveData),
sortFunction);
} else {
- mLiveData = Transformations.map(liveData, sortFunction);
+ liveData = Transformations.map(userLiveData, sortFunction);
}
} else {
- mLiveData = Transformations.map(liveData, sortFunction);
+ liveData = Transformations.map(userLiveData, sortFunction);
}
+ Predicate<RoleApplicationItem> recommendedApplicationFilter =
+ RoleUiBehaviorUtils.getRecommendedApplicationFilter(role, application);
+ mRecommendedLiveData = Transformations.map(liveData,
+ new ListLiveDataFilterFunction<>(recommendedApplicationFilter));
+ mLiveData = Transformations.map(liveData,
+ new ListLiveDataFilterFunction<>(recommendedApplicationFilter.negate()));
+ }
+
+ @NonNull
+ public LiveData<List<RoleApplicationItem>> getRecommendedLiveData() {
+ return mRecommendedLiveData;
}
@NonNull
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java
index f411b0cd0..89a17004b 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java
@@ -59,6 +59,7 @@ import com.android.permissioncontroller.role.utils.UiUtils;
import com.android.permissioncontroller.role.utils.UserUtils;
import com.android.role.controller.model.Role;
import com.android.role.controller.model.Roles;
+import com.android.settingslib.utils.applications.AppUtils;
import java.util.ArrayList;
import java.util.List;
@@ -110,6 +111,7 @@ public class RequestRoleFragment extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setCancelable(false);
Bundle arguments = getArguments();
mPackageName = arguments.getString(Intent.EXTRA_PACKAGE_NAME);
@@ -697,6 +699,7 @@ public class RequestRoleFragment extends DialogFragment {
Drawable icon;
String title;
String subtitle;
+ String contentDescription;
if (applicationItem == null) {
applicationInfo = null;
restricted = false;
@@ -705,6 +708,7 @@ public class RequestRoleFragment extends DialogFragment {
title = context.getString(R.string.default_app_none);
subtitle = mHolderUserPackage == null ? context.getString(
R.string.request_role_current_default) : null;
+ contentDescription = null;
} else {
applicationInfo = applicationItem.getApplicationInfo();
UserPackage userPackage = UserPackage.from(applicationInfo);
@@ -716,14 +720,18 @@ public class RequestRoleFragment extends DialogFragment {
subtitle = applicationItem.isHolderApplication()
? context.getString(R.string.request_role_current_default)
: checked ? context.getString(mRole.getRequestDescriptionResource()) : null;
+ contentDescription = AppUtils.getAppContentDescription(context,
+ userPackage.packageName, userPackage.user.getIdentifier());
}
boolean enabled = isEnabled(position);
UiUtils.setViewTreeEnabled(view, enabled && !restricted);
view.setEnabled(enabled);
view.setChecked(checked);
+
holder.iconImage.setImageDrawable(icon);
holder.titleText.setText(title);
+ holder.titleText.setContentDescription(contentDescription);
holder.subtitleText.setVisibility(!TextUtils.isEmpty(subtitle) ? View.VISIBLE
: View.GONE);
holder.subtitleText.setText(subtitle);
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java
index 1d3e32c9c..3336aad50 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java
@@ -17,6 +17,7 @@
package com.android.permissioncontroller.role.ui;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.preference.TwoStatePreference;
/**
@@ -29,4 +30,9 @@ public interface RoleApplicationPreference extends RestrictionAwarePreference {
*/
@NonNull
TwoStatePreference asTwoStatePreference();
+
+ /**
+ * Sets the preference's content description.
+ */
+ void setContentDescription(@Nullable String contentDescription);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java
index bbc123cfe..feafb0ae5 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java
@@ -17,6 +17,7 @@
package com.android.permissioncontroller.role.ui;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.preference.Preference;
/**
@@ -28,4 +29,9 @@ public interface RolePreference extends TwoTargetPreference, RestrictionAwarePre
*/
@NonNull
Preference asPreference();
+
+ /**
+ * Sets the preference's summary content description.
+ */
+ void setSummaryContentDescription(@Nullable String summaryContentDescription);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java
index 764c07497..f0a27284d 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.auto;
import android.content.Context;
import android.content.Intent;
import android.widget.RadioButton;
+import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -30,10 +31,15 @@ import com.android.permissioncontroller.R;
import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RoleApplicationPreference;
+import java.util.Objects;
+
/** Preference used to represent apps that can be picked as a default app. */
public class AutoRadioPreference extends TwoStatePreference implements
RoleApplicationPreference {
+ @Nullable
+ private String mContentDescription;
+
private final RestrictionAwarePreferenceMixin mRestrictionAwarePreferenceMixin =
new RestrictionAwarePreferenceMixin(this);
@@ -56,10 +62,21 @@ public class AutoRadioPreference extends TwoStatePreference implements
RadioButton radioButton = (RadioButton) holder.findViewById(R.id.radio_button);
radioButton.setChecked(isChecked());
+ TextView titleText = (TextView) holder.findViewById(android.R.id.title);
+ titleText.setContentDescription(mContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
@Override
+ public void setContentDescription(@Nullable String contentDescription) {
+ if (!Objects.equals(mContentDescription, contentDescription)) {
+ mContentDescription = contentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java
index 15fd117d1..28dfc67f9 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.auto;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
+import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
@@ -31,12 +32,17 @@ import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RolePreference;
import com.android.permissioncontroller.role.ui.TwoTargetPreference;
+import java.util.Objects;
+
/**
* Preference for use in auto lists. Extends {@link TwoTargetPreference} in order to make sure of
* shared logic between phone and auto settings UI.
*/
public class AutoRolePreference extends Preference implements RolePreference {
+ @Nullable
+ private String mSummaryContentDescription;
+
private RestrictionAwarePreferenceMixin mRestrictionAwarePreferenceMixin =
new RestrictionAwarePreferenceMixin(this);
@@ -62,6 +68,14 @@ public class AutoRolePreference extends Preference implements RolePreference {
public void setOnSecondTargetClickListener(@Nullable OnSecondTargetClickListener listener) {}
@Override
+ public void setSummaryContentDescription(@Nullable String summaryContentDescription) {
+ if (!Objects.equals(mSummaryContentDescription, summaryContentDescription)) {
+ mSummaryContentDescription = summaryContentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
@@ -70,6 +84,9 @@ public class AutoRolePreference extends Preference implements RolePreference {
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
+ TextView summaryText = (TextView) holder.findViewById(android.R.id.summary);
+ summaryText.setContentDescription(mSummaryContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java
index bfb2b5d1d..e7279278c 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.auto;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
+import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
@@ -30,12 +31,16 @@ import androidx.preference.SwitchPreference;
import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RoleApplicationPreference;
+import java.util.Objects;
+
/**
* Role application preference represented as a switch.
*/
public class AutoSwitchPreference extends SwitchPreference
implements RoleApplicationPreference {
+ @Nullable
+ private String mContentDescription;
private RestrictionAwarePreferenceMixin mRestrictionAwarePreferenceMixin =
new RestrictionAwarePreferenceMixin(this);
@@ -58,6 +63,14 @@ public class AutoSwitchPreference extends SwitchPreference
}
@Override
+ public void setContentDescription(@Nullable String contentDescription) {
+ if (!Objects.equals(mContentDescription, contentDescription)) {
+ mContentDescription = contentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
@@ -66,6 +79,9 @@ public class AutoSwitchPreference extends SwitchPreference
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
+ TextView titleText = (TextView) holder.findViewById(android.R.id.title);
+ titleText.setContentDescription(mContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java
index 4df3ccf99..c74c3d519 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java
@@ -25,8 +25,15 @@ import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.permission.flags.Flags;
import com.android.permissioncontroller.R;
+import com.android.permissioncontroller.role.ui.RoleApplicationItem;
import com.android.role.controller.model.Role;
+import com.android.role.controller.util.SignedPackage;
+import com.android.role.controller.util.SignedPackageUtils;
+
+import java.util.List;
+import java.util.function.Predicate;
/***
* Class for UI behavior of Assistant role
@@ -39,14 +46,26 @@ public class AssistantRoleUiBehavior implements RoleUiBehavior {
@NonNull Context context) {
boolean isAutomotive =
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
-
if (isAutomotive) {
return null;
}
-
return new Intent(Settings.ACTION_VOICE_INPUT_SETTINGS);
}
+ @NonNull
+ @Override
+ public Predicate<RoleApplicationItem> getRecommendedApplicationFilter(
+ @NonNull Role role, @NonNull Context context) {
+ if (Flags.defaultAppsRecommendationEnabled()) {
+ List<SignedPackage> signedPackages = SignedPackage.parseList(
+ context.getResources().getString(R.string.config_recommendedAssistants));
+ return applicationItem -> SignedPackageUtils.matchesAny(
+ applicationItem.getApplicationInfo(), signedPackages, context);
+ } else {
+ return RoleUiBehavior.super.getRecommendedApplicationFilter(role, context);
+ }
+ }
+
@Nullable
@Override
public CharSequence getConfirmationMessage(@NonNull Role role, @NonNull String packageName,
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java
index ae5c03676..e1bf213a0 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java
@@ -26,10 +26,12 @@ import androidx.annotation.Nullable;
import androidx.preference.Preference;
import com.android.permissioncontroller.role.ui.RequestRoleItemView;
+import com.android.permissioncontroller.role.ui.RoleApplicationItem;
import com.android.permissioncontroller.role.ui.TwoTargetPreference;
import com.android.role.controller.model.Role;
import java.util.List;
+import java.util.function.Predicate;
/***
* Interface for UI behavior for roles
@@ -92,6 +94,20 @@ public interface RoleUiBehavior {
@NonNull UserHandle user, @NonNull Context context) {}
/**
+ * Get the filter for recommended applications of this role.
+ *
+ * @param role the role to get the recommended application filter for
+ * @param context the {@code Context} to retrieve system services
+ *
+ * @return the filter for recommended applications
+ */
+ @NonNull
+ default Predicate<RoleApplicationItem> getRecommendedApplicationFilter(
+ @NonNull Role role, @NonNull Context context) {
+ return applicationItem -> false;
+ }
+
+ /**
* Get the confirmation message for adding an application as a holder of this role.
*
* @param role the role to get confirmation message for
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v35/WalletRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v35/WalletRoleUiBehavior.java
index f1754dde9..eb1dbb5ef 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v35/WalletRoleUiBehavior.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v35/WalletRoleUiBehavior.java
@@ -22,6 +22,8 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.nfc.cardemulation.ApduServiceInfo;
import android.nfc.cardemulation.CardEmulation;
@@ -39,6 +41,8 @@ import androidx.annotation.RequiresApi;
import androidx.core.util.Pair;
import androidx.preference.Preference;
+import com.android.launcher3.icons.IconFactory;
+import com.android.permissioncontroller.role.ui.RequestRoleItemView;
import com.android.permissioncontroller.role.ui.TwoTargetPreference;
import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior;
import com.android.role.controller.model.Role;
@@ -70,6 +74,21 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
}
@Override
+ public void prepareRequestRoleItemViewAsUser(@NonNull Role role,
+ @NonNull RequestRoleItemView itemView, @NonNull ApplicationInfo applicationInfo,
+ @NonNull UserHandle user, @NonNull Context context) {
+ if (isSystemApplication(applicationInfo)) {
+ Pair<Drawable, CharSequence> bannerAndLabel = getLabelAndIconIfItExists(
+ applicationInfo, user, context);
+
+ if (bannerAndLabel != null) {
+ itemView.getIconImageView().setImageDrawable(bannerAndLabel.first);
+ itemView.getTitleTextView().setText(bannerAndLabel.second);
+ }
+ }
+ }
+
+ @Override
public void prepareApplicationPreferenceAsUser(@NonNull Role role,
@NonNull Preference preference, @NonNull ApplicationInfo applicationInfo,
@NonNull UserHandle user, @NonNull Context context) {
@@ -81,21 +100,8 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
@NonNull ApplicationInfo applicationInfo, boolean setTitle, @NonNull UserHandle user,
@NonNull Context context) {
if (isSystemApplication(applicationInfo)) {
- List<ApduServiceInfo> serviceInfos = getNfcServicesForPackage(
- applicationInfo.packageName, user, context);
-
- Pair<Drawable, CharSequence> bannerAndLabel = null;
- // If the flag is enabled , attempt to fetch it from property
- if (Flags.walletRoleIconPropertyEnabled()) {
- bannerAndLabel =
- getBannerAndLabelFromPackageProperty(context, user,
- applicationInfo.packageName);
- }
- // If it's null, indicating that the property is not set, perform a legacy icon lookup.
- if (bannerAndLabel == null) {
- bannerAndLabel =
- getNonPaymentServiceBannerAndLabelIfExists(serviceInfos, user, context);
- }
+ Pair<Drawable, CharSequence> bannerAndLabel = getLabelAndIconIfItExists(
+ applicationInfo, user, context);
if (bannerAndLabel != null) {
preference.setIcon(bannerAndLabel.first);
if (setTitle) {
@@ -107,6 +113,26 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
}
}
+ @Nullable
+ private Pair<Drawable, CharSequence> getLabelAndIconIfItExists(
+ @NonNull ApplicationInfo applicationInfo,
+ @NonNull UserHandle user,
+ @NonNull Context context) {
+ Pair<Drawable, CharSequence> result = null;
+ // If the flag is enabled , attempt to fetch it from property
+ if (Flags.walletRoleIconPropertyEnabled()) {
+ result = getBannerAndLabelFromPackageProperty(context, user,
+ applicationInfo.packageName);
+ }
+ if (result != null) {
+ return result;
+ }
+ List<ApduServiceInfo> serviceInfos = getNfcServicesForPackage(
+ applicationInfo.packageName, user, context);
+ // If it's null, indicating that the property is not set, perform a legacy icon lookup.
+ return getNonPaymentServiceBannerAndLabelIfExists(serviceInfos, user, context);
+ }
+
@Nullable
private Pair<Drawable, CharSequence> getBannerAndLabelFromPackageProperty(
@@ -122,7 +148,7 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
PackageManager.Property iconProperty = packageManager.getProperty(
ApduServiceInfo.PROPERTY_WALLET_PREFERRED_BANNER_AND_LABEL, componentName);
if (iconProperty.isBoolean() && iconProperty.getBoolean()) {
- return loadBannerAndLabel(serviceInfo, packageManager);
+ return loadBannerAndLabel(serviceInfo, packageManager, context, user);
}
} catch (PackageManager.NameNotFoundException e) {
continue;
@@ -186,7 +212,8 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
for (int i = 0; i < apduServiceInfoSize; i++) {
ApduServiceInfo serviceInfo = apduServiceInfos.get(i);
if (serviceInfo.getAids().isEmpty()) {
- bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager);
+ bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager, context,
+ user);
if (bannerAndLabel != null) {
return bannerAndLabel;
}
@@ -197,7 +224,8 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
String aid = aids.get(j);
String category = serviceInfo.getCategoryForAid(aid);
if (!CardEmulation.CATEGORY_PAYMENT.equals(category)) {
- bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager);
+ bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager,
+ context, user);
if (bannerAndLabel != null) {
return bannerAndLabel;
}
@@ -210,8 +238,20 @@ public class WalletRoleUiBehavior implements RoleUiBehavior {
@Nullable
private Pair<Drawable, CharSequence> loadBannerAndLabel(@NonNull ApduServiceInfo info,
- @NonNull PackageManager userPackageManager) {
+ @NonNull PackageManager userPackageManager, @NonNull Context context,
+ @NonNull UserHandle user) {
Drawable drawable = info.loadBanner(userPackageManager);
+ if (drawable != null) {
+ try (IconFactory factory = IconFactory.obtain(context)) {
+ Bitmap badged =
+ factory.createBadgedIconBitmap(drawable, user,
+ false).icon;
+ if (badged != null) {
+ drawable = new BitmapDrawable(context.getResources(), badged);
+ }
+ }
+ }
+
CharSequence label = info.loadLabel(userPackageManager);
if (drawable != null && !TextUtils.isEmpty(label)) {
return new Pair<>(drawable, label);
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java
index be51a1e17..00b1ce5b1 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/v36/ReservedForTestingProfileGroupExclusivityRoleUiBehavior.java
@@ -14,23 +14,27 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.role.ui.behavior;
+package com.android.permissioncontroller.role.ui.behavior.v36;
import android.content.Context;
import android.content.pm.ApplicationInfo;
+import android.os.Build;
import android.os.UserHandle;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import androidx.preference.Preference;
import com.android.permissioncontroller.permission.utils.Utils;
import com.android.permissioncontroller.role.ui.RequestRoleItemView;
import com.android.permissioncontroller.role.ui.TwoTargetPreference;
+import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior;
import com.android.role.controller.model.Role;
import com.android.role.controller.util.UserUtils;
import java.util.List;
+@RequiresApi(Build.VERSION_CODES.BAKLAVA)
public class ReservedForTestingProfileGroupExclusivityRoleUiBehavior implements RoleUiBehavior {
@Override
public void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference,
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java
index 67f04051c..2a943d3d7 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.handheld;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
+import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -28,12 +29,17 @@ import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RoleApplicationPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
+import java.util.Objects;
+
/**
* Preference used to represent apps that can be picked as a default app.
*/
public class HandheldRadioPreference extends SelectorWithWidgetPreference implements
RoleApplicationPreference {
+ @Nullable
+ private String mContentDescription;
+
private final RestrictionAwarePreferenceMixin mRestrictionAwarePreferenceMixin =
new RestrictionAwarePreferenceMixin(this);
@@ -56,6 +62,14 @@ public class HandheldRadioPreference extends SelectorWithWidgetPreference implem
}
@Override
+ public void setContentDescription(@Nullable String contentDescription) {
+ if (!Objects.equals(mContentDescription, contentDescription)) {
+ mContentDescription = contentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
@@ -64,6 +78,9 @@ public class HandheldRadioPreference extends SelectorWithWidgetPreference implem
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
+ TextView titleText = (TextView) holder.findViewById(android.R.id.title);
+ titleText.setContentDescription(mContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java
index 3d09f0b46..46bf3b173 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
import android.view.View;
+import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
@@ -33,6 +34,8 @@ import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RolePreference;
import com.android.settingslib.widget.TwoTargetPreference;
+import java.util.Objects;
+
/**
* {@link Preference} with a settings button.
*
@@ -45,6 +48,9 @@ public class HandheldRolePreference extends TwoTargetPreference implements RoleP
new RestrictionAwarePreferenceMixin(this);
@Nullable
+ private String mSummaryContentDescription;
+
+ @Nullable
private OnSecondTargetClickListener mOnSecondTargetClickListener;
public HandheldRolePreference(@NonNull Context context, @Nullable AttributeSet attrs,
@@ -94,6 +100,14 @@ public class HandheldRolePreference extends TwoTargetPreference implements RoleP
}
@Override
+ public void setSummaryContentDescription(@Nullable String summaryContentDescription) {
+ if (!Objects.equals(mSummaryContentDescription, summaryContentDescription)) {
+ mSummaryContentDescription = summaryContentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
@@ -114,6 +128,9 @@ public class HandheldRolePreference extends TwoTargetPreference implements RoleP
// Make the settings button enabled even if the preference itself is disabled.
settingsButton.setEnabled(true);
+ TextView summaryText = (TextView) holder.findViewById(android.R.id.summary);
+ summaryText.setContentDescription(mSummaryContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java
index ded6d5cb5..a801c2182 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.specialappaccess.handheld;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
+import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
@@ -30,10 +31,14 @@ import com.android.permissioncontroller.role.ui.RestrictionAwarePreferenceMixin;
import com.android.permissioncontroller.role.ui.RoleApplicationPreference;
import com.android.settingslib.widget.AppSwitchPreference;
+import java.util.Objects;
+
/** {@link AppSwitchPreference} that is a role application preference. */
public class HandheldSwitchPreference extends AppSwitchPreference
implements RoleApplicationPreference {
+ @Nullable
+ private String mContentDescription;
private RestrictionAwarePreferenceMixin mRestrictionAwarePreferenceMixin =
new RestrictionAwarePreferenceMixin(this);
@@ -56,6 +61,14 @@ public class HandheldSwitchPreference extends AppSwitchPreference
}
@Override
+ public void setContentDescription(@Nullable String contentDescription) {
+ if (!Objects.equals(mContentDescription, contentDescription)) {
+ mContentDescription = contentDescription;
+ notifyChanged();
+ }
+ }
+
+ @Override
public void setRestrictionIntent(@Nullable Intent restrictionIntent) {
mRestrictionAwarePreferenceMixin.setRestrictionIntent(restrictionIntent);
}
@@ -64,6 +77,9 @@ public class HandheldSwitchPreference extends AppSwitchPreference
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
+ TextView titleText = (TextView) holder.findViewById(android.R.id.title);
+ titleText.setContentDescription(mContentDescription);
+
mRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRoleApplicationPreference.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRoleApplicationPreference.kt
index 6cd52f576..cb12bf70a 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRoleApplicationPreference.kt
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRoleApplicationPreference.kt
@@ -18,6 +18,7 @@ package com.android.permissioncontroller.role.ui.wear
import android.content.Context
import android.content.Intent
+import androidx.preference.PreferenceViewHolder
import androidx.preference.TwoStatePreference
import com.android.permissioncontroller.role.ui.RoleApplicationPreference
@@ -30,7 +31,8 @@ class WearRoleApplicationPreference(
defaultLabel: String,
val checked: Boolean,
val onDefaultCheckChanged: (Boolean) -> Unit = {},
- private var restrictionIntent: Intent? = null
+ private var restrictionIntent: Intent? = null,
+ private var contentDescription: String? = null,
) : TwoStatePreference(context), RoleApplicationPreference {
init {
title = defaultLabel
@@ -39,10 +41,22 @@ class WearRoleApplicationPreference(
fun getOnCheckChanged(): (Boolean) -> Unit =
restrictionIntent?.let { { _ -> context.startActivity(it) } } ?: onDefaultCheckChanged
+ override fun setContentDescription(contentDescription: String?) {
+ if (this.contentDescription != contentDescription) {
+ this.contentDescription = contentDescription
+ notifyChanged()
+ }
+ }
+
override fun setRestrictionIntent(restrictionIntent: Intent?) {
this.restrictionIntent = restrictionIntent
isEnabled = restrictionIntent == null
}
override fun asTwoStatePreference(): TwoStatePreference = this
+
+ override fun onBindViewHolder(holder: PreferenceViewHolder) {
+ super.onBindViewHolder(holder)
+ holder.findViewById(android.R.id.title)?.let { it.contentDescription = contentDescription }
+ }
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRolePreference.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRolePreference.kt
index 43acf4293..670c136ea 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRolePreference.kt
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRolePreference.kt
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.role.ui.wear
import android.content.Context
import android.content.Intent
import androidx.preference.Preference
+import androidx.preference.PreferenceViewHolder
import com.android.permissioncontroller.role.ui.RolePreference
import com.android.permissioncontroller.role.ui.TwoTargetPreference.OnSecondTargetClickListener
import com.android.settingslib.widget.TwoTargetPreference
@@ -28,13 +29,21 @@ class WearRolePreference(
context: Context,
val label: String,
val onDefaultClicked: () -> Unit = {},
- private var restrictionIntent: Intent? = null
+ private var restrictionIntent: Intent? = null,
+ private var summaryContentDescription: String? = null,
) : TwoTargetPreference(context), RolePreference {
override fun setOnSecondTargetClickListener(listener: OnSecondTargetClickListener?) {
// no-op
}
+ override fun setSummaryContentDescription(summaryContentDescription: String?) {
+ if (this.summaryContentDescription != summaryContentDescription) {
+ this.summaryContentDescription = summaryContentDescription
+ notifyChanged()
+ }
+ }
+
override fun setRestrictionIntent(restrictionIntent: Intent?) {
this.restrictionIntent = restrictionIntent
setEnabled(restrictionIntent == null)
@@ -42,6 +51,14 @@ class WearRolePreference(
override fun asPreference(): Preference = this
+ override fun onBindViewHolder(holder: PreferenceViewHolder) {
+ super.onBindViewHolder(holder)
+
+ holder.findViewById(android.R.id.summary)?.let {
+ it.contentDescription = summaryContentDescription
+ }
+ }
+
fun getOnClicked(): () -> Unit =
restrictionIntent?.let { { context.startActivity(it) } } ?: onDefaultClicked
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java
index c11a74259..255d88ff0 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java
@@ -26,12 +26,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.permissioncontroller.role.ui.RequestRoleItemView;
+import com.android.permissioncontroller.role.ui.RoleApplicationItem;
import com.android.permissioncontroller.role.ui.RoleApplicationPreference;
import com.android.permissioncontroller.role.ui.RolePreference;
import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior;
import com.android.role.controller.model.Role;
import java.util.List;
+import java.util.function.Predicate;
/**
* Utility methods for Role UI behavior
@@ -117,6 +119,19 @@ public final class RoleUiBehaviorUtils {
}
/**
+ * @see RoleUiBehavior#getRecommendedApplicationFilter
+ */
+ @NonNull
+ public static Predicate<RoleApplicationItem> getRecommendedApplicationFilter(
+ @NonNull Role role, @NonNull Context context) {
+ RoleUiBehavior uiBehavior = getUiBehavior(role);
+ if (uiBehavior == null) {
+ return applicationItem -> false;
+ }
+ return uiBehavior.getRecommendedApplicationFilter(role, context);
+ }
+
+ /**
* @see RoleUiBehavior#getConfirmationMessage
*/
@Nullable
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java
index 88759797e..e47565e3b 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java
@@ -295,7 +295,8 @@ public class IssueCardPreference extends Preference
public static class ConfirmDismissalDialogFragment extends DialogFragment {
private static final String ISSUE_KEY = "confirm_dialog_sc_issue";
- private static ConfirmDismissalDialogFragment newInstance(SafetyCenterIssue issue) {
+ /** Create new fragment with the data it will need. */
+ public static ConfirmDismissalDialogFragment newInstance(SafetyCenterIssue issue) {
ConfirmDismissalDialogFragment fragment = new ConfirmDismissalDialogFragment();
Bundle args = new Bundle();
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
index c5287af53..e0f284d16 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
@@ -45,6 +45,11 @@ internal class SafetyBrandChipPreference(context: Context, attrs: AttributeSet)
super.onBindViewHolder(holder)
val brandChipButton = holder.findViewById(R.id.brand_chip)!!
brandChipButton.setOnClickListener(brandChipClickListener)
+ SafetyCenterTouchTarget.configureSize(
+ brandChipButton,
+ R.dimen.sc_icon_button_touch_target_size,
+ useWidthHeightFix = true,
+ )
}
/**
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java
index ed6bc382c..1297bc4c2 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java
@@ -35,7 +35,6 @@ import android.safetycenter.SafetyCenterData;
import android.safetycenter.SafetyCenterEntry;
import android.safetycenter.SafetyCenterEntryGroup;
import android.safetycenter.SafetyCenterEntryOrGroup;
-import android.safetycenter.SafetyCenterIssue;
import android.safetycenter.SafetyCenterStaticEntry;
import android.safetycenter.SafetyCenterStaticEntryGroup;
import android.util.Log;
@@ -52,6 +51,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.modules.utils.build.SdkLevel;
import com.android.permissioncontroller.R;
+import com.android.permissioncontroller.safetycenter.ui.expressive.SafetyBannerMessagePreference;
+import com.android.permissioncontroller.safetycenter.ui.model.IssueUiData;
import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData;
import com.android.permissioncontroller.safetycenter.ui.model.StatusUiData;
import com.android.safetycenter.internaldata.SafetyCenterBundles;
@@ -61,7 +62,6 @@ import com.android.settingslib.widget.SettingsThemeHelper;
import kotlin.Unit;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
/** Dashboard fragment for the Safety Center. */
@@ -214,7 +214,7 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment {
// TODO(b/208212820): Only update entries that have changed since last
// update, rather than deleting and re-adding all.
- updateIssues(context, data.getIssues(), uiData.getResolvedIssues());
+ updateIssues(context, uiData);
if (!mIsQuickSettingsFragment) {
updateSafetyEntries(context, data.getEntriesOrGroups());
@@ -222,19 +222,29 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment {
}
}
- private void updateIssues(
- Context context, List<SafetyCenterIssue> issues, Map<String, String> resolvedIssues) {
+ private void updateIssues(Context context, SafetyCenterUiData uiData) {
mIssuesGroup.removeAll();
- getCollapsableIssuesCardHelper()
- .addIssues(
- context,
- getSafetyCenterViewModel(),
- getChildFragmentManager(),
- mIssuesGroup,
- issues,
- emptyList(),
- resolvedIssues,
- getActivity().getTaskId());
+ if (SettingsThemeHelper.isExpressiveTheme(context)) {
+ for (IssueUiData issueUiData : uiData.getIssueUiDatas()) {
+ mIssuesGroup.addPreference(
+ new SafetyBannerMessagePreference(
+ context,
+ issueUiData,
+ getSafetyCenterViewModel(),
+ getChildFragmentManager()));
+ }
+ } else {
+ getCollapsableIssuesCardHelper()
+ .addIssues(
+ context,
+ getSafetyCenterViewModel(),
+ getChildFragmentManager(),
+ mIssuesGroup,
+ uiData.getSafetyCenterData().getIssues(),
+ emptyList(),
+ uiData.getResolvedIssues(),
+ requireActivity().getTaskId());
+ }
}
// TODO(b/208212820): Add groups and move to separate controller
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt
index b5a66da06..d29b0aa3e 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt
@@ -61,7 +61,6 @@ abstract class SafetyCenterFragment : SettingsBasePreferenceFragment() {
} else {
super.onCreateAdapter(preferenceScreen)
}
-
/* By default, the PreferenceGroupAdapter does setHasStableIds(true). Since each Preference
* is internally allocated with an auto-incremented ID, it does not allow us to gracefully
* update only changed preferences based on SafetyPreferenceComparisonCallback. In order to
@@ -77,10 +76,15 @@ abstract class SafetyCenterFragment : SettingsBasePreferenceFragment() {
.split(",")
safetyCenterSessionId = requireArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID)
+ val activity = requireActivity()
safetyCenterViewModel =
ViewModelProvider(
- requireActivity(),
- LiveSafetyCenterViewModelFactory(requireActivity().getApplication()),
+ activity,
+ LiveSafetyCenterViewModelFactory(
+ activity.application,
+ activity.taskId,
+ sameTaskSourceIds,
+ ),
)
.get(SafetyCenterViewModel::class.java)
safetyCenterViewModel.safetyCenterUiLiveData.observe(this) { uiData: SafetyCenterUiData? ->
@@ -91,8 +95,7 @@ abstract class SafetyCenterFragment : SettingsBasePreferenceFragment() {
displayErrorDetails(errorDetails)
}
- val safetyCenterIntent: ParsedSafetyCenterIntent =
- requireActivity().intent.toSafetyCenterIntent()
+ val safetyCenterIntent: ParsedSafetyCenterIntent = activity.intent.toSafetyCenterIntent()
val isQsFragment =
getArguments()?.getBoolean(QUICK_SETTINGS_SAFETY_CENTER_FRAGMENT, false) ?: false
collapsableIssuesCardHelper =
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
index 01d23241f..44d055d5e 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
@@ -34,6 +34,24 @@ object SafetyCenterTouchTarget {
*/
@JvmStatic
fun configureSize(view: View, @DimenRes minTouchTargetSizeResource: Int) {
+ configureSize(view, minTouchTargetSizeResource, useWidthHeightFix = false)
+ }
+
+ @JvmStatic
+ fun configureSize(
+ view: View,
+ @DimenRes minTouchTargetSizeResource: Int,
+ useWidthHeightFix: Boolean,
+ ) {
+ // TODO: b/399872661 - Look into fixing all call sites and remove this boolean.
+ if (useWidthHeightFix) {
+ configureSizeUsingBothWidthAndHeight(view, minTouchTargetSizeResource)
+ } else {
+ configureSizeUsingWidthOnly(view, minTouchTargetSizeResource)
+ }
+ }
+
+ private fun configureSizeUsingWidthOnly(view: View, @DimenRes minTouchTargetSizeResource: Int) {
val parent = view.parent as View
val res = view.context.resources
val minTouchTargetSize = res.getDimensionPixelSize(minTouchTargetSizeResource)
@@ -53,4 +71,37 @@ object SafetyCenterTouchTarget {
}
}
}
+
+ private fun configureSizeUsingBothWidthAndHeight(
+ view: View,
+ @DimenRes minTouchTargetSizeResource: Int,
+ ) {
+ val parent = view.parent as View
+ val res = view.context.resources
+ val minTouchTargetSize = res.getDimensionPixelSize(minTouchTargetSizeResource)
+
+ // Defer getHitRect so that it's called after the parent's children are laid out.
+ parent.post {
+ val hitRect = Rect()
+ view.getHitRect(hitRect)
+ val currentTouchTargetWidth = hitRect.width()
+ val adjustWidthInsetBy =
+ if (currentTouchTargetWidth < minTouchTargetSize) {
+ (minTouchTargetSize - currentTouchTargetWidth) / 2
+ } else {
+ 0
+ }
+ val currentTouchTargetHeight = hitRect.height()
+ val adjustHeightInsetBy =
+ if (currentTouchTargetHeight < minTouchTargetSize) {
+ (minTouchTargetSize - currentTouchTargetHeight) / 2
+ } else {
+ 0
+ }
+ if (adjustWidthInsetBy != 0 || adjustHeightInsetBy != 0) {
+ hitRect.inset(-adjustWidthInsetBy, -adjustHeightInsetBy)
+ parent.touchDelegate = TouchDelegate(hitRect, view)
+ }
+ }
+ }
}
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/expressive/SafetyBannerMessagePreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/expressive/SafetyBannerMessagePreference.kt
new file mode 100644
index 000000000..0f2239c60
--- /dev/null
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/expressive/SafetyBannerMessagePreference.kt
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2025 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.permissioncontroller.safetycenter.ui.expressive
+
+import android.content.Context
+import android.os.Build
+import android.safetycenter.SafetyCenterIssue
+import android.util.Log
+import android.view.View
+import android.widget.LinearLayout
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.FragmentManager
+import androidx.preference.Preference
+import androidx.preference.PreferenceViewHolder
+import com.android.modules.utils.build.SdkLevel
+import com.android.permissioncontroller.R
+import com.android.permissioncontroller.safetycenter.ui.Action
+import com.android.permissioncontroller.safetycenter.ui.ComparablePreference
+import com.android.permissioncontroller.safetycenter.ui.IssueCardPreference.ConfirmActionDialogFragment
+import com.android.permissioncontroller.safetycenter.ui.IssueCardPreference.ConfirmDismissalDialogFragment
+import com.android.permissioncontroller.safetycenter.ui.model.IssueUiData
+import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterViewModel
+import com.android.settingslib.widget.BannerMessagePreference
+
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+class SafetyBannerMessagePreference(
+ context: Context,
+ private val issueUiData: IssueUiData,
+ private val viewModel: SafetyCenterViewModel,
+ private val dialogFragmentManager: FragmentManager,
+) : BannerMessagePreference(context), ComparablePreference {
+
+ init {
+ setButtonOrientation(LinearLayout.VERTICAL)
+ displayIssue()
+ }
+
+ override fun onBindViewHolder(holder: PreferenceViewHolder) {
+ super.onBindViewHolder(holder)
+
+ viewModel.interactionLogger.recordIssueViewed(issueUiData.issue, issueUiData.isDismissed)
+ }
+
+ private fun displayIssue() {
+ setAttentionLevel(issueUiData.issue.severityLevel.toAttentionLevel())
+
+ title = issueUiData.issue.title
+ summary = issueUiData.issue.summary
+ setHeader(issueUiData.issue.attributionTitle)
+ setSubtitle(issueUiData.issue.subtitle)
+ // Note: BannerMessagePreference i think always shows an icon (even if it's set to null),
+ // which is not in the spec
+
+ configureDismissButton()
+ configureActionButtons()
+ maybeStartResolution()
+ }
+
+ private fun configureDismissButton() {
+ if (issueUiData.issue.isDismissible && !issueUiData.isDismissed) {
+ setDismissButtonVisible(true)
+ setDismissButtonOnClickListener {
+ if (issueUiData.issue.shouldConfirmDismissal()) {
+ ConfirmDismissalDialogFragment.newInstance(issueUiData.issue)
+ .showNow(dialogFragmentManager, /* tag= */ null)
+ } else {
+ viewModel.dismissIssue(issueUiData.issue)
+ viewModel.interactionLogger.recordForIssue(
+ Action.ISSUE_DISMISS_CLICKED,
+ issueUiData.issue,
+ isDismissed = false,
+ )
+ }
+ }
+ } else {
+ setDismissButtonVisible(false)
+ setDismissButtonOnClickListener(null)
+ }
+ }
+
+ private fun configureActionButtons() {
+ val primaryAction = issueUiData.issue.actions.getOrNull(0)
+ if (primaryAction != null) {
+ setPositiveButtonText(primaryAction.label)
+ setPositiveButtonEnabled(issueUiData.resolvedIssueActionId != primaryAction.id)
+ setPositiveButtonVisible(true)
+ setPositiveButtonOnClickListener(
+ ActionButtonOnClickListener(primaryAction, isPrimaryButton = true)
+ )
+ } else {
+ setPositiveButtonVisible(false)
+ setPositiveButtonOnClickListener(null)
+ }
+
+ val secondaryAction = issueUiData.issue.actions.getOrNull(1)
+ if (secondaryAction != null) {
+ setNegativeButtonText(secondaryAction.label)
+ setNegativeButtonEnabled(issueUiData.resolvedIssueActionId != secondaryAction.id)
+ setNegativeButtonVisible(true)
+ setNegativeButtonOnClickListener(
+ ActionButtonOnClickListener(secondaryAction, isPrimaryButton = false)
+ )
+ } else {
+ setNegativeButtonVisible(false)
+ setNegativeButtonOnClickListener(null)
+ }
+ }
+
+ private inner class ActionButtonOnClickListener(
+ private val action: SafetyCenterIssue.Action,
+ private val isPrimaryButton: Boolean,
+ ) : View.OnClickListener {
+ override fun onClick(v: View?) {
+ if (SdkLevel.isAtLeastU() && action.confirmationDialogDetails != null) {
+ ConfirmActionDialogFragment.newInstance(
+ issueUiData.issue,
+ action,
+ issueUiData.launchTaskId,
+ isPrimaryButton,
+ issueUiData.isDismissed,
+ )
+ .showNow(dialogFragmentManager, /* tag= */ null)
+ } else {
+ if (action.willResolve()) {
+ setPositiveButtonEnabled(false)
+ }
+ viewModel.executeIssueAction(issueUiData.issue, action, issueUiData.launchTaskId)
+ viewModel.interactionLogger.recordForIssue(
+ if (isPrimaryButton) {
+ Action.ISSUE_PRIMARY_ACTION_CLICKED
+ } else {
+ Action.ISSUE_SECONDARY_ACTION_CLICKED
+ },
+ issueUiData.issue,
+ issueUiData.isDismissed,
+ )
+ }
+ }
+ }
+
+ private fun maybeStartResolution() {
+ val resolvedActionId = issueUiData.resolvedIssueActionId ?: return
+
+ val action = issueUiData.issue.actions.firstOrNull { it.id == resolvedActionId } ?: return
+ val successMessage =
+ action.successMessage?.ifEmpty { null }
+ ?: context.getString(R.string.safety_center_resolved_issue_fallback)
+
+ showResolutionAnimation(successMessage) {
+ viewModel.markIssueResolvedUiCompleted(issueUiData.issue.id)
+ }
+ }
+
+ private fun Int.toAttentionLevel(): AttentionLevel {
+ return when (this) {
+ SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_OK -> AttentionLevel.LOW
+ SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_RECOMMENDATION -> AttentionLevel.MEDIUM
+ SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING -> AttentionLevel.HIGH
+ else -> {
+ Log.w(TAG, "Unexpected issue severity level $this")
+ AttentionLevel.LOW
+ }
+ }
+ }
+
+ private companion object {
+ const val TAG = "SafetyBannerMessagePref"
+ }
+
+ override fun isSameItem(preference: Preference): Boolean =
+ preference is SafetyBannerMessagePreference &&
+ preference.issueUiData.issue.id == issueUiData.issue.id
+
+ override fun hasSameContents(preference: Preference): Boolean =
+ preference is SafetyBannerMessagePreference && preference.issueUiData == issueUiData
+}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/IssueUiData.kt
index b724ba43f..e260bb917 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/IssueUiData.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,5 +14,14 @@
* limitations under the License.
*/
-@androidx.annotation.RequiresApi(android.os.Build.VERSION_CODES.S)
-package com.android.permissioncontroller.permission.model.livedatatypes.v31;
+package com.android.permissioncontroller.safetycenter.ui.model
+
+import android.safetycenter.SafetyCenterIssue
+
+/** UI model representation of [SafetyCenterIssue] */
+data class IssueUiData(
+ val issue: SafetyCenterIssue,
+ val isDismissed: Boolean,
+ val resolvedIssueActionId: String? = null,
+ val launchTaskId: Int? = null,
+)
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt
index 4ddcf1c3d..0b976f49d 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt
@@ -43,11 +43,16 @@ import com.android.safetycenter.internaldata.SafetyCenterIds
/* A SafetyCenterViewModel that talks to the real backing service for Safety Center. */
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
-class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
+class LiveSafetyCenterViewModel(
+ app: Application,
+ private val taskId: Int,
+ private val sameTaskSourceIds: List<String>,
+) : SafetyCenterViewModel(app) {
private val TAG: String = LiveSafetyCenterViewModel::class.java.simpleName
override val statusUiLiveData: LiveData<StatusUiData>
get() = safetyCenterUiLiveData.map { StatusUiData(it.safetyCenterData) }
+
override val safetyCenterUiLiveData: LiveData<SafetyCenterUiData> by this::_safetyCenterLiveData
override val errorLiveData: LiveData<SafetyCenterErrorDetails> by this::_errorLiveData
@@ -65,7 +70,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
private val safetyCenterManager = app.getSystemService(SafetyCenterManager::class.java)!!
override fun getCurrentSafetyCenterDataAsUiData(): SafetyCenterUiData =
- SafetyCenterUiData(safetyCenterManager.safetyCenterData)
+ uiData(safetyCenterManager.safetyCenterData)
override fun dismissIssue(issue: SafetyCenterIssue) {
safetyCenterManager.dismissSafetyCenterIssue(issue.id)
@@ -74,7 +79,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
override fun executeIssueAction(
issue: SafetyCenterIssue,
action: SafetyCenterIssue.Action,
- launchTaskId: Int?
+ launchTaskId: Int?,
) {
val issueId =
if (launchTaskId != null) {
@@ -107,9 +112,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
override fun navigateToSafetyCenter(context: Context, navigationSource: NavigationSource?) {
val intent = Intent(ACTION_SAFETY_CENTER)
- if (navigationSource != null) {
- navigationSource.addToIntent(intent)
- }
+ navigationSource?.addToIntent(intent)
context.startActivity(intent)
}
@@ -132,7 +135,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
} else {
safetyCenterManager.refreshSafetySources(
SafetyCenterManager.REFRESH_REASON_PAGE_OPEN,
- safetySourceIds
+ safetySourceIds,
)
}
}
@@ -174,7 +177,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
override fun onActive() {
safetyCenterManager.addOnSafetyCenterDataChangedListener(
getMainExecutor(app.applicationContext),
- this
+ this,
)
super.onActive()
}
@@ -209,7 +212,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
Log.d(
TAG,
"Received SafetyCenterData while issue resolution animations" +
- " occurring. Will update UI with new data soon."
+ " occurring. Will update UI with new data soon.",
)
return
}
@@ -254,7 +257,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
private fun isCurrentlyScanning(): Boolean = value?.safetyCenterData?.isScanning() ?: false
private fun sendNextData() {
- value = SafetyCenterUiData(safetyCenterDataQueue.removeFirst())
+ value = uiData(safetyCenterDataQueue.removeFirst())
}
private fun skipNextData() = safetyCenterDataQueue.removeFirst()
@@ -270,7 +273,7 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
// The current SafetyCenterData still contains the resolved SafetyCenterIssue objects.
// Send it with the resolved IDs so the UI can generate the correct preferences and
// trigger the right animations for issue resolution.
- value = SafetyCenterUiData(currentData, currentResolvedIssues)
+ value = uiData(currentData, currentResolvedIssues)
}
@MainThread
@@ -279,6 +282,11 @@ class LiveSafetyCenterViewModel(app: Application) : SafetyCenterViewModel(app) {
maybeProcessDataToNextResolvedIssues()
}
}
+
+ private fun uiData(
+ safetyCenterData: SafetyCenterData,
+ resolvedIssues: Map<IssueId, ActionId> = emptyMap(),
+ ) = SafetyCenterUiData(safetyCenterData, taskId, sameTaskSourceIds, resolvedIssues)
}
/** Returns inflight issues pending resolution */
@@ -309,8 +317,15 @@ private val SafetyCenterData.allResolvableIssues: Sequence<SafetyCenterIssue>
}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
-class LiveSafetyCenterViewModelFactory(private val app: Application) : ViewModelProvider.Factory {
+class LiveSafetyCenterViewModelFactory
+@JvmOverloads
+constructor(
+ private val app: Application,
+ private val taskId: Int = 0,
+ private val sameTaskSourceIds: List<String> = emptyList(),
+) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
- @Suppress("UNCHECKED_CAST") return LiveSafetyCenterViewModel(app) as T
+ @Suppress("UNCHECKED_CAST")
+ return LiveSafetyCenterViewModel(app, taskId, sameTaskSourceIds) as T
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt
index 69a315f08..1595b5812 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt
@@ -29,11 +29,19 @@ import com.android.safetycenter.internaldata.SafetyCenterIds
import com.android.safetycenter.internaldata.SafetyCenterIssueKey
/** UI model representation of Safety Center Data */
+@RequiresApi(TIRAMISU)
data class SafetyCenterUiData(
val safetyCenterData: SafetyCenterData,
- val resolvedIssues: Map<IssueId, ActionId> = emptyMap()
+ private val taskId: Int,
+ private val sameTaskSourceIds: List<String>,
+ val resolvedIssues: Map<IssueId, ActionId> = emptyMap(),
) {
- @RequiresApi(TIRAMISU)
+
+ val issueUiDatas: List<IssueUiData> by
+ lazy(LazyThreadSafetyMode.NONE) {
+ safetyCenterData.issues.map { toIssueUiData(it, isDismissed = false) }
+ }
+
fun getMatchingIssue(issueKey: SafetyCenterIssueKey): SafetyCenterIssue? {
return safetyCenterData.issues.find {
SafetyCenterIds.issueIdFromString(it.id).safetyCenterIssueKey == issueKey
@@ -67,7 +75,7 @@ data class SafetyCenterUiData(
@RequiresApi(UPSIDE_DOWN_CAKE)
private fun selectMatchingIssuesForGroup(
groupId: String,
- issues: List<SafetyCenterIssue>
+ issues: List<SafetyCenterIssue>,
): List<SafetyCenterIssue> {
val issuesToGroups = safetyCenterData.extras.getBundle(ISSUES_TO_GROUPS_BUNDLE_KEY)
return issues.filter {
@@ -82,6 +90,18 @@ data class SafetyCenterUiData(
/** Returns the [SafetyCenterData.getDismissedIssues] that are meant to be visible in the UI. */
@RequiresApi(UPSIDE_DOWN_CAKE)
- fun SafetyCenterData.visibleDismissedIssues() =
+ private fun SafetyCenterData.visibleDismissedIssues() =
dismissedIssues.filter { it.severityLevel > ISSUE_SEVERITY_LEVEL_OK }
+
+ /** Converts a [SafetyCenterIssue] into [IssueUiData]. */
+ private fun toIssueUiData(issue: SafetyCenterIssue, isDismissed: Boolean) =
+ IssueUiData(issue, isDismissed, resolvedIssues[issue.id], getLaunchTaskIdForIssue(issue))
+
+ private fun getLaunchTaskIdForIssue(issue: SafetyCenterIssue): Int? {
+ val sourceId: String =
+ SafetyCenterIds.issueIdFromString(issue.id)
+ .getSafetyCenterIssueKey()
+ .getSafetySourceId()
+ return if (sameTaskSourceIds.contains(sourceId)) taskId else null
+ }
}
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/ArrayUtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/ArrayUtilsTest.kt
index c7b9ad823..6590a4516 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/ArrayUtilsTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/ArrayUtilsTest.kt
@@ -14,10 +14,9 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.permission.util
+package com.android.permissioncontroller.permission.utils
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
-import com.android.permissioncontroller.permission.utils.ArrayUtils
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/CollectionUtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/CollectionUtilsTest.kt
index 627d19474..771f4ab6e 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/CollectionUtilsTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/CollectionUtilsTest.kt
@@ -14,10 +14,9 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.permission.util
+package com.android.permissioncontroller.permission.utils
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
-import com.android.permissioncontroller.permission.utils.CollectionUtils
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/KotlinUtilsTest.kt
index 34c351683..2c8eefcd3 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/KotlinUtilsTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.permission.util
+package com.android.permissioncontroller.permission.utils
import android.Manifest.permission.READ_MEDIA_IMAGES
import android.Manifest.permission.READ_MEDIA_VIDEO
@@ -33,7 +33,6 @@ import android.graphics.drawable.Drawable
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
-import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertFailsWith
import org.junit.Rule
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/PermissionMappingTest.kt
index 29b4e1c4e..cf349b8d4 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/PermissionMappingTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.permission.util
+package com.android.permissioncontroller.permission.utils
import android.Manifest
import android.app.AppOpsManager
@@ -28,8 +28,6 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
-import com.android.permissioncontroller.permission.utils.PermissionMapping
-import com.android.permissioncontroller.permission.utils.Utils;
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/UtilsTest.kt
index 1cfe6a5d3..8cc6b952c 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/UtilsTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.permissioncontroller.permission.util
+package com.android.permissioncontroller.permission.utils
import android.Manifest.permission.BODY_SENSORS
import android.Manifest.permission.BODY_SENSORS_BACKGROUND
@@ -52,7 +52,6 @@ import androidx.test.platform.app.InstrumentationRegistry
import com.android.permissioncontroller.Constants.EXTRA_SESSION_ID
import com.android.permissioncontroller.Constants.INVALID_SESSION_ID
import com.android.permissioncontroller.R
-import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.privacysources.WorkPolicyInfo
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertFailsWith
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtilsTest.kt
new file mode 100644
index 000000000..b1ac6095d
--- /dev/null
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/utils/v31/AdminRestrictedPermissionsUtilsTest.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2025 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.permissioncontroller.permission.utils.v31
+
+import android.app.admin.DevicePolicyManager
+import android.content.Context
+import android.health.connect.HealthConnectManager
+import android.health.connect.HealthPermissions
+import android.os.Build
+import android.permission.flags.Flags
+import android.platform.test.annotations.RequiresFlagsEnabled
+import android.platform.test.flag.junit.CheckFlagsRule
+import android.platform.test.flag.junit.DeviceFlagsValueProvider
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+
+@RunWith(AndroidJUnit4::class)
+class AdminRestrictedPermissionsUtilsTest {
+
+ @JvmField @Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+
+ private val context: Context = ApplicationProvider.getApplicationContext()
+ private val dpm: DevicePolicyManager = mock(DevicePolicyManager::class.java)
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA)
+ @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
+ @Test
+ fun mayAdminGrantPermission_healthPermissions_restricted() {
+ val permissions: Set<String> = HealthConnectManager.getHealthPermissions(context)
+ for (permission in permissions) {
+ val canGrant =
+ AdminRestrictedPermissionsUtils.mayAdminGrantPermission(
+ permission,
+ HealthPermissions.HEALTH_PERMISSION_GROUP,
+ /* canAdminGrantSensorsPermissions= */ false,
+ /* isManagedProfile= */ false,
+ dpm,
+ )
+ assertEquals(false, canGrant)
+ }
+ }
+}
diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/utils/AdminRestrictedPermissionsUtilsTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/utils/AdminRestrictedPermissionsUtilsTest.kt
index 0c864da4a..35543b6f1 100644
--- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/utils/AdminRestrictedPermissionsUtilsTest.kt
+++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/utils/AdminRestrictedPermissionsUtilsTest.kt
@@ -17,75 +17,126 @@
package com.android.permissioncontroller.tests.mocking.permission.utils
import android.app.admin.DevicePolicyManager
+import android.content.Context
+import android.health.connect.HealthPermissions
+import android.os.Build
+import android.permission.flags.Flags
import android.platform.test.annotations.AsbSecurityTest
+import android.platform.test.annotations.RequiresFlagsEnabled
+import android.platform.test.flag.junit.DeviceFlagsValueProvider
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
import com.android.modules.utils.build.SdkLevel
import com.android.permissioncontroller.permission.utils.v31.AdminRestrictedPermissionsUtils
import org.junit.Assert.assertEquals
import org.junit.Assume
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
+import org.junit.experimental.runners.Enclosed
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import org.mockito.Mockito.mock
-@RunWith(Parameterized::class)
-class AdminRestrictedPermissionsUtilsTest(
- private val permission: String,
- private val group: String?,
- private val canAdminGrantSensorsPermissions: Boolean,
- private val expected: Boolean
-) {
+@RunWith(Enclosed::class)
+object AdminRestrictedPermissionsUtilsTest {
+
+ @get:Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+
+ private val context: Context = ApplicationProvider.getApplicationContext()
private val dpm: DevicePolicyManager = mock(DevicePolicyManager::class.java)
- @Before
- fun setup() {
- Assume.assumeTrue(SdkLevel.isAtLeastS())
- }
+ @RunWith(Parameterized::class)
+ class AdminRestrictedPermissionsUtilsParameterizedTest(
+ private val permission: String,
+ private val group: String?,
+ private val canAdminGrantSensorsPermissions: Boolean,
+ private val expected: Boolean,
+ ) {
- @AsbSecurityTest(cveBugId = [308138085])
- @Test
- fun mayAdminGrantPermissionTest() {
- val canGrant =
- AdminRestrictedPermissionsUtils.mayAdminGrantPermission(
- permission,
- group,
- canAdminGrantSensorsPermissions,
- false,
- dpm
- )
- assertEquals(expected, canGrant)
- }
+ @Before
+ fun setup() {
+ Assume.assumeTrue(SdkLevel.isAtLeastS())
+ }
- companion object {
- /**
- * Returns a list of arrays containing the following values:
- *
- * 0. Permission name (String)
- * 1. Permission group name (String)
- * 2. Can admin grant sensors permissions (Boolean)
- * 3. Expected return from mayAdminGrantPermission method (Boolean)
- */
- @JvmStatic
- @Parameterized.Parameters(name = "{index}: validate({0}, {1}, {3}) = {4}")
- fun getParameters(): List<Array<out Any?>> {
- return listOf(
- arrayOf("abc", "xyz", false, true),
- arrayOf("abc", null, false, true),
- arrayOf("android.permission.RECORD_AUDIO", "xyz", false, false),
- arrayOf("abc", "android.permission-group.MICROPHONE", false, false),
- arrayOf(
- "android.permission.RECORD_AUDIO",
- "android.permission-group.MICROPHONE",
+ @AsbSecurityTest(cveBugId = [308138085])
+ @Test
+ fun mayAdminGrantPermissionTest() {
+ val canGrant =
+ AdminRestrictedPermissionsUtils.mayAdminGrantPermission(
+ permission,
+ group,
+ canAdminGrantSensorsPermissions,
false,
- false
- ),
- arrayOf(
- "android.permission.RECORD_AUDIO",
- "android.permission-group.MICROPHONE",
- true,
- true
- ),
+ dpm,
+ )
+ assertEquals(expected, canGrant)
+ }
+
+ companion object {
+ /**
+ * Returns a list of arrays containing the following values:
+ * 0. Permission name (String)
+ * 1. Permission group name (String)
+ * 2. Can admin grant sensors permissions (Boolean)
+ * 3. Expected return from mayAdminGrantPermission method (Boolean)
+ */
+ @JvmStatic
+ @Parameterized.Parameters(name = "{index}: validate({0}, {1}, {3}) = {4}")
+ fun getParameters(): List<Array<out Any?>> {
+ return listOf(
+ arrayOf("abc", "xyz", false, true),
+ arrayOf("abc", null, false, true),
+ arrayOf("android.permission.RECORD_AUDIO", "xyz", false, false),
+ arrayOf("abc", "android.permission-group.MICROPHONE", false, false),
+ arrayOf(
+ "android.permission.RECORD_AUDIO",
+ "android.permission-group.MICROPHONE",
+ false,
+ false,
+ ),
+ arrayOf(
+ "android.permission.RECORD_AUDIO",
+ "android.permission-group.MICROPHONE",
+ true,
+ true,
+ ),
+ )
+ }
+ }
+ }
+
+ @RunWith(AndroidJUnit4::class)
+ class AdminRestrictedPermissionsUtilsSingleTest {
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA)
+ @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
+ fun addAdminRestrictedPermission_addsPermissionToRestrictedList() {
+ var canGrant =
+ AdminRestrictedPermissionsUtils.mayAdminGrantPermission(
+ HealthPermissions.READ_HEART_RATE,
+ HealthPermissions.HEALTH_PERMISSION_GROUP,
+ /* canAdminGrantSensorsPermissions= */ false,
+ /* isManagedProfile= */ false,
+ dpm,
+ )
+ assertEquals(true, canGrant)
+
+ AdminRestrictedPermissionsUtils.addAdminRestrictedPermission(
+ HealthPermissions.READ_HEART_RATE
)
+
+ canGrant =
+ AdminRestrictedPermissionsUtils.mayAdminGrantPermission(
+ HealthPermissions.READ_HEART_RATE,
+ HealthPermissions.HEALTH_PERMISSION_GROUP,
+ /* canAdminGrantSensorsPermissions= */ false,
+ /* isManagedProfile= */ false,
+ dpm,
+ )
+ assertEquals(false, canGrant)
}
}
}
diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetycenter/ui/model/SafetyCenterUiDataTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetycenter/ui/model/SafetyCenterUiDataTest.kt
index ca0392716..e53fabc90 100644
--- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetycenter/ui/model/SafetyCenterUiDataTest.kt
+++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetycenter/ui/model/SafetyCenterUiDataTest.kt
@@ -18,6 +18,7 @@ package com.android.permissioncontroller.tests.mocking.safetycenter.ui.model
import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE
import android.os.Bundle
+import android.os.UserHandle
import android.safetycenter.SafetyCenterData
import android.safetycenter.SafetyCenterEntryGroup
import android.safetycenter.SafetyCenterEntryOrGroup
@@ -28,8 +29,14 @@ import android.safetycenter.SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_RECOMMENDATIO
import android.safetycenter.SafetyCenterStatus
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
+import com.android.permissioncontroller.safetycenter.ui.model.ActionId
+import com.android.permissioncontroller.safetycenter.ui.model.IssueId
+import com.android.permissioncontroller.safetycenter.ui.model.IssueUiData
import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData
import com.android.safetycenter.internaldata.SafetyCenterBundles.ISSUES_TO_GROUPS_BUNDLE_KEY
+import com.android.safetycenter.internaldata.SafetyCenterIds
+import com.android.safetycenter.internaldata.SafetyCenterIssueId
+import com.android.safetycenter.internaldata.SafetyCenterIssueKey
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -40,42 +47,42 @@ class SafetyCenterUiDataTest {
@Test
fun getMatchingGroup_validMatchingGroup_returnsExpectedEntryGroup() {
- val matchingGroup = createSafetyCenterEntryGroup(MATCHING_GROUP_ID)
- val nonMatchingGroup = createSafetyCenterEntryGroup(NON_MATCHING_GROUP_ID)
+ val matchingGroup = entryGroup(MATCHING_GROUP_ID)
+ val nonMatchingGroup = entryGroup(NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(entryGroups = listOf(matchingGroup, nonMatchingGroup))
- val result = SafetyCenterUiData(safetyCenterData).getMatchingGroup(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingGroup(MATCHING_GROUP_ID)
assertThat(result).isEqualTo(matchingGroup)
}
@Test
fun getMatchingGroup_noMatchingGroup_returnsNull() {
- val nonMatchingGroup = createSafetyCenterEntryGroup(NON_MATCHING_GROUP_ID)
+ val nonMatchingGroup = entryGroup(NON_MATCHING_GROUP_ID)
val safetyCenterData = createSafetyCenterData(entryGroups = listOf(nonMatchingGroup))
- val result = SafetyCenterUiData(safetyCenterData).getMatchingGroup(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingGroup(MATCHING_GROUP_ID)
assertThat(result).isNull()
}
@Test
fun getMatchingIssues_defaultMatchingIssue_noExtras_returnsListOfIssues() {
- val defaultMatchingIssue = createSafetyCenterIssue("id1", MATCHING_GROUP_ID)
- val nonMatchingIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val defaultMatchingIssue = issue("id1", MATCHING_GROUP_ID)
+ val nonMatchingIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(issues = listOf(defaultMatchingIssue, nonMatchingIssue))
- val result = SafetyCenterUiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(defaultMatchingIssue)
}
@Test
fun getMatchingIssues_defaultMatchingIssue_unrelatedExtras_returnsListOfIssues() {
- val defaultMatchingIssue = createSafetyCenterIssue("id1", MATCHING_GROUP_ID)
- val nonMatchingIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val defaultMatchingIssue = issue("id1", MATCHING_GROUP_ID)
+ val nonMatchingIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
issues = listOf(defaultMatchingIssue, nonMatchingIssue),
@@ -84,21 +91,21 @@ class SafetyCenterUiDataTest {
Bundle().apply {
putStringArrayList(
nonMatchingIssue.id,
- arrayListOf(NON_MATCHING_GROUP_ID)
+ arrayListOf(NON_MATCHING_GROUP_ID),
)
}
- )
+ ),
)
- val result = SafetyCenterUiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(defaultMatchingIssue)
}
@Test
fun getMatchingIssues_mappingMatchingIssue_returnsListOfIssues() {
- val mappingMatchingIssue = createSafetyCenterIssue("id1", NON_MATCHING_GROUP_ID)
- val nonMatchingIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val mappingMatchingIssue = issue("id1", NON_MATCHING_GROUP_ID)
+ val nonMatchingIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
issues = listOf(mappingMatchingIssue, nonMatchingIssue),
@@ -107,51 +114,50 @@ class SafetyCenterUiDataTest {
Bundle().apply {
putStringArrayList(
mappingMatchingIssue.id,
- arrayListOf(MATCHING_GROUP_ID)
+ arrayListOf(MATCHING_GROUP_ID),
)
}
- )
+ ),
)
- val result = SafetyCenterUiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(mappingMatchingIssue)
}
@Test
fun getMatchingIssues_noDefaultMatchingIssue_returnsEmptyList() {
- val nonMatchingIssue = createSafetyCenterIssue("id1", NON_MATCHING_GROUP_ID)
- val dismissedIssue = createSafetyCenterIssue("id2", MATCHING_GROUP_ID)
+ val nonMatchingIssue = issue("id1", NON_MATCHING_GROUP_ID)
+ val dismissedIssue = issue("id2", MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
issues = listOf(nonMatchingIssue),
- dismissedIssues = listOf(dismissedIssue)
+ dismissedIssues = listOf(dismissedIssue),
)
- val result = SafetyCenterUiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingIssues(MATCHING_GROUP_ID)
assertThat(result).isEmpty()
}
@Test
fun getMatchingDismissedIssues_defaultMatchingDismissedIssue_returnsListOfDismissedIssues() {
- val defaultMatchingDismissedIssue = createSafetyCenterIssue("id1", MATCHING_GROUP_ID)
- val nonMatchingDismissedIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val defaultMatchingDismissedIssue = issue("id1", MATCHING_GROUP_ID)
+ val nonMatchingDismissedIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
dismissedIssues = listOf(defaultMatchingDismissedIssue, nonMatchingDismissedIssue)
)
- val result =
- SafetyCenterUiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(defaultMatchingDismissedIssue)
}
@Test
fun getMatchingDismissedIssues_defaultMatchingDismissedIssue2_returnsListOfDismissedIssues() {
- val defaultMatchingDismissedIssue = createSafetyCenterIssue("id1", MATCHING_GROUP_ID)
- val nonMatchingDismissedIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val defaultMatchingDismissedIssue = issue("id1", MATCHING_GROUP_ID)
+ val nonMatchingDismissedIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
dismissedIssues = listOf(defaultMatchingDismissedIssue, nonMatchingDismissedIssue),
@@ -160,22 +166,21 @@ class SafetyCenterUiDataTest {
Bundle().apply {
putStringArrayList(
nonMatchingDismissedIssue.id,
- arrayListOf(NON_MATCHING_GROUP_ID)
+ arrayListOf(NON_MATCHING_GROUP_ID),
)
}
- )
+ ),
)
- val result =
- SafetyCenterUiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(defaultMatchingDismissedIssue)
}
@Test
fun getMatchingDismissedIssues_mappingMatchingDismissedIssue_returnsListOfDismissedIssues() {
- val mappingMatchingDismissedIssue = createSafetyCenterIssue("id1", NON_MATCHING_GROUP_ID)
- val nonMatchingDismissedIssue = createSafetyCenterIssue("id2", NON_MATCHING_GROUP_ID)
+ val mappingMatchingDismissedIssue = issue("id1", NON_MATCHING_GROUP_ID)
+ val nonMatchingDismissedIssue = issue("id2", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
dismissedIssues = listOf(mappingMatchingDismissedIssue, nonMatchingDismissedIssue),
@@ -184,30 +189,28 @@ class SafetyCenterUiDataTest {
Bundle().apply {
putStringArrayList(
mappingMatchingDismissedIssue.id,
- arrayListOf(MATCHING_GROUP_ID)
+ arrayListOf(MATCHING_GROUP_ID),
)
}
- )
+ ),
)
- val result =
- SafetyCenterUiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(mappingMatchingDismissedIssue)
}
@Test
fun getMatchingDismissedIssues_noDefaultMatchingDismissedIssue_returnsEmptyList() {
- val nonMatchingDismissedIssue = createSafetyCenterIssue("id1", NON_MATCHING_GROUP_ID)
- val nonDismissedIssue = createSafetyCenterIssue("id2", MATCHING_GROUP_ID)
+ val nonMatchingDismissedIssue = issue("id1", NON_MATCHING_GROUP_ID)
+ val nonDismissedIssue = issue("id2", MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
issues = listOf(nonDismissedIssue),
- dismissedIssues = listOf(nonMatchingDismissedIssue)
+ dismissedIssues = listOf(nonMatchingDismissedIssue),
)
- val result =
- SafetyCenterUiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
assertThat(result).isEmpty()
}
@@ -215,24 +218,12 @@ class SafetyCenterUiDataTest {
@Test
fun getMatchingDismissedIssues_doesntReturnGreenIssues() {
val greenDismissedIssue =
- createSafetyCenterIssue(
- "id1",
- MATCHING_GROUP_ID,
- severityLevel = ISSUE_SEVERITY_LEVEL_OK
- )
+ issue("id1", MATCHING_GROUP_ID, severityLevel = ISSUE_SEVERITY_LEVEL_OK)
val yellowDismissedIssue =
- createSafetyCenterIssue(
- "id2",
- MATCHING_GROUP_ID,
- severityLevel = ISSUE_SEVERITY_LEVEL_RECOMMENDATION
- )
+ issue("id2", MATCHING_GROUP_ID, severityLevel = ISSUE_SEVERITY_LEVEL_RECOMMENDATION)
val redDismissedIssue =
- createSafetyCenterIssue(
- "id3",
- MATCHING_GROUP_ID,
- severityLevel = ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING
- )
- val nonMatchingDismissedIssue = createSafetyCenterIssue("id4", NON_MATCHING_GROUP_ID)
+ issue("id3", MATCHING_GROUP_ID, severityLevel = ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING)
+ val nonMatchingDismissedIssue = issue("id4", NON_MATCHING_GROUP_ID)
val safetyCenterData =
createSafetyCenterData(
dismissedIssues =
@@ -240,25 +231,82 @@ class SafetyCenterUiDataTest {
redDismissedIssue,
yellowDismissedIssue,
greenDismissedIssue,
- nonMatchingDismissedIssue
- ),
+ nonMatchingDismissedIssue,
+ )
)
- val result =
- SafetyCenterUiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
+ val result = uiData(safetyCenterData).getMatchingDismissedIssues(MATCHING_GROUP_ID)
assertThat(result).containsExactly(redDismissedIssue, yellowDismissedIssue).inOrder()
}
+ @Test
+ fun issueUiDatas_returnsIssueUiData() {
+ val issue1 = issue("id1", "group1")
+ val issue2 = issue("id2", "group2")
+ val safetyCenterData = createSafetyCenterData(listOf(issue1, issue2))
+
+ val result = uiData(safetyCenterData).issueUiDatas
+
+ assertThat(result)
+ .containsExactly(
+ IssueUiData(issue1, isDismissed = false),
+ IssueUiData(issue2, isDismissed = false),
+ )
+ .inOrder()
+ }
+
+ @Test
+ fun issueUiDatas_withResolvedIssues_returnsExpectedIssueUiData() {
+ val resolvedActionId = "actionId"
+ val resolvedIssue = issue("resolvedId", "group1")
+ val unresolvedIssue = issue("unresolvedId", "group2")
+ val safetyCenterData = createSafetyCenterData(listOf(resolvedIssue, unresolvedIssue))
+
+ val result =
+ uiData(safetyCenterData, resolvedIssues = mapOf(resolvedIssue.id to resolvedActionId))
+ .issueUiDatas
+
+ assertThat(result[0].resolvedIssueActionId).isEqualTo(resolvedActionId)
+ assertThat(result[1].resolvedIssueActionId).isNull()
+ }
+
+ @Test
+ fun issueUiDatas_withSameTaskSourceId_returnsExpectedIssueUiData() {
+ val taskId = 42
+ val sameTaskSourceId = "sameTaskSourceId"
+ val sameTaskIssue =
+ issueWithEncodedId(
+ encodeIssueId("sameTaskIssue", sourceId = sameTaskSourceId),
+ "group1",
+ )
+ val differentTaskIssue = issue("differentTaskIssue", "group2")
+ val safetyCenterData = createSafetyCenterData(listOf(sameTaskIssue, differentTaskIssue))
+
+ val result =
+ uiData(safetyCenterData, taskId, sameTaskSourceIds = listOf(sameTaskSourceId))
+ .issueUiDatas
+
+ assertThat(result[0].launchTaskId).isEqualTo(taskId)
+ assertThat(result[1].launchTaskId).isNull()
+ }
+
private companion object {
const val MATCHING_GROUP_ID = "matching_group_id"
const val NON_MATCHING_GROUP_ID = "non_matching_group_id"
+ private fun uiData(
+ safetyCenterData: SafetyCenterData,
+ taskId: Int = 0,
+ sameTaskSourceIds: List<String> = emptyList(),
+ resolvedIssues: Map<IssueId, ActionId> = emptyMap(),
+ ) = SafetyCenterUiData(safetyCenterData, taskId, sameTaskSourceIds, resolvedIssues)
+
fun createSafetyCenterData(
issues: List<SafetyCenterIssue> = listOf(),
entryGroups: List<SafetyCenterEntryGroup> = listOf(),
dismissedIssues: List<SafetyCenterIssue> = listOf(),
- extras: Bundle = Bundle()
+ extras: Bundle = Bundle(),
): SafetyCenterData {
val safetyCenterStatus =
SafetyCenterStatus.Builder("status title", "status summary").build()
@@ -276,20 +324,44 @@ class SafetyCenterUiDataTest {
return builder.build()
}
- fun createSafetyCenterEntryGroup(groupId: String) =
+ fun createSafetyCenterExtras(issuesToGroupsMapping: Bundle) =
+ Bundle().apply { putBundle(ISSUES_TO_GROUPS_BUNDLE_KEY, issuesToGroupsMapping) }
+
+ fun entryGroup(groupId: String) =
SafetyCenterEntryGroup.Builder(groupId, "group title").build()
- fun createSafetyCenterIssue(
+ fun issue(
issueId: String,
groupId: String,
- severityLevel: Int = ISSUE_SEVERITY_LEVEL_RECOMMENDATION
+ severityLevel: Int = ISSUE_SEVERITY_LEVEL_RECOMMENDATION,
+ ): SafetyCenterIssue = issueWithEncodedId(encodeIssueId(issueId), groupId, severityLevel)
+
+ private fun issueWithEncodedId(
+ encodedIssueId: String,
+ groupId: String,
+ severityLevel: Int = ISSUE_SEVERITY_LEVEL_RECOMMENDATION,
) =
- SafetyCenterIssue.Builder(issueId, "issue title", "issue summary")
+ SafetyCenterIssue.Builder(encodedIssueId, "issue title", "issue summary")
.setSeverityLevel(severityLevel)
.setGroupId(groupId)
.build()
- fun createSafetyCenterExtras(issuesToGroupsMapping: Bundle) =
- Bundle().apply { putBundle(ISSUES_TO_GROUPS_BUNDLE_KEY, issuesToGroupsMapping) }
+ fun encodeIssueId(
+ sourceIssueId: String,
+ sourceId: String = "defaultSource",
+ issueTypeId: String = "defaultIssueTypeId",
+ ): String =
+ SafetyCenterIds.encodeToString(
+ SafetyCenterIssueId.newBuilder()
+ .setSafetyCenterIssueKey(
+ SafetyCenterIssueKey.newBuilder()
+ .setSafetySourceId(sourceId)
+ .setSafetySourceIssueId(sourceIssueId)
+ .setUserId(UserHandle.myUserId())
+ .build()
+ )
+ .setIssueTypeId(issueTypeId)
+ .build()
+ )
}
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt b/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt
index db3711670..6e7be01ec 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt
@@ -135,10 +135,19 @@ fun Context.findActivity(): Activity {
interface ListScopeWrapper {
fun item(key: Any? = null, contentType: Any? = null, content: @Composable () -> Unit)
+ fun items(
+ count: Int,
+ key: ((index: Int) -> Any)? = null,
+ contentType: (index: Int) -> Any? = { null },
+ content: @Composable (index: Int) -> Unit,
+ )
+
fun expandableItems(
state: ExpandableState,
count: Int,
key: ((index: Int) -> Any)? = null,
itemContent: @Composable BoxScope.(index: Int) -> Unit,
)
+
+ fun expandableButton(state: ExpandableState, key: Any? = null, content: @Composable () -> Unit)
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt
index 652adfc07..4abe5c8ca 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt
@@ -22,7 +22,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.rememberTextMeasurer
@@ -60,13 +59,9 @@ fun AlertDialog(
iconRes: WearPermissionIconBuilder? = null,
scalingLazyListState: ScalingLazyListState,
) {
- val focusManager = LocalFocusManager.current
Dialog(
showDialog = showDialog,
- onDismissRequest = {
- focusManager.clearFocus()
- negativeButtonContent?.onClick?.invoke()
- },
+ onDismissRequest = { negativeButtonContent?.onClick?.invoke() },
scrollState = scalingLazyListState,
modifier = modifier,
) {
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt
index f0dab21ec..23074a06f 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt
@@ -33,7 +33,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.Hyphens
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
@@ -194,11 +193,7 @@ fun Chip(
textAlign = if (hasSecondaryLabel || hasIcon) TextAlign.Start else TextAlign.Center,
overflow = TextOverflow.Ellipsis,
maxLines = labelMaxLines ?: if (hasSecondaryLabel) 1 else 2,
- style =
- MaterialTheme.typography.button.copy(
- fontWeight = FontWeight.W600,
- hyphens = Hyphens.Auto,
- ),
+ style = MaterialTheme.typography.button.copy(hyphens = Hyphens.Auto),
)
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt
index 7dc26179d..6ed81353a 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt
@@ -34,7 +34,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.Hyphens
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.LocalContentColor
@@ -72,11 +71,7 @@ fun ListHeader(
) {
CompositionLocalProvider(
LocalContentColor provides contentColor,
- LocalTextStyle provides
- MaterialTheme.typography.title3.copy(
- fontWeight = FontWeight.W600,
- hyphens = Hyphens.Auto,
- ),
+ LocalTextStyle provides MaterialTheme.typography.title3.copy(hyphens = Hyphens.Auto),
) {
content()
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt
index 1a7524e7c..5f1c8dd2c 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt
@@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.requiredSizeIn
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.Hyphens
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@@ -112,11 +111,7 @@ internal fun WearPermissionButtonInternal(
text = label,
modifier = Modifier.fillMaxWidth(),
maxLines = labelMaxLines ?: LocalTextConfiguration.current.maxLines,
- style =
- LocalTextStyle.current.copy(
- fontWeight = FontWeight.W600,
- hyphens = Hyphens.Auto,
- ),
+ style = LocalTextStyle.current.copy(hyphens = Hyphens.Auto),
)
}
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt
index 5110a5812..296e45e79 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt
@@ -40,6 +40,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.wear.compose.foundation.ExpandableState
import androidx.wear.compose.foundation.ScrollInfoProvider
+import androidx.wear.compose.foundation.expandableButton
import androidx.wear.compose.foundation.expandableItems
import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
import androidx.wear.compose.foundation.lazy.ScalingLazyListScope
@@ -75,6 +76,15 @@ private class TransformingScopeConverter(private val scope: TransformingLazyColu
scope.item { Box(modifier = Modifier.scrollTransform(this)) { content() } }
}
+ override fun items(
+ count: Int,
+ key: ((Int) -> Any)?,
+ contentType: (Int) -> Any?,
+ content: @Composable ((Int) -> Unit),
+ ) {
+ scope.items(count, key, contentType) { content(it) }
+ }
+
override fun expandableItems(
state: ExpandableState,
count: Int,
@@ -83,6 +93,14 @@ private class TransformingScopeConverter(private val scope: TransformingLazyColu
) {
throw Exception("Expandable Items are not implemented on TLC Yet. Use SLC.")
}
+
+ override fun expandableButton(
+ state: ExpandableState,
+ key: Any?,
+ content: @Composable (() -> Unit),
+ ) {
+ throw Exception("Expandable Button is not implemented on TLC Yet. Use SLC.")
+ }
}
private class ScalingScopeConverter(private val scope: ScalingLazyListScope) : ListScopeWrapper {
@@ -90,6 +108,15 @@ private class ScalingScopeConverter(private val scope: ScalingLazyListScope) : L
scope.item { content() }
}
+ override fun items(
+ count: Int,
+ key: ((Int) -> Any)?,
+ contentType: (Int) -> Any?,
+ content: @Composable ((Int) -> Unit),
+ ) {
+ scope.items(count, key) { content(it) }
+ }
+
override fun expandableItems(
state: ExpandableState,
count: Int,
@@ -98,6 +125,14 @@ private class ScalingScopeConverter(private val scope: ScalingLazyListScope) : L
) {
scope.expandableItems(state, count, key, itemContent)
}
+
+ override fun expandableButton(
+ state: ExpandableState,
+ key: Any?,
+ content: @Composable (() -> Unit),
+ ) {
+ scope.expandableButton(state, key, content)
+ }
}
/**
@@ -179,6 +214,7 @@ private fun WearPermissionScaffoldInternal(
} else {
LazyColumnView(
asScalingList = asScalingList,
+ showTimeText = showTimeText,
listState = listState,
title = title,
subtitle = subtitle,
@@ -197,6 +233,7 @@ private fun WearPermissionScaffoldInternal(
@Composable
private fun BoxScope.LazyColumnView(
asScalingList: Boolean = false,
+ showTimeText: Boolean,
listState: ScrollableState,
title: String?,
subtitle: CharSequence?,
@@ -213,6 +250,12 @@ private fun BoxScope.LazyColumnView(
screenHeight = screenHeight,
)
val painterImage = image?.let { painterFromImage(image = image) }
+ val scrollContentPadding =
+ if (showTimeText) {
+ paddingDefaults.scrollContentPadding
+ } else {
+ paddingDefaults.scrollContentPaddingForDialogs(painterImage == null)
+ }
fun BoxScope.scrollingViewContent(scopeWrapper: ListScopeWrapper) {
with(scopeWrapper) {
@@ -237,14 +280,14 @@ private fun BoxScope.LazyColumnView(
if (asScalingList) {
ScalingLazyColumn(
- contentPadding = paddingDefaults.scrollContentPadding,
+ contentPadding = scrollContentPadding,
state = listState as ScalingLazyListState,
modifier = Modifier.background(MaterialTheme.colorScheme.background),
content = { scrollingViewContent(ScalingScopeConverter(this)) },
)
} else {
TransformingLazyColumn(
- contentPadding = paddingDefaults.scrollContentPadding,
+ contentPadding = scrollContentPadding,
state = listState as TransformingLazyColumnState,
modifier = Modifier.background(MaterialTheme.colorScheme.background),
content = { scrollingViewContent(TransformingScopeConverter(this)) },
@@ -254,7 +297,7 @@ private fun BoxScope.LazyColumnView(
private fun wearPermissionTimeText(showTime: Boolean): @Composable () -> Unit {
return if (showTime) {
- { TimeText { time() } }
+ { TimeText() }
} else {
{}
}
diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt
index 93a25279c..595fb50a3 100644
--- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt
+++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt
@@ -28,6 +28,8 @@ data class WearPermissionScaffoldPaddingDefaults(
private val titleHorizontalPadding = (screenWidth * 0.0520).dp
private val subtitleHorizontalPadding = (screenWidth * 0.0624).dp
private val scrollContentTopPadding = (screenHeight * 0.1664).dp
+ private val dialogScrollContentLargeTopPadding = (screenHeight * 0.10).dp
+ private val dialogScrollContentTopPadding = (screenHeight * 0.012).dp
private val scrollContentBottomPadding = (screenHeight * 0.3646).dp
private val noPadding = 0.dp
private val defaultItemPadding = 4.dp
@@ -50,6 +52,19 @@ data class WearPermissionScaffoldPaddingDefaults(
end = subtitleHorizontalPadding,
)
+ fun scrollContentPaddingForDialogs(needsLargePadding: Boolean) =
+ PaddingValues(
+ start = scrollContentHorizontalPadding,
+ end = scrollContentHorizontalPadding,
+ top =
+ if (needsLargePadding) {
+ dialogScrollContentLargeTopPadding
+ } else {
+ dialogScrollContentTopPadding
+ },
+ bottom = scrollContentBottomPadding,
+ )
+
val subTitlePaddingValues =
PaddingValues(
start = subtitleHorizontalPadding,
diff --git a/SafetyCenter/OWNERS b/SafetyCenter/OWNERS
index d9039e915..229331d3c 100644
--- a/SafetyCenter/OWNERS
+++ b/SafetyCenter/OWNERS
@@ -4,7 +4,6 @@ simonjw@google.com
davidcoffin@google.com
elliotsisteron@google.com
fiscella@google.com
-shrigupt@google.com
jtomljanovic@google.com
deweytyl@google.com
maxspencer@google.com
diff --git a/SafetyCenter/Resources/res/values-iw/strings.xml b/SafetyCenter/Resources/res/values-iw/strings.xml
index bde0d294b..a6c39074b 100644
--- a/SafetyCenter/Resources/res/values-iw/strings.xml
+++ b/SafetyCenter/Resources/res/values-iw/strings.xml
@@ -18,7 +18,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="safetyCenterResourcesAppLabel" msgid="4043334186295695930">"משאבים למרכז הבטיחות"</string>
- <string name="lock_screen_sources_title" msgid="3317906280484627707">"נעילת מכשיר"</string>
+ <string name="lock_screen_sources_title" msgid="3317906280484627707">"נעילת המכשיר"</string>
<string name="lock_screen_sources_summary" msgid="7220439741282516496"></string>
<string name="lock_screen_title" msgid="4069104894527169877">"נעילת מסך"</string>
<string name="lock_screen_summary_disabled" msgid="354071230916616692">"אין עדיין פרטים"</string>
diff --git a/SafetyCenter/Resources/res/values-mk-v35/strings.xml b/SafetyCenter/Resources/res/values-mk-v35/strings.xml
index c4fc4bd17..1201ae74f 100644
--- a/SafetyCenter/Resources/res/values-mk-v35/strings.xml
+++ b/SafetyCenter/Resources/res/values-mk-v35/strings.xml
@@ -21,7 +21,7 @@
<string name="cellular_network_security_summary" msgid="7319307247487475572">"Тип мрежа, шифрирање, контроли за известувања"</string>
<string name="biometrics_title_for_private_profile" msgid="542819107383037820"></string>
<string name="privacy_title" msgid="7047524783080782769">"Приватност"</string>
- <string name="privacy_sources_title" msgid="309304028326660956">"Контроли на приватноста"</string>
+ <string name="privacy_sources_title" msgid="309304028326660956">"Контроли за приватност"</string>
<string name="privacy_sources_summary" msgid="2165270848857537278">"Дозволи, контроли"</string>
<string name="privacy_additional_title" msgid="4239060639056083649"></string>
<string name="private_space_title" msgid="6158245041481535879">"Приватен простор"</string>
diff --git a/SafetyCenter/Resources/res/values-mk/strings.xml b/SafetyCenter/Resources/res/values-mk/strings.xml
index 2b2414d0d..379a5234b 100644
--- a/SafetyCenter/Resources/res/values-mk/strings.xml
+++ b/SafetyCenter/Resources/res/values-mk/strings.xml
@@ -33,9 +33,9 @@
<string name="permission_manager_title" msgid="5277347862821255015">"Управувач со дозволи"</string>
<string name="permission_manager_summary" msgid="8099852107340970790">"Го контролира пристапот на апликациите до вашите податоци"</string>
<string name="permission_manager_search_terms" msgid="2895147613099694722">"Дозволи, Управувач со дозволи"</string>
- <string name="privacy_controls_title" msgid="5322875777945432395">"Контроли за приватноста"</string>
+ <string name="privacy_controls_title" msgid="5322875777945432395">"Контроли за приватност"</string>
<string name="privacy_controls_summary" msgid="2402066941190435424">"Го контролира пристапот на уредот до микрофонот, камерата и друго"</string>
- <string name="privacy_controls_search_terms" msgid="3774472175934304165">"Приватност, Контроли на приватноста"</string>
+ <string name="privacy_controls_search_terms" msgid="3774472175934304165">"Приватност, Контроли за приватност"</string>
<string name="advanced_title" msgid="8745436380690561172">"Повеќе поставки"</string>
<string name="advanced_security_title" msgid="1126833338772188155">"Повеќе поставки за безбедност"</string>
<string name="advanced_security_summary" msgid="6172253327022425123">"Шифрирање, акредитиви и друго"</string>
diff --git a/SafetyCenter/Resources/res/values-sk/strings.xml b/SafetyCenter/Resources/res/values-sk/strings.xml
index 6357114cd..042d2dd75 100644
--- a/SafetyCenter/Resources/res/values-sk/strings.xml
+++ b/SafetyCenter/Resources/res/values-sk/strings.xml
@@ -30,7 +30,7 @@
<string name="permission_usage_title" msgid="3633779688945350407">"Panel ochrany súkromia"</string>
<string name="permission_usage_summary" msgid="5323079206029964468">"Zobraziť, ktoré aplikácie nedávno použili povolenia"</string>
<string name="permission_usage_search_terms" msgid="3852343592870257104">"Ochrana súkromia, panel ochrany súkromia"</string>
- <string name="permission_manager_title" msgid="5277347862821255015">"Správca povolení"</string>
+ <string name="permission_manager_title" msgid="5277347862821255015">"Správa povolení"</string>
<string name="permission_manager_summary" msgid="8099852107340970790">"Ovládanie prístupu aplikácií k vašim údajom"</string>
<string name="permission_manager_search_terms" msgid="2895147613099694722">"Povolenia, správca povolení"</string>
<string name="privacy_controls_title" msgid="5322875777945432395">"Nastavenia ochrany súkromia"</string>
diff --git a/SafetyCenter/Resources/shared_res/values-fa/strings.xml b/SafetyCenter/Resources/shared_res/values-fa/strings.xml
index 744ac950c..c2123de3a 100644
--- a/SafetyCenter/Resources/shared_res/values-fa/strings.xml
+++ b/SafetyCenter/Resources/shared_res/values-fa/strings.xml
@@ -23,7 +23,7 @@
<string name="overall_severity_level_ok_summary" msgid="383626536912856690">"مشکلی پیدا نشد"</string>
<string name="overall_severity_level_tip_summary" msgid="1935765582243024999">"{count,plural, =1{دیدن توصیه}one{دیدن توصیه}other{دیدن توصیه‌ها}}"</string>
<string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{اقدام انجام شد}one{اقدام انجام شد}other{اقدامات انجام شد}}"</string>
- <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"مرور تنظیمات"</string>
+ <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"بازبینی تنظیمات"</string>
<string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"بررسی فهرست تنظیمات"</string>
<string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"دستگاه ممکن است درمعرض خطر باشد"</string>
<string name="overall_severity_level_critical_device_warning_title" msgid="5901771721834272596">"دستگاه درمعرض خطر است"</string>
diff --git a/SafetyCenter/Resources/shared_res/values-ky/strings.xml b/SafetyCenter/Resources/shared_res/values-ky/strings.xml
index 474377b87..152661d8a 100644
--- a/SafetyCenter/Resources/shared_res/values-ky/strings.xml
+++ b/SafetyCenter/Resources/shared_res/values-ky/strings.xml
@@ -37,7 +37,7 @@
<string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Коркунучтар табылды"</string>
<string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Аккаунт коркунучта болушу мүмкүн"</string>
<string name="overall_severity_level_critical_account_warning_title" msgid="1913235490583842004">"Аккаунт коркунучта"</string>
- <string name="overall_severity_n_alerts_summary" msgid="3262010942295408403">"{count,plural, =1{Эскетүүнү көрүү}other{Эскертүүлөрдү көрүү}}"</string>
+ <string name="overall_severity_n_alerts_summary" msgid="3262010942295408403">"{count,plural, =1{Эскертүүнү көрүү}other{Эскертүүлөрдү көрүү}}"</string>
<string name="redirecting_error" msgid="8146983632878233202">"Барак ачылган жок"</string>
<string name="resolving_action_error" msgid="371968886143262375">"Эскертүү чечилген жок"</string>
<string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{Параметр текшерилген жок}other{Параметрлер текшерилген жок}}"</string>
diff --git a/flags/flags.aconfig b/flags/flags.aconfig
index 372fed403..866d27d43 100644
--- a/flags/flags.aconfig
+++ b/flags/flags.aconfig
@@ -65,15 +65,6 @@ flag {
}
flag {
- name: "livedata_refactor_permission_timeline_enabled"
- is_exported: true
- namespace: "permissions"
- description: "This flag is used to enable modern app architecture implementation for timeline page"
- bug: "354234946"
- is_fixed_read_only: true
-}
-
-flag {
name: "odad_notifications_supported"
is_exported: true
namespace: "permissions"
diff --git a/service/java/com/android/ecm/EnhancedConfirmationCallTrackerService.java b/service/java/com/android/ecm/EnhancedConfirmationCallTrackerService.java
index 9117d6558..038c28383 100644
--- a/service/java/com/android/ecm/EnhancedConfirmationCallTrackerService.java
+++ b/service/java/com/android/ecm/EnhancedConfirmationCallTrackerService.java
@@ -28,6 +28,9 @@ import android.telecom.InCallService;
import com.android.server.LocalManagerRegistry;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
/**
* @hide
*
@@ -41,6 +44,8 @@ import com.android.server.LocalManagerRegistry;
public class EnhancedConfirmationCallTrackerService extends InCallService {
private EnhancedConfirmationManagerLocal mEnhancedConfirmationManagerLocal;
+ private final ExecutorService mBackgroundExecutor = Executors.newSingleThreadExecutor();
+
@Override
public void onCreate() {
super.onCreate();
@@ -56,7 +61,7 @@ public class EnhancedConfirmationCallTrackerService extends InCallService {
return;
}
- mEnhancedConfirmationManagerLocal.addOngoingCall(call);
+ mBackgroundExecutor.submit(() -> mEnhancedConfirmationManagerLocal.addOngoingCall(call));
}
@Override
@@ -65,7 +70,8 @@ public class EnhancedConfirmationCallTrackerService extends InCallService {
return;
}
- mEnhancedConfirmationManagerLocal.removeOngoingCall(call.getDetails().getId());
+ mBackgroundExecutor.submit(() ->
+ mEnhancedConfirmationManagerLocal.removeOngoingCall(call.getDetails().getId()));
}
/**
@@ -73,7 +79,8 @@ public class EnhancedConfirmationCallTrackerService extends InCallService {
*/
public boolean onUnbind(@Nullable Intent intent) {
if (mEnhancedConfirmationManagerLocal != null) {
- mEnhancedConfirmationManagerLocal.clearOngoingCalls();
+ mBackgroundExecutor.submit(() ->
+ mEnhancedConfirmationManagerLocal.clearOngoingCalls());
}
return super.onUnbind(intent);
}
diff --git a/service/java/com/android/ecm/EnhancedConfirmationManagerLocal.java b/service/java/com/android/ecm/EnhancedConfirmationManagerLocal.java
index 483071716..984a6783c 100644
--- a/service/java/com/android/ecm/EnhancedConfirmationManagerLocal.java
+++ b/service/java/com/android/ecm/EnhancedConfirmationManagerLocal.java
@@ -34,10 +34,10 @@ import android.telecom.Call;
@TargetApi(Build.VERSION_CODES.BAKLAVA)
public interface EnhancedConfirmationManagerLocal {
/**
- * Inform the enhanced confirmation service of an ongoing call
+ * Inform the enhanced confirmation service of an ongoing call.
*
* @param call The call to potentially track
- *
+ * @throws IllegalStateException if called on the main thread
*/
void addOngoingCall(@NonNull Call call);
@@ -45,12 +45,14 @@ public interface EnhancedConfirmationManagerLocal {
* Inform the enhanced confirmation service that a call has ended
*
* @param callId The ID of the call to stop tracking
+ * @throws IllegalStateException if called on the main thread
*
*/
void removeOngoingCall(@NonNull String callId);
/**
* Informs the enhanced confirmation service it should clear out any ongoing calls
+ * @throws IllegalStateException if called on the main thread
*/
void clearOngoingCalls();
}
diff --git a/service/java/com/android/ecm/EnhancedConfirmationService.java b/service/java/com/android/ecm/EnhancedConfirmationService.java
index fc0ed20d0..2e83a802b 100644
--- a/service/java/com/android/ecm/EnhancedConfirmationService.java
+++ b/service/java/com/android/ecm/EnhancedConfirmationService.java
@@ -27,12 +27,14 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.UserIdInt;
+import android.annotation.WorkerThread;
import android.app.AppOpsManager;
import android.app.ecm.EnhancedConfirmationManager;
import android.app.ecm.IEnhancedConfirmationManager;
import android.app.role.RoleManager;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.InstallSourceInfo;
import android.content.pm.PackageInstaller;
@@ -43,6 +45,8 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
+import android.os.Bundle;
+import android.os.Looper;
import android.os.SystemConfigManager;
import android.os.UserHandle;
import android.permission.flags.Flags;
@@ -72,6 +76,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
/**
@@ -90,8 +95,9 @@ public class EnhancedConfirmationService extends SystemService {
private Map<String, List<byte[]>> mTrustedPackageCertDigests;
private Map<String, List<byte[]>> mTrustedInstallerCertDigests;
- // A map of call ID to call type
- private final Map<String, Integer> mOngoingCalls = new ArrayMap<>();
+ // A map of call ID to call type. Thread safe because it is queried on the main thread, but
+ // added/removed on a background thread.
+ private final Map<String, Integer> mOngoingCalls = new ConcurrentHashMap<>();
private static final int CALL_TYPE_UNTRUSTED = 0;
private static final int CALL_TYPE_TRUSTED = 1;
@@ -110,7 +116,6 @@ public class EnhancedConfirmationService extends SystemService {
new EnhancedConfirmationManagerLocalImpl(this));
}
- private ContentResolver mContentResolver;
private TelephonyManager mTelephonyManager;
@GuardedBy("mUserAccessibilityManagers")
@@ -128,7 +133,6 @@ public class EnhancedConfirmationService extends SystemService {
systemConfigManager.getEnhancedConfirmationTrustedInstallers());
publishBinderService(Context.ECM_ENHANCED_CONFIRMATION_SERVICE, new Stub());
- mContentResolver = getContext().getContentResolver();
mTelephonyManager = getContext().getSystemService(TelephonyManager.class);
}
@@ -143,6 +147,7 @@ public class EnhancedConfirmationService extends SystemService {
}
void addOngoingCall(Call call) {
+ assertNotMainThread();
if (!Flags.unknownCallPackageInstallBlockingEnabled()) {
return;
}
@@ -152,7 +157,9 @@ public class EnhancedConfirmationService extends SystemService {
mOngoingCalls.put(call.getDetails().getId(), getCallType(call));
}
+ @WorkerThread
void removeOngoingCall(String callId) {
+ assertNotMainThread();
if (!Flags.unknownCallPackageInstallBlockingEnabled()) {
return;
}
@@ -162,11 +169,15 @@ public class EnhancedConfirmationService extends SystemService {
}
}
+ @WorkerThread
void clearOngoingCalls() {
+ assertNotMainThread();
mOngoingCalls.clear();
}
+ @WorkerThread
private @CallType int getCallType(Call call) {
+ assertNotMainThread();
String number = getPhoneNumber(call);
try {
if (number != null && mTelephonyManager.isEmergencyNumber(number)) {
@@ -177,10 +188,16 @@ public class EnhancedConfirmationService extends SystemService {
// device, either because the device lacks telephony calling, or the telephony service
// is unavailable.
}
+ UserHandle user = getContext().getUser();
+ Bundle extras = call.getDetails().getExtras();
+ if (extras != null) {
+ user = extras.getParcelable(Intent.EXTRA_USER_HANDLE, UserHandle.class);
+ }
if (number != null) {
- return hasContactWithPhoneNumber(number) ? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED;
+ return hasContactWithPhoneNumber(number, user)
+ ? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED;
} else {
- return hasContactWithDisplayName(call.getDetails().getCallerDisplayName())
+ return hasContactWithDisplayName(call.getDetails().getCallerDisplayName(), user)
? CALL_TYPE_TRUSTED : CALL_TYPE_UNTRUSTED;
}
}
@@ -196,7 +213,9 @@ public class EnhancedConfirmationService extends SystemService {
return handle.getSchemeSpecificPart();
}
- private boolean hasContactWithPhoneNumber(String phoneNumber) {
+ @WorkerThread
+ private boolean hasContactWithPhoneNumber(String phoneNumber, UserHandle user) {
+ assertNotMainThread();
if (phoneNumber == null) {
return false;
}
@@ -206,12 +225,14 @@ public class EnhancedConfirmationService extends SystemService {
PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup._ID
};
- try (Cursor res = mContentResolver.query(uri, projection, null, null)) {
+ try (Cursor res = getUserContentResolver(user).query(uri, projection, null, null)) {
return res != null && res.getCount() > 0;
}
}
- private boolean hasContactWithDisplayName(String displayName) {
+ @WorkerThread
+ private boolean hasContactWithDisplayName(String displayName, UserHandle user) {
+ assertNotMainThread();
if (displayName == null) {
return false;
}
@@ -219,11 +240,16 @@ public class EnhancedConfirmationService extends SystemService {
String[] projection = new String[]{PhoneLookup._ID};
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArgs = new String[]{displayName};
- try (Cursor res = mContentResolver.query(uri, projection, selection, selectionArgs, null)) {
+ try (Cursor res = getUserContentResolver(user)
+ .query(uri, projection, selection, selectionArgs, null)) {
return res != null && res.getCount() > 0;
}
}
+ private ContentResolver getUserContentResolver(UserHandle user) {
+ return getContext().createContextAsUser(user, 0).getContentResolver();
+ }
+
private boolean hasCallOfType(@CallType int callType) {
for (int ongoingCallType : mOngoingCalls.values()) {
if (ongoingCallType == callType) {
@@ -233,6 +259,12 @@ public class EnhancedConfirmationService extends SystemService {
return false;
}
+ private void assertNotMainThread() throws IllegalStateException {
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ throw new IllegalStateException("Ecm WorkerThread method called on main thread");
+ }
+ }
+
private class Stub extends IEnhancedConfirmationManager.Stub {
/** A map of ECM states to their corresponding app op states */
diff --git a/service/java/com/android/permission/util/UserUtils.java b/service/java/com/android/permission/util/UserUtils.java
index c69afb199..ae8e794b6 100644
--- a/service/java/com/android/permission/util/UserUtils.java
+++ b/service/java/com/android/permission/util/UserUtils.java
@@ -65,13 +65,12 @@ public final class UserUtils {
DevicePolicyManager devicePolicyManager =
context.getSystemService(DevicePolicyManager.class);
if (!devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile()) {
- // For profileGroup exclusive roles users on BYOD are free to choose personal o
+ // For profileGroup exclusive roles users on BYOD are free to choose personal or
// work profile app regardless of DISALLOW_DEBUGGING_FEATURES
return;
}
- Context userContext = UserUtils.getUserContext(userId, context);
- List<UserHandle> profiles = getUserProfiles(userContext, true);
+ List<UserHandle> profiles = getUserProfiles(userId, context, true);
final int profilesSize = profiles.size();
for (int i = 0; i < profilesSize; i++) {
int profileId = profiles.get(i).getIdentifier();
@@ -112,26 +111,29 @@ public final class UserUtils {
}
}
- /** Returns all the enabled user profiles on the device. */
+ /** Returns all the enabled user profiles on the device for a specified user. */
@NonNull
- public static List<UserHandle> getUserProfiles(@NonNull Context context) {
- return getUserProfiles(context, false);
+ public static List<UserHandle> getUserProfiles(@UserIdInt int userId,
+ @NonNull Context context) {
+ return getUserProfiles(userId, context, false);
}
/**
- * Returns all the enabled user profiles on the device
+ * Returns all the enabled user profiles on the device for a specified user
*
+ * @param userId the user id to check
* @param context the {@link Context}
* @param excludePrivate {@code true} to exclude private profiles from returned list of users
*/
@NonNull
- public static List<UserHandle> getUserProfiles(@NonNull Context context,
+ public static List<UserHandle> getUserProfiles(@UserIdInt int userId, @NonNull Context context,
boolean excludePrivate) {
- UserManager userManager = context.getSystemService(UserManager.class);
// This call requires the QUERY_USERS permission.
final long identity = Binder.clearCallingIdentity();
try {
- List<UserHandle> profiles = userManager.getUserProfiles();
+ Context userContext = getUserContext(userId, context);
+ UserManager userUserManager = userContext.getSystemService(UserManager.class);
+ List<UserHandle> profiles = userUserManager.getUserProfiles();
if (!excludePrivate) {
return profiles;
}
@@ -139,7 +141,7 @@ public final class UserUtils {
final int profilesSize = profiles.size();
for (int i = 0; i < profilesSize; i++) {
UserHandle user = profiles.get(i);
- if (!isPrivateProfile(user.getIdentifier(), context)) {
+ if (!isPrivateProfile(user.getIdentifier(), userContext)) {
filteredProfiles.add(user);
}
}
@@ -164,11 +166,11 @@ public final class UserUtils {
@Nullable
private static UserHandle getProfileParent(@UserIdInt int userId, @NonNull Context context) {
Context userContext = getUserContext(userId, context);
- UserManager userManager = userContext.getSystemService(UserManager.class);
+ UserManager userUserManager = userContext.getSystemService(UserManager.class);
// This call requires the INTERACT_ACROSS_USERS permission.
final long identity = Binder.clearCallingIdentity();
try {
- return userManager.getProfileParent(UserHandle.of(userId));
+ return userUserManager.getProfileParent(UserHandle.of(userId));
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -201,8 +203,8 @@ public final class UserUtils {
final long identity = Binder.clearCallingIdentity();
try {
Context userContext = getUserContext(userId, context);
- UserManager userManager = userContext.getSystemService(UserManager.class);
- return userManager != null && userManager.isPrivateProfile();
+ UserManager userUserManager = userContext.getSystemService(UserManager.class);
+ return userUserManager != null && userUserManager.isPrivateProfile();
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/service/java/com/android/role/RoleService.java b/service/java/com/android/role/RoleService.java
index 5bc79efbb..ac6703545 100644
--- a/service/java/com/android/role/RoleService.java
+++ b/service/java/com/android/role/RoleService.java
@@ -564,8 +564,7 @@ public class RoleService extends SystemService implements RoleUserState.Callback
+ " for role");
return;
}
- Context userContext = UserUtils.getUserContext(userId, getContext());
- List<UserHandle> profiles = UserUtils.getUserProfiles(userContext, true);
+ List<UserHandle> profiles = UserUtils.getUserProfiles(userId, getContext(), true);
if (!profiles.contains(UserHandle.of(activeUserId))) {
Log.e(LOG_TAG, "User " + activeUserId + " is not in the same profile-group as "
+ userId);
@@ -733,6 +732,9 @@ public class RoleService extends SystemService implements RoleUserState.Callback
@Override
@Nullable
public String getDefaultApplicationAsUser(@NonNull String roleName, @UserIdInt int userId) {
+ // The MANAGE_DEFAULT_APPLICATIONS permission is only available on U+
+ Preconditions.checkState(SdkLevel.isAtLeastU(),
+ "This API is only available on Android 34 and above");
UserUtils.enforceCrossUserPermission(userId, /* allowAll= */ false,
/* enforceForProfileGroup= */ false, "getDefaultApplicationAsUser",
getContext());
@@ -759,6 +761,9 @@ public class RoleService extends SystemService implements RoleUserState.Callback
public void setDefaultApplicationAsUser(@NonNull String roleName,
@Nullable String packageName, @RoleManager.ManageHoldersFlags int flags,
@UserIdInt int userId, @NonNull RemoteCallback callback) {
+ // The MANAGE_DEFAULT_APPLICATIONS permission is only available on U+
+ Preconditions.checkState(SdkLevel.isAtLeastU(),
+ "This API is only available on Android 34 and above");
boolean enforceForProfileGroup = isProfileGroupExclusiveRole(roleName, getContext());
UserUtils.enforceCrossUserPermission(userId, /* allowAll= */ false,
enforceForProfileGroup, "setDefaultApplicationAsUser", getContext());
diff --git a/service/java/com/android/safetycenter/UserProfileGroup.java b/service/java/com/android/safetycenter/UserProfileGroup.java
index 1f5258437..44cb8d3d6 100644
--- a/service/java/com/android/safetycenter/UserProfileGroup.java
+++ b/service/java/com/android/safetycenter/UserProfileGroup.java
@@ -129,9 +129,8 @@ public final class UserProfileGroup {
* is disabled.
*/
public static UserProfileGroup fromUser(Context context, @UserIdInt int userId) {
- Context userContext = UserUtils.getUserContext(userId, context);
- List<UserHandle> userProfiles = UserUtils.getUserProfiles(userContext);
- int profileParentUserId = UserUtils.getProfileParentIdOrSelf(userId, userContext);
+ List<UserHandle> userProfiles = UserUtils.getUserProfiles(userId, context);
+ int profileParentUserId = UserUtils.getProfileParentIdOrSelf(userId, context);
int[] managedProfilesUserIds = new int[userProfiles.size()];
int[] managedRunningProfilesUserIds = new int[userProfiles.size()];
diff --git a/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java b/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java
index fae03d973..75f4a0ce5 100644
--- a/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java
+++ b/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java
@@ -16,6 +16,8 @@
package android.permission.cts.appthataccesseslocation;
+import static android.location.Criteria.ACCURACY_FINE;
+
import android.app.Service;
import android.content.Intent;
import android.location.Criteria;
@@ -25,83 +27,42 @@ import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Looper;
-import android.os.SystemClock;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-public class AccessLocationOnCommand extends Service implements LocationListener {
- private static final String TEST_PROVIDER = "test_provider";
- private LocationManager mLocationManager;
- private IAccessLocationOnCommand.Stub mBinder;
- private final LocationListener mLocationListener = this;
- private final Timer mTimer = new Timer();
-
- private void updateMockLocation() {
- final Location location = new Location(TEST_PROVIDER);
- location.setLatitude(35.657f);
- location.setLongitude(139.703f);
- location.setAccuracy(1.0f);
- location.setTime(System.currentTimeMillis());
- location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
- mLocationManager.setTestProviderLocation(TEST_PROVIDER, location);
- }
+public class AccessLocationOnCommand extends Service {
+ private IAccessLocationOnCommand.Stub mBinder = new IAccessLocationOnCommand.Stub() {
+ public void accessLocation() {
+ Criteria crit = new Criteria();
+ crit.setAccuracy(ACCURACY_FINE);
+
+ AccessLocationOnCommand.this.getSystemService(LocationManager.class)
+ .requestSingleUpdate(crit, new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status,
+ Bundle extras) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+ }, Looper.getMainLooper());
+ }
+ };
@Override
public IBinder onBind(Intent intent) {
- mLocationManager = getSystemService(LocationManager.class);
-
- mLocationManager.addTestProvider(TEST_PROVIDER,
- /* requiresNetwork= */true,
- /* requiresSatellite= */false,
- /* requiresCell= */true,
- /* hasMonetaryCost= */false,
- /* supportsAltitude= */false,
- /* supportsSpeed= */false,
- /* supportsBearing= */false,
- Criteria.POWER_HIGH,
- Criteria.ACCURACY_FINE);
- mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true);
-
- mTimer.schedule(new TimerTask() {
- @Override
- public void run() {
- updateMockLocation();
- }
- }, 0, 1000);
-
- mBinder = new IAccessLocationOnCommand.Stub() {
- public void accessLocation() {
- mLocationManager.requestSingleUpdate(
- TEST_PROVIDER, mLocationListener, Looper.getMainLooper());
- }
- };
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
- mTimer.cancel();
- mLocationManager.removeTestProvider(TEST_PROVIDER);
return true;
}
-
- @Override
- public void onLocationChanged(Location location) {
- }
-
- @Override
- public void onStatusChanged(String provider, int status,
- Bundle extras) {
- }
-
- @Override
- public void onProviderEnabled(String provider) {
- }
-
- @Override
- public void onProviderDisabled(String provider) {
- }
-
}
diff --git a/tests/cts/permission/permissionTestUtilLib/src/android/permission/cts/PermissionUtils.java b/tests/cts/permission/permissionTestUtilLib/src/android/permission/cts/PermissionUtils.java
index aabdd8565..55c2d9f31 100644
--- a/tests/cts/permission/permissionTestUtilLib/src/android/permission/cts/PermissionUtils.java
+++ b/tests/cts/permission/permissionTestUtilLib/src/android/permission/cts/PermissionUtils.java
@@ -384,7 +384,7 @@ public class PermissionUtils {
simulateReboot(packageName, intentAction, broadcastReceiver);
while ((System.currentTimeMillis() - startTime) < timeout
- && !jobStatus.contains("waiting")) {
+ && !isJobScheduled(jobStatus)) {
String cmd =
"cmd jobscheduler get-job-state -u " + Process.myUserHandle().getIdentifier()
+ " " + packageName + " " + jobId;
@@ -396,11 +396,16 @@ public class PermissionUtils {
// ignore interrupt
}
}
- if (!jobStatus.contains("waiting")) {
+ if (!isJobScheduled(jobStatus)) {
throw new IllegalStateException("The job didn't get scheduled in time.");
}
}
+ private static boolean isJobScheduled(String jobStatus) throws Exception {
+ return jobStatus.contains("waiting") || jobStatus.contains("pending")
+ || jobStatus.contains("ready") || jobStatus.contains("active");
+ }
+
private static void simulateReboot(@NonNull String packageName, @NonNull String intentAction,
@NonNull String broadcastReceiver) {
Intent jobSetupReceiverIntent = new Intent(intentAction);
diff --git a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
index ff333c6a0..145936382 100644
--- a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
+++ b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
@@ -22,6 +22,10 @@ import android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_S
import android.app.Instrumentation
import android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
import android.companion.virtual.VirtualDeviceManager.VirtualDevice
+import android.companion.virtual.VirtualDeviceParams
+import android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM
+import android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT
+import android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME
@@ -33,10 +37,7 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build
import android.os.UserHandle
import android.permission.PermissionManager
-import android.permission.flags.Flags
import android.platform.test.annotations.AppModeFull
-import android.platform.test.annotations.RequiresFlagsDisabled
-import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.virtualdevice.cts.common.VirtualDeviceRule
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -66,18 +67,25 @@ class DevicePermissionsTest {
private lateinit var permissionManager: PermissionManager
@get:Rule
- var mVirtualDeviceRule = VirtualDeviceRule.withAdditionalPermissions(
+ var mVirtualDeviceRule =
+ VirtualDeviceRule.withAdditionalPermissions(
Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS,
Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
- Manifest.permission.GET_RUNTIME_PERMISSIONS
+ Manifest.permission.GET_RUNTIME_PERMISSIONS,
)
@Rule @JvmField val mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@Before
fun setup() {
- virtualDevice = mVirtualDeviceRule.createManagedVirtualDevice()
+ virtualDevice =
+ mVirtualDeviceRule.createManagedVirtualDevice(
+ // Without custom audio policy, the RECORD_AUDIO permission won't be device aware.
+ VirtualDeviceParams.Builder()
+ .setDevicePolicy(POLICY_TYPE_AUDIO, DEVICE_POLICY_CUSTOM)
+ .build()
+ )
virtualDeviceContext = defaultDeviceContext.createDeviceContext(virtualDevice.deviceId)
permissionManager = virtualDeviceContext.getSystemService(PermissionManager::class.java)!!
persistentDeviceId = virtualDevice.persistentDeviceId!!
@@ -89,43 +97,47 @@ class DevicePermissionsTest {
runShellCommandOrThrow("pm uninstall $TEST_PACKAGE_NAME")
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testDeviceAwareRuntimePermissionIsGranted() {
- grantPermissionAndAssertGranted(Manifest.permission.CAMERA, virtualDeviceContext)
+ fun virtualDeviceDefaultPolicy_deviceAwarePermissionFallsBackToDefaultDevice() {
+ virtualDevice =
+ mVirtualDeviceRule.createManagedVirtualDevice(
+ // With default audio policy, the RECORD_AUDIO permission won't be device aware.
+ VirtualDeviceParams.Builder()
+ .setDevicePolicy(POLICY_TYPE_AUDIO, DEVICE_POLICY_DEFAULT)
+ .build()
+ )
+ virtualDeviceContext = defaultDeviceContext.createDeviceContext(virtualDevice.deviceId)
+
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, defaultDeviceContext)
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
- @RequiresFlagsDisabled(Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED)
@Test
- fun testDeviceAwareRuntimePermissionGrantIsInherited() {
- grantPermissionAndAssertGranted(Manifest.permission.CAMERA, defaultDeviceContext)
+ fun virtualDeviceCustomPolicy_deviceAwarePermissionGrantedOnVirtualDevice() {
+ // When a device aware permission is granted on the default device, it's not automatically
+ // granted on the virtual device.
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, defaultDeviceContext)
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
- assertPermission(Manifest.permission.CAMERA, PERMISSION_GRANTED, virtualDeviceContext)
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
}
@Test
- fun testNonDeviceAwareRuntimePermissionGrantIsInherited() {
+ fun normalPermissionGrantedOnDefaultDevice_isGrantedOnVirtualDevice() {
grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testDeviceAwareRuntimePermissionIsRevoked() {
+ fun virtualDeviceCustomPolicy_deviceAwarePermissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
revokePermissionAndAssertDenied(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
}
@Test
- fun testNonDeviceAwareRuntimePermissionIsRevokedForDefaultDevice() {
+ fun normalPermissionRevokedFromVirtualDevice_isAlsoRevokedOnDefaultDevice() {
grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
// Revoke call from virtualDeviceContext should revoke for default device as well.
@@ -134,24 +146,24 @@ class DevicePermissionsTest {
}
@Test
- fun testNormalPermissionGrantIsInherited() {
+ fun normalPermission_isInheritedOnVirtualDevice() {
assertPermission(Manifest.permission.INTERNET, PERMISSION_GRANTED, virtualDeviceContext)
}
@Test
- fun testSignaturePermissionGrantIsInherited() {
+ fun signaturePermission_isInheritedOnVirtualDevice() {
assertPermission(CUSTOM_SIGNATURE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
@Test
- fun testOneTimePermissionIsRevoked() {
+ fun virtualDeviceCustomPolicy_oneTimePermissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
virtualDeviceContext.packageManager.updatePermissionFlags(
DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
FLAG_PERMISSION_ONE_TIME,
FLAG_PERMISSION_ONE_TIME,
- UserHandle.of(virtualDeviceContext.userId)
+ UserHandle.of(virtualDeviceContext.userId),
)
permissionManager.startOneTimePermissionSession(
@@ -159,19 +171,15 @@ class DevicePermissionsTest {
0,
0,
IMPORTANCE_FOREGROUND,
- IMPORTANCE_FOREGROUND_SERVICE
+ IMPORTANCE_FOREGROUND_SERVICE,
)
eventually {
assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
}
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testRevokeSelfPermissionOnKill() {
+ fun virtualDeviceCustomPolicy_revokeSelfPermissionOnKill_permissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
revokeSelfPermission(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
@@ -180,105 +188,90 @@ class DevicePermissionsTest {
}
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testGrantAndRevokeDeviceAwarePermissionByPersistentDeviceId() {
- val deviceAwarePermission = DEVICE_AWARE_PERMISSION
-
+ fun usePersistentDeviceIdToRevokeDeviceAwarePermission_permissionIsRevoked() {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!
+ virtualDevice.persistentDeviceId!!,
)
)
.isEqualTo(PERMISSION_GRANTED)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
)
.isEqualTo(PERMISSION_DENIED)
permissionManager.revokeRuntimePermission(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
persistentDeviceId,
- "test"
+ "test",
)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!
+ virtualDevice.persistentDeviceId!!,
)
)
.isEqualTo(PERMISSION_DENIED)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testUpdateAndGetPermissionFlagsByPersistentDeviceId() {
- val deviceAwarePermission = DEVICE_AWARE_PERMISSION
+ fun updateAndGetPermissionFlagsByPersistentDeviceId() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
assertThat(
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
)
.isEqualTo(0)
permissionManager.updatePermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
persistentDeviceId,
flagMask,
- flag
+ flag,
)
assertThat(
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
)
.isEqualTo(FLAG_PERMISSION_USER_SET)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testAllPermissionStatesApiGrantForVirtualDevice() {
+ fun permissionGrantedOnVirtualDevice_reflectedInGetAllPermissionStatesApi() {
// Setting a flag explicitly so that the permission consistently stays in the state
permissionManager.updatePermissionFlags(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
- FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED
+ FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
)
assertThat(
@@ -291,7 +284,7 @@ class DevicePermissionsTest {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
- persistentDeviceId
+ persistentDeviceId,
)
val permissionStateMap =
@@ -312,7 +305,7 @@ class DevicePermissionsTest {
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
persistentDeviceId,
- "test"
+ "test",
)
assertThat(
@@ -323,12 +316,8 @@ class DevicePermissionsTest {
.isFalse()
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testAllPermissionStatesApiFlagsForVirtualDevice() {
+ fun setPermissionFlagOnVirtualDevice_reflectedInGetAllPermissionStatesApi() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
@@ -340,7 +329,7 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
persistentDeviceId,
flagMask,
- flag
+ flag,
)
assertThat(
@@ -349,7 +338,7 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- flag
+ flag,
)
)
.isTrue()
@@ -360,15 +349,14 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- FLAG_PERMISSION_USER_FIXED
+ FLAG_PERMISSION_USER_FIXED,
)
)
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiGrantForDefaultDevice() {
+ fun permissionGrantedOnDefaultDevice_reflectedInGetAllPermissionStatesApi() {
// Setting a flag explicitly so that the permission consistently stays in the state upon
// revoke
permissionManager.updatePermissionFlags(
@@ -376,13 +364,13 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
- FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED
+ FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
)
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
assertThat(
@@ -404,7 +392,7 @@ class DevicePermissionsTest {
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
- "test"
+ "test",
)
assertThat(
@@ -416,9 +404,8 @@ class DevicePermissionsTest {
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiFlagsForDefaultDevice() {
+ fun setPermissionFlagOnDefaultDevice_reflectedInGetAllPermissionStatesApi() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
@@ -434,7 +421,7 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
flagMask,
- flag
+ flag,
)
assertThat(
@@ -443,7 +430,7 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- flag
+ flag,
)
)
.isTrue()
@@ -454,19 +441,18 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- FLAG_PERMISSION_USER_FIXED
+ FLAG_PERMISSION_USER_FIXED,
)
)
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiThatNonDeviceAwareRuntimePermissionGrantIsNotInherited() {
+ fun getAllPermissionStates_normalPermissionIsNotInherited() {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
NON_DEVICE_AWARE_PERMISSION,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
assertThat(
@@ -501,7 +487,7 @@ class DevicePermissionsTest {
context.packageManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
permissionName,
- UserHandle.of(context.userId)
+ UserHandle.of(context.userId),
)
assertPermission(permissionName, PERMISSION_GRANTED, context)
}
@@ -510,18 +496,14 @@ class DevicePermissionsTest {
context.packageManager.revokeRuntimePermission(
TEST_PACKAGE_NAME,
permissionName,
- UserHandle.of(context.userId)
+ UserHandle.of(context.userId),
)
assertPermission(permissionName, PERMISSION_DENIED, context)
}
- private fun assertPermission(
- permissionName: String,
- permissionState: Int,
- context: Context,
- ) {
- assertThat(context.packageManager.checkPermission(permissionName, TEST_PACKAGE_NAME))
- .isEqualTo(permissionState)
+ private fun assertPermission(permissionName: String, permissionState: Int, context: Context) {
+ val uid = defaultDeviceContext.packageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0).uid
+ assertThat(context.checkPermission(permissionName, -1, uid)).isEqualTo(permissionState)
}
companion object {
diff --git a/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java b/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java
index 799a43fe3..024a89f2e 100644
--- a/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java
+++ b/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java
@@ -22,6 +22,7 @@ import static android.app.AppOpsManager.OPSTR_FINE_LOCATION;
import static android.app.AppOpsManager.OP_FLAGS_ALL_TRUSTED;
import static android.content.Context.BIND_AUTO_CREATE;
import static android.content.Context.BIND_NOT_FOREGROUND;
+import static android.location.Criteria.ACCURACY_FINE;
import static android.os.Process.myUserHandle;
import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS;
import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_INTERVAL_MILLIS;
@@ -37,6 +38,8 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.AppOpsManager;
@@ -48,9 +51,14 @@ import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
+import android.location.Criteria;
+import android.location.Location;
+import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
+import android.os.Bundle;
import android.os.IBinder;
+import android.os.Looper;
import android.os.Process;
import android.permission.cts.appthataccesseslocation.IAccessLocationOnCommand;
import android.platform.test.annotations.AppModeFull;
@@ -83,6 +91,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
/**
* Tests the {@code LocationAccessCheck} in permission controller.
@@ -135,6 +144,13 @@ public class LocationAccessCheckTest {
"com.android.permissioncontroller.permission.service"
+ ".LocationAccessCheck$SetupPeriodicBackgroundLocationAccessCheck";
+
+ /**
+ * The result of {@link #assumeCanGetFineLocation()}, so we don't have to run it over and over
+ * again.
+ */
+ private static Boolean sCanAccessFineLocation = null;
+
private static ServiceConnection sConnection;
private static IAccessLocationOnCommand sLocationAccessor;
@@ -395,7 +411,6 @@ public class LocationAccessCheckTest {
assertTrue(output.contains("Success"));
// Wait for user sensitive to be updated, which is checked by LocationAccessCheck.
Thread.sleep(5000);
- runShellCommand("cmd appops set " + TEST_APP_PKG + " android:mock_location allow");
}
public static void uninstallTestApp() {
@@ -464,6 +479,7 @@ public class LocationAccessCheckTest {
wakeUpAndDismissKeyguard();
bindService();
resetPermissionControllerBeforeEachTest();
+ assumeCanGetFineLocation();
}
/**
@@ -486,6 +502,46 @@ public class LocationAccessCheckTest {
}
/**
+ * Make sure fine location can be accessed at all.
+ */
+ public void assumeCanGetFineLocation() {
+ if (sCanAccessFineLocation == null) {
+ Criteria crit = new Criteria();
+ crit.setAccuracy(ACCURACY_FINE);
+
+ CountDownLatch locationCounter = new CountDownLatch(1);
+ sContext.getSystemService(LocationManager.class).requestSingleUpdate(crit,
+ new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ locationCounter.countDown();
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+ }, Looper.getMainLooper());
+
+
+ try {
+ sCanAccessFineLocation = locationCounter.await(LOCATION_ACCESS_TIMEOUT_MILLIS,
+ MILLISECONDS);
+ } catch (InterruptedException ignored) {
+ }
+ }
+
+ assumeTrue(sCanAccessFineLocation);
+ }
+
+ /**
* Reset the permission controllers state.
*/
private static void resetPermissionController() throws Throwable {
diff --git a/tests/cts/permissionpolicy/res/raw/android_manifest.xml b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
index 58d110f09..2547b9786 100644
--- a/tests/cts/permissionpolicy/res/raw/android_manifest.xml
+++ b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
@@ -154,6 +154,8 @@
<protected-broadcast android:name="android.app.backup.intent.INIT" />
<protected-broadcast android:name="android.bluetooth.intent.DISCOVERABLE_TIMEOUT" />
+ <protected-broadcast android:name="android.bluetooth.action.AUTO_ON_STATE_CHANGED" />
+ <protected-broadcast android:name="android.bluetooth.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.adapter.action.SCAN_MODE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.adapter.action.DISCOVERY_STARTED" />
@@ -177,6 +179,8 @@
<protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_REPLY" />
<protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_CANCEL" />
<protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_REQUEST" />
+ <protected-broadcast android:name="android.bluetooth.device.action.KEY_MISSING" />
+ <protected-broadcast android:name="android.bluetooth.device.action.ENCRYPTION_CHANGE" />
<protected-broadcast android:name="android.bluetooth.device.action.SDP_RECORD" />
<protected-broadcast android:name="android.bluetooth.device.action.BATTERY_LEVEL_CHANGED" />
<protected-broadcast android:name="android.bluetooth.device.action.REMOTE_ISSUE_OCCURRED" />
@@ -238,6 +242,8 @@
<protected-broadcast
android:name="android.bluetooth.avrcp-controller.profile.action.FOLDER_LIST" />
<protected-broadcast
+ android:name="android.bluetooth.avrcp-controller.profile.action.PLAYER_SETTING" />
+ <protected-broadcast
android:name="android.bluetooth.avrcp-controller.profile.action.TRACK_EVENT" />
<protected-broadcast
android:name="android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED" />
@@ -264,6 +270,7 @@
<protected-broadcast
android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.action.HAP_CONNECTION_STATE_CHANGED" />
+ <protected-broadcast android:name="android.bluetooth.action.HAP_DEVICE_AVAILABLE" />
<protected-broadcast android:name="android.bluetooth.action.LE_AUDIO_CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.action.LE_AUDIO_ACTIVE_DEVICE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.action.LE_AUDIO_CONF_CHANGED" />
@@ -297,6 +304,9 @@
<protected-broadcast android:name="android.hardware.display.action.WIFI_DISPLAY_STATUS_CHANGED" />
+ <protected-broadcast android:name="android.hardware.hdmi.action.OSD_MESSAGE" />
+ <protected-broadcast android:name="android.hardware.hdmi.action.ON_ACTIVE_SOURCE_RECOVERED_DISMISS_UI" />
+
<protected-broadcast android:name="android.hardware.usb.action.USB_STATE" />
<protected-broadcast android:name="android.hardware.usb.action.USB_PORT_CHANGED" />
<protected-broadcast android:name="android.hardware.usb.action.USB_PORT_COMPLIANCE_CHANGED" />
@@ -787,6 +797,7 @@
<protected-broadcast android:name="com.android.cellbroadcastreceiver.GET_LATEST_CB_AREA_INFO" />
<protected-broadcast android:name="com.android.internal.telephony.ACTION_CARRIER_CERTIFICATE_DOWNLOAD" />
<protected-broadcast android:name="com.android.internal.telephony.action.COUNTRY_OVERRIDE" />
+ <protected-broadcast android:name="com.android.internal.telephony.action.SILENCE_WIFI_CALLING_NOTIFICATION"/>
<protected-broadcast android:name="com.android.internal.telephony.OPEN_DEFAULT_SMS_APP" />
<protected-broadcast android:name="com.android.internal.telephony.ACTION_TEST_OVERRIDE_CARRIER_ID" />
<protected-broadcast android:name="android.telephony.action.SIM_CARD_STATE_CHANGED" />
@@ -837,6 +848,12 @@
<protected-broadcast android:name="android.intent.action.PROFILE_UNAVAILABLE" />
<protected-broadcast android:name="android.app.action.CONSOLIDATED_NOTIFICATION_POLICY_CHANGED" />
<protected-broadcast android:name="android.intent.action.MAIN_USER_LOCKSCREEN_KNOWLEDGE_FACTOR_CHANGED" />
+ <protected-broadcast android:name="com.android.uwb.uwbcountrycode.GEOCODE_RETRY" />
+ <protected-broadcast android:name="android.telephony.satellite.action.SATELLITE_SUBSCRIBER_ID_LIST_CHANGED" />
+ <protected-broadcast android:name="android.service.ondeviceintelligence.MODEL_LOADED" />
+ <protected-broadcast android:name="android.service.ondeviceintelligence.MODEL_UNLOADED" />
+ <protected-broadcast android:name="android.telephony.satellite.action.SATELLITE_START_NON_EMERGENCY_SESSION" />
+
<!-- ====================================================================== -->
<!-- RUNTIME PERMISSIONS -->
@@ -1077,6 +1094,62 @@
<permission android:name="android.permission.SATELLITE_COMMUNICATION"
android:protectionLevel="role|signature|privileged" />
+ <!-- ================================== -->
+ <!-- Permissions associated with picture and sound profiles -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- @FlaggedApi(android.media.tv.flags.Flags.FLAG_APPLY_PICTURE_PROFILES)
+ Allows an app to apply a {@link MediaQualityManager.PictureProfile} to a layer via
+ {@link MediaCodec.PARAMETER_KEY_PICTURE_PROFILE} and, additionally, system apps via
+ {@link SurfaceControl.Transaction#setPictureProfileHandle}.
+ -->
+ <permission android:name="android.permission.APPLY_PICTURE_PROFILE"
+ android:protectionLevel="normal"
+ android:featureFlag="android.media.tv.flags.apply_picture_profiles"/>
+
+ <!-- @hide
+ Allows MediaQualityService to observe any {@link MediaQualityManager.PictureProfile}
+ applied to any layer in the system by apps via
+ {@link MediaCodec.PARAMETER_KEY_PICTURE_PROFILE} and by system apps via
+ {@link SurfaceControl.Transaction#setPictureProfileHandle}.
+ -->
+ <permission android:name="android.permission.OBSERVE_PICTURE_PROFILES"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="android.media.tv.flags.apply_picture_profiles"/>
+
+ <!--
+ @SystemApi
+ @FlaggedApi("android.media.tv.flags.media_quality_fw")
+ Allows an application to access its picture profile from the media quality database.
+ <p> Protection level: signature|privileged|vendor privileged
+ @hide
+ -->
+ <permission android:name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE"
+ android:protectionLevel="signature|privileged|vendorPrivileged"
+ android:featureFlag="android.media.tv.flags.media_quality_fw"/>
+
+ <!--
+ @SystemApi
+ @FlaggedApi("android.media.tv.flags.media_quality_fw")
+ Allows an application to access its sound profile from the media quality database.
+ <p> Protection level: signature|privileged|vendor privileged
+ @hide
+ -->
+ <permission android:name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE"
+ android:protectionLevel="signature|privileged|vendorPrivileged"
+ android:featureFlag="android.media.tv.flags.media_quality_fw"/>
+
+ <!--
+ @FlaggedApi(android.media.tv.flags.Flags.FLAG_MEDIA_QUALITY_FW)
+ Allows an application to read the aggregated color zones on the screen for use cases like
+ TV ambient backlight usages.
+ <p> Protection level: normal
+ -->
+ <permission android:name="android.permission.READ_COLOR_ZONES"
+ android:protectionLevel="normal"
+ android:featureFlag="android.media.tv.flags.media_quality_fw"/>
+
<!-- ====================================================================== -->
<!-- Permissions for accessing external storage -->
<!-- ====================================================================== -->
@@ -1492,8 +1565,8 @@
android:description="@string/permdesc_readBasicPhoneState"
android:protectionLevel="normal" />
- <!-- Allows read access to the device's phone number(s). This is a subset of the capabilities
- granted by {@link #READ_PHONE_STATE} but is exposed to instant applications.
+ <!-- Allows read access to the device's phone number(s),
+ which is exposed to instant applications.
<p>Protection level: dangerous-->
<permission android:name="android.permission.READ_PHONE_NUMBERS"
android:permissionGroup="android.permission-group.UNDEFINED"
@@ -2424,7 +2497,7 @@
android:label="@string/permlab_nearby_wifi_devices"
android:protectionLevel="dangerous" />
- <!-- Required to be able to range to devices using any ranging technology.
+ <!-- Required to be able to range to devices using generic ranging module.
@FlaggedApi("android.permission.flags.ranging_permission_enabled")
<p>Protection level: dangerous -->
<permission android:name="android.permission.RANGING"
@@ -2432,7 +2505,7 @@
android:description="@string/permdesc_ranging"
android:label="@string/permlab_ranging"
android:protectionLevel="dangerous"
- android:featureFlag="android.permission.flags.ranging_permission_enabled" />
+ android:featureFlag="android.permission.flags.ranging_permission_enabled"/>
<!-- @SystemApi @TestApi Allows an application to suspend other apps, which will prevent the
user from using them until they are unsuspended.
@@ -2603,7 +2676,7 @@
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!-- @SystemApi Allows access to remove an account.
- @FlaggedApi("android.app.admin.flags.split_create_managed_profile_enabled")
+ @FlaggedApi(android.app.admin.flags.Flags.FLAG_SPLIT_CREATE_MANAGED_PROFILE_ENABLED)
<p>Not for use by third-party applications.
@hide -->
<permission android:name="android.permission.REMOVE_ACCOUNTS"
@@ -2611,7 +2684,7 @@
android:featureFlag="android.app.admin.flags.split_create_managed_profile_enabled" />
<!-- @SystemApi Allows access to copy an account to another user.
- @FlaggedApi("android.app.admin.flags.split_create_managed_profile_enabled")
+ @FlaggedApi(android.app.admin.flags.Flags.FLAG_SPLIT_CREATE_MANAGED_PROFILE_ENABLED)
<p>Not for use by third-party applications.
@hide -->
<permission android:name="android.permission.COPY_ACCOUNTS"
@@ -2660,7 +2733,7 @@
<!-- @SystemApi Allows access to perform vendor effects in the vibrator.
<p>Protection level: signature
- @FlaggedApi("android.os.vibrator.vendor_vibration_effects")
+ @FlaggedApi(android.os.vibrator.Flags.FLAG_VENDOR_VIBRATION_EFFECTS)
@hide
-->
<permission android:name="android.permission.VIBRATE_VENDOR_EFFECTS"
@@ -2669,8 +2742,8 @@
<!-- @SystemApi Allows access to start a vendor vibration session.
<p>Protection level: signature
- @FlaggedApi("android.os.vibrator.vendor_vibration_effects")
- @hide
+ @FlaggedApi(android.os.vibrator.Flags.FLAG_VENDOR_VIBRATION_EFFECTS)
+ @hide
-->
<permission android:name="android.permission.START_VIBRATION_SESSIONS"
android:protectionLevel="signature|privileged"
@@ -3315,16 +3388,20 @@
<permission android:name="android.permission.INTERACT_ACROSS_PROFILES"
android:protectionLevel="signature|appop" />
- <!-- Allows applications to access profiles with ACCESS_HIDDEN_PROFILES user property
- <p>Protection level: normal
- @FlaggedApi("android.multiuser.enable_permission_to_access_hidden_profiles") -->
+ <!-- Allows applications to access profiles with
+ {@code android.content.pm.UserProperties#PROFILE_API_VISIBILITY_HIDDEN} user property, e.g.
+ {@link android.os.UserManager#USER_TYPE_PROFILE_PRIVATE}.
+ <p>Protection level: normal
+ @FlaggedApi("android.multiuser.enable_permission_to_access_hidden_profiles") -->
<permission android:name="android.permission.ACCESS_HIDDEN_PROFILES"
android:label="@string/permlab_accessHiddenProfile"
android:description="@string/permdesc_accessHiddenProfile"
android:protectionLevel="normal" />
- <!-- @SystemApi @hide Allows privileged applications to get details about hidden profile
- users.
+ <!-- @SystemApi @hide Allows privileged applications to get details about profiles with
+ {@code android.content.pm.UserProperties#PROFILE_API_VISIBILITY_HIDDEN} user property, e.g.
+ {@link android.os.UserManager#USER_TYPE_PROFILE_PRIVATE}. Removes extra requirements such
+ as having {@link android.app.role.RoleManager#ROLE_HOME} role for LauncherApps APIs.
@FlaggedApi("android.multiuser.enable_permission_to_access_hidden_profiles") -->
<permission
android:name="android.permission.ACCESS_HIDDEN_PROFILES_FULL"
@@ -3388,13 +3465,18 @@
<!-- Allows an application to manage device policy relating to time.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
- APIs protected by this permission on users different to the calling user.-->
+ APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_TIME"
android:protectionLevel="internal|role" />
<!-- Allows an application to set the grant state of runtime permissions on packages.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS"
android:protectionLevel="internal|role" />
@@ -3402,6 +3484,8 @@
<!-- Allows an application to manage the identity of the managing organization.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY"
android:protectionLevel="internal|role" />
@@ -3410,6 +3494,8 @@
active policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE"
android:protectionLevel="internal|role" />
@@ -3417,6 +3503,8 @@
<!-- Allows an application to manage backup service policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE"
android:protectionLevel="internal|role" />
@@ -3424,6 +3512,8 @@
<!-- Allows an application to manage lock task policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK"
android:protectionLevel="internal|role" />
@@ -3431,6 +3521,8 @@
<!-- Allows an application to manage policy regarding modifying applications.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL"
android:protectionLevel="internal|role" />
@@ -3438,6 +3530,8 @@
<!-- Allows an application to manage installing from unknown sources policy.
<p>MANAGE_SECURITY_CRITICAL_DEVICE_POLICY_ACROSS_USERS is required to call APIs protected
by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES"
android:protectionLevel="internal|role" />
@@ -3445,6 +3539,8 @@
<!-- Allows an application to manage application restrictions.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS"
android:protectionLevel="internal|role" />
@@ -3452,6 +3548,8 @@
<!-- Allows an application to manage calling policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_CALLS"
android:protectionLevel="internal|role" />
@@ -3459,6 +3557,8 @@
<!-- Allows an application to manage debugging features policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES"
android:protectionLevel="internal|role" />
@@ -3466,6 +3566,8 @@
<!-- Allows an application to manage policy preventing users from modifying users.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS"
android:protectionLevel="internal|role" />
@@ -3473,6 +3575,8 @@
<!-- Allows an application to manage safe boot policy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT"
android:protectionLevel="internal|role" />
@@ -3481,6 +3585,8 @@
enable and disable the microphone.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MICROPHONE"
android:protectionLevel="internal|role" />
@@ -3489,6 +3595,8 @@
enable and disable the camera.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_CAMERA"
android:protectionLevel="internal|role" />
@@ -3496,6 +3604,8 @@
<!-- Allows an application to manage policy related to keyguard.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_KEYGUARD"
android:protectionLevel="internal|role" />
@@ -3503,6 +3613,8 @@
<!-- Allows an application to set policy related to account management.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT"
android:protectionLevel="internal|role" />
@@ -3510,6 +3622,8 @@
<!-- Allows an application to set policy related to hiding and suspending packages.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE"
android:protectionLevel="internal|role" />
@@ -3518,17 +3632,24 @@
challenge on current user.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD"
android:protectionLevel="internal|role" />
- <!-- Allows an application to set policy related to the status bar.-->
+ <!-- Allows an application to set policy related to the status bar.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR"
android:protectionLevel="internal|role" />
<!-- Allows an application to set policy related to bluetooth.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH"
android:protectionLevel="internal|role" />
@@ -3536,6 +3657,8 @@
<!-- Allows an application to set policy related to fun.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_FUN"
android:protectionLevel="internal|role" />
@@ -3543,6 +3666,8 @@
<!-- Allows an application to set policy related to airplane mode.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE"
android:protectionLevel="internal|role" />
@@ -3550,6 +3675,8 @@
<!-- Allows an application to set policy related to mobile networks.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK"
android:protectionLevel="internal|role" />
@@ -3557,6 +3684,8 @@
<!-- Allows an application to set policy related to physical media.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA"
android:protectionLevel="internal|role" />
@@ -3564,6 +3693,8 @@
<!-- Allows an application to set policy related to sms.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SMS"
android:protectionLevel="internal|role" />
@@ -3571,6 +3702,8 @@
<!-- Allows an application to set policy related to usb file transfers.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER"
android:protectionLevel="internal|role" />
@@ -3578,6 +3711,8 @@
<!-- Allows an application to set policy related to lock credentials.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS"
android:protectionLevel="internal|role" />
@@ -3585,6 +3720,8 @@
<!-- Allows an application to set policy related to Wifi.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_WIFI"
android:protectionLevel="internal|role" />
@@ -3592,6 +3729,8 @@
<!-- Allows an application to set policy related to screen capture.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE"
android:protectionLevel="internal|role" />
@@ -3599,6 +3738,8 @@
<!-- Allows an application to set policy related to input methods.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS"
android:protectionLevel="internal|role" />
@@ -3607,6 +3748,8 @@
private DNS.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS"
android:protectionLevel="internal|role" />
@@ -3614,6 +3757,8 @@
<!-- Allows an application to set policy related to the default sms application.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS"
android:protectionLevel="internal|role" />
@@ -3621,6 +3766,8 @@
<!-- Allows an application to set policy related to profiles.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PROFILES"
android:protectionLevel="internal|role" />
@@ -3629,6 +3776,8 @@
cross-profile copy and paste).
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION"
android:protectionLevel="internal|role" />
@@ -3636,6 +3785,8 @@
<!-- Allows an application to set policy related to VPNs.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_VPN"
android:protectionLevel="internal|role" />
@@ -3643,6 +3794,8 @@
<!-- Allows an application to set policy related to audio output.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT"
android:protectionLevel="internal|role" />
@@ -3650,6 +3803,8 @@
<!-- Allows an application to set policy related to the display.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_DISPLAY"
android:protectionLevel="internal|role" />
@@ -3657,6 +3812,8 @@
<!-- Allows an application to set policy related to location.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCATION"
android:protectionLevel="internal|role" />
@@ -3664,6 +3821,8 @@
<!-- Allows an application to set policy related to factory reset.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET"
android:protectionLevel="internal|role" />
@@ -3671,6 +3830,8 @@
<!-- Allows an application to set policy related to the wallpaper.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_WALLPAPER"
android:protectionLevel="internal|role" />
@@ -3678,6 +3839,8 @@
<!-- Allows an application to set policy related to the usage of the contents of the screen.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT"
android:protectionLevel="internal|role" />
@@ -3685,6 +3848,8 @@
<!-- Allows an application to set policy related to system dialogs.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS"
android:protectionLevel="internal|role" />
@@ -3692,6 +3857,8 @@
<!-- Allows an application to set policy related to users running in the background.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND"
android:protectionLevel="internal|role" />
@@ -3699,6 +3866,8 @@
<!-- Allows an application to set policy related to printing.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PRINTING"
android:protectionLevel="internal|role" />
@@ -3707,12 +3876,16 @@
nearby streaming).
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION"
android:protectionLevel="internal|role" />
<!-- Allows an application to set policy related to <a
href="https://www.threadgroup.org">Thread</a> network.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
@FlaggedApi("com.android.net.thread.platform.flags.thread_user_restriction_enabled")
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_THREAD_NETWORK"
@@ -3720,6 +3893,8 @@
<!-- Allows an application to set policy related to sending assist content to a
privileged app such as the Assistant app.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ASSIST_CONTENT"
android:protectionLevel="internal|role" />
@@ -3727,6 +3902,8 @@
<!-- Allows an application to set policy related to windows.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_WINDOWS"
android:protectionLevel="internal|role" />
@@ -3734,6 +3911,8 @@
<!-- Allows an application to set policy related to locale.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCALE"
android:protectionLevel="internal|role" />
@@ -3741,6 +3920,8 @@
<!-- Allows an application to set policy related to autofill.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_AUTOFILL"
android:protectionLevel="internal|role" />
@@ -3748,6 +3929,8 @@
<!-- Allows an application to set policy related to users.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_USERS"
android:protectionLevel="internal|role" />
@@ -3755,6 +3938,8 @@
<!-- Allows an application to set policy related to certificates.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES"
android:protectionLevel="internal|role" />
@@ -3762,6 +3947,8 @@
<!-- Allows an application to set policy related to override APNs.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN"
android:protectionLevel="internal|role" />
@@ -3769,6 +3956,8 @@
<!-- Allows an application to set policy related to security logging.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING"
android:protectionLevel="internal|role" />
@@ -3783,6 +3972,8 @@
<!-- Allows an application to set policy related to system updates.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES"
android:protectionLevel="internal|role" />
@@ -3790,6 +3981,8 @@
<!-- Allows an application query system updates.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES"
android:protectionLevel="internal|role" />
@@ -3797,6 +3990,8 @@
<!-- Allows an application to set policy related to private DNS.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS"
android:protectionLevel="internal|role" />
@@ -3804,6 +3999,8 @@
<!-- Allows an application to set policy related to settings.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SETTINGS"
android:protectionLevel="internal|role" />
@@ -3811,17 +4008,24 @@
<!-- Allows an application to set policy related to network logging.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING"
android:protectionLevel="internal|role" />
- <!-- Allows an application to set policy related to usb data signalling.-->
+ <!-- Allows an application to set policy related to usb data signalling.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING"
android:protectionLevel="internal|role" />
<!-- Allows an application to set policy related to suspending personal apps.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS"
android:protectionLevel="internal|role" />
@@ -3829,13 +4033,17 @@
<!-- Allows an application to set policy related to keeping uninstalled packages.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is
required to call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES"
android:protectionLevel="internal|role" />
<!-- Allows an application to manage policy related to accessibility.
- <p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
- APIs protected by this permission on users different to the calling user.
+ <p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to
+ call APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY"
android:protectionLevel="internal|role" />
@@ -3843,6 +4051,8 @@
<!-- Allows an application to manage policy related to common criteria mode.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE"
android:protectionLevel="internal|role" />
@@ -3850,6 +4060,8 @@
<!-- Allows an application to manage policy related to metered data.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_METERED_DATA"
android:protectionLevel="internal|role" />
@@ -3857,6 +4069,8 @@
<!-- Allows an application to set a network-independent global HTTP proxy.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_PROXY"
android:protectionLevel="internal|role" />
@@ -3864,6 +4078,8 @@
<!-- Allows an application to request bugreports with user consent.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_BUGREPORT"
android:protectionLevel="internal|role" />
@@ -3871,6 +4087,8 @@
<!-- Allows an application to manage policy related to application user data.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA"
android:protectionLevel="internal|role" />
@@ -3879,6 +4097,8 @@
permission.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCK"
android:protectionLevel="internal|role" />
@@ -3894,6 +4114,8 @@
<!-- Allows an application to manage policy related to system apps.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS"
android:protectionLevel="internal|role" />
@@ -3901,16 +4123,23 @@
<!-- Allows an application to manage policy related to wiping data.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS} is required to call
APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA"
android:protectionLevel="internal|role" />
<!-- Allows an application to manage policy related to the Memory Tagging Extension (MTE).
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MTE"
android:protectionLevel="internal|role" />
- <!-- Allows an application to manage policy related to device identifiers. -->
+ <!-- Allows an application to manage policy related to device identifiers.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS"
android:protectionLevel="internal|role" />
@@ -3921,46 +4150,62 @@
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_CONTENT_PROTECTION"
android:protectionLevel="internal|role" />
- <!-- Allows an application to manage policy related to executing app functions.
+ <!-- Allows an application to manage policy related to AppFunctions.
<p>Protection level: internal|role
@FlaggedApi(android.app.appfunctions.flags.Flags.FLAG_ENABLE_APP_FUNCTION_MANAGER)
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_APP_FUNCTIONS"
- android:protectionLevel="internal|role"
- android:featureFlag="android.app.appfunctions.flags.enable_app_function_manager" />
+ android:featureFlag="android.app.appfunctions.flags.enable_app_function_manager"
+ android:protectionLevel="internal|role" />
<!-- Allows an application to set policy related to subscriptions downloaded by an admin.
<p>{@link Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL} is required to call
- APIs protected by this permission on users different to the calling user.
+ APIs protected by this permission on users different to the calling user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
-->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MANAGED_SUBSCRIPTIONS"
android:protectionLevel="internal|role" />
- <!-- Allows an application to manage policy related to block package uninstallation. -->
+ <!-- Allows an application to manage policy related to block package uninstallation.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL"
android:protectionLevel="internal|role" />
- <!-- Allows an application to manage policy related to camera toggle. -->
+ <!-- Allows an application to manage policy related to camera toggle.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_CAMERA_TOGGLE"
android:protectionLevel="internal|role" />
- <!-- Allows an application to manage policy related to microphone toggle. -->
+ <!-- Allows an application to manage policy related to microphone toggle.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE"
android:protectionLevel="internal|role" />
<!-- Allows an application to set device policies outside the current user
that are critical for securing data within the current user.
<p>Holding this permission allows the use of other held MANAGE_DEVICE_POLICY_*
- permissions across all users on the device provided they are required for securing data
- within the current user.-->
+ permissions across all users on the device provided they are required for securing data
+ within the current user.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL"
android:protectionLevel="internal|role" />
<!-- Allows an application to set device policies outside the current user
that are required for securing device ownership without accessing user data.
<p>Holding this permission allows the use of other held MANAGE_DEVICE_POLICY_*
- permissions across all users on the device provided they do not grant access to user
- data. -->
+ permissions across all users on the device provided they do not grant access to user data.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS"
android:protectionLevel="internal|role" />
@@ -3968,7 +4213,10 @@
<p>Fuller form of {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS}
that removes the restriction on accessing user data.
<p>Holding this permission allows the use of any other held MANAGE_DEVICE_POLICY_*
- permissions across all users on the device.-->
+ permissions across all users on the device.
+ <p>Protection level: internal|role
+ <p>Intended for use by the DEVICE_POLICY_MANAGEMENT role only.
+ -->
<permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL"
android:protectionLevel="internal|role" />
@@ -3987,19 +4235,24 @@
android:protectionLevel="signature|installer" />
<uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" />
- <!-- Allows an application to toggle the device's advanced protection mode status.
- @FlaggedApi("android.security.aapm_api")
+ <!-- Allows an application to modify the device's advanced protection mode status, and query
+ the list of enabled features
+ @FlaggedApi(android.security.Flags.FLAG_AAPM_API)
@SystemApi
@hide -->
<permission android:name="android.permission.MANAGE_ADVANCED_PROTECTION_MODE"
android:protectionLevel="signature|privileged"
android:featureFlag="android.security.aapm_api"/>
+ <uses-permission android:name="android.permission.MANAGE_ADVANCED_PROTECTION_MODE"
+ android:featureFlag="android.security.aapm_api"/>
<!-- Allows an application to query the device's advanced protection mode status.
- @FlaggedApi("android.security.aapm_api") -->
+ @FlaggedApi(android.security.Flags.FLAG_AAPM_API) -->
<permission android:name="android.permission.QUERY_ADVANCED_PROTECTION_MODE"
android:protectionLevel="normal"
android:featureFlag="android.security.aapm_api"/>
+ <uses-permission android:name="android.permission.QUERY_ADVANCED_PROTECTION_MODE"
+ android:featureFlag="android.security.aapm_api"/>
<!-- Allows an application to read the state of the IntrusionDetectionService
@FlaggedApi(android.security.Flags.FLAG_AFL_API)
@@ -4175,62 +4428,6 @@
android:protectionLevel="signature" />
<!-- ================================== -->
- <!-- Permissions associated with picture profiles and processing -->
- <!-- ================================== -->
- <eat-comment />
-
- <!-- @FlaggedApi(android.media.tv.flags.Flags.apply_picture_profiles)
- Allows an app to apply a {@link MediaQualityManager.PictureProfile} to a layer via
- {@link MediaCodec.PARAMETER_KEY_PICTURE_PROFILE} and, additionally, system apps via
- {@link SurfaceControl.Transaction#setPictureProfileHandle}.
- -->
- <permission android:name="android.permission.APPLY_PICTURE_PROFILE"
- android:protectionLevel="normal"
- android:featureFlag="android.media.tv.flags.apply_picture_profiles"/>
-
- <!-- @hide
- Allows MediaQualityManager to observe any {@link MediaQualityManager.PictureProfile}
- applied to any layer in the system by apps via
- {@link MediaCodec.PARAMETER_KEY_PICTURE_PROFILE} and by system apps via
- {@link SurfaceControl.Transaction#setPictureProfileHandle}.
- -->
- <permission android:name="android.permission.OBSERVE_PICTURE_PROFILES"
- android:protectionLevel="signature|privileged"
- android:featureFlag="android.media.tv.flags.apply_picture_profiles"/>
-
- <!--
- @SystemApi
- @FlaggedApi("android.media.tv.flags.media_quality_fw")
- Allows an application to access its picture profile from the media quality database.
- <p> Protection level: signature|privileged|vendor privileged
- @hide
- -->
- <permission android:name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE"
- android:protectionLevel="signature|privileged|vendorPrivileged"
- android:featureFlag="android.media.tv.flags.media_quality_fw"/>
-
- <!--
- @SystemApi
- @FlaggedApi("android.media.tv.flags.media_quality_fw")
- Allows an application to access its sound profile from the media quality database.
- <p> Protection level: signature|privileged|vendor privileged
- @hide
- -->
- <permission android:name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE"
- android:protectionLevel="signature|privileged|vendorPrivileged"
- android:featureFlag="android.media.tv.flags.media_quality_fw"/>
-
- <!--
- @FlaggedApi(android.media.tv.flags.Flags.FLAG_MEDIA_QUALITY_FW)
- Allows an application to read the aggregated color zones on the screen for use cases like
- TV ambient backlight usages.
- <p> Protection level: normal
- -->
- <permission android:name="android.permission.READ_COLOR_ZONES"
- android:protectionLevel="normal"
- android:featureFlag="android.media.tv.flags.media_quality_fw"/>
-
- <!-- ================================== -->
<!-- Permissions affecting the display of other applications -->
<!-- ================================== -->
<eat-comment />
@@ -4356,15 +4553,15 @@
<permission android:name="android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING"
android:protectionLevel="signature|privileged" />
- <!-- Allows application to request to stream sensor data such as camera, audio and IMU between
- an Android host and a nearby device
+ <!-- Allows application to request to stream content from an Android host to a nearby device
({@link android.companion.AssociationRequest#DEVICE_PROFILE_SENSOR_DEVICE_STREAMING})
by {@link android.companion.CompanionDeviceManager}.
<p>Not for use by third-party applications.
+ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ENABLE_LIMITED_VDM_ROLE)
-->
<permission android:name="android.permission.REQUEST_COMPANION_PROFILE_SENSOR_DEVICE_STREAMING"
android:protectionLevel="signature|privileged"
- android:featureFlag="android.companion.virtualdevice.flags.enable_limited_vdm_role"/>
+ android:featureFlag="android.companion.virtualdevice.flags.enable_limited_vdm_role" />
<!-- Allows application to request to be associated with a vehicle head unit capable of
automotive projection
@@ -4423,7 +4620,7 @@
to enter PiP when the user leaves the app.
This permission should only be used for certain PiP
<a href="{@docRoot}training/tv/get-started/multitasking#usage-types">usage types</a>.
- @FlaggedApi("android.app.enable_tv_implicit_enter_pip_restriction")
+ @FlaggedApi(android.app.Flags.FLAG_ENABLE_TV_IMPLICIT_ENTER_PIP_RESTRICTION)
-->
<permission android:name="android.permission.TV_IMPLICIT_ENTER_PIP"
android:protectionLevel="normal"
@@ -4891,7 +5088,7 @@
<permission android:name="android.permission.REQUEST_UNIQUE_ID_ATTESTATION"
android:protectionLevel="signature" />
- <!-- Allows the caller to bind with Remote Key Provisioning service.
+ <!-- Allows an application to use the RemoteKeyProvisioningService.
@hide -->
<permission android:name="android.permission.BIND_RKP_SERVICE"
android:protectionLevel="signature" />
@@ -5033,6 +5230,182 @@
android:protectionLevel="signature|privileged" />
<!-- ==================================== -->
+ <!-- Permissions for XR perception data -->
+ <!-- ==================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that are associated with accessing XR
+ tracked information about the person using the device and the
+ environment around them.
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission-group android:name="android.permission-group.XR_TRACKING"
+ android:label="@string/permgrouplab_xr_tracking"
+ android:description="@string/permgroupdesc_xr_tracking"
+ android:priority="100"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get approximate eye gaze.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.EYE_TRACKING_COARSE"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:label="@string/permlab_eye_tracking_coarse"
+ android:description="@string/permdesc_eye_tracking_coarse"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get face tracking data.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.FACE_TRACKING"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:label="@string/permlab_face_tracking"
+ android:description="@string/permdesc_face_tracking"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get hand tracking data.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.HAND_TRACKING"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:label="@string/permlab_hand_tracking"
+ android:description="@string/permdesc_hand_tracking"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get data derived by sensing the
+ user's environment.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.SCENE_UNDERSTANDING_COARSE"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:description="@string/permdesc_scene_understanding_coarse"
+ android:label="@string/permlab_scene_understanding_coarse"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Used for permissions that are associated with accessing
+ particularly sensitive XR tracking data.
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission-group android:name="android.permission-group.XR_TRACKING_SENSITIVE"
+ android:label="@string/permgrouplab_xr_tracking_sensitive"
+ android:description="@string/permgroupdesc_xr_tracking_sensitive"
+ android:priority="100"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get precise eye gaze data.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.EYE_TRACKING_FINE"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:label="@string/permlab_eye_tracking_fine"
+ android:description="@string/permdesc_eye_tracking_fine"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get head tracking data. Unmanaged
+ activities (OpenXR activities with the manifest property
+ "android.window.PROPERTY_XR_ACTIVITY_START_MODE" set to
+ "XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED") do not require
+ this permission to get head tracking data.
+
+ {@see https://developer.android.com/develop/xr/get-started#property_activity_xr_start_mode_property}
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.HEAD_TRACKING"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:label="@string/permlab_head_tracking"
+ android:description="@string/permdesc_head_tracking"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to get highly precise data derived by sensing the
+ user's environment, such as a depth map.
+
+ <p>Protection level: dangerous
+
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES) -->
+ <permission android:name="android.permission.SCENE_UNDERSTANDING_FINE"
+ android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:description="@string/permdesc_scene_understanding_fine"
+ android:label="@string/permlab_scene_understanding_fine"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to trigger Eye Calibration, which
+ calibrates for IPD (inter-pupillary distance) adjustment and
+ eye tracking.
+
+ <p>Protection level: signature|privileged
+
+ @SystemApi
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ @hide -->
+ <permission android:name="android.permission.EYE_CALIBRATION"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to trigger Face Tracking Calibration.
+
+ <p>Protection level: signature|privileged
+
+ @SystemApi
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ @hide -->
+ <permission android:name="android.permission.FACE_TRACKING_CALIBRATION"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to import an anchor created and
+ exported by another application.
+
+ <p>Protection level: signature|privileged
+
+ @SystemApi
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ @hide -->
+ <permission android:name="android.permission.IMPORT_XR_ANCHOR"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- Allows an application to access XR tracking data while in the
+ background. Without this permission, XR tracking data such as
+ head tracking, hand tracking, eye tracking, or face tracking
+ is only available to an activity it is in the
+ foreground. With this permission, such data is also available
+ to services and to activities that are in the background.
+
+ <p>This permission must be granted in addition to the
+ corresponding permission such as {@link #HEAD_TRACKING} or
+ {@link #FACE_TRACKING} for the data being accessed.
+
+ <p>Protection level: normal|appop
+
+ @SystemApi
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ @hide -->
+ <permission android:name="android.permission.XR_TRACKING_IN_BACKGROUND"
+ android:protectionLevel="normal|appop"
+ android:description="@string/permdesc_xr_tracking_in_background"
+ android:label="@string/permlab_xr_tracking_in_background"
+ android:featureFlag="android.xr.xr_manifest_entries" />
+
+ <!-- ==================================== -->
<!-- Private permissions -->
<!-- ==================================== -->
<eat-comment />
@@ -5209,10 +5582,9 @@
<permission android:name="android.permission.CHANGE_ACCESSIBILITY_VOLUME"
android:protectionLevel="signature" />
- <!-- @FlaggedApi("com.android.server.accessibility.motion_event_observing")
- @hide
- @TestApi
- Allows an accessibility service to observe motion events without consuming them. -->
+ <!-- @TestApi Allows an accessibility service to observe motion events
+ without consuming them.
+ @hide -->
<permission android:name="android.permission.ACCESSIBILITY_MOTION_EVENT_OBSERVING"
android:protectionLevel="signature" />
@@ -5457,17 +5829,17 @@
<p>Intended for use by ROLE_ASSISTANT, VDM, and signature apps only.
-->
<permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
- android:protectionLevel="signature|module|role"
- android:featureFlag="!android.security.subscribe_to_keyguard_locked_state_perm_priv_flag"/>
+ android:protectionLevel="signature|module|role"
+ android:featureFlag="!android.security.subscribe_to_keyguard_locked_state_perm_priv_flag"/>
<!-- Allows an application to subscribe to device locked and keyguard locked (i.e., showing)
state.
- <p>Protection level: signature|module|role|privileged
+ <p>Protection level: signature|privileged|module|role
<p>Intended for use by ROLE_ASSISTANT, VDM, and signature / privileged apps only.
-->
<permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
- android:protectionLevel="signature|module|role|privileged"
- android:featureFlag="android.security.subscribe_to_keyguard_locked_state_perm_priv_flag"/>
+ android:protectionLevel="signature|privileged|module|role"
+ android:featureFlag="android.security.subscribe_to_keyguard_locked_state_perm_priv_flag"/>
<!-- Must be required by a {@link android.service.autofill.AutofillService},
to ensure that only the system can bind to it.
@@ -5641,6 +6013,17 @@
<permission android:name="android.permission.BIND_TV_INPUT"
android:protectionLevel="signature|privileged" />
+ <!-- This permission is required among systems services to always keep the
+ binding with TvInputManagerService.
+ <p>This should only be used by the OEM TvInputService.
+ @FlaggedApi("android.media.tv.flags.tif_unbind_inactive_tis")
+ <p>Protection level: signature|privileged|vendorPrivileged
+ @hide
+ -->
+ <permission android:name="android.permission.ALWAYS_BOUND_TV_INPUT"
+ android:protectionLevel="signature|privileged|vendorPrivileged"
+ android:featureFlag="android.media.tv.flags.tif_unbind_inactive_tis"/>
+
<!-- Must be required by a {@link android.media.tv.interactive.TvInteractiveAppService}
to ensure that only the system can bind to it.
<p>Protection level: signature|privileged
@@ -5698,15 +6081,6 @@
<permission android:name="android.permission.TUNER_RESOURCE_ACCESS"
android:protectionLevel="signature|privileged|vendorPrivileged" />
- <!-- This permission is required among systems services to always keep the
- binding with TvInputManagerService.
- <p>Protection level: signature|privileged|vendorPrivileged
- <p>This should only be used by the OEM TvInputService.
- @hide -->
- <permission android:name="android.permission.ALWAYS_BOUND_TV_INPUT"
- android:protectionLevel="signature|privileged|vendorPrivileged"
- android:featureFlag="android.media.tv.flags.tif_unbind_inactive_tis"/>
-
<!-- @SystemApi This permission is required by Media Resource Manager Service when
system services create MediaCodecs on behalf of other processes and apps.
<p>Protection level: signature|privileged|vendorPrivileged
@@ -5755,17 +6129,6 @@
<permission android:name="android.permission.LOCK_DEVICE"
android:protectionLevel="signature|privileged" />
- <!-- @SystemApi
- @FlaggedApi(android.security.Flags.FLAG_SECURE_LOCKDOWN)
- Allows an application to lock down the device into an enhanced security state.
- <p>Not for use by third-party applications.
- <p>Protection level: signature|privileged
- @hide
- -->
- <permission android:name="android.permission.MANAGE_SECURE_LOCK_DEVICE"
- android:protectionLevel="signature|privileged"
- android:featureFlag="android.security.secure_lockdown" />
-
<!-- @SystemApi Allows low-level access to setting the orientation (actually
rotation) of the screen.
<p>Not for use by third-party applications.
@@ -6145,7 +6508,7 @@
<!-- Allows an application to subscribe to notifications about the nearby devices' presence
status change base on the UUIDs.
<p>Not for use by third-party applications.</p>
- @FlaggedApi("android.companion.flags.device_presence")
+ @FlaggedApi("android.companion.device_presence")
-->
<permission android:name="android.permission.REQUEST_OBSERVE_DEVICE_UUID_PRESENCE"
android:protectionLevel="signature|privileged" />
@@ -6158,8 +6521,7 @@
android:protectionLevel="normal" />
<!-- Allows an application to send and receive messages via CDM transports.
- @hide
- -->
+ @hide -->
<permission android:name="android.permission.USE_COMPANION_TRANSPORTS"
android:protectionLevel="signature" />
@@ -6377,10 +6739,10 @@
android:protectionLevel="signature|privileged|role" />
<!-- @SystemApi Allows an application to bypass concurrency restrictions while
- recording audio. For example, apps with this permission can continue to record
- while a voice call is active.</p>
- @FlaggedApi(android.media.audio.Flags.FLAG_CONCURRENT_AUDIO_RECORD_BYPASS_PERMISSION)
- @hide -->
+ recording audio. For example, apps with this permission can continue to record
+ while a voice call is active.</p>
+ @FlaggedApi(android.media.audio.Flags.FLAG_CONCURRENT_AUDIO_RECORD_BYPASS_PERMISSION)
+ @hide -->
<permission android:name="android.permission.BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION"
android:featureFlag="android.media.audio.concurrent_audio_record_bypass_permission"
android:protectionLevel="signature|privileged" />
@@ -7071,9 +7433,8 @@
android:protectionLevel="signature" />
<!-- Allows an application to set the advanced features on BiometricDialog (SystemUI), including
- logo, logo description.
+ logo, logo description, and content view with more options button.
<p>Not for use by third-party applications.
- @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt")
-->
<permission android:name="android.permission.SET_BIOMETRIC_DIALOG_ADVANCED"
android:protectionLevel="signature|privileged" />
@@ -7398,7 +7759,17 @@
@FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
@hide -->
<permission android:name="android.permission.READ_BLOCKED_NUMBERS"
- android:protectionLevel="signature" />
+ android:protectionLevel="signature"
+ android:featureFlag="!android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
+
+ <!-- Allows the holder to read blocked numbers. See
+ {@link android.provider.BlockedNumberContract}.
+ @SystemApi
+ @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
+ @hide -->
+ <permission android:name="android.permission.READ_BLOCKED_NUMBERS"
+ android:protectionLevel="signature|role"
+ android:featureFlag="android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
<!-- Allows the holder to write blocked numbers. See
{@link android.provider.BlockedNumberContract}.
@@ -7503,9 +7874,9 @@
<permission android:name="android.permission.ACCESS_SMARTSPACE"
android:protectionLevel="signature|privileged|development" />
- <!-- @SystemApi Allows an application to access the contextual search
- service as a client.
- @hide <p>Not for use by third-party applications.</p> -->
+ <!-- @SystemApi Allows an application to start a contextual search.
+ @FlaggedApi("android.app.contextualsearch.flags.enable_service")
+ @hide <p>Not for use by third-party applications.</p> -->
<permission android:name="android.permission.ACCESS_CONTEXTUAL_SEARCH"
android:protectionLevel="signature|privileged"
android:featureFlag="android.app.contextualsearch.flags.enable_service"/>
@@ -7722,7 +8093,8 @@
<permission android:name="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE"
android:protectionLevel="signature" />
- <!-- Must be required by an {@link android.service.watchdog.ExplicitHealthCheckService} to
+ <!-- @FlaggedApi(android.crashrecovery.flags.Flags.FLAG_ENABLE_CRASHRECOVERY) @SystemApi
+ Must be required by an {@link android.service.watchdog.ExplicitHealthCheckService} to
ensure that only the system can bind to it.
@hide This is not a third-party API (intended for OEMs and system apps).
-->
@@ -7848,7 +8220,7 @@
<!-- @SystemApi Allows an application to access shared libraries.
@hide -->
<permission android:name="android.permission.ACCESS_SHARED_LIBRARIES"
- android:protectionLevel="signature|installer|role"
+ android:protectionLevel="signature|installer|role"
android:featureFlag="android.content.pm.sdk_dependency_installer" />
<!-- @SystemApi Permission held by the system to allow binding to the dependency installer role
@@ -7942,8 +8314,6 @@
android:protectionLevel="signature|role"/>
<!-- Allows an application to create displays that mirror other displays' content.
- <p>Not for use by third-party applications.
- <p>Protection level: internal|role
@FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ENABLE_LIMITED_VDM_ROLE)
@hide @SystemApi -->
<permission android:name="android.permission.ADD_MIRROR_DISPLAY"
@@ -8127,12 +8497,8 @@
<!-- Allows an application to perform actions on behalf of users inside of
applications.
<p>This permission is currently only granted to privileged system apps.
- <p>Apps contributing app functions can opt to disallow callers with this permission,
- limiting to only callers with {@link android.permission.EXECUTE_APP_FUNCTIONS_TRUSTED}
- instead.
- <p>Protection level: internal|role
- @hide
- @FlaggedApi(android.app.appfunctions.flags.Flags.FLAG_ENABLE_APP_FUNCTION_MANAGER) -->
+ <p>Protection level: internal|privileged
+ @FlaggedApi(android.app.appfunctions.flags.Flags.FLAG_ENABLE_APP_FUNCTION_MANAGER) -->
<permission android:name="android.permission.EXECUTE_APP_FUNCTIONS"
android:featureFlag="android.app.appfunctions.flags.enable_app_function_manager"
android:protectionLevel="internal|privileged" />
@@ -8259,7 +8625,7 @@
<permission android:name="android.permission.MONITOR_STICKY_MODIFIER_STATE"
android:protectionLevel="signature" />
- <!-- Allows low-level access to manage key gestures
+ <!-- Allows low-level access to manage key gestures.
<p>Not for use by third-party applications.
@hide -->
<permission android:name="android.permission.MANAGE_KEY_GESTURES"
@@ -8271,8 +8637,8 @@
<p>Protection level: signature
@hide -->
<permission android:name="android.permission.LISTEN_FOR_KEY_ACTIVITY"
- android:protectionLevel="signature"
- android:featureFlag="com.android.hardware.input.key_event_activity_detection"/>
+ android:protectionLevel="signature"
+ android:featureFlag="com.android.hardware.input.key_event_activity_detection" />
<uses-permission android:name="android.permission.HANDLE_QUERY_PACKAGE_RESTART" />
@@ -8494,16 +8860,8 @@
<permission android:name="android.permission.OVERRIDE_SYSTEM_KEY_BEHAVIOR_IN_FOCUSED_WINDOW"
android:protectionLevel="signature|privileged" />
- <!-- Allows internal applications to restrict display modes
- <p>Protection level: signature
- @FlaggedApi("com.android.server.display.feature.flags.enable_restrict_display_modes")
- @hide
- -->
- <permission android:name="android.permission.RESTRICT_DISPLAY_MODES"
- android:protectionLevel="signature" />
-
<!-- @hide @SystemApi
- @FlaggedApi("com.android.server.notification.flags.redact_otp_notifications_from_untrusted_listeners")
+ @FlaggedApi("android.view.flags.sensitive_content_app_protection_api")
Allows apps with a NotificationListenerService to receive notifications with sensitive
information
<p>Apps with a NotificationListenerService without this permission will not be able
@@ -8543,6 +8901,14 @@
<permission android:name="android.permission.EMERGENCY_INSTALL_PACKAGES"
android:protectionLevel="signature|privileged"/>
+ <!-- Allows internal applications to restrict display modes
+ <p>Not for use by third-party applications.
+ <p>Protection level: signature
+ @hide
+ -->
+ <permission android:name="android.permission.RESTRICT_DISPLAY_MODES"
+ android:protectionLevel="signature" />
+
<!-- Allows internal applications to override screen timeout temporarily
<p>Protection level: signature
<p>Not for use by third-party applications.
@@ -8561,9 +8927,38 @@
<permission android:name="android.permission.SETUP_FSVERITY"
android:protectionLevel="signature|privileged"/>
+ <!-- @SystemApi
+ @FlaggedApi(android.security.Flags.FLAG_SECURE_LOCKDOWN)
+ Allows an application to lock down the device into an enhanced security state.
+ <p>Not for use by third-party applications.
+ <p>Protection level: signature|privileged
+ @hide
+ -->
+ <permission android:name="android.permission.MANAGE_SECURE_LOCK_DEVICE"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="android.security.secure_lockdown" />
+
+ <!-- Allows app to enter trade-in-mode.
+ <p>Protection level: signature
+ @hide
+ -->
+ <permission android:name="android.permission.ENTER_TRADE_IN_MODE"
+ android:protectionLevel="signature|privileged"
+ android:featureFlag="com.android.tradeinmode.flags.enable_trade_in_mode" />
+
+ <!-- @SystemApi
+ @FlaggedApi(com.android.art.flags.Flags.FLAG_EXECUTABLE_METHOD_FILE_OFFSETS)
+ Ability to read program metadata and attach dynamic instrumentation.
+ <p>Protection level: signature
+ @hide
+ -->
+ <permission android:name="android.permission.DYNAMIC_INSTRUMENTATION"
+ android:protectionLevel="signature"
+ android:featureFlag="com.android.art.flags.executable_method_file_offsets" />
+
<!--
@SystemApi
- @FlaggedApi("android.content.pm.uid_based_provider_lookup")
+ @FlaggedApi(android.content.pm.Flags.FLAG_UID_BASED_PROVIDER_LOOKUP)
Allows an app to resolve components (e.g ContentProviders) on behalf of
other UIDs
<p>Protection level: signature|privileged
@@ -8572,7 +8967,8 @@
<permission
android:name="android.permission.RESOLVE_COMPONENT_FOR_UID"
android:protectionLevel="signature|privileged"
- android:featureFlag="android.content.pm.uid_based_provider_lookup"/>
+ android:featureFlag="android.content.pm.uid_based_provider_lookup" />
+ <uses-permission android:name="android.permission.RESOLVE_COMPONENT_FOR_UID" />
<!--
@TestApi
@@ -8585,24 +8981,6 @@
<permission android:name="android.permission.RESERVED_FOR_TESTING_SIGNATURE"
android:protectionLevel="signature"/>
- <!-- Allows app to enter trade-in-mode.
- <p>Protection level: signature|privileged
- @hide
- -->
- <permission android:name="android.permission.ENTER_TRADE_IN_MODE"
- android:protectionLevel="signature|privileged"
- android:featureFlag="com.android.tradeinmode.flags.enable_trade_in_mode" />
-
- <!-- @SystemApi
- @FlaggedApi(com.android.art.flags.Flags.FLAG_EXECUTABLE_METHOD_FILE_OFFSETS)
- Ability to read program metadata and attach dynamic instrumentation.
- <p>Protection level: signature
- @hide
- -->
- <permission android:name="android.permission.DYNAMIC_INSTRUMENTATION"
- android:protectionLevel="signature"
- android:featureFlag="com.android.art.flags.executable_method_file_offsets" />
-
<!-- @SystemApi
@FlaggedApi("android.media.tv.flags.kids_mode_tvdb_sharing")
This permission is required when accessing information related to
@@ -8617,13 +8995,13 @@
<!-- @SystemApi
@FlaggedApi("android.permission.flags.text_classifier_choice_api_enabled")
- This permission is required to access the specific text classifier you need from the
+ This permission is required to access the specific text classifier from the
TextClassificationManager.
- <p>Protection level: signature|role
+ <p>Protection level: signature|role|privileged
@hide
-->
<permission android:name="android.permission.ACCESS_TEXT_CLASSIFIER_BY_TYPE"
- android:protectionLevel="signature|role"
+ android:protectionLevel="signature|role|privileged"
android:featureFlag="android.permission.flags.text_classifier_choice_api_enabled"/>
<!-- Attribution for Geofencing service. -->
@@ -8679,7 +9057,7 @@
</activity>
<activity android:name="com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity"
android:exported="false"
- android:theme="@style/Theme.DeviceDefault.Resolver"
+ android:theme="@style/AccessibilityButtonChooserDialog"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true"
android:documentLaunchMode="never"
@@ -8783,7 +9161,7 @@
<activity android:name="android.accounts.GrantCredentialsPermissionActivity"
android:excludeFromRecents="true"
android:exported="true"
- android:theme="@style/Theme.DeviceDefault.Light.DialogWhenLarge"
+ android:theme="@style/GrantCredentialsPermissionActivity"
android:process=":ui"
android:visibleToInstantApps="true">
</activity>
@@ -8859,9 +9237,11 @@
android:process=":ui">
</activity>
+ <!-- BlockedAppStreamingActivity is launched as the system user. -->
<activity android:name="com.android.internal.app.BlockedAppStreamingActivity"
android:theme="@style/Theme.Dialog.Confirmation"
android:excludeFromRecents="true"
+ android:showForAllUsers="true"
android:process=":ui">
</activity>
@@ -9053,6 +9433,11 @@
android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
+ <service android:name="com.android.server.memory.ZramMaintenance"
+ android:exported="false"
+ android:permission="android.permission.BIND_JOB_SERVICE" >
+ </service>
+
<service android:name="com.android.server.ZramWriteback"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" >
@@ -9207,22 +9592,23 @@
android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
- <service android:name="android.app.ecm.EnhancedConfirmationCallTrackerService"
- android:permission="android.permission.BIND_INCALL_SERVICE"
- android:featureFlag="android.permission.flags.enhanced_confirmation_in_call_apis_enabled"
- android:exported="true">
+ <service android:name="com.android.server.companion.datatransfer.contextsync.CallMetadataSyncInCallService"
+ android:permission="android.permission.BIND_INCALL_SERVICE"
+ android:enabled="@bool/config_enableContextSyncInCall"
+ android:exported="true">
<meta-data android:name="android.telecom.INCLUDE_SELF_MANAGED_CALLS"
- android:value="true" />
+ android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>
- <service android:name="com.android.server.companion.datatransfer.contextsync.CallMetadataSyncInCallService"
- android:permission="android.permission.BIND_INCALL_SERVICE"
- android:exported="true">
+ <service android:name="com.android.ecm.EnhancedConfirmationCallTrackerService"
+ android:permission="android.permission.BIND_INCALL_SERVICE"
+ android:featureFlag="android.permission.flags.enhanced_confirmation_in_call_apis_enabled"
+ android:exported="true">
<meta-data android:name="android.telecom.INCLUDE_SELF_MANAGED_CALLS"
- android:value="true" />
+ android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
index ccc5a0a5e..f52e32344 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
@@ -38,6 +38,7 @@ import android.provider.DeviceConfig
import android.provider.Settings
import android.text.Spanned
import android.text.style.ClickableSpan
+import android.util.Log
import android.view.View
import android.view.accessibility.AccessibilityNodeInfo
import androidx.test.uiautomator.By
@@ -51,6 +52,7 @@ import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity
import com.android.compatibility.common.util.SystemUtil.eventually
import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity
+import com.android.compatibility.common.util.UiDumpUtils
import com.android.modules.utils.build.SdkLevel
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
@@ -64,6 +66,7 @@ import org.junit.Before
abstract class BaseUsePermissionTest : BasePermissionTest() {
companion object {
+ const val LOG_TAG = "BaseUsePermissionTest"
const val APP_APK_NAME_31 = "CtsUsePermissionApp31.apk"
const val APP_APK_NAME_31_WITH_ASL = "CtsUsePermissionApp31WithAsl.apk"
const val APP_APK_NAME_LATEST = "CtsUsePermissionAppLatest.apk"
@@ -791,6 +794,9 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
)
if (timeoutOccurred) {
+ val uiDump = StringBuilder()
+ UiDumpUtils.dumpNodes(uiDump)
+ Log.w(LOG_TAG, "Timed out waiting for window transition, UI dump: $uiDump")
throw RuntimeException("Timed out waiting for window transition.")
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
index d2086a06a..4781fb895 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
@@ -72,16 +72,20 @@ class LocationAccuracyTest : BaseUsePermissionTest() {
}
@Test
+ @Ignore("b/396478581")
+ // Ignore this test until the cause of flakiness is identified.
fun testPrecisePermissionIsGranted() {
installPackage(APP_APK_PATH_31)
assertAppHasPermission(ACCESS_FINE_LOCATION, false)
assertAppHasPermission(ACCESS_COARSE_LOCATION, false)
assertAppHasPermission(ACCESS_BACKGROUND_LOCATION, false)
+ val waitForWindowTransition = SdkLevel.isAtLeastB();
requestAppPermissionsAndAssertResult(
ACCESS_FINE_LOCATION to true,
- ACCESS_COARSE_LOCATION to true
+ ACCESS_COARSE_LOCATION to true,
+ waitForWindowTransition = waitForWindowTransition
) {
clickPreciseLocationRadioButton()
clickCoarseLocationRadioButton()
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
index ae6e33b2a..e4ee52186 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
@@ -53,7 +53,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
By.hasChild(
- By.text("You gave $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You gave $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -69,7 +70,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
By.hasChild(
- By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -86,11 +88,13 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
assertNull(
waitFindObjectOrNull(
- By.hasChild(By.text("You denied $APP_PACKAGE_NAME access to location")
- .displayId(displayId))
+ By.hasChild(
+ By.text("You denied $APP_PACKAGE_NAME access to location")
+ .displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId),
- ASSERT_ABSENT_SELECTOR_TIMEOUT_MS
+ ASSERT_ABSENT_SELECTOR_TIMEOUT_MS,
)
)
}
@@ -105,8 +109,10 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
- By.hasChild(By.text("You gave $APP_PACKAGE_NAME access to location")
- .displayId(displayId))
+ By.hasChild(
+ By.text("You gave $APP_PACKAGE_NAME access to location")
+ .displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -121,7 +127,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
pressBack()
waitFindObject(
By.hasChild(
- By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -132,7 +139,7 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
SystemUtil.runWithShellPermissionIdentity {
context.startActivity(
Intent(PermissionManager.ACTION_REVIEW_PERMISSION_DECISIONS).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
)
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
index 751c56b3c..9a12765c0 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
@@ -41,8 +41,7 @@ import org.junit.Test
@FlakyTest
class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
- @get:Rule
- val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+ @get:Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@get:Rule
val deviceConfigPermissionRationaleEnabled =
@@ -50,7 +49,7 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
context,
DeviceConfig.NAMESPACE_PRIVACY,
PERMISSION_RATIONALE_ENABLED,
- true.toString()
+ true.toString(),
)
@Before
@@ -248,8 +247,10 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
}
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName =
- "VanillaIceCream")
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
@RequiresFlagsEnabled(android.content.pm.Flags.FLAG_ASL_IN_APK_APP_METADATA_SOURCE)
@Test
fun requestCoarseLocationPerm_hasAslInApk_packageSourceUnspecified() {
@@ -262,8 +263,10 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
}
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName =
- "VanillaIceCream")
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
@RequiresFlagsEnabled(android.content.pm.Flags.FLAG_ASL_IN_APK_APP_METADATA_SOURCE)
@Test
fun requestCoarseLocationPerm_hasAslInApk_packageSourceStore() {
@@ -276,8 +279,10 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
}
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName =
- "VanillaIceCream")
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
@RequiresFlagsEnabled(android.content.pm.Flags.FLAG_ASL_IN_APK_APP_METADATA_SOURCE)
@Test
fun requestCoarseLocationPerm_hasAslInApk_packageSourceLocalFile() {
@@ -290,8 +295,10 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
}
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName =
- "VanillaIceCream")
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
@RequiresFlagsEnabled(android.content.pm.Flags.FLAG_ASL_IN_APK_APP_METADATA_SOURCE)
@Test
fun requestCoarseLocationPerm_hasAslInApk_packageSourceDownloadedFile() {
@@ -304,8 +311,10 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
}
}
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName =
- "VanillaIceCream")
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
@RequiresFlagsEnabled(android.content.pm.Flags.FLAG_ASL_IN_APK_APP_METADATA_SOURCE)
@Test
fun requestCoarseLocationPerm_hasAslInApk_packageSourceOther() {
@@ -338,7 +347,6 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
requestAppPermissionsForNoResult(ACCESS_FINE_LOCATION) {
clickPermissionRationaleViewInGrantDialog()
assertPermissionRationaleDialogIsVisible(true)
- assertPermissionRationaleContainerOnGrantDialogIsVisible(false)
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
index c2b5447dd..17cef0e31 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
@@ -16,6 +16,7 @@
package android.permissionui.cts
+import android.content.pm.PackageManager
import android.health.connect.HealthPermissions
import android.os.Build
import android.permission.flags.Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED
@@ -25,6 +26,7 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider
import androidx.test.filters.FlakyTest
import androidx.test.filters.SdkSuppress
import org.junit.Assume.assumeFalse
+import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -33,6 +35,12 @@ import org.junit.Test
@FlakyTest
class PermissionSplitTest : BaseUsePermissionTest() {
+ companion object {
+ @JvmStatic
+ private val supportHeartrate =
+ packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_HEART_RATE)
+ }
+
@Rule @JvmField val mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@Before
@@ -146,6 +154,7 @@ class PermissionSplitTest : BaseUsePermissionTest() {
@RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
@Test
fun testBodySensorSplitOnBaklava_splitToReadHeartRate() {
+ assumeTrue(supportHeartrate)
installPackage(APP_APK_PATH_30_WITH_BACKGROUND)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false)
assertAppHasPermission(HealthPermissions.READ_HEART_RATE, false)
@@ -195,6 +204,7 @@ class PermissionSplitTest : BaseUsePermissionTest() {
}
private fun testBodySensorPermissionSplitToBodySensorsBackground(expectSplit: Boolean) {
+ assumeTrue(supportHeartrate)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, false)
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
index 09941722b..4a95a962a 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
@@ -46,10 +46,12 @@ import org.junit.Assert.assertTrue
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.BeforeClass
+import org.junit.Ignore
import org.junit.Test
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake")
@FlakyTest
+@Ignore("b/393428835")
class PhotoPickerPermissionTest : BaseUsePermissionTest() {
companion object {
diff --git a/tests/cts/role/src/android/app/role/cts/RoleManagerSecurityTest.kt b/tests/cts/role/src/android/app/role/cts/RoleManagerSecurityTest.kt
new file mode 100644
index 000000000..59a8c21b2
--- /dev/null
+++ b/tests/cts/role/src/android/app/role/cts/RoleManagerSecurityTest.kt
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2025 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 android.app.role.cts
+
+import android.app.role.RoleManager
+import android.content.Context
+import android.os.Build
+import android.os.Process
+import android.os.UserHandle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import com.android.compatibility.common.util.SystemUtil
+import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CompletableFuture
+import java.util.concurrent.Executor
+import java.util.concurrent.TimeUnit
+import java.util.function.Consumer
+import org.junit.After
+import org.junit.Assert.fail
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/** Tests {@link RoleManager} security fixes. */
+@RunWith(AndroidJUnit4::class)
+class RoleManagerSecurityTest {
+ private var browserRoleHolder: String? = null
+
+ @Before
+ fun setUp() {
+ saveBrowserRoleHolder()
+ }
+
+ @After
+ fun tearDown() {
+ restoreBrowserRoleHolder()
+ }
+
+ private fun saveBrowserRoleHolder() {
+ val roleHolders: List<String> = getRoleHolders(RoleManager.ROLE_BROWSER, roleManager)
+ browserRoleHolder = if (roleHolders.isNotEmpty()) roleHolders[0] else null
+ }
+
+ private fun restoreBrowserRoleHolder() {
+ browserRoleHolder?.let { packageName ->
+ addRoleHolderAsUser(
+ RoleManager.ROLE_BROWSER,
+ packageName,
+ Process.myUserHandle(),
+ true,
+ roleManager,
+ context.mainExecutor,
+ )
+ }
+ }
+
+ private fun getRoleHolders(roleName: String, roleManager: RoleManager): List<String> {
+ return SystemUtil.callWithShellPermissionIdentity { roleManager.getRoleHolders(roleName) }
+ }
+
+ private fun addRoleHolderAsUser(
+ roleName: String,
+ packageName: String,
+ userHandle: UserHandle,
+ expectSuccess: Boolean,
+ roleManager: RoleManager,
+ executor: Executor,
+ ) {
+ val future = CallbackFuture()
+ SystemUtil.runWithShellPermissionIdentity {
+ roleManager.addRoleHolderAsUser(roleName, packageName, 0, userHandle, executor, future)
+ }
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isEqualTo(expectSuccess)
+ }
+
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.S,
+ maxSdkVersion = Build.VERSION_CODES.TIRAMISU,
+ )
+ @Test
+ fun cannotGetDefaultApplicationOnOlderSdk() {
+ assumeTrue(roleManager.isRoleAvailable(RoleManager.ROLE_BROWSER))
+ try {
+ roleManager.getDefaultApplication(RoleManager.ROLE_BROWSER)
+ } catch (e: NoSuchMethodError) {
+ // Expected when permission module hasn't been updated
+ } catch (e: IllegalStateException) {
+ // Expected when permission module has been updated, and SDK 33 or below
+ } catch (e: Throwable) {
+ fail("Missing patch for cveBugId = [379362792]")
+ }
+ }
+
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.S,
+ maxSdkVersion = Build.VERSION_CODES.TIRAMISU,
+ )
+ @Test
+ fun cannotSetDefaultApplicationOnOlderSdk() {
+ assumeTrue(roleManager.isRoleAvailable(RoleManager.ROLE_BROWSER))
+ val future = CallbackFuture()
+ try {
+ roleManager.setDefaultApplication(
+ RoleManager.ROLE_BROWSER,
+ APP_PACKAGE_NAME,
+ 0,
+ context.mainExecutor,
+ future,
+ )
+ future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
+ } catch (e: NoSuchMethodError) {
+ // Expected when permission module hasn't been updated
+ } catch (e: IllegalStateException) {
+ // Expected when permission module has been updated, and SDK 33 or below
+ } catch (e: Throwable) {
+ fail("Missing patch for cveBugId = [379362792]")
+ }
+ }
+
+ private class CallbackFuture : CompletableFuture<Boolean?>(), Consumer<Boolean?> {
+ override fun accept(successful: Boolean?) {
+ complete(successful)
+ }
+ }
+
+ companion object {
+ private const val TIMEOUT_MILLIS: Long = (15 * 1000).toLong()
+ private const val APP_PACKAGE_NAME: String = "android.app.role.cts.app"
+
+ private val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
+ private val roleManager: RoleManager = context.getSystemService(RoleManager::class.java)
+ }
+}
diff --git a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
index bf1e32676..5e61c66be 100644
--- a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
+++ b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
@@ -47,7 +47,6 @@ import android.os.Build;
import android.os.Process;
import android.os.UserHandle;
import android.permission.flags.Flags;
-import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -170,6 +169,9 @@ public class RoleManagerTest {
? By.text("Don\u2019t ask again")
: By.res("com.android.permissioncontroller:id/dont_ask_again");
+ private static final BySelector PERMISSION_APP_LABEL =
+ By.pkg(sPackageManager.getPermissionControllerPackageName()).text(APP_LABEL);
+
@Rule
public CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
@Rule
@@ -473,7 +475,7 @@ public class RoleManagerTest {
private void respondToRoleRequest(boolean allow)
throws InterruptedException, UiObjectNotFoundException {
if (allow) {
- waitFindObject(By.text(APP_LABEL)).click();
+ waitFindObject(PERMISSION_APP_LABEL).click();
}
Pair<Integer, Intent> result = clickButtonAndWaitForResult(allow);
int expectedResult = allow ? Activity.RESULT_OK : Activity.RESULT_CANCELED;
diff --git a/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt b/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
index 724549149..3e24d5025 100644
--- a/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
+++ b/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
@@ -25,18 +25,24 @@ import android.content.pm.PackageManager
import android.os.Build
import android.os.Process
import android.os.UserHandle
+import android.os.UserManager.DISALLOW_CONFIG_DEFAULT_APPS
import android.provider.Settings
+import android.util.Log
import android.util.Pair
import androidx.test.filters.SdkSuppress
import androidx.test.rule.ActivityTestRule
import androidx.test.uiautomator.By
+import com.android.bedstead.enterprise.annotations.EnsureDoesNotHaveUserRestriction
import com.android.bedstead.enterprise.annotations.EnsureHasNoWorkProfile
+import com.android.bedstead.enterprise.annotations.EnsureHasUserRestriction
import com.android.bedstead.enterprise.annotations.EnsureHasWorkProfile
import com.android.bedstead.enterprise.annotations.RequireRunOnWorkProfile
import com.android.bedstead.enterprise.workProfile
import com.android.bedstead.flags.annotations.RequireFlagsEnabled
import com.android.bedstead.harrier.BedsteadJUnit4
import com.android.bedstead.harrier.DeviceState
+import com.android.bedstead.harrier.UserType.INITIAL_USER
+import com.android.bedstead.harrier.UserType.WORK_PROFILE
import com.android.bedstead.multiuser.annotations.EnsureCanAddUser
import com.android.bedstead.multiuser.annotations.EnsureHasAdditionalUser
import com.android.bedstead.multiuser.annotations.EnsureHasPrivateProfile
@@ -49,6 +55,7 @@ import com.android.bedstead.nene.TestApis.context
import com.android.bedstead.nene.TestApis.permissions
import com.android.bedstead.nene.TestApis.users
import com.android.bedstead.nene.types.OptionalBoolean
+import com.android.bedstead.nene.userrestrictions.CommonUserRestrictions.DISALLOW_ADD_MANAGED_PROFILE
import com.android.bedstead.nene.users.UserReference
import com.android.bedstead.nene.users.UserType
import com.android.bedstead.permissions.CommonPermissions.INTERACT_ACROSS_USERS_FULL
@@ -62,13 +69,14 @@ import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.eventually
import com.android.compatibility.common.util.UiAutomatorUtils2.getUiDevice
import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject
+import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObjectOrNull
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import java.util.Objects
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
import java.util.function.Consumer
import org.junit.After
+import org.junit.Assert.assertNull
import org.junit.Assert.assertThrows
import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
@@ -88,16 +96,24 @@ class RoleManagerMultiUserTest {
ActivityTestRule(WaitForResultActivity::class.java)
@Before
- @Throws(java.lang.Exception::class)
fun setUp() {
assumeTrue(RoleManagerUtil.isCddCompliantScreenSize())
installAppForAllUsers()
+
+ // If "none" selected in test, ensure we re-enable fallback for other test runs
+ permissions().withPermission(MANAGE_ROLE_HOLDERS, INTERACT_ACROSS_USERS_FULL).use {
+ setRoleFallbackEnabledForAllUsers()
+ }
}
@After
- @Throws(java.lang.Exception::class)
fun tearDown() {
uninstallAppForAllUsers()
+
+ // If "none" selected in test, ensure we re-enable fallback for other test runs
+ permissions().withPermission(MANAGE_ROLE_HOLDERS, INTERACT_ACROSS_USERS_FULL).use {
+ setRoleFallbackEnabledForAllUsers()
+ }
}
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@@ -309,7 +325,7 @@ class RoleManagerMultiUserTest {
// initialUser needs to be not the targetUser
val targetActiveUser = users().current().userHandle()
val initialUser =
- if (Objects.equals(targetActiveUser, deviceState.initialUser().userHandle())) {
+ if (targetActiveUser == deviceState.initialUser().userHandle()) {
deviceState.workProfile().userHandle()
} else {
deviceState.initialUser().userHandle()
@@ -372,7 +388,7 @@ class RoleManagerMultiUserTest {
val initialUser = deviceState.workProfile().userHandle()
// setActiveUserForRole and getActiveUserForRole is used to ensure initial active users
// state and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
@@ -400,7 +416,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole is used to ensure addRoleHolderAsUser didn't set active user, and
// requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
}
@@ -465,6 +481,47 @@ class RoleManagerMultiUserTest {
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
}
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasWorkProfile
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun addRoleHolderAsUserReenablesFallbackOnProfileParent() {
+ // Set other user as active
+ val initialUserReference = deviceState.initialUser()
+ val initialUser = initialUserReference.userHandle()
+ roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialUser)
+
+ val profileParentRoleManager = getRoleManagerForUser(initialUserReference)
+ profileParentRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isFalse()
+
+ val targetActiveUser = deviceState.workProfile().userHandle()
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ targetActiveUser,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isTrue()
+ }
+
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@EnsureHasPermission(MANAGE_DEFAULT_APPLICATIONS)
@EnsureDoesNotHavePermission(INTERACT_ACROSS_USERS_FULL)
@@ -477,7 +534,7 @@ class RoleManagerMultiUserTest {
val initialUser = deviceState.workProfile().userHandle()
// setActiveUserForRole and getActiveUserForRole is used to ensure initial active users
// state and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
@@ -497,7 +554,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole is used to ensure setDefaultApplication didn't set active user,
// and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
}
@@ -559,11 +616,56 @@ class RoleManagerMultiUserTest {
eventually { assertExpectedProfileHasRoleUsingGetDefaultApplication(targetActiveUser) }
}
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(
+ INTERACT_ACROSS_USERS_FULL,
+ MANAGE_DEFAULT_APPLICATIONS,
+ MANAGE_ROLE_HOLDERS,
+ )
+ @EnsureHasWorkProfile
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun setDefaultApplicationReenablesFallbackOnProfileParent() {
+ // Set other user as active
+ val initialUserReference = deviceState.initialUser()
+ val initialUser = initialUserReference.userHandle()
+ roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialUser)
+
+ val profileParentRoleManager = getRoleManagerForUser(initialUserReference)
+ profileParentRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isFalse()
+
+ val future = CallbackFuture()
+ getRoleManagerForUser(deviceState.workProfile())
+ .setDefaultApplication(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isTrue()
+ }
+
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
@EnsureCanAddUser
@EnsureHasNoWorkProfile
@RequireRunOnPrimaryUser
+ @EnsureDoesNotHaveUserRestriction(DISALLOW_ADD_MANAGED_PROFILE)
@Test
@Throws(Exception::class)
fun ensureActiveUserSetToParentOnUserRemoved() {
@@ -1172,8 +1274,10 @@ class RoleManagerMultiUserTest {
}
}
- @RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
- com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED)
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
@EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
@EnsureHasWorkProfile
@RequireRunOnWorkProfile
@@ -1271,7 +1375,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1298,7 +1402,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1307,7 +1411,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1324,7 +1428,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1351,7 +1455,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1360,7 +1464,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1377,7 +1481,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1402,7 +1506,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(deviceState.initialUser().userHandle())
assertNoRoleHoldersUsingGetRoleHoldersAsUser()
@@ -1411,7 +1515,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1428,7 +1532,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1455,7 +1559,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1464,7 +1568,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1481,7 +1585,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1508,7 +1612,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1517,7 +1621,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1534,7 +1638,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1559,7 +1663,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(deviceState.initialUser().userHandle())
assertNoRoleHoldersUsingGetRoleHoldersAsUser()
@@ -1568,17 +1672,515 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = false)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppListAndOpenDefaultAppWhenBYODHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ context.startActivity(
+ Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+ waitFindObject(By.text(PROFILE_GROUP_EXCLUSIVITY_ROLE_SHORT_LABEL)).click()
+ getUiDevice().waitForIdle()
+
+ // CollapsingToolbar title can't be found by text, so using description instead.
+ waitFindObject(By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL))
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppListAndCannotOpenDefaultAppWhenHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ context.startActivity(
+ Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+ waitFindObject(By.text(PROFILE_GROUP_EXCLUSIVITY_ROLE_SHORT_LABEL)).click()
+ getUiDevice().waitForIdle()
+
+ // CollapsingToolbar title can't be found by text, so using description instead.
+ assertNull(
+ waitFindObjectOrNull(
+ By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = WORK_PROFILE)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppListAndCannotOpenDefaultAppWhenHasUserRestrictionOnWorkProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ context.startActivity(
+ Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+ waitFindObject(By.text(PROFILE_GROUP_EXCLUSIVITY_ROLE_SHORT_LABEL)).click()
+ getUiDevice().waitForIdle()
+
+ // CollapsingToolbar title can't be found by text, so using description instead.
+ assertNull(
+ waitFindObjectOrNull(
+ By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = false)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppDetailsAndSetDefaultAppWhenBYODHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-target selected first. Request exits early if user and package
+ // already the role holder
+ val initialActiveUser = deviceState.workProfile().userHandle()
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ initialActiveUser,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .putExtra(Intent.EXTRA_ROLE_NAME, PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+
+ val targetActiveUser = users().current().userHandle()
+ val targetAppLabel = "$APP_LABEL@${targetActiveUser.identifier}"
+ if (isWatch) {
+ waitFindObject(By.clickable(true).hasDescendant(By.text(targetAppLabel))).click()
+ waitFindObject(
+ By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel))
+ )
+ } else {
+ waitFindObject(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true))
+ .hasDescendant(By.text(targetAppLabel))
+ )
+ .click()
+ waitFindObject(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true).checked(true))
+ .hasDescendant(By.text(targetAppLabel))
+ )
+ }
+
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(targetActiveUser)
+ assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppDetailsAndCannotSetDefaultAppWhenHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-target selected first. Request exits early if user and package
+ // already the role holder
+ val initialActiveUser = deviceState.workProfile().userHandle()
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ initialActiveUser,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .putExtra(Intent.EXTRA_ROLE_NAME, PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+
+ val targetActiveUser = users().current().userHandle()
+ val targetAppLabel = "$APP_LABEL@${targetActiveUser.identifier}"
+ if (isWatch) {
+ waitFindObject(By.clickable(true).hasDescendant(By.text(targetAppLabel))).click()
+ } else {
+ waitFindObject(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true))
+ .hasDescendant(By.text(targetAppLabel))
+ )
+ .click()
+ }
+
+ if (isWatch) {
+ assertNull(
+ waitFindObjectOrNull(
+ By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+ } else {
+ assertNull(
+ waitFindObjectOrNull(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true).checked(true))
+ .hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+ }
+
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialActiveUser)
+ assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(initialActiveUser)
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = WORK_PROFILE)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun openDefaultAppDetailsAndCannotSetDefaultAppWhenHasUserRestrictionOnWorkProfile() {
+ try {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-target selected first. Request exits early if user and package
+ // already the role holder
+ val initialActiveUser = deviceState.workProfile().userHandle()
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ initialActiveUser,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .putExtra(Intent.EXTRA_ROLE_NAME, PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ )
+ getUiDevice().waitForIdle()
+
+ val targetActiveUser = users().current().userHandle()
+ val targetAppLabel = "$APP_LABEL@${targetActiveUser.identifier}"
+ if (isWatch) {
+ waitFindObject(By.clickable(true).hasDescendant(By.text(targetAppLabel))).click()
+ } else {
+ waitFindObject(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true))
+ .hasDescendant(By.text(targetAppLabel))
+ )
+ .click()
+ }
+
+ if (isWatch) {
+ assertNull(
+ waitFindObjectOrNull(
+ By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+ } else {
+ assertNull(
+ waitFindObjectOrNull(
+ By.clickable(true)
+ .hasDescendant(By.checkable(true).checked(true))
+ .hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
+ }
+
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialActiveUser)
+ assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(initialActiveUser)
+
+ pressBack()
+ pressBack()
+ } finally {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = false)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun requestRoleAllowedWhenBYODHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-primary selected first. Request exits early if user and package
+ // already the role holder
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ deviceState.workProfile().userHandle(),
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ }
+
+ requestRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+
+ val targetActiveUser = deviceState.initialUser().userHandle()
+ respondToRoleRequest(true, targetActiveUser)
+
+ // getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
+ // MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
+ // holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(targetActiveUser)
+ assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
+ }
+ } finally {
+ // clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+ }
+
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = INITIAL_USER)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun requestRoleDeniedWhenHasUserRestrictionOnPrimaryProfile() {
+ try {
+ // setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-primary selected first. Request exits early if user and package
+ // already the role holder
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ deviceState.workProfile().userHandle(),
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ }
+
+ requestRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ roleRequestNotShown()
+ } finally {
+ // clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
}
}
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasUserRestriction(value = DISALLOW_CONFIG_DEFAULT_APPS, onUser = WORK_PROFILE)
+ @EnsureHasWorkProfile(isOrganizationOwned = true)
+ @RequireRunOnPrimaryUser
+ @Test
@Throws(java.lang.Exception::class)
+ fun requestRoleDeniedWhenHasUserRestrictionOnWorkProfile() {
+ try {
+ // setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ // Set test default role holder. Ensures fallbacks to a default holder
+ setDefaultHoldersForTestForAllUsers()
+ setRoleVisibleForTestForAllUsers()
+
+ // Ensure non-primary selected first. Request exits early if user and package
+ // already the role holder
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ deviceState.workProfile().userHandle(),
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ }
+
+ requestRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ roleRequestNotShown()
+ } finally {
+ // clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
+ // INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
+ // role active user and role holder states
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
+ clearDefaultHoldersForTestForAllUsers()
+ clearRoleVisibleForTestForAllUsers()
+ }
+ }
+ }
+
private fun installAppForAllUsers() {
SystemUtil.runShellCommandOrThrow("pm install -r --user all $APP_APK_PATH")
- SystemUtil.waitForBroadcasts()
}
private fun uninstallAppForAllUsers() {
@@ -1605,8 +2207,7 @@ class RoleManagerMultiUserTest {
}
val result: Pair<Int, Intent?> = clickButtonAndWaitForResult(allow)
val expectedResult =
- if (allow && Objects.equals(targetActiveUser, users().instrumented().userHandle()))
- Activity.RESULT_OK
+ if (allow && targetActiveUser == users().instrumented().userHandle()) Activity.RESULT_OK
else Activity.RESULT_CANCELED
assertThat(result.first).isEqualTo(expectedResult)
@@ -1623,6 +2224,15 @@ class RoleManagerMultiUserTest {
return waitForResult()
}
+ private fun roleRequestNotShown() {
+ val requestRoleItem =
+ waitFindObjectOrNull(By.textStartsWith(APP_LABEL), IDLE_TIMEOUT_MILLIS)
+ assertNull(requestRoleItem)
+
+ val result: Pair<Int, Intent?> = waitForResult()
+ assertThat(result.first).isEqualTo(Activity.RESULT_CANCELED)
+ }
+
@Throws(InterruptedException::class)
private fun waitForResult(): Pair<Int, Intent?> {
return activityRule.getActivity().waitForActivityResult(TIMEOUT_MILLIS)
@@ -1646,9 +2256,9 @@ class RoleManagerMultiUserTest {
) {
for (userReference in users().profileGroup(deviceState.initialUser())) {
val user = userReference.userHandle()
- if (Objects.equals(user, expectedActiveUser)) {
- val roleHolders =
- roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
+ val roleHolders =
+ roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
+ if (user == expectedActiveUser) {
assertWithMessage(
"Expected user ${user.identifier} to have a role holder for " +
" $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME"
@@ -1667,9 +2277,7 @@ class RoleManagerMultiUserTest {
"Expected user ${user.identifier} to not have a role holder for" +
" $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME"
)
- .that(
- roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
- )
+ .that(roleHolders)
.isEmpty()
}
}
@@ -1681,7 +2289,7 @@ class RoleManagerMultiUserTest {
for (userReference in users().profileGroup(deviceState.initialUser())) {
val userRoleManager = getRoleManagerForUser(userReference)
val user = userReference.userHandle()
- if (Objects.equals(user, expectedActiveUser)) {
+ if (user == expectedActiveUser) {
assertWithMessage("Expected default application for user ${user.identifier}")
.that(
userRoleManager.getDefaultApplication(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
@@ -1701,7 +2309,7 @@ class RoleManagerMultiUserTest {
private fun setDefaultHoldersForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setDefaultHoldersForTest(
PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
listOf(APP_PACKAGE_NAME),
@@ -1712,7 +2320,7 @@ class RoleManagerMultiUserTest {
private fun clearDefaultHoldersForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setDefaultHoldersForTest(
PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
emptyList(),
@@ -1723,7 +2331,7 @@ class RoleManagerMultiUserTest {
private fun setRoleVisibleForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setRoleVisibleForTest(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, true)
}
}
@@ -1731,11 +2339,28 @@ class RoleManagerMultiUserTest {
private fun clearRoleVisibleForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setRoleVisibleForTest(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
}
}
+ private fun setRoleFallbackEnabledForAllUsers() {
+ for (userReference in users().profileGroup(users().current())) {
+ try {
+ val userRoleManager = getRoleManagerForUser(userReference)
+ userRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, true)
+ } catch (e: Exception) {
+ Log.w(
+ LOG_TAG,
+ "Encountered error setting fallback enabled for" +
+ " $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME@" +
+ "${userReference.userHandle().identifier}",
+ e,
+ )
+ }
+ }
+ }
+
private fun getRoleManagerForUser(user: UserReference): RoleManager {
val userContext = context().androidContextAsUser(user)
return userContext.getSystemService(RoleManager::class.java)
@@ -1748,9 +2373,14 @@ class RoleManagerMultiUserTest {
}
companion object {
+ private val LOG_TAG = RoleManagerMultiUserTest::class.java.simpleName
+
private const val TIMEOUT_MILLIS: Long = (15 * 1000).toLong()
+ private const val IDLE_TIMEOUT_MILLIS: Long = (2 * 1000).toLong()
private const val PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME =
RoleManager.ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY
+ private const val PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL =
+ "Default test profile group exclusive role app"
private const val PROFILE_GROUP_EXCLUSIVITY_ROLE_SHORT_LABEL =
"Test profile group exclusive role app"
private const val PRIVATE_PROFILE_TYPE_NAME = "android.os.usertype.profile.PRIVATE"
diff --git a/tests/cts/safetycenter/AndroidTest.xml b/tests/cts/safetycenter/AndroidTest.xml
index 6d8c3069c..ed161f0b6 100644
--- a/tests/cts/safetycenter/AndroidTest.xml
+++ b/tests/cts/safetycenter/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/functional/safetycenter/multiusers/AndroidTest.xml b/tests/functional/safetycenter/multiusers/AndroidTest.xml
index 20032357a..bfb7fdbf2 100644
--- a/tests/functional/safetycenter/multiusers/AndroidTest.xml
+++ b/tests/functional/safetycenter/multiusers/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/functional/safetycenter/safetycenteractivity/Android.bp b/tests/functional/safetycenter/safetycenteractivity/Android.bp
index ea5f9f286..2346a0d5f 100644
--- a/tests/functional/safetycenter/safetycenteractivity/Android.bp
+++ b/tests/functional/safetycenter/safetycenteractivity/Android.bp
@@ -29,6 +29,7 @@ android_test {
"src/**/*.kt",
],
static_libs: [
+ "aconfig_settingstheme_exported_flags_java_lib",
"androidx.test.rules",
"androidx.test.ext.junit",
"compatibility-device-preconditions",
diff --git a/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml b/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
index a1826653f..ee79dcd2a 100644
--- a/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
+++ b/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
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 09a32f058..fb577e8f6 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
@@ -21,6 +21,9 @@ import android.os.Build
import android.os.Build.VERSION_CODES.TIRAMISU
import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE
import android.os.Bundle
+import android.platform.test.annotations.RequiresFlagsDisabled
+import android.platform.test.flag.junit.CheckFlagsRule
+import android.platform.test.flag.junit.DeviceFlagsValueProvider
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
@@ -74,6 +77,7 @@ 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 com.android.settingslib.widget.theme.flags.Flags as SettingsThemeFlags
import java.util.regex.Pattern
import org.junit.After
import org.junit.Assume.assumeFalse
@@ -95,6 +99,8 @@ class SafetyCenterActivityTest {
@get:Rule(order = 2) val safetyCenterTestRule = SafetyCenterTestRule(safetyCenterTestHelper)
@get:Rule(order = 3) val disableAnimationRule = DisableAnimationRule()
@get:Rule(order = 4) val freezeRotationRule = FreezeRotationRule()
+ @get:Rule(order = 5)
+ val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@After
fun clearDataAfterTest() {
@@ -567,6 +573,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/398188361 - Update this for expressive theme
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun issueCard_noAttribution_hasProperContentDescriptions() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.issueOnlySourceNoGroupTitleConfig)
@@ -581,6 +589,8 @@ class SafetyCenterActivityTest {
@Test
@SdkSuppress(minSdkVersion = UPSIDE_DOWN_CAKE)
+ // TODO: b/398188361 - Update this for expressive theme
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun issueCard_withAttribution_hasProperContentDescriptions() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig)
@@ -693,7 +703,7 @@ class SafetyCenterActivityTest {
@Test
fun issueCard_resolveIssue_successConfirmationShown() {
- SafetyCenterFlags.hideResolvedIssueUiTransitionDelay = TIMEOUT_LONG
+ SafetyCenterFlags.setHideResolvedIssueUiTransitionDelay(context, TIMEOUT_LONG)
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig)
// Set the initial data for the source
@@ -829,7 +839,7 @@ class SafetyCenterActivityTest {
@Test
fun issueCard_resolveIssue_noSuccessMessage_noResolutionUiShown_issueDismisses() {
- SafetyCenterFlags.hideResolvedIssueUiTransitionDelay = TIMEOUT_LONG
+ SafetyCenterFlags.setHideResolvedIssueUiTransitionDelay(context, TIMEOUT_LONG)
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig)
// Set the initial data for the source
@@ -954,6 +964,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun launchActivity_fromQuickSettings_issuesExpanded() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -978,6 +990,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun launchActivity_fromNotification_targetIssueAlreadyFirstIssue() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1003,6 +1017,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun launchActivity_fromNotification_targetIssueSamePriorityAsFirstIssue_reorderedFirstIssue() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1028,6 +1044,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun launchActivity_fromNotification_targetLowerPriorityAsFirstIssue_reorderedSecondIssue() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1052,6 +1070,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun launchActivity_fromNotification_targetIssueNotFound() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1091,6 +1111,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun moreIssuesCard_moreIssuesCardShown_additionalIssueCardsCollapsed() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1113,6 +1135,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun moreIssuesCard_expandAdditionalIssueCards() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1139,6 +1163,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun moreIssuesCard_rotation_cardsStillExpanded() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1173,6 +1199,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun moreIssuesCard_withThreeIssues_showsTopIssuesAndMoreIssuesCard() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
@@ -1197,6 +1225,8 @@ class SafetyCenterActivityTest {
}
@Test
+ // TODO: b/379849464 - Fix this for expressive design and stop disabling this flag
+ @RequiresFlagsDisabled(SettingsThemeFlags.FLAG_IS_EXPRESSIVE_DESIGN_ENABLED)
fun moreIssuesCard_twoIssuesAlreadyShown_expandAdditionalIssueCards() {
safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesConfig)
safetyCenterTestHelper.setData(
diff --git a/tests/functional/safetycenter/singleuser/AndroidTest.xml b/tests/functional/safetycenter/singleuser/AndroidTest.xml
index af040eb6f..f778ca93e 100644
--- a/tests/functional/safetycenter/singleuser/AndroidTest.xml
+++ b/tests/functional/safetycenter/singleuser/AndroidTest.xml
@@ -47,8 +47,8 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
- <!-- TODO(b/379928062): Ensure device not on lockscreen. Reassess when keyguard bug is
- closed -->
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
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 64db7d47a..f5d230deb 100644
--- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt
+++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt
@@ -75,6 +75,7 @@ import com.android.safetycenter.internaldata.SafetyCenterIds
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.assertWithTimeout
import com.android.safetycenter.testing.Coroutines.waitForWithTimeout
import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.dismissSafetyCenterIssueWithPermission
import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.getSafetyCenterConfigWithPermission
@@ -2356,18 +2357,14 @@ class SafetyCenterManagerTest {
groupId = MULTIPLE_SOURCES_GROUP_ID_2,
)
)
- waitForWithTimeout(timeout = RESURFACE_TIMEOUT, checkPeriod = RESURFACE_CHECK) {
- val hasResurfaced =
- safetyCenterManager
- .getSafetyCenterDataWithPermission()
- .issues
- .contains(
- safetyCenterTestData.safetyCenterIssueCritical(
- SOURCE_ID_5,
- groupId = MULTIPLE_SOURCES_GROUP_ID_2,
- )
+ assertWithTimeout(timeout = RESURFACE_TIMEOUT, checkPeriod = RESURFACE_CHECK) {
+ assertThat(safetyCenterManager.getSafetyCenterDataWithPermission().issues)
+ .contains(
+ safetyCenterTestData.safetyCenterIssueCritical(
+ SOURCE_ID_5,
+ groupId = MULTIPLE_SOURCES_GROUP_ID_2,
)
- hasResurfaced
+ )
}
}
@@ -3986,9 +3983,9 @@ class SafetyCenterManagerTest {
companion object {
private val RESURFACE_DELAY = Duration.ofMillis(500)
- // Wait 3 times the RESURFACE_DELAY before asserting whether an issue has or has not
+ // Wait 5 times the RESURFACE_DELAY before asserting whether an issue has or has not
// resurfaced. Use a constant additive error buffer if we increase the delay considerably.
- private val RESURFACE_TIMEOUT = RESURFACE_DELAY.multipliedBy(3)
+ private val RESURFACE_TIMEOUT = RESURFACE_DELAY.multipliedBy(5)
// Check more than once during a RESURFACE_DELAY before asserting whether an issue has or
// has not resurfaced. Use a different check logic (focused at the expected resurface time)
diff --git a/tests/functional/safetycenter/subpages/AndroidTest.xml b/tests/functional/safetycenter/subpages/AndroidTest.xml
index c3245e9d7..ac493841f 100644
--- a/tests/functional/safetycenter/subpages/AndroidTest.xml
+++ b/tests/functional/safetycenter/subpages/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/hostside/safetycenter/AndroidTest.xml b/tests/hostside/safetycenter/AndroidTest.xml
index a28b70c3c..41f0bcc40 100644
--- a/tests/hostside/safetycenter/AndroidTest.xml
+++ b/tests/hostside/safetycenter/AndroidTest.xml
@@ -32,6 +32,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterNotificationLoggingHelperTests.kt b/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterNotificationLoggingHelperTests.kt
index 60e6e41ec..c56c913b6 100644
--- a/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterNotificationLoggingHelperTests.kt
+++ b/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterNotificationLoggingHelperTests.kt
@@ -69,6 +69,12 @@ class SafetyCenterNotificationLoggingHelperTests {
@Test
fun sendNotification() {
safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, newTestDataWithNotifiableIssue())
+ TestNotificationListener.waitForSingleNotificationMatching(
+ NotificationCharacteristics(
+ actions = listOf("See issue"),
+ safetySourceId = SINGLE_SOURCE_ID,
+ )
+ )
}
@Test
@@ -104,7 +110,7 @@ class SafetyCenterNotificationLoggingHelperTests {
statusBarNotificationWithChannel.statusBarNotification.notification.contentIntent
SafetyCenterActivityLauncher.executeBlockAndExit(
launchActivity = { PendingIntentSender.send(contentIntent) },
- block = {} // No action required
+ block = {}, // No action required
)
}
}
diff --git a/tests/utils/safetycenter/Android.bp b/tests/utils/safetycenter/Android.bp
index fab8c8dde..11fd3951d 100644
--- a/tests/utils/safetycenter/Android.bp
+++ b/tests/utils/safetycenter/Android.bp
@@ -36,6 +36,7 @@ android_library {
"kotlinx-coroutines-android",
"safety-center-internal-data",
"safety-center-resources-lib",
+ "SettingsLibSettingsTheme",
// TODO(b/326414126): aconfig: support multi-container library
"com.android.permission.flags-aconfig-java",
],
diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt
index cc8c53d5e..47f5165e2 100644
--- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt
+++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt
@@ -22,6 +22,7 @@ import java.time.Duration
import kotlinx.coroutines.DEBUG_PROPERTY_NAME
import kotlinx.coroutines.DEBUG_PROPERTY_VALUE_AUTO
import kotlinx.coroutines.DEBUG_PROPERTY_VALUE_ON
+import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
@@ -68,6 +69,20 @@ object Coroutines {
runBlockingWithTimeout(timeout) { waitFor(checkPeriod, condition) }
}
+ /** Check an assertion passes, with a timeout if it does not. */
+ fun assertWithTimeout(
+ timeout: Duration = TIMEOUT_LONG,
+ checkPeriod: Duration = CHECK_PERIOD,
+ assertion: () -> Unit,
+ ) {
+ try {
+ runBlockingWithTimeout(timeout) { assertThatWaiting(checkPeriod, assertion) }
+ } catch (ex: TimeoutCancellationException) {
+ // Rerun the assertion to generate a meaningful error message that isn't just "timeout"
+ assertion()
+ }
+ }
+
/** Retries a [fallibleAction] until no errors are thrown or a timeout occurs. */
fun waitForSuccessWithTimeout(
timeout: Duration = TIMEOUT_LONG,
@@ -105,6 +120,21 @@ object Coroutines {
}
}
+ /** Check an assertion passes using coroutines. */
+ private suspend fun assertThatWaiting(
+ checkPeriod: Duration = CHECK_PERIOD,
+ assertion: () -> Unit,
+ ) {
+ while (true) {
+ try {
+ assertion()
+ break
+ } catch (ex: AssertionError) {
+ delay(checkPeriod.toMillis())
+ }
+ }
+ }
+
private const val TAG: String = "Coroutines"
/** A medium period, to be used for conditions that are expected to change. */
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 7efbba7a0..66c5f46c4 100644
--- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt
+++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterFlags.kt
@@ -21,6 +21,7 @@ import android.Manifest.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG
import android.Manifest.permission.WRITE_DEVICE_CONFIG
import android.annotation.TargetApi
import android.app.job.JobInfo
+import android.content.Context
import android.content.pm.PackageManager
import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE
import android.provider.DeviceConfig
@@ -38,12 +39,16 @@ import com.android.modules.utils.build.SdkLevel
import com.android.safetycenter.testing.Coroutines.TEST_TIMEOUT
import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG
import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity
+import com.android.settingslib.widget.SettingsThemeHelper
import java.time.Duration
import kotlin.reflect.KProperty
/** A class that facilitates working with Safety Center flags. */
object SafetyCenterFlags {
+ /** This is a hidden API constant within [DeviceConfig]. */
+ private const val NAMESPACE_SETTINGS_UI = "settings_ui"
+
/** Flag that determines whether Safety Center is enabled. */
private val isEnabledFlag =
Flag("safety_center_is_enabled", defaultValue = SdkLevel.isAtLeastU(), BooleanParser())
@@ -143,8 +148,7 @@ object SafetyCenterFlags {
)
/**
- * Flag that determines the time for which Safety Center will wait before starting dismissal of
- * resolved issue UI
+ * Flag that determines how long Safety Center will wait before hiding the resolved issue UI.
*/
private val hideResolveUiTransitionDelayFlag =
Flag(
@@ -154,6 +158,18 @@ object SafetyCenterFlags {
)
/**
+ * Flag that determines how long an expressive BannerMessagePreference will wait before hiding
+ * the resolved UI.
+ */
+ private val bannerMessagePrefHideResolvedContentTransitionDelayFlag =
+ Flag(
+ "banner_message_pref_hide_resolved_content_delay_millis",
+ defaultValue = Duration.ofMillis(400),
+ DurationParser(),
+ namespace = NAMESPACE_SETTINGS_UI,
+ )
+
+ /**
* Flag containing a comma delimited lists of source IDs that we won't track when deciding if a
* broadcast is completed. We still send broadcasts to (and handle API calls from) these sources
* as normal.
@@ -312,6 +328,7 @@ object SafetyCenterFlags {
resolveActionTimeoutFlag,
tempHiddenIssueResurfaceDelayFlag,
hideResolveUiTransitionDelayFlag,
+ bannerMessagePrefHideResolvedContentTransitionDelayFlag,
untrackedSourcesFlag,
resurfaceIssueMaxCountsFlag,
resurfaceIssueDelaysFlag,
@@ -357,9 +374,28 @@ object SafetyCenterFlags {
/** A property that allows getting and setting the [tempHiddenIssueResurfaceDelayFlag]. */
var tempHiddenIssueResurfaceDelay: Duration by tempHiddenIssueResurfaceDelayFlag
+ // TODO: b/379849464 - replace remaining usages and make this private
/** A property that allows getting and setting the [hideResolveUiTransitionDelayFlag]. */
var hideResolvedIssueUiTransitionDelay: Duration by hideResolveUiTransitionDelayFlag
+ /**
+ * A property that allows getting and setting the
+ * [bannerMessagePrefHideResolvedContentTransitionDelayFlag]
+ */
+ private var bannerMessagePrefHideResolvedContentTransitionDelay: Duration by
+ bannerMessagePrefHideResolvedContentTransitionDelayFlag
+
+ /**
+ * Sets the proper hide_resolved_issue_ui_transition_delay flag based on expressive design
+ * state.
+ */
+ fun setHideResolvedIssueUiTransitionDelay(context: Context, value: Duration) =
+ if (SettingsThemeHelper.isExpressiveTheme(context)) {
+ bannerMessagePrefHideResolvedContentTransitionDelay = value
+ } else {
+ hideResolvedIssueUiTransitionDelay = value
+ }
+
/** A property that allows getting and setting the [untrackedSourcesFlag]. */
var untrackedSources: Set<String> by untrackedSourcesFlag
@@ -396,14 +432,23 @@ object SafetyCenterFlags {
* This snapshot is only taken once and cached afterwards. [setup] must be called at least once
* prior to modifying any flag for the snapshot to be taken with the right values.
*/
- @Volatile lateinit var snapshot: Properties
+ @Volatile lateinit var snapshot: Map<String, Properties>
- private val lazySnapshot: Properties by lazy {
+ private val lazySnapshot: Map<String, Properties> by lazy {
callWithShellPermissionIdentity(READ_DEVICE_CONFIG) {
- DeviceConfig.getProperties(NAMESPACE_PRIVACY, *FLAGS.map { it.name }.toTypedArray())
+ mapOf(
+ NAMESPACE_PRIVACY to fetchPropertiesForNamespace(NAMESPACE_PRIVACY),
+ NAMESPACE_SETTINGS_UI to fetchPropertiesForNamespace(NAMESPACE_SETTINGS_UI),
+ )
}
}
+ private fun fetchPropertiesForNamespace(namespace: String) =
+ DeviceConfig.getProperties(
+ namespace,
+ *FLAGS.filter { it.namespace == namespace }.map { it.name }.toTypedArray(),
+ )
+
/**
* Takes a snapshot of all Safety Center flags and sets them up to their default values.
*
@@ -414,7 +459,7 @@ object SafetyCenterFlags {
fun setup() {
snapshot = lazySnapshot
FLAGS.filter { it.name != isEnabledFlag.name }
- .forEach { writeDeviceConfigProperty(it.name, it.defaultStringValue) }
+ .forEach { it.writeToDeviceConfig(it.defaultStringValue) }
}
/**
@@ -431,8 +476,8 @@ object SafetyCenterFlags {
FLAGS.filter { it.name != isEnabledFlag.name }
.forEach {
val key = it.name
- val value = snapshot.getString(key, /* defaultValue */ null)
- writeDeviceConfigProperty(key, value)
+ val value = snapshot[it.namespace]?.getString(key, /* defaultValue */ null)
+ it.writeToDeviceConfig(value)
}
}
@@ -442,8 +487,8 @@ object SafetyCenterFlags {
}
/** Returns the [isEnabledFlag] value of the Safety Center flags snapshot. */
- fun Properties.isSafetyCenterEnabled() =
- getBoolean(isEnabledFlag.name, isEnabledFlag.defaultValue)
+ fun Map<String, Properties>.isSafetyCenterEnabled(): Boolean =
+ this[NAMESPACE_PRIVACY]!!.getBoolean(isEnabledFlag.name, isEnabledFlag.defaultValue)
@TargetApi(UPSIDE_DOWN_CAKE)
private fun getAllRefreshTimeoutsMap(refreshTimeout: Duration): Map<Int, Duration> =
@@ -516,32 +561,32 @@ object SafetyCenterFlags {
.joinToString(entriesDelimiter)
}
- private class Flag<T>(val name: String, val defaultValue: T, private val parser: Parser<T>) {
+ private class Flag<T>(
+ val name: String,
+ val defaultValue: T,
+ private val parser: Parser<T>,
+ val namespace: String = NAMESPACE_PRIVACY,
+ ) {
val defaultStringValue = parser.toString(defaultValue)
operator fun getValue(thisRef: Any?, property: KProperty<*>): T =
- readDeviceConfigProperty(name)?.let(parser::parseFromString) ?: defaultValue
+ readFromDeviceConfig(name)?.let(parser::parseFromString) ?: defaultValue
- operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
- writeDeviceConfigProperty(name, parser.toString(value))
- }
- }
+ private fun readFromDeviceConfig(name: String): String? =
+ callWithShellPermissionIdentity(READ_DEVICE_CONFIG) {
+ DeviceConfig.getProperty(namespace, name)
+ }
- private fun readDeviceConfigProperty(name: String): String? =
- callWithShellPermissionIdentity(READ_DEVICE_CONFIG) {
- DeviceConfig.getProperty(NAMESPACE_PRIVACY, name)
+ operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
+ writeToDeviceConfig(parser.toString(value))
}
- private fun writeDeviceConfigProperty(name: String, stringValue: String?) {
- callWithShellPermissionIdentity(WRITE_DEVICE_CONFIG, WRITE_ALLOWLISTED_DEVICE_CONFIG) {
- val valueWasSet =
- DeviceConfig.setProperty(
- NAMESPACE_PRIVACY,
- name,
- stringValue, /* makeDefault */
- false,
- )
- require(valueWasSet) { "Could not set $name to: $stringValue" }
+ fun writeToDeviceConfig(stringValue: String?) {
+ callWithShellPermissionIdentity(WRITE_DEVICE_CONFIG, WRITE_ALLOWLISTED_DEVICE_CONFIG) {
+ val valueWasSet =
+ DeviceConfig.setProperty(namespace, name, stringValue, /* makeDefault */ false)
+ require(valueWasSet) { "Could not set $name to: $stringValue" }
+ }
}
}
}