diff options
323 files changed, 4944 insertions, 973 deletions
diff --git a/Android.bp b/Android.bp index fe398621a..7a2f39fc3 100644 --- a/Android.bp +++ b/Android.bp @@ -108,6 +108,7 @@ bootclasspath_fragment { // result in a build failure due to inconsistent flags. package_prefixes: [ "android.app.role", + "android.app.ecm", "android.permission.jarjar", "android.safetycenter", "android.safetylabel", diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp index 812c6c111..34351a309 100644 --- a/PermissionController/Android.bp +++ b/PermissionController/Android.bp @@ -147,7 +147,7 @@ android_library { "lottie", "safety-label", "role-controller", - "permissions-flags-lib", + "permissions-aconfig-flags-lib", "android.permission.flags-aconfig-java", "androidx.compose.foundation_foundation", "androidx.compose.runtime_runtime", @@ -157,8 +157,8 @@ android_library { ], lint: { - strict_updatability_linting: true, error_checks: ["Recycle"], + baseline_filename: "lint-baseline.xml", }, apex_available: [ @@ -187,7 +187,6 @@ android_app { static_libs: ["PermissionController-lib"], lint: { - strict_updatability_linting: true, error_checks: ["Recycle"], }, diff --git a/PermissionController/AndroidManifest.xml b/PermissionController/AndroidManifest.xml index 0d663bc05..234430100 100644 --- a/PermissionController/AndroidManifest.xml +++ b/PermissionController/AndroidManifest.xml @@ -66,6 +66,8 @@ <uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" /> <uses-permission android:name="android.permission.READ_APP_SPECIFIC_LOCALES" /> <uses-permission android:name="android.permission.GET_APP_METADATA" /> + <uses-permission android:name="android.permission.NFC_PREFERRED_PAYMENT_INFO" /> + <uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" /> <application android:name="com.android.permissioncontroller.PermissionControllerApplication" android:label="@string/app_name" @@ -472,6 +474,18 @@ </intent-filter> </activity> + <activity android:name="com.android.permissioncontroller.role.ui.ChangeDefaultCardEmulationActivity" + android:enabled="@bool/is_at_least_v" + android:excludeFromRecents="true" + android:noHistory="true" + android:exported="true" + android:theme="@android:style/Theme.NoDisplay"> + <intent-filter android:priority="1001"> + <action android:name="android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT" /> + <category android:name="android.intent.category.DEFAULT" /> + </intent-filter> + </activity> + <provider android:name="com.android.permissioncontroller.permission.service.PermissionSearchIndexablesProvider" android:authorities="com.android.permissioncontroller" android:multiprocess="false" @@ -593,6 +607,7 @@ android:name="com.android.permissioncontroller.safetycenter.ui.SafetyCenterActivity" android:enabled="@bool/is_at_least_t" android:exported="true" + android:enableOnBackInvokedCallback="true" android:theme="@style/Theme.SafetyCenter"> <intent-filter android:priority="1"> <action android:name="android.intent.action.SAFETY_CENTER"/> diff --git a/PermissionController/jarjar-rules.txt b/PermissionController/jarjar-rules.txt index f4d8a0be2..4df97f4c0 100644 --- a/PermissionController/jarjar-rules.txt +++ b/PermissionController/jarjar-rules.txt @@ -1 +1,2 @@ -rule android.permission.flags.** com.android.permissioncontroller.jarjar.@0 +rule android.permission.flags.*Flags* com.android.permissioncontroller.jarjar.@0 +rule android.permission.flags.Flags com.android.permissioncontroller.jarjar.@0 diff --git a/PermissionController/lint-baseline.xml b/PermissionController/lint-baseline.xml index 546ed596d..5d77d8c81 100644 --- a/PermissionController/lint-baseline.xml +++ b/PermissionController/lint-baseline.xml @@ -1,92 +1,224 @@ <?xml version="1.0" encoding="UTF-8"?> -<issues format="6" by="lint 8.0.0-dev" type="baseline" dependencies="true" variant="all" version="8.0.0-dev"> +<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01"> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.apphibernation.AppHibernationManager#isHibernatingForUser`" - errorLine1=" if (hibernationManager.isHibernatingForUser(pkg.packageName)) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + message="Class requires API level 34 (current min is 31): `android.app.AppOpsManager.OnOpNotedListener`" + errorLine1=" AppOpsManager.OnOpNotedListener," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/HibernatedPackagesLiveData.kt" - line="56" - column="44"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/v31/AllLightHistoricalPackageOpsLiveData.kt" + line="46" + column="5"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.content.pm.Attribution#getLabel`" - errorLine1=" attributions?.forEach { attributionTagToLabel[it.tag] = it.label }" - errorLine2=" ~~~~~"> + message="Class requires API level 34 (current min is 31): `android.app.AppOpsManager.OnOpNotedListener`" + errorLine1=" AppOpsManager.OnOpNotedListener," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt" - line="125" - column="72"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/v31/AllLightPackageOpsLiveData.kt" + line="43" + column="5"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.content.pm.Attribution#getTag`" - errorLine1=" attributions?.forEach { attributionTagToLabel[it.tag] = it.label }" - errorLine2=" ~~~"> + message="Call requires API level 33 (current min is 30): `getIconId`" + errorLine1=" .setIcon(args.getIconId())" + errorLine2=" ~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt" - line="125" - column="62"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="504" + column="31"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#canAdminGrantSensorsPermissions`" - errorLine1=" params.getGrantState(), params.canAdminGrantSensorsPermissions())));" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getMessageId`" + errorLine1=" .setMessage(args.getMessageId())" + errorLine2=" ~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" - line="517" - column="48"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="505" + column="34"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getGrantState`" - errorLine1=" params.getGrantState(), params.canAdminGrantSensorsPermissions())));" - errorLine2=" ~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getNegativeButtonTextId`" + errorLine1=" .setNegativeButton(args.getNegativeButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" - line="517" - column="24"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="509" + column="41"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getGranteePackageName`" - errorLine1=" callerPackageName, params.getGranteePackageName(), params.getPermission()," - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getPositiveButtonTextId`" + errorLine1=" .setPositiveButton(args.getPositiveButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" - line="516" - column="43"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="513" + column="41"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getPermission`" - errorLine1=" callerPackageName, params.getGranteePackageName(), params.getPermission()," - errorLine2=" ~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getSetOneTime`" + errorLine1=" mViewModel.requestChange(args.getSetOneTime()," + errorLine2=" ~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" - line="516" - column="75"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="515" + column="59"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.hardware.SensorPrivacyManager#addSensorPrivacyListener`" - errorLine1=" mSensorPrivacyManager.addSensorPrivacyListener(mPrivacyChangedListener);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getChangeRequest`" + errorLine1=" args.getChangeRequest()," + errorLine2=" ~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java" - line="159" - column="35"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="518" + column="42"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getButtonClicked`" + errorLine1=" args.getButtonClicked());" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="519" + column="42"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" if (args.getTitleId() != 0) {" + errorLine2=" ~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="521" + column="18"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" b.setTitle(args.getTitleId());" + errorLine2=" ~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionFragment.java" + line="522" + column="29"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getIconId`" + errorLine1=" .setIcon(args.getIconId())" + errorLine2=" ~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="709" + column="31"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getMessageId`" + errorLine1=" .setMessage(args.getMessageId())" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="710" + column="34"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getNegativeButtonTextId`" + errorLine1=" .setNegativeButton(args.getNegativeButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="714" + column="41"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getPositiveButtonTextId`" + errorLine1=" .setPositiveButton(args.getPositiveButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="718" + column="41"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getSetOneTime`" + errorLine1=" mViewModel.requestChange(args.getSetOneTime()," + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="720" + column="59"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getButtonClicked`" + errorLine1=" args.getChangeRequest(), args.getButtonClicked());" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="722" + column="67"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getChangeRequest`" + errorLine1=" args.getChangeRequest(), args.getButtonClicked());" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="722" + column="42"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" if (args.getTitleId() != 0) {" + errorLine2=" ~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="724" + column="18"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" b.setTitle(args.getTitleId());" + errorLine2=" ~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java" + line="725" + column="29"/> </issue> <issue @@ -95,8 +227,8 @@ errorLine1=" mSensorPrivacyManager.addSensorPrivacyListener(mPrivacyChangedListener);" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java" - line="114" + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java" + line="159" column="35"/> </issue> @@ -113,101 +245,134 @@ <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.hardware.SensorPrivacyManager#removeSensorPrivacyListener`" - errorLine1=" mSensorPrivacyManager.removeSensorPrivacyListener(mPrivacyChangedListener);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getIconId`" + errorLine1=" .setIcon(args.getIconId())" + errorLine2=" ~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java" - line="365" - column="35"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="463" + column="31"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterData#getIssues`" - errorLine1=" issues" - errorLine2=" ~~~~~~"> + message="Call requires API level 33 (current min is 30): `getMessageId`" + errorLine1=" .setMessage(args.getMessageId())" + errorLine2=" ~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="309" - column="5"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="464" + column="34"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterData#getIssues`" - errorLine1="private fun SafetyCenterData.buildIssueIdSet(): Set<IssueId> = issues.map { it.id }.toSet()" - errorLine2=" ~~~~~~"> + message="Call requires API level 33 (current min is 30): `getNegativeButtonTextId`" + errorLine1=" .setNegativeButton(args.getNegativeButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="323" - column="64"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="468" + column="41"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterData#getStatus`" - errorLine1=" status.refreshStatus == SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS" - errorLine2=" ~~~~~~"> + message="Call requires API level 33 (current min is 30): `getPositiveButtonTextId`" + errorLine1=" .setPositiveButton(args.getPositiveButtonTextId()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="321" - column="5"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="472" + column="41"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getActions`" - errorLine1=" issue.actions" - errorLine2=" ~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getSetOneTime`" + errorLine1=" mViewModel.requestChange(args.getSetOneTime()," + errorLine2=" ~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="311" - column="19"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="474" + column="59"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getId`" - errorLine1=" .map { issue.id to it.id }" - errorLine2=" ~~"> + message="Call requires API level 33 (current min is 30): `getButtonClicked`" + errorLine1=" args.getChangeRequest(), args.getButtonClicked());" + errorLine2=" ~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="315" - column="30"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="476" + column="67"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getId`" - errorLine1="private fun SafetyCenterData.buildIssueIdSet(): Set<IssueId> = issues.map { it.id }.toSet()" - errorLine2=" ~~"> + message="Call requires API level 33 (current min is 30): `getChangeRequest`" + errorLine1=" args.getChangeRequest(), args.getButtonClicked());" + errorLine2=" ~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="323" - column="80"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="476" + column="42"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#getId`" - errorLine1=" .map { issue.id to it.id }" - errorLine2=" ~~"> + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" if (args.getTitleId() != 0) {" + errorLine2=" ~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="315" - column="39"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="478" + column="18"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#getSuccessMessage`" - errorLine1=" .filter { it.isInFlight && !it.successMessage.isNullOrEmpty() }" - errorLine2=" ~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `getTitleId`" + errorLine1=" b.setTitle(args.getTitleId());" + errorLine2=" ~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="314" - column="48"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java" + line="479" + column="29"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 34 (current min is 30): `android.health.connect.HealthConnectManager#isHealthPermission`" + errorLine1=" .filter { permission -> isHealthPermission(activity, permission) }" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt" + line="1059" + column="45"/> + </issue> + + <issue + id="NewApi" + message="Class requires API level 31 (current min is 30): `android.apphibernation.AppHibernationManager`" + errorLine1=" userContext.getSystemService(APP_HIBERNATION_SERVICE) as AppHibernationManager" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/HibernatedPackagesLiveData.kt" + line="48" + column="74"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 31 (current min is 30): `android.apphibernation.AppHibernationManager#isHibernatingForUser`" + errorLine1=" if (hibernationManager.isHibernatingForUser(pkg.packageName)) {" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/HibernatedPackagesLiveData.kt" + line="51" + column="44"/> </issue> <issue @@ -223,156 +388,167 @@ <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#isInFlight`" - errorLine1=" .filter { it.isInFlight && !it.successMessage.isNullOrEmpty() }" - errorLine2=" ~~~~~~~~~~"> + message="Call requires API level 31 (current min is 30): `android.os.UserManager#isCloneProfile`" + errorLine1=" if (userManager.isCloneProfile) {" + errorLine2=" ~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="314" - column="30"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt" + line="653" + column="29"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#isSafetyCenterEnabled`" - errorLine1=" if (!safetyCenterManager.isSafetyCenterEnabled()) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.app.Activity#startActivityForResultAsUser`" + errorLine1=" activity.startActivityForResultAsUser(pickerIntent, requestCode, user)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" - line="96" - column="34"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt" + line="662" + column="18"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#isSafetyCenterEnabled`" - errorLine1=" if (!safetyCenterManager.isSafetyCenterEnabled()) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 34 (current min is 30): `android.health.connect.HealthConnectManager#getHealthPermissions`" + errorLine1=" val permissions = HealthConnectManager.getHealthPermissions(context)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" - line="149" - column="34"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt" + line="1689" + column="48"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#isSafetyCenterEnabled`" - errorLine1=" if (!scManager.isSafetyCenterEnabled) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 31 (current min is 30): `android.content.pm.Attribution#getLabel`" + errorLine1=" attributions?.forEach { attributionTagToLabel[it.tag] = it.label }" + errorLine2=" ~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt" - line="48" - column="24"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt" + line="140" + column="72"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#refreshSafetySources`" - errorLine1=" safetyCenterManager.refreshSafetySources(getRefreshReason());" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 31 (current min is 30): `android.content.pm.Attribution#getTag`" + errorLine1=" attributions?.forEach { attributionTagToLabel[it.tag] = it.label }" + errorLine2=" ~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" - line="155" - column="29"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightPackageInfo.kt" + line="140" + column="62"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterStatus#getRefreshStatus`" - errorLine1=" status.refreshStatus == SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS" - errorLine2=" ~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getActions`" + errorLine1=" issue.actions" + errorLine2=" ~~~~~~~"> <location file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" - line="321" - column="12"/> + line="288" + column="19"/> </issue> <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `recordPermissionDecision`" - errorLine1=" PermissionDecisionStorageImpl.recordPermissionDecision(app.applicationContext," - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#getSuccessMessage`" + errorLine1=" .filter { it.isInFlight && !it.successMessage.isNullOrEmpty() }" + errorLine2=" ~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt" - line="1147" - column="39"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="291" + column="48"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 30): `android.content.pm.PackageManager#getAppMetadata`" - errorLine1=" app.packageManager.getAppMetadata(packageName)" - errorLine2=" ~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#isInFlight`" + errorLine1=" .filter { it.isInFlight && !it.successMessage.isNullOrEmpty() }" + errorLine2=" ~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/SafetyLabelInfoLiveData.kt" - line="116" - column="32"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="291" + column="30"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 30): `android.health.connect.HealthConnectManager#getHealthPermissions`" - errorLine1=" val permissions = HealthConnectManager.getHealthPermissions(context)" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getId`" + errorLine1=" .map { issue.id to it.id }" + errorLine2=" ~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt" - line="1465" - column="48"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="292" + column="30"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 30): `android.health.connect.HealthConnectManager#isHealthPermission`" - errorLine1=" isHealthPermission(activity, permission)" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue.Action#getId`" + errorLine1=" .map { issue.id to it.id }" + errorLine2=" ~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt" - line="1268" - column="17"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="292" + column="39"/> </issue> <issue id="NewApi" - message="Class requires API level 31 (current min is 30): `android.apphibernation.AppHibernationManager`" - errorLine1=" userContext.getSystemService(APP_HIBERNATION_SERVICE) as AppHibernationManager" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterData#getStatus`" + errorLine1=" status.refreshStatus == SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS" + errorLine2=" ~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/HibernatedPackagesLiveData.kt" - line="53" - column="74"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="298" + column="5"/> </issue> <issue id="NewApi" - message="Class requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager`" - errorLine1=" context.getSystemService(SafetyCenterManager.class);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterStatus#getRefreshStatus`" + errorLine1=" status.refreshStatus == SafetyCenterStatus.REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS" + errorLine2=" ~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" - line="84" - column="42"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="298" + column="12"/> </issue> <issue id="NewApi" - message="Class requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager`" - errorLine1=" SafetyCenterManager safetyCenterManager = this.getSystemService(SafetyCenterManager.class);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterIssue#getId`" + errorLine1=" allResolvableIssues.map { it.id }.toSet()" + errorLine2=" ~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" - line="144" - column="73"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="301" + column="34"/> </issue> <issue id="NewApi" - message="Class requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager`" - errorLine1=" val scManager = getSystemService(SafetyCenterManager::class.java)!!" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterData#getIssues`" + errorLine1=" issues.asSequence()" + errorLine2=" ~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt" - line="41" - column="42"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/LiveSafetyCenterViewModel.kt" + line="308" + column="13"/> + </issue> + + <issue + id="NewApi" + message="Field requires API level 33 (current min is 30): `Companion`" + errorLine1=" MoreIssuesCardPreference.TAG," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardAnimator.kt" + line="110" + column="21"/> </issue> <issue @@ -382,88 +558,140 @@ errorLine2=" ~~~"> <location file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardAnimator.kt" - line="107" + line="110" column="46"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.app.AppOpsManager.HistoricalOp#getDiscreteAccessAt`"> + message="Call requires API level 33 (current min is 30): `android.hardware.SensorPrivacyManager#addSensorPrivacyListener`" + errorLine1=" mSensorPrivacyManager.addSensorPrivacyListener(mPrivacyChangedListener);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt" - line="153"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java" + line="114" + column="35"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.app.AppOpsManager.HistoricalOp#getDiscreteAccessAt`"> + message="Call requires API level 33 (current min is 30): `android.hardware.SensorPrivacyManager#removeSensorPrivacyListener`" + errorLine1=" mSensorPrivacyManager.removeSensorPrivacyListener(mPrivacyChangedListener);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt" - line="188"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java" + line="365" + column="35"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.app.AppOpsManager.HistoricalOp#getDiscreteAccessCount`"> + message="Call requires API level 31 (current min is 30): `SensorStatusLiveData`" + errorLine1=" lazy(LazyThreadSafetyMode.NONE) { SensorStatusLiveData() }" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt" - line="152"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt" + line="100" + column="43"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.app.AppOpsManager.HistoricalOp#getDiscreteAccessCount`"> + message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getGranteePackageName`" + errorLine1=" callerPackageName, params.getGranteePackageName(), params.getPermission()," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt" - line="187"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" + line="521" + column="43"/> </issue> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.app.AppOpsManager.HistoricalOpsRequest.Builder#setHistoryFlags`"> + message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getPermission`" + errorLine1=" callerPackageName, params.getGranteePackageName(), params.getPermission()," + errorLine2=" ~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/v31/AllLightHistoricalPackageOpsLiveData.kt" - line="104"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" + line="521" + column="75"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `getParentGroupId`"> + message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#canAdminGrantSensorsPermissions`" + errorLine1=" params.getGrantState(), params.canAdminGrantSensorsPermissions())));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java" - line="91"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" + line="522" + column="48"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `openRelevantSubpage`"> + message="Call requires API level 31 (current min is 30): `android.permission.AdminPermissionControlParams#getGrantState`" + errorLine1=" params.getGrantState(), params.canAdminGrantSensorsPermissions())));" + errorLine2=" ~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java" - line="88"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceImpl.java" + line="522" + column="24"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `openRelevantSubpage`"> + message="Class requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager`" + errorLine1=" context.getSystemService(SafetyCenterManager.class);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java" - line="92"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" + line="85" + column="42"/> </issue> <issue id="NewApi" - message="Class requires API level 34 (current min is 30): `android.app.AppOpsManager.OnOpNotedListener`"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#isSafetyCenterEnabled`" + errorLine1=" if (!safetyCenterManager.isSafetyCenterEnabled()) {" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/v31/AllLightHistoricalPackageOpsLiveData.kt" - line="46"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" + line="97" + column="34"/> + </issue> + + <issue + id="NewApi" + message="Class requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager`" + errorLine1=" SafetyCenterManager safetyCenterManager = this.getSystemService(SafetyCenterManager.class);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" + line="141" + column="73"/> </issue> <issue id="NewApi" - message="Class requires API level 34 (current min is 30): `android.app.AppOpsManager.OnOpNotedListener`"> + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#isSafetyCenterEnabled`" + errorLine1=" if (!safetyCenterManager.isSafetyCenterEnabled()) {" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/permission/data/v31/AllLightPackageOpsLiveData.kt" - line="43"/> + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" + line="146" + column="34"/> + </issue> + + <issue + id="NewApi" + message="Call requires API level 33 (current min is 30): `android.safetycenter.SafetyCenterManager#refreshSafetySources`" + errorLine1=" safetyCenterManager.refreshSafetySources(getRefreshReason());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="packages/modules/Permission/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java" + line="152" + column="29"/> </issue> </issues>
\ No newline at end of file diff --git a/PermissionController/res/values-af/strings.xml b/PermissionController/res/values-af/strings.xml index 0f9558fb4..8df261b02 100644 --- a/PermissionController/res/values-af/strings.xml +++ b/PermissionController/res/values-af/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alle toestemmings"</string> <string name="other_permissions" msgid="2901186127193849594">"Ander programvermoëns"</string> <string name="permission_request_title" msgid="8790310151025020126">"Toestemmingsversoek"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Installeer- en deïnstalleerhandelinge word nie in Wear gesteun nie."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Kies waartoe <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang mag kry"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> is opgedateer. Kies waartoe hierdie program toegang mag kry."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Kanselleer"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Verwyder toestemmings as program nie gebruik word nie"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Verwyder toestemmings en maak spasie beskikbaar"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Onderbreek programaktiwiteit as ongebruik"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Bestuur app indien ongebruik"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Verwyder toestemmings, vee tydelike lêers uit, en stop kennisgewings"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Verwyder toestemmings, vee tydelike lêers uit, stop kennisgewings en argiveer die app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Om jou data te beskerm, sal toestemmings vir hierdie program verwyder word as die program \'n paar maande nie gebruik word nie."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Om jou data te beskerm, sal die volgende toestemmings verwyder word as dit vir \'n paar maande nie gebruik word nie: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Om jou data te beskerm, is toestemmings verwyder van programme wat jy \'n paar maande gelede laas gebruik het."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notasapp"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps wat jou toelaat om notas op jou toestel te maak"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Verstekbeursie-app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Beursie-app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Beursie-apps kan jou krediet- en lojaliteitskaarte, motorsleutels en ander goed stoor om met verskeie vorme van transaksies te help."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Stel <xliff:g id="APP_NAME">%1$s</xliff:g> as jou verstekbeursie-app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Geen toestemmings is nodig nie"</string> <string name="request_role_current_default" msgid="738722892438247184">"Huidige verstek"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Moenie weer vra nie"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Stel as verstek"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Datadelingopdaterings"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Sommige apps het die manier waarop hulle jou liggingdata kan deel, verander"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Instellings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Ingegaan <xliff:g id="TIME_DATE">%1$s</xliff:g>."</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Gister ingegaan <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Ingegaan <xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml index de2e0c8d8..a2fa2aadd 100644 --- a/PermissionController/res/values-am/strings.xml +++ b/PermissionController/res/values-am/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ሁሉም ፍቃዶች"</string> <string name="other_permissions" msgid="2901186127193849594">"ሌሎች የመተግበሪያ ችሎታዎች"</string> <string name="permission_request_title" msgid="8790310151025020126">"የፍቃድ ጥያቄ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"በWear ላይ የመጫን/ማራገፍ እርምጃዎች አይደገፉም።"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ምን መድረስ እንደሚችል ይምረጡ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ተዘምኗል። ይህ መተግበሪያ ምን መድረስ እንደሚችል ይምረጡ።"</string> <string name="review_button_cancel" msgid="2191147944056548886">"ይቅር"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ጥቅም ላይ ካልዋለ መተግበሪያን ያስተዳድሩ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ፈቃዶችን አስወግድ፣ ጊዜያዊ ፋይሎችን ሰርዝ እና ማሳወቂያዎችን አቁም"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ፈቃዶችን ያስወግዱ፣ ጊዜያዊ ፋይሎችን ይሰርዙ፣ ማሳወቂያዎችን ያቁሙ እና መተግበሪያውን በማህደር ያስቀምጡ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ለእርስዎ ውሂብ ጥበቃ ለማድረግ፣ ለዚህ መተግበሪያ የተሰጡ ፈቃዶች መተግበሪያው ለጥቂት ወራት ጥቅም ላይ ካልዋለ ይህ መተግበሪያ ይወገዳል።"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"የእርስዎን ውሂብ ለመጠበቅ፣ መተግበሪያው ለጥቂት ወራት ጥቅም ላይ ካልዋለ፣ የሚከተሉት ፈቃዶች ይወገዳሉ፦ <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"የእርስዎን ውሂብ ለመጠበቅ ሲባል ለጥቂት ወራት ካልተጠቀሙባቸው መተግበሪያዎች ላይ ፈቃዶች ተወግደዋል።"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"የማስታወሻዎች መተግበሪያ"</string> <string name="role_notes_description" msgid="8496852798616883551">"በመሣሪያዎ ላይ ማስታወሻ እንዲይዙ የሚያስችሉዎት መተግበሪያዎች"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ማስታወሻዎች"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ነባሪ የwallet መተግበሪያ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"የwallet መተግበሪያ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"የWallet መተግበሪያዎች የተለያዩ የግብይት ዓይነቶችን ለማገዝ የክሬዲትና የታማኝነት ካርዶችዎን፣ የመኪና ቁልፎችዎን እና ሌሎች ነገሮችን ማከማቸት ይችላሉ።"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> እንደ ነባሪ የWallet መተግበሪያዎ ይቀናበር?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ምንም ፈቃዶች አያስፈልጉም"</string> <string name="request_role_current_default" msgid="738722892438247184">"አሁን ያለ ነባሪ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ዳግም አትጠይቅ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"እንደ ነባሪ አዘጋጅ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"የውሂብ ማጋራት ዝማኔዎች"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"አንዳንድ መተግበሪያዎች የእርስዎን የአካባቢ ውሂብ ሊያጋሩ የሚችሉበትን መንገድ ለውጠዋል"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ቅንብሮች"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"በ<xliff:g id="TIME_DATE">%1$s</xliff:g> ላይ ተደርስበታል"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ትላንት በ<xliff:g id="TIME_DATE">%1$s</xliff:g> ላይ ተደርስበታል"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"በ<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> ላይ ተደርስበታል"</string> </resources> diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml index 47731ef8b..142070884 100644 --- a/PermissionController/res/values-ar/strings.xml +++ b/PermissionController/res/values-ar/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"كل الأذونات"</string> <string name="other_permissions" msgid="2901186127193849594">"إمكانات التطبيق الأخرى"</string> <string name="permission_request_title" msgid="8790310151025020126">"طلب الإذن"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"لا تتوافق إجراءات التثبيت/إلغاء التثبيت مع نظام Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"اختيار ما تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إليه"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"تمّ تحديث <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. وعليك اختيار ما تريد السماح لهذا التطبيق بالوصول إليه."</string> <string name="review_button_cancel" msgid="2191147944056548886">"إلغاء"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"إدارة التطبيق في حال عدم استخدامه"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"إزالة الأذونات وحذف الملفات المؤقتة وإيقاف الإشعارات"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"إزالة الأذونات وحذف الملفات المؤقتة وإيقاف الإشعارات وأرشفة التطبيق"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"لحماية بياناتك، ستتم إزالة أذونات هذا التطبيق إذا لم يتم استخدامه لبضعة أشهر."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"لحماية بياناتك، إذا لم يتم استخدام التطبيق لبضعة أشهر، ستتم إزالة الأذونات التالية: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"لحماية بياناتك، تمت إزالة الأذونات من هذه التطبيقات التي لم تستخدمها منذ بضعة أشهر."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"تطبيق تدوين الملاحظات"</string> <string name="role_notes_description" msgid="8496852798616883551">"التطبيقات التي تتيح لك تدوين ملاحظات على جهازك"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ملاحظات"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"تطبيق المحفظة التلقائي"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"تطبيق المحفظة"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"يمكن أن تخزِّن تطبيقات المحافِظ معلومات بطاقات الائتمان وبطاقات الولاء والمفاتيح الرقمية للسيارات وغيرها من المعلومات للمساعدة في إدارة أنواع المعاملات المختلفة."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"هل تريد ضبط \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" على أنّه تطبيق المحفظة التلقائي؟"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ما مِن أذونات مطلوبة."</string> <string name="request_role_current_default" msgid="738722892438247184">"التطبيق التلقائي الحالي"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"لا تسألني مرة أخرى."</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ضبط كتطبيق تلقائي"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"تعديلات مشاركة البيانات"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"غيّرت بعض التطبيقات الطريقة التي قد تشارك بها بيانات موقعك الجغرافي."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"الإعدادات"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"آخر استخدام للإذن: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"آخر استخدام للإذن أمس: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"آخر استخدام للإذن في <xliff:g id="TIME_DATE_0">%1$s</xliff:g>: <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml index 162b4a8ff..a90fa08fa 100644 --- a/PermissionController/res/values-as/strings.xml +++ b/PermissionController/res/values-as/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"সকলো অনুমতি"</string> <string name="other_permissions" msgid="2901186127193849594">"অন্য এপৰ কার্যক্ষমতা"</string> <string name="permission_request_title" msgid="8790310151025020126">"অনুমতি বিচাৰি কৰা অনুৰোধ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ইনষ্টল/আনইনষ্টল কাৰ্য Wearত কৰিব নোৱাৰি।"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ক ক’ত এক্সেছ দিব লাগে বাছনি কৰক"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> আপডে’ট কৰা হৈছে। এই এপক ক’ত এক্সেছ দিব লাগে বাছনি কৰক।"</string> <string name="review_button_cancel" msgid="2191147944056548886">"বাতিল কৰক"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"যদি ব্যৱহাৰ হোৱা নাই এপ্টো পৰিচালনা কৰক"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"অনুমতি আঁতৰাওক, অস্থায়ী ফাইল মচক আৰু জাননী বন্ধ কৰক"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"অনুমতি আঁতৰাওক, অস্থায়ী ফাইল মচক, জাননী বন্ধ কৰক আৰু এপ্টো আৰ্কাইভ কৰক"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"আপোনাৰ ডেটা সুৰক্ষিত কৰিবলৈ এই এপ্টো কেইমাহমান ব্যৱহাৰ নকৰিলে এইটোৰ বাবে থকা অনুমতিসমূহ আঁতৰোৱা হ\'ব।"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"আপোনাৰ ডেটা সুৰক্ষিত কৰিবলৈ এই এপ্টো কেইমাহমান ব্যৱহাৰ নকৰিলে তলত উল্লেখ কৰা অনুমতিসমূহ আঁতৰোৱা হ\'ব: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"আপোনাৰ ডেটা সুৰক্ষিত কৰিবলৈ আপুনি কেইমাহমান ব্যৱহাৰ নকৰা এপ্সমূহৰ পৰা অনুমতিসমূহ আঁতৰোৱা হ\'ব।"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"টোকা লোৱা এপ্"</string> <string name="role_notes_description" msgid="8496852798616883551">"আপোনাক আপোনাৰ ডিভাইচত টোকা ল’বলৈ দিয়া এপ্সমূহ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"টোকা"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ডিফ’ল্ট Wallet এপ্"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet এপ্"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet এপে বিভিন্ন ধৰণৰ লেনদেনত সহায় কৰিবলৈ আপোনাৰ ক্ৰেডিট আৰু লয়েল্টী কাৰ্ড, গাড়ীৰ চাবি আৰু আন বস্তু ষ্ট’ৰ কৰিব পাৰে।"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>ক আপোনাৰ ডিফ’ল্ট Wallet এপ্ হিচাপে ছেট কৰিবনে?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"কোনো অনুমতিৰ প্ৰয়োজন নাই"</string> <string name="request_role_current_default" msgid="738722892438247184">"বৰ্তমানৰ ডিফ’ল্ট"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"পুনৰায় নুসুধিব"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ডিফ’ল্ট ৰূপে ছেট কৰক"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ডেটা শ্বেয়াৰ কৰা সম্পৰ্কীয় আপডে’ট"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"কিছুমান এপে আপোনাৰ অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পৰাৰ ধৰণসমূহ সলনি কৰিছে"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ছেটিং"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>ত এক্সেছ কৰিছিল"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"কালি <xliff:g id="TIME_DATE">%1$s</xliff:g>ত এক্সেছ কৰিছিল"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>ত এক্সেছ কৰিছিল"</string> </resources> diff --git a/PermissionController/res/values-az/strings.xml b/PermissionController/res/values-az/strings.xml index 3d854cb29..bf0aec34a 100644 --- a/PermissionController/res/values-az/strings.xml +++ b/PermissionController/res/values-az/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Bütün icazələr"</string> <string name="other_permissions" msgid="2901186127193849594">"Digər tətbiq imkanları"</string> <string name="permission_request_title" msgid="8790310151025020126">"İcazə sorğusu"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Yükləmə/Sistemdən silmə fəaliyyətləri Wear\'də dəstəklənmir."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tətbiqinin daxil olacağı elementləri seçin"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> güncəlləndi. Bu tətbiqin daxil olacağı elementləri seçin."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Ləğv edin"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Tətbiq işlənməyəndə icazə ləğv edilsin"</string> <string name="unused_apps_label" msgid="2595428768404901064">"İcazələri silin və yer boşaldın"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"İstifadə edilmədikdə tətbiq fəaliyyətini durdurun"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"İstifadə edilmədikdə tətbiqi idarə edin"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"İcazələri silin, müvəqqəti faylları silin və bildirişləri dayandırın"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"İcazələri, müvəqqəti faylları silin, bildirişləri dayandırın və tətbiqi arxivə atın"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Bir neçə ay istifadə etmədiyiniz tətbiqlərdən icazələr datanızın qorunması məqsədilə silinib."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Bir neçə ay istifadə etmədiyiniz tətbiqlərdən icazələr datanızın qorunması məqsədilə silinib: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Bir neçə ay istifadə etmədiyiniz tətbiqlərdən icazələr datanızın qorunması məqsədilə silinib."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Qeyd tətbiqi"</string> <string name="role_notes_description" msgid="8496852798616883551">"Cihazınızda qeydlər aparmağa imkan verən tətbiqlər"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"qeydlər"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Defolt pulqabı tətbiqi"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Pulqabı tətbiqi"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Pulqabı tətbiqləri müxtəlif əməliyyat formaları ilə bağlı kömək etmək üçün kredit və sadiqlik kartlarını, avtomobil açarlarını və digər əşyaları saxlaya bilər."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> defolt pulqabı tətbiqi kimi ayarlansın?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"İcazəyə ehtiyac yoxdur"</string> <string name="request_role_current_default" msgid="738722892438247184">"Cari defolt"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Bir daha soruşmayın"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Defolt olaraq seçin"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data paylaşma yenilikləri"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Bəzi tətbiqlər məkan datasını paylaşma üsulunu dəyişib"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ayarlar"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Daxil olunub: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Daxil olunub: dünən <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Daxil olunub: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-b+sr+Latn/strings.xml b/PermissionController/res/values-b+sr+Latn/strings.xml index 3f109b756..e14ff1a67 100644 --- a/PermissionController/res/values-b+sr+Latn/strings.xml +++ b/PermissionController/res/values-b+sr+Latn/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Sve dozvole"</string> <string name="other_permissions" msgid="2901186127193849594">"Ostale mogućnosti aplikacije"</string> <string name="permission_request_title" msgid="8790310151025020126">"Zahtev za dozvolu"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Radnje Instaliraj/Deinstaliraj nisu podržane u Wear-u."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Izaberite čemu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> može da pristupa"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikacija <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> je ažurirana. Izaberite čemu ova aplikacija može da pristupa."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Otkaži"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni dozvole ako se aplikacija ne koristi"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ukloni dozvole i oslobodi prostor"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pauziraj aktivnosti ako se ne koristi"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Upravljajte aplikacijom ako se ne koristi"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Uklonite dozvole, izbrišite privremene fajlove i zaustavite obaveštenja"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Uklonite dozvole, izbrišite privremene fajlove, zaustavite obaveštenja i arhivirajte aplikaciju"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Radi zaštite podataka, dozvole za ovu aplikaciju se uklanjaju ako se aplikacija ne koristi par meseci."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Radi zaštite podataka, sledeće dozvole se uklanjaju ako se aplikacija ne koristi par meseci: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Radi zaštite podataka, dozvole su uklonjene iz aplikacija koje niste koristili par meseci."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacija za beleške"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacije koje vam omogućavaju da pravite beleške na uređaju"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"beleške"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Podrazumevana aplikacija Novčanik"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacija Novčanik"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikacije Novčanik mogu da čuvaju vaše kreditne kartice i kartice lojalnosti, ključeve od automobila i druge stvari kako bi vam pomogli u različitim oblicima transakcija."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Želite da podesite <xliff:g id="APP_NAME">%1$s</xliff:g> kao podrazumevanu aplikaciju Novčanik?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nije potrebna nijedna dozvola"</string> <string name="request_role_current_default" msgid="738722892438247184">"Trenutno podrazumevana"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne pitaj ponovo"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Podesi kao podrazum."</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Ažuriranja za deljenje podataka"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Neke aplikacije su promenile način na koji mogu da dele podatke o lokaciji"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Podešavanja"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Pristupano: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Pristupano juče: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Pristupano: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-be/strings.xml b/PermissionController/res/values-be/strings.xml index ef9983065..2e5ee642a 100644 --- a/PermissionController/res/values-be/strings.xml +++ b/PermissionController/res/values-be/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Усе дазволы"</string> <string name="other_permissions" msgid="2901186127193849594">"Іншыя магчымасці праграмы"</string> <string name="permission_request_title" msgid="8790310151025020126">"Запыт дазволу"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Дзеянні па ўсталяванні або выдаленні не падтрымліваюцца на Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Выберыце, да чаго дазволіць доступ праграме <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Праграма <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> была абноўлена. Выберыце, да чаго ёй дазволіць доступ."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Скасаваць"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Кіраваць праграмай, якой не карыстаюцца"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Выдаліць дазволы, часовыя файлы і спыніць апавяшчэнні"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Выдаліць дазволы і часовыя файлы, спыніць адпраўку апавяшчэнняў і архіваваць праграму"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Калі праграма не выкарыстоўваецца на працягу некалькіх месяцаў, то ў мэтах абароны вашых даных з яе будуць выдалены дазволы."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Калі праграма не выкарыстоўваецца на працягу некалькіх месяцаў, у мэтах абароны вашых даных будуць выдалены наступныя дазволы: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"У мэтах абароны вашых даных выдалены дазволы для праграм, якія не выкарыстоўваліся некалькі месяцаў."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Праграма для нататак"</string> <string name="role_notes_description" msgid="8496852798616883551">"Праграмы, якія дазваляюць рабіць нататкі на прыладзе"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"нататкі"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Стандартная праграма-кашалёк"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Праграма-кашалёк"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"У праграмах-кашальках можна захоўваць крэдытныя карткі, карткі лаяльнасці, ключы ад аўтамабіля і іншыя лічбавыя аб\'екты, што дае магчымасць ажыццяўляць розныя формы трансакцый."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Задаць у якасці стандартнай праграмы-кашалька праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Дазволы не патрэбныя"</string> <string name="request_role_current_default" msgid="738722892438247184">"Цяперашняя стандартная"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Больш не пытацца"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Зрабіць стандартнай"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Змяненні ў абагульванні даных"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Для некаторых праграм спосаб абагульвання даных пра месцазнаходжанне змяніўся"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Налады"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Апошні раз доступ быў атрыманы ў <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Апошні раз доступ быў атрыманы ўчора ў <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Апошні раз доступ быў атрыманы ў <xliff:g id="TIME_DATE_1">%2$s</xliff:g> <xliff:g id="TIME_DATE_0">%1$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-bg/strings.xml b/PermissionController/res/values-bg/strings.xml index fb5d670c7..323e131e8 100644 --- a/PermissionController/res/values-bg/strings.xml +++ b/PermissionController/res/values-bg/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Всички разрешения"</string> <string name="other_permissions" msgid="2901186127193849594">"Други възможности на приложението"</string> <string name="permission_request_title" msgid="8790310151025020126">"Заявка за разрешение"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Действията инсталиране и деинсталиране не се поддържат на устройства с Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Изберете до какво да има достъп <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Приложението <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> е актуализирано. Изберете до какво да има достъп."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Отказ"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Управление на прилож., ако не се ползва"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Премахване на разрешенията, изтриване на временните файлове и спиране на известията"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Премахване на разрешенията, изтриване на временните файлове, спиране на известията и архивиране на приложението"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"За да защитим данните ви, разрешенията за това приложение ще бъдат премахнати, ако не го използвате няколко месеца."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"За да защитим данните ви, следните разрешения ще бъдат премахнати, ако не използвате приложението няколко месеца: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"За да защитим данните ви, премахнахме разрешенията за приложенията, които не сте използвали от няколко месеца."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Приложение за бележки"</string> <string name="role_notes_description" msgid="8496852798616883551">"Приложения, които ви дават възможност да си водите бележки на устройството си"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"бележки"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Основно приложение за портфейл"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Приложение за портфейл"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Приложенията за портфейли могат да съхраняват кредитни карти, карти за лоялност, ключове за автомобил и други неща, за да ви помагат при различни видове транзакции."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Да се зададе ли <xliff:g id="APP_NAME">%1$s</xliff:g> като основно приложение за портфейл?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Не са необходими разрешения"</string> <string name="request_role_current_default" msgid="738722892438247184">"Текущо стандартно приложение"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Без повторно питане"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Задаване"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Актуализации за споделянето на данни"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Някои приложения са променили как може да споделят данни за местоположението ви"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Настройки"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Осъществен достъп: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Осъществен достъп: вчера, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Осъществен достъп: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-bn/strings.xml b/PermissionController/res/values-bn/strings.xml index c17a53046..3afae36d4 100644 --- a/PermissionController/res/values-bn/strings.xml +++ b/PermissionController/res/values-bn/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"সব অনুমতি"</string> <string name="other_permissions" msgid="2901186127193849594">"অ্যাপের অন্যান্য কার্যক্ষমতা"</string> <string name="permission_request_title" msgid="8790310151025020126">"অনুমতির অনুরোধ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear-এ ইনস্টল/আনইনস্টল করা যাবে না।"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> অ্যাপটিকে কিসে কিসে অ্যাক্সেস দেবেন তা বেছে নিন"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> আপডেট করা হয়েছে৷ অ্যাপটিকে কিসে কিসে অ্যাক্সেস দেবেন তা বেছে নিন।"</string> <string name="review_button_cancel" msgid="2191147944056548886">"বাতিল করুন"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ব্যবহার না করা হলে অ্যাপ ম্যানেজ করুন"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"অনুমতি সরান, অস্থায়ী ফাইল মুছুন এবং বিজ্ঞপ্তি বন্ধ করুন"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"অনুমতি সরান, অস্থায়ী ফাইল মুছুন, বিজ্ঞপ্তি বন্ধ করুন এবং অ্যাপ আর্কাইভ করুন"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"আপনার ডেটা সুরক্ষিত রাখতে এই অ্যাপ কয়েক মাস ব্যবহার করা না হলে, এটিকে দেওয়া অনুমতি প্রত্যাহার করে নেওয়া হবে।"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"আপনার ডেটা সুরক্ষিত রাখতে অ্যাপটি কয়েক মাস ব্যবহার করা না হলে, এই অনুমতি প্রত্যাহার করে নেওয়া হবে: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"আপনার ডেটা সুরক্ষিত রাখতে যেসব অ্যাপ গত কয়েক মাস ব্যবহার করা হয়নি সেগুলি থেকে অনুমতি প্রত্যাহার করে নেওয়া হয়েছে।"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"নোট অ্যাপ"</string> <string name="role_notes_description" msgid="8496852798616883551">"অ্যাপ, যা আপনার ডিভাইসে নোট নেওয়ার অনুমতি দেয়"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"নোট"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ডিফল্ট ওয়ালেট অ্যাপ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"ওয়ালেট অ্যাপ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"বিভিন্ন ধরনের ট্রানজ্যাকশনের ক্ষেত্রে আপনাকে সাহায্য করতে, ওয়ালেট অ্যাপ আপনার ক্রেডিট ও লয়ালটি কার্ড, গাড়ির \'কী\' এবং অন্যান্য জিনিস সেভ করতে পারবে।"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপকে আপনার ডিফল্ট ওয়ালেট অ্যাপ হিসেবে সেট করবেন?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"কোনও অনুমতির প্রয়োজন নেই"</string> <string name="request_role_current_default" msgid="738722892438247184">"বর্তমান ডিফল্ট"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"আর দেখতে চাই না"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ডিফল্ট হিসেবে রাখুন"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ডেটা শেয়ারিং সংক্রান্ত আপডেট"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"কিছু অ্যাপ আপনার লোকেশন ডেটা শেয়ার করার উপায়ের ক্ষেত্রে পরিবর্তন করেছে"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"সেটিংস"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>-এ অ্যাক্সেস করা হয়েছে"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"গতকাল <xliff:g id="TIME_DATE">%1$s</xliff:g>-এ অ্যাক্সেস করা হয়েছে"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>-এ অ্যাক্সেস করা হয়েছে"</string> </resources> diff --git a/PermissionController/res/values-bs/strings.xml b/PermissionController/res/values-bs/strings.xml index 061ed86a1..37721ef06 100644 --- a/PermissionController/res/values-bs/strings.xml +++ b/PermissionController/res/values-bs/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Sva odobrenja"</string> <string name="other_permissions" msgid="2901186127193849594">"Ostale mogućnosti aplikacije"</string> <string name="permission_request_title" msgid="8790310151025020126">"Zahtjev za odobrenje"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Instaliranje/deinstaliranje nije podržano na Wearu."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Izaberite čemu aplikacija <b><xliff:g id="APP_NAME">%1$s</xliff:g>&Lt;/b> može pristupiti"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikacija &Lt;b><xliff:g id="APP_NAME">%1$s</xliff:g>&Lt;/b> je ažurirana. Izaberite čemu ova aplikacija može pristupiti."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Otkaži"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni odobrenja ako se aplikacija ne koristi"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ukloni odobrenja i oslobodi prostor"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pauziraj aktivnost apl. ako se ne koristi"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Upravljaj aplikacijom ako se ne koristi"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Uklonite odobrenja, izbrišite privremene fajlove i zaustavite obavještenja"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Uklonite odobrenja, izbrišite privremene fajlove, zaustavite obavještenja i arhivirajte aplikaciju"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Zbog zaštite vaših podataka, odobrenja za ovu aplikaciju će se ukloniti ako se ona ne bude koristila nekoliko mjeseci."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Radi zaštite vaših podataka, ako se aplikacija ne bude koristila nekoliko mjeseci, uklonit će se sljedeća odobrenja: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Zbog zaštite vaših podataka uklonjena su odobrenja iz aplikacija koje niste koristili nekoliko mjeseci."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacija za bilješke"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacije koje vam dozvoljavaju da pravite bilješke na uređaju"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"bilješke"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Zadana aplikacija za novčanik"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacija za novčanik"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikacije za novčanik mogu pohranjivati kreditne kartice, kartice lojalnosti, ključeve automobila i druge stvari da vam pomognu prilikom raznih oblika transakcija."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Postaviti aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> kao zadanu aplikaciju za novčanik?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nije potrebno odobrenje"</string> <string name="request_role_current_default" msgid="738722892438247184">"Trenutno zadano"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne pitaj ponovo"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Postavi kao zadano"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Promjene u dijeljenju podataka"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Neke aplikacije mogu promijeniti način na koji mogu dijeliti podatke o lokaciji"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Postavke"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Pristupljeno je u <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Pristupljeno je jučer u <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Pristupljeno je <xliff:g id="TIME_DATE_0">%1$s</xliff:g> u <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ca/strings.xml b/PermissionController/res/values-ca/strings.xml index 729b8f20f..efc256729 100644 --- a/PermissionController/res/values-ca/strings.xml +++ b/PermissionController/res/values-ca/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Tots els permisos"</string> <string name="other_permissions" msgid="2901186127193849594">"Altres competències de l\'aplicació"</string> <string name="permission_request_title" msgid="8790310151025020126">"Sol·licitud de permís"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Les accions d\'instal·lar o de desinstal·lar no s\'admeten a Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Tria a què vols que tingui accés <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"S\'ha actualitzat <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Tria a què vols que tingui accés aquesta aplicació."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel·la"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Suprimeix els permisos si no s\'utilitza l\'aplicació"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Suprimeix els permisos i allibera espai"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Activitat a l\'app en pausa si no s\'usa"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gestiona l\'aplicació si no s\'utilitza"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Suprimeix els permisos i els fitxers temporals, i atura les notificacions"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Suprimeix els permisos i els fitxers temporals, atura les notificacions i arxiva l\'aplicació"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Per protegir les teves dades, els permisos d\'aquesta aplicació se suprimiran si no la utilitzes durant uns mesos."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Si l\'aplicació no s\'utilitza durant uns mesos, se suprimiran els permisos següents per protegir les teves dades: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Per protegir les teves dades, s\'han suprimit els permisos de les aplicacions que no has utilitzat durant els darrers mesos."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplicació de notes"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplicacions que et permeten prendre notes al dispositiu"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de cartera predeterminada"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplicació de cartera"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Les aplicacions de cartera poden emmagatzemar les targetes de crèdit i de fidelització, les claus del cotxe i altres elements per ajudar-te amb diverses formes de transaccions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Vols definir <xliff:g id="APP_NAME">%1$s</xliff:g> com l\'aplicació de cartera predeterminada?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No calen permisos"</string> <string name="request_role_current_default" msgid="738722892438247184">"Predeterminada actualment"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"No m\'ho tornis a preguntar"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Estableix com a predeterminada"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Canvis en la compartició de dades"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunes aplicacions han canviat la manera en què poden compartir les teves dades d\'ubicació"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configuració"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"S\'hi ha accedit a les <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"S\'hi va accedir ahir a les <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"S\'hi ha accedit el dia <xliff:g id="TIME_DATE_0">%1$s</xliff:g> a les <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index 20c594403..30be5cf67 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Všechna oprávnění"</string> <string name="other_permissions" msgid="2901186127193849594">"Ostatní oprávnění aplikace"</string> <string name="permission_request_title" msgid="8790310151025020126">"Žádost o oprávnění"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Akce instalace/odinstalace nejsou v zařízení Wear podporovány."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Určete, k čemu aplikaci <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> povolíte přístup"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikace <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> byla aktualizována. Určete, k čemu jí povolíte přístup."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Zrušit"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Odebrat oprávnění, pokud se aplikace nepoužívá"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Odebrat oprávnění a uvolnit místo"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pozastavit aktivitu při nepoužívání"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Spravovat aplikaci, pokud se nepoužívá"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Odebrat oprávnění, smazat dočasné soubory a zastavit oznámení"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Odebrat oprávnění, smazat dočasné soubory, zastavit oznámení a archivovat aplikaci"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Pokud tuto aplikaci několik měsíců nepoužijete, kvůli ochraně vašich dat jí budou oprávnění odebrána."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Pokud tuto aplikaci několik měsíců nepoužijete, budou jí kvůli ochraně vašich dat odebrána následující oprávnění: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Za účelem ochrany vašich dat byla odebrána oprávnění aplikacím, které jste několik měsíců nepoužili."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikace pro poznámky"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikace, které umožňují dělat si na zařízení poznámky."</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"poznámky"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Výchozí aplikace typu peněženka"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikace typu peněženka"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikace typu peněženka můžou uložit vaše platební a věrnostní karty, klíče od auta a další věci, a usnadnit vám tam různé transakce."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Nastavit aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> jako výchozí peněženku?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nejsou potřeba žádná oprávnění"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aktuálně výchozí"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Příště se neptat"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Změnit na výchozí"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Aktualizace sdílení dat"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Některé aplikace změnily způsob, kterým mohou sdílet údaje o vaší poloze"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Nastavení"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Poslední přístup: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Poslední přístup: včera v <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Poslední přístup: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml index 7655150ee..27e596e06 100644 --- a/PermissionController/res/values-da/strings.xml +++ b/PermissionController/res/values-da/strings.xml @@ -31,7 +31,7 @@ <string name="grant_dialog_button_deny_and_dont_ask_again" msgid="1748925431574312595">"Tillad ikke, og spørg ikke igen"</string> <string name="grant_dialog_button_no_upgrade" msgid="8344732743633736625">"Behold \"Mens appen er i brug\""</string> <string name="grant_dialog_button_no_upgrade_one_time" msgid="5125892775684968694">"Behold \"Kun denne ene gang\""</string> - <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Mere info"</string> + <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Flere oplysninger"</string> <string name="grant_dialog_button_allow_all" msgid="5939066403732409516">"Tillad alle"</string> <string name="grant_dialog_button_always_allow_all" msgid="1719900027660252167">"Tillad altid alle"</string> <string name="grant_dialog_button_allow_limited_access" msgid="5713551784422137594">"Tillad begrænset adgang"</string> @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alle tilladelser"</string> <string name="other_permissions" msgid="2901186127193849594">"Andre app-egenskaber"</string> <string name="permission_request_title" msgid="8790310151025020126">"Anmodning om tilladelse"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Det er ikke muligt at installere/afinstallere på Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Vælg, hvad <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> må få adgang til"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> er blevet opdateret. Vælg, hvad denne app må få adgang til."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Annuller"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Fjern tilladelser, hvis appen ikke bruges"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Fjern tilladelser, og frigør plads"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Sæt appaktivitet på pause ved inaktivitet"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Administrer appen, hvis den ikke bruges"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Fjern tilladelser, slet midlertidige filer, og stop notifikationer"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Fjern tilladelser, slet midlertidige filer, deaktiver notifikationer, og arkivér appen"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Hvis appen ikke bliver brugt i et par måneder, fjernes tilladelser for appen for at beskytte dine data."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Hvis appen ikke bliver brugt i et par måneder, fjernes følgende tilladelser for at beskytte dine data: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Tilladelserne til apps, du ikke har brugt i et par måneder, er blevet fjernet for at beskytte dine data."</string> @@ -352,10 +352,10 @@ <string name="role_assistant_label" msgid="4727586018198208128">"Standardapp for digital assistent"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"App for digital assistent"</string> <string name="role_assistant_description" msgid="6622458130459922952">"Assistanceapps kan hjælpe dig på baggrund af oplysningerne på den aktuelle skærm. Nogle apps understøtter både startertjenester og tjenester til indtaling for at give dig integreret assistance."</string> - <string name="role_browser_label" msgid="2877796144554070207">"Standardbrowserapp"</string> + <string name="role_browser_label" msgid="2877796144554070207">"Standardapp til browsing"</string> <string name="role_browser_short_label" msgid="6745009127123292296">"Browserapp"</string> <string name="role_browser_description" msgid="3465253637499842671">"Apps, der giver dig adgang til internettet og viser links, som du trykker på"</string> - <string name="role_browser_request_title" msgid="2895200507835937192">"Vil du angive <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardbrowserapp?"</string> + <string name="role_browser_request_title" msgid="2895200507835937192">"Vil du angive <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardapp til browsing?"</string> <string name="role_browser_request_description" msgid="5888803407905985941">"Der kræves ingen tilladelser"</string> <string name="role_dialer_label" msgid="1100224146343237968">"Standardapp til opkald"</string> <string name="role_dialer_short_label" msgid="7186888549465352489">"Opkaldsapp"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App til notetagning"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps, som giver dig mulighed for at tage noter på din enhed"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"noter"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standardapp til digital pung"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App til digital pung"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Apps til digitale punge kan gemme dine kredit- og loyalitetskort, bilnøgler m.m. for at hjælpe med forskellige former for transaktioner."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Vil du angive <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardapp til digital pung?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Der kræves ingen tilladelser"</string> <string name="request_role_current_default" msgid="738722892438247184">"Nuværende standardapp"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Spørg ikke igen"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Angiv som standard"</string> @@ -622,8 +627,8 @@ <string name="permission_rationale_data_sharing_source_message" msgid="8330794595417986883">"Udvikleren gav oplysninger til "<annotation id="link"><annotation id="install_source" example="App Store">"%1$s"</annotation></annotation>" om, hvordan denne app deler data. Udvikleren opdaterer muligvis disse oplysninger senere."</string> <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"Denne app deler muligvis lokationsdata for:"</string> <string name="permission_rationale_permission_data_sharing_varies_title" msgid="9103718980919908316">"Datadeling varierer"</string> - <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder. "<annotation id="link">"Flere oplysninger om datadeling"</annotation></string> - <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder."</string> + <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Databehandlingen kan variere afhængigt af din appversion, din brug, din region og din alder. "<annotation id="link">"Flere oplysninger om datadeling"</annotation></string> + <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Databehandlingen kan variere afhængigt af din appversion, din brug, din region og din alder."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Dine lokationsdata"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Skift denne apps adgang i "<annotation id="link">"privatlivsindstillingerne"</annotation></string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Appfunktionalitet"</string> @@ -639,7 +644,7 @@ <string name="data_sharing_updates_title" msgid="7996933386875213859">"Opdateringer om deling af lokationsdata"</string> <string name="data_sharing_updates_summary" msgid="764113985772233889">"Gennemse apps, der har ændret måden, hvorpå de kan dele dine lokationsdata"</string> <string name="data_sharing_updates_subtitle" msgid="6311537708950632329">"Disse apps har ændret den måde, hvorpå de kan dele dine lokationsdata. De har muligvis ikke delt dataene før eller kan nu anvende dem til annoncering eller marketing."</string> - <string name="data_sharing_updates_footer_message" msgid="1582711655172892107">"Udviklerne af disse apps har givet oplysninger om deres procedurer for datadeling til en appbutik. De kan opdatere procedurerne med tiden.\n\nProcedurer for datadeling kan variere afhængigt af din appversion, din brug, dit område og din alder."</string> + <string name="data_sharing_updates_footer_message" msgid="1582711655172892107">"Udviklerne af disse apps har givet oplysninger om deres procedurer for datadeling til en appbutik. De kan opdatere procedurerne med tiden.\n\nProcedurer for datadeling kan variere afhængigt af din appversion, din brug, din region og din alder."</string> <string name="learn_about_data_sharing" msgid="4200480587079488045">"Få flere oplysninger om deling af data"</string> <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Dine lokationsdata deles nu med tredjeparter"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Dine lokationsdata deles nu med tredjeparter med henblik på annoncering eller marketing"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Opdateringer om datadeling"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Nogle apps har ændret måden, hvorpå de kan dele dine lokationsdata"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Indstillinger"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Tilgået kl. <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Tilgået i går kl. <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Tilgået <xliff:g id="TIME_DATE_0">%1$s</xliff:g> kl. <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml index 4b862e97d..b8864f907 100644 --- a/PermissionController/res/values-de/strings.xml +++ b/PermissionController/res/values-de/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alle Berechtigungen"</string> <string name="other_permissions" msgid="2901186127193849594">"Andere App-Funktionen"</string> <string name="permission_request_title" msgid="8790310151025020126">"Berechtigungsanfrage"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Installations-/Deinstallationsaktion auf Android Wear nicht unterstützt."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Worauf darf die App <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> zugreifen?"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Die App <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> wurde aktualisiert. Worauf darf diese App zugreifen?"</string> <string name="review_button_cancel" msgid="2191147944056548886">"Abbrechen"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Berechtigungen entfernen, wenn die App nicht verwendet wird"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Berechtigungen löschen und Speicherplatz freigeben"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"App-Aktivität bei Nichtnutzung stoppen"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"App-Verhalten bei Nichtnutzung verwalten"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Berechtigungen entfernen, temporäre Dateien löschen und Benachrichtigungen stoppen"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Berechtigungen entfernen, temporäre Dateien löschen, Benachrichtigungen stoppen und die App archivieren"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Zum Schutz deiner Daten werden dieser App die Berechtigungen entzogen, wenn du sie einige Monate nicht verwendest."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Zum Schutz deiner Daten werden dieser App die folgenden Berechtigungen entzogen, wenn du sie einige Monate nicht verwendest: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Zum Schutz deiner Daten wurden Apps, die du einige Monate nicht verwendet hast, Berechtigungen entzogen."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notizen-App"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps zum Erstellen von Notizen auf deinem Gerät"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"Notizen"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standard-Wallet-App"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet-App"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"In Wallet-Apps kannst du deine Kredit- und Kundenkarten, Autoschlüssel und andere Dinge speichern, was dir bei verschiedenen Arten von Transaktionen hilft."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> als Standard-Wallet-App festlegen?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Keine Berechtigungen erforderlich"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aktueller Standard"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Nicht mehr fragen"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Als Standard festlegen"</string> @@ -625,7 +630,7 @@ <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Die Art der Datennutzung kann von der Version und Verwendung der App, von der Region und vom Alter des Nutzers abhängen. "<annotation id="link">"Weitere Informationen zur Datenweitergabe"</annotation></string> <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Die Datenschutz- und Sicherheitspraktiken können je nach App-Version, Verwendung, Region und Alter des Nutzers variieren."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Deine Standortdaten"</string> - <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Du kannst den Zugriff dieser App in den "<annotation id="link">"Datenschutzeinstellungen"</annotation>" ändern"</string> + <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Du kannst den Zugriff dieser App in den "<annotation id="link">"Datenschutzeinstellungen"</annotation>" ändern"</string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Funktionen der App"</string> <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Analytics"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Mitteilungen des Entwicklers"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Änderungen bei der Datenweitergabepraxis"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Bei einigen Apps hat sich die Art der Weitergabe deiner Standortdaten geändert"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Einstellungen"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Zugriff: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Zugriff: gestern, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Zugriff: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml index a8039d2d9..2c52bef34 100644 --- a/PermissionController/res/values-el/strings.xml +++ b/PermissionController/res/values-el/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Όλες οι άδειες"</string> <string name="other_permissions" msgid="2901186127193849594">"Άλλες δυνατότητες εφαρμογής"</string> <string name="permission_request_title" msgid="8790310151025020126">"Αίτημα άδειας"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Οι ενέργειες εγκατάστασης/απεγκατάστασης δεν υποστηρίζονται στο Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Επιλέξτε σε τι θα έχει πρόσβαση η εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Η εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ενημερώθηκε. Επιλέξτε σε τι θα έχει πρόσβαση αυτή η εφαρμογή."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Ακύρωση"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Διαχείρ. εφαρμ. αν δεν χρησιμοποιείται"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Κατάργηση αδειών, διαγραφή προσωρινών αρχείων και διακοπή ειδοποιήσεων"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Κατάργηση αδειών, διαγραφή προσωρινών αρχείων, διακοπή ειδοποιήσεων και αρχειοθέτηση της εφαρμογής"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Για την προστασία των δεδομένων σας, οι άδειες για αυτή την εφαρμογή θα καταργηθούν εάν η εφαρμογή δεν χρησιμοποιηθεί για μερικούς μήνες."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Για την προστασία των δεδομένων σας, εάν δεν έχει χρησιμοποιηθεί η εφαρμογή για μερικούς μήνες, οι παρακάτω άδειες θα καταργηθούν: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Για την προστασία των δεδομένων σας, έχουν καταργηθεί οι άδειες εφαρμογών που δεν έχετε χρησιμοποιήσει κατά τους τελευταίους μήνες."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Εφαρμογή σημειώσεων"</string> <string name="role_notes_description" msgid="8496852798616883551">"Εφαρμογές που σας επιτρέπουν να κρατάτε σημειώσεις στη συσκευή σας"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"σημειώσεις"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Προεπιλ. εφαρμογή πορτοφολιού"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Εφαρμογή πορτοφολιού"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Οι εφαρμογές πορτοφολιού μπορούν να αποθηκεύσουν πιστωτικές κάρτες και κάρτες επιβράβευσης αφοσιωμένων πελατών, κλειδιά αυτοκινήτου και άλλα στοιχεία για να σας βοηθήσουν με διάφορες μορφές συναλλαγών."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Ορισμός της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g> ως προεπιλεγμένης εφαρμογής πορτοφολιού;"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Δεν απαιτούνται άδειες"</string> <string name="request_role_current_default" msgid="738722892438247184">"Τρέχουσα προεπιλογή"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Να μην ερωτηθώ ξανά"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Προεπιλογή"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Ενημερώσεις κοινοποίησης δεδομένων"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Ορισμένες εφαρμογές άλλαξαν τον τρόπο με τον οποίο ενδέχεται να κοινοποιούν τα δεδομένα τοποθεσίας σας"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ρυθμίσεις"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Πρόσβαση στις <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Πρόσβαση χθες, στις <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Πρόσβαση στις <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-en-rAU/strings.xml b/PermissionController/res/values-en-rAU/strings.xml index 6fb7994a8..668f94655 100644 --- a/PermissionController/res/values-en-rAU/strings.xml +++ b/PermissionController/res/values-en-rAU/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"All permissions"</string> <string name="other_permissions" msgid="2901186127193849594">"Other app capabilities"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permission request"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Install/Uninstall actions not supported on Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Choose what to allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> has been updated. Choose what access to allow this app."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remove permissions and free up space"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pause app activity if unused"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Manage app if unused"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissions, delete temporary files and stop notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remove permissions, delete temporary files, stop notifications and archive the app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"To protect your data, permissions for this app will be removed if the app is unused for a few months."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"To protect your data, if the app is unused for a few months, the following permissions will be removed: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"To protect your data, permissions have been removed from apps that you haven’t used in a few months."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps that allow you to take notes on your device"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Set <xliff:g id="APP_NAME">%1$s</xliff:g> as your default wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No permissions needed"</string> <string name="request_role_current_default" msgid="738722892438247184">"Current default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Don\'t ask again"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Set as default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data sharing updates"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Some apps changed the way that they may share your location data"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Settings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Accessed <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accessed yesterday <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accessed <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-en-rCA/strings.xml b/PermissionController/res/values-en-rCA/strings.xml index a01a0cef2..b85bbaacb 100644 --- a/PermissionController/res/values-en-rCA/strings.xml +++ b/PermissionController/res/values-en-rCA/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"All permissions"</string> <string name="other_permissions" msgid="2901186127193849594">"Other app capabilities"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permission request"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Install/Uninstall actions not supported on Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Choose what to allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> has been updated. Choose what to allow this app to access."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remove permissions and free up space"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pause app activity if unused"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Manage app if unused"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissions, delete temporary files, and stop notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remove permissions, delete temporary files, stop notifications, and archive the app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"To protect your data, permissions for this app will be removed if the app is unused for a few months."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"To protect your data, if the app is unused for a few months, the following permissions will be removed: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"To protect your data, permissions have been removed from apps that you haven’t used in a few months."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps that allow you to take notes on your device"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Set <xliff:g id="APP_NAME">%1$s</xliff:g> as your default wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No permissions needed"</string> <string name="request_role_current_default" msgid="738722892438247184">"Current default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Don’t ask again"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Set as default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data sharing updates"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Some apps changed the way they may share your location data"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Settings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Accessed <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accessed yesterday <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accessed <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-en-rGB/strings.xml b/PermissionController/res/values-en-rGB/strings.xml index bfaca7355..727003134 100644 --- a/PermissionController/res/values-en-rGB/strings.xml +++ b/PermissionController/res/values-en-rGB/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"All permissions"</string> <string name="other_permissions" msgid="2901186127193849594">"Other app capabilities"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permission request"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Install/Uninstall actions not supported on Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Choose what to allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> has been updated. Choose what access to allow this app."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remove permissions and free up space"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pause app activity if unused"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Manage app if unused"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissions, delete temporary files and stop notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remove permissions, delete temporary files, stop notifications and archive the app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"To protect your data, permissions for this app will be removed if the app is unused for a few months."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"To protect your data, if the app is unused for a few months, the following permissions will be removed: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"To protect your data, permissions have been removed from apps that you haven’t used in a few months."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps that allow you to take notes on your device"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Set <xliff:g id="APP_NAME">%1$s</xliff:g> as your default wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No permissions needed"</string> <string name="request_role_current_default" msgid="738722892438247184">"Current default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Don\'t ask again"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Set as default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data sharing updates"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Some apps changed the way that they may share your location data"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Settings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Accessed <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accessed yesterday <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accessed <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-en-rIN/strings.xml b/PermissionController/res/values-en-rIN/strings.xml index bfaca7355..727003134 100644 --- a/PermissionController/res/values-en-rIN/strings.xml +++ b/PermissionController/res/values-en-rIN/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"All permissions"</string> <string name="other_permissions" msgid="2901186127193849594">"Other app capabilities"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permission request"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Install/Uninstall actions not supported on Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Choose what to allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> has been updated. Choose what access to allow this app."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remove permissions and free up space"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pause app activity if unused"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Manage app if unused"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissions, delete temporary files and stop notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remove permissions, delete temporary files, stop notifications and archive the app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"To protect your data, permissions for this app will be removed if the app is unused for a few months."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"To protect your data, if the app is unused for a few months, the following permissions will be removed: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"To protect your data, permissions have been removed from apps that you haven’t used in a few months."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps that allow you to take notes on your device"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Set <xliff:g id="APP_NAME">%1$s</xliff:g> as your default wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No permissions needed"</string> <string name="request_role_current_default" msgid="738722892438247184">"Current default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Don\'t ask again"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Set as default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data sharing updates"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Some apps changed the way that they may share your location data"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Settings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Accessed <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accessed yesterday <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accessed <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-en-rXC/strings.xml b/PermissionController/res/values-en-rXC/strings.xml index 34a84175e..9a9841f39 100644 --- a/PermissionController/res/values-en-rXC/strings.xml +++ b/PermissionController/res/values-en-rXC/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"All permissions"</string> <string name="other_permissions" msgid="2901186127193849594">"Other app capabilities"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permission request"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Install/Uninstall actions not supported on Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Choose what to allow <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> to access"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> has been updated. Choose what to allow this app to access."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancel"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remove permissions if app isn’t used"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remove permissions and free up space"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pause app activity if unused"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Manage app if unused"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissions, delete temporary files, and stop notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remove permissions, delete temporary files, stop notifications, and archive the app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"To protect your data, permissions for this app will be removed if the app is unused for a few months."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"To protect your data, if the app is unused for a few months, the following permissions will be removed: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"To protect your data, permissions have been removed from apps that you haven’t used in a few months."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps that allow you to take notes on your device"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Set <xliff:g id="APP_NAME">%1$s</xliff:g> as your default wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No permissions needed"</string> <string name="request_role_current_default" msgid="738722892438247184">"Current default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Don’t ask again"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Set as default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Data sharing updates"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Some apps changed the way they may share your location data"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Settings"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Accessed <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accessed yesterday <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accessed <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index ba8386062..30dc57425 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todos los permisos"</string> <string name="other_permissions" msgid="2901186127193849594">"Otras funciones de la app"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitud de permiso"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear no admite las acciones de instalación y desinstalación"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Selecciona los permisos de acceso para <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Se actualizó <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Selecciona los permisos de acceso para esta app."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Quitar los permisos si la app no se usa"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Quitar permisos y liberar espacio"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausar actividad en la app si no se usa"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Administrar la app si no se usa"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Quitar permisos, borrar archivos temporales y detener notificaciones"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Quita permisos, borra archivos temporales, detiene notificaciones y archiva la app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para proteger tus datos, se quitarán los permisos de esta app si no la usas durante varios meses."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para proteger tus datos, si no usas la app durante varios meses, se quitarán los siguientes permisos: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para proteger tus datos, se quitaron los permisos de las apps que están en desuso hace varios meses."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps que te permiten tomar notas en tu dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de billetera predet."</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App de billetera"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Las apps de billetera pueden almacenar tus tarjetas de crédito y lealtad, las llaves de tu vehículo y otros elementos para ayudarte con los diferentes tipos de transacciones."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"¿Quieres configurar <xliff:g id="APP_NAME">%1$s</xliff:g> como tu app de billetera predeterminada?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No se requieren permisos"</string> <string name="request_role_current_default" msgid="738722892438247184">"App predeterminada actualmente"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"No volver a preguntar"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Hacer predeterminada"</string> @@ -644,8 +649,11 @@ <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Tus datos de ubicación ahora se comparten con terceros"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Tus datos de ubicación ahora se comparten con terceros para publicidad o marketing"</string> <string name="updated_in_last_days" msgid="8371811947153042322">"{count,plural, =0{Se actualizó en el último día}=1{Se actualizó en el último día}many{Se actualizó en los últimos # de días}other{Se actualizó en los últimos # días}}"</string> - <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay novedades por el momento"</string> + <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay actualizaciones por el momento"</string> <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Actualizaciones del uso compartido de datos"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunas apps cambiaron la forma en que podrían compartir tus datos de ubicación"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configuración"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Último acceso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Último acceso: ayer a la(s) <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Último acceso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> a la(s) <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index 54f7751c2..7a90b6bbd 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todos los permisos"</string> <string name="other_permissions" msgid="2901186127193849594">"Otras funciones de la aplicación"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitud de permiso"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Las acciones de instalar y desinstalar no pueden realizarse en Wear"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Elige los permisos de acceso que quieres conceder a <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> se ha actualizado. Elige los permisos de acceso que quieres conceder a esta aplicación."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Quitar permisos si la aplicación no se usa"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Quitar permisos y liberar espacio"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausar actividad de la aplicación si no se usa"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gestionar la aplicación si no se usa"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Quita permisos, elimina archivos temporales y detiene las notificaciones"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Quita permisos, elimina archivos temporales, detiene las notificaciones y archiva la aplicación"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para proteger tus datos, se quitarán los permisos de esta aplicación si no la usas durante unos meses."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para proteger tus datos, si la aplicación no se ha utilizado durante unos meses, se quitarán los siguientes permisos: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para proteger tus datos, se han quitado los permisos de las aplicaciones que llevas unos meses sin usar."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplicación de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplicaciones que te permiten tomar notas en tu dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de cartera predeterminada"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplicación de cartera"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Las aplicaciones de cartera pueden almacenar tus tarjetas de crédito y de fidelización, tus llaves del coche y otros elementos para ayudarte con los distintos tipos de transacciones."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"¿Establecer <xliff:g id="APP_NAME">%1$s</xliff:g> como aplicación de cartera predeterminada?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"No se necesita ningún permiso"</string> <string name="request_role_current_default" msgid="738722892438247184">"Predeterminada"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"No volver a preguntar"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Establecer como predeterminado"</string> @@ -627,7 +632,7 @@ <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Tus datos de ubicación"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Cambia el acceso de esta aplicación en la "<annotation id="link">"configuración de privacidad"</annotation></string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Funcionalidad de la aplicación"</string> - <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Analítica"</string> + <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Estadísticas"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Comunicaciones del desarrollador"</string> <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"Publicidad o marketing"</string> <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"Prevención de fraudes, seguridad y cumplimiento"</string> @@ -644,8 +649,11 @@ <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Tus datos de ubicación ahora se comparten con terceros"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Tus datos de ubicación ahora se comparten con terceros para fines de publicidad o marketing"</string> <string name="updated_in_last_days" msgid="8371811947153042322">"{count,plural, =0{Se ha actualizado en el último día}=1{Se ha actualizado en el último día}many{Se ha actualizado en los últimos # días}other{Se ha actualizado en los últimos # días}}"</string> - <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay novedades por el momento"</string> + <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay cambios por el momento"</string> <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Cambios en cómo se comparten los datos"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunas aplicaciones han cambiado cómo pueden compartir tus datos de ubicación"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ajustes"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Último acceso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Último acceso: ayer, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Último acceso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-et/strings.xml b/PermissionController/res/values-et/strings.xml index f17cbd1f8..2d2cdfd25 100644 --- a/PermissionController/res/values-et/strings.xml +++ b/PermissionController/res/values-et/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Kõik load"</string> <string name="other_permissions" msgid="2901186127193849594">"Rakenduse muud funktsioonid"</string> <string name="permission_request_title" msgid="8790310151025020126">"Loa taotlus"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ei toeta installimist/desinstallimist."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Valige, millele lubate rakendusel <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> juurde pääseda"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Rakendust <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> värskendati. Valige, millele lubate sellel rakendusel juurde pääseda."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Tühista"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Eemalda load, kui rakendust ei kasutata"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Eemalda load ja vabasta ruumi"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Tegevusetuna rakenduse tegevuste peatamine"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Kasutamata rakenduse haldamine"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Eemaldatakse load, kustutatakse ajutised failid ja peatatakse märguanded"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Lubade eemaldamine, ajutiste failide kustutamine, märguannete peatamine ja rakenduse arhiivimine"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Teie andmete kaitsmiseks eemaldatakse selle rakenduse load, kui seda mõne kuu jooksul ei kasutata."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Teie andmete kaitsmiseks eemaldatakse selle rakenduse järgmised load, kui rakendust mõne kuu jooksul ei kasutata: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Teie andmete kaitsmiseks eemaldati load rakendustelt, mida te ei ole mõne kuu jooksul kasutanud."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Märkmerakendus"</string> <string name="role_notes_description" msgid="8496852798616883551">"Rakendused, mis võimaldavad teie seadmes märkmeid teha"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"märkmed"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Vaikerahakotirakendus"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Rahakotirakendus"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Rahakotirakendused võivad salvestada teie krediit- ja kliendikaarte, autovõtmeid ning muid asju, et eri tehinguvormide puhul aidata."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Kas määrata <xliff:g id="APP_NAME">%1$s</xliff:g> vaikimisi teie rahakotirakenduseks?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Lube ei ole vaja"</string> <string name="request_role_current_default" msgid="738722892438247184">"Praegune vaikeseade"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ära enam küsi"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Määra vaikeseadeks"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Andmete jagamise värskendused"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Mõni rakendus on muutnud teie asukohaandmete jagamise viisi"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Seaded"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Juurde pääsetud <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Juurde pääsetud eile <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Juurde pääsetud <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index a84c1f9ca..f0aaf7d97 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Baimen guztiak"</string> <string name="other_permissions" msgid="2901186127193849594">"Aplikazioaren beste gaitasun batzuk"</string> <string name="permission_request_title" msgid="8790310151025020126">"Baimen-eskaera"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Instalatzeko eta desinstalatzeko ekintzak ezin dira gauzatu Wear gailuetan."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Aukeratu zer atzi dezakeen <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioak"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Eguneratu egin da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Aukeratu aplikazioak zer atzi dezakeen."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Utzi"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Kendu baimenak aplikazioa erabiltzen ez bada"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Kendu baimenak eta egin tokia"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausatu aplikazioko jarduerak, erabiltzen ez bada"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Kudeatu aplikazioa erabiltzen ez bada"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Kendu baimenak, ezabatu aldi baterako fitxategiak eta geldiarazi jakinarazpenak"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Kendu baimenak, ezabatu aldi baterako fitxategiak, geldiarazi jakinarazpenak eta artxibatu aplikazioa"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Zure datuak babeste aldera, aplikazio honen baimenak kendu egingo dira aplikazioa ez baduzu erabiltzen zenbait hilabetez."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Zure datuak babeste aldera, kendu egingo dira honako baimen hauek zenbait hilabetez aplikazioa erabiltzen ez baduzu: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Zure datuak babeste aldera, kendu egin dira zenbait hilabetez erabili ez dituzun aplikazioen baimenak."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Oharren aplikazioa"</string> <string name="role_notes_description" msgid="8496852798616883551">"Gailuan oharrak idazteko aukera ematen dizuten aplikazioak"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"oharrak"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Diru-zorro lehenetsia"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Diru-zorroaren aplikazioa"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Diru-zorroaren aplikazioetan zure saldoa eta fideltasun-txartelak, autoko giltzak nahiz bestelako gauzak gorde ditzakezu, errazagoa izan dadin askotariko transakzioak egitea."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> diru-zorro lehenetsi gisa ezarri nahi duzu?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Ez du behar baimenik"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aplikazio lehenetsia"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ez galdetu berriro"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Ezarri lehenetsi gisa"</string> @@ -445,7 +450,7 @@ <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, gailuaren 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> + <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> <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> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Datuak partekatzeko aukeraren berritasunak"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Kokapen-datuak partekatzeko modua aldatu dute aplikazio batzuek"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ezarpenak"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Atzitze-data: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Atzo atzitu zen (<xliff:g id="TIME_DATE">%1$s</xliff:g>)"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Atzitze-data: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> (<xliff:g id="TIME_DATE_1">%2$s</xliff:g>)"</string> </resources> diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index 671694e0d..a525ae20f 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"همه اجازهها"</string> <string name="other_permissions" msgid="2901186127193849594">"سایر قابلیتهای برنامه"</string> <string name="permission_request_title" msgid="8790310151025020126">"درخواست اجازه"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"کنشهای نصب/حذف نصب در Wear پشتیبانی نمیشود."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"انتخاب کنید <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اجازه دارد به چه چیزی دسترسی پیدا کند"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بهروزرسانی شده است. انتخاب کنید این برنامه اجازه دارد به چه چیزی دسترسی پیدا کند."</string> <string name="review_button_cancel" msgid="2191147944056548886">"لغو"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"مدیریت برنامه درصورت عدم استفاده"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"اجازهها برداشته میشود، فایلهای موقت حذف میشود، و اعلانها متوقف میشوند"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"برداشتن اجازهها، حذف فایلهای موقت، توقف اعلانها، و بایگانی کردن برنامه"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"برای محافظت از دادههایتان، اگر طی چند ماه گذشته از این برنامه استفاده نشده باشد، اجازههای آن برداشته خواهد شد."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"برای محافظت از دادههایتان، اگر طی چند ماه گذشته از این برنامه استفاده نشده باشد، اجازههای زیر برداشته خواهد شد: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"برای محافظت از دادههایتان، اجازهها از برنامههایی که طی چند ماه گذشته استفاده نشدهاند برداشته شده است."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"برنامه یادداشتها"</string> <string name="role_notes_description" msgid="8496852798616883551">"برنامههایی که به شما اجازه میدهند در دستگاهتان یادداشتبرداری کنید"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"یادداشت"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"برنامه کیف پول پیشفرض"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"برنامه کیف پول"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"برنامههای کیف پول میتواند با ذخیره کردن کارتهای اعتباری و وفاداری، کلید خودرو، و موارد دیگر در انجام انواع مختلف تراکنش به شما کمک کند."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> بهعنوان برنامه کیف پول پیشفرض تنظیم شود؟"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"اجازهای لازم نیست"</string> <string name="request_role_current_default" msgid="738722892438247184">"برنامه پیشفرض کنونی"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"دوباره سؤال نشود"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"تنظیم برای پیشفرض"</string> @@ -553,12 +558,12 @@ <string name="safety_center_rescan_button" msgid="4517514567809409596">"اسکن کردن دستگاه"</string> <string name="safety_center_issue_card_dismiss_button" msgid="5113965506144222402">"رد کردن"</string> <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"این هشدار رد شود؟"</string> - <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"هرزمان خواستید تنظیمات امنیت و حریم خصوصی را مرور کنید تا محافظت بیشتری اضافه کنید"</string> + <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"هرزمان خواستید تنظیمات ایمنی و حریم خصوصی را مرور کنید تا محافظت بیشتری اضافه کنید"</string> <string name="safety_center_issue_card_confirm_dismiss_button" msgid="5884137843083634556">"رد شدن"</string> <string name="safety_center_issue_card_cancel_dismiss_button" msgid="2874578798877712346">"لغو"</string> <string name="safety_center_entries_category_title" msgid="34356964062813115">"تنظیمات"</string> <string name="safety_status_preference_title_and_summary_content_description" msgid="3511373256505058464">"وضعیت حریم خصوصی و امنیت. <xliff:g id="OVERALL_SAFETY_STATUS">%1$s</xliff:g>. <xliff:g id="SUMMARY_OF_DEVICE_STATUS">%2$s</xliff:g>"</string> - <string name="security_settings" msgid="3808106921175271317">"تنظیمات امنیتی"</string> + <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> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"بهروزرسانیهای همرسانی داده"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"برخیاز برنامهها روش همرسانی دادههای مکان شما را تغییر دادهاند"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"تنظیمات"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"تاریخ دسترسی: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"دسترسی در روز گذشته ساعت <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"دسترسی در <xliff:g id="TIME_DATE_0">%1$s</xliff:g> ساعت <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-fi/strings.xml b/PermissionController/res/values-fi/strings.xml index ee85d8df2..a8f157d78 100644 --- a/PermissionController/res/values-fi/strings.xml +++ b/PermissionController/res/values-fi/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Kaikki luvat"</string> <string name="other_permissions" msgid="2901186127193849594">"Muut sovellusluvat"</string> <string name="permission_request_title" msgid="8790310151025020126">"Lupapyyntö"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ei tue asennus- ja poistotoimintoja."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Valitse, mitä käyttöoikeuksia sovellukselle <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> myönnetään."</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> on päivitetty. Valitse, mitä käyttöoikeuksia tälle sovellukselle myönnetään."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Peru"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Poista luvat, jos sovellusta ei käytetä"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Poista lupia ja vapauta tilaa"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Keskeytä sovellustoim. jos ei käytössä"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Hallinnoi sovellusta, jos käyttämätön"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Poista käyttämättömät luvat ja väliaikaiset tiedostot ja pysäytä ilmoitukset"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Poista käyttämättömät luvat ja väliaikaiset tiedostot, pysäytä ilmoitukset ja arkistoi sovellus"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Datasi suojaamiseksi tämän sovelluksen luvat poistetaan, jos sovellusta ei käytetä muutamaan kuukauteen."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Jos sovellusta ei käytetä muutamaan kuukauteen, seuraavat luvat poistetaan datasi suojaamiseksi: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Datasi suojaamiseksi luvat on poistettu sovelluksilta, joita et ole käyttänyt muutamaan kuukauteen."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Muistiinpanosovellus"</string> <string name="role_notes_description" msgid="8496852798616883551">"Sovellukset, joilla voit ottaa muistiinpanoja laitteellasi"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"muistiinpanot"</string> + <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 tapahtumissa, koska ne voivat 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_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> <string name="request_role_set_as_default" msgid="4253949643984172880">"Aseta oletukseksi"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Datan jaon päivitykset"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Jotkin sovellukset ovat muuttaneet tapaa, jolla ne voivat jakaa sijaintitietoja"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Asetukset"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Avattu <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Avattu eilen klo <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Avattu <xliff:g id="TIME_DATE_0">%1$s</xliff:g> klo <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml index 50d896bcb..662ec7c11 100644 --- a/PermissionController/res/values-fr-rCA/strings.xml +++ b/PermissionController/res/values-fr-rCA/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Toutes les autorisations"</string> <string name="other_permissions" msgid="2901186127193849594">"Autres autorisations de l\'application"</string> <string name="permission_request_title" msgid="8790310151025020126">"Demande d\'autorisation"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Les actions d\'installation et de désinstallation ne sont pas prises en charge par Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Définissez les autorisations d\'accès de l\'application « <xliff:g id="APP_NAME">%1$s</xliff:g> »"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"L\'application « <xliff:g id="APP_NAME">%1$s</xliff:g> » a été mise à jour. Définissez ses autorisations d\'accès."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Annuler"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Retirer les autorisations si l\'application est inutilisée"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Retirer autorisations et libérer espace"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Suspendre l\'activité appli si inutilisée"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gérer l\'application si inutilisée"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Retirer les autorisations, supprimer les fichiers temporaires et arrêter les notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Retirer les autorisations, supprimer les fichiers temporaires, arrêter les notifications et archiver l\'application"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Afin de protéger vos données, les autorisations pour cette application seront retirées si elle n\'est pas utilisée pendant quelques mois."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Afin de protéger vos données, si l\'application n\'est pas utilisée pendant quelques mois, les autorisations suivantes seront supprimées : <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Afin de protéger vos données, les autorisations ont été supprimées pour les applications que vous n\'avez pas utilisées depuis quelques mois."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Application de prise de notes"</string> <string name="role_notes_description" msgid="8496852798616883551">"Applications qui vous permettent de prendre des notes sur votre appareil"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"remarques"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Appli portefeuille par défaut"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Application de portefeuille"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Les applications de portefeuille peuvent stocker vos cartes de crédit et de fidélité, vos clés de voiture et d\'autres données pour faciliter différentes modalités de transaction."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Définir <xliff:g id="APP_NAME">%1$s</xliff:g> comme application de portefeuille par défaut?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Aucune autorisation nécessaire"</string> <string name="request_role_current_default" msgid="738722892438247184">"Application par défaut actuelle"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne plus me demander"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Définir par défaut"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Mises à jour des pratiques de partage des données"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Certaines applis ont modifié comment elles peuvent partager vos données de localisation"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Paramètres"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Dernier accès : <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Accès hier (<xliff:g id="TIME_DATE">%1$s</xliff:g>)"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Accès : <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml index 97c3461e5..bd5b3eb99 100644 --- a/PermissionController/res/values-fr/strings.xml +++ b/PermissionController/res/values-fr/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Toutes les autorisations"</string> <string name="other_permissions" msgid="2901186127193849594">"Autres fonctionnalités de l\'application"</string> <string name="permission_request_title" msgid="8790310151025020126">"Demande d\'autorisation"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Opérations d\'installation et de désinstallation impossibles sur Android Wear"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Sélectionner les éléments auxquels <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> peut accéder"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"L\'application <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> a été mise à jour. Sélectionnez les éléments auxquels elle peut accéder."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Annuler"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Supprimer les autorisations si l\'application n\'est pas utilisée"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Supprimer autorisations et libérer espace"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Suspendre activité appli si inutilisée"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gérer l\'appli si inutilisée"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Retirer les autorisations, supprimer les fichiers temporaires et arrêter les notifications"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Retirer les autorisations, supprimer les fichiers temporaires, arrêter les notifications et archiver l\'appli"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Si cette application n\'est pas utilisée pendant plusieurs mois, ses autorisations seront supprimées afin de protéger vos données."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Pour protéger vos données, si l\'application n\'est pas utilisée pendant plusieurs mois, les autorisations suivantes seront supprimées : <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Afin de protéger vos données, les autorisations ont été supprimées pour les applications que vous n\'avez pas utilisées depuis plusieurs mois."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Appli de notes"</string> <string name="role_notes_description" msgid="8496852798616883551">"Applis vous permettant de prendre des notes sur votre appareil"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Portefeuille numérique par défaut"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Appli portefeuille numérique"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Les applis de portefeuille numérique stockent vos cartes bancaires, cartes de fidélité, clés de voiture et bien d\'autres choses vous permettant d\'effectuer diverses transactions."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Définir <xliff:g id="APP_NAME">%1$s</xliff:g> comme appli de portefeuille numérique par défaut ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Aucune autorisation nécessaire"</string> <string name="request_role_current_default" msgid="738722892438247184">"Appli par défaut actuelle"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne plus me demander"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Définir par défaut"</string> @@ -620,17 +625,17 @@ <string name="permission_rationale_data_sharing_source_title" msgid="6874604543125814316">"Origine des informations sur le partage des données"</string> <string name="permission_rationale_data_sharing_device_manufacturer_message" msgid="7569261218145653185">"Le développeur a fourni des infos au fabricant de cet appareil concernant la manière dont cette appli partage les données. Le développeur peut mettre à jour ces infos au fil du temps."</string> <string name="permission_rationale_data_sharing_source_message" msgid="8330794595417986883">"Le développeur a fourni des infos sur "<annotation id="link"><annotation id="install_source" example="App Store">"%1$s"</annotation></annotation>" concernant la manière dont cette appli partage les données. Le développeur peut mettre à jour ces infos au fil du temps."</string> - <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"L\'appli peut partager données de localisation pour :"</string> + <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"L\'appli peut partager des données de localis. pour :"</string> <string name="permission_rationale_permission_data_sharing_varies_title" msgid="9103718980919908316">"Partage des données variable"</string> <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"La gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge. "<annotation id="link">"En savoir plus sur le partage des données"</annotation></string> <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"La gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Vos données de localisation"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Modifiez l\'accès de cette appli dans les "<annotation id="link">"paramètres de confidentialité"</annotation></string> - <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Fonctionnement de l\'appli"</string> - <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Données analytiques"</string> + <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"le fonctionnement de l\'appli ;"</string> + <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"les données analytiques ;"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Communications du développeur"</string> - <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"Publicité ou marketing"</string> - <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"Prévention des fraudes, sécurité et conformité"</string> + <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"la publicité ou marketing ;"</string> + <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"la prévention des fraudes, la sécurité et la conformité."</string> <string name="permission_rationale_purpose_personalization" msgid="1589973273682238708">"Personnalisation"</string> <string name="permission_rationale_purpose_account_management" msgid="2985772421946688879">"Gestion du compte"</string> <string name="app_permission_rationale_message" msgid="8511466916077100713">"Sécurité des données"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Modifications du partage des données"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Certaines applis ont modifié la façon dont elles peuvent partager vos données de localisation"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Paramètres"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Dernière consultation : <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Dernière consultation : hier, à <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Dernière consultation : <xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-gl/strings.xml b/PermissionController/res/values-gl/strings.xml index 5c5a61baf..a068ebb21 100644 --- a/PermissionController/res/values-gl/strings.xml +++ b/PermissionController/res/values-gl/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todos os permisos"</string> <string name="other_permissions" msgid="2901186127193849594">"Outras funcionalidades da aplicación"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitude de permiso"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"As accións de instalar e desinstalar non son compatibles con Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Seleccionar os permisos de acceso que queres dar á aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Actualizouse a aplicación <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Selecciona os permisos de acceso que lle queres dar."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Quitar permisos se non se usa a aplicación"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Quitar permisos e liberar espazo"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pór en pausa actividade de apps sen uso"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Xestionar aplicación se non se usa"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Quita permisos, elimina ficheiros temporais e detén as notificacións"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Quita permisos, elimina os ficheiros temporais, detén as notificacións e arquiva a aplicación"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para protexer os teus datos, quitaranse os permisos desta aplicación se pasas varios meses sen utilizala."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para protexer os teus datos, se a aplicación leva varios meses sen usarse, quitaranse os seguintes permisos: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para protexer os teus datos, quitáronse os permisos das aplicacións que levas varios meses sen usar."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplicación de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplicacións que che permiten tomar notas no dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de carteira predeterminada"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplicación de carteira"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"As aplicacións de carteira poden almacenar as túas tarxetas de crédito e de fidelidade, as chaves do coche e outros obxectos para axudar en distintos tipos de transaccións."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Queres establecer <xliff:g id="APP_NAME">%1$s</xliff:g> como aplicación de carteira predeterminada?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Non se necesita ningún permiso"</string> <string name="request_role_current_default" msgid="738722892438247184">"App predeterminada actual"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Non preguntar de novo"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"App predeterminada"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Actualizacións de uso compartido de datos"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunhas aplicacións cambiaron a forma en que poden compartir os teus datos de localización"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configuración"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Último acceso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Último acceso: onte, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Último acceso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml index bd5988260..bbc1645d3 100644 --- a/PermissionController/res/values-gu/strings.xml +++ b/PermissionController/res/values-gu/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"બધી પરવાનગીઓ"</string> <string name="other_permissions" msgid="2901186127193849594">"અન્ય ઍપ સુવિધાઓ"</string> <string name="permission_request_title" msgid="8790310151025020126">"પરવાનગીની વિનંતી"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear પર ઇન્સ્ટૉલ/અનઇન્સ્ટૉલ ક્રિયાઓ સમર્થિત નથી."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>ને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> અપડેટ કરવામાં આવી છે. આ ઍપને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો."</string> <string name="review_button_cancel" msgid="2191147944056548886">"રદ કરો"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"જો ઍપ વાપરતા ન હો, તો તેને મેનેજ કરો"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"પરવાનગીઓ કાઢી નાખો, હંગામી ફાઇલો ડિલીટ કરો અને નોટિફિકેશન બંધ કરો"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"પરવાનગીઓ કાઢી નાખો, હંગામી ફાઇલો ડિલીટ કરો, નોટિફિકેશન બંધ કરો અને ઍપને આર્કાઇવ કરો"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"તમારા ડેટાની સુરક્ષા કરવા માટે, જો ઍપનો કેટલાક મહિનાથી ઉપયોગ કરવામાં આવ્યો ન હોય, તો આ ઍપની પરવાનગીઓ કાઢી નાખવામાં આવશે."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"તમારા ડેટાની સુરક્ષા કરવા માટે, જો ઍપનો કેટલાક મહિનાથી ઉપયોગ કરવામાં આવ્યો ન હોય, તો નીચેની પરવાનગીઓ કાઢી નાખવામાં આવશે: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"તમારા ડેટાની સુરક્ષા માટે, તમારા દ્વારા કેટલાક મહિનાથી ઉપયોગમાં ન લેવાયેલી ઍપની પરવાનગીઓ કાઢી નાખવામાં આવી છે."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"નોંધ માટેની ઍપ"</string> <string name="role_notes_description" msgid="8496852798616883551">"ઍપ કે જે તમને તમારા ડિવાઇસ પર નોંધ કરવાની મંજૂરી આપે છે"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"નોંધ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ડિફૉલ્ટ વૉલેટ ઍપ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet ઍપ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"વૉલેટ સંબંધી ઍપ તમારા ક્રેડિટ અને લૉયલ્ટિ કાર્ડ, કાર કી તેમજ વિવિધ વ્યવહારોમાં સહાય કરી શકતી અન્ય બાબતો સ્ટોર કરી શકે છે."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"શું <xliff:g id="APP_NAME">%1$s</xliff:g>ને તમારી ડિફૉલ્ટ વૉલેટ ઍપ તરીકે સેટ કરીએ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"કોઈ પરવાનગી જરૂરી નથી"</string> <string name="request_role_current_default" msgid="738722892438247184">"હાલની ડિફૉલ્ટ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ફરીથી પૂછશો નહીં"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ડિફૉલ્ટ તરીકે સેટ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ડેટા શેરિંગ સંબંધિત અપડેટ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"કેટલીક ઍપ દ્વારા તમારા લોકેશન ડેટાને શેર કરવાની રીત બદલવામાં આવી હોઈ શકે છે"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"સેટિંગ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"ઍક્સેસ કર્યાનો સમય <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ઍક્સેસ કર્યાનો સમય ગઈકાલે <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"ઍક્સેસ કર્યાનો સમય <xliff:g id="TIME_DATE_0">%1$s</xliff:g>ના રોજ <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index 04b9167aa..1f334e4f3 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"सभी अनुमतियां"</string> <string name="other_permissions" msgid="2901186127193849594">"ऐप्लिकेशन को ये अनुमतियां भी दी गई हैं"</string> <string name="permission_request_title" msgid="8790310151025020126">"अनुमति पाने का अनुरोध"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear पर ऐप्लिकेशन इंस्टॉल या अनइंस्टॉल नहीं किए जा सकते."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"चुनें कि <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को किन चीज़ों को ऐक्सेस करने की अनुमति दी जाए"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपडेट कर दिया गया है. चुनें कि इस ऐप्लिकेशन को किन चीज़ों को ऐक्सेस करने की अनुमति दी जाए."</string> <string name="review_button_cancel" msgid="2191147944056548886">"रद्द करें"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"इस्तेमाल नहीं हुआ ऐप्लिकेशन मैनेज करें"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ऐप्लिकेशन की अनुमतियां हटाएं, डिवाइस में कुछ समय के लिए रहने वाली फ़ाइलें मिटाएं, और सूचनाएं रोकें"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ऐप्लिकेशन की अनुमतियां हटाएं, डिवाइस में कुछ समय के लिए रहने वाली फ़ाइलें मिटाएं, सूचनाएं रोकें, और ऐप्लिकेशन संग्रहित करें"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"अगर इस ऐप्लिकेशन का इस्तेमाल कुछ महीनों तक नहीं किया गया, तो इसे दी गई अनुमतियां हटा दी जाएंगी. ऐसा आपके डेटा को सुरक्षित रखने के लिए किया जाएगा."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"अगर ऐप्लिकेशन कुछ महीनों से इस्तेमाल नहीं हुआ है, तो आपके डेटा को सुरक्षित रखने के लिए ये अनुमतियां हटा दी जाएंगी: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"जिन ऐप्लिकेशन का इस्तेमाल कुछ महीनों से नहीं हुआ है उन्हें दी गई अनुमतियां हटा दी गई हैं. ऐसा आपके डेटा को सुरक्षित रखने के लिए किया गया है."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"नोट लिखने के लिए ऐप्लिकेशन"</string> <string name="role_notes_description" msgid="8496852798616883551">"आपके डिवाइस पर नोट लिखने की सुविधा देने वाले ऐप्लिकेशन"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"नोट"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"डिफ़ॉल्ट वॉलेट ऐप्लिकेशन"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"वॉलेट ऐप्लिकेशन"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"वॉलेट ऐप्लिकेशन में, तरह-तरह के लेन-देन में इस्तेमाल की जाने वाली चीज़ों को स्टोर किया जा सकता है. जैसे, क्रेडिट कार्ड, लॉयल्टी कार्ड, कार के डिजिटल बटन वगैरह."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"क्या <xliff:g id="APP_NAME">%1$s</xliff:g> को अपने डिफ़ॉल्ट वॉलेट ऐप्लिकेशन के तौर पर सेट करना है?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"अनुमति लेना ज़रूरी नहीं है"</string> <string name="request_role_current_default" msgid="738722892438247184">"मौजूदा डिफ़ॉल्ट"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"फिर से न पूछें"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"डिफ़ॉल्ट के रूप में सेट करें"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"डेटा शेयर करने के तरीके के बारे में अपडेट"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"कुछ ऐप्लिकेशन ने आपकी जगह की जानकारी के डेटा को शेयर करने का तरीका बदल दिया है"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"सेटिंग"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> को ऐक्सेस किया गया"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"<xliff:g id="TIME_DATE">%1$s</xliff:g> को कल ऐक्सेस किया गया था"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> को ऐक्सेस किया गया"</string> </resources> diff --git a/PermissionController/res/values-hr/strings.xml b/PermissionController/res/values-hr/strings.xml index d45180846..89a379010 100644 --- a/PermissionController/res/values-hr/strings.xml +++ b/PermissionController/res/values-hr/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Sva dopuštenja"</string> <string name="other_permissions" msgid="2901186127193849594">"Ostale mogućnosti aplikacije"</string> <string name="permission_request_title" msgid="8790310151025020126">"Zahtijevanje dopuštenja"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Radnje instaliranja i deinstaliranja nisu podržane na Wearu."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Odaberite čemu će <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> moći pristupiti"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikacija <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ažurirana je. Odaberite čemu će moći pristupiti."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Otkaži"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ukloni dopuštenja ako se aplikacija ne upotrebljava"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ukloni dopuštenja i oslobodi prostor"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pauziraj aktivnosti u aplikacijama ako se ne koriste"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Upravljajte nekorištenom aplikacijom"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Uklonite dopuštenja, izbrišite privremene datoteke i zaustavite obavijesti"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Uklonite dopuštenja, izbrišite privremene datoteke, zaustavite obavijesti i arhivirajte aplikaciju"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Kako bi se vaši podaci zaštitili, dopuštenja za ovu aplikaciju uklonit će se ako se aplikacija ne upotrebljava nekoliko mjeseci."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Kako bi se vaši podaci zaštitili, ako se aplikacija ne upotrebljava nekoliko mjeseci, uklonit će se sljedeća dopuštenja: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Radi zaštite vaših podataka uklonjena su dopuštenja aplikacijama koje nekoliko mjeseci niste upotrebljavali."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacija za bilješke"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacije koje vam omogućuju vođenje bilješki na uređaju"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"napomene"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Zadana aplikacija za novčanik"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacija za novčanik"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikacije za novčanik mogu pohraniti vaše kreditne kartice i kartice vjernosti, automobilske ključeve i druge stvari kako bi vam razne vrste transakcija bile praktičnije."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Želite li aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> postaviti kao zadanu aplikaciju za novčanik?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Dopuštenja nisu potrebna"</string> <string name="request_role_current_default" msgid="738722892438247184">"Trenutačna zadana"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Više me ne pitaj"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Postavi kao zadano"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Ažuriranja o dijeljenju podataka"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Neke su aplikacije promijenile način na koji mogu dijeliti vaše podatke o lokaciji"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Postavke"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Pristupljeno: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Pristupljeno jučer: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Pristupljeno: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index c47c9ee9f..66597ce82 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Az összes engedély"</string> <string name="other_permissions" msgid="2901186127193849594">"Egyéb alkalmazáslehetőségek"</string> <string name="permission_request_title" msgid="8790310151025020126">"Engedélykérés"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"A Wear nem támogatja a telepítés/eltávolítás műveletet."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Válassza ki, hogy a(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> mihez férjen hozzá"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"A(z) <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> frissítése megtörtént. Válassza ki, hogy mihez férjen hozzá ez az alkalmazás."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Mégse"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Engedélyek eltávolítása, ha nem használja az alkalmazást"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Engedélytörlés és tárhely-felszabadítás"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"App szüneteltetése, ha nem használja"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Használaton kívüli alkalmazás kezelése"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Engedélyek eltávolítása, ideiglenes fájlok törlése és értesítések leállítása"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Engedélyek eltávolítása, ideiglenes fájlok törlése, értesítések leállítása és az alkalmazás archiválása"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Az adatok védelme érdekében az ennek az alkalmazásnak adott engedélyek visszavonásra kerülnek, ha néhány hónapon át nem használja az alkalmazást."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ha néhány hónapon át nem használja az alkalmazást, az adatok védelme érdekében a rendszer visszavonja a következő engedélyeket: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Az adatok védelme érdekében a rendszer eltávolította a néhány hónapja nem használt alkalmazások engedélyeit."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Jegyzetkészítő alkalmazás"</string> <string name="role_notes_description" msgid="8496852798616883551">"Alkalmazások, amelyek lehetővé teszik, hogy jegyzeteket készítsen az eszközén."</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"jegyzetek"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Alapértelmezett Wallet-app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet-app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"A Wallet-alkalmazások tárolhatják a hitel- és hűségkártyákat, az autókulcsokat és egyebeket a tranzakciók különböző formáinak támogatása érdekében."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> beállítása alapértelmezett Wallet-appként?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nincs szükség engedélyre"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aktuális alapérték"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne jelenjen meg többé"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Alapértelmezett"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Adatmegosztási frissítések"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Egyes alkalmazások módosították, hogy miként oszthatják meg az Ön helyadatait"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Beállítások"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Hozzáférés: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Hozzáférés: tegnap, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Hozzáférés: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-hy/strings.xml b/PermissionController/res/values-hy/strings.xml index 8d92099d2..0d3f575ed 100644 --- a/PermissionController/res/values-hy/strings.xml +++ b/PermissionController/res/values-hy/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Բոլոր թույլտվությունները"</string> <string name="other_permissions" msgid="2901186127193849594">"Էլ ինչ կարող է անել հավելվածը"</string> <string name="permission_request_title" msgid="8790310151025020126">"Թույլտվության հարցում"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Տեղադրման/հեռացման գործողությունները Android Wear-ում չեն աջակցվում:"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Ընտրեք՝ ինչ թույլտվություններ եք ուզում տրամադրել <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածին"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> հավելվածը թարմացվել է: Ընտրեք՝ ինչ թույլտվություններ եք ուզում տրամադրել այդ հավելվածին:"</string> <string name="review_button_cancel" msgid="2191147944056548886">"Չեղարկել"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Կառավարել հավելվածը, եթե չի օգտագործվում"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Հեռացնել թույլտվությունները, ջնջել ժամանակավոր ֆայլերը և դադարեցնել ծանուցումները"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Հեռացնել թույլտվությունները, ջնջել ժամանակավոր ֆայլերը, դադարեցնել ծանուցումները և արխիվացնել հավելվածը"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Եթե հավելվածը չի օգտագործվել մի քանի ամիս, դրա թույլտվությունները կհեռացվեն՝ ձեր տվյալները պաշտպանելու համար։"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Եթե հավելվածը չի օգտագործվել մի քանի ամիս, ձեր տվյալները պաշտպանելու համար հետևյալ թույլտվությունները կհեռացվեն՝ <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Հավելվածներից, որոնք մի քանի ամիս չեք օգտագործել, թույլտվությունները հեռացվել են՝ ձեր տվյալները պաշտպանելու համար։"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Նշումների հավելված"</string> <string name="role_notes_description" msgid="8496852798616883551">"Հավելվածներ, որոնք թույլ են տալիս նշումներ ստեղծել ձեր սարքում"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"նշումներ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Դրամապանակի կանխադրված հավելվ․"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Դրամապանակի հավելված"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Դրամապանակի հավելվածները կարող են պահել ձեր վարկային և մշտական հաճախորդի քարտերը, մեքենայի բանալիները և այլ բաներ, որոնք կհեշտացնեն ձեր գործարքները։"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Նշե՞լ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը որպես դրամապանակի կանխադրված հավելված"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Թույլտվություններ հարկավոր չեն"</string> <string name="request_role_current_default" msgid="738722892438247184">"Օգտագործվում է ըստ կանխադրման"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Նորից չհարցնել"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Նշել կանխադրված"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Տվյալներով կիսվելու եղանակի փոփոխություն"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Որոշ հավելվածներ փոխել են ձեր տեղադրության տվյալներով կիսվելու եղանակը"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Կարգավորումներ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Բացվել է <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Բացվել է երեկ, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Բացվել է <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml index 37df6c326..a41fe862d 100644 --- a/PermissionController/res/values-in/strings.xml +++ b/PermissionController/res/values-in/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Semua izin"</string> <string name="other_permissions" msgid="2901186127193849594">"Kemampuan aplikasi lainnya"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permintaan izin"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Instal/Uninstal tidak didukung di Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Pilih item yang boleh diakses oleh <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> telah diperbarui. Pilih item yang boleh diakses oleh aplikasi ini."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Batal"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Hapus izin jika aplikasi tidak digunakan"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Hapus izin & kosongkan ruang penyimpanan"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Jeda aktivitas aplikasi jika tak dipakai"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Kelola aplikasi jika tidak digunakan"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Hapus izin dan file sementara, serta hentikan notifikasi"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Menghapus izin dan file sementara, menghentikan notifikasi, serta mengarsipkan aplikasi"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Untuk melindungi data Anda, izin aplikasi ini akan dihapus jika aplikasi tidak digunakan dalam beberapa bulan."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Untuk melindungi data Anda, izin berikut akan dihapus jika aplikasi tidak digunakan dalam beberapa bulan: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Untuk melindungi data Anda, izin dari aplikasi yang tidak digunakan dalam beberapa bulan telah dihapus."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikasi catatan"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikasi untuk membuat catatan di perangkat"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"catatan"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Aplikasi dompet default"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikasi dompet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikasi dompet dapat menyimpan kartu kredit dan kartu loyalitas, kunci mobil, serta hal lainnya untuk membantu berbagai bentuk transaksi."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Setel <xliff:g id="APP_NAME">%1$s</xliff:g> sebagai aplikasi dompet default?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Tidak ada izin yang diperlukan"</string> <string name="request_role_current_default" msgid="738722892438247184">"Default saat ini"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Jangan tanya lagi"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Jadikan default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Pembaruan berbagi data"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Beberapa aplikasi mengubah caranya berbagi data lokasi Anda"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Setelan"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Diakses <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Diakses kemarin <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Diakses <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-is/strings.xml b/PermissionController/res/values-is/strings.xml index 4a472afa0..d37cc768d 100644 --- a/PermissionController/res/values-is/strings.xml +++ b/PermissionController/res/values-is/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Allar heimildir"</string> <string name="other_permissions" msgid="2901186127193849594">"Aðrir forritseiginleikar"</string> <string name="permission_request_title" msgid="8790310151025020126">"Beiðni um heimild"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Aðgerðir til að setja upp / fjarlægja eru ekki studdar í Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Veldu hverju <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> fær aðgang að"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> hefur verið uppfært. Veldu hverju forritið fær aðgang að."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Hætta við"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Fjarlægja heimildir ef forrit er ekki notað"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Fjarlægja heimildir og losa um pláss"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Gera hlé á forritavirkni ef ekki notað"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Stjórna forriti ef það er ónotað"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Fjarlægja heimildir, eyða tímabundnum skrám og stöðva tilkynningar"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Fjarlægja heimildir, eyða tímabundnum skrám, stöðva tilkynningar og setja forritið í geymslu"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Til að vernda gögnin þín verða heimildir þessa forrits fjarlægðar ef það er ekki notað í nokkra mánuði."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Til að vernda gögnin þín verða eftirfarandi heimildir fjarlægðar ef forritið er ekki notað í nokkra mánuði: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Til að vernda gögnin þín voru heimildir fjarlægðar úr forritum sem þú hefur ekki notað í nokkra mánuði."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Glósuforrit"</string> <string name="role_notes_description" msgid="8496852798616883551">"Forrit sem gera þér kleift að taka glósur í tækinu þínu"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"glósur"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Sjálfgefið veskisforrit"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Veskisforrit"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Veskisforrit geta geymt kredit- og tryggðarkortin þín, bíllyklana og aðra hluti til að auðvelda þér að ganga frá ýmiskonar greiðslum."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Stilla <xliff:g id="APP_NAME">%1$s</xliff:g> sem sjálfgefið veskisforrit?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Engra heimilda krafist"</string> <string name="request_role_current_default" msgid="738722892438247184">"Núverandi sjálfgefið forrit"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ekki spyrja aftur"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Velja sem sjálfgefið"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Gagnadeilingaruppfærslur"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Deiling staðsetningargagna hefur breyst í sumum forritum"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Stillingar"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Opnað kl. <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Opnað í gær kl. <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Opnað <xliff:g id="TIME_DATE_0">%1$s</xliff:g> kl. <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-it/strings.xml b/PermissionController/res/values-it/strings.xml index 27a1ec703..a8686ba8a 100644 --- a/PermissionController/res/values-it/strings.xml +++ b/PermissionController/res/values-it/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Tutte le autorizzazioni"</string> <string name="other_permissions" msgid="2901186127193849594">"Altre funzionalità dell\'app"</string> <string name="permission_request_title" msgid="8790310151025020126">"Richiesta di autorizzazione"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Le azioni di installazione/disinstallazione non sono supportate su Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Scegli i dati a cui l\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> può accedere"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"L\'app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> è stata aggiornata. Scegli i dati a cui può accedere."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Annulla"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Rimuovi autorizzazioni se non in uso"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Rimuovi autorizzazioni e libera spazio"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Sospendi attività app se inutilizzata"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gestisci l\'app se inutilizzata"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Rimuovi le autorizzazioni, elimina i file temporanei e interrompi le notifiche"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Rimuovi le autorizzazioni, elimina i file temporanei, interrompi le notifiche e archivia l\'app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Per proteggere i tuoi dati, le autorizzazioni di questa app verranno rimosse se l\'app non viene usata per alcuni mesi."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Per proteggere i tuoi dati, se l\'app non viene usata per alcuni mesi, le seguenti autorizzazioni verranno rimosse: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Per proteggere i tuoi dati, sono state rimosse le autorizzazioni dalle app che non hai utilizzato per alcuni mesi."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App per le note"</string> <string name="role_notes_description" msgid="8496852798616883551">"App che ti permettono di prendere appunti sul tuo dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"note"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App wallet predefinita"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App wallet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Le app wallet possono memorizzare carte di credito e fedeltà, chiavi della macchina e altro per facilitare varie forme di transazioni."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Impostare <xliff:g id="APP_NAME">%1$s</xliff:g> come app wallet predefinita?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nessuna autorizzazione necessaria"</string> <string name="request_role_current_default" msgid="738722892438247184">"Valore predefinito attuale"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Non chiedermelo più"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Imposta predefinito"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Aggiornamenti relativi alla condivisione dei dati"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Alcune app hanno cambiato la modalità di condivisione dei tuoi dati sulla posizione"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Impostazioni"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Ultimo accesso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Ultimo accesso ieri: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Ultimo accesso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml index 3ab567cb3..04b135b84 100644 --- a/PermissionController/res/values-iw/strings.xml +++ b/PermissionController/res/values-iw/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"כל ההרשאות"</string> <string name="other_permissions" msgid="2901186127193849594">"הרשאות אחרות של האפליקציה"</string> <string name="permission_request_title" msgid="8790310151025020126">"בקשת הרשאה"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"פעולות התקנה/הסרת התקנה אינן נתמכות ב-Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"בחירה בהרשאות הגישה שברצונך לתת לאפליקציה <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"אפליקציית <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> עודכנה. יש לבחור הרשאות גישה לאפליקציה הזו."</string> <string name="review_button_cancel" msgid="2191147944056548886">"ביטול"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ניהול האפליקציה כשהיא לא בשימוש"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ההרשאות של האפליקציה יוסרו, הקבצים הזמניים יימחקו ותופסק קבלת ההתראות ממנה"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"הסרת ההרשאות, מחיקה של הקבצים הזמניים, הפסקה של קבלת ההתראות והעברת האפליקציה לארכיון"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"כדי להגן על הנתונים שלך, אם האפליקציה הזו לא תהיה בשימוש במשך מספר חודשים, ההרשאות שניתנו לה יוסרו."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"כדי להגן על הנתונים שלך, אם האפליקציה לא תהיה בשימוש במשך מספר חודשים, ההרשאות הבאות יוסרו: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"כדי להגן על הנתונים שלך, הוסרו הרשאות מאפליקציות שלא השתמשת בהן במשך מספר חודשים."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"אפליקציית פתקים"</string> <string name="role_notes_description" msgid="8496852798616883551">"אפליקציות שמאפשרות לך לרשום הערות במכשיר"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"הערות"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ברירת המחדל של אפליקציית הארנק"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"אפליקציית ארנק"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"אפליקציות ארנק מאחסנות את כרטיסי האשראי ואת כרטיסי מועדון הלקוחות שלך, את מפתחות הרכב ועוד כדי לעזור בסוגים שונים של עסקאות."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"להגדיר את <xliff:g id="APP_NAME">%1$s</xliff:g> כברירת המחדל של אפליקציית הארנק?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"אין צורך בהרשאות"</string> <string name="request_role_current_default" msgid="738722892438247184">"ברירת המחדל הנוכחית"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"לא לשאול שוב"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"הגדרה כברירת מחדל"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"עדכונים לגבי שיתוף הנתונים"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"בחלק מהאפליקציות, השתנה האופן שבו הן עשויות לשתף את נתוני המיקום שלך"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"הגדרות"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"תאריך גישה: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"גישה אתמול: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"תאריך גישה: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> ב-<xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml index b861cbf0d..c551c7ebe 100644 --- a/PermissionController/res/values-ja/strings.xml +++ b/PermissionController/res/values-ja/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"すべての権限"</string> <string name="other_permissions" msgid="2901186127193849594">"その他のアプリ機能"</string> <string name="permission_request_title" msgid="8790310151025020126">"権限のリクエスト"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ではインストールやアンインストールはできません。"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> に許可する権限の選択"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> が更新されました。このアプリに許可する権限を選択してください。"</string> <string name="review_button_cancel" msgid="2191147944056548886">"キャンセル"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"使用していないアプリを管理する"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"権限と一時ファイルを削除し、通知を停止します"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"権限と一時ファイルを削除し、通知を停止し、アプリをアーカイブします"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"データ保護のため、このアプリが数か月使用されていない場合はアプリの権限が取り消されます。"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"データ保護のため、アプリが数か月使用されていない場合は以下の権限が取り消されます。<xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"データ保護のため、数か月使用していないアプリの権限を削除しました。"</string> @@ -351,7 +351,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"これらのアプリでは、画面、アクション、入力の表示、アクションの実行、ディスプレイの操作を行えます。"</string> <string name="role_assistant_label" msgid="4727586018198208128">"デフォルトのデジタル アシスタント アプリ"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"デジタル アシスタント アプリ"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"アシストアプリは、表示している画面の情報に基づいてアシスタントを提供します。一部のアプリはランチャーと音声入力サービスの両方に対応しており、統合されたアシスタントを提供します。"</string> + <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> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"メモアプリ"</string> <string name="role_notes_description" msgid="8496852798616883551">"デバイスでメモの作成に使うアプリ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"メモ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"デフォルトのウォレット アプリ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"ウォレット アプリ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"ウォレット アプリにクレジット カード、ポイントカード、車のキーなどの情報を保存して、さまざまな取引に対応できます。"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> をデフォルトのウォレット アプリに設定しますか?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"権限は必要ありません"</string> <string name="request_role_current_default" msgid="738722892438247184">"現在のデフォルト"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"次回から表示しない"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"デフォルトに設定"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"データ共有に関する更新"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"ユーザーの位置情報を共有する方法が変更されたアプリがあります"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"設定"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> にアクセス"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"昨日の <xliff:g id="TIME_DATE">%1$s</xliff:g> にアクセス"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> にアクセス"</string> </resources> diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml index b8bc6fd95..ddb04f756 100644 --- a/PermissionController/res/values-ka/strings.xml +++ b/PermissionController/res/values-ka/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ყველა ნებართვა"</string> <string name="other_permissions" msgid="2901186127193849594">"აპის სხვა შესაძლებლობები"</string> <string name="permission_request_title" msgid="8790310151025020126">"ნებართვის მოთხოვნა"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ინსტალაციის/დეინსტალაციის მოქმედებები არ არის მხარდაჭერილი Wear-ზე."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"აირჩიეთ, რაზე ჰქონდეს წვდომა <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-ს"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> განახლდა. აირჩიეთ, რაზე ჰქონდეს წვდომა ამ აპს."</string> <string name="review_button_cancel" msgid="2191147944056548886">"გაუქმება"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"აპის მართვა გამოუყენებლობის შემთხვევაში"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ნებართვების ამოშლა, დროებითი ფაილების წაშლა და შეტყობინებების გამორთვა"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ნებართვების ამოშლა, დროებითი ფაილების წაშლა, შეტყობინებების გამორთვა და აპის დაარქივება"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"თქვენი მონაცემების დასაცავად ნებართვები ამოიშლება ამ აპიდან, თუ ის რამდენიმე თვის განმავლობაში არ გამოგიყენებიათ."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"თქვენი მონაცემების დაცვის მიზნით, თუ აპს რამდენიმე თვის განმავლობაში არ გამოიყენებთ, ამოიშლება შემდეგი ნებართვები: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"თქვენი მონაცემების დასაცავად ნებართვები ამოიშალა აპებიდან, რომლებიც რამდენიმე თვის განმავლობაში არ გამოგიყენებიათ."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"ჩანიშვნების აპი"</string> <string name="role_notes_description" msgid="8496852798616883551">"აპები, რომლებიც საშუალებას გაძლევთ, გააკეთოთ ჩანიშვნები თქვენს მოწყობილობაზე"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ჩანიშვნები"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ნაგულისხმევი საფულის აპი"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"საფულის აპი"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"საფულის აპებს შეუძლიათ საკრედიტო და ერთგული კლიენტის ბარათების, მანქანის გასაღებების და სხვა ნივთების შენახვა, რაც დაგეხმარებათ სხვადასხვა სახის ტრანზაქციებში."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"გსურთ დააყენოთ <xliff:g id="APP_NAME">%1$s</xliff:g> თქვენს ნაგულისხმევ საფულის აპად?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ნებართვები არ არის საჭირო"</string> <string name="request_role_current_default" msgid="738722892438247184">"ამჟამინდელი ნაგულისხმევი"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"აღარ მკითხოთ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ნაგულისხმ. დაყენება"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"მონაცემთა გაზიარების განახლება"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"ზოგიერთმა აპმა შეცვალა თქვენი მდებარეობის მონაც. გაზიარების გზები"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"პარამეტრები"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"წვდომა განხორციელდა: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"წვდომა განხორციელდა გუშინ: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"წვდომა განხორციელდა: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml index b39b229c3..0ebee837f 100644 --- a/PermissionController/res/values-kk/strings.xml +++ b/PermissionController/res/values-kk/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Барлық рұқсаттар"</string> <string name="other_permissions" msgid="2901186127193849594">"Басқа қолданба мүмкіндіктері"</string> <string name="permission_request_title" msgid="8790310151025020126">"Рұқсат сұрау"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear жүйесінде \"Орнату\"/\"Жою\" әрекеттері қолданылмайды."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасы қайда кіре алатынын таңдаңыз"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> қолданбасы жаңартылды. Бұл қолданбаның қайда кіре алатынын таңдаңыз."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Бас тарту"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Қолданба пайдаланылмаса, оны басқарыңыз."</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Рұқсаттарды өшіру, уақытша файлдарды жою және хабарландыруларды тоқтату"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Рұқсаттарды өшіру, уақытша файлдарды жою, хабарландыруларды тоқтату және қолданбаны мұрағаттау."</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Бұл қолданба бірнеше ай бойы пайдаланылмаса, деректеріңізді қорғау үшін оған берілген рұқсаттар өшіріледі."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Қолданба бірнеше ай бойы пайдаланылмаса, деректеріңізді қорғау үшін мына рұқсаттар өшіріледі: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Бірнеше ай бойы пайдаланылмаған қолданбаларға берілген рұқсаттар деректеріңізді қорғау үшін өшірілді."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Ескертпелер қолданбасы"</string> <string name="role_notes_description" msgid="8496852798616883551">"Құрылғыда ескертпелер жазуға арналған қолданбалар"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ескертпелер"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Әдепкі әмиян қолданбасы"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Әмиян қолданбасы"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Әмиян қолданбаларында несиелік және тұрақты клиент карталарын, көлік кілттерін, сондай-ақ басқа да транзакция түрлері үшін қолайлы заттарды сақтауға болады."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын әдепкі әмиян қолданбасы ретінде орнату керек пе?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Рұқсаттар қажет емес."</string> <string name="request_role_current_default" msgid="738722892438247184">"Ағымдағы әдепкі қолданба"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Қайта сұралмасын"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Әдепкі етіп орнату"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Деректерді бөлісуге қатысты жаңалық"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Кейбір қолданбалар локация деректеріңізді бөлісу жолын өзгертті."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Параметрлер"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Пайдаланылған уақыты: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Кеше пайдаланылған уақыты: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Пайдаланылған уақыты: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-km/strings.xml b/PermissionController/res/values-km/strings.xml index d1b60ad11..7a39d2f57 100644 --- a/PermissionController/res/values-km/strings.xml +++ b/PermissionController/res/values-km/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ការអនុញ្ញាតទាំងអស់"</string> <string name="other_permissions" msgid="2901186127193849594">"សមត្ថភាពកម្មវិធីផ្សេងទៀត"</string> <string name="permission_request_title" msgid="8790310151025020126">"សំណើសុំការអនុញ្ញាត"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"សកម្មភាពដំឡើង/លុបចេញមិនអាចប្រើនៅលើ Wear បានទេ។"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"ជ្រើសរើសអ្វីដែលត្រូវអនុញ្ញាតឱ្យ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ចូលប្រើ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ត្រូវបានដំឡើងជំនាន់។ ជ្រើសរើសអ្វីដែលត្រូវអនុញ្ញាតឱ្យកម្មវិធីនេះចូលប្រើ។"</string> <string name="review_button_cancel" msgid="2191147944056548886">"បោះបង់"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"គ្រប់គ្រងកម្មវិធី ប្រសិនបើមិនបានប្រើ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ដកការអនុញ្ញាតចេញ លុបឯកសារបណ្ដោះអាសន្ន និងបញ្ឈប់ការជូនដំណឹង"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ដកការអនុញ្ញាតចេញ លុបឯកសារបណ្ដោះអាសន្ន បញ្ឈប់ការជូនដំណឹង និងទុកកម្មវិធីក្នុងបណ្ណសារ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ដើម្បីការពារទិន្នន័យរបស់អ្នក ការអនុញ្ញាតសម្រាប់កម្មវិធីនេះនឹងត្រូវដកចេញ ប្រសិនបើមិនប្រើប្រាស់កម្មវិធីនេះរយៈពេលពីរបីខែ។"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ដើម្បីការពារទិន្នន័យរបស់អ្នក ការអនុញ្ញាតខាងក្រោមនឹងត្រូវដកចេញ ប្រសិនបើមិនប្រើប្រាស់កម្មវិធីនេះរយៈពេលពីរបីខែ៖ <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ដើម្បីការពារទិន្នន័យរបស់អ្នក ការអនុញ្ញាតត្រូវបានដកចេញពីកម្មវិធីដែលអ្នកមិនបានប្រើប្រាស់រយៈពេលពីរបីខែ។"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"កម្មវិធីកំណត់ចំណាំ"</string> <string name="role_notes_description" msgid="8496852798616883551">"កម្មវិធីដែលអនុញ្ញាតឱ្យអ្នកកត់ចំណាំនៅលើឧបករណ៍របស់អ្នក"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"កំណត់ចំណាំ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"កម្មវិធីកាបូបលំនាំដើម"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"កម្មវិធីកាបូប"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"កម្មវិធីកាបូបអាចរក្សាទុកកាតឥណទាននិងកាតសមាជិក សោរថយន្ត និងអ្វីៗផ្សេងទៀតរបស់អ្នក ដើម្បីជួយពាក់ព័ន្ធនឹងទម្រង់ផ្សេងៗរបស់ប្រតិបត្តិការ។"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"កំណត់ <xliff:g id="APP_NAME">%1$s</xliff:g> ជាកម្មវិធីកាបូបលំនាំដើមរបស់អ្នកឬ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"មិនត្រូវការការអនុញ្ញាតទេ"</string> <string name="request_role_current_default" msgid="738722892438247184">"លំនាំដើមបច្ចុប្បន្ន"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"កុំសួរទៀត"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"កំណត់ជាលំនាំដើម"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"បច្ចុប្បន្នភាពការចែករំលែកទិន្នន័យ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"កម្មវិធីមួយចំនួនបានផ្លាស់ប្ដូររបៀបដែលវាអាចចែករំលែកទិន្នន័យទីតាំងរបស់អ្នក"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ការកំណត់"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"បានចូលប្រើនៅម៉ោង <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"បានចូលប្រើម្សិលមិញនៅម៉ោង <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"បានចូលប្រើនៅថ្ងៃទី <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-kn/strings.xml b/PermissionController/res/values-kn/strings.xml index 547116264..262f9dca2 100644 --- a/PermissionController/res/values-kn/strings.xml +++ b/PermissionController/res/values-kn/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ಎಲ್ಲಾ ಅನುಮತಿಗಳು"</string> <string name="other_permissions" msgid="2901186127193849594">"ಇತರ ಆ್ಯಪ್ ಸಾಮರ್ಥ್ಯಗಳು"</string> <string name="permission_request_title" msgid="8790310151025020126">"ಅನುಮತಿಯ ವಿನಂತಿ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ನಲ್ಲಿ ಇನ್ಸ್ಟಾಲ್/ಅನ್ಇನ್ಸ್ಟಾಲ್ ಕ್ರಿಯೆಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ಆ್ಯಪ್ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ಆ್ಯಪ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಈ ಆ್ಯಪ್ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ."</string> <string name="review_button_cancel" msgid="2191147944056548886">"ರದ್ದುಮಾಡಿ"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ಬಳಸದಿದ್ದರೆ ಆ್ಯಪ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ, ತಾತ್ಕಾಲಿಕ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಿ ಹಾಗೂ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಲ್ಲಿಸಿ"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ, ತಾತ್ಕಾಲಿಕ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಿ, ನೋಟಿಫಿಕೇಶನ್ಗಳನ್ನು ನಿಲ್ಲಿಸಿ ಮತ್ತು ಆ್ಯಪ್ ಅನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ಆ್ಯಪ್ ಅನ್ನು ಕೆಲವು ತಿಂಗಳುಗಳ ಕಾಲ ಬಳಸದಿದ್ದರೆ, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸಲು ಈ ಆ್ಯಪ್ನ ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುವುದು."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ಆ್ಯಪ್ ಅನ್ನು ಕೆಲವು ತಿಂಗಳುಗಳ ಕಾಲ ಬಳಸದಿದ್ದರೆ, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸಲು, ಈ ಕೆಳಗಿನ ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುವುದು: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸಲು, ಕೆಲವು ತಿಂಗಳುಗಳಿಂದ ನೀವು ಬಳಸದಿರುವ ಆ್ಯಪ್ಗಳಿಂದ ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"ಟಿಪ್ಪಣಿಗಳು ಆ್ಯಪ್"</string> <string name="role_notes_description" msgid="8496852798616883551">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಟಿಪ್ಪಣಿಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ನಿಮಗೆ ಅನುಮತಿಸುವ ಆ್ಯಪ್ಗಳು"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ಟಿಪ್ಪಣಿಗಳು"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ಡೀಫಾಲ್ಟ್ ವಾಲೆಟ್ ಆ್ಯಪ್"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet ಆ್ಯಪ್"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet ಆ್ಯಪ್ಗಳು ನಿಮ್ಮ ಕ್ರೆಡಿಟ್ ಮತ್ತು ಲಾಯಲ್ಟಿ ಕಾರ್ಡ್ಗಳು, ಕಾರ್ ಕೀಗಳು ಮತ್ತು ವಿವಿಧ ವಹಿವಾಟುಗಳಿಗೆ ಸಹಾಯ ಮಾಡುವ ಇತರ ವಿಷಯಗಳನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಆ್ಯಪ್ ಅನ್ನು ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ವಾಲೆಟ್ ಆ್ಯಪ್ ಆಗಿ ಸೆಟ್ ಮಾಡಬೇಕೆ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ಯಾವುದೇ ಅನುಮತಿಗಳ ಅಗತ್ಯವಿಲ್ಲ"</string> <string name="request_role_current_default" msgid="738722892438247184">"ಪ್ರಸ್ತುತ ಡೀಫಾಲ್ಟ್"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ಮತ್ತೆ ಕೇಳಬೇಡ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ಡೀಫಾಲ್ಟ್ ಆಗಿ ಸೆಟ್ ಮಾಡಿ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ಡೇಟಾ ಹಂಚಿಕೆ ಅಪ್ಡೇಟ್ಗಳು"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"ಕೆಲವು ಆ್ಯಪ್ಗಳು, ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ಅವು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಿವೆ"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> ಸಮಯಕ್ಕೆ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲಾಗಿದೆ"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ನಿನ್ನೆ <xliff:g id="TIME_DATE">%1$s</xliff:g> ಸಮಯಕ್ಕೆ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲಾಗಿದೆ"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> ಸಮಯಕ್ಕೆ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲಾಗಿದೆ"</string> </resources> diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index cc06d56d7..692535101 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"모든 권한"</string> <string name="other_permissions" msgid="2901186127193849594">"다른 앱 기능"</string> <string name="permission_request_title" msgid="8790310151025020126">"권한 요청"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear에서는 설치/제거 작업이 지원되지 않습니다"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>에서 액세스하도록 허용할 항목 선택"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>이(가) 업데이트되었습니다. 이 앱에서 액세스하도록 허용할 항목을 선택하세요."</string> <string name="review_button_cancel" msgid="2191147944056548886">"취소"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"사용하지 않는 경우 앱 관리"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"권한 제거, 임시 파일 삭제, 알림 중지"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"권한 제거, 임시 파일 삭제, 알림 중지, 앱 보관처리"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"데이터 보호를 위해 몇 개월 동안 앱을 사용하지 않으면 앱의 권한이 삭제됩니다."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"데이터 보호를 위해 몇 개월 동안 앱을 사용하지 않으면 다음 권한이 삭제됩니다. <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"데이터 보호를 위해 몇 개월 동안 사용하지 않은 앱에서 권한이 삭제되었습니다."</string> @@ -351,7 +351,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"이 앱이 내 화면, 작업, 입력 내용을 보고 작업을 실행하며 디스플레이를 제어할 수 있습니다."</string> <string name="role_assistant_label" msgid="4727586018198208128">"기본 디지털 어시스턴트 앱"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"디지털 어시스턴트 앱"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"지원 앱은 화면에 표시된 정보에 맞게 도움을 줄 수 있습니다. 일부 앱은 통합된 지원을 제공하기 위해 런처와 음성 입력 서비스를 모두 지원합니다."</string> + <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> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"메모 앱"</string> <string name="role_notes_description" msgid="8496852798616883551">"이 기기에서 메모할 수 있게 해주는 앱"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"메모"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"기본 월렛 앱"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"월렛 앱"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"다양한 형태의 거래에 사용할 수 있도록 월렛 앱에 신용카드 및 포인트 카드, 자동차 키 등을 저장할 수 있습니다."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱을 기본 월렛 앱으로 설정하시겠습니까?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"권한 필요 없음"</string> <string name="request_role_current_default" msgid="738722892438247184">"현재 기본 앱"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"다시 묻지 않음"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"기본 앱으로 설정"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"데이터 공유 업데이트"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"일부 앱에서 위치 데이터 공유 방법이 변경되었습니다."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"설정"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>에 액세스함"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"어제 <xliff:g id="TIME_DATE">%1$s</xliff:g>에 액세스함"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>에 액세스함"</string> </resources> diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index 1f1ee13a1..739c14744 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -48,7 +48,7 @@ <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"Тыюу салам жана экинчи суралбасын"</string> <string name="permission_revoked_count" msgid="4785082705441547086">"<xliff:g id="COUNT">%1$d</xliff:g> өчүрүлгөн"</string> <string name="permission_revoked_all" msgid="3397649017727222283">"баары өчүрүлгөн"</string> - <string name="permission_revoked_none" msgid="9213345075484381180">"эч бири өчүрүлгөн жок"</string> + <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> @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Бардык уруксаттар"</string> <string name="other_permissions" msgid="2901186127193849594">"Колдонмонун башка мүмкүнчүлүктөрү"</string> <string name="permission_request_title" msgid="8790310151025020126">"Уруксат суроо"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Орнотуу/чыгарып салуу аракеттери Android Wear\'де колдоого алынбайт."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> колдонмосу үчүн уруксаттарды тандаңыз"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> жаңырды. Ал үчүн уруксаттарды тандаңыз."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Жок"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Колдонмо колдонулбаса, аны тескеңиз"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Уруксаттар өчүрүлүп, убактылуу файлдар тазаланып, билдирмелер келбей калат"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Уруксаттарды алып салып, убактылуу файлдарды жок кылып, билдирмелерди токтотуңуз жана колдонмону архивдеңиз"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Эгер колдонмо бир нече ай пайдаланылбаса, жеке маалыматтарыңызды коргоо үчүн бул колдонмого берилген уруксаттар өчүрүлөт."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Эгер колдонмо бир нече ай пайдаланылбаса, жеке дайын-даректериңизди коргоо максатында төмөнкү уруксаттар өчүрүлөт: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Жеке дайын-даректериңизди коргоо максатында, бир нече айдан бери ачылбаган колдонмолордогу уруксаттар өчүрүлдү."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Кыска жазуулар колдонмосу"</string> <string name="role_notes_description" msgid="8496852798616883551">"Түзмөгүңүздө кыска жазууларды терүү мүмкүнчүлүгүн берген колдонмолор"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"кыска жазуулар"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Демейки капчык колдонмосу"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Капчык колдонмосу"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Капчык колдонмолору ар кандай транзакция формаларында жардам берүү үчүн насыя жана туруктуу кардардын карталарын, унаа ачкычтарын жана башка нерселерди сактай алат."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> демейки капчык колдонмоңуз катары тууралансынбы?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Уруксаттардын кереги жок"</string> <string name="request_role_current_default" msgid="738722892438247184">"Учурдагы демейки колдонмо"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Экинчи суралбасын"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Демейки катары коюу"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Маалыматты бөлүшүү жаңыртуулары"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Айрым колдонмолор турган жериңизди билдирүү ыкмасын өзгөрттү"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Параметрлер"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Cаат <xliff:g id="TIME_DATE">%1$s</xliff:g> колдонулду"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Кечээ саат <xliff:g id="TIME_DATE">%1$s</xliff:g> колдонулду"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> саат <xliff:g id="TIME_DATE_1">%2$s</xliff:g> колдонулду"</string> </resources> diff --git a/PermissionController/res/values-lo/strings.xml b/PermissionController/res/values-lo/strings.xml index b78db29c8..16780b566 100644 --- a/PermissionController/res/values-lo/strings.xml +++ b/PermissionController/res/values-lo/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ທຸກການອະນຸຍາດ"</string> <string name="other_permissions" msgid="2901186127193849594">"ຄວາມສາມາດອື່ນຂອງແອັບ"</string> <string name="permission_request_title" msgid="8790310151025020126">"ການຮ້ອງຂໍການອະນຸຍາດ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ຕິດຕັ້ງ/ຖອນການຕິດຕັ້ງ ຄຳສັ່ງທີ່ບໍ່ຮອງຮັບຢູ່ Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"ເລືອກວ່າຈະອະນຸຍາດໃຫ້ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ເຂົ້າເຖິງຫຍັງໄດ້ແດ່"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"ອັບເດດ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ແລ້ວ. ກະລຸນາເລືອກວ່າຈະໃຫ້ແອັບນີ້ເຂົ້າເຖິງຫຍັງໄດ້ແດ່."</string> <string name="review_button_cancel" msgid="2191147944056548886">"ຍົກເລີກ"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ຈັດການແອັບຫາກບໍ່ໄດ້ໃຊ້"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ລຶບການອະນຸຍາດອອກ, ລຶບໄຟລ໌ຊົ່ວຄາວ ແລະ ຢຸດການແຈ້ງເຕືອນ"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ລຶບການອະນຸຍາດອອກ, ລຶບໄຟລ໌ຊົ່ວຄາວ, ຢຸດການແຈ້ງເຕືອນ ແລະ ເກັບແອັບໄວ້ໃນແຟ້ມ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ເພື່ອປົກປ້ອງຂໍ້ມູນຂອງທ່ານ, ສິດອະນຸຍາດສຳລັບແອັບນີ້ຈະຖືກລຶບອອກຫາກບໍ່ໄດ້ໃຊ້ແອັບສອງສາມເດືອນ."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ເພື່ອປົກປ້ອງຂໍ້ມູນຂອງທ່ານ, ຫາກບໍ່ໄດ້ໃຊ້ແອັບສອງສາມເດືອນ, ສິດອະນຸຍາດຕໍ່ໄປນີ້ຈະຖືກລຶບອອກ: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ເພື່ອປົກປ້ອງຂໍ້ມູນຂອງທ່ານ, ລະບົບໄດ້ລຶບສິດອະນຸຍາດອອກຈາກແອັບຕ່າງໆທີ່ທ່ານບໍ່ໄດ້ໃຊ້ສອງສາມເດືອນແລ້ວ."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"ແອັບຂຽນບັນທຶກ"</string> <string name="role_notes_description" msgid="8496852798616883551">"ແອັບທີ່ອະນຸຍາດໃຫ້ທ່ານຈົດບັນທຶກຢູ່ອຸປະກອນຂອງທ່ານ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ບັນທຶກ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ແອັບ Wallet ເລີ່ມຕົ້ນ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"ແອັບ Wallet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"ແອັບ Wallet ສາມາດຈັດເກັບບັດເຄຣດິດ ແລະ ບັດສະມາຊິກ, ກະແຈລົດ ແລະ ສິ່ງອື່ນໆຂອງທ່ານເພື່ອຊ່ວຍໃນການເຮັດທຸລະກຳຮູບແບບຕ່າງໆ."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"ຕັ້ງ <xliff:g id="APP_NAME">%1$s</xliff:g> ເປັນແອັບ Wallet ເລີ່ມຕົ້ນຂອງທ່ານບໍ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ບໍ່ຈຳເປັນຕ້ອງມີການອະນຸຍາດ"</string> <string name="request_role_current_default" msgid="738722892438247184">"ຄ່າເລີ່ມຕົ້ນປັດຈຸບັນ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ບໍ່ຕ້ອງຖາມອີກ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ຕັ້ງເປັນຄ່າເລີ່ມຕົ້ນ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ການອັບເດດການແບ່ງປັນຂໍ້ມູນ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"ບາງແອັບໄດ້ປ່ຽນແປງວິທີທີ່ແອັບອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ຂອງທ່ານແລ້ວ"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ການຕັ້ງຄ່າ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"ເຂົ້າເຖິງເມື່ອ <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ເຂົ້າເຖິງມື້ວານນີ້ເມື່ອ <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"ເຂົ້າເຖິງເມື່ອ <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-lt/strings.xml b/PermissionController/res/values-lt/strings.xml index d7fbc6af8..26343635c 100644 --- a/PermissionController/res/values-lt/strings.xml +++ b/PermissionController/res/values-lt/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Visi leidimai"</string> <string name="other_permissions" msgid="2901186127193849594">"Kitos programos galimybės"</string> <string name="permission_request_title" msgid="8790310151025020126">"Leidimo užklausa"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Diegimo / pašalinimo veiksmai nepalaikomi sistemoje „Wear“."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Pasirinkite, ką norite leisti programai <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pasiekti"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Programa <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> buvo atnaujinta. Pasirinkite, ką norite leisti šiai programai pasiekti."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Atšaukti"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Pašalinti leidimus, jei programa nenaudojama"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Pašalinti leidimus ir atlaisvinti vietos"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pristabdyti nenaudojamų programų veiklą"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Tvarkyti programą, jei nenaudojama"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Pašalinkite leidimus, ištrinkite laikinus failus ir sustabdykite pranešimus"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Pašalinti leidimus, ištrinti laikinus failus, sustabdyti pranešimus ir archyvuoti programą"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Siekiant apsaugoti duomenis, šios programos leidimai bus pašalinti, jei programos nenaudosite kelis mėnesius."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Siekiant apsaugoti duomenis, jei programos nenaudosite kelis mėnesius, bus pašalinti nurodyti leidimai: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Siekiant apsaugoti duomenis, leidimai buvo pašalinti iš programų, kurių nenaudojote kelis mėnesius"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Užrašų programa"</string> <string name="role_notes_description" msgid="8496852798616883551">"Programos, leidžiančios rašyti užrašus jūsų įrenginyje"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"užrašai"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Numatytoji piniginės programa"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Piniginės programa"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Piniginės programos gali saugoti jūsų kredito ir lojalumo kortelių, automobilių raktų ir kitus duomenis, kad lengviau atliktumėte įvairias operacijas."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Nustatyti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ kaip numatytąją piniginės programą?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nereikia jokių leidimų"</string> <string name="request_role_current_default" msgid="738722892438247184">"Dabartinė numatytoji"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Daugiau neklausti"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Nustatyti numatytąja"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Duomenų bendrinimo naujiniai"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Kai kuriose programose pakeisti vietovės duomenų bendrinimo metodai"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Nustatymai"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Pasiekta <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Pasiekta vakar <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Pasiekta <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml index 10b79f45d..1a3b0e11b 100644 --- a/PermissionController/res/values-lv/strings.xml +++ b/PermissionController/res/values-lv/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Visas atļaujas"</string> <string name="other_permissions" msgid="2901186127193849594">"Citas lietotnes atļaujas"</string> <string name="permission_request_title" msgid="8790310151025020126">"Atļaujas pieprasījums"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ierīcē netiek atbalstīta instalēšana/atinstalēšana"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Izvēlieties, kādas piekļuves atļaujas piešķirt lietotnei <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Lietotne <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ir atjaunināta. Izvēlieties, kādas piekļuves atļaujas tai piešķirt."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Atcelt"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Noņemt atļaujas, ja lietotne netiek izmantota"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Noņemt atļaujas un atbrīvot vietu"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Apturēt lietotni, ja tā netiek izmantota"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Pārvaldīt lietotni, ja tā netiek lietota"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Atsaukt atļaujas, dzēst pagaidu failus un izslēgt paziņojumus"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Noņemt atļaujas, dzēst pagaidu failus, apturēt paziņojumus un arhivēt lietotni"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Ja lietotni dažus mēnešus neizmantosiet, tai tiks noņemtas tālāk norādītās atļaujas, lai aizsargātu jūsu datus."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ja lietotni dažus mēnešus neizmantosiet, tai tiks noņemtas tālāk norādītās atļaujas, lai aizsargātu jūsu datus: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Lai aizsargātu jūsu datus, tika atsauktas atļaujas tām lietotnēm, kas nav izmantotas vairākus mēnešus."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Piezīmju lietotne"</string> <string name="role_notes_description" msgid="8496852798616883551">"Lietotnes, kas ļauj ierīcē veikt piezīmes"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"piezīmes"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Noklusējuma maka lietotne"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Maka lietotne"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Maka lietotnēs var glabāt informāciju par kredītkartēm un lojalitātes kartēm, automašīnas šifratslēgas un citu informāciju, kas palīdz veikt dažādu veidu darījumus."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Vai iestatīt lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> kā noklusējuma maka lietotni?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nav nepieciešamas nekādas atļaujas."</string> <string name="request_role_current_default" msgid="738722892438247184">"Pašreizējais noklusējums"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Nejautāt atkārtoti"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Iest. kā noklusējumu"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Datu kopīgošanas atjauninājumi"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Dažās lietotnēs tika mainīti atrašanās vietas datu kopīgošanas veidi."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Iestatījumi"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Pēdējā piekļuves reize: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Pēdējā piekļuves reize vakar: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Pēdējā piekļuves reize: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-mk/strings.xml b/PermissionController/res/values-mk/strings.xml index 3270a4ea6..363d745e6 100644 --- a/PermissionController/res/values-mk/strings.xml +++ b/PermissionController/res/values-mk/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Сите дозволи"</string> <string name="other_permissions" msgid="2901186127193849594">"Други можности на апликацијата"</string> <string name="permission_request_title" msgid="8790310151025020126">"Барање за дозвола"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Дејствата „Инсталирај/деинсталирај“ не се поддржани на Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Изберете до што може да пристапува <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> е ажурирана. Изберете до што може да пристапува апликацијава."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Откажи"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Управува со апликацијата при некористење"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Отстранува дозволи, брише привремени датотеки и запира известувања"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Отстранува дозволи, брише привремени датотеки, сопира известувања и ја архивира апликацијата"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"За да се заштитат вашите податоци, дозволите за апликацијава ќе се отстранат ако апликацијата не се користи неколку месеци."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ако апликацијата не се користи неколку месеци, заради заштита на податоците, ќе се отстранат следниве дозволи: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"За заштита на податоците, отстранети се дозволите од апликациите што не сте ги користеле неколку месеци."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Апликација за белешки"</string> <string name="role_notes_description" msgid="8496852798616883551">"Апликации што ви овозможуваат да запишувате белешки на вашиот уред"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"белешки"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Стандардна аплик. за Wallet"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Апликација за Wallet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Апликациите Wallet може да ги складираат кредитните и картичките за лојалност, клучевите за автомобилот, како и други работи за олеснување на различните форми на трансакции."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Да се постави <xliff:g id="APP_NAME">%1$s</xliff:g> како стандардна апликација за Wallet?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Не се потребни дозволи"</string> <string name="request_role_current_default" msgid="738722892438247184">"Стандардна апликација сега"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Не прашувај повторно"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Нека биде стандардна"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Промени во споделувањето податоци"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Некои апликации го сменија начинот на кој ја споделуваат вашата локација"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Поставки"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Пристапено: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Пристапено вчера: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Пристапено: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ml/strings.xml b/PermissionController/res/values-ml/strings.xml index 2403dc6d3..05216f59e 100644 --- a/PermissionController/res/values-ml/strings.xml +++ b/PermissionController/res/values-ml/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"എല്ലാ അനുമതികളും"</string> <string name="other_permissions" msgid="2901186127193849594">"മറ്റ് ആപ്പ് ശേഷികൾ"</string> <string name="permission_request_title" msgid="8790310151025020126">"അനുമതി അഭ്യർത്ഥന"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ഇൻസ്റ്റാൾ/അൺഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് Wear-ൽ പിന്തുണയില്ല."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"എന്തൊക്കെ ആക്സസ് ചെയ്യാനാണ് <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ആപ്പിനെ അനുവദിക്കേണ്ടതെന്ന് തിരഞ്ഞെടുക്കുക"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> അപ്ഡേറ്റ് ചെയ്തിരിക്കുന്നു. എന്തൊക്കെ ആക്സസ് ചെയ്യാൻ ഈ ആപ്പിനെ അനുവദിക്കണമെന്ന് തിരഞ്ഞെടുക്കുക."</string> <string name="review_button_cancel" msgid="2191147944056548886">"റദ്ദാക്കുക"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ഉപയോഗിക്കാത്തപ്പോൾ ആപ്പ് മാനേജ് ചെയ്യൂ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"അനുമതികൾ നീക്കം ചെയ്യുക, താൽക്കാലിക ഫയലുകൾ ഇല്ലാതാക്കുക, അറിയിപ്പുകൾ നിർത്തുക"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"അനുമതികൾ നീക്കം ചെയ്യുക, താൽക്കാലിക ഫയലുകൾ ഇല്ലാതാക്കുക, അറിയിപ്പുകൾ നിർത്തുക, ആപ്പ് ആർക്കൈവ് ചെയ്യുക"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"മാസങ്ങളായി ഈ ആപ്പ് ഉപയോഗിക്കുന്നില്ലെങ്കിൽ നിങ്ങളുടെ ഡാറ്റ സംരക്ഷിക്കുന്നതിന്, ഈ ആപ്പിനുള്ള അനുമതികൾ നീക്കം ചെയ്യുന്നതായിരിക്കും."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"കുറച്ച് മാസം ആപ്പ് ഉപയോഗിച്ചില്ലെങ്കിൽ, നിങ്ങളുടെ ഡാറ്റ സംരക്ഷിക്കുന്നതിന്, ഇനിപ്പറയുന്ന അനുമതികൾ നീക്കം ചെയ്യുന്നതായിരിക്കും: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"നിങ്ങളുടെ ഡാറ്റ സംരക്ഷിക്കുന്നതിന്, കുറച്ച് മാസങ്ങളായി ഉപയോഗിക്കാത്ത ആപ്പുകളിൽ നിന്ന് അനുമതികൾ നീക്കം ചെയ്തിരിക്കുന്നു."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"കുറിപ്പ് ആപ്പ്"</string> <string name="role_notes_description" msgid="8496852798616883551">"നിങ്ങളുടെ ഉപകരണത്തിൽ കുറിപ്പുകൾ രേഖപ്പെടുത്താൻ അനുവദിക്കുന്ന ആപ്പുകൾ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"കുറിപ്പുകൾ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ഡിഫോൾട്ട് വാലറ്റ് ആപ്പ്"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet ആപ്പ്"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"വ്യത്യസ്ത തരത്തിലുള്ള ഇടപാടുകളിൽ സഹായിക്കുന്നതിന് Wallet ആപ്പുകൾക്ക് നിങ്ങളുടെ ക്രെഡിറ്റ്, ലോയൽറ്റി കാർഡുകൾ, കാർ കീകൾ, മറ്റ് ഇനങ്ങൾ എന്നിവ സംഭരിക്കാൻ കഴിയും."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>, നിങ്ങളുടെ ഡിഫോൾട്ട് വാലറ്റ് ആപ്പ് ആക്കി സജ്ജീകരിക്കണോ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"അനുമതികളൊന്നും ആവശ്യമില്ല"</string> <string name="request_role_current_default" msgid="738722892438247184">"നിലവിലെ ഡിഫോൾട്ട്"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"വീണ്ടും ആവശ്യപ്പെടരുത്"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ഡിഫോൾട്ടായി സജ്ജമാക്കൂ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ഡാറ്റ പങ്കിടുന്നത് സംബന്ധിച്ച അപ്ഡേറ്റുകൾ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പങ്കിടുന്ന രീതി ചില ആപ്പുകൾ മാറ്റി"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ക്രമീകരണം"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>-ന് ആക്സസ് ചെയ്തു"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ഇന്നലെ <xliff:g id="TIME_DATE">%1$s</xliff:g>-ന് ആക്സസ് ചെയ്തു"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>-ന് ആക്സസ് ചെയ്തു"</string> </resources> diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml index 8896ef931..dae627b70 100644 --- a/PermissionController/res/values-mn/strings.xml +++ b/PermissionController/res/values-mn/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Бүх зөвшөөрөл"</string> <string name="other_permissions" msgid="2901186127193849594">"Аппын бусад чадамж"</string> <string name="permission_request_title" msgid="8790310151025020126">"Зөвшөөрлийн хүсэлт"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Андройд Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear-д суулгах/устгах үйлдлийг дэмждэггүй."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-н хандаж болох зүйлсийг сонгоно уу"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-г шинэчилсэн. Энэ аппын хандаж болох зүйлсийг сонгоно уу."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Цуцлах"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Хэрэв ашиглаагүй бол аппыг удирдах"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Зөвшөөрлийг хасаж, түр зуурын файлыг устгаж мөн мэдэгдлийг зогсооно"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Зөвшөөрлийг хасаж, түр зуурын файлыг устгаж, мэдэгдлийг зогсоож мөн аппыг архивлана"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Таны өгөгдлийг хамгаалах үүднээс энэ аппыг хэдэн сарын турш ашиглахгүй бол зөвшөөрлийг нь хасах болно."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Таны өгөгдлийг хамгаалах үүднээс аппыг хэдэн сарын турш ашиглахгүй бол дараах зөвшөөрлүүдийг хасах болно: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Таны өгөгдлийг хамгаалах үүднээс таны хэдэн сарын турш ашиглаагүй аппуудын зөвшөөрлийг нь хассан."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Тэмдэглэлийн апп"</string> <string name="role_notes_description" msgid="8496852798616883551">"Таныг төхөөрөмж дээрээ тэмдэглэл хөтлөх боломж олгодог аппууд"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"тэмдэглэл"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Өгөгдмөл түрийвчийн апп"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Түрийвчийн апп"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Төрөл бүрийн гүйлгээнд туслахын тулд түрийвчийн аппууд таны кредит ба лояалти карт, машины түлхүүр болон бусад зүйлийг хадгалах боломжтой."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г таны өгөгдмөл түрийвчийн аппаар тохируулах уу?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Ямар ч зөвшөөрөл шаардлагагүй"</string> <string name="request_role_current_default" msgid="738722892438247184">"Одоогийн өгөгдмөл апп"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Дахиж бүү асуу"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Өгөгдмөлөөр тохируулах"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Өгөгдөл хуваалцах тухай шинэчлэлт"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Зарим апп таны байршлын өгөгдлийг хуваалцдаг аргаа өөрчилсөн"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Тохиргоо"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>-д хандсан"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Өчигдөр <xliff:g id="TIME_DATE">%1$s</xliff:g>-д хандсан"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>-д хандсан"</string> </resources> diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml index f8757e5cf..d7a25e0e3 100644 --- a/PermissionController/res/values-mr/strings.xml +++ b/PermissionController/res/values-mr/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"सर्व परवानग्या"</string> <string name="other_permissions" msgid="2901186127193849594">"अन्य अॅप क्षमता"</string> <string name="permission_request_title" msgid="8790310151025020126">"परवानगीची विनंती"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"इंस्टॉल करा/अनइंस्टॉल करा क्रिया Wear वर सपोर्ट करत नाहीत."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ला काय अॅक्सेस करण्याची परवानगी द्यावी ते निवडा"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> अपडेट केले गेले आहे. या ॲपला काय अॅक्सेस करण्याची परवानगी द्यावी ते निवडा."</string> <string name="review_button_cancel" msgid="2191147944056548886">"रद्द करा"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"वापरले नसल्यास ॲप व्यवस्थापित करा"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"परवानग्या काढून टाका, तात्पुरत्या फाइल हटवा आणि सूचना थांबवा"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"परवानग्या काढून टाका, तात्पुरत्या फाइल हटवा, सूचना थांबवा आणि ॲप संग्रहित करा"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"तुमच्या डेटाचे संरक्षण करण्यासाठी, अॅप काही महिन्यांत वापरले गेले नसल्यास, या अॅपच्या परवानग्या काढल्या जातील."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"तुमच्या डेटाचे संरक्षण करण्यासाठी, अॅप काही महिन्यांत वापरले गेले नसल्यास, पुढील परवानग्या काढल्या जातील: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"तुमच्या डेटाचे संरक्षण करण्यासाठी, तुम्ही काही महिन्यांत न वापरलेल्या ॲप्समधून परवानग्या काढल्या गेल्या आहेत."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"टिपांचे अॅप"</string> <string name="role_notes_description" msgid="8496852798616883551">"तुमच्या डिव्हाइसवर तुम्हाला टिपा घेण्याची अनुमती देणारी अॅप्स"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"टिपा"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"डीफॉल्ट वॉलेट अॅप"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"वॉलेट अॅप"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"वॉलेट ॲप्स ही तुमची क्रेडिट आणि लॉयल्टी कार्ड, कार की व विविध प्रकारच्या व्यवहारांमध्ये मदत करण्यासाठी इतर गोष्टी स्टोअर करू शकतात."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमचे डीफॉल्ट वॉलेट ॲप म्हणून सेट करायचे आहे का?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"कोणत्याही परवानगीची आवश्यकता नाही"</string> <string name="request_role_current_default" msgid="738722892438247184">"सद्य डीफॉल्ट"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"पुन्हा विचारू नका"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"डीफॉल्ट सेट करा"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"डेटा शेअरिंगचे अपडेट"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"काही अॅप्सनी तुमचा स्थान डेटा शेअर करण्याची त्यांची पद्धत बदलली"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"सेटिंग्ज"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> वाजता ॲक्सेस केले"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"काल <xliff:g id="TIME_DATE">%1$s</xliff:g> वाजता ॲक्सेस केले"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> ला <xliff:g id="TIME_DATE_1">%2$s</xliff:g> वाजता ॲक्सेस केले"</string> </resources> diff --git a/PermissionController/res/values-ms/strings.xml b/PermissionController/res/values-ms/strings.xml index a2e48b2bd..ca34aa19c 100644 --- a/PermissionController/res/values-ms/strings.xml +++ b/PermissionController/res/values-ms/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Semua kebenaran"</string> <string name="other_permissions" msgid="2901186127193849594">"Keupayaan apl lain"</string> <string name="permission_request_title" msgid="8790310151025020126">"Permintaan kebenaran"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Tindakan pasang/nyahpasang tidak disokong pada Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Pilih perkara yang boleh diakses oleh <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> telah dikemas kini. Pilih perkara yang boleh diakses oleh apl ini."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Batal"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Alih keluar kebenaran jika apl tidak digunakan"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Alih keluar kebenaran dan kosongkan ruang"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Jeda aktiviti apl jika tidak digunakan"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Urus apl jika tidak digunakan"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Alih keluar kebenaran, padamkan fail sementara dan hentikan pemberitahuan"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Alih keluar kebenaran, padamkan fail sementara, hentikan pemberitahuan dan arkibkan apl tersebut"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Untuk melindungi data anda, kebenaran apl ini akan dialih keluar jika apl tidak digunakan selama beberapa bulan."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Untuk melindungi data anda, jika apl tidak digunakan selama beberapa bulan, kebenaran berikut akan dialih keluar: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Untuk melindungi data anda, kebenaran telah dialih keluar daripada apl yang tidak anda gunakan selama beberapa bulan."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Apl nota"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apl yang membolehkan anda mengambil nota pada peranti anda"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"nota"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Apl dompet lalai"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Apl dompet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Apl dompet boleh menyimpan kad kredit dan kesetiaan anda, kunci kereta dan perkara lain untuk membantu pelbagai bentuk transaksi."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Tetapkan <xliff:g id="APP_NAME">%1$s</xliff:g> sebagai apl dompet lalai anda?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Kebenaran tidak diperlukan"</string> <string name="request_role_current_default" msgid="738722892438247184">"Lalai semasa"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Jangan tanya lagi"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Tetapkan sbg lalai"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Kemaskinian perkongsian data"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Sesetengah apl mengubah cara apl itu boleh berkongsi data lokasi anda"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Tetapan"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Diakses <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Diakses semalam <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Diakses <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index cd68ad6e1..6188e6b23 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ခွင့်ပြုချက် အားလုံး"</string> <string name="other_permissions" msgid="2901186127193849594">"အခြားအက်ပ်၏ စွမ်းရည်များ"</string> <string name="permission_request_title" msgid="8790310151025020126">"ခွင့်ပြုချက် တောင်းခံမှု"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear ပေါ်တွင် ထည့်သွင်းခြင်း/ဖြုတ်ခြင်းများကို ပံ့ပိုးမထားပါ။"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"&It;b7gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&It;/b> က အသုံးပြုခွင့်ရမည့် အရာတို့ကို ရွေးပါ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"&It;b><xliff:g id="APP_NAME">%1$s</xliff:g>&It;/b> ကို အပ်ဒိတ်လုပ်ပြီးပါပြီ။ ဤအက်ပ်က အသုံးပြုခွင့်ရမည့်အရာတို့ကို ရွေးပါ။"</string> <string name="review_button_cancel" msgid="2191147944056548886">"မလုပ်တော့"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"အသုံးမပြုပါက အက်ပ်ကို စီမံရန်"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ခွင့်ပြုချက် ဖယ်ရှားခြင်း၊ ယာယီဖိုင် ဖျက်ခြင်း၊ အကြောင်းကြားချက် ရပ်ခြင်း"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ခွင့်ပြုချက်များ ဖယ်ရှားခြင်း၊ ယာယီဖိုင်များ ဖျက်ခြင်း၊ အကြောင်းကြားချက်များ ရပ်ခြင်းနှင့် အက်ပ်သိမ်းခြင်းတို့ ပြုလုပ်နိုင်သည်"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"အက်ပ်ကို လအနည်းငယ် အသုံးမပြုပါက သင်၏ဒေတာကိုကာကွယ်ရန် ဤအက်ပ်အတွက် ခွင့်ပြုချက်များကို ဖယ်ရှားပါမည်။"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"အက်ပ်ကို လအနည်းငယ် အသုံးမပြုပါက သင်၏ဒေတာကိုကာကွယ်ရန် အောက်ပါခွင့်ပြုချက်များကို ဖယ်ရှားပါမည်- <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"သင်၏ဒေတာကိုကာကွယ်ရန် လအနည်းငယ်အတွင်း အသုံးမပြုသော အက်ပ်များမှ ခွင့်ပြုချက်များကို ဖယ်ရှားလိုက်သည်။"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"မှတ်စုရေးသောအက်ပ်"</string> <string name="role_notes_description" msgid="8496852798616883551">"စက်ပစ္စည်းတွင် မှတ်စုရေးခွင့်ပြုသော အက်ပ်များ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"မှတ်စုများ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"မူရင်း Wallet အက်ပ်"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet အက်ပ်"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Wallet အက်ပ်များသည် ငွေလွှဲပြောင်းသည့် ဖောင်အမျိုးမျိုးနှင့်ပတ်သက်ပြီး ကူညီရန် သင်၏ခရက်ဒစ်ကတ်၊ ဖောက်သည်ကတ်များ၊ ကားသော့နှင့် အခြားအရာများကို သိမ်းနိုင်သည်။"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို သင်၏မူရင်း Wallet အက်ပ်အဖြစ် သတ်မှတ်မလား။"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ခွင့်ပြုချက် မလိုပါ"</string> <string name="request_role_current_default" msgid="738722892438247184">"လက်ရှိ မူရင်း"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ထပ်မမေးပါနှင့်"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"မူရင်း သတ်မှတ်ရန်"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ဒေတာမျှဝေခြင်း အပ်ဒိတ်"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"အက်ပ်အချို့သည် ၎င်းတို့က သင်၏ တည်နေရာဒေတာ မျှဝေနိုင်သော နည်းလမ်းကို ပြောင်းထားသည်"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ဆက်တင်များ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> တွင် ဝင်ကြည့်ထားသည်"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"မနေ့ <xliff:g id="TIME_DATE">%1$s</xliff:g> တွင် ဝင်ကြည့်ထားသည်"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g> တွင် ဝင်ကြည့်ထားသည်"</string> </resources> diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml index fc86eb79d..e07bd4a46 100644 --- a/PermissionController/res/values-nb/strings.xml +++ b/PermissionController/res/values-nb/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alle tillatelser"</string> <string name="other_permissions" msgid="2901186127193849594">"Andre appfunksjoner"</string> <string name="permission_request_title" msgid="8790310151025020126">"Forespørsel om tillatelse"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Handlinger for å installere og avinstallere støttes ikke på Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Velg hva du vil gi <xliff:g id="APP_NAME">%1$s</xliff:g> tilgang til"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<xliff:g id="APP_NAME">%1$s</xliff:g> er oppdatert. Velg hva du vil gi denne appen tilgang til."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Avbryt"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Fjern tillatelser hvis appen ikke brukes"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Fjern tillatelser og frigjør plass"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Sett appaktivitet på pause hvis ubrukt"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Administrer appen hvis den ikke brukes"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Fjern tillatelser, slett midlertidige filer, og stopp varsler"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Fjern tillatelser, slett midlertidige filer, stopp varsler, og arkiver appen"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"For å beskytte dataene dine fjernes tillatelser for denne appen hvis appen ikke brukes på noen måneder."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Hvis appen ikke brukes på noen måneder, fjernes disse tillatelsene for å beskytte dataene dine: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"For å beskytte dataene dine har tillatelser blitt fjernet fra apper du ikke har brukt på noen måneder."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notatapp"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apper du kan bruke til å ta notater på enheten"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notater"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standard lommebokapp"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Lommebokapp"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"I lommebokapper kan du lagre kreditt- og stamkundekort, bilnøkler og andre ting for å få hjelp med ulike transaksjonstyper."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Vil du bruke <xliff:g id="APP_NAME">%1$s</xliff:g> som standard lommebokapp?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Ingen tillatelser er nødvendige"</string> <string name="request_role_current_default" msgid="738722892438247184">"Gjeldende standard"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ikke spør igjen"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Angi som standard"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Oppdateringer av datadeling"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Noen apper har endret hvordan de kan dele posisjonsdataene dine"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Innstillinger"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Åpnet <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Åpnet i går <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Åpnet <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index c934729fd..1bb9083ce 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"सबै अनुमति"</string> <string name="other_permissions" msgid="2901186127193849594">"एपका अन्य क्षमताहरू"</string> <string name="permission_request_title" msgid="8790310151025020126">"अनुमति दिन भनी गरिएको अनुरोध"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear मा स्थापना/स्थापना रद्द गर्ने कारबाहीहरू समर्थित छैनन्।"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> लाई केमाथि पहुँच राख्न दिने हो छनौट गर्नुहोस्"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> अद्यावधिक गरिएको छ। यस एपलाई केमाथि पहुँच राख्न दिने हो छनौट गर्नुहोस्।"</string> <string name="review_button_cancel" msgid="2191147944056548886">"रद्द गर्नुहोस्"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"एप प्रयोग गरिएको छैन भने व्यवस्थापन गरियोस्"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"अनुमतिहरू रद्द गरियोस्, अस्थायी फाइलहरू मेटाइयोस् र एपसम्बन्धी सूचना नपठाइयोस्"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"अनुमति रद्द गरियोस्, अस्थायी फाइलहरू मेटाइयोस्, सूचना नपठाइयोस् र एप अभिलेखमा राखियोस्"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"तपाईंका डेटाको सुरक्षार्थ यो एप केही महिनासम्म प्रयोग नगरिएका खण्डमा यसलाई दिइएका अनुमति रद्द गरिने छन्।"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"तपाईंका डेटाको सुरक्षार्थ यो एप केही महिनासम्म प्रयोग नगरिएका खण्डमा निम्न अनुमति रद्द गरिने छन्: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"तपाईंका डेटाको सुरक्षार्थ तपाईंले केही महिनादेखि प्रयोग नगरेका एपलाई दिइएका अनुमति रद्द गरिएका छन्।"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"नोट एप"</string> <string name="role_notes_description" msgid="8496852798616883551">"तपाईंलाई आफ्नो डिभाइसमा नोट बनाउन दिने एपहरू"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"नोटहरू"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"डिफल्ट Wallet एप"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet एप"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"तपाईंलाई विभिन्न तरिकाले कारोबारहरू गर्न सघाउन Wallet एपमा तपाईंका क्रेडिट कार्ड तथा लोयल्टी कार्ड, कार कीलगायतका अन्य कुराहरू भण्डारण गर्न सकिन्छ।"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई आफ्नो डिफल्ट Wallet एपका रूपमा सेट गर्ने हो?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"कुनै पनि अनुमति चाहिन्न"</string> <string name="request_role_current_default" msgid="738722892438247184">"हालको डिफल्ट एप"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"फेरि नसोध्नुहोस्"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"डिफल्ट सेट गर्नुहोस्"</string> @@ -565,7 +570,7 @@ <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="microphone_toggle_label_qs" msgid="8132912469813396552">"माइक प्रयोग गर्ने अनुमति"</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> <string name="microphone_usage_qs" msgid="8527666682168170417">"हालसालै गरिएको माइकको प्रयोगसम्बन्धी जानकारी हेर्नुहोस्"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा अद्यावधिक जानकारी"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"केही एपहरूले तपाईंको लोकेसन डेटा सेयर गर्न सक्ने तरिका परिवर्तन गरेका छन्"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"सेटिङ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> मा एक्सेस गरिएको"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"हिजो <xliff:g id="TIME_DATE">%1$s</xliff:g> मा एक्सेस गरिएको"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> मा एक्सेस गरिएको"</string> </resources> diff --git a/PermissionController/res/values-nl/strings.xml b/PermissionController/res/values-nl/strings.xml index 22be451af..0acb9152d 100644 --- a/PermissionController/res/values-nl/strings.xml +++ b/PermissionController/res/values-nl/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alle rechten"</string> <string name="other_permissions" msgid="2901186127193849594">"Andere app-mogelijkheden"</string> <string name="permission_request_title" msgid="8790310151025020126">"Rechtenverzoek"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Acties voor installeren/verwijderen niet ondersteund op Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Kiezen waartoe <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> toegang krijgt"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> is geüpdatet. Kies waartoe je deze app toegang wilt geven."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Annuleren"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Rechten intrekken als app niet wordt gebruikt"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Rechten intrekken en ruimte vrijmaken"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"App-activiteit onderbreken indien niet gebruikt"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"App beheren indien ongebruikt"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Verwijder rechten en tijdelijke bestanden, en stop meldingen"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Verwijder rechten en tijdelijke bestanden, stop meldingen en archiveer de app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Om je gegevens te beschermen worden de rechten voor deze app verwijderd als de app een aantal maanden niet is gebruikt."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Om je gegevens te beschermen worden de volgende rechten ingetrokken als de app een paar maanden niet is gebruikt: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Om je gegevens te beschermen zijn de rechten verwijderd van apps die al een paar maanden niet zijn gebruikt."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notitie-app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps waarmee je notities op je apparaat kunt maken"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notities"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standaard digitale portemonnee-app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Digitale portemonnee-app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Digitale portemonnee-apps kunnen je creditcards en klantenkaarten, autosleutels en andere zaken opslaan om je te helpen bij verschillende vormen van transacties."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> instellen als je standaard digitale portemonnee-app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Geen rechten nodig"</string> <string name="request_role_current_default" msgid="738722892438247184">"Huidige standaard-app"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Niet meer vragen"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Standaard instellen"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Updates voor gegevens delen"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Sommige apps kunnen je locatiegegevens nu op een andere manier delen"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Instellingen"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Geopend: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Geopend: gisteren om <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Geopend: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> om <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml index beb7572ba..c5485f6b8 100644 --- a/PermissionController/res/values-or/strings.xml +++ b/PermissionController/res/values-or/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ସମସ୍ତ ଅନୁମତିଗୁଡ଼ିକ"</string> <string name="other_permissions" msgid="2901186127193849594">"ଅନ୍ୟାନ୍ୟ ଆପ୍ ଦକ୍ଷତା"</string> <string name="permission_request_title" msgid="8790310151025020126">"ଅନୁମତି ଅନୁରୋଧ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android ୱିୟର୍"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ୱିୟର୍ରେ ଇନଷ୍ଟଲ୍/ଅନଇନଷ୍ଟଲ୍ କାର୍ଯ୍ୟଗୁଡ଼ିକ ସମର୍ଥନ କରେନାହିଁ।"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ଆକ୍ସେସ୍ କରିବା ପାଇଁ କେଉଁସବୁ ଅନୁମତି ଦିଆଯିବ, ତାହା ବାଛନ୍ତୁ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ଅପଡେଟ୍ କରାଯାଇଛି। ଏହି ଆପ୍ କେଉଁସବୁ ଆକ୍ସେସ୍ କରିପାରିବ, ତାହା ବାଛନ୍ତୁ।"</string> <string name="review_button_cancel" msgid="2191147944056548886">"ବାତିଲ କରନ୍ତୁ"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ଆପକୁ ବ୍ୟବହାର କରାଯାଉନଥିଲେ ପରିଚାଳନା କରନ୍ତୁ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଅନ୍ତୁ, ଅସ୍ଥାୟୀ ଫାଇଲଗୁଡ଼ିକୁ ଡିଲିଟ କରନ୍ତୁ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବନ୍ଦ କରନ୍ତୁ"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଅନ୍ତୁ, ଅସ୍ଥାୟୀ ଫାଇଲଗୁଡ଼ିକୁ ଡିଲିଟ କରନ୍ତୁ, ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବନ୍ଦ କରନ୍ତୁ ଏବଂ ଆପକୁ ଆର୍କାଇଭ କରନ୍ତୁ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ଯଦି ଏହି ଆପକୁ କିଛି ମାସ ପାଇଁ ବ୍ୟବହାର କରାଯାଇନାହିଁ, ତେବେ ଆପଣଙ୍କ ଡାଟାର ସୁରକ୍ଷା ନିମନ୍ତେ ଏହାର ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯିବ।"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ଯଦି ଏହି ଆପକୁ କିଛି ମାସ ପାଇଁ ବ୍ୟବହାର କରାଯାଇନାହିଁ ତେବେ ଆପଣଙ୍କ ଡାଟାର ସୁରକ୍ଷା ନିମନ୍ତେ, ନିମ୍ନୋକ୍ତ ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯିବ: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ଆପଣଙ୍କ ଡାଟାର ସୁରକ୍ଷା ପାଇଁ, ଆପଣ କିଛି ମାସ ହେଲା ବ୍ୟବହାର କରିନଥିବା ଆପଗୁଡ଼ିକରୁ ଅନୁମତିଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯାଇଛି।"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"ନୋଟ୍ସ ଆପ"</string> <string name="role_notes_description" msgid="8496852798616883551">"ଆପଣଙ୍କ ଡିଭାଇସରେ ଆପଣଙ୍କୁ ନୋଟ ନେବା ପାଇଁ ଅନୁମତି ଦେଉଥିବା ଆପ୍ସ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ନୋଟ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ଡିଫଲ୍ଟ ୱାଲେଟ ଆପ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"ୱାଲେଟ ଆପ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"ବିଭିନ୍ନ ପ୍ରକାରର ଟ୍ରାଞ୍ଜେକସନରେ ସାହାଯ୍ୟ କରିବାକୁ ୱାଲେଟ ଆପ୍ସ ଆପଣଙ୍କ କ୍ରେଡିଟ ଓ ଲୟାଲ୍ଟି କାର୍ଡ, କାର କୀ ଏବଂ ଅନ୍ୟ ଜିନିଷଗୁଡ଼ିକୁ ଷ୍ଟୋର କରିପାରିବ।"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ଆପଣଙ୍କ ଡିଫଲ୍ଟ ୱାଲେଟ ଆପ ଭାବେ ସେଟ କରିବେ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"କୌଣସି ଅନୁମତି ଆବଶ୍ୟକ ନାହିଁ"</string> <string name="request_role_current_default" msgid="738722892438247184">"ସମ୍ପ୍ରତ୍ତି ଡିଫଲ୍ଟ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ଆଉ ପଚାରନ୍ତୁ ନାହିଁ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ଡିଫଲ୍ଟ ଭାବେ ସେଟ୍ କରନ୍ତୁ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ଡାଟା ସେୟାରିଂ ଅପଡେଟଗୁଡ଼ିକ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"କିଛି ଆପ୍ସ ଆପଣଙ୍କ ଲୋକେସନ ଡାଟା ସେୟାର କରିବା ଉପାୟକୁ ପରିବର୍ତ୍ତନ କରିଛି"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ସେଟିଂସ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇଛି"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ଗତକାଲି <xliff:g id="TIME_DATE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇଛି"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇଛି"</string> </resources> diff --git a/PermissionController/res/values-pa-v33/strings.xml b/PermissionController/res/values-pa-v33/strings.xml index 03e18ae50..0aa143302 100644 --- a/PermissionController/res/values-pa-v33/strings.xml +++ b/PermissionController/res/values-pa-v33/strings.xml @@ -28,9 +28,9 @@ <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ਸੂਚੀ ਆਈਟਮ। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"ਹੋਰ ਅਲਰਟ"</string> - <string name="safety_center_dismissed_issues_card_title" msgid="2340129842725145733">"ਖਾਰਜ ਕੀਤੀਆਂ ਗਈਆਂ ਸੁਚੇਤਨਾਵਾਂ"</string> - <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}"</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_dismissed_issues_card_title" msgid="2340129842725145733">"ਖਾਰਜ ਕੀਤੇ ਅਲਰਟ"</string> + <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਅਲਰਟ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਅਲਰਟ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਅਲਰਟ ਦੇਖੋ}}"</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_page_landing" msgid="1717368301679228128">"ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ"</string> diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml index b69db6992..297c99ce8 100644 --- a/PermissionController/res/values-pa/strings.xml +++ b/PermissionController/res/values-pa/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"ਸਾਰੀਆਂ ਇਜਾਜ਼ਤਾਂ"</string> <string name="other_permissions" msgid="2901186127193849594">"ਐਪ ਦੀਆਂ ਹੋਰ ਸਮਰੱਥਤਾਵਾਂ"</string> <string name="permission_request_title" msgid="8790310151025020126">"ਇਜਾਜ਼ਤ ਬੇਨਤੀ"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear \'ਤੇ ਸਥਾਪਤ/ਅਣਸਥਾਪਤ ਕਰਨ ਦੀਆਂ ਕਾਰਵਾਈਆਂ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ।"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"ਇਹ ਚੁਣੋ ਕਿ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਕਿਸ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ। ਇਹ ਚੁਣੋ ਕਿ ਇਸ ਐਪ ਨੂੰ ਕਿਸ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ।"</string> <string name="review_button_cancel" msgid="2191147944056548886">"ਰੱਦ ਕਰੋ"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ਵਰਤੋਂ ਵਿੱਚ ਨਾ ਹੋਣ \'ਤੇ, ਐਪ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"ਇਜਾਜ਼ਤਾਂ ਹਟਾਓ, ਅਸਥਾਈ ਫ਼ਾਈਲਾਂ ਮਿਟਾਓ ਅਤੇ ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ਇਜਾਜ਼ਤਾਂ ਹਟਾਓ, ਅਸਥਾਈ ਫ਼ਾਈਲਾਂ ਮਿਟਾਓ, ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ ਅਤੇ ਐਪ ਨੂੰ ਪੁਰਾਲੇਖਬੱਧ ਕਰੋ"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ਤੁਹਾਡੀ ਡਾਟਾ ਸੁਰੱਖਿਆ ਲਈ, ਜੇ ਇਹ ਐਪ ਕੁਝ ਮਹੀਨਿਆਂ ਲਈ ਵਰਤੀ ਨਹੀਂ ਗਈ, ਤਾਂ ਇਸ ਐਪ ਲਈ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ਤੁਹਾਡੀ ਡਾਟਾ ਸੁਰੱਖਿਆ ਲਈ, ਜੇ ਇਹ ਐਪ ਕੁਝ ਮਹੀਨਿਆਂ ਲਈ ਵਰਤੀ ਨਹੀਂ ਗਈ, ਤਾਂ ਅੱਗੇ ਦਿੱਤੀਆਂ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ਤੁਹਾਡੀ ਡਾਟਾ ਸੁਰੱਖਿਆ ਲਈ, ਜੋ ਐਪਾਂ ਤੁਸੀਂ ਕੁਝ ਮਹੀਨਿਆਂ ਤੋਂ ਨਹੀਂ ਵਰਤੀਆਂ ਉਹਨਾਂ ਐਪਾਂ ਤੋਂ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।"</string> @@ -371,7 +371,7 @@ <string name="role_sms_search_keywords" msgid="8022048144395047352">"ਲਿਖਤ ਸੁਨੇਹਾ, ਲਿਖਤ ਭੇਜਣਾ, ਸੁਨੇਹੇ, ਸੁਨੇਹਾ ਭੇਜਣਾ"</string> <string name="role_emergency_label" msgid="7028825857206842366">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੰਕਟਕਾਲੀਨ ਐਪ"</string> <string name="role_emergency_short_label" msgid="2388431453335350348">"ਸੰਕਟਕਾਲੀਨ ਐਪ"</string> - <string name="role_emergency_description" msgid="5051840234887686630">"ਐਪਾਂ ਜੋ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਡਾਕਟਰੀ ਜਾਣਕਾਰੀ ਰਿਕਾਰਡ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਸੰਕਟਕਾਲੀਨ ਮਦਦਗਾਰਾਂ ਤੱਕ ਪਹੁੰਚਯੋਗ ਬਣਾਉਣ ਦਿੰਦੀਆਂ ਹਨ; ਗੰਭੀਰ ਮੌਸਮੀ ਘਟਨਾਵਾਂ ਅਤੇ ਆਫ਼ਤਾਂ ਬਾਰੇ ਸੁਚੇਤਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ; ਤੁਹਾਨੂੰ ਮਦਦ ਦੀ ਲੋੜ ਪੈਣ \'ਤੇ ਹੋਰਾਂ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ"</string> + <string name="role_emergency_description" msgid="5051840234887686630">"ਐਪਾਂ ਜੋ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਡਾਕਟਰੀ ਜਾਣਕਾਰੀ ਰਿਕਾਰਡ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਐਮਰਜੈਂਸੀ ਮਦਦਗਾਰਾਂ ਤੱਕ ਪਹੁੰਚਯੋਗ ਬਣਾਉਣ ਦਿੰਦੀਆਂ ਹਨ; ਬਹੁਤ ਜ਼ਿਆਦਾ ਖਰਾਬ ਮੌਸਮੀ ਘਟਨਾਵਾਂ ਅਤੇ ਆਫ਼ਤਾਂ ਬਾਰੇ ਅਲਰਟ ਪ੍ਰਾਪਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ; ਤੁਹਾਨੂੰ ਮਦਦ ਦੀ ਲੋੜ ਪੈਣ \'ਤੇ ਹੋਰਾਂ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ"</string> <string name="role_emergency_request_title" msgid="8469579020654348567">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਤੁਹਾਡੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੰਕਟਕਾਲੀਨ ਐਪ ਵਜੋਂ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string> <string name="role_emergency_request_description" msgid="131645948770262850">"ਕਿਸੇ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ"</string> <string name="role_emergency_search_keywords" msgid="1920007722599213358">"ice"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"ਨੋਟ-ਕਥਨਾਂ ਲਈ ਐਪ"</string> <string name="role_notes_description" msgid="8496852798616883551">"ਐਪਾਂ ਜੋ ਤੁਹਾਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ \'ਤੇ ਨੋਟ-ਕਥਨ ਲੈਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀਆਂ ਹਨ"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ਨੋਟ-ਕਥਨ"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਾਲੇਟ ਐਪ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet ਐਪ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"ਲੈਣ-ਦੇਣ ਦੀਆਂ ਵੱਖ-ਵੱਖ ਕਿਸਮਾਂ ਸੰਬੰਧੀ ਮਦਦ ਕਰਨ ਲਈ, ਵਾਲੇਟ ਐਪਾਂ ਤੁਹਾਡੇ ਕ੍ਰੈਡਿਟ ਅਤੇ ਵਫ਼ਾਦਾਰੀ ਕਾਰਡਾਂ, ਕਾਰ ਦੀਆਂ ਕੁੰਜੀਆਂ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਨੂੰ ਸਟੋਰ ਕਰ ਸਕਦੀਆਂ ਹਨ।"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਤੁਹਾਡੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਾਲੇਟ ਐਪ ਵਜੋਂ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ਕਿਸੇ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ"</string> <string name="request_role_current_default" msgid="738722892438247184">"ਮੌਜੂਦਾ ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ਦੁਬਾਰਾ ਨਾ ਪੁੱਛੋ"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਵਜੋਂ ਸੈੱਟ ਕਰੋ"</string> @@ -552,7 +557,7 @@ <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ"</string> <string name="safety_center_rescan_button" msgid="4517514567809409596">"ਡੀਵਾਈਸ ਨੂੰ ਸਕੈਨ ਕਰੋ"</string> <string name="safety_center_issue_card_dismiss_button" msgid="5113965506144222402">"ਖਾਰਜ ਕਰੋ"</string> - <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"ਕੀ ਇਸ ਸੁਚੇਤਨਾ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string> + <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"ਕੀ ਇਸ ਅਲਰਟ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string> <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"ਹੋਰ ਸੁਰੱਖਿਆ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕਿਸੇ ਵੀ ਸਮੇਂ ਆਪਣੀਆਂ ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ ਸੈਟਿੰਗਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ"</string> <string name="safety_center_issue_card_confirm_dismiss_button" msgid="5884137843083634556">"ਖਾਰਜ ਕਰੋ"</string> <string name="safety_center_issue_card_cancel_dismiss_button" msgid="2874578798877712346">"ਰੱਦ ਕਰੋ"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ਡਾਟਾ ਸਾਂਝਾਕਰਨ ਅੱਪਡੇਟ"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"ਕੁਝ ਐਪਾਂ ਨੇ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਦਾ ਤਰੀਕਾ ਬਦਲ ਦਿੱਤਾ ਹੈ"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ਸੈਟਿੰਗਾਂ"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> ਵਜੇ ਪਹੁੰਚ ਕੀਤੀ ਗਈ"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"<xliff:g id="TIME_DATE">%1$s</xliff:g> ਵਜੇ ਕੱਲ੍ਹ ਪਹੁੰਚ ਕੀਤੀ ਗਈ"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> ਨੂੰ <xliff:g id="TIME_DATE_1">%2$s</xliff:g> ਵਜੇ ਪਹੁੰਚ ਕੀਤੀ ਗਈ"</string> </resources> diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml index 9ed891733..95759a247 100644 --- a/PermissionController/res/values-pl/strings.xml +++ b/PermissionController/res/values-pl/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Wszystkie uprawnienia"</string> <string name="other_permissions" msgid="2901186127193849594">"Inne funkcje aplikacji"</string> <string name="permission_request_title" msgid="8790310151025020126">"Prośba o pozwolenie"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear nie obsługuje instalowania ani odinstalowywania."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Wybierz, jakie uprawnienia dostępu ma mieć <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikacja <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> została zaktualizowana. Wybierz dla niej uprawnienia dostępu."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Anuluj"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Usuń uprawnienia, jeśli aplikacja jest nieużywana"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Usuń uprawnienia i zwolnij miejsce"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Wstrzymuj aktywność w aplikacji, jeśli jest nieużywana"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Zarządzaj nieużywanymi aplikacjami"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Usuń uprawnienia i pliki tymczasowe oraz zatrzymaj powiadomienia"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Usuń uprawnienia i pliki tymczasowe, zatrzymaj powiadomienia i zarchiwizuj aplikację"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Aby chronić Twoje dane, usuniemy uprawnienia tej aplikacji, jeśli nie była używana od kilku miesięcy."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Aby chronić Twoje dane, jeśli aplikacja nie będzie używana przez kilka miesięcy, usuniemy te uprawnienia: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Aby chronić Twoje dane, usunęliśmy uprawnienia aplikacji, których nie używano od kilku miesięcy."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacja do notatek"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacje umożliwiające robienie notatek na urządzeniu"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notatki"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Domyślna aplikacja portfela"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacja portfela cyfrowego"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikacje portfeli cyfrowych mogą przechowywać karty kredytowe i lojalnościowe, kluczyki do samochodu i inne rzeczy, aby pomóc w różnych formach transakcji."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Ustawić aplikację <xliff:g id="APP_NAME">%1$s</xliff:g> jako domyślną aplikację portfela cyfrowego?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nie potrzebuje uprawnień"</string> <string name="request_role_current_default" msgid="738722892438247184">"Bieżąca aplikacja domyślna"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Nie pytaj ponownie"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Ustaw jako domyślną"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Zmiany w udostępnianiu danych"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Niektóre aplikacje zmieniły sposób udostępniania Twoich danych o lokalizacji"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ustawienia"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Ostatni dostęp <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Ostatni dostęp wczoraj, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Ostatni dostęp <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-pt-rBR/strings.xml b/PermissionController/res/values-pt-rBR/strings.xml index 03089b17c..2aec85fed 100644 --- a/PermissionController/res/values-pt-rBR/strings.xml +++ b/PermissionController/res/values-pt-rBR/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todas as permissões"</string> <string name="other_permissions" msgid="2901186127193849594">"Outros recursos do app"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitação de permissão"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Escolha o que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> terá permissão para acessar"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"O app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> foi atualizado. Escolha o que esse app terá permissão para acessar."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remover permissões se o app não for usado"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remover permissões e liberar espaço"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausar atividade no app quando não usado"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gerenciar o app quando não usado"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissões, exclui arquivos temporários e para notificações"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remover permissões, excluir arquivos temporários, parar notificações e arquivar o app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para proteger seus dados, as permissões serão removidas se o app não for usado por alguns meses."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para proteger seus dados, se o app não for usado por alguns meses, as seguintes permissões serão removidas: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para proteger seus dados, as permissões de apps que não foram usados nos últimos meses foram removidas."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps que permitem a criação de notas no dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de carteira padrão"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App de carteira"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Os apps de carteira podem armazenar seus cartões de crédito e fidelidade, chaves do carro e outras coisas para ajudar em diversas formas de transações."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Definir <xliff:g id="APP_NAME">%1$s</xliff:g> como seu app de carteira padrão?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nenhuma permissão necessária"</string> <string name="request_role_current_default" msgid="738722892438247184">"Padrão atual"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Não perguntar novamente"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Definir como padrão"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Atualizações do compartilhamento de dados"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Alguns apps mudaram a forma como podem compartilhar seus dados de local"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configurações"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Último acesso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Último acesso: ontem, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Último acesso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-pt-rPT/strings.xml b/PermissionController/res/values-pt-rPT/strings.xml index 437805f95..787399bcf 100644 --- a/PermissionController/res/values-pt-rPT/strings.xml +++ b/PermissionController/res/values-pt-rPT/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todas as autorizações"</string> <string name="other_permissions" msgid="2901186127193849594">"Outras capacidades de aplicações"</string> <string name="permission_request_title" msgid="8790310151025020126">"Pedido de autorização"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Escolher a que conteúdos permite que o <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aceda"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"O <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> foi atualizado. Escolha a que conteúdos permite que esta app aceda."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remover autorizações se a app não for utilizada"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remover autorizações e libertar espaço"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausar atividade de apps, se não usadas"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gerir app, se não for usada"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remova autorizações, elimine ficheiros temporários e pare notificações"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remova autorizações, elimine ficheiros temporários, pare notificações e arquive a app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para proteger os seus dados, as autorizações desta app serão removidas se a mesma não for utilizada durante alguns meses."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para proteger os seus dados, se a app não for utilizada há alguns meses, serão removidas as seguintes autorizações: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para proteger os seus dados, foram removidas as autorizações para as apps que não utiliza há alguns meses."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps que lhe permitem tirar notas no seu dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de carteira predefinida"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App de carteira"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"As apps de carteira podem armazenar os seus cartões de crédito e de fidelidade, as chaves do carro, entre outras coisas, para ajudar em várias formas de transações."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Definir a app <xliff:g id="APP_NAME">%1$s</xliff:g> como a sua app de carteira predefinida?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Não são necessárias autorizações"</string> <string name="request_role_current_default" msgid="738722892438247184">"Predefinição atual"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Não perguntar novamente"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Definir como predef."</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Atualizações da partilha de dados"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algumas apps alteraram a forma como podem partilhar os seus dados de localização"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Definições"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Acedido à(s) <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Acedido ontem à(s) <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Acedido a <xliff:g id="TIME_DATE_0">%1$s</xliff:g> à(s) <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-pt/strings.xml b/PermissionController/res/values-pt/strings.xml index 03089b17c..2aec85fed 100644 --- a/PermissionController/res/values-pt/strings.xml +++ b/PermissionController/res/values-pt/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Todas as permissões"</string> <string name="other_permissions" msgid="2901186127193849594">"Outros recursos do app"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitação de permissão"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Escolha o que o app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> terá permissão para acessar"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"O app <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> foi atualizado. Escolha o que esse app terá permissão para acessar."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Cancelar"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Remover permissões se o app não for usado"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Remover permissões e liberar espaço"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausar atividade no app quando não usado"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gerenciar o app quando não usado"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Remove permissões, exclui arquivos temporários e para notificações"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Remover permissões, excluir arquivos temporários, parar notificações e arquivar o app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para proteger seus dados, as permissões serão removidas se o app não for usado por alguns meses."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para proteger seus dados, se o app não for usado por alguns meses, as seguintes permissões serão removidas: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para proteger seus dados, as permissões de apps que não foram usados nos últimos meses foram removidas."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"App de notas"</string> <string name="role_notes_description" msgid="8496852798616883551">"Apps que permitem a criação de notas no dispositivo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notas"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"App de carteira padrão"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"App de carteira"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Os apps de carteira podem armazenar seus cartões de crédito e fidelidade, chaves do carro e outras coisas para ajudar em diversas formas de transações."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Definir <xliff:g id="APP_NAME">%1$s</xliff:g> como seu app de carteira padrão?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nenhuma permissão necessária"</string> <string name="request_role_current_default" msgid="738722892438247184">"Padrão atual"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Não perguntar novamente"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Definir como padrão"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Atualizações do compartilhamento de dados"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Alguns apps mudaram a forma como podem compartilhar seus dados de local"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configurações"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Último acesso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Último acesso: ontem, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Último acesso: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml index b4abb4142..93ede43ea 100644 --- a/PermissionController/res/values-ro/strings.xml +++ b/PermissionController/res/values-ro/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Toate permisiunile"</string> <string name="other_permissions" msgid="2901186127193849594">"Alte funcții ale aplicației"</string> <string name="permission_request_title" msgid="8790310151025020126">"Solicitare de permisiune"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Acțiunile Instalează/Dezinstalează nu sunt acceptate pe Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Alege ce va putea accesa <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplicația <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> a fost actualizată. Alege ce va putea accesa această aplicație."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Anulează"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Elimină permisiunile dacă aplicația nu este folosită"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Revocă permisiunile și eliberează spațiu"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Întrerupe activitatea în aplicațiile nefolosite"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Gestionează aplicația dacă nu e folosită"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Revocă permisiunile, șterge fișierele temporare și oprește notificările"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Elimină permisiunile, șterge fișierele temporare, oprește notificările și arhivează aplicația"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Pentru a-ți proteja datele, se vor elimina permisiunile pentru această aplicație dacă nu este folosită câteva luni."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Pentru a-ți proteja datele, dacă aplicația nu este folosită câteva luni, se vor elimina următoarele permisiuni: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Pentru a-ți proteja datele, s-au eliminat permisiunile din aplicațiile pe care nu le-ai folosit de câteva luni."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplicația pentru note"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplicații cu ajutorul cărora poți să iei notițe pe dispozitiv"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notițe"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Aplicația portofel prestabilită"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplicație portofel"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplicațiile portofel pot să stocheze credit și carduri de fidelitate, chei de mașină și alte date, pentru a simplifica diferite tipuri de tranzacții."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Setezi <xliff:g id="APP_NAME">%1$s</xliff:g> ca aplicație portofel prestabilită?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nu sunt necesare permisiuni"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aplicația prestabilită actuală"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Nu mai întreba"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Setează ca prestabilită"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Actualizări privind permiterea accesului la date"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Unele aplicații au schimbat modul în care pot permite accesul la datele tale privind locațiile"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Setări"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Data accesării: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Data accesării: ieri, <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Data accesării: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ru/strings.xml b/PermissionController/res/values-ru/strings.xml index ee9ccfb2b..62dd2e773 100644 --- a/PermissionController/res/values-ru/strings.xml +++ b/PermissionController/res/values-ru/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Все разрешения"</string> <string name="other_permissions" msgid="2901186127193849594">"Что ещё может приложение"</string> <string name="permission_request_title" msgid="8790310151025020126">"Запрос разрешений"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Wear OS"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Установка и удаление не поддерживаются в Wear OS."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Выберите разрешения для приложения <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Приложение <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> обновлено. Выберите разрешения для него."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Отмена"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Приостановить работу в неактивный период"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Удалить разрешения и временные файлы, прекратить отправку уведомлений"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Удалить разрешения и временные файлы, прекратить отправку уведомлений и перенести приложение в архив"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Для защиты ваших данных мы отзовем разрешения, предоставленные этому приложению, если вы не будете пользоваться им несколько месяцев."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Если вы не будете пользоваться приложением несколько месяцев, в целях защиты ваших данных мы отзовем следующие разрешения: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"В целях защиты ваших данных мы отозвали разрешения для приложений, которыми вы не пользовались несколько месяцев."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Приложение для заметок"</string> <string name="role_notes_description" msgid="8496852798616883551">"Приложения для написания заметок на вашем устройстве"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"заметки"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Кошелек по умолчанию"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Приложение-кошелек"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"В приложении-кошельке можно хранить кредитные карты, карты постоянного клиента, автомобильные ключи и другие цифровые продукты. С его помощью удобнее проводить различные типы транзакций."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Использовать приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" как кошелек по умолчанию?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Разрешения не требуются."</string> <string name="request_role_current_default" msgid="738722892438247184">"Используется по умолчанию"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Больше не спрашивать"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"По умолчанию"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Обновление сведений о передаче данных"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Некоторые приложения изменили подход к передаче данных о вашем местоположении."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Настройки"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Последний доступ: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Последний доступ вчера: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Последний доступ: <xliff:g id="TIME_DATE_0">%1$s</xliff:g>, <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-si/strings.xml b/PermissionController/res/values-si/strings.xml index fc722dec7..8a9f2a4a5 100644 --- a/PermissionController/res/values-si/strings.xml +++ b/PermissionController/res/values-si/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"සියලු අවසර"</string> <string name="other_permissions" msgid="2901186127193849594">"වෙනත් යෙදුම් හැකියාවන්"</string> <string name="permission_request_title" msgid="8790310151025020126">"අවසර ඉල්ලීම"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear මත ස්ථාපන/අස්ථාපනය ක්රියා සහාය දක්වන්නේ නැත."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> හට පිවිසීමට ඉඩ දෙන දේ තෝරන්න"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> යාවත්කාලීන කර ඇත. මෙම යෙදුමට පිවිසීමට ඉඩ දෙන දේ තෝරන්න."</string> <string name="review_button_cancel" msgid="2191147944056548886">"අවලංගු කරන්න"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"යෙදුම භාවිතා නොකළේ නම් කළමනාකරණය කරන්න"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"අවසර ඉවත් කරන්න, තාවකාලික ගොනු මකන්න සහ දැනුම්දීම් නවත්වන්න"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"අවසර ඉවත් කරන්න, තාවකාලික ගොනු මකා දමන්න, දැනුම්දීම් නවත්වන්න, සහ යෙදුම ලේඛනාරක්ෂණය කරන්න"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"ඔබගේ දත්ත ආරක්ෂා කිරීම සඳහා, යෙදුම මාස කිහිපයක් භාවිතා නොකරන්නේ නම් මෙම යෙදුම සඳහා අවසර ඉවත් කරනු ලැබේ."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"ඔබගේ දත්ත ආරක්ෂා කිරීම සඳහා, යෙදුම මාස කිහිපයක් භාවිතා නොකරන්නේ නම් පහත අවසර ඉවත් කරනු ලැබේ: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ඔබේ දත්ත ආරක්ෂා කිරීමට, ඔබ මාස කීපයක් තුළ භාවිත කර නැති යෙදුම්වලින් අවසර ඉවත් කර ඇත"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"සටහන් යෙදුම"</string> <string name="role_notes_description" msgid="8496852798616883551">"ඔබේ උපාංගයෙහි සටහන් ගැනීමට ඔබට ඉඩ දෙන යෙදුම්"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"සටහන්"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"පෙරනිමි පසුම්බි යෙදුම"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"පසුම්බි යෙදුම"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"පසුම්බි යෙදුම්වලට විවිධ ආකාරයේ ගනුදෙනුවලට උදවු කිරීමට ඔබේ ණය සහ ලැදියා කාඩ්පත්, මෝටර් රථ යතුරු සහ වෙනත් දේවල් ගබඩා කළ හැක."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"ඔබේ පෙරනිමි පසුම්බි යෙදුම ලෙස <xliff:g id="APP_NAME">%1$s</xliff:g> සකසන්න ද?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"අවසර අවශ්ය නැත"</string> <string name="request_role_current_default" msgid="738722892438247184">"වත්මන් පෙරනිමිය"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"නැවත නොඅසන්න"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"පෙරනිමි ලෙස සකසන්න"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"දත්ත බෙදා ගැනීමේ යාවත්කාලීන"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"සමහර යෙදුම් ඒවා ඔබේ ස්ථාන දත්ත බෙදා ගත හැකි ආකාරය වෙනස් කර ඇත"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"සැකසීම්"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"ප්රවේශ වූයේ <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"ප්රවේශ වූයේ ඊයේ <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"ප්රවේශ වූයේ <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sk/strings.xml b/PermissionController/res/values-sk/strings.xml index 6680ddad9..57e7aaf6d 100644 --- a/PermissionController/res/values-sk/strings.xml +++ b/PermissionController/res/values-sk/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Všetky povolenia"</string> <string name="other_permissions" msgid="2901186127193849594">"Ďalšie možnosti aplikácie"</string> <string name="permission_request_title" msgid="8790310151025020126">"Žiadosť o povolenie"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear nepodporuje akciu inštalácie/odinštalovania."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Vyberte, k čomu môže pristupovať aplikácia <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikácia <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> bola aktualizovaná. Vyberte, k čomu bude mať prístup."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Zrušiť"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Odstrániť povolenia, ak sa aplikácia nepoužíva"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Odstraňovať povol. a uvoľňovať priestor"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pozastaviť aktivitu v nepoužívaných apl."</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Spravovať aplikáciu, ak sa nepoužíva"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Odstrániť povolenia, vymazať dočasné súbory a zastaviť upozornenia"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Odstráňte povolenia, vymažte dočasné súbory, zastavte upozornenia a archivujte aplikáciu"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Ak túto aplikáciu niekoľko mesiacov nepoužijete, v záujme ochrany vašich údajov budú odstránené jej povolenia."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ak túto aplikáciu niekoľko mesiacov nepoužijete, v záujme ochrany vašich údajov budú odstránené tieto povolenia: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"V záujme ochrany vašich údajov boli odobrané povolenia aplikáciám, ktoré ste niekoľko mesiacov nepoužívali."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikácia na poznámky"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikácie, ktoré vám v zariadení umožňujú písať poznámky"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"poznámky"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Predvolená aplik. s peňaženkou"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikácia s peňaženkou"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikácie s peňaženkou môžu uložiť vaše kreditné alebo vernostné karty, kľúče od auta a iné položky, aby vám mohli pomáhať s rôznymi druhmi transakcií."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Chcete nastaviť <xliff:g id="APP_NAME">%1$s</xliff:g> ako predvolenú aplikáciu s peňaženkou?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nie sú potrebné žiadne povolenia"</string> <string name="request_role_current_default" msgid="738722892438247184">"Aktuálne predvolená"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Nabudúce sa nepýtať"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Nastav. ako predvol."</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Aktualizácie zdieľania údajov"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Niektoré aplikácie zmenili spôsob zdieľania údajov o polohe"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Nastavenia"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Otvorené <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Otvorené včera <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Otvorené <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sl/strings.xml b/PermissionController/res/values-sl/strings.xml index d4b8a1037..181ae2a47 100644 --- a/PermissionController/res/values-sl/strings.xml +++ b/PermissionController/res/values-sl/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Vsa dovoljenja"</string> <string name="other_permissions" msgid="2901186127193849594">"Druge zmožnosti aplikacije"</string> <string name="permission_request_title" msgid="8790310151025020126">"Zahteva za dovoljenje"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Dejanja namestitve in odstranitve v sistemu Android Wear niso podprta."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Izberite, do česa aplikaciji <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> dovolite dostop"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Aplikacija <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> je posodobljena. Izberite, do česa tej aplikaciji dovolite dostop."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Prekliči"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Odstrani dovoljenja, če aplikacija ni v uporabi"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Odstrani dovoljenja in sprosti prostor"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Zaustavi dejavnost aplikacije ob neuporabi"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Upravljanje aplikacije ob neuporabi"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Dovoljenja se odstranijo, začasne datoteke se izbrišejo in prikazovanje obvestil se ustavi."</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Odstranitev dovoljenj, izbris začasnih datotek, ustavitev prikazovanja obvestil in arhiviranje aplikacije"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Z namenom zaščite podatkov bodo dovoljenja za to aplikacijo odstranjena, če je več mesecev ne boste uporabljali."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Če aplikacije več mesecev ne boste uporabljali, bodo z namenom zaščite podatkov odstranjena ta dovoljenja: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Z namenom zaščite podatkov so bila odstranjena dovoljenja za aplikacije, ki jih več mesecev niste uporabljali."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacija za zapiske"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacije, ki vam omogočajo ustvarjanje zapiskov v napravi."</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"zapiski"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Privzeta aplikacija denarnice"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacija denarnice"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"V aplikacijah denarnice lahko shranite kreditne kartice in kartice zvestobe, avtomobilske ključe ter druge stvari, ki vam omogočajo različne oblike transakcij."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Želite nastaviti <xliff:g id="APP_NAME">%1$s</xliff:g> kot privzeto aplikacijo denarnice?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nobeno dovoljenje ni potrebno"</string> <string name="request_role_current_default" msgid="738722892438247184">"Trenutna privzeta nastavitev"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ne vprašaj me več"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Nastavi kot privzeto"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Posodobitve deljenja podatkov"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Nekatere aplikacije so spremenile način deljenja vaših lokacijskih podatkov."</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Nastavitve"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Zadnji dostop: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Zadnji dostop včeraj: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Zadnji dostop: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sq/strings.xml b/PermissionController/res/values-sq/strings.xml index a32dfb4f7..f2bba1436 100644 --- a/PermissionController/res/values-sq/strings.xml +++ b/PermissionController/res/values-sq/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Të gjitha lejet"</string> <string name="other_permissions" msgid="2901186127193849594">"Kapacitete të tjera të aplikacionit"</string> <string name="permission_request_title" msgid="8790310151025020126">"Kërkesa e lejes"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Instalo/çinstalo veprimet që nuk mbështeten në Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Zgjidh se ku do të lejohet të ketë qasje <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> është përditësuar. Zgjidh se ku do të lejohet të ketë qasje ky aplikacion."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Anulo"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Hiq lejet nëse aplikacioni nuk është përdorur"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Hiq lejet dhe liro hapësirën"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Ndërprit aktivitetin nëse nuk përdoret"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Menaxho aplikacionin nëse nuk përdoret"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Hiq lejet, fshi skedarët e përkohshëm dhe ndalo njoftimet"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Hiq lejet, fshi skedarët e përkohshëm, ndalo njoftimet dhe arkivo aplikacionin"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Për të mbrojtur të dhënat e tua, lejet për këtë aplikacion do të hiqen nëse aplikacioni nuk përdoret për disa muaj."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Për të mbrojtur të dhënat e tua, nëse aplikacioni nuk është përdorur për disa muaj, lejet e mëposhtme do të hiqen: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Për të mbrojtur të dhënat e tua, lejet janë hequr nga aplikacionet që nuk i ke përdorur për disa muaj."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Aplikacioni për shënime"</string> <string name="role_notes_description" msgid="8496852798616883551">"Aplikacione që të lejojnë të mbash shënime në pajisjen tënde"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"shënime"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Aplikacioni i parazgjedhur i portofolit"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Aplikacioni i portofolit"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Aplikacionet e portofolit mund të ruajnë kartat e tua të kreditit dhe të besnikërisë, çelësat e makinës dhe gjëra të tjera për të të ndihmuar për forma të ndryshme transaksionesh."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Të caktohet <xliff:g id="APP_NAME">%1$s</xliff:g> si aplikacioni yt i parazgjedhur i portofolit?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Nuk nevojitet asnjë leje"</string> <string name="request_role_current_default" msgid="738722892438247184">"Parazgjedhja aktuale"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Mos pyet më"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Cakto si parazgjedhje"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Përditësimet për ndarjen e të dhënave"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Disa aplikacione ndryshuan mënyrën se si mund të ndajnë të dhënat e vendndodhjes sate"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Cilësimet"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Qasja e fundit në <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Qasja e fundit dje në <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Qasja e fundit më <xliff:g id="TIME_DATE_0">%1$s</xliff:g> në <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sr/strings.xml b/PermissionController/res/values-sr/strings.xml index 847f95fbb..4f69c0bbd 100644 --- a/PermissionController/res/values-sr/strings.xml +++ b/PermissionController/res/values-sr/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Све дозволе"</string> <string name="other_permissions" msgid="2901186127193849594">"Остале могућности апликације"</string> <string name="permission_request_title" msgid="8790310151025020126">"Захтев за дозволу"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Радње Инсталирај/Деинсталирај нису подржане у Wear-у."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Изаберите чему <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> може да приступа"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Апликација <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> је ажурирана. Изаберите чему ова апликација може да приступа."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Откажи"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Управљајте апликацијом ако се не користи"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Уклоните дозволе, избришите привремене фајлове и зауставите обавештења"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Уклоните дозволе, избришите привремене фајлове, зауставите обавештења и архивирајте апликацију"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Ради заштите података, дозволе за ову апликацију се уклањају ако се апликација не користи пар месеци."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ради заштите података, следеће дозволе се уклањају ако се апликација не користи пар месеци: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Ради заштите података, дозволе су уклоњене из апликација које нисте користили пар месеци."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Апликација за белешке"</string> <string name="role_notes_description" msgid="8496852798616883551">"Апликације које вам омогућавају да правите белешке на уређају"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"белешке"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Подразумевана апликација Новчаник"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Апликација Новчаник"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Апликације Новчаник могу да чувају ваше кредитне картице и картице лојалности, кључеве од аутомобила и друге ствари како би вам помогли у различитим облицима трансакција."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Желите да подесите <xliff:g id="APP_NAME">%1$s</xliff:g> као подразумевану апликацију Новчаник?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Није потребна ниједна дозвола"</string> <string name="request_role_current_default" msgid="738722892438247184">"Тренутно подразумевана"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Не питај поново"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Подеси као подразум."</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Ажурирања за дељење података"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Неке апликације су промениле начин на који могу да деле податке о локацији"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Подешавања"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Приступано: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Приступано јуче: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Приступано: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sv/strings.xml b/PermissionController/res/values-sv/strings.xml index 350d6528c..53cb70695 100644 --- a/PermissionController/res/values-sv/strings.xml +++ b/PermissionController/res/values-sv/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Alla behörigheter"</string> <string name="other_permissions" msgid="2901186127193849594">"Andra appbehörigheter"</string> <string name="permission_request_title" msgid="8790310151025020126">"Behörighetsbegäran"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Åtgärder för att installera/avinstallera stöds inte på Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Välj vad du vill ge <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> åtkomst till"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> har uppdaterats. Välj vad du vill ge appen åtkomst till."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Avbryt"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ta bort behörigheter om en app inte används"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ta bort behörigheter och frigör utrymme"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausa appaktivitet om appen inte används"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Hantera appen om den är oanvänd"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Ta bort behörigheter, radera tillfälliga filer och hindra aviseringar"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Ta bort behörigheter, radera tillfälliga filer, hindra aviseringar och arkivera appen"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Behörigheter tas bort av säkerhetsskäl från den här appen om den inte används på några månader."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Följande behörigheter tas bort av säkerhetsskäl från appen om den inte används på några månader: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Behörigheter har tagits bort av säkerhetsskäl från appar som inte har använts på några månader."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Anteckningsapp"</string> <string name="role_notes_description" msgid="8496852798616883551">"Appar som låter dig göra anteckningar på enheten"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"anteckningar"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standardplånboksapp"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Plånboksapp"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Plånboksappar kan lagra dina kredit- och stamkundskort, bilnycklar och andra saker som hjälper till med olika sorters transaktioner."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Vill du ställa in <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardplånboksapp?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Inga behörigheter krävs"</string> <string name="request_role_current_default" msgid="738722892438247184">"Nuvarande standardapp"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Fråga inte igen"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Ange som standard"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Uppdateringar av datadelning"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"En del appar har ändrat hur de kan dela din platsdata"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Inställningar"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Öppnades <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Öppnades i går <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Öppnades <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-sw-v34/strings.xml b/PermissionController/res/values-sw-v34/strings.xml index be6f2f72b..52a1c7ceb 100644 --- a/PermissionController/res/values-sw-v34/strings.xml +++ b/PermissionController/res/values-sw-v34/strings.xml @@ -22,6 +22,6 @@ <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> <string name="health_connect_summary" msgid="815473513776882296">"Dhibiti uwezo wa programu wa kufikia data ya afya"</string> <string name="location_settings" msgid="8863940440881290182">"Uwezo wa kufikia mahali"</string> - <string name="mic_toggle_description" msgid="1504101620086616040">"Kwenye programu na huduma. Mipangilio hii ikizimwa, data ya maikrofoni bado inaweza ikashirikiwa unapopiga nambari ya dharura"</string> + <string name="mic_toggle_description" msgid="1504101620086616040">"Kwenye programu na huduma. Mipangilio hii ikizimwa, data ya maikrofoni bado inaweza ikashirikiwa unapopiga namba ya dharura"</string> <string name="location_settings_subtitle" msgid="6846532794702613851">"Kwenye programu na huduma"</string> </resources> diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml index 689ed6f9e..7e0f5769d 100644 --- a/PermissionController/res/values-sw/strings.xml +++ b/PermissionController/res/values-sw/strings.xml @@ -67,7 +67,7 @@ <string name="review_permission_decisions" msgid="309559429150613632">"Uamuzi wa ruhusa wa hivi majuzi"</string> <string name="review_permission_decisions_view_all" msgid="90391040431566130">"Angalia uamuzi wa ruhusa zote za hivi majuzi"</string> <string name="review_permission_decisions_empty" msgid="8120775336417279806">"Hakuna uamuzi wa ruhusa wa hivi majuzi"</string> - <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Dhibiti ufikiaji wa data kwenye kalenda, rekodi za nambari za simu na zaidi"</string> + <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Dhibiti ufikiaji wa data kwenye kalenda, rekodi za namba za simu na zaidi"</string> <string name="granted_permission_decision" msgid="7824827491551861365">"Umeipa <xliff:g id="APP_NAME">%1$s</xliff:g> ruhusa ya kufikia <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> <string name="denied_permission_decision" msgid="5308961501779563781">"Umeinyima <xliff:g id="APP_NAME">%1$s</xliff:g> ruhusa ya kufikia <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Leo}=1{Siku moja iliyopita}other{Siku # zilizopita}}"</string> @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Ruhusa zote"</string> <string name="other_permissions" msgid="2901186127193849594">"Uwezo mwingine wa programu"</string> <string name="permission_request_title" msgid="8790310151025020126">"Ombi la idhini"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Huduma ya Android Wear haiwezi kutekeleza vitendo vya Kusakinisha au Kuondoa vipengee."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Chagua vipengee ambavyo unaruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> imesasishwa. Chagua vipengee unavyoruhusu programu hii ifikie."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Ghairi"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ondoa ruhusa ikiwa programu haitumiki"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ondoa ruhusa na upate nafasi"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Simamisha shughuli kwenye programu ikiwa haitumiki"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Dhibiti programu iwapo haitumiki"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Ondoa ruhusa, futa faili za muda na usitishe arifa"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Ondoa ruhusa, futa faili za muda, komesha arifa na uweke programu kwenye kumbukumbu"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Ili kulinda data yako, ruhusa za programu hii zitaondolewa programu isipotumika kwa miezi michache."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ili kulinda data yako, programu isipotumika kwa miezi michache, ruhusa zifuatazo zitaondolewa: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Ili kulinda data yako, ruhusa zimeondolewa kwenye programu ambazo hujatumia kwa miezi michache."</string> @@ -365,7 +365,7 @@ <string name="role_dialer_search_keywords" msgid="3324448983559188087">"kipiga simu"</string> <string name="role_sms_label" msgid="8456999857547686640">"Programu chaguomsingi ya SMS"</string> <string name="role_sms_short_label" msgid="4371444488034692243">"Programu ya SMS"</string> - <string name="role_sms_description" msgid="3424020199148153513">"Programu zinazokuruhusu kutumia nambari yako ya simu kutuma na kupokea ujumbe mfupi, picha, video na zaidi"</string> + <string name="role_sms_description" msgid="3424020199148153513">"Programu zinazokuruhusu kutumia namba yako ya simu kutuma na kupokea ujumbe mfupi, picha, video na zaidi"</string> <string name="role_sms_request_title" msgid="7953552109601185602">"Ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu yako chaguomsingi ya SMS?"</string> <string name="role_sms_request_description" msgid="2691004766132144886">"Programu hii itapewa uwezo wa kufikia Kamera, Anwani, Faili na maudhui, Maikrofoni, Simu na SMS kwenye kifaa chako"</string> <string name="role_sms_search_keywords" msgid="8022048144395047352">"SMS, kutuma SMS, ujumbe, kutuma ujumbe"</string> @@ -383,12 +383,12 @@ <string name="role_home_search_keywords" msgid="3830755001192666285">"kifungua programu"</string> <string name="role_call_redirection_label" msgid="5785304207206147590">"Programu chaguomsingi ya kuelekeza simu kwingine"</string> <string name="role_call_redirection_short_label" msgid="7568143419571217757">"Programu ya kuelekeza simu"</string> - <string name="role_call_redirection_description" msgid="6091669882014664420">"Programu zinazokuruhusu usambaze simu unazopiga kwenye nambari nyingine ya simu"</string> + <string name="role_call_redirection_description" msgid="6091669882014664420">"Programu zinazokuruhusu usambaze simu unazopiga kwenye namba nyingine ya simu"</string> <string name="role_call_redirection_request_title" msgid="2816244455003562925">"Je, ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu yako chaguomsingi ya kuelekeza simu kwingine?"</string> <string name="role_call_redirection_request_description" msgid="3118895714178527164">"Hakuna ruhusa zinazohitajika"</string> <string name="role_call_screening_label" msgid="883935222060878724">"Kutambua taka na anayepiga: programu msingi"</string> <string name="role_call_screening_short_label" msgid="2048465565063130834">"Kutambua anayepiga na taka"</string> - <string name="role_call_screening_description" msgid="2349431420497468981">"Programu zinazokuruhusu utambue simu zinazoingia na kuzuia taka, simu zinazopigwa kiotomatiki au nambari zisizohitajika"</string> + <string name="role_call_screening_description" msgid="2349431420497468981">"Programu zinazokuruhusu utambue simu zinazoingia na kuzuia taka, simu zinazopigwa kiotomatiki au namba zisizohitajika"</string> <string name="role_call_screening_request_title" msgid="7358309224566977290">"Je, ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu chaguomsingi ya kukagua kitambulisho cha anayepiga na taka?"</string> <string name="role_call_screening_request_description" msgid="7338511921032446006">"Hakuna ruhusa zinazohitajika"</string> <string name="role_automotive_navigation_label" msgid="2701890757955474751">"Programu chaguomsingi ya maelekezo"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Programu ya madokezo"</string> <string name="role_notes_description" msgid="8496852798616883551">"Programu zinazokuruhusu uandike madokezo kwenye kifaa chako"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"madokezo"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Programu chaguomsingi ya pochi"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Programu ya pochi"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Unaweza kuhifadhi kadi zako za mikopo na za kutuza uaminifu, funguo za magari na mengine kwenye programu za Pochi ili kukusaidia kufanya miamala mbalimbali."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu yako chaguomsingi ya pochi?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Hakuna ruhusa zinazohitajika"</string> <string name="request_role_current_default" msgid="738722892438247184">"Chaguomsingi ya sasa"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Isiniulize tena"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Weka iwe chaguomsingi"</string> @@ -512,8 +517,8 @@ <string name="permgroupupgraderequest_camera" msgid="640758449200241582">"Ungependa kubadilisha ruhusa za <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> za kufikia kamera?"</string> <string name="permgroupupgraderequest_device_aware_camera" msgid="4198765626608612156">"Ungependa kubadilisha idhini ya kufikia ya kamera ya <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> kwenye <b><xliff:g id="DEVICE">%2$s</xliff:g></b> yako?"</string> <string name="permgroupupgraderequestdetail_camera" msgid="6642747548010962597">"Programu hii inataka kupiga picha na kurekodi video kila wakati, hata wakati huitumii."<annotation id="link">"Ruhusu katika mipangilio."</annotation></string> - <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi zako za nambari za simu?"</string> - <string name="permgrouprequest_device_aware_calllog" msgid="735079772627778095">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi za nambari za simu yako kwenye <b><xliff:g id="DEVICE">%2$s</xliff:g></b> yako?"</string> + <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi zako za namba za simu?"</string> + <string name="permgrouprequest_device_aware_calllog" msgid="735079772627778095">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi za namba za simu yako kwenye <b><xliff:g id="DEVICE">%2$s</xliff:g></b> yako?"</string> <string name="permgrouprequest_phone" msgid="1829234136997316752">"Ungependa kuruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> kupiga na kudhibiti simu?"</string> <string name="permgrouprequest_device_aware_phone" msgid="4389610977195521813">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ipige na kudhibiti simu kwenye <b><xliff:g id="DEVICE">%2$s</xliff:g></b> yako?"</string> <string name="permgrouprequest_sensors" msgid="4397358316850652235">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie data ya vitambuzi kuhusu viashiria muhimu vya mwili wako?"</string> @@ -547,7 +552,7 @@ <string name="blocked_microphone_title" msgid="1631517143648232585">"Maikrofoni ya kifaa imezuiwa"</string> <string name="blocked_location_title" msgid="2005608279812892383">"Utambuzi wa mahali kifaa kilipo umezimwa"</string> <string name="blocked_sensor_summary" msgid="4443707628305027375">"Kwa ajili ya programu na huduma"</string> - <string name="blocked_mic_summary" msgid="8960466941528458347">"Huenda bado data ya maikrofoni ikashirikiwa unapopigia nambari ya dharura."</string> + <string name="blocked_mic_summary" msgid="8960466941528458347">"Huenda bado data ya maikrofoni ikashirikiwa unapopigia namba ya dharura."</string> <string name="blocked_sensor_button_label" msgid="6742092634984289658">"Badilisha"</string> <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"Usalama na faragha"</string> <string name="safety_center_rescan_button" msgid="4517514567809409596">"Kagua kifaa"</string> @@ -609,7 +614,7 @@ <string name="camera_toggle_title" msgid="1251201397431837666">"Ufikiaji wa kamera"</string> <string name="mic_toggle_title" msgid="2649991093496110162">"Ufikiaji wa maikrofoni"</string> <string name="perm_toggle_description" msgid="7801326363741451379">"Kwenye programu na huduma"</string> - <string name="mic_toggle_description" msgid="9163104307990677157">"Kwenye programu na huduma. Mipangilio hii ikizimwa, huenda data ya maikrofoni ikaendelea kushirikiwa unapopiga nambari ya dharura."</string> + <string name="mic_toggle_description" msgid="9163104307990677157">"Kwenye programu na huduma. Mipangilio hii ikizimwa, huenda data ya maikrofoni ikaendelea kushirikiwa unapopiga namba ya dharura."</string> <string name="location_settings_subtitle" msgid="2328360561197430695">"Angalia huduma na programu zenye uwezo wa kufikia mipangilio ya mahali"</string> <string name="show_clip_access_notification_title" msgid="5168467637351109096">"Onyesha ufikiaji wa ubao wa kunakili"</string> <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Onyesha ujumbe programu zinapofikia maandishi, picha au maudhui mengine uliyonakili"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Masasisho ya kushiriki data"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Baadhi ya programu zimebadilisha jinsi zinavyoweza kushiriki data ya mahali ulipo"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Mipangilio"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Kilifunguliwa <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Kilifunguliwa jana <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Kilifunguliwa <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ta/strings.xml b/PermissionController/res/values-ta/strings.xml index 70d71f31b..e0d96bb07 100644 --- a/PermissionController/res/values-ta/strings.xml +++ b/PermissionController/res/values-ta/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"அனைத்து அனுமதிகளும்"</string> <string name="other_permissions" msgid="2901186127193849594">"ஆப்ஸிற்கான பிற அனுமதிகள்"</string> <string name="permission_request_title" msgid="8790310151025020126">"அனுமதி கோரிக்கை"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"நிறுவல்/நிறுவல் நீக்குதலை Wearரில் செய்ய இயலாது."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> எவற்றையெல்லாம் அணுகலாம் என்பதைத் தேர்வுசெய்யவும்"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> புதுப்பிக்கப்பட்டது. இந்த ஆப்ஸ் எவற்றையெல்லாம் அணுகலாம் என்பதைத் தேர்வுசெய்யவும்."</string> <string name="review_button_cancel" msgid="2191147944056548886">"வேண்டாம்"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"ஆப்ஸைப் பயன்படுத்தாதபோது நிர்வகித்தல்"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"அனுமதிகளை அகற்றும், தற்காலிக ஃபைல்களை நீக்கும், அறிவிப்புகளை நிறுத்தும்"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"அனுமதிகளை அகற்றும், தற்காலிக ஃபைல்களை நீக்கும், அறிவிப்புகளை நிறுத்தும், ஆப்ஸைக் காப்பிடும்"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"இந்த ஆப்ஸைச் சில மாதங்கள் பயன்படுத்தவில்லை என்றால் உங்கள் தரவைப் பாதுகாப்பதற்காக இதற்கான அனுமதிகள் அகற்றப்படும்."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"இந்த ஆப்ஸைச் சில மாதங்கள் பயன்படுத்தவில்லை என்றால் உங்கள் தரவைப் பாதுகாப்பதற்காக பின்வரும் அனுமதிகள் அகற்றப்படும்: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"உங்கள் தரவைப் பாதுகாப்பதற்காக, கடந்த சில மாதங்களில் நீங்கள் பயன்படுத்தாத ஆப்ஸில் இருந்து அனுமதிகள் அகற்றப்பட்டன."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"குறிப்பு எடுப்பதற்கான ஆப்ஸ்"</string> <string name="role_notes_description" msgid="8496852798616883551">"உங்கள் சாதனத்தில் குறிப்புகள் எடுக்க அனுமதிக்கும் ஆப்ஸ்"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"குறிப்புகள்"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"இயல்புநிலை வாலட் ஆப்ஸ்"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"வாலட் ஆப்ஸ்"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"பல்வேறு வகையான பரிமாற்றங்கள் தொடர்பாக உங்களுக்கு உதவ கிரெடிட் கார்டுகள், லாயல்டி கார்டுகள், கார் சாவிகள் மற்றும் பிறவற்றை வாலட் ஆப்ஸில் சேமிக்கலாம்."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸை உங்கள் இயல்புநிலை வாலட் ஆப்ஸாக அமைக்கவா?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"அனுமதிகள் தேவையில்லை"</string> <string name="request_role_current_default" msgid="738722892438247184">"தற்போதைய இயல்பான ஆப்ஸ்"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"மீண்டும் கேட்காதே"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"இயல்பு ஆப்ஸாக அமை"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"தரவுப் பகிர்வு குறித்த அறிவிப்புகள்"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"உங்கள் இருப்பிடத் தரவைப் பகிரும் விதத்தைச் சில ஆப்ஸ் மாற்றியுள்ளன"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"அமைப்புகள்"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"அணுகிய நேரம்: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"நேற்று அணுகிய நேரம்: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"அணுகிய நேரம்: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-te/strings.xml b/PermissionController/res/values-te/strings.xml index 22eae448d..6634a0d4c 100644 --- a/PermissionController/res/values-te/strings.xml +++ b/PermissionController/res/values-te/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"అన్ని అనుమతులు"</string> <string name="other_permissions" msgid="2901186127193849594">"ఇతర యాప్ సామర్థ్యాలు"</string> <string name="permission_request_title" msgid="8790310151025020126">"అనుమతి రిక్వెస్ట్"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android వేర్"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wearలో ఇన్స్టాల్/అన్ఇన్స్టాల్ చర్యలకు మద్దతు లేదు."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> యాక్సెస్ చేయడానికి అనుమతించాల్సిన వాటిని ఎంచుకోండి"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> అప్డేట్ చేయబడింది. ఈ యాప్ యాక్సెస్ చేయడానికి అనుమతించాల్సిన వాటిని ఎంచుకోండి."</string> <string name="review_button_cancel" msgid="2191147944056548886">"రద్దు చేయండి"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"యాప్ను ఉపయోగించకపోతే, మేనేజ్ చేయండి"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"అనుమతులను తీసివేయండి, తాత్కాలిక ఫైళ్లను తొలగించండి, అలాగే నోటిఫికేషన్లను ఆపివేయండి"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"అనుమతులను తీసివేయండి, తాత్కాలిక ఫైళ్లను తొలగించండి, నోటిఫికేషన్లను ఆపివేయండి, యాప్ను ఆర్కైవ్ చేయండి"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"మీ డేటాను సురక్షితంగా ఉంచడానికి, ఈ యాప్ కొన్ని నెలలుగా వినియోగంలో లేకుంటే, దాని అనుమతులు తీసివేయబడతాయి."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"మీ డేటాను సురక్షితంగా ఉంచడానికి, ఈ యాప్ కొన్ని నెలలుగా వినియోగంలో లేకుంటే, దానికి ఇచ్చిన కింది అనుమతులు తీసివేయబడతాయి: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"మీ డేటాను సురక్షితంగా ఉంచడానికి, కొన్ని నెలలుగా వినియోగంలో లేని యాప్ల అనుమతులు తీసివేయబడ్డాయి."</string> @@ -268,7 +268,7 @@ <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# ఉపయోగించని యాప్}other{# ఉపయోగించని యాప్లు}}"</string> <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_card_content" msgid="1088557243627427820">"కొంతకాలంగా మీరు ఉపయోగించని యాప్లకు సంబంధించిన అనుమతులు, తాత్కాలిక ఫైళ్లు తొలగించబడ్డాయి, అలాగే నోటిఫికేషన్లు నిలిపివేయబడ్డాయి."</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> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"నోట్స్ యాప్"</string> <string name="role_notes_description" msgid="8496852798616883551">"మీ పరికరంలో నోట్స్ తీసుకోవడానికి మిమ్మల్ని అనుమతించే యాప్లు"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"నోట్స్"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"డిఫాల్ట్ వాలెట్ యాప్"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"వాలెట్ యాప్"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"వాలెట్ యాప్లు మీ క్రెడిట్ను, లాయల్టీ కార్డ్లను, కార్ కీలను, ఇంకా వివిధ రకాల లావాదేవీలకు సహాయపడటానికి ఇతర వస్తువులను స్టోర్ చేయగలవు."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>ను డిఫాల్ట్ వాలెట్ యాప్గా సెట్ చేయాలా?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"అనుమతులు ఏవీ అవసరం లేదు"</string> <string name="request_role_current_default" msgid="738722892438247184">"ప్రస్తుతం ఆటోమేటిక్గా ఉంది"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"మళ్లీ అడగవద్దు"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ఆటోమేటిక్ చేయండి"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"డేటా షేరింగ్ అప్డేట్లు"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"కొన్ని యాప్లు మీ లొకేషన్ డేటాను షేర్ చేయగల విధానాన్ని మార్చాయి"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"సెట్టింగ్లు"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>కు యాక్సెస్ చేశారు"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"నిన్న <xliff:g id="TIME_DATE">%1$s</xliff:g>కు యాక్సెస్ చేశారు"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g>న<xliff:g id="TIME_DATE_1">%2$s</xliff:g>కు యాక్సెస్ చేశారు"</string> </resources> diff --git a/PermissionController/res/values-th/strings.xml b/PermissionController/res/values-th/strings.xml index f960cfbaf..e0a825162 100644 --- a/PermissionController/res/values-th/strings.xml +++ b/PermissionController/res/values-th/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"สิทธิ์ทั้งหมด"</string> <string name="other_permissions" msgid="2901186127193849594">"ความสามารถอื่นๆ ของแอป"</string> <string name="permission_request_title" msgid="8790310151025020126">"คำขอสิทธิ์"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ไม่สามารถติดตั้ง/ถอนการติดตั้งบน Wear"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"โปรดเลือกข้อมูลที่อนุญาตให้ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> เข้าถึง"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"อัปเดต <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> แล้ว โปรดเลือกข้อมูลที่อนุญาตให้แอปนี้เข้าถึง"</string> <string name="review_button_cancel" msgid="2191147944056548886">"ยกเลิก"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"จัดการแอปหากไม่ได้ใช้งาน"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"นำสิทธิ์ออก ลบไฟล์ชั่วคราว และหยุดการแจ้งเตือน"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"นำสิทธิ์ออก ลบไฟล์ชั่วคราว หยุดการแจ้งเตือน และเก็บแอป"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"หากคุณไม่ได้ใช้งานแอปนาน 2-3 เดือน ระบบจะนำสิทธิ์ของแอปนี้ออกเพื่อปกป้องข้อมูลของคุณ"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"หากไม่มีการใช้งานแอปนาน 2-3 เดือน ระบบจะปกป้องข้อมูลของคุณด้วยการนำสิทธิ์ต่อไปนี้ออก ได้แก่ <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"ระบบนำสิทธิ์ออกจากแอปที่คุณไม่ได้ใช้งานนาน 2-3 เดือนเพื่อปกป้องข้อมูลของคุณ"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"แอปโน้ต"</string> <string name="role_notes_description" msgid="8496852798616883551">"แอปที่ให้คุณจดโน้ตในอุปกรณ์ได้"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"บันทึก"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"แอปกระเป๋าเงินเริ่มต้น"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"แอปกระเป๋าเงิน"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"แอปกระเป๋าเงินสามารถจัดเก็บบัตรเครดิต บัตรสะสมคะแนน กุญแจรถยนต์ รวมถึงสิ่งอื่นๆ เพื่อช่วยในการทำธุรกรรมรูปแบบต่างๆ"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"ตั้งค่า <xliff:g id="APP_NAME">%1$s</xliff:g> เป็นแอปกระเป๋าเงินเริ่มต้นไหม"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"ไม่ต้องใช้สิทธิ์"</string> <string name="request_role_current_default" msgid="738722892438247184">"แอปเริ่มต้นปัจจุบัน"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"ไม่ต้องถามอีก"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"ตั้งเป็นแอปเริ่มต้น"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"การอัปเดตการแชร์ข้อมูล"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"มีบางแอปเปลี่ยนแปลงวิธีที่แอปอาจแชร์ข้อมูลตำแหน่งของคุณ"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"การตั้งค่า"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"เข้าถึงตอน <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"เข้าถึงเมื่อวานตอน <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"เข้าถึงเมื่อวันที่ <xliff:g id="TIME_DATE_0">%1$s</xliff:g> ตอน <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-tl/strings.xml b/PermissionController/res/values-tl/strings.xml index c17871ae5..dbd3ad9cf 100644 --- a/PermissionController/res/values-tl/strings.xml +++ b/PermissionController/res/values-tl/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Lahat ng pahintulot"</string> <string name="other_permissions" msgid="2901186127193849594">"Iba pang kakayahan ng app"</string> <string name="permission_request_title" msgid="8790310151025020126">"Kahilingan sa pagpapahintulot"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Ang mga pagkilos na I-install/I-uninstall ay hindi sinusuportahan sa Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Piliin kung ano ang papayagang i-access ng <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Na-update na ang <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Piliin kung ano ang papayagang i-access ng app na ito."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Kanselahin"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Alisin ang mga pahintulot kung hindi ginagamit ang app"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Alisin ang pahintulot, magbakante ng espasyo"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"I-pause ang aktibidad sa app kung hindi ginagamit"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Pamahalaan ang app kung hindi ginagamit"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Alisin ang mga pahintulot, i-delete ang mga pansamantalang file, at ihinto ang mga notification"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Alisin ang mga pahintulot, i-delete ang mga pansamantalang file, ihinto ang mga notification, at i-archive ang app"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Para maprotektahan ang iyong data, aalisin ang mga pahintulot para sa app na ito kapag ilang buwan nang hindi ginagamit ang app."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Para maprotektahan ang iyong data, kapag ilang buwan nang hindi ginagamit ang app, aalisin ang mga sumusunod na pahintulot: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Para protektahan ang iyong data, inalis na ang mga pahintulot sa mga app na ilang buwan mo nang hindi ginagamit."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notes app"</string> <string name="role_notes_description" msgid="8496852798616883551">"Mga app na nagbibigay-daan sa iyong magtala sa device mo"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"mga tala"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Default na wallet app"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Wallet app"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Puwedeng i-store ng mga wallet app ang iyong mga credit at loyalty card, susi ng kotse, at iba pang bagay para makatulong sa iba\'t ibang uri ng transaksyon."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Itakda ang <xliff:g id="APP_NAME">%1$s</xliff:g> bilang default mong wallet app?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Walang kailangang pahintulot"</string> <string name="request_role_current_default" msgid="738722892438247184">"Kasalukuyang default"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Huwag nang itanong muli"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Itakdang default"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Update sa pagbabahagi ng data"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Binago ng ilang app kung paano posibleng ibahagi ng mga ito ang iyong data ng lokasyon"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Mga Setting"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Na-access noong <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Na-access kahapon nang <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Na-access noong <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-tr/strings.xml b/PermissionController/res/values-tr/strings.xml index 878e9155c..2cb6b61c5 100644 --- a/PermissionController/res/values-tr/strings.xml +++ b/PermissionController/res/values-tr/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Tüm izinler"</string> <string name="other_permissions" msgid="2901186127193849594">"Diğer uygulama özellikleri"</string> <string name="permission_request_title" msgid="8790310151025020126">"İzin isteği"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Yükleme/Yüklemeyi Kaldırma işlemleri Wear\'da desteklenmiyor."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uygulamasının nelere erişmesine izin vereceğinizi seçin"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> güncellendi. Bu uygulamanın nelere erişmesine izin verileceğini seçin."</string> <string name="review_button_cancel" msgid="2191147944056548886">"İptal"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Uygulama kullanılmıyorsa izinleri kaldır"</string> <string name="unused_apps_label" msgid="2595428768404901064">"İzinleri kaldırıp yer aç"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Kullanılmayan uygulama etkinliğini duraklat"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Kullanılmayan uygulamayı yönet"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"İzinleri kaldır, geçici dosyaları sil ve bildirimleri durdur"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"İzinleri kaldır, geçici dosyaları sil, bildirimleri durdur ve uygulamayı arşivle"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Bu uygulama birkaç ay boyunca kullanılmazsa verilerinizi korumak için uygulamanın izinleri kaldırılır."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Uygulama birkaç ay boyunca kullanılmazsa şu izinler verilerinizi korumak için kaldırılacak: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Birkaç aydır kullanmadığınız uygulamaların izinleri verilerinizi korumak için kaldırıldı."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Notlar uygulaması"</string> <string name="role_notes_description" msgid="8496852798616883551">"Cihazınızda not almanıza olanak tanıyan uygulamalar"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"notlar"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Varsayılan cüzdan uygulaması"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Cüzdan uygulaması"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Cüzdan uygulamaları; kredi ve bağlılık kartlarınızı, araba anahtarlarınızı ve diğer bilgileri depolayarak çeşitli işlem türlerinde size kolaylık sağlayabilir."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g>, varsayılan cüzdan uygulamanız olarak ayarlansın mı?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Herhangi bir izin gerekli değil"</string> <string name="request_role_current_default" msgid="738722892438247184">"Mevcut varsayılan"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Tekrar sorma"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Varsayılan olarak ayarla"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Veri paylaşımı güncellemeleri"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Bazı uygulamalar, konum verilerinizi paylaşma şeklini değiştirdi"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ayarlar"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Erişim zamanı: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Dün saat <xliff:g id="TIME_DATE">%1$s</xliff:g> itibarıyla erişildi"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Erişim tarihi: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml index 9a39e12ee..262af082b 100644 --- a/PermissionController/res/values-uk/strings.xml +++ b/PermissionController/res/values-uk/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Усі дозволи"</string> <string name="other_permissions" msgid="2901186127193849594">"Інші дозволи додатка"</string> <string name="permission_request_title" msgid="8790310151025020126">"Запит на дозвіл"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Встановлення й видалення не підтримуються на пристроях Android Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Виберіть, до чого додаток <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> матиме доступ"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Додаток <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> оновлено. Виберіть, до чого він матиме доступ."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Скасувати"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"Керувати невикористовуваним додатком"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Вилучити дозволи, видалити тимчасові файли та зупинити сповіщення"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Вилучити дозволи, видалити тимчасові файли, зупинити сповіщення й архівувати додаток"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Щоб захистити ваші дані, дозволи для цього додатка буде автоматично скасовано, якщо ви не будете користуватися ним кілька місяців."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Якщо додаток не використовується впродовж кількох місяців, для захисту ваших даних буде скасовано такі дозволи: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Щоб захистити ваші дані, було скасовано дозволи додатків, які не використовувалися впродовж кількох місяців."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Додаток для нотаток"</string> <string name="role_notes_description" msgid="8496852798616883551">"Додатки, у яких можна робити нотатки на вашому пристрої"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"нотатки"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Гаманець за умовчанням"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Гаманець"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"У гаманцях можуть зберігатися ваші картки постійного покупця й кредитні картки, автомобільні ключі та інші об’єкти, які полегшують здійснення різних трансакцій."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Зробити додаток <xliff:g id="APP_NAME">%1$s</xliff:g> гаманцем за умовчанням?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Дозволи не потрібні"</string> <string name="request_role_current_default" msgid="738722892438247184">"Поточний за умовчанням"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Не запитувати знову"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Вибрати за умовчанням"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Оновлення способу передавання даних"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Деякі додатки змінили спосіб передавання ваших геоданих"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Налаштування"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Доступ отримано: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Доступ отримано вчора: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Доступ отримано: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-ur/strings.xml b/PermissionController/res/values-ur/strings.xml index f1d9a96dc..4b78aa409 100644 --- a/PermissionController/res/values-ur/strings.xml +++ b/PermissionController/res/values-ur/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"تمام اجازتیں"</string> <string name="other_permissions" msgid="2901186127193849594">"ایپ کی دوسری اہلیتیں"</string> <string name="permission_request_title" msgid="8790310151025020126">"اجازت کی درخواست"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"\'کارروائیاں انسٹال/اَن انسٹال کریں\' Wear پر تعاون یافتہ نہیں ہے۔"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"منتخب کریں کہ <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو کس چیز تک رسائی کی اجازت دینی ہے"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> اپ ڈیٹ ہو گئی ہے۔ منتخب کریں کہ اس ایپ کو کس تک رسائی کی اجازت دینی ہے۔"</string> <string name="review_button_cancel" msgid="2191147944056548886">"منسوخ کریں"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"اگر غیر استعمال شدہ ہے تو ایپ کا نظم کریں"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"اجازتیں ہٹائیں، عارضی فائلز حذف کریں اور اطلاعات موقوف کریں"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"اجازتیں ہٹائیں، عارضی فائلوں کو حذف کریں، اطلاعات کو روکیں اور ایپ کو آرکائیو کریں"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"آپ کے ڈیٹا کی حفاظت کے لیے، اگر ایپ کو کچھ مہینوں تک استعمال نہیں کیا گیا تو اس ایپ کے لیے اجازتیں ہٹا دی جائیں گی۔"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"آپ کے ڈیٹا کی حفاظت کے لیے، اگر ایپ کو کچھ مہینوں تک استعمال نہیں کیا گيا تو درج ذیل اجازتیں ہٹا دی جائیں گی: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"آپ کے ڈیٹا کی حفاظت کے لیے، اجازتوں کو ان ایپس سے ہٹا دیا گیا ہے جنہیں آپ نے کچھ مہینوں سے استعمال نہیں کیا ہے۔"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"نوٹس ایپ"</string> <string name="role_notes_description" msgid="8496852798616883551">"ایسی ایپس جو آپ کو آپ کے آلے پر نوٹس لینے کی اجازت دیتی ہیں"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"نوٹس"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"ڈیفالٹ والٹ ایپ"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"والٹ ایپ"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"والٹ ایپس آپ کے کریڈٹ اور لائلٹی کارڈز، کار کی کلیدوں اور دیگر چیزوں کو ٹرانزیکشنز کی مختلف شکلوں میں مدد کے لیے اسٹور کر سکتی ہیں۔"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو آپ کی ڈیفالٹ والٹ ایپ کے طور پر سیٹ کریں؟"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"کوئی اجازت درکار نہیں ہے"</string> <string name="request_role_current_default" msgid="738722892438247184">"موجودہ ڈیفالٹ"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"دوبارہ نہ پوچھیں"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"بطور ڈیفالٹ سیٹ کریں"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"ڈیٹا کے اشتراک کی اپ ڈیٹس"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"کچھ ایپس نے آپ کے مقام کے ڈیٹا کے اشتراک کے اپنے ممکنہ طریقے کو تبدیل کر دیا"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"ترتیبات"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g> پر رسائی حاصل کی گئی"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"گزشتہ کل <xliff:g id="TIME_DATE">%1$s</xliff:g> پر رسائی حاصل کی گئی"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g> پر رسائی حاصل کی گئی"</string> </resources> diff --git a/PermissionController/res/values-uz/strings.xml b/PermissionController/res/values-uz/strings.xml index 706ec1a6c..3ef292d47 100644 --- a/PermissionController/res/values-uz/strings.xml +++ b/PermissionController/res/values-uz/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Barcha ruxsatlar"</string> <string name="other_permissions" msgid="2901186127193849594">"Ilovaning boshqa imkoniyatlari"</string> <string name="permission_request_title" msgid="8790310151025020126">"Ruxsat olish talabi"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear qurilmasi o‘rnatish/o‘chirish amallarini qo‘llab-quvvatlamaydi."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> uchun beriladigan ruxsatlarni tanlang"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> yangilandi. Unga beriladigan ruxsatlarni tanlang."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Bekor qilish"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Ishlatilmayotgan ilovalardan ruxsatlarni olib tashlash"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Ruxsatlarni olib tashlash va joy ochish"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Ishlatilmayotgan ilovalarni pauzalash"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Ishlatilmagan ilovalarni boshqarish"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Ruxsatlarni olib tashlash, vaqtinchalik fayllarni oʻchirish va bildirishnomalarni toʻxtatish"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Ruxsatlarni olib tashlash, vaqtinchalik fayllarni oʻchirish, bildirishnomalarni toʻxtatish va ilovani arxivlash"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Xavfsizlik yuzasidan, bir necha oydan beri ishlatilmagan ilovalardan ruxsatlar olib tashlanadi"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Agar bu ilova bir necha oy ishlatilmasa, quyidagi ruxsatlar olib tashlanadi: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Xavfsizlik yuzasidan, bir necha oydan beri ishlatilmagan ilovalardan ruxsatlar olib tashlanadi"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Qaydlar ilovasi"</string> <string name="role_notes_description" msgid="8496852798616883551">"Qurilmangizda qaydlar olish imkonini beruvchi ilovalar"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"qaydlar"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Standart hamyon ilovasi"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Hamyon ilovasi"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Hamyon ilovasi kredit, sodiqlik va avtomobil kalitlari hamda boshqa raqamli mahsulotlarni saqlashi mumkin. Bu har xil turdagi operatsiyalarni amalga oshirishni yanada qulaylashtiradi."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"<xliff:g id="APP_NAME">%1$s</xliff:g> standart hamyon ilovasi sifatida sozlansinmi?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Hech qanday ruxsat zarur emas"</string> <string name="request_role_current_default" msgid="738722892438247184">"Hozirda asosiy ilova"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Boshqa soʻralmasin"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Birlamchi deb belgilash"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Axborot ulashuvi yangilanishi"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Ayrim ilovalarda joylashuv axboroti ulashuvi oʻzgardi"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Sozlamalar"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Kirilgan: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Kecha kirilgan: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Kirilgan: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-v33/styles.xml b/PermissionController/res/values-v33/styles.xml index e4d8f5c54..c018ca094 100644 --- a/PermissionController/res/values-v33/styles.xml +++ b/PermissionController/res/values-v33/styles.xml @@ -596,11 +596,10 @@ <style name="SafetyCenterMoreIssuesCounter" parent="android:Widget.DeviceDefault"> - <item name="android:layout_height">24dp</item> + <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">wrap_content</item> <item name="android:orientation">horizontal</item> - <item name="android:paddingStart">@dimen/sc_spacing_xsmall</item> - <item name="android:paddingEnd">@dimen/sc_spacing_xsmall</item> + <item name="android:paddingHorizontal">@dimen/sc_spacing_xsmall</item> <item name="android:background">@drawable/safety_center_card_widget_background</item> <item name="android:gravity">center_vertical</item> <item name="layout_constraintTop_toTopOf">parent</item> @@ -612,6 +611,7 @@ parent="SafetyCenterBaseTextContainer"> <item name="android:textAppearance">@style/TextAppearance.SafetyCenter.Body</item> <item name="android:lineHeight">@dimen/sc_line_height_medium</item> + <item name="android:paddingVertical">@dimen/sc_spacing_xxxsmall</item> <item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">wrap_content</item> diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index 72275f442..94c89af42 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Tất cả các quyền"</string> <string name="other_permissions" msgid="2901186127193849594">"Các khả năng khác của ứng dụng"</string> <string name="permission_request_title" msgid="8790310151025020126">"Yêu cầu quyền"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Các hành động Cài đặt/Gỡ cài đặt không được hỗ trợ trên Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Chọn nội dung <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> được phép truy cập vào"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"Đã cập nhật <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>. Chọn nội dung ứng dụng này được phép truy cập vào."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Hủy"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Thu hồi quyền nếu bạn không dùng ứng dụng"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Thu hồi quyền và giải phóng dung lượng"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Tạm dừng hoạt động trong ứng dụng nếu không dùng"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Quản lý ứng dụng nếu không dùng"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Loại bỏ quyền, xoá tệp tạm thời và dừng thông báo"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Loại bỏ quyền, xoá tệp tạm thời, dừng thông báo và lưu trữ ứng dụng"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Để bảo vệ dữ liệu của bạn, các quyền cấp cho ứng dụng này sẽ bị thu hồi nếu bạn không dùng ứng dụng trong vài tháng."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Để bảo vệ dữ liệu của bạn, nếu bạn không dùng ứng dụng này trong vài tháng thì các quyền sau đây sẽ bị thu hồi: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Để bảo vệ dữ liệu của bạn, quản trị viên CNTT đã thu hồi các quyền đối với những ứng dụng bạn không dùng trong vài tháng."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"Ứng dụng ghi chú"</string> <string name="role_notes_description" msgid="8496852798616883551">"Các ứng dụng cho phép bạn tạo ghi chú trên thiết bị"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"ghi chú"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"Ứng dụng ví mặc định"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"Ứng dụng ví"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Ứng dụng ví có thể lưu trữ thông tin thẻ tín dụng và thẻ khách hàng thân thiết của bạn, chìa khoá ô tô của bạn, cùng nhiều thông tin khác giúp bạn thực hiện nhiều hình thức giao dịch đa dạng."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Đặt <xliff:g id="APP_NAME">%1$s</xliff:g> làm ứng dụng ví mặc định?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Không cần quyền"</string> <string name="request_role_current_default" msgid="738722892438247184">"Ứng dụng mặc định hiện tại"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Không hỏi lại"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Đặt làm mặc định"</string> @@ -564,7 +569,7 @@ <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"Kiểm tra trạng thái"</string> <string name="privacy_controls_qs" msgid="5780144882040591169">"Các chế độ kiểm soát quyền riêng tư"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"Tùy chọn cài đặt khác"</string> - <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Quyền truy cập máy ảnh"</string> + <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Quyền truy cập camera"</string> <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Quyền truy cập micrô"</string> <string name="permissions_removed_qs" msgid="8957319130625294572">"Đã thu hồi quyền sử dụng"</string> <string name="camera_usage_qs" msgid="4394233566086665994">"Xem mức sử dụng của máy ảnh gần đây"</string> @@ -606,7 +611,7 @@ <string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"Đã thay đổi quyền truy cập"</string> <string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"Xem thông tin về hoạt động sử dụng thông tin vị trí gần đây"</string> <string name="privacy_controls_title" msgid="7605929972256835199">"Chế độ kiểm soát quyền riêng tư"</string> - <string name="camera_toggle_title" msgid="1251201397431837666">"Quyền truy cập máy ảnh"</string> + <string name="camera_toggle_title" msgid="1251201397431837666">"Quyền truy cập camera"</string> <string name="mic_toggle_title" msgid="2649991093496110162">"Quyền truy cập micrô"</string> <string name="perm_toggle_description" msgid="7801326363741451379">"Áp dụng cho các ứng dụng và dịch vụ"</string> <string name="mic_toggle_description" msgid="9163104307990677157">"Áp dụng cho các ứng dụng và dịch vụ. Nếu bạn tắt chế độ cài đặt, dữ liệu thu được qua micrô vẫn có thể được chia sẻ khi bạn gọi đến số khẩn cấp."</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Nội dung cập nhật về cách thức chia sẻ dữ liệu"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Một số ứng dụng đã thay đổi cách thức có thể được dùng để chia sẻ dữ liệu vị trí của bạn"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Cài đặt"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Truy cập lúc <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Truy cập hôm qua lúc <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Truy cập lúc <xliff:g id="TIME_DATE_1">%2$s</xliff:g> ngày <xliff:g id="TIME_DATE_0">%1$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-zh-rCN-v34/strings.xml b/PermissionController/res/values-zh-rCN-v34/strings.xml index 0ba05798b..7bebdf9bc 100644 --- a/PermissionController/res/values-zh-rCN-v34/strings.xml +++ b/PermissionController/res/values-zh-rCN-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-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml index 985bd4fc7..856901a21 100644 --- a/PermissionController/res/values-zh-rCN/strings.xml +++ b/PermissionController/res/values-zh-rCN/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"所有权限"</string> <string name="other_permissions" msgid="2901186127193849594">"其他应用功能"</string> <string name="permission_request_title" msgid="8790310151025020126">"权限请求"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear 不支持安装/卸载操作。"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"请选择要向<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>授予哪些权限"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>已更新。请选择要向此应用授予哪些权限。"</string> <string name="review_button_cancel" msgid="2191147944056548886">"取消"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"管理闲置应用"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"移除权限、删除临时文件并停止发送通知"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"撤消权限、删除临时文件、停止发送通知并归档应用"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"为了保护您的数据,如果您连续几个月未使用此应用,系统会移除它的权限。"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"为了保护您的数据,如果您连续几个月未使用此应用,系统会移除其以下权限:<xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"为了保护您的数据,对于您连续几个月未使用过的应用,系统已将其权限移除。"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"记事应用"</string> <string name="role_notes_description" msgid="8496852798616883551">"允许您在设备上记事的应用"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"记事"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"默认钱包应用"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"钱包应用"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"钱包应用可以存储信用卡和会员卡、车钥匙和其他内容,帮助您完成各种形式的交易。"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"要将“<xliff:g id="APP_NAME">%1$s</xliff:g>”设为默认钱包应用?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"无需任何权限"</string> <string name="request_role_current_default" msgid="738722892438247184">"当前默认应用"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"不再询问"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"设为默认应用"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"数据分享方式变更"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"部分应用更改了位置数据分享方式"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"设置"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"<xliff:g id="TIME_DATE">%1$s</xliff:g>访问过"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"昨天<xliff:g id="TIME_DATE">%1$s</xliff:g>访问过"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"<xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>访问过"</string> </resources> diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml index 4bb7a8338..bfb271f6d 100644 --- a/PermissionController/res/values-zh-rHK/strings.xml +++ b/PermissionController/res/values-zh-rHK/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"所有權限"</string> <string name="other_permissions" msgid="2901186127193849594">"其他應用程式功能"</string> <string name="permission_request_title" msgid="8790310151025020126">"權限要求"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear 不支援安裝/解除安裝操作。"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"選擇允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>存取的內容"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"已更新「<xliff:g id="APP_NAME">%1$s</xliff:g>」<b></b>。選擇允許此應用程式存取的內容。"</string> <string name="review_button_cancel" msgid="2191147944056548886">"取消"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"管理應用程式 (如未使用)"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"移除權限、刪除暫存檔案和停止通知"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"移除權限、刪除暫存檔案、停止通知和封存應用程式"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"為保護你的資料,系統已移除你在過去幾個月未曾使用的應用程式的權限。"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"為保護你的資料,如果應用程式在過去幾個月未曾使用,系統將會移除以下權限:<xliff:g id="PERMS">%1$s</xliff:g>。"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"為保護你的資料,系統已移除你在過去幾個月未曾使用的應用程式的權限。"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"筆記應用程式"</string> <string name="role_notes_description" msgid="8496852798616883551">"讓你可以在裝置上寫筆記的應用程式"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"筆記"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"預設錢包應用程式"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"錢包應用程式"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"錢包應用程式可存放信用卡、會員卡、車匙和其他資料,助你完成各種形式的交易。"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"要將「<xliff:g id="APP_NAME">%1$s</xliff:g>」設定為預設錢包應用程式嗎?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"無需任何權限"</string> <string name="request_role_current_default" msgid="738722892438247184">"目前預設"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"不要再詢問"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"設定為預設"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"資料分享更新"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"部分應用程式已變更位置資料分享方式"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"設定"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"上次存取時間:<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"上次存取時間:昨天<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"上次存取時間:<xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-zh-rTW-v34/strings.xml b/PermissionController/res/values-zh-rTW-v34/strings.xml index e473ca41b..533a95e78 100644 --- a/PermissionController/res/values-zh-rTW-v34/strings.xml +++ b/PermissionController/res/values-zh-rTW-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-rTW/strings.xml b/PermissionController/res/values-zh-rTW/strings.xml index c303926c1..90d9b47ea 100644 --- a/PermissionController/res/values-zh-rTW/strings.xml +++ b/PermissionController/res/values-zh-rTW/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"所有權限"</string> <string name="other_permissions" msgid="2901186127193849594">"其他應用程式功能"</string> <string name="permission_request_title" msgid="8790310151025020126">"權限要求"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Wear 不支援安裝及解除安裝操作。"</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"選擇要授予「<xliff:g id="APP_NAME">%1$s</xliff:g>」的存取權"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已更新。請選擇要授予這個應用程式的存取權。"</string> <string name="review_button_cancel" msgid="2191147944056548886">"取消"</string> @@ -206,7 +204,9 @@ <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_v3" msgid="693340578642156657">"管理應用程式 (如未使用)"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"移除權限、刪除暫存檔及停止通知"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"移除權限、刪除暫存檔、停止通知並封存應用程式"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"為了保護你的資料,如果你連續幾個月都未使用這個應用程式,系統會移除其權限。"</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"為了保護你的資料,如果應用程式已有數個月未使用,系統將移除以下權限:<xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"為了保護你的資料,針對數個月未使用的應用程式,系統已移除相關權限。"</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"記事應用程式"</string> <string name="role_notes_description" msgid="8496852798616883551">"可在裝置上記事的應用程式"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"記事"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"預設錢包應用程式"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"錢包應用程式"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"錢包應用程式可存放消費金、會員卡、車鑰和其他資訊,幫助完成各種形式的交易。"</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"要將「<xliff:g id="APP_NAME">%1$s</xliff:g>」設為預設錢包應用程式嗎?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"無需任何權限"</string> <string name="request_role_current_default" msgid="738722892438247184">"目前的預設應用程式"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"不要再詢問"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"設為預設"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"資料分享方式異動"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"部分應用程式改變了位置資料的分享方式"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"設定"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"上次存取時間:<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"上次存取時間:昨天<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"上次存取時間:<xliff:g id="TIME_DATE_0">%1$s</xliff:g><xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml index 6fb918556..576046850 100644 --- a/PermissionController/res/values-zu/strings.xml +++ b/PermissionController/res/values-zu/strings.xml @@ -116,8 +116,6 @@ <string name="all_permissions" msgid="6911125611996872522">"Zonke izimvume"</string> <string name="other_permissions" msgid="2901186127193849594">"Amanye amakhono wohlelo lokusebenza"</string> <string name="permission_request_title" msgid="8790310151025020126">"Isicelo semvume"</string> - <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"I-Android Wear"</string> - <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"Izenzo zokufaka/ukukhipha azisekelwe ku-Wear."</string> <string name="permission_review_title_template_install" msgid="1284337937156289081">"Khetha ukuthi uzovumela ini ukuthi i-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifinyelele kuyo"</string> <string name="permission_review_title_template_update" msgid="3232333580548588657">"I-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ibuyekeziwe. Khetha ukuthi uzovumela ini ukuthi ifinyelelwe ilolu hlelo lokusebenza."</string> <string name="review_button_cancel" msgid="2191147944056548886">"Khansela"</string> @@ -198,7 +196,7 @@ <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Sebenzisa indawo eqondile"</string> <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"Uma indawo ngqo ivaliwe, ama-app angakwazi ukufinyelela indawo yakho elinganiselwayo"</string> <string name="app_permission_title" msgid="2090897901051370711">"<xliff:g id="PERM">%1$s</xliff:g> imvume"</string> - <string name="app_permission_header" msgid="2951363137032603806">"<xliff:g id="PERM">%1$s</xliff:g> ukufinyelela kwale app"</string> + <string name="app_permission_header" msgid="2951363137032603806">"ukufinyelela kwale app ku<xliff:g id="PERM">%1$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> <string name="assistant_mic_label" msgid="1011432357152323896">"Bonisa ukusetshenziswa kwe-microphone kamsizi"</string> @@ -206,7 +204,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"Susa izimvume uma uhlelo lokusebenza lungasetshenziswa"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Susa izimvume uphinde ukhulule isikhala"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Misa okwesikhashana umsebenzi we-app uma ingasetshenziswa"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"Lawula i-app uma ingasetsheziswa"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Susa izimvume, sula amafayela wesikhashana, futhi umise izaziso"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Susa izimvume, sula amafayela esikhashana, futhi ufake i-app kungobo yomlando"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"Ukuze kuvikelwe idatha yakho, izimvume zalolu hlelo lokusebenza zizosuswa uma uhlelo lokusebenza lungasetshenziswa izinyanga ezimbalwa."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"Ukuze kuvikelwe idatha yakho, uma uhlelo lokusebenza lungasetshenzisiwe, izimvume ezilandelayo zizosuswa: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"Ukuze kuvikelwe idatha yakho, izimvume zisusiwe kusukela kuzinhlelo zokusebenza ongazange uzisebenzise ezinyangeni ezimbalwa."</string> @@ -403,6 +403,11 @@ <string name="role_notes_short_label" msgid="8796604147546125285">"I-App yamanothi"</string> <string name="role_notes_description" msgid="8496852798616883551">"Ama-app akuvumela ukuthi uthathe amanothi kudivayisi yakho"</string> <string name="role_notes_search_keywords" msgid="7710756695666744631">"amanothi"</string> + <string name="role_wallet_label" msgid="3719419175656204207">"I-app ye-wallet engokuzenzakalelayo"</string> + <string name="role_wallet_short_label" msgid="6521288403762457452">"I-app ye-wallet"</string> + <string name="role_wallet_description" msgid="3726535836165949838">"Ama-app e-Wallet angagcina amakhredithi kanye namakhadi obuqotho akho, izikhiye zemoto kanye nezinye izino ukukusiza ngezinhlobo ezihlukahlukene zokuthenga."</string> + <string name="role_wallet_request_title" msgid="4770217108262737093">"Setha i-<xliff:g id="APP_NAME">%1$s</xliff:g> njenge-app ye-wallet yakho ezenzakalelayo?"</string> + <string name="role_wallet_request_description" msgid="6305487425777483053">"Azikho izimvume ezidingekayo"</string> <string name="request_role_current_default" msgid="738722892438247184">"Okuzenzakalelayo kwamanje"</string> <string name="request_role_dont_ask_again" msgid="3556017886029520306">"Ungabuzi futhi"</string> <string name="request_role_set_as_default" msgid="4253949643984172880">"Setha njengokuzenzekelayo"</string> @@ -648,4 +653,7 @@ <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Izibuyekezo zokwabelana ngedatha"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Amanye ama-app aguqule indlela angabelana ngayo ngedatha yendawo yakho"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Amasethingi"</string> + <string name="wear_app_perms_24h_access" msgid="8668121661337328895">"Kufinyelelwe ngo-<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_24h_access_yest" msgid="7069312481704735679">"Kufinyelelwe izolo ngo-<xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> + <string name="wear_app_perms_7d_access" msgid="4608069019194676432">"Kufinyelelwe ngo-<xliff:g id="TIME_DATE_0">%1$s</xliff:g> <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> </resources> diff --git a/PermissionController/res/values/strings.xml b/PermissionController/res/values/strings.xml index 9daa624f8..5e1c7d162 100644 --- a/PermissionController/res/values/strings.xml +++ b/PermissionController/res/values/strings.xml @@ -337,11 +337,6 @@ <!-- Title of the permission dialog for accessibility purposes- spoken to the user. [CHAR LIMIT=none] --> <string name="permission_request_title">Permission request</string> - <!-- Title of dialog telling users that Install/Uninstall action is not supported on Android Wear. [CHAR LIMIT=30] --> - <string name="wear_not_allowed_dlg_title">Android Wear</string> - <!-- Title of dialog telling users that Install/Uninstall action is not supported on Android Wear. [CHAR LIMIT=none] --> - <string name="wear_not_allowed_dlg_text">Install/Uninstall actions not supported on Wear.</string> - <!-- Review of runtime permissions for legacy apps --> <!-- Template for the screen title when app permissions are reviewed on install. [CHAR LIMIT=none] --> @@ -650,9 +645,15 @@ <!-- Label for the hibernation / auto revoke switch on T+ devices [CHAR LIMIT=40] --> <string name="unused_apps_label_v2">Pause app activity if unused</string> + <!-- Label of a switch preference that controls whether the system will pause app activity when the app has not been used for a while [CHAR LIMIT=40]--> + <string name="unused_apps_label_v3">Manage app if unused</string> + <!-- Hibernation switch preference summary which describes what the toggle does on T+ devices [CHAR LIMIT=NONE] --> <string name="unused_apps_summary">Remove permissions, delete temporary files, and stop notifications</string> + <!-- Summary of the switch preference that controls whether the system will pause app activity when the app has not been used for a while [CHAR LIMIT=NONE]--> + <string name="unused_apps_summary_v2">Remove permissions, delete temporary files, stop notifications, and archive the app</string> + <!-- Summary for stating that permissions will be removed [CHAR LIMIT=none] --> <string name="auto_revoke_summary">To protect your data, permissions for this app will be removed if the app is unused for a few months.</string> @@ -1222,6 +1223,15 @@ <!-- Search keywords for the NOTES role. [CHAR LIMIT=NONE] --> <string name="role_notes_search_keywords">notes</string> + <!-- Label for the wallet role. [CHAR LIMIT=30] --> + <string name="role_wallet_label">Default wallet app</string> + <!-- Short label for the wallet role. [CHAR LIMIT=30] --> + <string name="role_wallet_short_label">Wallet app</string> + <!-- Description for the wallet role. [CHAR LIMIT=NONE] --> + <string name="role_wallet_description">Wallet apps can store your credit and loyalty cards, car keys and other things to help with various forms of transactions.</string> + <string name="role_wallet_request_title">Set <xliff:g id="app_name" example="Super Wallet">%1$s</xliff:g> as your default wallet app?</string> + <string name="role_wallet_request_description">No permissions needed</string> + <!-- Subtitle for the application that is the current default application [CHAR LIMIT=30] --> <string name="request_role_current_default">Current default</string> @@ -1939,4 +1949,13 @@ Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug repo <string name="safety_label_changes_gear_description">Settings</string> <!-- Safety Label Change Notifications End --> + + <!-- Summary for showing the last access text for today for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_24h_access">Accessed <xliff:g id="time_date" example="12:42 PM">%1$s</xliff:g></string> + + <!-- Summary for showing the last access text for yesterday for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_24h_access_yest">Accessed yesterday <xliff:g id="time_date" example="12:42 PM">%1$s</xliff:g></string> + + <!-- Summary for showing the last access text for 7 days for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_7d_access">Accessed <xliff:g id="time_date" example="Jan 3">%1$s</xliff:g> <xliff:g id="time_date" example="12:42 PM">%2$s</xliff:g></string> </resources> diff --git a/PermissionController/res/values/styles.xml b/PermissionController/res/values/styles.xml index a03b71e9d..b6acf82a7 100644 --- a/PermissionController/res/values/styles.xml +++ b/PermissionController/res/values/styles.xml @@ -195,6 +195,8 @@ <item name="android:paddingEnd">16dp</item> <item name="android:orientation">horizontal</item> <item name="android:background">@drawable/grant_dialog_permission_rationale_background</item> + <item name="android:minWidth">48dp</item> + <item name="android:minHeight">48dp</item> </style> <style name="PermissionGrantPermissionRationaleIcon"> diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml index e6be02bde..6f2cf3a51 100644 --- a/PermissionController/res/xml/roles.xml +++ b/PermissionController/res/xml/roles.xml @@ -141,6 +141,8 @@ minSdkVersion="33" /> <permission name="android.permission.EXECUTE_APP_ACTION" minSdkVersion="34" /> + <permission name="android.permission.EMBED_ANY_APP_IN_UNTRUSTED_MODE" + minSdkVersion="35" /> </permissions> <app-op-permissions> <app-op-permission name="android.permission.SYSTEM_ALERT_WINDOW" /> @@ -444,6 +446,7 @@ </preferred-activity> </preferred-activities> <permissions> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> <permission name="android.permission.READ_HOME_APP_SEARCH_DATA" minSdkVersion="33"/> </permissions> </role> @@ -545,6 +548,10 @@ <permission-set name="sms" /> <permission-set name="contacts" /> <permission-set name="nearby_devices" /> + <permission-set name="notifications" minSdkVersion="35" /> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> <app-op-permissions> <app-op-permission name="android.permission.MANAGE_ONGOING_CALLS" /> @@ -580,6 +587,9 @@ <permission name="android.permission.TOGGLE_AUTOMOTIVE_PROJECTION" minSdkVersion="33" /> <permission name="android.permission.ADD_TRUSTED_DISPLAY" minSdkVersion="34"/> <permission name="android.permission.ASSOCIATE_COMPANION_DEVICES" minSdkVersion="34"/> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> </role> @@ -669,6 +679,8 @@ <permission name="android.permission.SET_TIME_ZONE" minSdkVersion="34" /> <permission name="android.permission.SATELLITE_COMMUNICATION" minSdkVersion="34" /> <permission name="android.permission.ALWAYS_UPDATE_WALLPAPER" minSdkVersion="35" /> + <permission name="android.permission.EMBED_ANY_APP_IN_UNTRUSTED_MODE" + minSdkVersion="35" /> </permissions> </role> @@ -961,6 +973,9 @@ <permission-set name="notifications" /> <permission name="android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE" /> <permission name="android.permission.SYSTEM_APPLICATION_OVERLAY" /> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> </role> @@ -1114,6 +1129,9 @@ <permission name="android.permission.MANAGE_SENSOR_PRIVACY" /> <permission name="android.permission.OBSERVE_SENSOR_PRIVACY" /> <permission name="android.permission.ACCESS_AMBIENT_CONTEXT_EVENT" minSdkVersion="33"/> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> </role> @@ -1176,6 +1194,9 @@ <permissions> <permission-set name="notifications" /> <permission-set name="storage" /> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> </role> @@ -1193,6 +1214,9 @@ <permission-set name="notifications" /> <permission-set name="phone" /> <permission-set name="sms" /> + <!-- If this role holder has a NotificationListenerService, let that service receive + notifications with sensitive content unredacted--> + <permission name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" minSdkVersion="35"/> </permissions> <app-op-permissions> <app-op-permission name="android.permission.MANAGE_ONGOING_CALLS" /> @@ -1330,6 +1354,7 @@ <permission name="android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER" minSdkVersion="34" /> <permission name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL" minSdkVersion="34" /> <permission name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS" minSdkVersion="34" /> + <permission name="android.permission.MANAGE_DEVICE_POLICY_CONTENT_PROTECTION" minSdkVersion="35" /> </permissions> </role> @@ -1344,6 +1369,7 @@ <permissions> <permission-set name="notifications" /> <permission name="android.permission.GET_HISTORICAL_APP_OPS_STATS" /> + <permission name="android.permission.GET_BACKGROUND_INSTALLED_PACKAGES" minSdkVersion="35" /> </permissions> </role> @@ -1636,4 +1662,22 @@ <app-op-permission name="android.permission.PACKAGE_USAGE_STATS" /> </app-op-permissions> </role> + + <role + name="android.app.role.WALLET" + behavior="WalletRoleBehavior" + defaultHolders="config_defaultWallet" + description="@string/role_wallet_description" + exclusive="true" + label="@string/role_wallet_label" + minSdkVersion="35" + overrideUserWhenGranting="true" + requestable="true" + requestDescription="@string/role_wallet_request_description" + requestTitle="@string/role_wallet_request_title" + showNone="true" + shortLabel="@string/role_wallet_short_label" + uiBehavior="WalletRoleUiBehavior"/> + + </roles> diff --git a/PermissionController/role-controller/Android.bp b/PermissionController/role-controller/Android.bp index 521efafae..437d7ca5e 100644 --- a/PermissionController/role-controller/Android.bp +++ b/PermissionController/role-controller/Android.bp @@ -36,4 +36,7 @@ java_library { installable: false, min_sdk_version: "30", sdk_version: "system_current", + lint: { + baseline_filename: "lint-baseline.xml", + }, } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/WalletRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/WalletRoleBehavior.java new file mode 100644 index 000000000..a689db8df --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/WalletRoleBehavior.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.role.controller.behavior; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.nfc.cardemulation.CardEmulation; +import android.nfc.cardemulation.HostApduService; +import android.nfc.cardemulation.OffHostApduService; +import android.os.Build; +import android.os.UserHandle; +import android.permission.flags.Flags; +import android.service.quickaccesswallet.QuickAccessWalletService; +import android.util.ArraySet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; + +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.UserUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * Handles the behavior of the wallet role. + */ +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +public class WalletRoleBehavior implements RoleBehavior { + + private static final String LOG_TAG = WalletRoleBehavior.class.getSimpleName(); + + @Override + public boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return SdkLevel.isAtLeastV() && Flags.walletRoleEnabled() + && !UserUtils.isProfile(user, context); + } + + @Nullable + @Override + public List<String> getDefaultHoldersAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + Context userContext = UserUtils.getUserContext(context, user); + ComponentName preferredPaymentService = + CardEmulation.getPreferredPaymentService(userContext); + if (preferredPaymentService != null) { + return Collections.singletonList(preferredPaymentService.getPackageName()); + } + + return null; + } + + @Nullable + @Override + public Boolean isPackageQualifiedAsUser(@NonNull Role role, @NonNull String packageName, + @NonNull UserHandle user, @NonNull Context context) { + return !getQualifyingPackageNamesInternal(packageName, user, context).isEmpty(); + } + + @Nullable + @Override + public List<String> getQualifyingPackagesAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return new ArrayList<>(getQualifyingPackageNamesInternal(null, user, context)); + } + + @NonNull + private static Set<String> getQualifyingPackageNamesInternal(@Nullable String packageName, + @NonNull UserHandle user, @NonNull Context context) { + Set<String> packageNames = + resolvePackageNames(HostApduService.SERVICE_INTERFACE, packageName, user, + context); + packageNames.addAll( + resolvePackageNames(OffHostApduService.SERVICE_INTERFACE, packageName, user, + context)); + packageNames.addAll( + resolvePackageNames(QuickAccessWalletService.SERVICE_INTERFACE, packageName, user, + context)); + return packageNames; + } + + @NonNull + private static Set<String> resolvePackageNames(@NonNull String action, + @Nullable String packageName, @NonNull UserHandle user, @NonNull Context context) { + Intent intent = new Intent(action).setPackage(packageName); + PackageManager packageManager = context.getPackageManager(); + List<ResolveInfo> resolveInfos = packageManager + .queryIntentServicesAsUser(intent, PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, user); + Set<String> packageNames = new ArraySet<>(); + int resolveInfosSize = resolveInfos.size(); + for (int i = 0; i < resolveInfosSize; i++) { + packageNames.add(resolveInfos.get(i).serviceInfo.packageName); + } + return packageNames; + } +} 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 6c7eb7d9e..fe062ef53 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 @@ -128,6 +128,11 @@ public class Role { private final int mMinSdkVersion; /** + * Whether this role should only grant privileges when a role holder is actively added. + */ + private final boolean mOnlyGrantWhenAdded; + + /** * Whether this role should override user's choice about privileges when granting. */ private final boolean mOverrideUserWhenGranting; @@ -224,11 +229,11 @@ public class Role { @Nullable RoleBehavior behavior, @Nullable String defaultHoldersResourceName, @StringRes int descriptionResource, boolean exclusive, boolean fallBackToDefaultHolder, @StringRes int labelResource, int maxSdkVersion, int minSdkVersion, - boolean overrideUserWhenGranting, @StringRes int requestDescriptionResource, - @StringRes int requestTitleResource, boolean requestable, - @StringRes int searchKeywordsResource, @StringRes int shortLabelResource, - boolean showNone, boolean statik, boolean systemOnly, boolean visible, - @NonNull List<RequiredComponent> requiredComponents, + boolean onlyGrantWhenAdded, boolean overrideUserWhenGranting, + @StringRes int requestDescriptionResource, @StringRes int requestTitleResource, + boolean requestable, @StringRes int searchKeywordsResource, + @StringRes int shortLabelResource, boolean showNone, boolean statik, boolean systemOnly, + boolean visible, @NonNull List<RequiredComponent> requiredComponents, @NonNull List<Permission> permissions, @NonNull List<Permission> appOpPermissions, @NonNull List<AppOp> appOps, @NonNull List<PreferredActivity> preferredActivities, @Nullable String uiBehaviorName) { @@ -242,6 +247,7 @@ public class Role { mLabelResource = labelResource; mMaxSdkVersion = maxSdkVersion; mMinSdkVersion = minSdkVersion; + mOnlyGrantWhenAdded = onlyGrantWhenAdded; mOverrideUserWhenGranting = overrideUserWhenGranting; mRequestDescriptionResource = requestDescriptionResource; mRequestTitleResource = requestTitleResource; @@ -309,6 +315,13 @@ public class Role { } /** + * @see #mOnlyGrantWhenAdded + */ + public boolean shouldOnlyGrantWhenAdded() { + return mOnlyGrantWhenAdded; + } + + /** * @see #mOverrideUserWhenGranting */ public boolean shouldOverrideUserWhenGranting() { @@ -416,10 +429,14 @@ public class Role { @NonNull public List<String> getDefaultHoldersAsUser(@NonNull UserHandle user, @NonNull Context context) { - if (mDefaultHoldersResourceName == null) { - if (mBehavior != null) { - return mBehavior.getDefaultHoldersAsUser(this, user, context); + if (mBehavior != null) { + List<String> defaultHolders = mBehavior.getDefaultHoldersAsUser(this, user, context); + if (defaultHolders != null) { + return defaultHolders; } + } + + if (mDefaultHoldersResourceName == null) { return Collections.emptyList(); } @@ -996,6 +1013,7 @@ public class Role { + ", mLabelResource=" + mLabelResource + ", mMaxSdkVersion=" + mMaxSdkVersion + ", mMinSdkVersion=" + mMinSdkVersion + + ", mOnlyGrantWhenAdded=" + mOnlyGrantWhenAdded + ", mOverrideUserWhenGranting=" + mOverrideUserWhenGranting + ", mRequestDescriptionResource=" + mRequestDescriptionResource + ", mRequestTitleResource=" + mRequestTitleResource diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java index 4bc1873d5..3849a50e3 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java @@ -48,10 +48,10 @@ public interface RoleBehavior { /** * @see Role#getDefaultHolders(Context) */ - @NonNull + @Nullable default List<String> getDefaultHoldersAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { - return Collections.emptyList(); + 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 cc2d102c8..bd530d09d 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 @@ -92,6 +92,7 @@ public class RoleParser { private static final String ATTRIBUTE_LABEL = "label"; private static final String ATTRIBUTE_MAX_SDK_VERSION = "maxSdkVersion"; private static final String ATTRIBUTE_MIN_SDK_VERSION = "minSdkVersion"; + private static final String ATTRIBUTE_ONLY_GRANT_WHEN_ADDED = "onlyGrantWhenAdded"; private static final String ATTRIBUTE_OVERRIDE_USER_WHEN_GRANTING = "overrideUserWhenGranting"; private static final String ATTRIBUTE_QUERY_FLAGS = "queryFlags"; private static final String ATTRIBUTE_REQUEST_TITLE = "requestTitle"; @@ -396,6 +397,9 @@ public class RoleParser { return null; } + boolean onlyGrantWhenAdded = getAttributeBooleanValue(parser, + ATTRIBUTE_ONLY_GRANT_WHEN_ADDED, false); + boolean overrideUserWhenGranting = getAttributeBooleanValue(parser, ATTRIBUTE_OVERRIDE_USER_WHEN_GRANTING, false); @@ -523,10 +527,11 @@ public class RoleParser { } return new Role(name, allowBypassingQualification, behavior, defaultHoldersResourceName, descriptionResource, exclusive, fallBackToDefaultHolder, labelResource, - maxSdkVersion, minSdkVersion, overrideUserWhenGranting, requestDescriptionResource, - requestTitleResource, requestable, searchKeywordsResource, shortLabelResource, - showNone, statik, systemOnly, visible, requiredComponents, permissions, - appOpPermissions, appOps, preferredActivities, uiBehaviorName); + maxSdkVersion, minSdkVersion, onlyGrantWhenAdded, overrideUserWhenGranting, + requestDescriptionResource, requestTitleResource, requestable, + searchKeywordsResource, shortLabelResource, showNone, statik, systemOnly, visible, + requiredComponents, permissions, appOpPermissions, appOps, preferredActivities, + uiBehaviorName); } @NonNull 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 d3c099d5e..bc7562c11 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 @@ -32,6 +32,7 @@ import androidx.annotation.WorkerThread; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; import com.android.role.controller.util.CollectionUtils; +import com.android.role.controller.util.LegacyRoleFallbackEnabledUtils; import com.android.role.controller.util.PackageUtils; import com.android.role.controller.util.UserUtils; @@ -130,10 +131,12 @@ public class RoleControllerServiceImpl extends RoleControllerService { String packageName = currentPackageNames.get(currentPackageNamesIndex); if (role.isPackageQualifiedAsUser(packageName, mUser, mContext)) { - // We should not override user set or fixed permissions because we are only - // redoing the grant here. Otherwise, user won't be able to revoke permissions - // granted by role. - addRoleHolderInternal(role, packageName, false, false, true); + if (!role.shouldOnlyGrantWhenAdded()) { + // We should not override user set or fixed permissions because we are only + // redoing the grant here. Otherwise, user won't be able to revoke + // permissions granted by role. + addRoleHolderInternal(role, packageName, false, false, true); + } } else { Log.i(LOG_TAG, "Removing package that no longer qualifies for the role," + " package: " + packageName + ", role: " + roleName); @@ -468,6 +471,13 @@ public class RoleControllerServiceImpl extends RoleControllerService { return role.isVisibleAsUser(mUser, mContext); } + @Override + @NonNull + public List<String> onGetLegacyFallbackDisabledRoles() { + return LegacyRoleFallbackEnabledUtils.getFallbackDisabledRoles(mUser, mContext); + } + + private static boolean checkFlags(int flags, int allowedFlags) { if ((flags & allowedFlags) != flags) { Log.e(LOG_TAG, "flags is invalid, flags: 0x" + Integer.toHexString(flags) diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/LegacyRoleFallbackEnabledUtils.java b/PermissionController/role-controller/java/com/android/role/controller/util/LegacyRoleFallbackEnabledUtils.java new file mode 100644 index 000000000..5be10a26a --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/util/LegacyRoleFallbackEnabledUtils.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.role.controller.util; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.UserHandle; + +import androidx.annotation.NonNull; + +import java.util.ArrayList; +import java.util.List; + +public class LegacyRoleFallbackEnabledUtils { + /** + * Name of generic shared preferences file. + */ + private static final String PREFERENCES_FILE = "preferences"; + + /** + * Key in the generic shared preferences that stores if the user manually selected the "none" + * role holder for a role. + */ + private static final String IS_NONE_ROLE_HOLDER_SELECTED_KEY = "is_none_role_holder_selected:"; + + /** + * Get a device protected storage based shared preferences. Avoid storing sensitive data in it. + * + * @param context the context to get the shared preferences + * @return a device protected storage based shared preferences + */ + @NonNull + @TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) + private static SharedPreferences getSharedPreferences(@NonNull UserHandle user, + @NonNull Context context) { + String packageName = context.getPackageManager().getPermissionControllerPackageName(); + try { + context = context.createPackageContextAsUser(packageName, 0, user); + } catch (PackageManager.NameNotFoundException e) { + throw new RuntimeException(e); + } + if (!context.isDeviceProtectedStorage()) { + context = context.createDeviceProtectedStorageContext(); + } + return context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); + } + + /** + * Get all role names with fallback disabled, which means their "none" are set to true. + * + * @return A list of role names with fallback disabled. + */ + public static List<String> getFallbackDisabledRoles(@NonNull UserHandle user, + @NonNull Context context) { + List<String> fallbackDisabledRoles = new ArrayList<>(); + SharedPreferences sharedPreferences = getSharedPreferences(user, context); + for (String key : sharedPreferences.getAll().keySet()) { + if (key.startsWith(IS_NONE_ROLE_HOLDER_SELECTED_KEY) + && sharedPreferences.getBoolean(key, false)) { + String roleName = key.substring(IS_NONE_ROLE_HOLDER_SELECTED_KEY.length()); + fallbackDisabledRoles.add(roleName); + } + } + return fallbackDisabledRoles; + } + + /** + * Check whether the role has the fallback holder enabled. + * + * @return whether the "none" role holder is not selected + */ + public static boolean isRoleFallbackEnabledAsUser(@NonNull String roleName, + @NonNull UserHandle user, @NonNull Context context) { + return !getSharedPreferences(user, context) + .getBoolean(IS_NONE_ROLE_HOLDER_SELECTED_KEY + roleName, false); + } + + /** + * Set whether the role has fallback holder enabled. + */ + public static void setRoleFallbackEnabledAsUser(@NonNull String roleName, + boolean fallbackEnabled, @NonNull UserHandle user, @NonNull Context context) { + String key = IS_NONE_ROLE_HOLDER_SELECTED_KEY + roleName; + if (fallbackEnabled) { + getSharedPreferences(user, context).edit().remove(key).apply(); + } else { + getSharedPreferences(user, context).edit().putBoolean(key, true).apply(); + } + } +} diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/RoleManagerCompat.java b/PermissionController/role-controller/java/com/android/role/controller/util/RoleManagerCompat.java index 8a6fd579c..ec63528d1 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/util/RoleManagerCompat.java +++ b/PermissionController/role-controller/java/com/android/role/controller/util/RoleManagerCompat.java @@ -18,8 +18,8 @@ package com.android.role.controller.util; import android.app.role.RoleManager; import android.content.Context; -import android.content.SharedPreferences; import android.os.UserHandle; +import android.permission.flags.Flags; import androidx.annotation.NonNull; @@ -31,16 +31,7 @@ import com.android.role.controller.model.Role; */ public class RoleManagerCompat { - /** - * Key in the generic shared preferences that stores if the user manually selected the "none" - * role holder for a role. - */ - private static final String IS_NONE_ROLE_HOLDER_SELECTED_KEY = "is_none_role_holder_selected:"; - /** - * Name of generic shared preferences file. - */ - private static final String PREFERENCES_FILE = "preferences"; private RoleManagerCompat() {} @@ -56,47 +47,34 @@ public class RoleManagerCompat { } /** - * Get a device protected storage based shared preferences. Avoid storing sensitive data in it. - * - * @param context the context to get the shared preferences - * @return a device protected storage based shared preferences - */ - @NonNull - private static SharedPreferences getDeviceProtectedSharedPreferences(@NonNull Context context) { - if (!context.isDeviceProtectedStorage()) { - context = context.createDeviceProtectedStorageContext(); - } - return context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); - } - - /** * Check whether the role has the fallback holder enabled. * * @return whether the "none" role holder is not selected */ public static boolean isRoleFallbackEnabledAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { - Context userContext = UserUtils.getUserContext(context, user); - boolean isNoneHolderSelected = getDeviceProtectedSharedPreferences(userContext) - .getBoolean(IS_NONE_ROLE_HOLDER_SELECTED_KEY + role.getName(), false); - return !isNoneHolderSelected; + if (SdkLevel.isAtLeastV() && Flags.systemServerRoleControllerEnabled()) { + Context userContext = UserUtils.getUserContext(context, user); + RoleManager userRoleManager = userContext.getSystemService(RoleManager.class); + return userRoleManager.isRoleFallbackEnabled(role.getName()); + } else { + return LegacyRoleFallbackEnabledUtils.isRoleFallbackEnabledAsUser(role.getName(), user, + context); + } } /** * Set whether the role has fallback holder enabled. - * */ public static void setRoleFallbackEnabledAsUser(@NonNull Role role, boolean fallbackEnabled, @NonNull UserHandle user, @NonNull Context context) { - Context userContext = UserUtils.getUserContext(context, user); - if (fallbackEnabled) { - getDeviceProtectedSharedPreferences(userContext).edit() - .remove(IS_NONE_ROLE_HOLDER_SELECTED_KEY + role.getName()) - .apply(); + if (SdkLevel.isAtLeastV() && Flags.systemServerRoleControllerEnabled()) { + Context userContext = UserUtils.getUserContext(context, user); + RoleManager userRoleManager = userContext.getSystemService(RoleManager.class); + userRoleManager.setRoleFallbackEnabled(role.getName(), fallbackEnabled); } else { - getDeviceProtectedSharedPreferences(userContext).edit() - .putBoolean(IS_NONE_ROLE_HOLDER_SELECTED_KEY + role.getName(), true) - .apply(); + LegacyRoleFallbackEnabledUtils.setRoleFallbackEnabledAsUser(role.getName(), + fallbackEnabled, user, context); } } } diff --git a/PermissionController/role-controller/lint-baseline.xml b/PermissionController/role-controller/lint-baseline.xml index e7c119f3b..894dc1834 100644 --- a/PermissionController/role-controller/lint-baseline.xml +++ b/PermissionController/role-controller/lint-baseline.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> -<issues format="6" by="lint 8.0.0-dev" type="baseline" dependencies="true" variant="all" version="8.0.0-dev"> +<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01"> <issue id="NewApi" message="Call requires API level 31 (current min is 30): `android.app.NotificationManager#setNotificationListenerAccessGranted`" - errorLine1=" notificationManager.setNotificationListenerAccessGranted(" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" userNotificationManager.setNotificationListenerAccessGranted(" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <location file="packages/modules/Permission/PermissionController/role-controller/java/com/android/role/controller/util/NotificationUtils.java" - line="74" - column="33"/> + line="78" + column="37"/> </issue> </issues>
\ No newline at end of file diff --git a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt index 97dd3f43c..8e58d48d9 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt @@ -33,6 +33,7 @@ import androidx.wear.compose.foundation.lazy.ScalingLazyListState import androidx.wear.compose.material.CircularProgressIndicator import com.android.permissioncontroller.permission.ui.wear.elements.AlertDialog import com.android.permissioncontroller.permission.ui.wear.elements.SingleButtonAlertDialog +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme @Composable fun WearConfirmationScreen(viewModel: WearConfirmationActivityViewModel) { @@ -77,5 +78,7 @@ fun WearConfirmationScreen(viewModel: WearConfirmationActivityViewModel) { } fun createView(activity: Activity, viewModel: WearConfirmationActivityViewModel): View { - return ComposeView(activity).apply { setContent { WearConfirmationScreen(viewModel) } } + return ComposeView(activity).apply { + setContent { WearPermissionTheme { WearConfirmationScreen(viewModel) } } + } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java index c615755be..ddcdf1319 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java @@ -56,7 +56,7 @@ import android.text.style.ClickableSpan; import android.util.ArraySet; import android.util.Log; import android.util.Pair; -import android.view.MotionEvent; +import android.view.KeyEvent; import android.view.View; import android.view.View.OnAttachStateChangeListener; import android.view.Window; @@ -67,7 +67,6 @@ import androidx.annotation.GuardedBy; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; -import androidx.core.util.Consumer; import androidx.core.util.Preconditions; import com.android.modules.utils.build.SdkLevel; @@ -488,7 +487,7 @@ public class GrantPermissionsActivity extends SettingsActivity mViewModel.sendDirectlyToSettings(top, info.getGroupName()); return; } else if (info.getPrompt() == Prompt.NO_UI_PHOTO_PICKER_REDIRECT) { - mViewModel.openPhotoPicker(top, GRANTED_USER_SELECTED); + mViewModel.openPhotoPicker(top); return; } else if (info.getPrompt() == Prompt.NO_UI_FILTER_THIS_GROUP) { // Filtered permissions should be removed from the requested permissions list entirely, @@ -686,25 +685,29 @@ public class GrantPermissionsActivity extends SettingsActivity return buttonArray; } - // LINT.IfChange(dispatchTouchEvent) @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - View rootView = getWindow().getDecorView(); - if (rootView.getTop() != 0) { - // We are animating the top view, need to compensate for that in motion events. - ev.setLocation(ev.getX(), ev.getY() - rootView.getTop()); - } - final int x = (int) ev.getX(); - final int y = (int) ev.getY(); - if ((x < 0) || (y < 0) || (x > (rootView.getWidth())) || (y > (rootView.getHeight()))) { - if (MotionEvent.ACTION_DOWN == ev.getAction()) { - mViewHandler.onCancelled(); - } + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ESCAPE + && event.getRepeatCount() == 0 + && event.hasNoModifiers()) { + event.startTracking(); + mViewHandler.onCancelled(); finishAfterTransition(); + return true; + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ESCAPE + && event.isTracking() + && !event.isCanceled()) { + // Mark it as handled since we did handle the down event + return true; } - return super.dispatchTouchEvent(ev); + return super.onKeyUp(keyCode, event); } - // LINT.ThenChange(PermissionRationaleActivity.java:dispatchTouchEvent) @Override protected void onSaveInstanceState(@NonNull Bundle outState) { @@ -735,16 +738,14 @@ public class GrantPermissionsActivity extends SettingsActivity @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - Consumer<Intent> callback = mViewModel.getActivityResultCallback(); - if (callback == null || (requestCode != APP_PERMISSION_REQUEST_CODE - && requestCode != PHOTO_PICKER_REQUEST_CODE)) { + if (requestCode != APP_PERMISSION_REQUEST_CODE + && requestCode != PHOTO_PICKER_REQUEST_CODE) { return; } if (requestCode == PHOTO_PICKER_REQUEST_CODE) { data = new Intent("").putExtra(INTENT_PHOTOS_SELECTED, resultCode == RESULT_OK); } - callback.accept(data); - mViewModel.setActivityResultCallback(null); + mViewModel.handleCallback(data, requestCode); } @Override @@ -764,11 +765,10 @@ public class GrantPermissionsActivity extends SettingsActivity mPreMergeShownGroupName = null; } - if (Objects.equals(READ_MEDIA_VISUAL, name) - && result == GrantPermissionsViewHandler.GRANTED_USER_SELECTED) { + if (Objects.equals(READ_MEDIA_VISUAL, name) && result == GRANTED_USER_SELECTED) { // Only the top activity can receive activity results Activity top = mFollowerActivities.isEmpty() ? this : mFollowerActivities.get(0); - mViewModel.openPhotoPicker(top, result); + mViewModel.openPhotoPicker(top); logGrantPermissionActivityButtons(name, affectedForegroundPermissions, result); return; } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java index 4bc14ed24..24b6439b5 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java @@ -64,6 +64,7 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; 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.model.livedatatypes.HibernationSettingState; @@ -431,8 +432,10 @@ public final class AppPermissionGroupsFragment extends SettingsWithLargeHeader i int switchTitleId; if (isHibernationEnabled()) { if (SdkLevel.isAtLeastT()) { - switchTitleId = R.string.unused_apps_label_v2; - autoRevokeSwitch.setSummary(R.string.unused_apps_summary); + switchTitleId = isArchivingEnabled() ? R.string.unused_apps_label_v3 + : R.string.unused_apps_label_v2; + autoRevokeSwitch.setSummary(isArchivingEnabled() ? R.string.unused_apps_summary_v2 + : R.string.unused_apps_summary); } else { switchTitleId = R.string.unused_apps_label; } @@ -456,6 +459,10 @@ public final class AppPermissionGroupsFragment extends SettingsWithLargeHeader i autoRevokeCategory.addPreference(autoRevokeSummary); } + private boolean isArchivingEnabled() { + return SdkLevel.isAtLeastV() && Flags.archivingReadOnly(); + } + private void setAutoRevokeToggleState(HibernationSettingState state) { if (state == null || !mViewModel.getPackagePermGroupsLiveData().isInitialized() || getPreferenceScreen() == null || getListView() == null || getView() == null) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index d4947694e..91b94da9a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -171,7 +171,17 @@ class GrantPermissionsViewModel( private var appPermGroupLiveDatas = mutableMapOf<String, LightAppPermGroupLiveData>() - var activityResultCallback: Consumer<Intent>? = null + internal data class ResultCallback(val consumer: Consumer<Intent?>, val requestCode: Int) + + private var activityResultCallback: ResultCallback? = null + + init { + if (storedState?.containsKey(SAVED_REQUEST_CODE_KEY) == true) { + if (storedState.getInt(SAVED_REQUEST_CODE_KEY) == PHOTO_PICKER_REQUEST_CODE) { + setPhotoPickerCallback() + } + } + } /** * An internal class which represents the state of a current AppPermissionGroup grant request. @@ -996,7 +1006,9 @@ class GrantPermissionsViewModel( Log.i( LOG_TAG, "Permission grant result requestId=$sessionId " + - "callingUid=${packageInfo.uid} callingPackage=$packageName permission=$permission " + + "callingUid=${packageInfo.uid} " + + "callingPackage=$packageName " + + "permission=$permission " + "isImplicit=$isImplicit result=$result " + "isPermissionRationaleShown=$isPermissionRationaleShown" ) @@ -1023,6 +1035,7 @@ class GrantPermissionsViewModel( for ((groupName, groupState) in groupStates) { outState.putInt(groupName, groupState.state) } + activityResultCallback?.let { outState.putInt(SAVED_REQUEST_CODE_KEY, it.requestCode) } } /** @@ -1048,12 +1061,25 @@ class GrantPermissionsViewModel( } } + fun handleCallback(data: Intent?, requestCode: Int) { + val currCallback = activityResultCallback + if (currCallback == null || requestCode != currCallback.requestCode) { + return + } + currCallback.consumer.accept(data) + activityResultCallback = null + } + fun handleHealthConnectPermissions(activity: Activity) { if (activityResultCallback == null) { - activityResultCallback = Consumer { - groupStates[HEALTH_PERMISSION_GROUP]?.state = STATE_SKIPPED - requestInfosLiveData.update() - } + activityResultCallback = + ResultCallback( + { + groupStates[HEALTH_PERMISSION_GROUP]?.state = STATE_SKIPPED + requestInfosLiveData.update() + }, + APP_PERMISSION_REQUEST_CODE + ) val healthPermissions = unfilteredAffectedPermissions .filter { permission -> isHealthPermission(activity, permission) } @@ -1076,51 +1102,47 @@ class GrantPermissionsViewModel( */ fun sendDirectlyToSettings(activity: Activity, groupName: String) { if (activityResultCallback == null) { - activityResultCallback = Consumer { data -> - if (data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) == null) { - // User didn't interact, count against rate limit - val group = groupStates[groupName]?.group ?: return@Consumer - if (group.background.isUserSet) { - KotlinUtils.setGroupFlags( - app, - group, - FLAG_PERMISSION_USER_FIXED to true, - filterPermissions = group.backgroundPermNames - ) - } else { - KotlinUtils.setGroupFlags( - app, - group, - FLAG_PERMISSION_USER_SET to true, - filterPermissions = group.backgroundPermNames - ) - } - } + activityResultCallback = + ResultCallback( + Consumer { data -> + if (data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) == null) { + // User didn't interact, count against rate limit + val group = groupStates[groupName]?.group ?: return@Consumer + if (group.background.isUserSet) { + KotlinUtils.setGroupFlags( + app, + group, + FLAG_PERMISSION_USER_FIXED to true, + filterPermissions = group.backgroundPermNames + ) + } else { + KotlinUtils.setGroupFlags( + app, + group, + FLAG_PERMISSION_USER_SET to true, + filterPermissions = group.backgroundPermNames + ) + } + } - groupStates[groupName]?.state = STATE_SKIPPED - // Update our liveData now that there is a new skipped group - requestInfosLiveData.update() - } + groupStates[groupName]?.state = STATE_SKIPPED + // Update our liveData now that there is a new skipped group + requestInfosLiveData.update() + }, + APP_PERMISSION_REQUEST_CODE + ) startAppPermissionFragment(activity, groupName) } } - fun openPhotoPicker(activity: Activity, result: Int) { + fun openPhotoPicker(activity: Activity) { if (activityResultCallback != null) { return } if (groupStates[READ_MEDIA_VISUAL]?.affectedPermissions == null) { return } - activityResultCallback = Consumer { data -> - val anySelected = data?.getBooleanExtra(INTENT_PHOTOS_SELECTED, true) == true - if (anySelected) { - onPermissionGrantResult(READ_MEDIA_VISUAL, null, result) - } else { - onPermissionGrantResult(READ_MEDIA_VISUAL, null, CANCELED) - } - requestInfosLiveData.update() - } + setPhotoPickerCallback() openPhotoPickerForApp( activity, packageInfo.uid, @@ -1129,6 +1151,22 @@ class GrantPermissionsViewModel( ) } + private fun setPhotoPickerCallback() { + activityResultCallback = + ResultCallback( + { data -> + val anySelected = data?.getBooleanExtra(INTENT_PHOTOS_SELECTED, true) == true + if (anySelected) { + onPermissionGrantResult(READ_MEDIA_VISUAL, null, GRANTED_USER_SELECTED) + } else { + onPermissionGrantResult(READ_MEDIA_VISUAL, null, CANCELED) + } + requestInfosLiveData.update() + }, + PHOTO_PICKER_REQUEST_CODE + ) + } + /** * Send the user to the AppPermissionFragment from a link. Used for Q- apps * @@ -1137,15 +1175,19 @@ class GrantPermissionsViewModel( */ fun sendToSettingsFromLink(activity: Activity, groupName: String) { startAppPermissionFragment(activity, groupName) - activityResultCallback = Consumer { data -> - val returnGroupName = data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) - if (returnGroupName != null) { - groupStates[returnGroupName]?.state = STATE_SKIPPED - val result = data.getIntExtra(EXTRA_RESULT_PERMISSION_RESULT, -1) - logSettingsInteraction(returnGroupName, result) - requestInfosLiveData.update() - } - } + activityResultCallback = + ResultCallback( + { data -> + val returnGroupName = data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) + if (returnGroupName != null) { + groupStates[returnGroupName]?.state = STATE_SKIPPED + val result = data.getIntExtra(EXTRA_RESULT_PERMISSION_RESULT, -1) + logSettingsInteraction(returnGroupName, result) + requestInfosLiveData.update() + } + }, + APP_PERMISSION_REQUEST_CODE + ) } /** @@ -1165,15 +1207,19 @@ class GrantPermissionsViewModel( putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, groupName) putExtra(Constants.EXTRA_SESSION_ID, sessionId) } - activityResultCallback = Consumer { data -> - val returnGroupName = data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) - if (returnGroupName != null) { - groupStates[returnGroupName]?.state = STATE_SKIPPED - val result = data.getIntExtra(EXTRA_RESULT_PERMISSION_RESULT, CANCELED) - logSettingsInteraction(returnGroupName, result) - requestInfosLiveData.update() - } - } + activityResultCallback = + ResultCallback( + { data -> + val returnGroupName = data?.getStringExtra(EXTRA_RESULT_PERMISSION_INTERACTED) + if (returnGroupName != null) { + groupStates[returnGroupName]?.state = STATE_SKIPPED + val result = data.getIntExtra(EXTRA_RESULT_PERMISSION_RESULT, CANCELED) + logSettingsInteraction(returnGroupName, result) + requestInfosLiveData.update() + } + }, + APP_PERMISSION_REQUEST_CODE + ) activity.startActivityForResult(intent, APP_PERMISSION_REQUEST_CODE) } @@ -1325,6 +1371,7 @@ class GrantPermissionsViewModel( companion object { const val APP_PERMISSION_REQUEST_CODE = 1 const val PHOTO_PICKER_REQUEST_CODE = 2 + const val SAVED_REQUEST_CODE_KEY = "saved_request_code" private const val STATE_UNKNOWN = 0 private const val STATE_GRANTED = 1 private const val STATE_DENIED = 2 diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java index cc32c5f02..c9e9a2eb1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java @@ -168,7 +168,8 @@ public class GrantPermissionsWearViewHandler implements GrantPermissionsViewHand private void updateScreen() { mViewModel.getIconLiveData().setValue( mGroupIcon == null ? null : mGroupIcon.loadDrawable(mActivity)); - mViewModel.getGroupMessageLiveData().setValue(mGroupMessage.toString()); + mViewModel.getGroupMessageLiveData().setValue( + mGroupMessage == null ? "" : mGroupMessage.toString()); mViewModel.getDetailMessageLiveData().setValue(mDetailMessage); int numButtons = BUTTON_RES_ID_TO_NUM.size(); List<Boolean> buttonVisibilityList = Arrays.asList(new Boolean[NEXT_BUTTON]); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt index c1ce14f03..3936e54d4 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt @@ -56,6 +56,7 @@ import com.android.permissioncontroller.permission.ui.v33.AdvancedConfirmDialogA import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModel import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.ConfirmDialogArgs +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel import com.android.settingslib.RestrictedLockUtils @@ -150,6 +151,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ViewModelProvider(this, AppPermissionConfirmDialogViewModelFactory()) .get(AppPermissionConfirmDialogViewModel::class.java) + @Suppress("ktlint:standard:max-line-length") val onLocationSwitchChanged: (Boolean) -> Unit = { checked -> run { val changeRequest = @@ -233,18 +235,20 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { return ComposeView(activity).apply { setContent { - WearAppPermissionScreen( - permGroupLabel, - viewModel, - confirmDialogViewModel, - onLocationSwitchChanged, - onGrantedStateChanged, - onFooterClicked, - onConfirmDialogOkButtonClick, - onConfirmDialogCancelButtonClick, - onAdvancedConfirmDialogOkButtonClick, - onAdvancedConfirmDialogCancelButtonClick - ) + WearPermissionTheme { + WearAppPermissionScreen( + permGroupLabel, + viewModel, + confirmDialogViewModel, + onLocationSwitchChanged, + onGrantedStateChanged, + onFooterClicked, + onConfirmDialogOkButtonClick, + onConfirmDialogCancelButtonClick, + onAdvancedConfirmDialogOkButtonClick, + onAdvancedConfirmDialogCancelButtonClick + ) + } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt index a0703b10c..9b960dfb5 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt @@ -46,6 +46,7 @@ import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionGr import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionGroupsRevokeDialogViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissionUsagesViewModel import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissionUsagesViewModelFactory +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.permission.utils.KotlinUtils.is7DayToggleEnabled import java.time.Instant import java.util.concurrent.TimeUnit @@ -142,7 +143,9 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb revokeDialogViewModel = revokeDialogViewModel ) - return ComposeView(activity).apply { setContent { WearAppPermissionGroupsScreen(helper) } } + return ComposeView(activity).apply { + setContent { WearPermissionTheme { WearAppPermissionGroupsScreen(helper) } } + } } override fun onPause() { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt index 0ccde86be..94f0b0d07 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt @@ -142,25 +142,27 @@ class WearAppPermissionGroupsHelper( ): String { val grantSummary = getGrantSummary(category, groupUiInfo)?.let { context.getString(it) } ?: "" - if (!Flags.wearPrivacyDashboardEnabled()) { - return grantSummary - } - val accessSummary = - viewModel.getPreferenceSummary(groupUiInfo, context, lastAccessTime).let { + val summary = StringBuilder(grantSummary) + if (Flags.wearPrivacyDashboardEnabled()) { + WearUtils.getPreferenceSummary(context, lastAccessTime).let { if (it.isNotEmpty()) { - System.lineSeparator() + it - } else { - it + summary.append(System.lineSeparator()).append(it) } } - return grantSummary + accessSummary + } + return summary.toString() } private fun getGrantSummary(category: Category?, groupUiInfo: GroupUiInfo): Int? { val subtitle = groupUiInfo.subtitle if (category != null) { when (category) { - Category.ALLOWED -> return R.string.allowed_header + Category.ALLOWED -> + return if (subtitle == PermSubtitle.BACKGROUND) { + R.string.allowed_always_header + } else { + R.string.allowed_header + } Category.ASK -> return R.string.ask_header Category.DENIED -> return R.string.denied_header else -> { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt index bec633fe7..ccbd51f7d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt @@ -52,7 +52,7 @@ fun WearAppPermissionScreen( onAdvancedConfirmDialogOkButtonClick: (AdvancedConfirmDialogArgs) -> Unit, onAdvancedConfirmDialogCancelButtonClick: () -> Unit ) { - val buttonState = viewModel.buttonStateLiveData.observeAsState(emptyMap()) + val buttonState = viewModel.buttonStateLiveData.observeAsState(null) val detailResIds = viewModel.detailResIdLiveData.observeAsState(null) val admin = viewModel.showAdminSupportLiveData.observeAsState(null) var isLoading by remember { mutableStateOf(true) } @@ -84,7 +84,7 @@ fun WearAppPermissionScreen( onCancelButtonClick = onAdvancedConfirmDialogCancelButtonClick ) } - if (isLoading && buttonState.value.isNotEmpty()) { + if (isLoading && !buttonState.value.isNullOrEmpty()) { isLoading = false } } @@ -92,7 +92,7 @@ fun WearAppPermissionScreen( @Composable internal fun WearAppPermissionContent( title: String, - buttonState: Map<ButtonType, ButtonState>, + buttonState: Map<ButtonType, ButtonState>?, detailResIds: Pair<Int, Int?>?, admin: RestrictedLockUtils.EnforcedAdmin?, isLoading: Boolean, @@ -101,7 +101,7 @@ internal fun WearAppPermissionContent( onFooterClicked: (RestrictedLockUtils.EnforcedAdmin) -> Unit ) { ScrollableScreen(title = title, isLoading = isLoading) { - buttonState[ButtonType.LOCATION_ACCURACY]?.let { + buttonState?.get(ButtonType.LOCATION_ACCURACY)?.let { if (it.isShown) { item { ToggleChip( @@ -116,7 +116,7 @@ internal fun WearAppPermissionContent( } } for (buttonType in buttonTypeOrder) { - buttonState[buttonType]?.let { + buttonState?.get(buttonType)?.let { if (it.isShown) { item { ToggleChip( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt index 266159733..a9e83919f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt @@ -26,6 +26,7 @@ import androidx.lifecycle.ViewModelProvider import com.android.permissioncontroller.Constants import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment import com.android.permissioncontroller.permission.ui.model.ManageCustomPermissionsViewModel +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme class WearManageCustomPermissionsFragment : Fragment() { override fun onCreateView( @@ -52,7 +53,11 @@ class WearManageCustomPermissionsFragment : Fragment() { } return ComposeView(activity).apply { - setContent { WearManageCustomPermissionScreen(viewModel, onPermGroupClick) } + setContent { + WearPermissionTheme { + WearManageCustomPermissionScreen(viewModel, onPermGroupClick) + } + } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt index a33c71975..16ed1f067 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt @@ -27,6 +27,7 @@ import com.android.permissioncontroller.Constants import com.android.permissioncontroller.permission.ui.handheld.ManageCustomPermissionsFragment import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment import com.android.permissioncontroller.permission.ui.model.ManageStandardPermissionsViewModel +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme class WearManageStandardPermissionsFragment : Fragment() { override fun onCreateView( @@ -63,12 +64,14 @@ class WearManageStandardPermissionsFragment : Fragment() { return ComposeView(activity).apply { setContent { - WearManageStandardPermissionScreen( - viewModel, - onPermGroupClick, - onCustomPermGroupClick, - onAutoRevokeClick - ) + WearPermissionTheme { + WearManageStandardPermissionScreen( + viewModel, + onPermGroupClick, + onCustomPermGroupClick, + onAutoRevokeClick + ) + } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt index 559160b38..539adf4fb 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt @@ -28,7 +28,6 @@ import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissi import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupDescription import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel -import com.android.permissioncontroller.permission.utils.Utils import com.android.settingslib.utils.applications.AppUtils import java.text.Collator import java.util.Random @@ -162,16 +161,7 @@ class WearPermissionAppsHelper( } val summary = if (Flags.wearPrivacyDashboardEnabled()) { - lastAccessTime?.let { - viewModel.getPreferenceSummary( - application.resources, - Utils.getPermissionLastAccessSummaryTimestamp( - lastAccessTime, - application, - permGroupName - ) - ) - } + lastAccessTime?.let { WearUtils.getPreferenceSummary(application, lastAccessTime) } } else { null } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt index 93813de08..30c59760f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt @@ -41,6 +41,7 @@ import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModel. import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.WearUnusedAppsViewModel import com.android.permissioncontroller.permission.ui.wear.model.WearUnusedAppsViewModel.UnusedAppChip +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.settingslib.utils.applications.AppUtils import java.text.Collator @@ -131,7 +132,9 @@ class WearUnusedAppsFragment : Fragment() { updateWearViewModel(false) } - return ComposeView(activity).apply { setContent { WearUnusedAppsScreen(wearViewModel) } } + return ComposeView(activity).apply { + setContent { WearPermissionTheme { WearUnusedAppsScreen(wearViewModel) } } + } } private fun initUnusedAppsMap(): MutableMap<UnusedPeriod, MutableMap<String, UnusedAppChip>> { @@ -145,17 +148,18 @@ class WearUnusedAppsFragment : Fragment() { private fun updatePackages(categorizedPackages: Map<UnusedPeriod, List<UnusedPackageInfo>>) { // Remove stale unused app chips for (period in allPeriods) { - val it: MutableIterator<Map.Entry<String, UnusedAppChip>> = - unusedAppsMap[period]!!.entries.iterator() - while (it.hasNext()) { - val contains = - categorizedPackages[period]?.any { (pkgName, user, _) -> - val key = createKey(pkgName, user) - it.next().key == key - } - if (contains != true) { - it.remove() - } + val unUsedAppsInAPeriod = unusedAppsMap[period] ?: continue + val categorizedPackagesOfAPeriod = categorizedPackages[period] + if (categorizedPackagesOfAPeriod == null) { + unUsedAppsInAPeriod.clear() + continue + } + val categorizedPackageKeys = + categorizedPackagesOfAPeriod.map { createKey(it.packageName, it.user) } + // Do not remove apps that are still in the unused category + val keysToRemove = unUsedAppsInAPeriod.keys.filterNot { it in categorizedPackageKeys } + for (key in keysToRemove) { + unUsedAppsInAPeriod.remove(key) } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt new file mode 100644 index 000000000..53d41f7f0 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.permission.ui.wear + +import android.content.Context +import android.text.format.DateFormat +import androidx.annotation.IntDef +import com.android.permissioncontroller.R +import java.time.ZonedDateTime +import java.time.temporal.ChronoUnit + +object WearUtils { + @Retention(AnnotationRetention.SOURCE) + @IntDef(value = [LAST_24H_TODAY, LAST_24H_YESTERDAY, LAST_7D, NOT_IN_LAST_7D]) + annotation class AppPermsLastAccessType + + const val LAST_24H_TODAY = 1 + const val LAST_24H_YESTERDAY = 2 + const val LAST_7D = 3 + const val NOT_IN_LAST_7D = 4 + + /** Get the preference summary in app permission groups and permission apps screens for Wear. */ + @JvmStatic + fun getPreferenceSummary(context: Context, lastAccessTime: Long?): String { + val summaryTimestamp = getPermissionLastAccessSummaryTimestamp(lastAccessTime, context) + val res = context.resources + return when (summaryTimestamp.second) { + LAST_24H_TODAY -> + res.getString(R.string.wear_app_perms_24h_access, summaryTimestamp.first) + LAST_24H_YESTERDAY -> + res.getString(R.string.wear_app_perms_24h_access_yest, summaryTimestamp.first) + LAST_7D -> + res.getString( + R.string.wear_app_perms_7d_access, + summaryTimestamp.third, + summaryTimestamp.first + ) + else -> "" + } + } + + @JvmStatic + private fun getPermissionLastAccessSummaryTimestamp( + lastAccessTime: Long?, + context: Context + ): Triple<String, Int, String> { + val midnightToday = + (ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).toEpochSecond() * 1000L) + val midnightYesterday = + ZonedDateTime.now().minusDays(1).truncatedTo(ChronoUnit.DAYS).toEpochSecond() * 1000L + val isLastAccessToday = (lastAccessTime != null && midnightToday <= lastAccessTime) + val isLastAccessTodayOrYesterday = + (lastAccessTime != null && midnightYesterday <= lastAccessTime) + var lastAccessTimeFormatted = "" + var lastAccessDateFormatted = "" + @AppPermsLastAccessType var lastAccessType = NOT_IN_LAST_7D + if (lastAccessTime != null) { + lastAccessTimeFormatted = DateFormat.getTimeFormat(context).format(lastAccessTime) + lastAccessDateFormatted = DateFormat.getDateFormat(context).format(lastAccessTime) + lastAccessType = + if (isLastAccessToday) LAST_24H_TODAY + else if (isLastAccessTodayOrYesterday) LAST_24H_YESTERDAY else LAST_7D + } + return Triple(lastAccessTimeFormatted, lastAccessType, lastAccessDateFormatted) + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AlertDialog.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AlertDialog.kt index 06d8acaba..d0bbe25f6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AlertDialog.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AlertDialog.kt @@ -16,16 +16,28 @@ package com.android.permissioncontroller.permission.ui.wear.elements +import androidx.compose.foundation.focusable +import androidx.compose.foundation.gestures.animateScrollBy +import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.layout.PaddingValues import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Close import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.rotary.onRotaryScrollEvent +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.repeatOnLifecycle import androidx.wear.compose.foundation.lazy.ScalingLazyListState import androidx.wear.compose.material.ButtonDefaults import androidx.wear.compose.material.Icon @@ -33,6 +45,7 @@ import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.Text import androidx.wear.compose.material.dialog.Alert import androidx.wear.compose.material.dialog.Dialog +import kotlinx.coroutines.launch /** * This component is an alternative to [Alert], providing the following: @@ -41,7 +54,7 @@ import androidx.wear.compose.material.dialog.Dialog * - wrapped in a [Dialog]; */ @Composable -public fun AlertDialog( +fun AlertDialog( message: String, iconRes: Int? = null, onCancelButtonClick: () -> Unit, @@ -117,7 +130,19 @@ internal fun Alert( okButtonContentDescription: String, cancelButtonContentDescription: String ) { + val focusRequester = remember { FocusRequester() } + val coroutineScope = rememberCoroutineScope() Alert( + modifier = + Modifier.onRotaryScrollEvent { + coroutineScope.launch { + scrollState.scrollBy(it.verticalScrollPixels) + scrollState.animateScrollBy(0f) + } + true + } + .focusRequester(focusRequester) + .focusable(), contentPadding = DefaultContentPadding(), scrollState = scrollState, title = { AlertTitleText(title) }, @@ -126,6 +151,17 @@ internal fun Alert( negativeButton = { NegativeButton(onCancelButtonClick, cancelButtonContentDescription) }, positiveButton = { PositiveButton(onOKButtonClick, okButtonContentDescription) } ) + RequestFocusOnResume(focusRequester = focusRequester) +} + +@Composable +private fun RequestFocusOnResume(focusRequester: FocusRequester) { + val lifecycleOwner = LocalLifecycleOwner.current + LaunchedEffect(Unit) { + lifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.RESUMED) { + focusRequester.requestFocus() + } + } } @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/Chip.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/Chip.kt index abdbe4baf..bf9ebbadd 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/Chip.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/Chip.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -232,7 +233,8 @@ public fun Chip( icon = icon, colors = colors, enabled = enabled, - contentPadding = contentPadding + contentPadding = contentPadding, + shape = RoundedCornerShape(26.dp) ) } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ListHeader.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ListHeader.kt index cd5f3eb8f..0afbb05fe 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ListHeader.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ListHeader.kt @@ -67,7 +67,6 @@ fun ListHeader( modifier = modifier .defaultMinSize(minHeight = ListHeaderDefaults.Height) - .height(IntrinsicSize.Min) .wrapContentSize() .background(backgroundColor) .padding(contentPadding) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt index df7a56464..47b5e2ad1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt @@ -22,6 +22,7 @@ import android.content.ContextWrapper import android.graphics.drawable.Drawable import androidx.compose.foundation.Image import androidx.compose.foundation.focusable +import androidx.compose.foundation.gestures.animateScrollBy import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -42,6 +43,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.input.rotary.onRotaryScrollEvent import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.testTag @@ -49,13 +51,16 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle +import androidx.wear.compose.foundation.SwipeToDismissValue import androidx.wear.compose.foundation.lazy.ScalingLazyColumn import androidx.wear.compose.foundation.lazy.ScalingLazyListScope import androidx.wear.compose.foundation.lazy.ScalingLazyListState +import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState import androidx.wear.compose.material.CircularProgressIndicator import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.PositionIndicator @@ -66,6 +71,7 @@ import androidx.wear.compose.material.TimeText import androidx.wear.compose.material.Vignette import androidx.wear.compose.material.VignettePosition import androidx.wear.compose.material.scrollAway +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import kotlinx.coroutines.launch /** @@ -87,30 +93,30 @@ fun ScrollableScreen( ) { var dismissed by remember { mutableStateOf(false) } val activity = LocalContext.current.findActivity() + val state = rememberSwipeToDismissBoxState() + + LaunchedEffect(state.currentValue) { + if (state.currentValue == SwipeToDismissValue.Dismissed) { + dismiss(activity) + dismissed = true + state.snapTo(SwipeToDismissValue.Default) + } + } // To support Swipe-dismiss effect, // add the view to SwipeToDismissBox if the screen is not on the top fragment. if (getBackStackEntryCount(activity) > 0) { - SwipeToDismissBox( - onDismissed = { - dismiss(activity) - dismissed = true - } - ) { isBackground -> - if (isBackground || dismissed) { - Box(modifier = Modifier.fillMaxSize()) - } else { - Scaffold( - showTimeText, - title, - subtitle, - image, - isLoading, - content, - titleTestTag, - subtitleTestTag - ) - } + SwipeToDismissBox(state = state) { isBackground -> + Scaffold( + showTimeText, + title, + subtitle, + image, + isLoading = isLoading || isBackground || dismissed, + content, + titleTestTag, + subtitleTestTag + ) } } else { Scaffold( @@ -138,15 +144,24 @@ internal fun Scaffold( titleTestTag: String? = null, subtitleTestTag: String? = null, ) { + val initialCenterIndex = 0 + val scrollContentTopPadding = 32.dp + val centerHeightDp = Dp(LocalConfiguration.current.screenHeightDp / 2.0f) + val initialCenterItemScrollOffset = scrollContentTopPadding + 10.dp + val scrollAwayOffset = centerHeightDp - initialCenterItemScrollOffset + val focusRequester = remember { FocusRequester() } - val listState = remember { ScalingLazyListState(initialCenterItemIndex = 0) } + val listState = remember { ScalingLazyListState(initialCenterItemIndex = initialCenterIndex) } val coroutineScope = rememberCoroutineScope() - MaterialTheme { + WearPermissionTheme { Scaffold( modifier = Modifier.onRotaryScrollEvent { - coroutineScope.launch { listState.scrollBy(it.verticalScrollPixels) } + coroutineScope.launch { + listState.scrollBy(it.verticalScrollPixels) + listState.animateScrollBy(0f) + } true } .focusRequester(focusRequester) @@ -155,8 +170,9 @@ internal fun Scaffold( timeText = { if (showTimeText && !isLoading) { TimeText( - modifier = Modifier.scrollAway(listState), - contentPadding = PaddingValues(15.dp) + modifier = + Modifier.scrollAway(listState, initialCenterIndex, scrollAwayOffset), + contentPadding = PaddingValues(5.dp) ) } }, @@ -173,7 +189,12 @@ internal fun Scaffold( // content. autoCentering = null, contentPadding = - PaddingValues(start = 10.dp, end = 10.dp, top = 32.dp, bottom = 70.dp) + PaddingValues( + start = 10.dp, + end = 10.dp, + top = scrollContentTopPadding, + bottom = 70.dp + ) ) { image?.let { val imageModifier = Modifier.size(24.dp) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt new file mode 100644 index 000000000..e7947fd5c --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt @@ -0,0 +1,55 @@ +package com.android.permissioncontroller.permission.ui.wear.theme + +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.annotation.VisibleForTesting +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.wear.compose.material.Colors +import androidx.wear.compose.material.MaterialTheme + +/** The Material 3 Theme Wrapper for Supporting RRO. */ +@Composable +fun WearPermissionTheme(content: @Composable () -> Unit) { + val context = LocalContext.current + val colors = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + overlayColors(context) + .copy(error = MaterialTheme.colors.error, onError = MaterialTheme.colors.onError) + } else { + MaterialTheme.colors + } + MaterialTheme(colors = colors, content = content) +} + +/** + * Creates a dynamic color maps that can be overlaid. 100 - Lightest shade; 0 - Darkest Shade; In + * wear we only support dark theme for the time being. Thus the fill colors and variants are dark + * and anything on top is light. We will use this custom redirection until wear compose material + * supports color scheming. + * + * The mapping is best case match on wear material color tokens from + * /android/clockwork/common/wearable/wearmaterial/color/res/values/color-tokens.xml + * + * @param context The context required to get system resource data. + */ +@RequiresApi(Build.VERSION_CODES.S) +@VisibleForTesting +internal fun overlayColors(context: Context): Colors { + val tonalPalette = dynamicTonalPalette(context) + return Colors( + background = Color.Black, + onBackground = Color.White, + primary = tonalPalette.primary90, + primaryVariant = tonalPalette.primary80, + onPrimary = tonalPalette.primary10, + secondary = tonalPalette.tertiary90, + secondaryVariant = tonalPalette.tertiary60, + onSecondary = tonalPalette.tertiary10, + surface = tonalPalette.neutral20, + onSurface = tonalPalette.neutral95, + onSurfaceVariant = tonalPalette.neutralVariant80, + ) +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt new file mode 100644 index 000000000..a86af8b3d --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt @@ -0,0 +1,191 @@ +@file:Suppress("unused") + +package com.android.permissioncontroller.permission.ui.wear.theme + +import android.R +import android.content.Context +import android.os.Build +import androidx.annotation.ColorRes +import androidx.annotation.DoNotInline +import androidx.annotation.RequiresApi +import androidx.compose.ui.graphics.Color + +/** + * Tonal Palette structure in Material. + * + * A tonal palette is comprised of 5 tonal ranges. Each tonal range includes the 13 stops, or tonal + * swatches. + * + * Tonal range names are: + * - Neutral (N) + * - Neutral variant (NV) + * - Primary (P) + * - Secondary (S) + * - Tertiary (T) + */ +internal class WearPermissionTonalPalette( + // The neutral tonal range. + val neutral100: Color, + val neutral99: Color, + val neutral95: Color, + val neutral90: Color, + val neutral80: Color, + val neutral70: Color, + val neutral60: Color, + val neutral50: Color, + val neutral40: Color, + val neutral30: Color, + val neutral20: Color, + val neutral10: Color, + val neutral0: Color, + + // The neutral variant tonal range, sometimes called "neutral 2" + val neutralVariant100: Color, + val neutralVariant99: Color, + val neutralVariant95: Color, + val neutralVariant90: Color, + val neutralVariant80: Color, + val neutralVariant70: Color, + val neutralVariant60: Color, + val neutralVariant50: Color, + val neutralVariant40: Color, + val neutralVariant30: Color, + val neutralVariant20: Color, + val neutralVariant10: Color, + val neutralVariant0: Color, + + // The primary tonal range, also known as accent 1 + val primary100: Color, + val primary99: Color, + val primary95: Color, + val primary90: Color, + val primary80: Color, + val primary70: Color, + val primary60: Color, + val primary50: Color, + val primary40: Color, + val primary30: Color, + val primary20: Color, + val primary10: Color, + val primary0: Color, + + // The Secondary tonal range, also know as accent 2 + val secondary100: Color, + val secondary99: Color, + val secondary95: Color, + val secondary90: Color, + val secondary80: Color, + val secondary70: Color, + val secondary60: Color, + val secondary50: Color, + val secondary40: Color, + val secondary30: Color, + val secondary20: Color, + val secondary10: Color, + val secondary0: Color, + + // The tertiary tonal range, also known as accent 3 + val tertiary100: Color, + val tertiary99: Color, + val tertiary95: Color, + val tertiary90: Color, + val tertiary80: Color, + val tertiary70: Color, + val tertiary60: Color, + val tertiary50: Color, + val tertiary40: Color, + val tertiary30: Color, + val tertiary20: Color, + val tertiary10: Color, + val tertiary0: Color, +) +/** Dynamic colors for wear compose material to support resource overlay. */ +@RequiresApi(Build.VERSION_CODES.S) +// TODO: once we have proper support for this on Wear 6+, we will do something similar to +// https://source.corp.google.com/h/android/platform/superproject/+/androidx-main:frameworks/support/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/DynamicTonalPalette.android.kt;l=307-362?q=dynamicTonalPalette&sq=repo:android%2Fplatform%2Fsuperproject%20b:androidx-main +// Tracking Bug: b/270720571 +internal fun dynamicTonalPalette(context: Context) = + WearPermissionTonalPalette( + // The neutral tonal range from the generated dynamic color palette. + neutral100 = ColorResourceHelper.getColor(context, R.color.system_neutral1_0), + neutral99 = ColorResourceHelper.getColor(context, R.color.system_neutral1_10), + neutral95 = ColorResourceHelper.getColor(context, R.color.system_neutral1_50), + neutral90 = ColorResourceHelper.getColor(context, R.color.system_neutral1_100), + neutral80 = ColorResourceHelper.getColor(context, R.color.system_neutral1_200), + neutral70 = ColorResourceHelper.getColor(context, R.color.system_neutral1_300), + neutral60 = ColorResourceHelper.getColor(context, R.color.system_neutral1_400), + neutral50 = ColorResourceHelper.getColor(context, R.color.system_neutral1_500), + neutral40 = ColorResourceHelper.getColor(context, R.color.system_neutral1_600), + neutral30 = ColorResourceHelper.getColor(context, R.color.system_neutral1_700), + neutral20 = ColorResourceHelper.getColor(context, R.color.system_neutral1_800), + neutral10 = ColorResourceHelper.getColor(context, R.color.system_neutral1_900), + neutral0 = ColorResourceHelper.getColor(context, R.color.system_neutral1_1000), + + // The neutral variant tonal range, sometimes called "neutral 2", from the + // generated dynamic color palette. + neutralVariant100 = ColorResourceHelper.getColor(context, R.color.system_neutral2_0), + neutralVariant99 = ColorResourceHelper.getColor(context, R.color.system_neutral2_10), + neutralVariant95 = ColorResourceHelper.getColor(context, R.color.system_neutral2_50), + neutralVariant90 = ColorResourceHelper.getColor(context, R.color.system_neutral2_100), + neutralVariant80 = ColorResourceHelper.getColor(context, R.color.system_neutral2_200), + neutralVariant70 = ColorResourceHelper.getColor(context, R.color.system_neutral2_300), + neutralVariant60 = ColorResourceHelper.getColor(context, R.color.system_neutral2_400), + neutralVariant50 = ColorResourceHelper.getColor(context, R.color.system_neutral2_500), + neutralVariant40 = ColorResourceHelper.getColor(context, R.color.system_neutral2_600), + neutralVariant30 = ColorResourceHelper.getColor(context, R.color.system_neutral2_700), + neutralVariant20 = ColorResourceHelper.getColor(context, R.color.system_neutral2_800), + neutralVariant10 = ColorResourceHelper.getColor(context, R.color.system_neutral2_900), + neutralVariant0 = ColorResourceHelper.getColor(context, R.color.system_neutral2_1000), + + // The primary tonal range from the generated dynamic color palette. + primary100 = ColorResourceHelper.getColor(context, R.color.system_accent1_0), + primary99 = ColorResourceHelper.getColor(context, R.color.system_accent1_10), + primary95 = ColorResourceHelper.getColor(context, R.color.system_accent1_50), + primary90 = ColorResourceHelper.getColor(context, R.color.system_accent1_100), + primary80 = ColorResourceHelper.getColor(context, R.color.system_accent1_200), + primary70 = ColorResourceHelper.getColor(context, R.color.system_accent1_300), + primary60 = ColorResourceHelper.getColor(context, R.color.system_accent1_400), + primary50 = ColorResourceHelper.getColor(context, R.color.system_accent1_500), + primary40 = ColorResourceHelper.getColor(context, R.color.system_accent1_600), + primary30 = ColorResourceHelper.getColor(context, R.color.system_accent1_700), + primary20 = ColorResourceHelper.getColor(context, R.color.system_accent1_800), + primary10 = ColorResourceHelper.getColor(context, R.color.system_accent1_900), + primary0 = ColorResourceHelper.getColor(context, R.color.system_accent1_1000), + + // The secondary tonal range from the generated dynamic color palette. + secondary100 = ColorResourceHelper.getColor(context, R.color.system_accent2_0), + secondary99 = ColorResourceHelper.getColor(context, R.color.system_accent2_10), + secondary95 = ColorResourceHelper.getColor(context, R.color.system_accent2_50), + secondary90 = ColorResourceHelper.getColor(context, R.color.system_accent2_100), + secondary80 = ColorResourceHelper.getColor(context, R.color.system_accent2_200), + secondary70 = ColorResourceHelper.getColor(context, R.color.system_accent2_300), + secondary60 = ColorResourceHelper.getColor(context, R.color.system_accent2_400), + secondary50 = ColorResourceHelper.getColor(context, R.color.system_accent2_500), + secondary40 = ColorResourceHelper.getColor(context, R.color.system_accent2_600), + secondary30 = ColorResourceHelper.getColor(context, R.color.system_accent2_700), + secondary20 = ColorResourceHelper.getColor(context, R.color.system_accent2_800), + secondary10 = ColorResourceHelper.getColor(context, R.color.system_accent2_900), + secondary0 = ColorResourceHelper.getColor(context, R.color.system_accent2_1000), + + // The tertiary tonal range from the generated dynamic color palette. + tertiary100 = ColorResourceHelper.getColor(context, R.color.system_accent3_0), + tertiary99 = ColorResourceHelper.getColor(context, R.color.system_accent3_10), + tertiary95 = ColorResourceHelper.getColor(context, R.color.system_accent3_50), + tertiary90 = ColorResourceHelper.getColor(context, R.color.system_accent3_100), + tertiary80 = ColorResourceHelper.getColor(context, R.color.system_accent3_200), + tertiary70 = ColorResourceHelper.getColor(context, R.color.system_accent3_300), + tertiary60 = ColorResourceHelper.getColor(context, R.color.system_accent3_400), + tertiary50 = ColorResourceHelper.getColor(context, R.color.system_accent3_500), + tertiary40 = ColorResourceHelper.getColor(context, R.color.system_accent3_600), + tertiary30 = ColorResourceHelper.getColor(context, R.color.system_accent3_700), + tertiary20 = ColorResourceHelper.getColor(context, R.color.system_accent3_800), + tertiary10 = ColorResourceHelper.getColor(context, R.color.system_accent3_900), + tertiary0 = ColorResourceHelper.getColor(context, R.color.system_accent3_1000), + ) + +private object ColorResourceHelper { + @DoNotInline + fun getColor(context: Context, @ColorRes id: Int): Color { + return Color(context.resources.getColor(id, context.theme)) + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java index ad384cca7..2c36c0adc 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java @@ -392,6 +392,8 @@ public final class Utils { /* do nothing - hide constructor */ } + private static Object sLock = new Object(); + private static ArrayMap<UserHandle, Context> sUserContexts = new ArrayMap<>(); /** @@ -406,11 +408,13 @@ public final class Utils { * @throws RuntimeException If the app has no package name attached, which should never happen */ public static @NonNull Context getUserContext(Context context, UserHandle user) { - if (!sUserContexts.containsKey(user)) { - sUserContexts.put(user, context.getApplicationContext() - .createContextAsUser(user, 0)); + synchronized (sLock) { + if (!sUserContexts.containsKey(user)) { + sUserContexts.put(user, context.getApplicationContext() + .createContextAsUser(user, 0)); + } + return Preconditions.checkNotNull(sUserContexts.get(user)); } - return Preconditions.checkNotNull(sUserContexts.get(user)); } /** diff --git a/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt b/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt index da20727c5..c633c013a 100644 --- a/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt +++ b/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt @@ -76,8 +76,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -@VisibleForTesting -const val PROPERTY_SC_ACCESSIBILITY_SOURCE_ENABLED = "sc_accessibility_source_enabled" const val PROPERTY_SC_ACCESSIBILITY_LISTENER_ENABLED = "sc_accessibility_listener_enabled" const val SC_ACCESSIBILITY_SOURCE_ID = "AndroidAccessibility" const val SC_ACCESSIBILITY_REMOVE_ACCESS_ACTION_ID = "revoke_accessibility_app_access" @@ -88,14 +86,6 @@ private fun isAccessibilitySourceSupported(): Boolean { return SdkLevel.isAtLeastT() } -fun isAccessibilitySourceEnabled(): Boolean { - return DeviceConfig.getBoolean( - DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_SC_ACCESSIBILITY_SOURCE_ENABLED, - true - ) -} - /** cts test needs to disable the listener. */ fun isAccessibilityListenerEnabled(): Boolean { return DeviceConfig.getBoolean( @@ -907,11 +897,8 @@ class AccessibilityJobService : JobService() { Log.i(LOG_TAG, "Accessibility privacy source job already running") return false } - if ( - !isAccessibilitySourceEnabled() || - !isSafetyCenterEnabled(this@AccessibilityJobService) - ) { - Log.i(LOG_TAG, "either privacy source or safety center is not enabled") + if (!isSafetyCenterEnabled(this@AccessibilityJobService)) { + Log.i(LOG_TAG, "safety center is not enabled") jobFinished(params, false) mCurrentJob = null return false @@ -964,9 +951,7 @@ class SafetyCenterAccessibilityListener(val context: Context) : return } - if ( - !isAccessibilitySourceEnabled() || !isSafetyCenterEnabled(context) || isProfile(context) - ) { + if (!isSafetyCenterEnabled(context) || isProfile(context)) { Log.i(LOG_TAG, "accessibility event occurred, safety center feature not enabled.") return } diff --git a/PermissionController/src/com/android/permissioncontroller/role/Role.md b/PermissionController/src/com/android/permissioncontroller/role/Role.md index bde9f86f0..acdfffb50 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/Role.md +++ b/PermissionController/src/com/android/permissioncontroller/role/Role.md @@ -65,6 +65,10 @@ title. This attribute is required if the role is `visible`. Android S. This attribute is optional and defaults to `Build.VERSION_CODES.CUR_DEVELOPMENT`. - `minSdkVersion`: The minimum SDK version for the role to be available (inclusive), e.g. `31` for Android S. This attribute is optional and defaults to `Build.VERSION_CODES.BASE`. +- `onlyGrantWhenAdded`: Whether the role should only grant privileges when a role holder is actively +added. This attribute is optional and defaults to `false`. +- `overrideUserWhenGranting`: Whether the role should override user's choice about privileges when +granting. This attribute is optional and defaults to `false`. - `requestDescription`: The string resource for the description in the request role dialog, e.g. `@string/role_sms_request_description`, which says "Gets access to contacts, SMS, phone". This description should describe to the user the privileges that are going to be granted, and should not diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/ChangeDefaultCardEmulationActivity.java b/PermissionController/src/com/android/permissioncontroller/role/ui/ChangeDefaultCardEmulationActivity.java new file mode 100644 index 000000000..882d01c56 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/ChangeDefaultCardEmulationActivity.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.role.ui; + +import android.app.Activity; +import android.app.role.RoleManager; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.nfc.cardemulation.CardEmulation; +import android.os.Bundle; +import android.os.Process; +import android.permission.flags.Flags; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.modules.utils.build.SdkLevel; + +import java.util.List; +import java.util.Objects; + +/** + * Activity to handle {@link android.nfc.cardemulation.CardEmulation#ACTION_CHANGE_DEFAULT}. + */ +public class ChangeDefaultCardEmulationActivity extends Activity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent; + if (SdkLevel.isAtLeastV() && Flags.walletRoleEnabled()) { + intent = DefaultAppActivity.createIntent(RoleManager.ROLE_WALLET, + Process.myUserHandle(), this); + } else { + intent = getIntent(); + setDefaultPaymentChangeHandlerDialogComponent(intent); + } + intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); + startActivity(intent); + finish(); + } + + // The only other handler of this intent is in the NFC stack. + private void setDefaultPaymentChangeHandlerDialogComponent(@NonNull Intent intent) { + Intent queryIntent = new Intent(CardEmulation.ACTION_CHANGE_DEFAULT); + PackageManager packageManager = getPackageManager(); + List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(queryIntent, + PackageManager.MATCH_SYSTEM_ONLY); + int resolveInfosSize = resolveInfos.size(); + for (int i = 0; i < resolveInfosSize; i++) { + ResolveInfo resolveInfo = resolveInfos.get(i); + String packageName = resolveInfo.activityInfo.packageName; + if (!Objects.equals(packageName, getPackageName())) { + intent.setClassName(packageName, + resolveInfo.activityInfo.name); + return; + } + } + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java index f9a0193bd..e68fa88a0 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java @@ -191,7 +191,8 @@ public class DefaultAppListChildFragment<PF extends PreferenceFragmentCompat preference.setIcon(Utils.getBadgedIcon(context, holderApplicationInfo)); preference.setSummary(Utils.getAppLabel(holderApplicationInfo, context)); } - RoleUiBehaviorUtils.preparePreferenceAsUser(role, rolePreference, user, context); + RoleUiBehaviorUtils.preparePreferenceAsUser(role, holderApplicationInfos, + rolePreference, user, context); preferenceGroup.addPreference(preference); } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java index 323325d0b..0142e1c40 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java @@ -38,6 +38,8 @@ import com.android.permissioncontroller.role.ui.TwoTargetPreference; import com.android.permissioncontroller.role.utils.UserUtils; import com.android.role.controller.model.Role; +import java.util.List; + /*** * Class for UI behavior of Home role */ @@ -47,7 +49,8 @@ public class HomeRoleUiBehavior implements RoleUiBehavior { @Override public void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, - @NonNull UserHandle user, @NonNull Context context) { + @NonNull List<ApplicationInfo> applicationInfos, @NonNull UserHandle user, + @NonNull Context context) { TwoTargetPreference.OnSecondTargetClickListener listener = null; RoleManager roleManager = context.getSystemService(RoleManager.class); String packageName = CollectionUtils.firstOrNull(roleManager.getRoleHoldersAsUser( 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 29dc5d2fc..0a8f9113f 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java @@ -28,6 +28,8 @@ import androidx.preference.Preference; import com.android.permissioncontroller.role.ui.TwoTargetPreference; import com.android.role.controller.model.Role; +import java.util.List; + /*** * Interface for UI behavior for roles */ @@ -53,11 +55,13 @@ public interface RoleUiBehavior { * * @param role the role to prepare the preference for * @param preference the {@link Preference} for this role + * @param applicationInfos a list {@link ApplicationInfo} for the current role holders * @param user the user for this role * @param context the {@code Context} to retrieve system services */ default void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, + @NonNull List<ApplicationInfo> applicationInfos, @NonNull UserHandle user, @NonNull Context context) {} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/WalletRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/WalletRoleUiBehavior.java new file mode 100644 index 000000000..858621d74 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/WalletRoleUiBehavior.java @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.role.ui.behavior; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; +import android.nfc.cardemulation.ApduServiceInfo; +import android.nfc.cardemulation.CardEmulation; +import android.nfc.cardemulation.HostApduService; +import android.nfc.cardemulation.OffHostApduService; +import android.os.Build; +import android.os.UserHandle; +import android.text.TextUtils; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.core.util.Pair; +import androidx.preference.Preference; + +import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.role.controller.model.Role; +import com.android.role.controller.util.UserUtils; + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/*** + * Class for UI behavior of Wallet role + */ +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +public class WalletRoleUiBehavior implements RoleUiBehavior { + + private static final String LOG_TAG = WalletRoleUiBehavior.class.getSimpleName(); + + @Override + public void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, + @NonNull List<ApplicationInfo> applicationInfos, @NonNull UserHandle user, + @NonNull Context context) { + Context userContext = UserUtils.getUserContext(context, user); + if (!applicationInfos.isEmpty()) { + preparePreferenceInternal(preference.asPreference(), applicationInfos.get(0), + false, user, userContext); + } + } + + @Override + public void prepareApplicationPreferenceAsUser(@NonNull Role role, + @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, + @NonNull UserHandle user, @NonNull Context context) { + Context userContext = UserUtils.getUserContext(context, user); + preparePreferenceInternal(preference, applicationInfo, true, user, userContext); + } + + private void preparePreferenceInternal(@NonNull Preference preference, + @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 = + getNonPaymentServiceBannerAndLabelIfExists(serviceInfos, user, context); + if (bannerAndLabel != null) { + preference.setIcon(bannerAndLabel.first); + if (setTitle) { + preference.setTitle(bannerAndLabel.second); + } else { + preference.setSummary(bannerAndLabel.second); + } + } + } + } + + @NonNull + private static List<ApduServiceInfo> getNfcServicesForPackage(@NonNull String packageName, + @NonNull UserHandle user, @NonNull Context context) { + PackageManager packageManager = context.getPackageManager(); + Intent hostApduIntent = new Intent(HostApduService.SERVICE_INTERFACE); + Intent offHostApduIntent = new Intent(OffHostApduService.SERVICE_INTERFACE); + hostApduIntent.setPackage(packageName); + offHostApduIntent.setPackage(packageName); + List<ResolveInfo> hostApduServices = packageManager.queryIntentServicesAsUser( + hostApduIntent, + PackageManager.ResolveInfoFlags.of(PackageManager.GET_META_DATA), user); + List<ResolveInfo> offHostApduServices = packageManager.queryIntentServicesAsUser( + offHostApduIntent, + PackageManager.ResolveInfoFlags.of(PackageManager.GET_META_DATA), user); + List<ApduServiceInfo> nfcServices = new ArrayList<>(); + int apduServiceInfoSize = hostApduServices.size(); + for (int i = 0; i < apduServiceInfoSize; i++) { + ResolveInfo resolveInfo = hostApduServices.get(i); + ApduServiceInfo apduServiceInfo; + try { + apduServiceInfo = new ApduServiceInfo(packageManager, resolveInfo, true); + } catch (XmlPullParserException | IOException e) { + Log.e(LOG_TAG, "Error creating the apduserviceinfo.", e); + continue; + } + nfcServices.add(apduServiceInfo); + } + int offHostApduServiceInfoSize = offHostApduServices.size(); + for (int i = 0; i < offHostApduServiceInfoSize; i++) { + ResolveInfo resolveInfo = offHostApduServices.get(i); + ApduServiceInfo apduServiceInfo; + try { + apduServiceInfo = new ApduServiceInfo(packageManager, resolveInfo, false); + } catch (XmlPullParserException | IOException e) { + Log.e(LOG_TAG, "Error creating the apduserviceinfo.", e); + continue; + } + nfcServices.add(apduServiceInfo); + } + return nfcServices; + } + + @Nullable + private Pair<Drawable, CharSequence> getNonPaymentServiceBannerAndLabelIfExists( + @NonNull List<ApduServiceInfo> apduServiceInfos, @NonNull UserHandle user, + @NonNull Context context) { + Context userContext = UserUtils.getUserContext(context, user); + PackageManager userPackageManager = userContext.getPackageManager(); + Pair<Drawable, CharSequence> bannerAndLabel; + int apduServiceInfoSize = apduServiceInfos.size(); + for (int i = 0; i < apduServiceInfoSize; i++) { + ApduServiceInfo serviceInfo = apduServiceInfos.get(i); + if (serviceInfo.getAids().isEmpty()) { + bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager); + if (bannerAndLabel != null) { + return bannerAndLabel; + } + } else { + List<String> aids = serviceInfo.getAids(); + int aidsSize = aids.size(); + for (int j = 0; j < aidsSize; j++) { + String aid = aids.get(j); + String category = serviceInfo.getCategoryForAid(aid); + if (!CardEmulation.CATEGORY_PAYMENT.equals(category)) { + bannerAndLabel = loadBannerAndLabel(serviceInfo, userPackageManager); + if (bannerAndLabel != null) { + return bannerAndLabel; + } + } + } + } + } + return null; + } + + @Nullable + private Pair<Drawable, CharSequence> loadBannerAndLabel(@NonNull ApduServiceInfo info, + @NonNull PackageManager userPackageManager) { + Drawable drawable = info.loadBanner(userPackageManager); + CharSequence label = info.loadLabel(userPackageManager); + if (drawable != null && !TextUtils.isEmpty(label)) { + return new Pair<>(drawable, label); + } else { + return null; + } + } + + private static boolean isSystemApplication(@NonNull ApplicationInfo applicationInfo) { + return (applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java index 4b256cef0..b06904930 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java @@ -115,7 +115,8 @@ public class SpecialAppAccessListChildFragment<PF extends PreferenceFragmentComp } else { preference = rolePreference.asPreference(); } - RoleUiBehaviorUtils.preparePreferenceAsUser(role, rolePreference, + RoleUiBehaviorUtils.preparePreferenceAsUser(role, roleItem.getHolderApplicationInfos(), + rolePreference, Process.myUserHandle(), context); preferenceScreen.addPreference(preference); diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt index 51eb7d40d..156656e33 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.platform.ComposeView import androidx.core.os.BundleCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import com.android.permissioncontroller.permission.ui.wear.setContent +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.role.ui.DefaultAppViewModel import com.android.permissioncontroller.role.ui.ManageRoleHolderStateLiveData import com.android.permissioncontroller.role.ui.wear.model.DefaultAppConfirmDialogViewModel @@ -75,9 +75,17 @@ class WearDefaultAppFragment : Fragment() { return ComposeView(activity).apply { setContent { - WearDefaultAppScreen( - WearDefaultAppHelper(activity, user, role, viewModel, confirmDialogViewModel) - ) + WearPermissionTheme { + WearDefaultAppScreen( + WearDefaultAppHelper( + activity, + user, + role, + viewModel, + confirmDialogViewModel + ) + ) + } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListHelper.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListHelper.kt index 5e8a2f9ad..bbcedea53 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListHelper.kt @@ -61,6 +61,7 @@ class WearDefaultAppListHelper(val context: Context, val user: UserHandle) { .let { RoleUiBehaviorUtils.preparePreferenceAsUser( roleItem.role, + roleItem.holderApplicationInfos, it, user, context diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java index 7ebc1ebd1..5114af536 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java +++ b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java @@ -33,6 +33,8 @@ import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreference; import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior; import com.android.role.controller.model.Role; +import java.util.List; + /** * Utility methods for Role UI behavior */ @@ -78,15 +80,15 @@ public final class RoleUiBehaviorUtils { * @see RoleUiBehavior#preparePreferenceAsUser */ public static void preparePreferenceAsUser(@NonNull Role role, - @NonNull RolePreference preference, @NonNull UserHandle user, - @NonNull Context context) { + @NonNull List<ApplicationInfo> applicationInfos, @NonNull RolePreference preference, + @NonNull UserHandle user, @NonNull Context context) { prepareUserRestrictionAwarePreferenceAsUser(role, preference, user, context); RoleUiBehavior uiBehavior = getUiBehavior(role); if (uiBehavior == null) { return; } - uiBehavior.preparePreferenceAsUser(role, preference, user, context); + uiBehavior.preparePreferenceAsUser(role, preference, applicationInfos, user, context); } /** diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt index 6f146e48c..9feecf5d4 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterFragment.kt @@ -92,7 +92,7 @@ abstract class SafetyCenterFragment : PreferenceFragmentCompat() { } val safetyCenterIntent: ParsedSafetyCenterIntent = - requireActivity().getIntent().toSafetyCenterIntent() + requireActivity().intent.toSafetyCenterIntent() val isQsFragment = getArguments()?.getBoolean(QUICK_SETTINGS_SAFETY_CENTER_FRAGMENT, false) ?: false collapsableIssuesCardHelper = @@ -120,7 +120,7 @@ abstract class SafetyCenterFragment : PreferenceFragmentCompat() { override fun onStart() { super.onStart() configureInteractionLogger() - safetyCenterViewModel.interactionLogger.record(Action.SAFETY_CENTER_VIEWED) + logSafetyCenterViewedEvent() } override fun onResume() { @@ -162,6 +162,26 @@ abstract class SafetyCenterFragment : PreferenceFragmentCompat() { abstract fun configureInteractionLogger() + private fun logSafetyCenterViewedEvent() { + // If Safety Center was opened due to an associated notification click (i.e. intent has an + // associated issue), record that issue's metadata on the SAFETY_CENTER_VIEWED event + val maybeIssueKey = requireActivity().intent.toSafetyCenterIntent().safetyCenterIssueKey + val maybeIssue = + maybeIssueKey?.let { + safetyCenterViewModel.getCurrentSafetyCenterDataAsUiData().getMatchingIssue(it) + } + + if (maybeIssue == null) { + safetyCenterViewModel.interactionLogger.record(Action.SAFETY_CENTER_VIEWED) + } else { + safetyCenterViewModel.interactionLogger.recordForIssue( + Action.SAFETY_CENTER_VIEWED, + maybeIssue, + isDismissed = false + ) + } + } + private fun displayErrorDetails(errorDetails: SafetyCenterErrorDetails?) { if (errorDetails == null) return Toast.makeText(requireContext(), errorDetails.errorMessage, Toast.LENGTH_LONG).show() 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 239f9a377..69a315f08 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/SafetyCenterUiData.kt @@ -16,6 +16,7 @@ package com.android.permissioncontroller.safetycenter.ui.model +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetyCenterData import android.safetycenter.SafetyCenterEntryGroup @@ -24,12 +25,21 @@ import android.safetycenter.SafetyCenterIssue import android.safetycenter.SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_OK import androidx.annotation.RequiresApi import com.android.safetycenter.internaldata.SafetyCenterBundles.ISSUES_TO_GROUPS_BUNDLE_KEY +import com.android.safetycenter.internaldata.SafetyCenterIds +import com.android.safetycenter.internaldata.SafetyCenterIssueKey /** UI model representation of Safety Center Data */ data class SafetyCenterUiData( val safetyCenterData: SafetyCenterData, val resolvedIssues: Map<IssueId, ActionId> = emptyMap() ) { + @RequiresApi(TIRAMISU) + fun getMatchingIssue(issueKey: SafetyCenterIssueKey): SafetyCenterIssue? { + return safetyCenterData.issues.find { + SafetyCenterIds.issueIdFromString(it.id).safetyCenterIssueKey == issueKey + } + } + /** Returns the [SafetyCenterEntryGroup] corresponding to the provided ID */ @RequiresApi(UPSIDE_DOWN_CAKE) fun getMatchingGroup(groupId: String): SafetyCenterEntryGroup? { diff --git a/PermissionController/tests/mocking/Android.bp b/PermissionController/tests/mocking/Android.bp index 837b055a8..cff4c5177 100644 --- a/PermissionController/tests/mocking/Android.bp +++ b/PermissionController/tests/mocking/Android.bp @@ -117,7 +117,7 @@ android_test { "safety-label", "role-controller", "lottie", - "permissions-flags-lib", + "permissions-aconfig-flags-lib", "android.permission.flags-aconfig-java", "androidx.test.rules", diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt index 30f0880e1..cc3b096a8 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt @@ -122,14 +122,14 @@ class NotificationListenerPrivacySourceTest { whenever( Utils.getApplicationLabel( any(ContextWrapper::class.java), - eq(packageInfo1.applicationInfo) + eq(packageInfo1.applicationInfo!!) ) ) .thenReturn(testComponent1.className) whenever( Utils.getApplicationLabel( any(ContextWrapper::class.java), - eq(packageInfo2.applicationInfo) + eq(packageInfo2.applicationInfo!!) ) ) .thenReturn(testComponent2.className) diff --git a/PermissionController/tests/permissionui/Android.bp b/PermissionController/tests/permissionui/Android.bp index 696f3e9e6..6aa0dc45c 100644 --- a/PermissionController/tests/permissionui/Android.bp +++ b/PermissionController/tests/permissionui/Android.bp @@ -66,6 +66,7 @@ android_test { ":PermissionUiDefineAdditionalPermissionApp", ":PermissionUiUseAdditionalPermissionApp", ":PermissionUiUseTwoAdditionalPermissionsApp", + ":PermissionUiReadCalendarPermissionApp", ], per_testcase_directory: true, } diff --git a/PermissionController/tests/permissionui/AndroidTest.xml b/PermissionController/tests/permissionui/AndroidTest.xml index 85ccf61ce..566410777 100644 --- a/PermissionController/tests/permissionui/AndroidTest.xml +++ b/PermissionController/tests/permissionui/AndroidTest.xml @@ -53,6 +53,8 @@ value="/data/local/tmp/pc-permissionui/PermissionUiUseAdditionalPermissionApp.apk" /> <option name="push-file" key="PermissionUiUseTwoAdditionalPermissionsApp.apk" value="/data/local/tmp/pc-permissionui/PermissionUiUseTwoAdditionalPermissionsApp.apk" /> + <option name="push-file" key="PermissionUiReadCalendarPermissionApp.apk" + value="/data/local/tmp/pc-permissionui/PermissionUiReadCalendarPermissionApp.apk" /> </target_preparer> <!-- Uninstall test-apps --> diff --git a/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/Android.bp b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/Android.bp new file mode 100644 index 000000000..edb0da6fc --- /dev/null +++ b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/Android.bp @@ -0,0 +1,34 @@ +// +// Copyright (C) 2023 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "packages_modules_Permission_PermissionController_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "packages_modules_Permission_PermissionController_license", + ], +} + +android_test_helper_app { + name: "PermissionUiReadCalendarPermissionApp", + + srcs: ["src/**/*.kt"], + + sdk_version: "30", +} diff --git a/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/AndroidManifest.xml b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/AndroidManifest.xml new file mode 100644 index 000000000..8ebb502e8 --- /dev/null +++ b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/AndroidManifest.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.permissioncontroller.tests.appthatrequestpermission"> + <uses-permission android:name="android.permission.READ_CALENDAR"/> + + <attribution android:tag="testTag" android:label="@string/test_attribution_label" /> + + <application android:label="CalendarRequestApp" /> +</manifest> + diff --git a/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/res/values/strings.xml b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/res/values/strings.xml new file mode 100644 index 000000000..91cb8c1fd --- /dev/null +++ b/PermissionController/tests/permissionui/PermissionUiReadCalendarPermissionApp/res/values/strings.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2023 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Placeholder attribution label for testing [CHAR LIMIT=32] --> + <string name="test_attribution_label">Test Attribution Label</string> +</resources> diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/television/OWNERS b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/television/OWNERS index d9f93959b..6214fba50 100644 --- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/television/OWNERS +++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/television/OWNERS @@ -6,5 +6,4 @@ bronger@google.com galinap@google.com philipjunker@google.com rgl@google.com -robhor@google.com valiiftime@google.com diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageDetailsFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageDetailsFragmentTest.kt new file mode 100644 index 000000000..999c89fc7 --- /dev/null +++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageDetailsFragmentTest.kt @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.permissionui.ui.wear + +import android.Manifest.permission.CAMERA +import android.content.Intent +import android.os.Build +import android.permission.cts.PermissionUtils.grantPermission +import android.permission.cts.PermissionUtils.install +import android.permission.cts.PermissionUtils.uninstallApp +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SdkSuppress +import androidx.test.uiautomator.By +import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity +import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject +import com.android.permissioncontroller.permissionui.PermissionHub2Test +import com.android.permissioncontroller.permissionui.pressHome +import com.android.permissioncontroller.permissionui.wakeUpScreen +import org.junit.After +import org.junit.Assume.assumeTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +/** Tests for [WearPermissionUsageDetailsFragment] */ +@RunWith(AndroidJUnit4::class) +@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S) +class WearPermissionUsageDetailsFragmentTest : PermissionHub2Test() { + private val CAMERA_APK = + "/data/local/tmp/pc-permissionui/PermissionUiUseCameraPermissionApp.apk" + private val CAMERA_APP = "com.android.permissioncontroller.tests.appthatrequestpermission" + private val CAMERA_APP_LABEL = "CameraRequestApp" + private val CAMERA_PREF_LABEL = "Camera" + private val MANAGE_PERMISSION_LABEL = "Manage permission" + private val APP_PERMISSIONS_TITLE = "App permissions" + private val TIMEOUT = 30_000L + + @Before + fun setup() { + assumeTrue(isWear()) + wakeUpScreen() + install(CAMERA_APK) + grantPermission(CAMERA_APP, CAMERA) + accessCamera() + goToPermissionUsageDetails() + } + + private fun goToPermissionUsageDetails() { + runWithShellPermissionIdentity { + context.startActivity( + Intent(Intent.ACTION_REVIEW_PERMISSION_USAGE).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + ) + } + + clickObject(CAMERA_PREF_LABEL) + } + + @Test + fun testClickAppThenTransitToAppPermissionGroups() { + clickObject(CAMERA_APP_LABEL) + + // Find the title of AppPermissionGroups. + waitFindObject(By.textContains(APP_PERMISSIONS_TITLE), TIMEOUT) + // Find the permission in the list. + waitFindObject(By.textContains(CAMERA_PREF_LABEL), TIMEOUT) + } + + @Test + fun testClickManagePermissionThenTransitToPermissionApps() { + clickObject(MANAGE_PERMISSION_LABEL) + + // Find the title of PermissionApps. + waitFindObject(By.textContains(CAMERA_PREF_LABEL), TIMEOUT) + // Find the test app is in the app list. + waitFindObject(By.textContains(CAMERA_APP_LABEL), TIMEOUT) + } + + @After + fun tearDown() { + uninstallApp(CAMERA_APP) + pressHome() + } +} diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageFragmentTest.kt index 21c080862..e37b97874 100644 --- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageFragmentTest.kt +++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearPermissionUsageFragmentTest.kt @@ -16,8 +16,16 @@ package com.android.permissioncontroller.permissionui.ui.wear +import android.Manifest.permission.CAMERA +import android.Manifest.permission.READ_CALENDAR +import android.app.AppOpsManager import android.content.Intent +import android.content.pm.PackageManager import android.os.Build +import android.os.Process +import android.permission.cts.PermissionUtils.grantPermission +import android.permission.cts.PermissionUtils.install +import android.permission.cts.PermissionUtils.uninstallApp import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SdkSuppress import androidx.test.uiautomator.By @@ -27,6 +35,7 @@ import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject import com.android.permissioncontroller.permissionui.PermissionHub2Test import com.android.permissioncontroller.permissionui.pressHome import com.android.permissioncontroller.permissionui.wakeUpScreen +import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Assume.assumeTrue import org.junit.Before @@ -37,6 +46,19 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S) class WearPermissionUsageFragmentTest : PermissionHub2Test() { + private val CAMERA_APK = + "/data/local/tmp/pc-permissionui/PermissionUiUseCameraPermissionApp.apk" + private val CAMERA_APP_LABEL = "CameraRequestApp" + private val CAMERA_PREF_LABEL = "Camera" + + private val CALENDAR_APK = + "/data/local/tmp/pc-permissionui/PermissionUiReadCalendarPermissionApp.apk" + private val CALENDAR_APP_LABEL = "CalendarRequestApp" + private val CALENDAR_PREF_LABEL = "Calendar" + + private val TEST_PACKAGE_NAME = + "com.android.permissioncontroller.tests.appthatrequestpermission" + private val SHOW_SYSTEM_LABEL = "Show system" private val HIDE_SYSTEM_LABEL = "Hide system" private val TIMEOUT = 30_000L @@ -58,27 +80,88 @@ class WearPermissionUsageFragmentTest : PermissionHub2Test() { ) } - eventually { - try { - waitFindObject(By.textContains(SHOW_SYSTEM_LABEL), TIMEOUT).click() - } catch (e: Exception) { - throw e - } + clickObject(SHOW_SYSTEM_LABEL) + waitFindObject(By.textContains(HIDE_SYSTEM_LABEL), TIMEOUT) + + clickObject(HIDE_SYSTEM_LABEL) + waitFindObject(By.textContains(SHOW_SYSTEM_LABEL), TIMEOUT) + } + + @Test + fun testTransitToPermissionUsageDetails() { + install(CAMERA_APK) + grantPermission(TEST_PACKAGE_NAME, CAMERA) + accessCamera() + + runWithShellPermissionIdentity { + context.startActivity( + Intent(Intent.ACTION_REVIEW_PERMISSION_USAGE).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + ) } - eventually { - try { - waitFindObject(By.textContains(HIDE_SYSTEM_LABEL), TIMEOUT).click() - } catch (e: Exception) { - throw e - } + clickObject(CAMERA_PREF_LABEL) + + waitFindObject(By.textContains(CAMERA_APP_LABEL), TIMEOUT) + } + + @Test + fun testTransitToPermissionApps() { + install(CALENDAR_APK) + grantPermission(TEST_PACKAGE_NAME, READ_CALENDAR) + + accessCalendar() + + runWithShellPermissionIdentity { + context.startActivity( + Intent(Intent.ACTION_REVIEW_PERMISSION_USAGE).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + ) } - waitFindObject(By.textContains(SHOW_SYSTEM_LABEL), TIMEOUT) + clickObject(CALENDAR_PREF_LABEL) + + waitFindObject(By.textContains(CALENDAR_PREF_LABEL), TIMEOUT) + waitFindObject(By.textContains(CALENDAR_APP_LABEL), TIMEOUT) + } + + private fun accessCalendar() { + runWithShellPermissionIdentity { + eventually { + assertThat( + context.packageManager.getPermissionFlags( + READ_CALENDAR, + TEST_PACKAGE_NAME, + Process.myUserHandle() + ) and PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED + ) + .isNotEqualTo(0) + } + + eventually { + assertThat( + context + .getSystemService(AppOpsManager::class.java) + .startOp( + AppOpsManager.OPSTR_READ_CALENDAR, + context.packageManager.getPackageUid(TEST_PACKAGE_NAME, 0), + TEST_PACKAGE_NAME, + null, + null + ) + ) + .isEqualTo(AppOpsManager.MODE_ALLOWED) + } + } } @After fun tearDown() { + uninstallApp(TEST_PACKAGE_NAME) pressHome() } } diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearUtils.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearUtils.kt index 00811a267..cf8098f01 100644 --- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearUtils.kt +++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/WearUtils.kt @@ -18,9 +18,23 @@ package com.android.permissioncontroller.permissionui.ui.wear import android.content.pm.PackageManager import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.By +import com.android.compatibility.common.util.SystemUtil.eventually +import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject +import org.junit.Assert.assertNotNull + +private const val TIMEOUT = 30_000L fun isWear() = InstrumentationRegistry.getInstrumentation() .targetContext .packageManager .hasSystemFeature(PackageManager.FEATURE_WATCH) + +fun clickObject(text: String) { + eventually { + val obj = waitFindObject(By.textContains(text), TIMEOUT) + assertNotNull(obj) + obj.click() + } +} diff --git a/SafetyCenter/Resources/res/raw-v35/safety_center_config.xml b/SafetyCenter/Resources/res/raw-v35/safety_center_config.xml index 83369f920..5d626757c 100644 --- a/SafetyCenter/Resources/res/raw-v35/safety_center_config.xml +++ b/SafetyCenter/Resources/res/raw-v35/safety_center_config.xml @@ -39,6 +39,17 @@ initialDisplayState="hidden"/> </safety-sources-group> <safety-sources-group + id="AndroidCellularNetworkSecuritySources" + title="@com.android.safetycenter.resources:string/cellular_network_security_title" + summary="@com.android.safetycenter.resources:string/cellular_network_security_summary"> + <dynamic-safety-source + id="AndroidCellularNetworkSecurity" + packageName="com.android.phone" + profile="primary_profile_only" + notificationsAllowed="true" + initialDisplayState="hidden"/> + </safety-sources-group> + <safety-sources-group id="AndroidPrivacySources" title="@com.android.safetycenter.resources:string/privacy_sources_title" summary="@com.android.safetycenter.resources:string/privacy_sources_summary" diff --git a/SafetyCenter/Resources/res/values-af-v35/strings.xml b/SafetyCenter/Resources/res/values-af-v35/strings.xml index 2990bde0d..42ccf293c 100644 --- a/SafetyCenter/Resources/res/values-af-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-af-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Selnetwerksekuriteit"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Netwerktipe, enkripsie, kennisgewingkontroles"</string> <string name="private_space_title" msgid="6158245041481535879">"Privaat ruimte"</string> <string name="private_space_summary" msgid="529869826714610294">"Stel privaat ruimte op, en meer"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privaat ruimte"</string> diff --git a/SafetyCenter/Resources/res/values-am-v35/strings.xml b/SafetyCenter/Resources/res/values-am-v35/strings.xml index 290a8816c..948277aa8 100644 --- a/SafetyCenter/Resources/res/values-am-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-am-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"የተንቀሳቃሽ ስልክ አውታረ መረብ ደህንነት"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"የአውታረ መረብ ዓይነት፣ ምስጠራ፣ የማሳወቂያ መቆጣጠሪያዎች"</string> <string name="private_space_title" msgid="6158245041481535879">"የግል ቦታ"</string> <string name="private_space_summary" msgid="529869826714610294">"የግል ቦታን እና ሌሎችን ያዋቅሩ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"የግል ቦታ"</string> diff --git a/SafetyCenter/Resources/res/values-ar-v35/strings.xml b/SafetyCenter/Resources/res/values-ar-v35/strings.xml index 29fc7583d..969edb241 100644 --- a/SafetyCenter/Resources/res/values-ar-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ar-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"أمان شبكة الجوّال"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"عناصر التحكم في نوع الشبكة والتشفير والإشعارات"</string> <string name="private_space_title" msgid="6158245041481535879">"مساحة خاصة"</string> <string name="private_space_summary" msgid="529869826714610294">"ضبط إعدادات مساحة خاصة وغير ذلك"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"مساحة خاصة"</string> diff --git a/SafetyCenter/Resources/res/values-as-v35/strings.xml b/SafetyCenter/Resources/res/values-as-v35/strings.xml index 71918ea36..5923f97cd 100644 --- a/SafetyCenter/Resources/res/values-as-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-as-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"চেলুলাৰ নেটৱৰ্কৰ সুৰক্ষা"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"নেটৱৰ্কৰ প্ৰকাৰ, এনক্ৰিপশ্বন, জাননীৰ নিয়ন্ত্ৰণসমূহ"</string> <string name="private_space_title" msgid="6158245041481535879">"ব্যক্তিগত স্পে’চ"</string> <string name="private_space_summary" msgid="529869826714610294">"ব্যক্তিগত স্পে’চ আৰু আন বহুতো ছেটআপ কৰক"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ব্যক্তিগত স্পে’চ"</string> diff --git a/SafetyCenter/Resources/res/values-az-v35/strings.xml b/SafetyCenter/Resources/res/values-az-v35/strings.xml index e1fd4c181..39ea9a982 100644 --- a/SafetyCenter/Resources/res/values-az-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-az-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobil şəbəkə təhlükəsizliyi"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Şəbəkə növü, şifrələmə, bildiriş nizamlayıcıları"</string> <string name="private_space_title" msgid="6158245041481535879">"Şəxsi yer"</string> <string name="private_space_summary" msgid="529869826714610294">"Şəxsi yer və s. ayarlayın"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Şəxsi yer"</string> diff --git a/SafetyCenter/Resources/res/values-b+sr+Latn-v35/strings.xml b/SafetyCenter/Resources/res/values-b+sr+Latn-v35/strings.xml index 6a52a1a8d..c877922b0 100644 --- a/SafetyCenter/Resources/res/values-b+sr+Latn-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-b+sr+Latn-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Bezbednost mobilne mreže"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tip mreže, šifrovanje, kontrole obaveštenja"</string> <string name="private_space_title" msgid="6158245041481535879">"Privatni prostor"</string> <string name="private_space_summary" msgid="529869826714610294">"Podesite privatni prostor i drugo"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privatni prostor"</string> diff --git a/SafetyCenter/Resources/res/values-be-v35/strings.xml b/SafetyCenter/Resources/res/values-be-v35/strings.xml index c8db4cb50..27799b191 100644 --- a/SafetyCenter/Resources/res/values-be-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-be-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Бяспека сотавай сеткі"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тып сеткі, шыфраванне, налады апавяшчэнняў"</string> <string name="private_space_title" msgid="6158245041481535879">"Прыватная вобласць"</string> <string name="private_space_summary" msgid="529869826714610294">"Наладжванне прыватнай вобласці і не толькі"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Прыватная вобласць"</string> diff --git a/SafetyCenter/Resources/res/values-bg-v35/strings.xml b/SafetyCenter/Resources/res/values-bg-v35/strings.xml index bb78de8a5..bb0de817f 100644 --- a/SafetyCenter/Resources/res/values-bg-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-bg-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Сигурност на мобилната мрежа"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тип мрежа, шифроване, контроли за известията"</string> <string name="private_space_title" msgid="6158245041481535879">"Лично пространство"</string> <string name="private_space_summary" msgid="529869826714610294">"Настройване на лично пространство и др."</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Лично пространство"</string> diff --git a/SafetyCenter/Resources/res/values-bn-v35/strings.xml b/SafetyCenter/Resources/res/values-bn-v35/strings.xml index 5b05d3b7e..6b8104a04 100644 --- a/SafetyCenter/Resources/res/values-bn-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-bn-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"মোবাইল নেটওয়ার্কের সুরক্ষা"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"নেটওয়ার্কের ধরন, এনক্রিপশন, বিজ্ঞপ্তির নিয়ন্ত্রণ"</string> <string name="private_space_title" msgid="6158245041481535879">"ব্যক্তিগত স্পেস"</string> <string name="private_space_summary" msgid="529869826714610294">"\'ব্যক্তিগত স্পেস\' সেট-আপ ও আরও অনেক কিছু করুন"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ব্যক্তিগত স্পেস"</string> diff --git a/SafetyCenter/Resources/res/values-bs-v35/strings.xml b/SafetyCenter/Resources/res/values-bs-v35/strings.xml index ab9d9d6ba..fc5a58c4d 100644 --- a/SafetyCenter/Resources/res/values-bs-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-bs-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sigurnost mobilne mreže"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Vrsta mreže, šifriranje i kontrole obavještenja"</string> <string name="private_space_title" msgid="6158245041481535879">"Privatni prostor"</string> <string name="private_space_summary" msgid="529869826714610294">"Postavite privatni prostor i drugo"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privatni prostor"</string> diff --git a/SafetyCenter/Resources/res/values-ca-v35/strings.xml b/SafetyCenter/Resources/res/values-ca-v35/strings.xml index ba0cc5dd2..6a76c3032 100644 --- a/SafetyCenter/Resources/res/values-ca-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ca-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Seguretat de la xarxa mòbil"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipus de xarxa, encriptació, controls de notificació"</string> <string name="private_space_title" msgid="6158245041481535879">"Espai privat"</string> <string name="private_space_summary" msgid="529869826714610294">"Configura l\'espai privat i més"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espai privat"</string> diff --git a/SafetyCenter/Resources/res/values-cs-v35/strings.xml b/SafetyCenter/Resources/res/values-cs-v35/strings.xml index 532449ee1..c09ce3722 100644 --- a/SafetyCenter/Resources/res/values-cs-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-cs-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Zabezpečení mobilní sítě"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Nastavení typu sítě, šifrování a oznámení"</string> <string name="private_space_title" msgid="6158245041481535879">"Soukromý prostor"</string> <string name="private_space_summary" msgid="529869826714610294">"Nastavte si Soukromý prostor atd."</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Soukromý prostor"</string> diff --git a/SafetyCenter/Resources/res/values-da-v35/strings.xml b/SafetyCenter/Resources/res/values-da-v35/strings.xml index 9401dbbe7..e5c3c2173 100644 --- a/SafetyCenter/Resources/res/values-da-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-da-v35/strings.xml @@ -17,7 +17,9 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="private_space_title" msgid="6158245041481535879">"Privat rum"</string> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sikkerhed for mobilnetværk"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Netværkstype, kryptering, notifikationsstyring"</string> + <string name="private_space_title" msgid="6158245041481535879">"Privat område"</string> <string name="private_space_summary" msgid="529869826714610294">"Konfigurer et privat rum m.m."</string> - <string name="private_space_search_terms" msgid="4820808478299116258">"Privat rum"</string> + <string name="private_space_search_terms" msgid="4820808478299116258">"Privat område"</string> </resources> diff --git a/SafetyCenter/Resources/res/values-de-v35/strings.xml b/SafetyCenter/Resources/res/values-de-v35/strings.xml index 22f254518..b3573e2a8 100644 --- a/SafetyCenter/Resources/res/values-de-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-de-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sicherheit von Mobilfunknetzen"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Netzwerktyp, Verschlüsselung, Benachrichtigungseinstellungen"</string> <string name="private_space_title" msgid="6158245041481535879">"Privater Bereich"</string> <string name="private_space_summary" msgid="529869826714610294">"Privaten Bereich einrichten und mehr"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privater Bereich"</string> diff --git a/SafetyCenter/Resources/res/values-el-v35/strings.xml b/SafetyCenter/Resources/res/values-el-v35/strings.xml index 5cea492f7..51e8f6580 100644 --- a/SafetyCenter/Resources/res/values-el-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-el-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Ασφάλεια δικτύου κινητής τηλεφωνίας"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Τύπος δικτύου, κρυπτογράφηση, στοιχεία ελέγχου ειδοποιήσεων"</string> <string name="private_space_title" msgid="6158245041481535879">"Ιδιωτικός χώρος"</string> <string name="private_space_summary" msgid="529869826714610294">"Ρύθμιση Ιδιωτικού χώρου κ.ά."</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Ιδιωτικός χώρος"</string> diff --git a/SafetyCenter/Resources/res/values-en-rAU-v35/strings.xml b/SafetyCenter/Resources/res/values-en-rAU-v35/strings.xml index 311c5ca42..41d4bb4ef 100644 --- a/SafetyCenter/Resources/res/values-en-rAU-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rAU-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobile network security"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, encryption, notification controls"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Set up Private Space, and more"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-en-rCA-v35/strings.xml b/SafetyCenter/Resources/res/values-en-rCA-v35/strings.xml index e0c36a7a0..b5de7b0ef 100644 --- a/SafetyCenter/Resources/res/values-en-rCA-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rCA-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Cellular network security"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, encryption, notification controls"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Setup Private Space, and more"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-en-rGB-v35/strings.xml b/SafetyCenter/Resources/res/values-en-rGB-v35/strings.xml index 311c5ca42..41d4bb4ef 100644 --- a/SafetyCenter/Resources/res/values-en-rGB-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rGB-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobile network security"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, encryption, notification controls"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Set up Private Space, and more"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-en-rIN-v35/strings.xml b/SafetyCenter/Resources/res/values-en-rIN-v35/strings.xml index 311c5ca42..41d4bb4ef 100644 --- a/SafetyCenter/Resources/res/values-en-rIN-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rIN-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobile network security"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, encryption, notification controls"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Set up Private Space, and more"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-en-rXC-v35/strings.xml b/SafetyCenter/Resources/res/values-en-rXC-v35/strings.xml index ad86de92f..4b9327829 100644 --- a/SafetyCenter/Resources/res/values-en-rXC-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-en-rXC-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Cellular network security"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, encryption, notification controls"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Setup Private Space, and more"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-es-rUS-v35/strings.xml b/SafetyCenter/Resources/res/values-es-rUS-v35/strings.xml index 323af67b1..b6227fa5f 100644 --- a/SafetyCenter/Resources/res/values-es-rUS-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-es-rUS-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Seguridad de red móvil"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de red, encriptación, controles de notificaciones"</string> <string name="private_space_title" msgid="6158245041481535879">"Espacio privado"</string> <string name="private_space_summary" msgid="529869826714610294">"Configura el Espacio privado y mucho más"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espacio privado"</string> diff --git a/SafetyCenter/Resources/res/values-es-v35/strings.xml b/SafetyCenter/Resources/res/values-es-v35/strings.xml index 9901be878..fcd0a9870 100644 --- a/SafetyCenter/Resources/res/values-es-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-es-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Seguridad de la red móvil"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de red, cifrado, controles de notificaciones"</string> <string name="private_space_title" msgid="6158245041481535879">"Espacio privado"</string> <string name="private_space_summary" msgid="529869826714610294">"Configura el espacio privado y más"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espacio privado"</string> diff --git a/SafetyCenter/Resources/res/values-et-v35/strings.xml b/SafetyCenter/Resources/res/values-et-v35/strings.xml index e2f169a10..dab6f073e 100644 --- a/SafetyCenter/Resources/res/values-et-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-et-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobiilsidevõrgu turvalisus"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Võrgu tüüp, krüpteerimine, märguannete juhtnupud"</string> <string name="private_space_title" msgid="6158245041481535879">"Privaatne ruum"</string> <string name="private_space_summary" msgid="529869826714610294">"Privaatse ruumi seadistamine ja muu"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privaatne ruum"</string> diff --git a/SafetyCenter/Resources/res/values-eu-v35/strings.xml b/SafetyCenter/Resources/res/values-eu-v35/strings.xml index c22f585ab..02e53aedd 100644 --- a/SafetyCenter/Resources/res/values-eu-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-eu-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sare mugikorraren segurtasuna"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Sare mota, enkriptatzea, jakinarazpenak kontrolatzeko aukerak"</string> <string name="private_space_title" msgid="6158245041481535879">"Eremu pribatua"</string> <string name="private_space_summary" msgid="529869826714610294">"Konfiguratu eremu pribatua eta abar"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Eremu pribatua"</string> diff --git a/SafetyCenter/Resources/res/values-fa-v35/strings.xml b/SafetyCenter/Resources/res/values-fa-v35/strings.xml index a3eb194ee..45b2b8605 100644 --- a/SafetyCenter/Resources/res/values-fa-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-fa-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"امنیت شبکه تلفن همراه"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"نوع شبکه، رمزگذاری، کنترلهای اعلان"</string> <string name="private_space_title" msgid="6158245041481535879">"فضای خصوصی"</string> <string name="private_space_summary" msgid="529869826714610294">"راهاندازی «فضای خصوصی»، و موارد دیگر"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"فضای خصوصی"</string> diff --git a/SafetyCenter/Resources/res/values-fa/strings.xml b/SafetyCenter/Resources/res/values-fa/strings.xml index 41a3121ea..cf277b7c1 100644 --- a/SafetyCenter/Resources/res/values-fa/strings.xml +++ b/SafetyCenter/Resources/res/values-fa/strings.xml @@ -37,7 +37,7 @@ <string name="privacy_controls_summary" msgid="2402066941190435424">"کنترل دسترسی دستگاه به میکروفون، دوربین، و غیره"</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_title" msgid="1126833338772188155">"تنظیمات ایمنی بیشتر"</string> <string name="advanced_security_summary" msgid="6172253327022425123">"رمزگذاری، اطلاعات اعتباری، و غیره"</string> <string name="advanced_security_search_terms" msgid="3350609555814362075"></string> <string name="advanced_privacy_title" msgid="1117725225706176643">"تنظیمات حریم خصوصی بیشتر"</string> diff --git a/SafetyCenter/Resources/res/values-fi-v35/strings.xml b/SafetyCenter/Resources/res/values-fi-v35/strings.xml index c80c17207..e280f71e1 100644 --- a/SafetyCenter/Resources/res/values-fi-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-fi-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobiiliverkon tietoturva"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Verkon tyyppi, salaus, ilmoitusvalinnat"</string> <string name="private_space_title" msgid="6158245041481535879">"Yksityinen tila"</string> <string name="private_space_summary" msgid="529869826714610294">"Ota esimerkiksi yksityinen tila käyttöön"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Yksityinen tila"</string> diff --git a/SafetyCenter/Resources/res/values-fr-rCA-v35/strings.xml b/SafetyCenter/Resources/res/values-fr-rCA-v35/strings.xml index 06d909df8..dbae68c8e 100644 --- a/SafetyCenter/Resources/res/values-fr-rCA-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-fr-rCA-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sécurité du réseau cellulaire"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Contrôles du type de réseau, du chiffrement et des notifications"</string> <string name="private_space_title" msgid="6158245041481535879">"Espace privé"</string> <string name="private_space_summary" msgid="529869826714610294">"Configuration de l\'espace privé, et plus"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espace privé"</string> diff --git a/SafetyCenter/Resources/res/values-fr-v35/strings.xml b/SafetyCenter/Resources/res/values-fr-v35/strings.xml index a1ba13767..306c769ae 100644 --- a/SafetyCenter/Resources/res/values-fr-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-fr-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sécurité des réseaux mobiles"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Type de réseau, chiffrement, paramètres de notifications"</string> <string name="private_space_title" msgid="6158245041481535879">"Espace privé"</string> <string name="private_space_summary" msgid="529869826714610294">"Configurez votre espace privé et bien plus"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espace privé"</string> diff --git a/SafetyCenter/Resources/res/values-gl-v35/strings.xml b/SafetyCenter/Resources/res/values-gl-v35/strings.xml index 52586da18..c3ef9f8d8 100644 --- a/SafetyCenter/Resources/res/values-gl-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-gl-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Seguranza da rede de telefonía móbil"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de rede, encriptación, controis de notificacións"</string> <string name="private_space_title" msgid="6158245041481535879">"Espazo privado"</string> <string name="private_space_summary" msgid="529869826714610294">"Configura o espazo privado e moito máis"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espazo privado"</string> diff --git a/SafetyCenter/Resources/res/values-gu-v35/strings.xml b/SafetyCenter/Resources/res/values-gu-v35/strings.xml index 23dfe440a..a3eb9ff61 100644 --- a/SafetyCenter/Resources/res/values-gu-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-gu-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"સેલ્યુલર નેટવર્ક સંબંધી સુરક્ષા"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"નેટવર્કનો પ્રકાર, એન્ક્રિપ્શન, નોટિફિકેશનના નિયંત્રણો"</string> <string name="private_space_title" msgid="6158245041481535879">"ખાનગી સ્પેસ"</string> <string name="private_space_summary" msgid="529869826714610294">"ખાનગી સ્પેસનું સેટઅપ કરો અને બીજું ઘણું કરો"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ખાનગી સ્પેસ"</string> diff --git a/SafetyCenter/Resources/res/values-hi-v35/strings.xml b/SafetyCenter/Resources/res/values-hi-v35/strings.xml index ca4b78965..6a3d68007 100644 --- a/SafetyCenter/Resources/res/values-hi-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-hi-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"मोबाइल नेटवर्क की सुरक्षा"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"नेटवर्क टाइप, एन्क्रिप्ट करने का तरीका, सूचनाएं कंट्रोल करने की सेटिंग"</string> <string name="private_space_title" msgid="6158245041481535879">"प्राइवेट स्पेस"</string> <string name="private_space_summary" msgid="529869826714610294">"प्राइवेट स्पेस सेटअप करें और अन्य काम करें"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"प्राइवेट स्पेस"</string> diff --git a/SafetyCenter/Resources/res/values-hr-v35/strings.xml b/SafetyCenter/Resources/res/values-hr-v35/strings.xml index 024be31b1..20a0c34ba 100644 --- a/SafetyCenter/Resources/res/values-hr-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-hr-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sigurnost mobilne mreže"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Vrsta mreže, šifriranje, kontrole obavijesti"</string> <string name="private_space_title" msgid="6158245041481535879">"Privatni prostor"</string> <string name="private_space_summary" msgid="529869826714610294">"Postavljanje privatnog prostora i drugo"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privatni prostor"</string> diff --git a/SafetyCenter/Resources/res/values-hu-v35/strings.xml b/SafetyCenter/Resources/res/values-hu-v35/strings.xml index 0fe083899..561aefc34 100644 --- a/SafetyCenter/Resources/res/values-hu-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-hu-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobilhálózat biztonsága"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Hálózattípus, titkosítás, értesítésvezérlők"</string> <string name="private_space_title" msgid="6158245041481535879">"Privát terület"</string> <string name="private_space_summary" msgid="529869826714610294">"Privát terület beállítása és egyebek"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privát terület"</string> diff --git a/SafetyCenter/Resources/res/values-hy-v35/strings.xml b/SafetyCenter/Resources/res/values-hy-v35/strings.xml index 54487ffa8..9e6cde773 100644 --- a/SafetyCenter/Resources/res/values-hy-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-hy-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Բջջային ցանցի անվտանգություն"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Ցանցի տեսակը, գաղտնագրում, ծանուցումների կառավարում"</string> <string name="private_space_title" msgid="6158245041481535879">"Անձնական տարածք"</string> <string name="private_space_summary" msgid="529869826714610294">"Կարգավորեք անձնական տարածքը և ավելին"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Անձնական տարածք"</string> diff --git a/SafetyCenter/Resources/res/values-in-v35/strings.xml b/SafetyCenter/Resources/res/values-in-v35/strings.xml index 2e2554992..924d010c6 100644 --- a/SafetyCenter/Resources/res/values-in-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-in-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Keamanan jaringan seluler"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Jenis jaringan, enkripsi, kontrol notifikasi"</string> <string name="private_space_title" msgid="6158245041481535879">"Ruang Pribadi"</string> <string name="private_space_summary" msgid="529869826714610294">"Menyiapkan Ruang Pribadi, dan lainnya"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Ruang Pribadi"</string> diff --git a/SafetyCenter/Resources/res/values-is-v35/strings.xml b/SafetyCenter/Resources/res/values-is-v35/strings.xml index d74f29e63..3ee0b4078 100644 --- a/SafetyCenter/Resources/res/values-is-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-is-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Öryggi farsímakerfis"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tegund netkerfis, dulkóðun, tilkynningastýringar"</string> <string name="private_space_title" msgid="6158245041481535879">"Einkarými"</string> <string name="private_space_summary" msgid="529869826714610294">"Setja upp einkarými og fleira"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Einkarými"</string> diff --git a/SafetyCenter/Resources/res/values-it-v35/strings.xml b/SafetyCenter/Resources/res/values-it-v35/strings.xml index 26df4d265..6161a1f24 100644 --- a/SafetyCenter/Resources/res/values-it-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-it-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sicurezza rete mobile"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo di rete, crittografia, controlli di notifica"</string> <string name="private_space_title" msgid="6158245041481535879">"Spazio privato"</string> <string name="private_space_summary" msgid="529869826714610294">"Configura lo Spazio privato e altro ancora"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Spazio privato"</string> diff --git a/SafetyCenter/Resources/res/values-iw-v35/strings.xml b/SafetyCenter/Resources/res/values-iw-v35/strings.xml index edb3e2862..adcea4384 100644 --- a/SafetyCenter/Resources/res/values-iw-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-iw-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"אבטחת הרשת הסלולרית"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"סוג הרשת, הצפנה, אמצעי בקרה של התראות"</string> <string name="private_space_title" msgid="6158245041481535879">"מרחב פרטי"</string> <string name="private_space_summary" msgid="529869826714610294">"הגדרת מרחב פרטי ועוד"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"מרחב פרטי"</string> diff --git a/SafetyCenter/Resources/res/values-ja-v35/strings.xml b/SafetyCenter/Resources/res/values-ja-v35/strings.xml index 4bd389ee3..c7c9d3fe4 100644 --- a/SafetyCenter/Resources/res/values-ja-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ja-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"モバイル ネットワークのセキュリティ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ネットワークの種類、暗号化、通知の管理"</string> <string name="private_space_title" msgid="6158245041481535879">"プライベート スペース"</string> <string name="private_space_summary" msgid="529869826714610294">"プライベート スペースの設定、その他"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"プライベート スペース"</string> diff --git a/SafetyCenter/Resources/res/values-ka-v35/strings.xml b/SafetyCenter/Resources/res/values-ka-v35/strings.xml index 480f7e83c..4549e2578 100644 --- a/SafetyCenter/Resources/res/values-ka-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ka-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ფიჭური ქსელის უსაფრთხოება"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ქსელის ტიპი, დაშიფვრა, შეტყობინებების მართვის საშუალებები"</string> <string name="private_space_title" msgid="6158245041481535879">"პირადი სივრცე"</string> <string name="private_space_summary" msgid="529869826714610294">"დააყენეთ პირადი სივრცე და ა.შ."</string> <string name="private_space_search_terms" msgid="4820808478299116258">"პირადი სივრცე"</string> diff --git a/SafetyCenter/Resources/res/values-kk-v35/strings.xml b/SafetyCenter/Resources/res/values-kk-v35/strings.xml index f01ade9b8..d7f9d50ca 100644 --- a/SafetyCenter/Resources/res/values-kk-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-kk-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Ұялы желі қауіпсіздігі"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Желі түрі, шифрлауды, хабарландыруды басқару элементтері"</string> <string name="private_space_title" msgid="6158245041481535879">"Жеке бөлме"</string> <string name="private_space_summary" msgid="529869826714610294">"Жеке бөлмені реттеу және т.б."</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Жеке бөлме"</string> diff --git a/SafetyCenter/Resources/res/values-km-v35/strings.xml b/SafetyCenter/Resources/res/values-km-v35/strings.xml index 094bcb095..2dac2a0d6 100644 --- a/SafetyCenter/Resources/res/values-km-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-km-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"សុវត្ថិភាពបណ្ដាញចល័ត"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ប្រភេទបណ្ដាញ ការអ៊ីនគ្រីប ការគ្រប់គ្រងការជូនដំណឹង"</string> <string name="private_space_title" msgid="6158245041481535879">"បន្ទប់ឯកជន"</string> <string name="private_space_summary" msgid="529869826714610294">"រៀបចំបន្ទប់ឯកជន និងធ្វើអ្វីៗជាច្រើនទៀត"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"បន្ទប់ឯកជន"</string> diff --git a/SafetyCenter/Resources/res/values-kn-v35/strings.xml b/SafetyCenter/Resources/res/values-kn-v35/strings.xml index 5260029a7..821c577b6 100644 --- a/SafetyCenter/Resources/res/values-kn-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-kn-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ಸೆಲ್ಯುಲಾರ್ ನೆಟ್ವರ್ಕ್ ಭದ್ರತೆ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ನೆಟ್ವರ್ಕ್ ಪ್ರಕಾರ, ಎನ್ಕ್ರಿಪ್ಶನ್, ನೋಟಿಫಿಕೇಶನ್ ಕಂಟ್ರೋಲ್ಗಳು"</string> <string name="private_space_title" msgid="6158245041481535879">"ಖಾಸಗಿ ಸ್ಪೇಸ್"</string> <string name="private_space_summary" msgid="529869826714610294">"ಖಾಸಗಿ ಸ್ಪೇಸ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ ಹಾಗೂ ಇನ್ನಷ್ಟನ್ನು ಮಾಡಿ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ಖಾಸಗಿ ಸ್ಪೇಸ್"</string> diff --git a/SafetyCenter/Resources/res/values-ko-v35/strings.xml b/SafetyCenter/Resources/res/values-ko-v35/strings.xml index 56fedb178..4cde1dd2c 100644 --- a/SafetyCenter/Resources/res/values-ko-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ko-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"셀룰러 네트워크 보안"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"네트워크 유형, 암호화, 알림 설정"</string> <string name="private_space_title" msgid="6158245041481535879">"비공개 스페이스"</string> <string name="private_space_summary" msgid="529869826714610294">"비공개 스페이스 설정 등"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"비공개 스페이스"</string> diff --git a/SafetyCenter/Resources/res/values-ky-v35/strings.xml b/SafetyCenter/Resources/res/values-ky-v35/strings.xml index 307c3a532..a0dd4cd57 100644 --- a/SafetyCenter/Resources/res/values-ky-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ky-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Мобилдик тармактын коопсуздугу"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тармактын түрү, шифрлөө, билдирмелерди башкаруу элементтери"</string> <string name="private_space_title" msgid="6158245041481535879">"Жеке чөйрө"</string> <string name="private_space_summary" msgid="529869826714610294">"Жеке чөйрөнү тууралоо жана башка нерселер"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Жеке чөйрө"</string> diff --git a/SafetyCenter/Resources/res/values-lo-v35/strings.xml b/SafetyCenter/Resources/res/values-lo-v35/strings.xml index 381410da3..731ab407c 100644 --- a/SafetyCenter/Resources/res/values-lo-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-lo-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ຄວາມປອດໄພຂອງເຄືອຂ່າຍມືຖື"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ປະເພດເຄືອຂ່າຍ, ການເຂົ້າລະຫັດ, ການຄວບຄຸມການແຈ້ງເຕືອນ"</string> <string name="private_space_title" msgid="6158245041481535879">"ພື້ນທີ່ສ່ວນຕົວ"</string> <string name="private_space_summary" msgid="529869826714610294">"ຕັ້ງຄ່າພື້ນທີ່ສ່ວນຕົວ ແລະ ອື່ນໆ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ພື້ນທີ່ສ່ວນຕົວ"</string> diff --git a/SafetyCenter/Resources/res/values-lt-v35/strings.xml b/SafetyCenter/Resources/res/values-lt-v35/strings.xml index b18eda435..cccfd5465 100644 --- a/SafetyCenter/Resources/res/values-lt-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-lt-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobiliojo ryšio tinklo sauga"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tinklo tipas, šifruotė, pranešimų valdikliai"</string> <string name="private_space_title" msgid="6158245041481535879">"Privati erdvė"</string> <string name="private_space_summary" msgid="529869826714610294">"Nustatykite privačią erdvę ir atlikite kitų veiksmų"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privati erdvė"</string> diff --git a/SafetyCenter/Resources/res/values-lv-v35/strings.xml b/SafetyCenter/Resources/res/values-lv-v35/strings.xml index ffb1a7f4b..3c5cf9224 100644 --- a/SafetyCenter/Resources/res/values-lv-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-lv-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobilā tīkla drošība"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tīkla veids, šifrējums, paziņojumu vadīklas"</string> <string name="private_space_title" msgid="6158245041481535879">"Privātā mape"</string> <string name="private_space_summary" msgid="529869826714610294">"Privātās mapes iestatīšana un citas iespējas"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privātā mape"</string> diff --git a/SafetyCenter/Resources/res/values-mk-v35/strings.xml b/SafetyCenter/Resources/res/values-mk-v35/strings.xml index 879a67555..244d8c340 100644 --- a/SafetyCenter/Resources/res/values-mk-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-mk-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Безбедност на мобилната мрежа"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Контроли за известувања на тип мрежа, шифрирање"</string> <string name="private_space_title" msgid="6158245041481535879">"Приватен простор"</string> <string name="private_space_summary" msgid="529869826714610294">"Поставување „Приватен простор“ и друго"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Приватен простор"</string> diff --git a/SafetyCenter/Resources/res/values-ml-v35/strings.xml b/SafetyCenter/Resources/res/values-ml-v35/strings.xml index c6e728c4f..4772cb9af 100644 --- a/SafetyCenter/Resources/res/values-ml-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ml-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"സെല്ലുലാർ നെറ്റ്വർക്ക് സുരക്ഷ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"നെറ്റ്വർക്ക് തരം, എൻക്രിപ്ഷൻ, അറിയിപ്പ് നിയന്ത്രണങ്ങൾ"</string> <string name="private_space_title" msgid="6158245041481535879">"സ്വകാര്യ Space"</string> <string name="private_space_summary" msgid="529869826714610294">"സ്വകാര്യ Space സജ്ജീകരിക്കുകയും മറ്റും ചെയ്യൂ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"സ്വകാര്യ Space"</string> diff --git a/SafetyCenter/Resources/res/values-mn-v35/strings.xml b/SafetyCenter/Resources/res/values-mn-v35/strings.xml index 290462d37..afcb7f960 100644 --- a/SafetyCenter/Resources/res/values-mn-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-mn-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Үүрэн холбооны сүлжээний аюулгүй байдал"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Сүлжээний төрөл, шифрлэлт, мэдэгдлийн тохиргоо"</string> <string name="private_space_title" msgid="6158245041481535879">"Хувийн орон зай"</string> <string name="private_space_summary" msgid="529869826714610294">"Хувийн орон зай тохируулах болон илүү ихийг хийх"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Хувийн орон зай"</string> diff --git a/SafetyCenter/Resources/res/values-mr-v35/strings.xml b/SafetyCenter/Resources/res/values-mr-v35/strings.xml index 0ec596e1c..39bbededf 100644 --- a/SafetyCenter/Resources/res/values-mr-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-mr-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"मोबाइल नेटवर्कची सुरक्षा"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"नेटवर्क प्रकार, एन्क्रिप्शन, सूचना नियंत्रणे"</string> <string name="private_space_title" msgid="6158245041481535879">"खाजगी स्पेस"</string> <string name="private_space_summary" msgid="529869826714610294">"खाजगी स्पेस आणि आणखी बरेच काही सेट करा"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"खाजगी स्पेस"</string> diff --git a/SafetyCenter/Resources/res/values-ms-v35/strings.xml b/SafetyCenter/Resources/res/values-ms-v35/strings.xml index b0694a876..6be1180bb 100644 --- a/SafetyCenter/Resources/res/values-ms-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ms-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Keselamatan rangkaian selular"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Jenis rangkaian, penyulitan, kawalan pemberitahuan"</string> <string name="private_space_title" msgid="6158245041481535879">"Ruang Peribadi"</string> <string name="private_space_summary" msgid="529869826714610294">"Sediakan Ruang Peribadi dan pelbagai lagi"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Ruang Peribadi"</string> diff --git a/SafetyCenter/Resources/res/values-my-v35/strings.xml b/SafetyCenter/Resources/res/values-my-v35/strings.xml index 4141dd6ac..0e5fed737 100644 --- a/SafetyCenter/Resources/res/values-my-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-my-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ဆယ်လူလာကွန်ရက် လုံခြုံရေး"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ကွန်ရက်အမျိုးအစား၊ အသွင်ဝှက်ခြင်း၊ အကြောင်းကြားချက် သတ်မှတ်ချက်များ"</string> <string name="private_space_title" msgid="6158245041481535879">"သီးသန့်ချတ်ခန်း"</string> <string name="private_space_summary" msgid="529869826714610294">"သီးသန့်ချတ်ခန်း စသည်တို့ကို စနစ်ထည့်သွင်းသည်"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"သီးသန့်ချတ်ခန်း"</string> diff --git a/SafetyCenter/Resources/res/values-nb-v35/strings.xml b/SafetyCenter/Resources/res/values-nb-v35/strings.xml index 5575b4d1f..7f5142b96 100644 --- a/SafetyCenter/Resources/res/values-nb-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-nb-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Sikkerhet for mobilnettverk"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Nettverkstype, kryptering, varselskontroller"</string> <string name="private_space_title" msgid="6158245041481535879">"Private Space"</string> <string name="private_space_summary" msgid="529869826714610294">"Konfigurer Private Space med mer"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Private Space"</string> diff --git a/SafetyCenter/Resources/res/values-ne-v35/strings.xml b/SafetyCenter/Resources/res/values-ne-v35/strings.xml index 1d96a0c82..226388fbe 100644 --- a/SafetyCenter/Resources/res/values-ne-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ne-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"मोबाइल नेटवर्कको सुरक्षा"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"नेटवर्कको प्रकार, इन्क्रिप्सन, सूचनाका सेटिङ"</string> <string name="private_space_title" msgid="6158245041481535879">"निजी स्पेस"</string> <string name="private_space_summary" msgid="529869826714610294">"निजी स्पेस सेटअप गर्नुहोस् र अन्य कार्यहरू गर्नुहोस्"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"निजी स्पेस"</string> diff --git a/SafetyCenter/Resources/res/values-nl-v35/strings.xml b/SafetyCenter/Resources/res/values-nl-v35/strings.xml index dc927ade3..c0990f160 100644 --- a/SafetyCenter/Resources/res/values-nl-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-nl-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Beveiliging van mobiele netwerken"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Netwerktype, versleuteling, beheeropties voor meldingen"</string> <string name="private_space_title" msgid="6158245041481535879">"Privéruimte"</string> <string name="private_space_summary" msgid="529869826714610294">"Privéruimte instellen en meer"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privéruimte"</string> diff --git a/SafetyCenter/Resources/res/values-or-v35/strings.xml b/SafetyCenter/Resources/res/values-or-v35/strings.xml index 85c4fa73c..ede3b5e80 100644 --- a/SafetyCenter/Resources/res/values-or-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-or-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ସେଲୁଲାର ନେଟୱାର୍କ ସୁରକ୍ଷା"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ନେଟୱାର୍କ ପ୍ରକାର, ଏନକ୍ରିପସନ, ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string> <string name="private_space_title" msgid="6158245041481535879">"ପ୍ରାଇଭେଟ ସ୍ପେସ"</string> <string name="private_space_summary" msgid="529869826714610294">"ପ୍ରାଇଭେଟ ସ୍ପେସ ଏବଂ ଆହୁରି ଅନେକ କିଛି ସେଟଅପ କରନ୍ତୁ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ପ୍ରାଇଭେଟ ସ୍ପେସ"</string> diff --git a/SafetyCenter/Resources/res/values-pa-v35/strings.xml b/SafetyCenter/Resources/res/values-pa-v35/strings.xml index f1e2dd714..8aeb6fb28 100644 --- a/SafetyCenter/Resources/res/values-pa-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-pa-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ ਸੁਰੱਖਿਆ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ, ਇਨਕ੍ਰਿਪਸ਼ਨ, ਸੂਚਨਾ ਕੰਟਰੋਲ"</string> <string name="private_space_title" msgid="6158245041481535879">"ਨਿੱਜੀ ਸਪੇਸ"</string> <string name="private_space_summary" msgid="529869826714610294">"ਨਿੱਜੀ ਸਪੇਸ ਦਾ ਸੈੱਟਅੱਪ ਅਤੇ ਹੋਰ ਕੰਮ ਕਰੋ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ਨਿੱਜੀ ਸਪੇਸ"</string> diff --git a/SafetyCenter/Resources/res/values-pl-v35/strings.xml b/SafetyCenter/Resources/res/values-pl-v35/strings.xml index 56c410a05..3ce6984ac 100644 --- a/SafetyCenter/Resources/res/values-pl-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-pl-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Zabezpieczenia sieci komórkowej"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Typ sieci, szyfrowanie, ustawienia powiadomień"</string> <string name="private_space_title" msgid="6158245041481535879">"Obszar prywatny"</string> <string name="private_space_summary" msgid="529869826714610294">"Skonfiguruj obszar prywatny i inne ustawienia"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Obszar prywatny"</string> diff --git a/SafetyCenter/Resources/res/values-pt-rBR-v35/strings.xml b/SafetyCenter/Resources/res/values-pt-rBR-v35/strings.xml index ef0c3c738..a9806e3db 100644 --- a/SafetyCenter/Resources/res/values-pt-rBR-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-rBR-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Segurança da rede celular"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de rede, criptografia, controles de notificação"</string> <string name="private_space_title" msgid="6158245041481535879">"Espaço particular"</string> <string name="private_space_summary" msgid="529869826714610294">"Configurar Espaço particular e mais"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espaço particular"</string> diff --git a/SafetyCenter/Resources/res/values-pt-rPT-v35/strings.xml b/SafetyCenter/Resources/res/values-pt-rPT-v35/strings.xml index 6e397ccf0..fc0990db0 100644 --- a/SafetyCenter/Resources/res/values-pt-rPT-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-rPT-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Segurança da rede móvel"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de rede, encriptação, controlos de notificação"</string> <string name="private_space_title" msgid="6158245041481535879">"Espaço privado"</string> <string name="private_space_summary" msgid="529869826714610294">"Configure o espaço privado e muito mais"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espaço privado"</string> diff --git a/SafetyCenter/Resources/res/values-pt-v35/strings.xml b/SafetyCenter/Resources/res/values-pt-v35/strings.xml index ef0c3c738..a9806e3db 100644 --- a/SafetyCenter/Resources/res/values-pt-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-pt-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Segurança da rede celular"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipo de rede, criptografia, controles de notificação"</string> <string name="private_space_title" msgid="6158245041481535879">"Espaço particular"</string> <string name="private_space_summary" msgid="529869826714610294">"Configurar Espaço particular e mais"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Espaço particular"</string> diff --git a/SafetyCenter/Resources/res/values-ro-v35/strings.xml b/SafetyCenter/Resources/res/values-ro-v35/strings.xml index 5884075bf..1a6a5f43a 100644 --- a/SafetyCenter/Resources/res/values-ro-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ro-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Securitatea rețelei de date mobile"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tipul de rețea, criptarea, comenzile pentru notificări"</string> <string name="private_space_title" msgid="6158245041481535879">"Spațiu privat"</string> <string name="private_space_summary" msgid="529869826714610294">"Configurează Spațiul privat și altele"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Spațiu privat"</string> diff --git a/SafetyCenter/Resources/res/values-ru-v35/strings.xml b/SafetyCenter/Resources/res/values-ru-v35/strings.xml index 29a17d7a9..3c1862167 100644 --- a/SafetyCenter/Resources/res/values-ru-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ru-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Безопасность мобильной сети"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тип сети, шифрование, управление уведомлениями"</string> <string name="private_space_title" msgid="6158245041481535879">"Личное пространство"</string> <string name="private_space_summary" msgid="529869826714610294">"Настройка личного пространства и не только"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Личное пространство"</string> diff --git a/SafetyCenter/Resources/res/values-si-v35/strings.xml b/SafetyCenter/Resources/res/values-si-v35/strings.xml index c3605e2a1..1cf86f0e3 100644 --- a/SafetyCenter/Resources/res/values-si-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-si-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"සෙලියුලර් ජාල ආරක්ෂාව"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ජාල වර්ගය, සංකේතනය, දැනුම්දීම් පාලන"</string> <string name="private_space_title" msgid="6158245041481535879">"පෞද්ගලික ඉඩ"</string> <string name="private_space_summary" msgid="529869826714610294">"පෞද්ගලික ඉඩ, සහ තවත් දේ පිහිටුවන්න"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"පෞද්ගලික ඉඩ"</string> diff --git a/SafetyCenter/Resources/res/values-sk-v35/strings.xml b/SafetyCenter/Resources/res/values-sk-v35/strings.xml index bed329c6b..a0e64827e 100644 --- a/SafetyCenter/Resources/res/values-sk-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sk-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Zabezpečenie mobilnej siete"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Ovládanie typu siete, šifrovania a upozornení"</string> <string name="private_space_title" msgid="6158245041481535879">"Súkromný priestor"</string> <string name="private_space_summary" msgid="529869826714610294">"Nastavte súkromný priestor a ďalšie možnosti"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Súkromný priestor"</string> diff --git a/SafetyCenter/Resources/res/values-sl-v35/strings.xml b/SafetyCenter/Resources/res/values-sl-v35/strings.xml index aa7a10258..b36740d1e 100644 --- a/SafetyCenter/Resources/res/values-sl-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sl-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Varnost mobilnega omrežja"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Vrsta omrežja, šifriranje, kontrolniki obvestil"</string> <string name="private_space_title" msgid="6158245041481535879">"Zasebni prostor"</string> <string name="private_space_summary" msgid="529869826714610294">"Nastavitev zasebnega prostora in drugo"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Zasebni prostor"</string> diff --git a/SafetyCenter/Resources/res/values-sq-v35/strings.xml b/SafetyCenter/Resources/res/values-sq-v35/strings.xml index 63c642f89..6d0a4b25e 100644 --- a/SafetyCenter/Resources/res/values-sq-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sq-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Siguria e rrjetit celular"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Lloji i rrjetit, enkriptimi, kontrollet e njoftimeve"</string> <string name="private_space_title" msgid="6158245041481535879">"Hapësira private"</string> <string name="private_space_summary" msgid="529869826714610294">"Konfiguro \"Hapësirën private\" dhe të tjera"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Hapësira private"</string> diff --git a/SafetyCenter/Resources/res/values-sr-v35/strings.xml b/SafetyCenter/Resources/res/values-sr-v35/strings.xml index b2349b10a..814988c5c 100644 --- a/SafetyCenter/Resources/res/values-sr-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sr-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Безбедност мобилне мреже"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тип мреже, шифровање, контроле обавештења"</string> <string name="private_space_title" msgid="6158245041481535879">"Приватни простор"</string> <string name="private_space_summary" msgid="529869826714610294">"Подесите приватни простор и друго"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Приватни простор"</string> diff --git a/SafetyCenter/Resources/res/values-sv-v35/strings.xml b/SafetyCenter/Resources/res/values-sv-v35/strings.xml index 85e0e6a7d..108d28f75 100644 --- a/SafetyCenter/Resources/res/values-sv-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sv-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Säkerhet för mobilnätverk"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Nätverkstyp, kryptering, aviseringsinställningar"</string> <string name="private_space_title" msgid="6158245041481535879">"Privat rum"</string> <string name="private_space_summary" msgid="529869826714610294">"Ställ in privat rum med mera"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Privat rum"</string> diff --git a/SafetyCenter/Resources/res/values-sw-v35/strings.xml b/SafetyCenter/Resources/res/values-sw-v35/strings.xml index 9ef8839b5..44a51760d 100644 --- a/SafetyCenter/Resources/res/values-sw-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-sw-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Usalama wa mtandao wa simu"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Aina ya mtandao, usimbaji fiche, vidhibiti vya arifa"</string> <string name="private_space_title" msgid="6158245041481535879">"Nafasi ya Faragha"</string> <string name="private_space_summary" msgid="529869826714610294">"Weka mipangilio ya Nafasi ya Faragha na zaidi"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Nafasi ya Faragha"</string> diff --git a/SafetyCenter/Resources/res/values-ta-v35/strings.xml b/SafetyCenter/Resources/res/values-ta-v35/strings.xml index 73591d1b0..ba518fb66 100644 --- a/SafetyCenter/Resources/res/values-ta-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ta-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"மொபைல் நெட்வொர்க் பாதுகாப்பு"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"நெட்வொர்க் வகை, என்க்ரிப்ஷன், அறிவிப்புக் கட்டுப்பாடுகள்"</string> <string name="private_space_title" msgid="6158245041481535879">"தனிப்பட்ட சேமிப்பிடம்"</string> <string name="private_space_summary" msgid="529869826714610294">"தனிப்பட்ட சேமிப்பிடத்தை அமைக்கலாம் மற்றும் பலவற்றைச் செய்யலாம்"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"தனிப்பட்ட சேமிப்பிடம்"</string> diff --git a/SafetyCenter/Resources/res/values-te-v35/strings.xml b/SafetyCenter/Resources/res/values-te-v35/strings.xml index ffccea816..757be94a0 100644 --- a/SafetyCenter/Resources/res/values-te-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-te-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"సెల్యులర్ నెట్వర్క్ సెక్యూరిటీ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"నెట్వర్క్ రకం, ఎన్క్రిప్షన్, నోటిఫికేషన్ కంట్రోల్స్"</string> <string name="private_space_title" msgid="6158245041481535879">"ప్రైవేట్ స్పేస్"</string> <string name="private_space_summary" msgid="529869826714610294">"ప్రైవేట్ స్పేస్ను సెటప్ చేయండి, మరెన్నింటినో చేయండి"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"ప్రైవేట్ స్పేస్"</string> diff --git a/SafetyCenter/Resources/res/values-th-v35/strings.xml b/SafetyCenter/Resources/res/values-th-v35/strings.xml index f16443413..8c00c1270 100644 --- a/SafetyCenter/Resources/res/values-th-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-th-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"การรักษาความปลอดภัยของเครือข่ายมือถือ"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"ประเภทเครือข่าย การเข้ารหัส ส่วนควบคุมการแจ้งเตือน"</string> <string name="private_space_title" msgid="6158245041481535879">"พื้นที่ส่วนตัว"</string> <string name="private_space_summary" msgid="529869826714610294">"ตั้งค่าพื้นที่ส่วนตัวและอื่นๆ"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"พื้นที่ส่วนตัว"</string> diff --git a/SafetyCenter/Resources/res/values-tl-v35/strings.xml b/SafetyCenter/Resources/res/values-tl-v35/strings.xml index f28f2ba45..990f0e505 100644 --- a/SafetyCenter/Resources/res/values-tl-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-tl-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Seguridad ng cellular network"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Network type, pag-encrypt, mga kontrol sa notification"</string> <string name="private_space_title" msgid="6158245041481535879">"Pribadong Space"</string> <string name="private_space_summary" msgid="529869826714610294">"I-set up ang Pribadong Space, at higit pa"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Pribadong Space"</string> diff --git a/SafetyCenter/Resources/res/values-tr-v35/strings.xml b/SafetyCenter/Resources/res/values-tr-v35/strings.xml index 26977f3d3..1c84e5cae 100644 --- a/SafetyCenter/Resources/res/values-tr-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-tr-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Hücresel ağ güvenliği"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Ağ türü, şifreleme, bildirim kontrolleri"</string> <string name="private_space_title" msgid="6158245041481535879">"Gizli Alan"</string> <string name="private_space_summary" msgid="529869826714610294">"Gizli alan yapılandırma ve daha fazlası"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Gizli Alan"</string> diff --git a/SafetyCenter/Resources/res/values-uk-v35/strings.xml b/SafetyCenter/Resources/res/values-uk-v35/strings.xml index 4478750ab..f8b981114 100644 --- a/SafetyCenter/Resources/res/values-uk-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-uk-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Безпека мобільної мережі"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Тип мережі, шифрування, налаштування сповіщень"</string> <string name="private_space_title" msgid="6158245041481535879">"Приватний простір"</string> <string name="private_space_summary" msgid="529869826714610294">"Налаштуйте приватний простір тощо"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Приватний простір"</string> diff --git a/SafetyCenter/Resources/res/values-ur-v35/strings.xml b/SafetyCenter/Resources/res/values-ur-v35/strings.xml index c506baa97..5dd2ca23b 100644 --- a/SafetyCenter/Resources/res/values-ur-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-ur-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"سیلولر نیٹ ورک سیکیورٹی"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"نیٹ ورک کی قسم، مرموز کاری، نوٹیفکیشن کنٹرولز"</string> <string name="private_space_title" msgid="6158245041481535879">"نجی اسپیس"</string> <string name="private_space_summary" msgid="529869826714610294">"نجی اسپیس اور بھی بہت کچھ سیٹ اپ کریں"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"نجی اسپیس"</string> diff --git a/SafetyCenter/Resources/res/values-uz-v35/strings.xml b/SafetyCenter/Resources/res/values-uz-v35/strings.xml index d8813cc82..f7822cfd5 100644 --- a/SafetyCenter/Resources/res/values-uz-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-uz-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Mobil tarmoq xavfsizligi"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Tarmoq turi, shifrlash, bildirishnomalar boshqaruvi"</string> <string name="private_space_title" msgid="6158245041481535879">"Maxfiy joy"</string> <string name="private_space_summary" msgid="529869826714610294">"Maxfiy joyni sozlash"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Maxfiy joy"</string> diff --git a/SafetyCenter/Resources/res/values-v35/strings.xml b/SafetyCenter/Resources/res/values-v35/strings.xml index 620dc8d60..af43f11f2 100644 --- a/SafetyCenter/Resources/res/values-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-v35/strings.xml @@ -16,6 +16,10 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Cellular Network Security --> + <string name="cellular_network_security_title" description="The title of the group of safety settings relating to cellular network security">Cellular network security</string> + <string name="cellular_network_security_summary" description="The summary of the group of safety settings relating to cellular network security, which describes the group contents">Network type, encryption, notification controls</string> + <!-- More settings --> <string name="private_space_title" description="The title of the entry for Private Space">Private Space</string> <string name="private_space_summary" description="The summary of the entry for Private Space settings, which describes the page contents">Setup Private Space, and more</string> diff --git a/SafetyCenter/Resources/res/values-vi-v35/strings.xml b/SafetyCenter/Resources/res/values-vi-v35/strings.xml index b37e81085..cefc57faa 100644 --- a/SafetyCenter/Resources/res/values-vi-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-vi-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Chế độ bảo mật mạng di động"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Loại mạng, quy trình mã hoá, quyền kiểm soát thông báo"</string> <string name="private_space_title" msgid="6158245041481535879">"Không gian riêng tư"</string> <string name="private_space_summary" msgid="529869826714610294">"Thiết lập Không gian riêng tư và các tính năng khác"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Không gian riêng tư"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml index 5b8a8fe8d..ff50335d8 100644 --- a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml @@ -20,8 +20,8 @@ <string name="lock_screen_sources_title" msgid="5493678510117489865">"设备解锁"</string> <string name="biometrics_title_for_work" msgid="1842284049407771568">"适用于工作应用的生物识别"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"权限、信息中心和控件"</string> - <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, Health, Health Connect"</string> + <string name="health_connect_title" msgid="8318152190040327804">"健康数据共享"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康数据共享, Health, Health Connect"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置数据分享方面的更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"数据, 数据分享, 数据分享方面的更新, 位置数据分享方面的更新, 分享, Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing"</string> <string name="advanced_title" msgid="6259362998269627310">"其他设置"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v35/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v35/strings.xml index e13cffd8a..e0be57584 100644 --- a/SafetyCenter/Resources/res/values-zh-rCN-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rCN-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"移动网络安全性"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"网络类型、加密、通知控件"</string> <string name="private_space_title" msgid="6158245041481535879">"私密空间"</string> <string name="private_space_summary" msgid="529869826714610294">"设置私密空间等"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"私密空间"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml index a11abbde1..c850335ad 100644 --- a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml @@ -21,7 +21,7 @@ <string name="biometrics_title_for_work" msgid="1842284049407771568">"用於工作應用程式的生物識別選項"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"權限、資訊主頁、控制項"</string> <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, Health Connect"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康資料同步"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置資料分享更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享"</string> <string name="advanced_title" msgid="6259362998269627310">"其他設定"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v35/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v35/strings.xml index 996efe5f3..334da7a63 100644 --- a/SafetyCenter/Resources/res/values-zh-rHK-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rHK-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"流動網絡安全性"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"網絡類型、加密、通知控制項"</string> <string name="private_space_title" msgid="6158245041481535879">"私人空間"</string> <string name="private_space_summary" msgid="529869826714610294">"設定「私人空間」等項目"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"私人空間"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml index 288a0566c..09f8e9d5d 100644 --- a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml @@ -20,8 +20,8 @@ <string name="lock_screen_sources_title" msgid="5493678510117489865">"裝置解鎖"</string> <string name="biometrics_title_for_work" msgid="1842284049407771568">"工作應用程式的生物特徵辨識選項"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"權限、資訊主頁、控制選項"</string> - <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康、Health Connect"</string> + <string name="health_connect_title" msgid="8318152190040327804">"健康資料同步"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康資料同步"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置資料分享更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享"</string> <string name="advanced_title" msgid="6259362998269627310">"其他設定"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v35/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v35/strings.xml index 36f68819d..2e21b3047 100644 --- a/SafetyCenter/Resources/res/values-zh-rTW-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rTW-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"行動網路安全性"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"網路類型、加密、通知控制選項"</string> <string name="private_space_title" msgid="6158245041481535879">"私人空間"</string> <string name="private_space_summary" msgid="529869826714610294">"設定私人空間等項目"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"私人空間"</string> diff --git a/SafetyCenter/Resources/res/values-zu-v35/strings.xml b/SafetyCenter/Resources/res/values-zu-v35/strings.xml index 659e1b58d..4576f3dd0 100644 --- a/SafetyCenter/Resources/res/values-zu-v35/strings.xml +++ b/SafetyCenter/Resources/res/values-zu-v35/strings.xml @@ -17,6 +17,8 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="cellular_network_security_title" msgid="2986431282931510973">"Ukuphepha kwenethiwekhi yeselula"</string> + <string name="cellular_network_security_summary" msgid="7319307247487475572">"Uhlobo lwenethiwekhi, ukubethela, izilawuli zezaziso"</string> <string name="private_space_title" msgid="6158245041481535879">"Isikhala Esiyimfihlo"</string> <string name="private_space_summary" msgid="529869826714610294">"Setha Isikhala Esiyimfihlo, nokunye"</string> <string name="private_space_search_terms" msgid="4820808478299116258">"Isikhala Esiyimfihlo"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pa/strings.xml b/SafetyCenter/Resources/shared_res/values-pa/strings.xml index 54aad5cbb..8b17156df 100644 --- a/SafetyCenter/Resources/shared_res/values-pa/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pa/strings.xml @@ -39,7 +39,7 @@ <string name="overall_severity_level_critical_account_warning_title" msgid="1913235490583842004">"ਖਾਤਾ ਜੋਖਮ ਵਿੱਚ ਹੈ"</string> <string name="overall_severity_n_alerts_summary" msgid="3262010942295408403">"{count,plural, =1{ਅਲਰਟ ਦੇਖੋ}one{ਅਲਰਟ ਦੇਖੋ}other{ਅਲਰਟ ਦੇਖੋ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ਪੰਨਾ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string> - <string name="resolving_action_error" msgid="371968886143262375">"ਸੁਚੇਤਨਾ ਦਾ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> + <string name="resolving_action_error" msgid="371968886143262375">"ਅਲਰਟ ਦਾ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{ਸੈਟਿੰਗ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}one{ਸੈਟਿੰਗ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}other{ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}}"</string> <string name="work_profile_paused" msgid="7037400224040869079">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string> <string name="group_unknown_summary" msgid="6951386960814105641">"ਅਜੇ ਕੋਈ ਜਾਣਕਾਰੀ ਨਹੀਂ ਹੈ"</string> diff --git a/flags/Android.bp b/flags/Android.bp index 4f0241f91..81555a471 100644 --- a/flags/Android.bp +++ b/flags/Android.bp @@ -27,39 +27,15 @@ aconfig_declarations { java_aconfig_library { name: "permissions-aconfig-flags-lib", aconfig_declarations: "permissions-aconfig-flags", - sdk_version: "system_current", + sdk_version: "module_current", min_sdk_version: "30", apex_available: [ "com.android.permission", "test_com.android.permission", ], installable: false, + libs: ["framework-configinfrastructure"], visibility: [ "//packages/modules/Permission:__subpackages__", ], } - -java_library { - name: "permissions-flags-lib", - sdk_version: "system_current", - min_sdk_version: "30", - target_sdk_version: "34", - srcs: [ - "java/**/*.java", - ], - static_libs: [ - "permissions-aconfig-flags-lib", - ], - libs: [ - "androidx.annotation_annotation", - "framework-annotations-lib", - ], - apex_available: [ - "com.android.permission", - "test_com.android.permission", - ], - installable: false, - visibility: [ - "//packages/modules/Permission:__subpackages__", - ], -}
\ No newline at end of file diff --git a/flags/flags.aconfig b/flags/flags.aconfig index 37aca2a56..5d9e01052 100644 --- a/flags/flags.aconfig +++ b/flags/flags.aconfig @@ -1,13 +1,6 @@ package: "com.android.permission.flags" flag { - name: "voice_activation_op_enabled" - namespace: "permissions" - description: "This flag is used to support hotword activation events in privacy dashboard" - bug: "287264308" -} - -flag { name: "device_aware_permission_grant" namespace: "permissions" description: "Enables device aware grant permission flow" @@ -19,4 +12,12 @@ flag { namespace: "wear_security" description: "This flag is used to support Privacy dashboard for Wear" bug: "309721061" +} + +flag { + name: "archiving_read_only" + namespace: "permissions" + description: "Feature flag to enable the archiving feature." + bug: "278553670" + is_fixed_read_only: true }
\ No newline at end of file diff --git a/framework-s/Android.bp b/framework-s/Android.bp index 0fb953c0f..3ff224fa8 100644 --- a/framework-s/Android.bp +++ b/framework-s/Android.bp @@ -55,6 +55,9 @@ java_library { installable: false, min_sdk_version: "30", sdk_version: "module_current", + lint: { + baseline_filename: "lint-baseline.xml", + }, } platform_compat_config { @@ -77,6 +80,7 @@ java_sdk_library { "framework-permission-s-shared", "modules-utils-build", "android.permission.flags-aconfig-java", + "permissions-aconfig-flags-lib", ], apex_available: [ "com.android.permission", @@ -90,23 +94,12 @@ java_sdk_library { ], installable: true, jarjar_rules: "jarjar-rules.txt", - lint: { - strict_updatability_linting: true, - }, min_sdk_version: "31", permitted_packages: [ "android.permission", "android.app.role", + "android.app.ecm", "android.safetycenter", "android.safetylabel", ], } - -java_api_contribution { - name: "framework-permission-s-public-stubs", - api_surface: "public", - api_file: "api/current.txt", - visibility: [ - "//build/orchestrator/apis", - ], -} diff --git a/framework-s/api/current.txt b/framework-s/api/current.txt index d54af92f5..d943a03a1 100644 --- a/framework-s/api/current.txt +++ b/framework-s/api/current.txt @@ -14,6 +14,7 @@ package android.app.role { field public static final String ROLE_HOME = "android.app.role.HOME"; field public static final String ROLE_NOTES = "android.app.role.NOTES"; field public static final String ROLE_SMS = "android.app.role.SMS"; + field @FlaggedApi("android.permission.flags.wallet_role_enabled") public static final String ROLE_WALLET = "android.app.role.WALLET"; } } diff --git a/framework-s/api/module-lib-current.txt b/framework-s/api/module-lib-current.txt index 80f1cde45..14f71782e 100644 --- a/framework-s/api/module-lib-current.txt +++ b/framework-s/api/module-lib-current.txt @@ -1,4 +1,12 @@ // Signature format: 2.0 +package android.app.ecm { + + @FlaggedApi("android.permission.flags.enhanced_confirmation_mode_apis_enabled") public class EnhancedConfirmationFrameworkInitializer { + method public static void registerServiceWrappers(); + } + +} + package android.app.role { public class RoleFrameworkInitializer { diff --git a/framework-s/api/system-current.txt b/framework-s/api/system-current.txt index a29a68acd..183de368a 100644 --- a/framework-s/api/system-current.txt +++ b/framework-s/api/system-current.txt @@ -1,4 +1,16 @@ // Signature format: 2.0 +package android.app.ecm { + + @FlaggedApi("android.permission.flags.enhanced_confirmation_mode_apis_enabled") public final class EnhancedConfirmationManager { + method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public void clearRestriction(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @NonNull public android.app.PendingIntent getRestrictedSettingDialogIntent(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public boolean isClearRestrictionAllowed(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public boolean isRestricted(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public void setClearRestrictionAllowed(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + } + +} + package android.app.role { public interface OnRoleHoldersChangedListener { @@ -10,6 +22,7 @@ package android.app.role { method @Deprecated @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int); method @Deprecated @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); method @Deprecated @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int); + method @Deprecated @FlaggedApi("android.permission.flags.system_server_role_controller_enabled") @NonNull public java.util.List<java.lang.String> onGetLegacyFallbackDisabledRoles(); method @Deprecated @WorkerThread public abstract boolean onGrantDefaultRoles(); method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String); method @Deprecated public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String); @@ -29,14 +42,14 @@ package android.app.role { method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean isBypassingRoleQualification(); - method @FlaggedApi(android.permission.flags.Flags.FLAG_SYSTEM_SERVER_ROLE_CONTROLLER_ENABLED) @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean isRoleFallbackEnabled(@NonNull String); + method @FlaggedApi("android.permission.flags.system_server_role_controller_enabled") @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean isRoleFallbackEnabled(@NonNull String); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); method @RequiresPermission(android.Manifest.permission.BYPASS_ROLE_QUALIFICATION) public void setBypassingRoleQualification(boolean); method @RequiresPermission(android.Manifest.permission.MANAGE_DEFAULT_APPLICATIONS) public void setDefaultApplication(@NonNull String, @Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); - method @FlaggedApi(android.permission.flags.Flags.FLAG_SYSTEM_SERVER_ROLE_CONTROLLER_ENABLED) @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void setRoleFallbackEnabled(@NonNull String, boolean); + method @FlaggedApi("android.permission.flags.system_server_role_controller_enabled") @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void setRoleFallbackEnabled(@NonNull String, boolean); method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List<java.lang.String>); field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1 field public static final String ROLE_DEVICE_POLICY_MANAGEMENT = "android.app.role.DEVICE_POLICY_MANAGEMENT"; diff --git a/framework-s/jarjar-rules.txt b/framework-s/jarjar-rules.txt index 39f2ad3b7..da8f5a5f1 100644 --- a/framework-s/jarjar-rules.txt +++ b/framework-s/jarjar-rules.txt @@ -1,5 +1,8 @@ rule android.os.HandlerExecutor android.permission.jarjar.@0 -rule android.permission.flags.** android.permission.jarjar.@0 +rule android.permission.flags.*Flags* android.permission.jarjar.@0 +rule android.permission.flags.Flags android.permission.jarjar.@0 rule android.util.IndentingPrintWriter android.permission.jarjar.@0 rule com.android.internal.** android.permission.jarjar.@0 rule com.android.modules.** android.permission.jarjar.@0 +rule com.android.permission.flags.*Flags* android.permission.jarjar.@0 +rule com.android.permission.flags.Flags android.permission.jarjar.@0 diff --git a/framework-s/java/android/app/ecm/EnhancedConfirmationFrameworkInitializer.java b/framework-s/java/android/app/ecm/EnhancedConfirmationFrameworkInitializer.java new file mode 100644 index 000000000..1a42f7ee2 --- /dev/null +++ b/framework-s/java/android/app/ecm/EnhancedConfirmationFrameworkInitializer.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.ecm; + +import android.annotation.FlaggedApi; +import android.annotation.SystemApi; +import android.annotation.TargetApi; +import android.app.SystemServiceRegistry; +import android.content.Context; +import android.os.Build; +import android.permission.flags.Flags; + +/** + * Class holding initialization code for enhanced confirmation code in the permission module. + * + * @hide + */ +@FlaggedApi(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) +@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) +public class EnhancedConfirmationFrameworkInitializer { + private EnhancedConfirmationFrameworkInitializer() {} + + /** + * Called by {@link SystemServiceRegistry}'s static initializer and registers + * {@link EnhancedConfirmationManager} to {@link Context}, so that + * {@link Context#getSystemService} can return it. + * + * <p>If this is called from other places, it throws a {@link IllegalStateException}. + */ + public static void registerServiceWrappers() { + SystemServiceRegistry.registerContextAwareService(Context.ECM_ENHANCED_CONFIRMATION_SERVICE, + EnhancedConfirmationManager.class, + (context, serviceBinder) -> new EnhancedConfirmationManager(context, + IEnhancedConfirmationManager.Stub.asInterface(serviceBinder))); + } +} diff --git a/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java new file mode 100644 index 000000000..4db179288 --- /dev/null +++ b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.ecm; + +import android.annotation.FlaggedApi; +import android.annotation.IntDef; +import android.annotation.RequiresPermission; +import android.annotation.SystemApi; +import android.annotation.SystemService; +import android.annotation.TargetApi; +import android.app.AppOpsManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build; +import android.os.RemoteException; +import android.permission.flags.Flags; +import android.provider.Settings; +import android.util.ArraySet; + +import androidx.annotation.NonNull; + +import java.lang.annotation.Retention; + +/** + * This class provides the core API for ECM (Enhanced Confirmation Mode). ECM is a feature that + * restricts access to protected **settings** (i.e., sensitive resources) by restricted **apps** + * (apps from from dangerous sources, such as sideloaded packages or packages downloaded from a web + * browser). + * + * <p>Specifically, this class provides the ability to: + * + * <ol> + * <li>Check whether a setting is restricted from an app ({@link #isRestricted}) + * <li>Get an intent that will open the "Restricted setting" dialog ({@link + * #getRestrictedSettingDialogIntent}) (a dialog that informs the user that the operation + * they've attempted to perform is restricted) + * <li>Check whether an app is eligible to have its restriction status cleared ({@link + * #isClearRestrictionAllowed}) + * <li>Clear an app's restriction status (i.e., un-restrict it). ({@link #clearRestriction}) + * </ol> + * + * <p>Methods of this class will generally accept an app (identified by a packageName and a user) + * and a "setting" (a string representing the "sensitive resource") as arguments. ECM's exact + * behavior will generally depend on what restriction state ECM considers each setting and app. For + * example: + * + * <ol> + * <li>A setting may be considered by ECM to be either **protected** or **not protected**. In + * general, this should be considered hardcoded into ECM's implementation: nothing can + * "protect" or "unprotect" a setting. + * <li>An app may be considered as being **not restricted** or **restricted**. A restricted app + * will be restricted from accessing all protected settings. Whether ECM considers any + * particular app restricted is an implementation detail of ECM. However, the user is able to + * clear any restricted app's restriction status (i.e, un-restrict it), after which ECM will + * consider the app **not restricted**. + * </ol> + * + * Why is ECM needed? Consider the following (pre-ECM) scenario: + * + * <ol> + * <li>The user downloads and installs an apk file from a browser. + * <li>The user opens Settings -> Accessibility + * <li>The user tries to register the app as an accessibility service. + * <li>The user is shown a permission prompt "Allow _ to have full control of your device?" + * <li>The user clicks "Allow" + * <li>The downloaded app now has full control of the device. + * </ol> + * + * The purpose of ECM is to add more friction to this scenario. + * + * <p>With ECM, this scenario becomes: + * + * <ol> + * <li>The user downloads and installs an apk file from a browser. + * <li>The user goes into Settings -> Accessibility. + * <li>The user tries to register the app as an accessibility service. + * <li>The user is presented with a "Restricted setting" dialog explaining that the attempted + * action has been restricted. (No "allow" button is shown, but a link is given to a screen + * with intentionally-obscure instructions on how to proceed.) + * <li>The user must now navigate to Settings -> Apps -> [app] + * <li>The user then must click on "..." (top-right corner hamburger menu), then click "Allow + * restricted settings" + * <li>The user goes (again) into Settings -> Accessibility and (again) tries to register the app + * as an accessibility service. + * <li>The user is shown a permission prompt "Allow _ to have full control of your device?" + * <li>The user clicks "Allow" + * <li>The downloaded app now has full control of the device. + * </ol> + * + * And, expanding on the above scenario, the role that this class plays is as follows: + * + * <ol> + * <li>The user downloads and installs an apk file from a browser. + * <li>The user goes into Settings -> Accessibility. + * <p>**This screen then calls {@link #isRestricted}, which checks whether each app listed + * on-screen is restricted from the accessibility service setting. It uses this to visually + * "gray out" restricted apps.** + * <li>The user tries to register the app as an accessibility service. + * <p>**This screen then calls {@link #getRestrictedSettingDialogIntent} and starts the + * intent. This opens the "Restricted setting" dialog.** + * <li>The user is presented with a "Restricted setting" dialog explaining that the attempted + * action is restricted. (No "allow" button is shown, but a link is given to a screen with + * intentionally-obscure instructions on how to proceed.) + * <p>**Upon opening, this dialog marks the app as eligible to have its restriction status + * cleared.** + * <li>The user must now navigate to Settings -> Apps -> [app]. + * <p>**This screen calls {@link #isClearRestrictionAllowed} to check whether the app is + * eligible to have its restriction status cleared. If this returns {@code true}, this screen + * should then show a "Allow restricted setting" button inside the top-right hamburger menu.** + * <li>The user then must click on "..." (top-right corner hamburger menu), then click "Allow + * restricted settings". + * <p>**In response, this screen should now call {@link #clearRestriction}.** + * <li>The user goes (again) into Settings -> Accessibility and (again) tries to register the app + * as an accessibility service. + * <li>The user is shown a permission prompt "Allow _ to have full control of your device?" + * <li>The user clicks "Allow" + * <li>The downloaded app now has full control of the device. + * </ol> + * + * @hide + */ +@SystemApi +@FlaggedApi(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) +@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +@SystemService(Context.ECM_ENHANCED_CONFIRMATION_SERVICE) +public final class EnhancedConfirmationManager { + /* + * At the API level, we use the following terminology: + * + * - The capability of an app to access a setting may be considered (by ECM) to be *restricted* + * or *not restricted*. + * - A setting may be considered (by ECM) to be *protected* or *not protected*. + * - The state of an app may be considered (by ECM) to be *restricted* or *not restricted* + * + * In this implementation, however, the state of an app is considered either **guarded** or + * **not guarded**; these terms can generally be considered synonymous with **restricted** and + * **not restricted**. (Keeping in mind that, the capability of any app to access any + * non-protected setting will always be considered "not restricted", even if the state of the + * app is considered "restricted".). An app can also be in a third state: **guarded and + * acknowledged**, which corresponds with an app that is restricted and is eligible to have its + * restriction status cleared. + * + * Currently, the ECM state of any given app is stored in the OP_ACCESS_RESTRICTED_SETTINGS + * appop (though this may change in the future): + * + * - MODE_ALLOWED means the app is explicitly **not guarded**. (U- default) + * - MODE_ERRORED means the app is explicitly **guarded**. (Only settable in U-.) + * - MODE_IGNORED means the app is explicitly **guarded and acknowledged**. (An app enters this + * state as soon as the "Restricted setting" dialog has been shown to the user. If an app is + * in this state, Settings is now allowed to provide the user with the option to clear the + * restriction.) + * - MODE_DEFAULT means the app's ECM state should be decided lazily. (V+ default) (That is, + * each time a caller checks whether or not an app is considered guarded by ECM, we'll run an + * heuristic to determine this.) + * + * Some notes on compatibility: + * + * - On U-, MODE_ALLOWED is the default mode of OP_ACCESS_RESTRICTED_SETTINGS. On both U- and + * V+, this is also the mode after the app's restriction has been cleared. + * - In U-, the mode needed to be explicitly set (for example, by a browser that allows a + * dangerous app to be installed) to MODE_ERRORED to indicate that an app is guarded. In V+, + * we no longer allow an app to be placed into MODE_ERRORED, but for compatibility, we still + * recognize MODE_ERRORED to indicate that an app is explicitly guarded. + * - In V+, the default mode is MODE_DEFAULT. Unlike U-, this potentially affects *all* apps, + * not just the ones which have been explicitly marked as **guarded**. + * + * Regarding ECM "setting"s: a setting may be any abstract resource identified by a string. ECM + * may consider any particular setting **protected** or **not protected**. For now, the set of + * protected settings is hardcoded, but this may evolve in the future. + * + * TODO(b/320512579): These methods currently enforce UPDATE_APP_OPS_STATS, + * UPDATE_APP_OPS_STATS, and, for setter methods, MANAGE_APP_OPS_MODES. We should add + * RequiresPermission annotations, but we can't, because some of these permissions are hidden + * API. Either upgrade these to SystemApi or enforce a different permission, then add the + * appropriate RequiresPermission annotation. + */ + + /** A map of ECM states to their corresponding app op states */ + @Retention(java.lang.annotation.RetentionPolicy.SOURCE) + @IntDef(prefix = {"ECM_STATE_"}, value = {EcmState.ECM_STATE_NOT_GUARDED, + EcmState.ECM_STATE_GUARDED, EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED, + EcmState.ECM_STATE_IMPLICIT}) + private @interface EcmState { + int ECM_STATE_NOT_GUARDED = AppOpsManager.MODE_ALLOWED; + int ECM_STATE_GUARDED = AppOpsManager.MODE_ERRORED; + int ECM_STATE_GUARDED_AND_ACKNOWLEDGED = AppOpsManager.MODE_IGNORED; + int ECM_STATE_IMPLICIT = AppOpsManager.MODE_DEFAULT; + } + + private static final String LOG_TAG = EnhancedConfirmationManager.class.getSimpleName(); + + private static final ArraySet<String> PROTECTED_SETTINGS = new ArraySet<>(); + + static { + PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE); + // TODO(b/310654015): Add other explicitly protected settings + } + + private final @NonNull Context mContext; + private final PackageManager mPackageManager; + + private final @NonNull IEnhancedConfirmationManager mService; + + /** + * @hide + */ + public EnhancedConfirmationManager(@NonNull Context context, + @NonNull IEnhancedConfirmationManager service) { + mContext = context; + mPackageManager = context.getPackageManager(); + mService = service; + } + + /** + * Check whether a setting is restricted from an app. + * + * <p>This is {@code true} when the setting is a protected setting (i.e., a sensitive resource), + * and the app is restricted (i.e., considered dangerous), and the user has not yet cleared the + * app's restriction status (i.e., by clicking "Allow restricted settings" for this app). + * + * @param packageName package name of the application to check for + * @param settingIdentifier identifier of the resource to check to check for + * @return {@code true} if the setting is restricted from the app + * @throws NameNotFoundException if the provided package was not found + */ + @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) + public boolean isRestricted(@NonNull String packageName, @NonNull String settingIdentifier) + throws NameNotFoundException { + try { + return mService.isRestricted(packageName, settingIdentifier, + mContext.getUser().getIdentifier()); + } catch (IllegalArgumentException e) { + throw new NameNotFoundException(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Clear an app's restriction status (i.e., un-restrict it). + * + * <p>After this is called, the app will no longer be restricted from accessing any protected + * setting by ECM. This method should be called when the user clicks "Allow restricted settings" + * for the app. + * + * @param packageName package name of the application to remove protection from + * @throws NameNotFoundException if the provided package was not found + */ + @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) + public void clearRestriction(@NonNull String packageName) throws NameNotFoundException { + try { + mService.clearRestriction(packageName, mContext.getUser().getIdentifier()); + } catch (IllegalArgumentException e) { + throw new NameNotFoundException(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Check whether the provided app is eligible to have its restriction status cleared (i.e., the + * app is restricted, and the "Restricted setting" dialog has been presented to the user). + * + * <p>The Settings UI should use method this to check whether to present the user with the + * "Allow restricted settings" button. + * + * @param packageName package name of the application to check for + * @return {@code true} if the settings UI should present the user with the ability to clear + * restrictions from the provided app + * @throws NameNotFoundException if the provided package was not found + */ + @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) + public boolean isClearRestrictionAllowed(@NonNull String packageName) + throws NameNotFoundException { + try { + return mService.isClearRestrictionAllowed(packageName, + mContext.getUser().getIdentifier()); + } catch (IllegalArgumentException e) { + throw new NameNotFoundException(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Mark the app as eligible to have its restriction status cleared. + * + * <p>This should be called from the "Restricted setting" dialog (which {@link + * #getRestrictedSettingDialogIntent} directs to) upon being presented to the user. + * + * @param packageName package name of the application which should be considered acknowledged + * @throws NameNotFoundException if the provided package was not found + */ + @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) + public void setClearRestrictionAllowed(@NonNull String packageName) + throws NameNotFoundException { + try { + mService.setClearRestrictionAllowed(packageName, mContext.getUser().getIdentifier()); + } catch (IllegalArgumentException e) { + throw new NameNotFoundException(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Gets an intent that will open the "Restricted setting" dialog for the specified app. + * + * <p>The "Restricted setting" dialog is a dialog that informs the user that the operation + * they've attempted to perform is restricted, and provides them with a link explaining how to + * proceed. + * + * @param packageName package name of the application to open the dialog for + * @throws NameNotFoundException if the provided package was not found + */ + public @NonNull PendingIntent getRestrictedSettingDialogIntent(@NonNull String packageName) + throws NameNotFoundException { + Intent intent = new Intent(Settings.ACTION_SHOW_RESTRICTED_SETTING_DIALOG); + intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); + intent.putExtra(Intent.EXTRA_UID, getPackageUid(packageName)); + return PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_IMMUTABLE); + } + + private int getPackageUid(String packageName) throws NameNotFoundException { + return mPackageManager.getApplicationInfoAsUser(packageName, /* flags */ 0, + mContext.getUser()).uid; + } +} diff --git a/flags/java/com/android/permission/flags/PermissionsFlags.java b/framework-s/java/android/app/ecm/IEnhancedConfirmationManager.aidl index afab3fae5..5149daa49 100644 --- a/flags/java/com/android/permission/flags/PermissionsFlags.java +++ b/framework-s/java/android/app/ecm/IEnhancedConfirmationManager.aidl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,20 @@ * limitations under the License. */ -package com.android.permission.flags; +package android.app.ecm; -/** Class used for flags that do not work with aconfig tooling */ -public final class PermissionsFlags {} +import android.os.RemoteCallback; + +/** + * @hide + */ +interface IEnhancedConfirmationManager { + + boolean isRestricted(in String packageName, in String settingIdentifier, int userId); + + void clearRestriction(in String packageName, int userId); + + boolean isClearRestrictionAllowed(in String packageName, int userId); + + void setClearRestrictionAllowed(in String packageName, int userId); +} diff --git a/framework-s/java/android/app/role/IRoleController.aidl b/framework-s/java/android/app/role/IRoleController.aidl index 8a43d7fa9..948915f8d 100644 --- a/framework-s/java/android/app/role/IRoleController.aidl +++ b/framework-s/java/android/app/role/IRoleController.aidl @@ -40,4 +40,6 @@ oneway interface IRoleController { in RemoteCallback callback); void isRoleVisible(in String roleName, in RemoteCallback callback); + + void getLegacyFallbackDisabledRoles(in RemoteCallback callback); } diff --git a/framework-s/java/android/app/role/RoleControllerManager.java b/framework-s/java/android/app/role/RoleControllerManager.java index 3b990b315..57da2ccd0 100644 --- a/framework-s/java/android/app/role/RoleControllerManager.java +++ b/framework-s/java/android/app/role/RoleControllerManager.java @@ -37,6 +37,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.AndroidFuture; import com.android.internal.infra.ServiceConnector; +import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -48,6 +49,12 @@ import java.util.function.Consumer; */ public class RoleControllerManager { + /** + * Bundle key for getting legacy fallback disabled roles + */ + public static final String KEY_LEGACY_FALLBACK_DISABLED_ROLES = + "LEGACY_FALLBACK_DISABLED_ROLES"; + private static final String LOG_TAG = RoleControllerManager.class.getSimpleName(); private static final long REQUEST_TIMEOUT_MILLIS = 15 * 1000; @@ -187,8 +194,7 @@ public class RoleControllerManager { @RoleManager.ManageHoldersFlags int flags, @NonNull RemoteCallback callback) { AndroidFuture<Bundle> operation = mRemoteService.postAsync(service -> { AndroidFuture<Bundle> future = new AndroidFuture<>(); - service.onClearRoleHolders(roleName, flags, - new RemoteCallback(future::complete)); + service.onClearRoleHolders(roleName, flags, new RemoteCallback(future::complete)); return future; }); propagateCallback(operation, "onClearRoleHolders", callback); @@ -227,6 +233,35 @@ public class RoleControllerManager { propagateCallback(operation, "isRoleVisible", executor, callback); } + /** + * @see RoleControllerService#onGrantDefaultRoles() + * + * @hide + */ + public void getLegacyFallbackDisabledRoles(@NonNull @CallbackExecutor Executor executor, + @NonNull Consumer<List<String>> callback) { + mRemoteService.postAsync(service -> { + AndroidFuture<Bundle> future = new AndroidFuture<>(); + service.getLegacyFallbackDisabledRoles(new RemoteCallback(future::complete)); + return future; + }).orTimeout(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + .whenComplete((res, err) -> executor.execute(() -> { + final long token = Binder.clearCallingIdentity(); + try { + if (err != null) { + Log.e(LOG_TAG, "Error calling getLegacyFallbackDisabledRoles()", + err); + callback.accept(null); + } else { + callback.accept(res.getStringArrayList( + KEY_LEGACY_FALLBACK_DISABLED_ROLES)); + } + } finally { + Binder.restoreCallingIdentity(token); + } + })); + } + private void propagateCallback(AndroidFuture<Bundle> operation, String opName, @CallbackExecutor @NonNull Executor executor, Consumer<Boolean> destination) { diff --git a/framework-s/java/android/app/role/RoleControllerService.java b/framework-s/java/android/app/role/RoleControllerService.java index cf7872913..60a13f7ba 100644 --- a/framework-s/java/android/app/role/RoleControllerService.java +++ b/framework-s/java/android/app/role/RoleControllerService.java @@ -17,6 +17,7 @@ package android.app.role; import android.Manifest; +import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -31,9 +32,12 @@ import android.os.IBinder; import android.os.Process; import android.os.RemoteCallback; import android.os.UserHandle; +import android.permission.flags.Flags; import com.android.internal.util.Preconditions; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; @@ -175,6 +179,19 @@ public abstract class RoleControllerService extends Service { boolean visible = onIsRoleVisible(roleName); callback.sendResult(visible ? Bundle.EMPTY : null); } + + @Override + public void getLegacyFallbackDisabledRoles(RemoteCallback callback) { + enforceCallerSystemUid("getLegacyFallbackDisabledRoles"); + + Objects.requireNonNull(callback, "callback cannot be null"); + + List<String> legacyFallbackDisabledRoles = onGetLegacyFallbackDisabledRoles(); + Bundle result = new Bundle(); + result.putStringArrayList(RoleControllerManager.KEY_LEGACY_FALLBACK_DISABLED_ROLES, + new ArrayList<>(legacyFallbackDisabledRoles)); + callback.sendResult(result); + } }; } @@ -301,4 +318,15 @@ public abstract class RoleControllerService extends Service { * @return whether the role should be visible to user */ public abstract boolean onIsRoleVisible(@NonNull String roleName); + + /** + * Get the legacy fallback disabled state. + * + * @return A list of role names with disabled fallback state. + */ + @FlaggedApi(Flags.FLAG_SYSTEM_SERVER_ROLE_CONTROLLER_ENABLED) + @NonNull + public List<String> onGetLegacyFallbackDisabledRoles() { + throw new UnsupportedOperationException(); + } } diff --git a/framework-s/java/android/app/role/RoleManager.java b/framework-s/java/android/app/role/RoleManager.java index 3cf1e94ba..fe27d50f3 100644 --- a/framework-s/java/android/app/role/RoleManager.java +++ b/framework-s/java/android/app/role/RoleManager.java @@ -146,6 +146,15 @@ public final class RoleManager { public static final String ROLE_NOTES = "android.app.role.NOTES"; /** + * The name of the Wallet role. + * + * @see android.nfc.cardemulation.CardEmulation + */ + @FlaggedApi(Flags.FLAG_WALLET_ROLE_ENABLED) + @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) + public static final String ROLE_WALLET = "android.app.role.WALLET"; + + /** * The name of the system wellbeing role. * * @hide diff --git a/framework-s/lint-baseline.xml b/framework-s/lint-baseline.xml index b91b959e4..eb4ed1796 100644 --- a/framework-s/lint-baseline.xml +++ b/framework-s/lint-baseline.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> -<issues format="6" by="lint 8.0.0-dev" type="baseline" dependencies="true" variant="all" version="8.0.0-dev"> +<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01"> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.content.Context#getUser`" - errorLine1=" .append(String.valueOf(mContext.getUser().getIdentifier())).println();" - errorLine2=" ~~~~~~~"> + message="Call requires API level 33 (current min is 30): `android.util.Slog#e`" + errorLine1=' Slog.e(LOG_TAG, "Failed to unbind: " + e);' + errorLine2=" ~"> <location file="frameworks/base/core/java/com/android/internal/infra/ServiceConnector.java" - line="707" - column="53"/> + line="576" + column="26"/> </issue> <issue @@ -25,13 +25,13 @@ <issue id="NewApi" - message="Call requires API level 33 (current min is 30): `android.util.Slog#e`" - errorLine1=' Slog.e(LOG_TAG, "Failed to unbind: " + e);' - errorLine2=" ~"> + message="Call requires API level 31 (current min is 30): `android.content.Context#getUser`" + errorLine1=" .append(String.valueOf(mContext.getUser().getIdentifier())).println();" + errorLine2=" ~~~~~~~"> <location file="frameworks/base/core/java/com/android/internal/infra/ServiceConnector.java" - line="576" - column="26"/> + line="707" + column="53"/> </issue> </issues>
\ No newline at end of file diff --git a/framework/Android.bp b/framework/Android.bp index 893d6ea4d..bd4c9dc81 100644 --- a/framework/Android.bp +++ b/framework/Android.bp @@ -56,12 +56,3 @@ java_sdk_library { hostdex: true, installable: true, } - -java_api_contribution { - name: "framework-permission-public-stubs", - api_surface: "public", - api_file: "api/current.txt", - visibility: [ - "//build/orchestrator/apis", - ], -} diff --git a/service/Android.bp b/service/Android.bp index 787eee67b..97a1a89ee 100644 --- a/service/Android.bp +++ b/service/Android.bp @@ -111,6 +111,7 @@ java_sdk_library { "service-permission-statsd", "service-permission-proto-stream", "android.permission.flags-aconfig-java", + "permissions-aconfig-flags-lib", ], errorprone: { javacflags: ["-Xep:GuardedBy:ERROR"], @@ -125,7 +126,7 @@ java_sdk_library { "-Xno-receiver-assertions", ], lint: { - strict_updatability_linting: true, + baseline_filename: "lint-baseline.xml", }, min_sdk_version: "30", sdk_version: "system_server_current", @@ -136,6 +137,7 @@ java_sdk_library { installable: true, permitted_packages: [ "com.android.access", + "com.android.ecm", "com.android.permission", "com.android.role", "com.android.safetycenter", diff --git a/service/api/system-server-current.txt b/service/api/system-server-current.txt index 6a544126b..30fbab484 100644 --- a/service/api/system-server-current.txt +++ b/service/api/system-server-current.txt @@ -45,8 +45,8 @@ package com.android.role.persistence { public final class RolesState { ctor public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>); - ctor @FlaggedApi(android.permission.flags.Flags.FLAG_SYSTEM_SERVER_ROLE_CONTROLLER_ENABLED) public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>, @NonNull java.util.Set<java.lang.String>); - method @FlaggedApi(android.permission.flags.Flags.FLAG_SYSTEM_SERVER_ROLE_CONTROLLER_ENABLED) @NonNull public java.util.Set<java.lang.String> getFallbackEnabledRoles(); + ctor @FlaggedApi("android.permission.flags.system_server_role_controller_enabled") public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>, @NonNull java.util.Set<java.lang.String>); + method @FlaggedApi("android.permission.flags.system_server_role_controller_enabled") @NonNull public java.util.Set<java.lang.String> getFallbackEnabledRoles(); method @Nullable public String getPackagesHash(); method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRoles(); method public int getVersion(); diff --git a/service/jarjar-rules.txt b/service/jarjar-rules.txt index a3fd75930..299cc4529 100644 --- a/service/jarjar-rules.txt +++ b/service/jarjar-rules.txt @@ -1,8 +1,11 @@ rule android.os.HandlerExecutor com.android.permission.jarjar.@0 -rule android.permission.flags.** com.android.permission.jarjar.@0 +rule android.permission.flags.*Flags* com.android.permission.jarjar.@0 +rule android.permission.flags.Flags com.android.permission.jarjar.@0 rule android.util.IndentingPrintWriter com.android.permission.jarjar.@0 rule com.android.internal.** com.android.permission.jarjar.@0 rule com.android.modules.** com.android.permission.jarjar.@0 +rule com.android.permission.flags.*Flags* com.android.permission.jarjar.@0 +rule com.android.permission.flags.Flags com.android.permission.jarjar.@0 rule com.android.role.*Proto com.android.permission.jarjar.@0 # TODO(b/236200992): Revisit addition of rule com.android.safetycenter.annotations, # com.android.safetycenter.internaldata, com.android.safetycenter.pendingintents and diff --git a/service/java/com/android/ecm/EnhancedConfirmationService.java b/service/java/com/android/ecm/EnhancedConfirmationService.java new file mode 100644 index 000000000..1292ca4b1 --- /dev/null +++ b/service/java/com/android/ecm/EnhancedConfirmationService.java @@ -0,0 +1,303 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ecm; + +import android.annotation.FlaggedApi; +import android.annotation.IntDef; +import android.annotation.UserIdInt; +import android.app.AppOpsManager; +import android.app.ecm.EnhancedConfirmationManager; +import android.app.ecm.IEnhancedConfirmationManager; +import android.app.role.RoleManager; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.InstallSourceInfo; +import android.content.pm.PackageInstaller; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Binder; +import android.os.Build; +import android.os.UserHandle; +import android.permission.flags.Flags; +import android.util.ArraySet; +import android.util.Log; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; + +import com.android.internal.util.Preconditions; +import com.android.permission.util.UserUtils; +import com.android.server.SystemService; + +import java.lang.annotation.Retention; + + +/** + * Service for ECM (Enhanced Confirmation Mode). + * + * @see EnhancedConfirmationManager + * + * @hide + */ +@Keep +@FlaggedApi(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +public class EnhancedConfirmationService extends SystemService { + private static final String LOG_TAG = EnhancedConfirmationService.class.getSimpleName(); + + public EnhancedConfirmationService(@NonNull Context context) { + super(context); + } + + @Override + public void onStart() { + publishBinderService(Context.ECM_ENHANCED_CONFIRMATION_SERVICE, new Stub()); + } + + private class Stub extends IEnhancedConfirmationManager.Stub { + + /** A map of ECM states to their corresponding app op states */ + @Retention(java.lang.annotation.RetentionPolicy.SOURCE) + @IntDef(prefix = {"ECM_STATE_"}, value = {EcmState.ECM_STATE_NOT_GUARDED, + EcmState.ECM_STATE_GUARDED, EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED, + EcmState.ECM_STATE_IMPLICIT}) + private @interface EcmState { + int ECM_STATE_NOT_GUARDED = AppOpsManager.MODE_ALLOWED; + int ECM_STATE_GUARDED = AppOpsManager.MODE_ERRORED; + int ECM_STATE_GUARDED_AND_ACKNOWLEDGED = AppOpsManager.MODE_IGNORED; + int ECM_STATE_IMPLICIT = AppOpsManager.MODE_DEFAULT; + } + + private static final ArraySet<String> PROTECTED_SETTINGS = new ArraySet<>(); + + static { + PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE); + // Default application roles. + PROTECTED_SETTINGS.add(RoleManager.ROLE_ASSISTANT); + PROTECTED_SETTINGS.add(RoleManager.ROLE_BROWSER); + PROTECTED_SETTINGS.add(RoleManager.ROLE_CALL_REDIRECTION); + PROTECTED_SETTINGS.add(RoleManager.ROLE_CALL_SCREENING); + PROTECTED_SETTINGS.add(RoleManager.ROLE_DIALER); + PROTECTED_SETTINGS.add(RoleManager.ROLE_HOME); + PROTECTED_SETTINGS.add(RoleManager.ROLE_SMS); + PROTECTED_SETTINGS.add(RoleManager.ROLE_WALLET); + // TODO(b/310654015): Add other explicitly protected settings + } + + private final @NonNull Context mContext; + private final String mAttributionTag; + private final AppOpsManager mAppOpsManager; + private final PackageManager mPackageManager; + + Stub() { + Context context = getContext(); + mContext = context; + mAttributionTag = context.getAttributionTag(); + mAppOpsManager = context.getSystemService(AppOpsManager.class); + mPackageManager = context.getPackageManager(); + } + + public boolean isRestricted(@NonNull String packageName, @NonNull String settingIdentifier, + @UserIdInt int userId) { + enforcePermissions("isRestricted", userId); + if (!UserUtils.isUserExistent(userId, getContext())) { + Log.e(LOG_TAG, "user " + userId + " does not exist"); + return false; + } + + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + Preconditions.checkStringNotEmpty(settingIdentifier, + "settingIdentifier cannot be null or empty"); + + try { + return isSettingEcmProtected(settingIdentifier) && isPackageEcmGuarded(packageName, + userId); + } catch (NameNotFoundException e) { + throw new IllegalArgumentException(e); + } + } + + public void clearRestriction(@NonNull String packageName, @UserIdInt int userId) { + enforcePermissions("clearRestriction", userId); + if (!UserUtils.isUserExistent(userId, getContext())) { + return; + } + + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + + try { + int state = getAppEcmState(packageName, userId); + boolean isAllowed = state == EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED; + if (!isAllowed) { + throw new IllegalStateException("Clear restriction attempted but not allowed"); + } + setAppEcmState(packageName, EcmState.ECM_STATE_NOT_GUARDED, userId); + } catch (NameNotFoundException e) { + throw new IllegalArgumentException(e); + } + } + + public boolean isClearRestrictionAllowed(@NonNull String packageName, + @UserIdInt int userId) { + enforcePermissions("isClearRestrictionAllowed", userId); + if (!UserUtils.isUserExistent(userId, getContext())) { + return false; + } + + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + + try { + int state = getAppEcmState(packageName, userId); + return state == EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED; + } catch (NameNotFoundException e) { + throw new IllegalArgumentException(e); + } + } + + public void setClearRestrictionAllowed(@NonNull String packageName, @UserIdInt int userId) { + enforcePermissions("setClearRestrictionAllowed", userId); + if (!UserUtils.isUserExistent(userId, getContext())) { + return; + } + + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + + try { + if (isPackageEcmGuarded(packageName, userId)) { + setAppEcmState(packageName, EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED, + userId); + } + } catch (NameNotFoundException e) { + throw new IllegalArgumentException(e); + } + } + + private void enforcePermissions(@NonNull String methodName, @UserIdInt int userId) { + UserUtils.enforceCrossUserPermission(userId, false, methodName, mContext); + mContext.enforceCallingPermission( + android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES, methodName); + } + + private boolean isPackageEcmGuarded(@NonNull String packageName, @UserIdInt int userId) + throws NameNotFoundException { + // If this is a trusted installer or a pre-installed app, it is not ECM guarded + if (isAppTrustedInstaller(packageName, userId) || isPackagePreinstalled(packageName, + userId)) { + return false; + } + + // If the package already has an explicitly-set state, use that + @EcmState int ecmState = getAppEcmState(packageName, userId); + if (ecmState == EcmState.ECM_STATE_GUARDED + || ecmState == EcmState.ECM_STATE_GUARDED_AND_ACKNOWLEDGED) { + return true; + } + if (ecmState == EcmState.ECM_STATE_NOT_GUARDED) { + return false; + } + + // Otherwise, lazily decide whether the app is considered guarded. + InstallSourceInfo installSource; + try { + installSource = mPackageManager.getInstallSourceInfo(packageName); + } catch (NameNotFoundException e) { + Log.w(LOG_TAG, "Package not found: " + packageName); + return false; + } + + // These install sources are always considered dangerous. + // PackageInstallers that are trusted can use these as a signal that the + // packages they've installed aren't as trusted as themselves. + int packageSource = installSource.getPackageSource(); + if (packageSource == PackageInstaller.PACKAGE_SOURCE_LOCAL_FILE + || packageSource == PackageInstaller.PACKAGE_SOURCE_DOWNLOADED_FILE) { + return true; + } + + // ECM doesn't consider a transitive chain of trust for install sources. + // If this package hasn't been explicitly handled by this point + // then it is exempt from ECM if the immediate parent is a trusted installer + boolean installedFromTrustedInstaller = + installSource.getInstallingPackageName() != null && isAppTrustedInstaller( + installSource.getInstallingPackageName(), userId); + return !installedFromTrustedInstaller; + } + + /** + * A "trusted installer" is any app with the INSTALL_PACKAGES permission. + */ + private boolean isAppTrustedInstaller(@NonNull String packageName, @UserIdInt int userId) + throws NameNotFoundException { + int uid = getPackageUid(packageName, userId); + // TODO(b/310654834): Support allow-list for OEM installer exemptions + return mContext.checkPermission(android.Manifest.permission.INSTALL_PACKAGES, 0, uid) + == PackageManager.PERMISSION_GRANTED; + } + + private boolean isPackagePreinstalled(@NonNull String packageName, @UserIdInt int userId) { + ApplicationInfo applicationInfo; + try { + applicationInfo = mPackageManager.getApplicationInfoAsUser(packageName, 0, + UserHandle.of(userId)); + } catch (NameNotFoundException e) { + Log.w(LOG_TAG, "Package not found: " + packageName); + return false; + } + return (applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } + + private void setAppEcmState(@NonNull String packageName, @EcmState int ecmState, + @UserIdInt int userId) throws NameNotFoundException { + int packageUid = getPackageUid(packageName, userId); + final long identityToken = Binder.clearCallingIdentity(); + try { + mAppOpsManager.setMode(AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, packageUid, + packageName, ecmState); + } finally { + Binder.restoreCallingIdentity(identityToken); + } + } + + private @EcmState int getAppEcmState(@NonNull String packageName, @UserIdInt int userId) + throws NameNotFoundException { + int packageUid = getPackageUid(packageName, userId); + final long identityToken = Binder.clearCallingIdentity(); + try { + return mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, + packageUid, packageName, mAttributionTag, /* message */ null); + } finally { + Binder.restoreCallingIdentity(identityToken); + } + } + + private boolean isSettingEcmProtected(@NonNull String settingIdentifier) { + if (PROTECTED_SETTINGS.contains(settingIdentifier)) { + return true; + } + // TODO(b/310654818): If this is a permission, coerce it into a PermissionGroup. + // TODO(b/310218979): Add role selections as protected settings + return false; + } + + private int getPackageUid(@NonNull String packageName, @UserIdInt int userId) + throws NameNotFoundException { + return mPackageManager.getApplicationInfoAsUser(packageName, /* flags */ 0, + UserHandle.of(userId)).uid; + } + } +} diff --git a/service/java/com/android/role/LocalRoleController.java b/service/java/com/android/role/LocalRoleController.java index 6548aaa03..03508d1cb 100644 --- a/service/java/com/android/role/LocalRoleController.java +++ b/service/java/com/android/role/LocalRoleController.java @@ -16,6 +16,7 @@ package com.android.role; +import android.annotation.CallbackExecutor; import android.app.role.RoleControllerService; import android.app.role.RoleManager; import android.content.Context; @@ -29,6 +30,7 @@ import androidx.annotation.NonNull; import com.android.role.controller.service.RoleControllerServiceImpl; +import java.util.List; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -93,4 +95,10 @@ public class LocalRoleController implements RoleController { @NonNull String packageName) { return mService.onIsApplicationVisibleForRole(roleName, packageName); } + + @Override + public void getLegacyFallbackDisabledRoles(@NonNull @CallbackExecutor Executor executor, + @NonNull Consumer<List<String>> callback) { + throw new UnsupportedOperationException(); + } } diff --git a/service/java/com/android/role/RemoteRoleController.java b/service/java/com/android/role/RemoteRoleController.java index cbf164d6d..0920dd56a 100644 --- a/service/java/com/android/role/RemoteRoleController.java +++ b/service/java/com/android/role/RemoteRoleController.java @@ -16,6 +16,7 @@ package com.android.role; +import android.annotation.CallbackExecutor; import android.app.role.RoleControllerManager; import android.app.role.RoleManager; import android.content.Context; @@ -26,6 +27,7 @@ import androidx.annotation.NonNull; import com.android.permission.util.ForegroundThread; +import java.util.List; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -73,4 +75,10 @@ public class RemoteRoleController implements RoleController { @NonNull String packageName) { throw new UnsupportedOperationException(); } + + @Override + public void getLegacyFallbackDisabledRoles(@NonNull @CallbackExecutor Executor executor, + @NonNull Consumer<List<String>> callback) { + mRoleControllerManager.getLegacyFallbackDisabledRoles(executor, callback); + } } diff --git a/service/java/com/android/role/RoleController.java b/service/java/com/android/role/RoleController.java index 8a7ef8646..6ebbdfd45 100644 --- a/service/java/com/android/role/RoleController.java +++ b/service/java/com/android/role/RoleController.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.app.role.RoleManager; import android.os.RemoteCallback; +import java.util.List; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -58,4 +59,10 @@ public interface RoleController { * @see android.app.role.RoleControllerManager#isApplicationVisibleForRole */ boolean isApplicationVisibleForRole(@NonNull String roleName, @NonNull String packageName); + + /** + * @see android.app.role.RoleControllerManager#getLegacyFallbackDisabledRoles + */ + void getLegacyFallbackDisabledRoles(@NonNull @CallbackExecutor Executor executor, + @NonNull Consumer<List<String>> callback); } diff --git a/service/java/com/android/role/RoleService.java b/service/java/com/android/role/RoleService.java index c1a3ea4d9..a2a6bab35 100644 --- a/service/java/com/android/role/RoleService.java +++ b/service/java/com/android/role/RoleService.java @@ -100,15 +100,22 @@ public class RoleService extends SystemService implements RoleUserState.Callback private static final long GRANT_DEFAULT_ROLES_INTERVAL_MILLIS = 1000; - private static final String[] DEFAULT_APPLICATION_ROLES = { - RoleManager.ROLE_ASSISTANT, - RoleManager.ROLE_BROWSER, - RoleManager.ROLE_CALL_REDIRECTION, - RoleManager.ROLE_CALL_SCREENING, - RoleManager.ROLE_DIALER, - RoleManager.ROLE_HOME, - RoleManager.ROLE_SMS, - }; + private static final String[] DEFAULT_APPLICATION_ROLES; + + static { + List<String> defaultApplicationRoles = new ArrayList<>(); + defaultApplicationRoles.add(RoleManager.ROLE_ASSISTANT); + defaultApplicationRoles.add(RoleManager.ROLE_BROWSER); + defaultApplicationRoles.add(RoleManager.ROLE_CALL_REDIRECTION); + defaultApplicationRoles.add(RoleManager.ROLE_CALL_SCREENING); + defaultApplicationRoles.add(RoleManager.ROLE_DIALER); + defaultApplicationRoles.add(RoleManager.ROLE_HOME); + defaultApplicationRoles.add(RoleManager.ROLE_SMS); + if (SdkLevel.isAtLeastV()) { + defaultApplicationRoles.add(RoleManager.ROLE_WALLET); + } + DEFAULT_APPLICATION_ROLES = defaultApplicationRoles.toArray(new String[0]); + } @NonNull private final AppOpsManager mAppOpsManager; @@ -252,9 +259,40 @@ public class RoleService extends SystemService implements RoleUserState.Callback @Override public void onUserStarting(@NonNull TargetUser user) { + if (SdkLevel.isAtLeastV() && Flags.systemServerRoleControllerEnabled()) { + upgradeLegacyFallbackEnabledRolesIfNeeded(user); + } + maybeGrantDefaultRolesSync(user.getUserHandle().getIdentifier()); } + private void upgradeLegacyFallbackEnabledRolesIfNeeded(@NonNull TargetUser user) { + int userId = user.getUserHandle().getIdentifier(); + RoleUserState userState = getOrCreateUserState(userId); + if (!userState.isVersionUpgradeNeeded()) { + return; + } + List<String> legacyFallbackDisabledRoles = getLegacyFallbackDisabledRolesSync(userId); + if (legacyFallbackDisabledRoles == null) { + return; + } + userState.upgradeVersion(legacyFallbackDisabledRoles); + } + + @MainThread + private List<String> getLegacyFallbackDisabledRolesSync(@UserIdInt int userId) { + AndroidFuture<List<String>> future = new AndroidFuture<>(); + RoleController controller = new RemoteRoleController(UserHandle.of(userId), getContext()); + controller.getLegacyFallbackDisabledRoles(ForegroundThread.getExecutor(), future::complete); + try { + return future.get(30, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + Log.e(LOG_TAG, "Failed to get the legacy role fallback disabled state for user " + + userId, e); + return null; + } + } + @MainThread private void maybeGrantDefaultRolesSync(@UserIdInt int userId) { AndroidFuture<Void> future = maybeGrantDefaultRolesInternal(userId); @@ -493,8 +531,7 @@ public class RoleService extends SystemService implements RoleUserState.Callback Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Objects.requireNonNull(callback, "callback cannot be null"); - getOrCreateController(userId).onAddRoleHolder(roleName, packageName, flags, - callback); + getOrCreateController(userId).onAddRoleHolder(roleName, packageName, flags, callback); } @Override diff --git a/service/java/com/android/role/RoleUserState.java b/service/java/com/android/role/RoleUserState.java index 201633898..39c1e8c3d 100644 --- a/service/java/com/android/role/RoleUserState.java +++ b/service/java/com/android/role/RoleUserState.java @@ -89,7 +89,7 @@ class RoleUserState { private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>(); /** - * + * Role names of the roles with fallback enabled. */ @GuardedBy("mLock") @NonNull @@ -150,6 +150,15 @@ class RoleUserState { } /** + * Checks the version and returns whether a version upgrade is needed. + */ + public boolean isVersionUpgradeNeeded() { + synchronized (mLock) { + return mVersion < VERSION_FALLBACK_STATE_MIGRATED; + } + } + + /** * Get the hash representing the state of packages during the last time initial grants was run. * * @return the hash representing the state of packages @@ -228,6 +237,23 @@ class RoleUserState { } /** + * Upgrade this user state to the latest version if needed. + */ + public void upgradeVersion(@NonNull List<String> legacyFallbackDisabledRoles) { + synchronized (mLock) { + if (mVersion < VERSION_FALLBACK_STATE_MIGRATED) { + int legacyFallbackDisabledRolesSize = legacyFallbackDisabledRoles.size(); + for (int i = 0; i < legacyFallbackDisabledRolesSize; i++) { + String roleName = legacyFallbackDisabledRoles.get(i); + mFallbackEnabledRoles.remove(roleName); + } + mVersion = VERSION_FALLBACK_STATE_MIGRATED; + scheduleWriteFileLocked(); + } + } + } + + /** * Get whether the role is available. * * @param roleName the name of the role to get the holders for @@ -269,6 +295,7 @@ class RoleUserState { synchronized (mLock) { if (!mRoles.containsKey(roleName)) { mRoles.put(roleName, new ArraySet<>()); + mFallbackEnabledRoles.add(roleName); Log.i(LOG_TAG, "Added new role: " + roleName); scheduleWriteFileLocked(); return true; @@ -297,6 +324,7 @@ class RoleUserState { + " role: " + roleName + ", holders: " + packageNames); } mRoles.removeAt(i); + mFallbackEnabledRoles.remove(roleName); changed = true; } } @@ -432,12 +460,15 @@ class RoleUserState { RolesState roleState = mPersistence.readForUser(UserHandle.of(mUserId)); Map<String, Set<String>> roles; + Set<String> fallbackEnabledRoles; if (roleState != null) { mVersion = roleState.getVersion(); mPackagesHash = roleState.getPackagesHash(); roles = roleState.getRoles(); + fallbackEnabledRoles = roleState.getFallbackEnabledRoles(); } else { roles = mPlatformHelper.getLegacyRoleState(mUserId); + fallbackEnabledRoles = roles.keySet(); } mRoles.clear(); for (Map.Entry<String, Set<String>> entry : roles.entrySet()) { @@ -445,12 +476,10 @@ class RoleUserState { ArraySet<String> roleHolders = new ArraySet<>(entry.getValue()); mRoles.put(roleName, roleHolders); } - + mFallbackEnabledRoles.clear(); + mFallbackEnabledRoles.addAll(fallbackEnabledRoles); if (roleState == null) { scheduleWriteFileLocked(); - } else { - mFallbackEnabledRoles.clear(); - mFallbackEnabledRoles.addAll(roleState.getFallbackEnabledRoles()); } } } diff --git a/service/java/com/android/role/persistence/RolesState.java b/service/java/com/android/role/persistence/RolesState.java index 26644c358..a189dd4c2 100644 --- a/service/java/com/android/role/persistence/RolesState.java +++ b/service/java/com/android/role/persistence/RolesState.java @@ -22,7 +22,6 @@ import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.SystemApi.Client; import android.permission.flags.Flags; -import android.util.ArraySet; import java.util.Map; import java.util.Objects; @@ -68,7 +67,7 @@ public final class RolesState { */ public RolesState(int version, @Nullable String packagesHash, @NonNull Map<String, Set<String>> roles) { - this(version, packagesHash, roles, new ArraySet<>()); + this(version, packagesHash, roles, roles.keySet()); } /** diff --git a/service/java/com/android/safetycenter/SafetyCenterFlags.java b/service/java/com/android/safetycenter/SafetyCenterFlags.java index 67c4d25d6..e51d3a1cf 100644 --- a/service/java/com/android/safetycenter/SafetyCenterFlags.java +++ b/service/java/com/android/safetycenter/SafetyCenterFlags.java @@ -123,6 +123,9 @@ public final class SafetyCenterFlags { private static final String RESURFACE_ISSUE_DELAYS_DEFAULT = ""; private static final Duration RESURFACE_ISSUE_DELAYS_DEFAULT_DURATION = Duration.ofDays(180); + private static final ArraySet<String> sAllowedNotificationSourcesUPlus = + new ArraySet<>(new String[] {"GoogleBackupAndRestore"}); + private static volatile String sUntrackedSourcesDefault = "AndroidAccessibility,AndroidBackgroundLocation," + "AndroidNotificationListener,AndroidPermissionAutoRevoke"; @@ -175,7 +178,10 @@ public final class SafetyCenterFlags { fout.println("FLAGS"); printFlag(fout, PROPERTY_SAFETY_CENTER_ENABLED, getSafetyCenterEnabled()); printFlag(fout, PROPERTY_NOTIFICATIONS_ENABLED, getNotificationsEnabled()); - printFlag(fout, PROPERTY_NOTIFICATIONS_ALLOWED_SOURCES, getNotificationsAllowedSourceIds()); + printFlag( + fout, + PROPERTY_NOTIFICATIONS_ALLOWED_SOURCES, + getNotificationsAllowedSourceIdsFlag()); printFlag(fout, PROPERTY_NOTIFICATIONS_MIN_DELAY, getNotificationsMinDelay()); printFlag( fout, @@ -244,6 +250,20 @@ public final class SafetyCenterFlags { * and therefore this is the only way to enable notifications for sources on Android T. */ public static ArraySet<String> getNotificationsAllowedSourceIds() { + ArraySet<String> sources = getNotificationsAllowedSourceIdsFlag(); + if (SdkLevel.isAtLeastU()) { + // This is a hack to update the flag value via mainline update. Reasons why we can't do + // this via: + // remote flag update - these are generally avoided and considered risky + // XML config - it would break GTS tests for OEMs that have a separate config copy + // default flag value - it would also require a remote flag update + sources.addAll(sAllowedNotificationSourcesUPlus); + } + + return sources; + } + + private static ArraySet<String> getNotificationsAllowedSourceIdsFlag() { return getCommaSeparatedStrings(PROPERTY_NOTIFICATIONS_ALLOWED_SOURCES); } diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java index 7355035b0..942e4ce18 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java @@ -111,6 +111,8 @@ final class SafetySourceDataValidator { } if (safetySource.getType() == SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC + && safetySource.getInitialDisplayState() + != SafetySource.INITIAL_DISPLAY_STATE_HIDDEN && safetySourceStatus == null) { throw new IllegalArgumentException( "Missing status for dynamic safety source: " + safetySourceId); diff --git a/service/lint-baseline.xml b/service/lint-baseline.xml index dd7e79ef5..226175e91 100644 --- a/service/lint-baseline.xml +++ b/service/lint-baseline.xml @@ -1,42 +1,48 @@ <?xml version="1.0" encoding="UTF-8"?> -<issues format="6" by="lint 8.0.0-dev" type="baseline" dependencies="true" variant="all" version="8.0.0-dev"> +<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01"> <issue id="NewApi" - message="Call requires API level 31 (current min is 30): `android.os.UserHandle#getUid`" - errorLine1=" return UserHandle.of(userId).getUid(appId);" - errorLine2=" ~~~~~~"> + message="Call requires API level 34 (current min is 33): `getDeduplicationGroup`" + errorLine1=" String deduplicationGroup = issueInfo.getSafetySource().getDeduplicationGroup();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/service/java/com/android/permission/compat/UserHandleCompat.java" - line="57" - column="38"/> + file="packages/modules/Permission/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java" + line="316" + column="65"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `android.content.pm.PackageManager#getPackageUidAsUser`" - errorLine1=" packageManager.getPackageUidAsUser(" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + message="Call requires API level 34 (current min is 33): `getDeduplicationId`" + errorLine1=" String deduplicationId = issueInfo.getSafetySourceIssue().getDeduplicationId();" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/service/java/com/android/safetycenter/SafetyCenterService.java" - line="651" - column="40"/> + file="packages/modules/Permission/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java" + line="317" + column="67"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `getDeduplicationGroup`"> + message="Call requires API level 34 (current min is 33): `android.content.pm.PackageManager#getPackageUidAsUser`" + errorLine1=" packageManager.getPackageUidAsUser(" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> <location - file="packages/modules/Permission/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java" - line="315"/> + file="packages/modules/Permission/service/java/com/android/safetycenter/SafetyCenterService.java" + line="732" + column="40"/> </issue> <issue id="NewApi" - message="Call requires API level 34 (current min is 33): `getDeduplicationId`"> + message="Call requires API level 31 (current min is 30): `android.os.UserHandle#getUid`" + errorLine1=" return UserHandle.of(userId).getUid(appId);" + errorLine2=" ~~~~~~"> <location - file="packages/modules/Permission/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java" - line="316"/> + file="packages/modules/Permission/service/java/com/android/permission/compat/UserHandleCompat.java" + line="57" + column="38"/> </issue> </issues>
\ No newline at end of file diff --git a/tests/apex/java/com/android/role/persistence/RolesPersistenceTest.kt b/tests/apex/java/com/android/role/persistence/RolesPersistenceTest.kt index 0cf1fa665..6500b3926 100644 --- a/tests/apex/java/com/android/role/persistence/RolesPersistenceTest.kt +++ b/tests/apex/java/com/android/role/persistence/RolesPersistenceTest.kt @@ -111,6 +111,7 @@ class RolesPersistenceTest { assertThat(persistedState).isNull() } + private fun getState(): RolesState = when (stateVersion) { StateVersion.VERSION_UNDEFINED -> stateVersionUndefined diff --git a/tests/cts/permission/Android.bp b/tests/cts/permission/Android.bp index 8849f41a7..ed7fcea25 100644 --- a/tests/cts/permission/Android.bp +++ b/tests/cts/permission/Android.bp @@ -30,6 +30,7 @@ android_test { "general-tests", "sts", "mts-permission", + "mcts-permission", ], // Include both the 32 and 64 bit versions compile_multilib: "both", @@ -52,6 +53,8 @@ android_test { "sts-device-util", "platform-test-rules", "CtsVirtualDeviceCommonLib", + "android.permission.flags-aconfig-java", + "androidx.test.rules", ], jni_libs: [ "libctspermission_jni", diff --git a/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml b/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml index ef4d82dfc..ece3ba1c7 100644 --- a/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml +++ b/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml @@ -34,6 +34,7 @@ <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.BODY_SENSORS" /> + <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.cts.appthatrequestcustompermission.TEST_PERMISSION" /> <application /> diff --git a/tests/cts/permission/sdk28/Android.bp b/tests/cts/permission/sdk28/Android.bp index 3043c9329..2bdffabe5 100644 --- a/tests/cts/permission/sdk28/Android.bp +++ b/tests/cts/permission/sdk28/Android.bp @@ -29,5 +29,6 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], } diff --git a/tests/cts/permission/src/android/permission/cts/AccessibilityPrivacySourceTest.kt b/tests/cts/permission/src/android/permission/cts/AccessibilityPrivacySourceTest.kt index e7bad2b05..42b9067f3 100644 --- a/tests/cts/permission/src/android/permission/cts/AccessibilityPrivacySourceTest.kt +++ b/tests/cts/permission/src/android/permission/cts/AccessibilityPrivacySourceTest.kt @@ -92,15 +92,6 @@ class AccessibilityPrivacySourceTest { ) @get:Rule - val deviceConfigA11ySourceEnabled = - DeviceConfigStateChangerRule( - context, - DeviceConfig.NAMESPACE_PRIVACY, - ACCESSIBILITY_SOURCE_ENABLED, - true.toString() - ) - - @get:Rule val deviceConfigA11yListenerDisabled = DeviceConfigStateChangerRule( context, @@ -233,26 +224,6 @@ class AccessibilityPrivacySourceTest { } @Test - fun testJobWithAccessibilityFeatureDisabledDoesNotSendNotification() { - setDeviceConfigPrivacyProperty(ACCESSIBILITY_SOURCE_ENABLED, false.toString()) - mAccessibilityServiceRule.enableService() - runJobAndWaitUntilCompleted() - assertEmptyNotification(permissionControllerPackage, ACCESSIBILITY_NOTIFICATION_ID) - } - - @Test - fun testJobWithAccessibilityFeatureDisabledDoesNotSendIssueToSafetyCenter() { - setDeviceConfigPrivacyProperty(ACCESSIBILITY_SOURCE_ENABLED, false.toString()) - mAccessibilityServiceRule.enableService() - runJobAndWaitUntilCompleted() - assertSafetyCenterIssueDoesNotExist( - SC_ACCESSIBILITY_SOURCE_ID, - safetyCenterIssueId, - SC_ACCESSIBILITY_ISSUE_TYPE_ID - ) - } - - @Test fun testJobWithSafetyCenterDisabledDoesNotSendNotification() { setDeviceConfigPrivacyProperty(SAFETY_CENTER_ENABLED, false.toString()) mAccessibilityServiceRule.enableService() @@ -332,7 +303,6 @@ class AccessibilityPrivacySourceTest { companion object { private const val SC_ACCESSIBILITY_SOURCE_ID = "AndroidAccessibility" - private const val ACCESSIBILITY_SOURCE_ENABLED = "sc_accessibility_source_enabled" private const val SAFETY_CENTER_ENABLED = "safety_center_is_enabled" private const val ACCESSIBILITY_LISTENER_ENABLED = "sc_accessibility_listener_enabled" private const val ACCESSIBILITY_JOB_INTERVAL_MILLIS = "sc_accessibility_job_interval_millis" diff --git a/tests/cts/permission/src/android/permission/cts/AppWidgetManagerPermissionTest.java b/tests/cts/permission/src/android/permission/cts/AppWidgetManagerPermissionTest.java index 294896d97..fa43bfb18 100644 --- a/tests/cts/permission/src/android/permission/cts/AppWidgetManagerPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/AppWidgetManagerPermissionTest.java @@ -20,7 +20,8 @@ import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.pm.PackageManager; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Test that protected AppWidgetManager APIs cannot be called without permissions diff --git a/tests/cts/permission/src/android/permission/cts/CameraPermissionTest.java b/tests/cts/permission/src/android/permission/cts/CameraPermissionTest.java index 99f2862f1..981735388 100644 --- a/tests/cts/permission/src/android/permission/cts/CameraPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/CameraPermissionTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.hardware.Camera; import android.os.Environment; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.MediumTest; + +import androidx.test.filters.MediumTest; import java.io.FileOutputStream; diff --git a/tests/cts/permission/src/android/permission/cts/ContactsProviderTest.java b/tests/cts/permission/src/android/permission/cts/ContactsProviderTest.java index 984fd6cfe..69b64d790 100644 --- a/tests/cts/permission/src/android/permission/cts/ContactsProviderTest.java +++ b/tests/cts/permission/src/android/permission/cts/ContactsProviderTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.content.ContentValues; import android.provider.ContactsContract; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify permissions are enforced. diff --git a/tests/cts/permission/src/android/permission/cts/MinMaxSdkVersionTest.kt b/tests/cts/permission/src/android/permission/cts/MinMaxSdkVersionTest.kt index 58eaf598c..4679fbee8 100644 --- a/tests/cts/permission/src/android/permission/cts/MinMaxSdkVersionTest.kt +++ b/tests/cts/permission/src/android/permission/cts/MinMaxSdkVersionTest.kt @@ -80,7 +80,7 @@ class MinMaxSdkVersionTest { mContext!! .packageManager .getPackageInfo(TEST_APP_PKG_NAME, PackageManager.GET_PERMISSIONS) - return packageInfo.requestedPermissions.any { it == permName } + return packageInfo.requestedPermissions!!.any { it == permName } } companion object { diff --git a/tests/cts/permission/src/android/permission/cts/NoActivityRelatedPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoActivityRelatedPermissionTest.java index 835ba124c..3d9ba8214 100644 --- a/tests/cts/permission/src/android/permission/cts/NoActivityRelatedPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoActivityRelatedPermissionTest.java @@ -21,7 +21,8 @@ import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.test.ActivityInstrumentationTestCase2; -import android.test.suitebuilder.annotation.MediumTest; + +import androidx.test.filters.MediumTest; import java.util.List; diff --git a/tests/cts/permission/src/android/permission/cts/NoAudioPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoAudioPermissionTest.java index c2c42a10d..50498b1d5 100644 --- a/tests/cts/permission/src/android/permission/cts/NoAudioPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoAudioPermissionTest.java @@ -25,9 +25,10 @@ import android.media.AudioManager; import android.media.AudioRecord; import android.media.MediaRecorder; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; +import androidx.test.filters.SmallTest; + /** * Verify the audio related operations require specific permissions. */ diff --git a/tests/cts/permission/src/android/permission/cts/NoBroadcastPackageRemovedPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoBroadcastPackageRemovedPermissionTest.java index 5630c5b8c..1a46842b2 100644 --- a/tests/cts/permission/src/android/permission/cts/NoBroadcastPackageRemovedPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoBroadcastPackageRemovedPermissionTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.content.Intent; import android.os.Bundle; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify Context related methods without specific BROADCAST series permissions. diff --git a/tests/cts/permission/src/android/permission/cts/NoCaptureVideoPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoCaptureVideoPermissionTest.java index 6ad048308..e0573044c 100644 --- a/tests/cts/permission/src/android/permission/cts/NoCaptureVideoPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoCaptureVideoPermissionTest.java @@ -22,9 +22,10 @@ import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.ImageReader; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; import android.util.DisplayMetrics; +import androidx.test.filters.SmallTest; + /** * Verify the capture system video output permission requirements. */ diff --git a/tests/cts/permission/src/android/permission/cts/NoKeyPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoKeyPermissionTest.java index 5a0b25993..ac77947d9 100644 --- a/tests/cts/permission/src/android/permission/cts/NoKeyPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoKeyPermissionTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.app.KeyguardManager; import android.content.Context; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify the key input related operations require specific permissions. diff --git a/tests/cts/permission/src/android/permission/cts/NoNetworkStatePermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoNetworkStatePermissionTest.java index b8d2ee21a..5dc73d520 100644 --- a/tests/cts/permission/src/android/permission/cts/NoNetworkStatePermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoNetworkStatePermissionTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.content.Context; import android.net.ConnectivityManager; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; import java.net.InetAddress; diff --git a/tests/cts/permission/src/android/permission/cts/NoReadLogsPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoReadLogsPermissionTest.java index b6fb84dc7..f0d70b2ce 100644 --- a/tests/cts/permission/src/android/permission/cts/NoReadLogsPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoReadLogsPermissionTest.java @@ -21,7 +21,8 @@ import android.system.Os; import android.system.OsConstants; import android.system.StructStat; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.MediumTest; + +import androidx.test.filters.MediumTest; import java.io.BufferedReader; import java.io.IOException; diff --git a/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java index 0ccebed04..437aa19c4 100644 --- a/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java @@ -24,10 +24,12 @@ import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.Vibrator; +import android.os.VibratorManager; import android.platform.test.annotations.AppModeFull; import android.telephony.gsm.SmsManager; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; import java.io.IOException; import java.io.InputStream; @@ -121,7 +123,17 @@ public class NoSystemFunctionPermissionTest extends AndroidTestCase { */ @SmallTest public void testVibrator() { - Vibrator vibrator = (Vibrator)getContext().getSystemService(Context.VIBRATOR_SERVICE); + Vibrator vibrator = mContext.getSystemService(VibratorManager.class).getDefaultVibrator(); + + if (!vibrator.hasVibrator()) { + // Run the test only if a vibrator is present. + return; + } + + if (!vibrator.hasVibrator()) { + // If the test device does not have a vibrator, then abort test. + return; + } try { vibrator.cancel(); diff --git a/tests/cts/permission/src/android/permission/cts/NoWakeLockPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoWakeLockPermissionTest.java index 030f341aa..95c4da727 100644 --- a/tests/cts/permission/src/android/permission/cts/NoWakeLockPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoWakeLockPermissionTest.java @@ -26,7 +26,8 @@ import android.net.wifi.WifiManager.WifiLock; import android.os.PowerManager; import android.platform.test.annotations.AppModeFull; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify the Wake Lock related operations require specific permissions. diff --git a/tests/cts/permission/src/android/permission/cts/NoWallpaperPermissionsTest.java b/tests/cts/permission/src/android/permission/cts/NoWallpaperPermissionsTest.java index 18e4375bc..fc1d6b59f 100644 --- a/tests/cts/permission/src/android/permission/cts/NoWallpaperPermissionsTest.java +++ b/tests/cts/permission/src/android/permission/cts/NoWallpaperPermissionsTest.java @@ -27,7 +27,8 @@ import android.content.Context; import android.graphics.Bitmap; import android.platform.test.annotations.AppModeFull; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; import org.junit.function.ThrowingRunnable; diff --git a/tests/cts/permission/src/android/permission/cts/PackageManagerRequiringPermissionsTest.java b/tests/cts/permission/src/android/permission/cts/PackageManagerRequiringPermissionsTest.java index df3ec3c64..7ebb09f98 100644 --- a/tests/cts/permission/src/android/permission/cts/PackageManagerRequiringPermissionsTest.java +++ b/tests/cts/permission/src/android/permission/cts/PackageManagerRequiringPermissionsTest.java @@ -21,7 +21,8 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.platform.test.annotations.AppModeFull; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify the PackageManager related operations require specific permissions. diff --git a/tests/cts/permission/src/android/permission/cts/PermissionControllerTest.java b/tests/cts/permission/src/android/permission/cts/PermissionControllerTest.java index 05b45c9b1..4367d2bf6 100644 --- a/tests/cts/permission/src/android/permission/cts/PermissionControllerTest.java +++ b/tests/cts/permission/src/android/permission/cts/PermissionControllerTest.java @@ -423,7 +423,7 @@ public class PermissionControllerTest { } assertThat(permissionInfos).isNotEmpty(); - assertThat(runtimePermissions.size()).isEqualTo(5); + assertThat(runtimePermissions.size()).isEqualTo(6); assertRuntimePermissionLabelsAreValid(runtimePermissions, permissionInfos, 4, APP2); } diff --git a/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java b/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java index 05aa41d69..543a3cbbd 100644 --- a/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java +++ b/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java @@ -23,18 +23,26 @@ import static com.android.compatibility.common.util.SystemUtil.runWithShellPermi import static com.google.common.truth.Truth.assertThat; import android.companion.virtual.VirtualDeviceManager; +import android.companion.virtual.VirtualDeviceParams; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager.OnPermissionsChangedListener; +import android.permission.flags.Flags; import android.platform.test.annotations.AppModeFull; +import android.platform.test.annotations.RequiresFlagsEnabled; +import android.platform.test.flag.junit.CheckFlagsRule; +import android.platform.test.flag.junit.DeviceFlagsValueProvider; +import android.virtualdevice.cts.common.FakeAssociationRule; import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner; import androidx.test.platform.app.InstrumentationRegistry; +import com.android.compatibility.common.util.AdoptShellPermissionsRule; import com.android.compatibility.common.util.SystemUtil; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -52,15 +60,28 @@ public class PermissionUpdateListenerTest { + "CtsAppThatRequestsCalendarContactsBodySensorCustomPermission.apk"; private static final String PACKAGE_NAME = "android.permission.cts.appthatrequestcustompermission"; - private static final String PERMISSION_NAME = "android.permission.READ_CONTACTS"; + private static final String PERMISSION_NAME = "android.permission.RECORD_AUDIO"; private static final int TIMEOUT = 10000; - private final Context mContext = + private final Context mDefaultContext = InstrumentationRegistry.getInstrumentation().getContext(); - private final PackageManager mPackageManager = mContext.getPackageManager(); + private final PackageManager mPackageManager = mDefaultContext.getPackageManager(); private int mTestAppUid; + private VirtualDeviceManager mVirtualDeviceManager; + + @Rule + public FakeAssociationRule mFakeAssociationRule = new FakeAssociationRule(); + + @Rule + public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule( + InstrumentationRegistry.getInstrumentation().getUiAutomation(), + android.Manifest.permission.CREATE_VIRTUAL_DEVICE); + + @Rule + public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); + @Before public void setup() throws PackageManager.NameNotFoundException, InterruptedException { runShellCommandOrThrow("pm install " + APK); @@ -69,6 +90,7 @@ public class PermissionUpdateListenerTest { SystemUtil.waitForBroadcasts(); Thread.sleep(1000); mTestAppUid = mPackageManager.getPackageUid(PACKAGE_NAME, 0); + mVirtualDeviceManager = mDefaultContext.getSystemService(VirtualDeviceManager.class); } @After @@ -89,7 +111,7 @@ public class PermissionUpdateListenerTest { runWithShellPermissionIdentity(() -> { mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener); mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, - mContext.getUser()); + mDefaultContext.getUser()); }); countDownLatch.await(TIMEOUT, TimeUnit.MILLISECONDS); runWithShellPermissionIdentity(() -> { @@ -100,61 +122,117 @@ public class PermissionUpdateListenerTest { } @Test - public void testGrantPermissionNotifyListener() throws InterruptedException { + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) + public void testVirtualDeviceGrantPermissionNotifyListener() throws InterruptedException { + VirtualDeviceManager.VirtualDevice virtualDevice = + mVirtualDeviceManager.createVirtualDevice( + mFakeAssociationRule.getAssociationInfo().getId(), + new VirtualDeviceParams.Builder().build()); + Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId()); + testGrantPermissionNotifyListener(deviceContext, virtualDevice.getPersistentDeviceId()); + } + + @Test + public void testDefaultDeviceGrantPermissionNotifyListener() throws InterruptedException { + testGrantPermissionNotifyListener( + mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + } + + private void testGrantPermissionNotifyListener( + Context context, String expectedDeviceId) throws InterruptedException { + final PackageManager packageManager = context.getPackageManager(); TestOnPermissionsChangedListener permissionsChangedListener = new TestOnPermissionsChangedListener(1); runWithShellPermissionIdentity(() -> { - mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener); - mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, - mContext.getUser()); + packageManager.addOnPermissionsChangeListener(permissionsChangedListener); + packageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, + mDefaultContext.getUser()); }); permissionsChangedListener.waitForPermissionChangedCallbacks(); runWithShellPermissionIdentity(() -> { - mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener); + packageManager.removeOnPermissionsChangeListener(permissionsChangedListener); }); String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid); - assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + assertThat(deviceId).isEqualTo(expectedDeviceId); } @Test - public void testRevokePermissionNotifyListener() throws InterruptedException { + public void testDefaultDeviceRevokePermissionNotifyListener() throws InterruptedException { + testRevokePermissionNotifyListener( + mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + } + + @Test + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) + public void testVirtualDeviceRevokePermissionNotifyListener() throws InterruptedException { + VirtualDeviceManager.VirtualDevice virtualDevice = + mVirtualDeviceManager.createVirtualDevice( + mFakeAssociationRule.getAssociationInfo().getId(), + new VirtualDeviceParams.Builder().build()); + Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId()); + testRevokePermissionNotifyListener( + deviceContext, virtualDevice.getPersistentDeviceId()); + } + + private void testRevokePermissionNotifyListener( + Context context, String expectedDeviceId) throws InterruptedException { + final PackageManager packageManager = context.getPackageManager(); TestOnPermissionsChangedListener permissionsChangedListener = new TestOnPermissionsChangedListener(1); runWithShellPermissionIdentity(() -> { - mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, - mContext.getUser()); - mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener); - mPackageManager.revokeRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, - mContext.getUser()); + packageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, + mDefaultContext.getUser()); + packageManager.addOnPermissionsChangeListener(permissionsChangedListener); + packageManager.revokeRuntimePermission(PACKAGE_NAME, PERMISSION_NAME, + mDefaultContext.getUser()); }); permissionsChangedListener.waitForPermissionChangedCallbacks(); runWithShellPermissionIdentity(() -> { - mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener); + packageManager.removeOnPermissionsChangeListener(permissionsChangedListener); }); String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid); - assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + assertThat(deviceId).isEqualTo(expectedDeviceId); } @Test - public void testUpdatePermissionFlagsNotifyListener() throws InterruptedException { + public void testDefaultDeviceUpdatePermissionFlagsNotifyListener() throws InterruptedException { + testUpdatePermissionFlagsNotifyListener( + mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + } + + @Test + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) + public void testVirtualDeviceUpdatePermissionFlagsNotifyListener() throws InterruptedException { + VirtualDeviceManager.VirtualDevice virtualDevice = + mVirtualDeviceManager.createVirtualDevice( + mFakeAssociationRule.getAssociationInfo().getId(), + new VirtualDeviceParams.Builder().build()); + Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId()); + testUpdatePermissionFlagsNotifyListener( + deviceContext, virtualDevice.getPersistentDeviceId()); + } + + private void testUpdatePermissionFlagsNotifyListener( + Context context, String expectedDeviceId) throws InterruptedException { TestOnPermissionsChangedListener permissionsChangedListener = new TestOnPermissionsChangedListener(1); + final PackageManager packageManager = context.getPackageManager(); runWithShellPermissionIdentity(() -> { - mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener); + packageManager.addOnPermissionsChangeListener(permissionsChangedListener); int flag = PackageManager.FLAG_PERMISSION_USER_SET; - mPackageManager.updatePermissionFlags(PERMISSION_NAME, PACKAGE_NAME, flag, flag, - mContext.getUser()); + packageManager.updatePermissionFlags(PERMISSION_NAME, PACKAGE_NAME, flag, flag, + mDefaultContext.getUser()); }); permissionsChangedListener.waitForPermissionChangedCallbacks(); runWithShellPermissionIdentity(() -> { - mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener); + packageManager.removeOnPermissionsChangeListener(permissionsChangedListener); }); String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid); - assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT); + assertThat(deviceId).isEqualTo(expectedDeviceId); } private class TestOnPermissionsChangedListener diff --git a/tests/cts/permission/src/android/permission/cts/ProviderPermissionTest.java b/tests/cts/permission/src/android/permission/cts/ProviderPermissionTest.java index 9f5a813d1..83c2ffaee 100644 --- a/tests/cts/permission/src/android/permission/cts/ProviderPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/ProviderPermissionTest.java @@ -35,12 +35,11 @@ import android.provider.ContactsContract; import android.provider.Settings; import android.provider.Telephony; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.MediumTest; import android.util.Log; import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; -import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/tests/cts/permission/src/android/permission/cts/RebootPermissionTest.java b/tests/cts/permission/src/android/permission/cts/RebootPermissionTest.java index b1d3d5afb..13f17dce8 100644 --- a/tests/cts/permission/src/android/permission/cts/RebootPermissionTest.java +++ b/tests/cts/permission/src/android/permission/cts/RebootPermissionTest.java @@ -18,7 +18,8 @@ package android.permission.cts; import android.content.Intent; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify that rebooting requires Permission. diff --git a/tests/cts/permission/src/android/permission/cts/RevokePermissionTest.kt b/tests/cts/permission/src/android/permission/cts/RevokePermissionTest.kt index 05235e141..c67707f5f 100644 --- a/tests/cts/permission/src/android/permission/cts/RevokePermissionTest.kt +++ b/tests/cts/permission/src/android/permission/cts/RevokePermissionTest.kt @@ -53,13 +53,7 @@ class RevokePermissionTest { fun testRevokePermissionNotRequested() { testRevoke( packageName = APP_PKG_NAME, - permission = CAMERA, - throwableType = SecurityException::class.java, - throwableMessages = - listOf( - "has not requested permission", - "Permission $CAMERA isn't requested by package $APP_PKG_NAME" - ) + permission = CAMERA ) } @@ -104,13 +98,7 @@ class RevokePermissionTest { testRevoke( packageName = APP_PKG_NAME, permission = CAMERA, - reason = "test reason", - throwableType = SecurityException::class.java, - throwableMessages = - listOf( - "has not requested permission", - "Permission $CAMERA isn't requested by package $APP_PKG_NAME" - ) + reason = "test reason" ) } diff --git a/tests/cts/permission/telephony/Android.bp b/tests/cts/permission/telephony/Android.bp index bbfe06c55..5ded57ab3 100644 --- a/tests/cts/permission/telephony/Android.bp +++ b/tests/cts/permission/telephony/Android.bp @@ -26,6 +26,7 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], // Include both the 32 and 64 bit versions compile_multilib: "both", diff --git a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt index c37b71cd4..09f4c7f08 100644 --- a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt +++ b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt @@ -74,7 +74,7 @@ class DeviceAwarePermissionGrantTest { uninstallPackage(APP_PACKAGE_NAME, requireSuccess = false) } - @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) @Test fun onHostDevice_requestPermissionForHostDevice_shouldGrantPermission() { testGrantPermissionForDevice( @@ -87,7 +87,7 @@ class DeviceAwarePermissionGrantTest { ) } - @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) @Test fun onHostDevice_requestPermissionForRemoteDevice_shouldGrantPermission() { testGrantPermissionForDevice( @@ -100,7 +100,7 @@ class DeviceAwarePermissionGrantTest { ) } - @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) @Test fun onRemoteDevice_requestPermissionForHostDevice_shouldGrantPermission() { testGrantPermissionForDevice( @@ -113,7 +113,7 @@ class DeviceAwarePermissionGrantTest { ) } - @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS) + @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED) @Test fun onRemoteDevice_requestPermissionForRemoteDevice_shouldGrantPermission() { testGrantPermissionForDevice( diff --git a/tests/cts/permissionmultiuser/Android.bp b/tests/cts/permissionmultiuser/Android.bp index f577c82e3..b86b02205 100644 --- a/tests/cts/permissionmultiuser/Android.bp +++ b/tests/cts/permissionmultiuser/Android.bp @@ -43,5 +43,6 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], } diff --git a/tests/cts/permissionpolicy/Android.bp b/tests/cts/permissionpolicy/Android.bp index 127de939c..7a481b7ff 100644 --- a/tests/cts/permissionpolicy/Android.bp +++ b/tests/cts/permissionpolicy/Android.bp @@ -26,6 +26,7 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], libs: ["android.test.base"], static_libs: [ @@ -36,6 +37,7 @@ android_test { "androidx.test.ext.junit-nodeps", "truth", "permission-test-util-lib", + "androidx.test.rules", ], srcs: [ "src/**/*.java", diff --git a/tests/cts/permissionpolicy/res/raw/android_manifest.xml b/tests/cts/permissionpolicy/res/raw/android_manifest.xml index cc68a8a37..15f1d7e3d 100644 --- a/tests/cts/permissionpolicy/res/raw/android_manifest.xml +++ b/tests/cts/permissionpolicy/res/raw/android_manifest.xml @@ -1020,6 +1020,13 @@ <permission android:name="android.permission.BIND_SATELLITE_GATEWAY_SERVICE" android:protectionLevel="signature" /> + <!-- @SystemApi @hide Required for an application in order to access the last known cell id. + @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies") --> + <permission android:name="android.permission.ACCESS_LAST_KNOWN_CELL_ID" + android:protectionLevel="signature" + android:label="@string/permlab_accessLastKnownCellId" + android:description="@string/permdesc_accessLastKnownCellId"/> + <!-- ====================================================================== --> <!-- Permissions for accessing external storage --> <!-- ====================================================================== --> @@ -2869,6 +2876,16 @@ <permission android:name="android.permission.MANAGE_SENSORS" android:protectionLevel="signature" /> + <!-- Must be required by a DomainSelectionService to ensure that only the + system can bind to it. + <p>Protection level: signature + @SystemApi + @hide + @FlaggedApi("com.android.internal.telephony.flags.use_oem_domain_selection_service") + --> + <permission android:name="android.permission.BIND_DOMAIN_SELECTION_SERVICE" + android:protectionLevel="signature" /> + <!-- Must be required by an ImsService to ensure that only the system can bind to it. <p>Protection level: signature|privileged|vendorPrivileged @@ -3056,7 +3073,7 @@ types of interactions @hide --> <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" - android:protectionLevel="signature|installer|role" /> + android:protectionLevel="signature|installer|module|role" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> <!-- Allows interaction across profiles in the same profile group. --> @@ -3444,6 +3461,13 @@ <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. + @FlaggedApi("com.android.net.thread.flags.thread_user_restriction_enabled") + --> + <permission android:name="android.permission.MANAGE_DEVICE_POLICY_THREAD_NETWORK" + android:protectionLevel="internal|role" /> + <!-- 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. @@ -3619,6 +3643,13 @@ <permission android:name="android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS" android:protectionLevel="internal|role" /> + <!-- Allows an application to manage policy related to content protection. + <p>Protection level: internal|role + @FlaggedApi("android.view.contentprotection.flags.manage_device_policy_enabled") + --> + <permission android:name="android.permission.MANAGE_DEVICE_POLICY_CONTENT_PROTECTION" + 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_* @@ -3643,6 +3674,13 @@ <permission android:name="android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL" android:protectionLevel="internal|role" /> + <!-- Allows an application to access EnhancedConfirmationManager. + @SystemApi + @FlaggedApi("android.permission.flags.enhanced_confirmation_mode_apis_enabled") + @hide This is not a third-party API (intended for OEMs and system apps). --> + <permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" + android:protectionLevel="signature|installer" /> + <!-- @SystemApi @hide Allows an application to set a device owner on retail demo devices.--> <permission android:name="android.permission.PROVISION_DEMO_DEVICE" android:protectionLevel="signature|setup|knownSigner" @@ -3694,6 +3732,18 @@ <permission android:name="android.permission.ACTIVITY_EMBEDDING" android:protectionLevel="signature|privileged" /> + <!-- Allows an application to embed any other apps in untrusted embedding mode without the need + for the embedded app to consent. + <p>For now, this permission is only granted to the Assistant application selected by + the user. + {@see https://developer.android.com/guide/topics/large-screens/activity-embedding#trust_model} + @SystemApi + @FlaggedApi("com.android.window.flags.untrusted_embedding_any_app_permission") + @hide + --> + <permission android:name="android.permission.EMBED_ANY_APP_IN_UNTRUSTED_MODE" + android:protectionLevel="internal|role" /> + <!-- Allows an application to start any activity, regardless of permission protection or exported state. @hide --> @@ -3865,6 +3915,14 @@ android:description="@string/permdesc_useDataInBackground" android:protectionLevel="normal" /> + <!-- 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_uuid_presence") + --> + <permission android:name="android.permission.REQUEST_OBSERVE_DEVICE_UUID_PRESENCE" + android:protectionLevel="signature|privileged" /> + <!-- Allows app to request to be associated with a device via {@link android.companion.CompanionDeviceManager} as a "watch" @@ -4783,7 +4841,7 @@ <p>Protection level: signature --> <permission android:name="android.permission.BIND_NFC_SERVICE" - android:protectionLevel="signature" /> + android:protectionLevel="signature|module" /> <!-- Must be required by a {@link android.service.quickaccesswallet.QuickAccessWalletService} to ensure that only the system can bind to it. @@ -4925,7 +4983,7 @@ <p>Intended for use by ROLE_ASSISTANT and signature apps only. --> <permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" - android:protectionLevel="signature|role"/> + android:protectionLevel="signature|module|role"/> <!-- Must be required by a {@link android.service.credentials.CredentialProviderService}, to ensure that only the system can bind to it. @@ -5070,6 +5128,13 @@ <permission android:name="android.permission.BIND_REMOTE_DISPLAY" android:protectionLevel="signature" /> + <!-- Must be required by a android.media.tv.ad.TvAdService to ensure that only the system can + bind to it. + <p>Protection level: signature|privileged + --> + <permission android:name="android.permission.BIND_TV_AD_SERVICE" + android:protectionLevel="signature|privileged" /> + <!-- Must be required by a {@link android.media.tv.TvInputService} to ensure that only the system can bind to it. <p>Protection level: signature|privileged @@ -5232,6 +5297,13 @@ <permission android:name="android.permission.MONITOR_KEYBOARD_BACKLIGHT" android:protectionLevel="signature" /> + <!-- Allows low-level access for monitoring changes to sticky modifier state, when A11y + Sitcky keys feature is enabled. + <p>Not for use by third-party applications. + @hide --> + <permission android:name="android.permission.MONITOR_STICKY_MODIFIER_STATE" + android:protectionLevel="signature" /> + <!-- Allows an app to schedule a prioritized alarm that can be used to perform background work even when the device is in doze. <p>Not for use by third-party applications. @@ -5517,7 +5589,7 @@ <!-- @SystemApi Allows an application to manage the holders of a role. @hide --> <permission android:name="android.permission.MANAGE_ROLE_HOLDERS" - android:protectionLevel="signature|installer" /> + android:protectionLevel="signature|installer|module" /> <!-- @SystemApi Allows an application to manage the holders of roles associated with default applications. @@ -5537,7 +5609,7 @@ <!-- @SystemApi Allows an application to observe role holder changes. @hide --> <permission android:name="android.permission.OBSERVE_ROLE_HOLDERS" - android:protectionLevel="signature|installer" /> + android:protectionLevel="signature|installer|module" /> <!-- Allows an application to manage the companion devices. @hide --> @@ -5555,10 +5627,10 @@ <permission android:name="android.permission.DELIVER_COMPANION_MESSAGES" android:protectionLevel="normal" /> - <!-- @SystemApi Allows an application to send and receive messages via CDM transports. + <!-- Allows an application to use companion transports @hide --> <permission android:name="android.permission.USE_COMPANION_TRANSPORTS" - android:protectionLevel="signature|module" /> + android:protectionLevel="signature" /> <!-- Allows an application to create new companion device associations. @SystemApi @@ -6435,10 +6507,24 @@ <permission android:name="android.permission.USE_BIOMETRIC_INTERNAL" android:protectionLevel="signature" /> + <!-- Allows privileged apps to access the background face authentication. + @SystemApi + @FlaggedApi("android.hardware.biometrics.face_background_authentication") + @hide --> + <permission android:name="android.permission.USE_BACKGROUND_FACE_AUTHENTICATION" + android:protectionLevel="signature|privileged" /> + <!-- Allows the system to control the BiometricDialog (SystemUI). Reserved for the system. @hide --> <permission android:name="android.permission.MANAGE_BIOMETRIC_DIALOG" android:protectionLevel="signature" /> + <!-- Allows an application to set the BiometricDialog (SystemUI) logo . + <p>Not for use by third-party applications. + @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") +--> + <permission android:name="android.permission.SET_BIOMETRIC_DIALOG_LOGO" + android:protectionLevel="signature" /> + <!-- Allows an application to control keyguard. Only allowed for system processes. @hide --> <permission android:name="android.permission.CONTROL_KEYGUARD" @@ -6967,6 +7053,16 @@ android:label="@string/permlab_foregroundServiceFileManagement" android:protectionLevel="normal|instant" /> + <!-- @FlaggedApi("android.content.pm.introduce_media_processing_type") + Allows a regular application to use {@link android.app.Service#startForeground + Service.startForeground} with the type "mediaProcessing". + <p>Protection level: normal|instant + --> + <permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROCESSING" + android:description="@string/permdesc_foregroundServiceMediaProcessing" + android:label="@string/permlab_foregroundServiceMediaProcessing" + android:protectionLevel="normal|instant" /> + <!-- Allows a regular application to use {@link android.app.Service#startForeground Service.startForeground} with the type "specialUse". <p>Protection level: normal|appop|instant @@ -7070,6 +7166,13 @@ <permission android:name="android.permission.MANAGE_ACCESSIBILITY" android:protectionLevel="signature|setup|recents|role" /> + <!-- @FlaggedApi("com.android.server.accessibility.motion_event_observing") + @hide + @TestApi + Allows an accessibility service to observe motion events without consuming them. --> + <permission android:name="android.permission.ACCESSIBILITY_MOTION_EVENT_OBSERVING" + android:protectionLevel="signature" /> + <!-- @SystemApi Allows an app to grant a profile owner access to device identifiers. <p>Not for use by third-party applications. @deprecated @@ -7500,6 +7603,16 @@ <permission android:name="android.permission.RUN_USER_INITIATED_JOBS" android:protectionLevel="normal"/> + <!-- @FlaggedApi("android.app.job.backup_jobs_exemption") + Gives applications whose <b>primary use case</b> is to backup or sync content increased + job execution allowance in order to complete the related work. The jobs must have a valid + content URI trigger and network constraint set. + <p>This is a special access permission that can be revoked by the system or the user. + <p>Protection level: signature|privileged|appop + --> + <permission android:name="android.permission.RUN_BACKUP_JOBS" + android:protectionLevel="signature|privileged|appop"/> + <!-- Allows a browser to invoke the set of credential candidate query apis. <p>Protection level: normal --> @@ -7511,7 +7624,7 @@ --> <permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN" android:protectionLevel="normal"/> - + <!-- Allows specifying candidate credential providers to be queried in Credential Manager get flows, or to be preferred as a default in the Credential Manager create flows. <p>Protection level: normal --> @@ -7675,6 +7788,46 @@ <permission android:name="android.permission.OVERRIDE_SYSTEM_KEY_BEHAVIOR_IN_FOCUSED_WINDOW" android:protectionLevel="signature|privileged" /> + <!-- @FlaggedApi("com.android.server.notification.flags.redact_otp_notifications_from_untrusted_listeners") + Allows apps with a NotificationListenerService to receive notifications with sensitive + information + <p>Apps with a NotificationListenerService without this permission will not be able + to view certain types of sensitive information contained in notifications + <p>Protection level: signature|role + --> + <permission android:name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS" + android:protectionLevel="signature|role" /> + + <!-- @SystemApi + @FlaggedApi("android.app.bic_client") + Allows app to call BackgroundInstallControlManager API to retrieve silently installed apps + for all users on device. + <p>Apps with a BackgroundInstallControlManager client will not be able to call any API without + this permission. + <p>Protection level: signature|role + @hide + --> + <permission android:name="android.permission.GET_BACKGROUND_INSTALLED_PACKAGES" + android:protectionLevel="signature|role" /> + + <!-- @SystemApi Allows an application to read the system grammatical gender. + @FlaggedApi("android.app.system_terms_of_address_enabled") + <p>Protection level: signature|privileged + @hide + --> + <permission android:name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" + android:protectionLevel="signature|privileged"/> + + <!-- @SystemApi + @FlaggedApi("android.content.pm.emergency_install_permission") + Allows each app store in the system image to designate another app in the system image to + update the app store + <p>Protection level: signature|privileged + @hide + --> + <permission android:name="android.permission.EMERGENCY_INSTALL_PACKAGES" + android:protectionLevel="signature|privileged" /> + <!-- Attribution for Geofencing service. --> <attribution android:tag="GeofencingService" android:label="@string/geofencing_service"/> <!-- Attribution for Country Detector. --> diff --git a/tests/cts/permissionpolicy/res/raw/automotive_android_manifest.xml b/tests/cts/permissionpolicy/res/raw/automotive_android_manifest.xml index dcd8ec4bd..d87fe65b8 100644 --- a/tests/cts/permissionpolicy/res/raw/automotive_android_manifest.xml +++ b/tests/cts/permissionpolicy/res/raw/automotive_android_manifest.xml @@ -206,6 +206,42 @@ android:protectionLevel="signature|privileged" android:label="@string/car_permission_label_control_car_powertrain" android:description="@string/car_permission_desc_control_car_powertrain"/> + <permission android:name="android.car.permission.READ_CAR_SEAT_BELTS" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_car_seat_belts" + android:description="@string/car_permission_desc_read_car_seat_belts"/> + <permission android:name="android.car.permission.CONTROL_CAR_DYNAMICS_STATE" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_control_car_dynamics_state" + android:description="@string/car_permission_desc_control_car_dynamics_state"/> + <permission android:name="android.car.permission.READ_IMPACT_SENSORS" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_impact_sensors" + android:description="@string/car_permission_desc_read_impact_sensors"/> + <permission android:name="android.car.permission.READ_HEAD_UP_DISPLAY" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_head_up_display" + android:description="@string/car_permission_desc_read_head_up_display"/> + <permission android:name="android.car.permission.CONTROL_HEAD_UP_DISPLAY" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_control_head_up_display" + android:description="@string/car_permission_desc_control_head_up_display"/> + <permission android:name="android.car.permission.READ_VALET_MODE" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_valet_mode" + android:description="@string/car_permission_desc_read_valet_mode"/> + <permission android:name="android.car.permission.CONTROL_VALET_MODE" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_control_valet_mode" + android:description="@string/car_permission_desc_control_valet_mode"/> + <permission android:name="android.car.permission.READ_CAR_AIRBAGS" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_car_airbags" + android:description="@string/car_permission_desc_read_car_airbags"/> + <permission android:name="android.car.permission.READ_ULTRASONICS_SENSOR_DATA" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_ultrasonics_sensor_data" + android:description="@string/car_permission_desc_read_ultrasonics_sensor_data"/> <permission android:name="android.car.permission.CAR_NAVIGATION_MANAGER" android:protectionLevel="signature|privileged" android:label="@string/car_permission_car_navigation_manager" @@ -574,4 +610,9 @@ android:protectionLevel="signature|privileged" android:label="@string/car_permission_label_query_display_compatibility" android:description="@string/car_permission_desc_query_display_compatibility"/> + <permission + android:name="android.car.permission.READ_PERSIST_TETHERING_SETTINGS" + android:protectionLevel="signature|privileged" + android:label="@string/car_permission_label_read_persist_tethering_settings" + android:description="@string/car_permission_desc_read_persist_tethering_settings" /> </manifest> diff --git a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/ContactsProviderTest.java b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/ContactsProviderTest.java index d8dc11a14..f34170a9b 100644 --- a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/ContactsProviderTest.java +++ b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/ContactsProviderTest.java @@ -21,7 +21,8 @@ import android.content.ContentValues; import android.platform.test.annotations.AppModeFull; import android.provider.ContactsContract; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify that deprecated contacts permissions are not enforced. diff --git a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/NoCaptureAudioOutputPermissionTest.java b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/NoCaptureAudioOutputPermissionTest.java index 0f7638694..ef38573ab 100644 --- a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/NoCaptureAudioOutputPermissionTest.java +++ b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/NoCaptureAudioOutputPermissionTest.java @@ -21,7 +21,8 @@ import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder.AudioSource; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify the capture system video output permission requirements. diff --git a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/PermissionMaxSdkVersionTest.java b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/PermissionMaxSdkVersionTest.java index b02b32f22..8bf3e83a4 100644 --- a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/PermissionMaxSdkVersionTest.java +++ b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/PermissionMaxSdkVersionTest.java @@ -19,7 +19,8 @@ package android.permission.cts; import android.content.pm.PackageManager; import android.os.Process; import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.filters.SmallTest; /** * Verify permission behaviors with android:maxSdkVersion diff --git a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/RuntimePermissionProperties.kt b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/RuntimePermissionProperties.kt index ffb68114d..6b3ae5f2e 100644 --- a/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/RuntimePermissionProperties.kt +++ b/tests/cts/permissionpolicy/src/android/permissionpolicy/cts/RuntimePermissionProperties.kt @@ -74,7 +74,7 @@ class RuntimePermissionProperties { private val platformPkg = pm.getPackageInfo("android", GET_PERMISSIONS) private val platformRuntimePerms = - platformPkg.permissions.filter { it.protection == PROTECTION_DANGEROUS } + platformPkg.permissions!!.filter { it.protection == PROTECTION_DANGEROUS } private val platformBgPermNames = platformRuntimePerms.mapNotNull { it.backgroundPermission } @Test @@ -96,7 +96,7 @@ class RuntimePermissionProperties { @Test fun allAppOpPermissionNeedAnAppOp() { val platformAppOpPerms = - platformPkg.permissions + platformPkg.permissions!! .filter { (it.protectionFlags and PROTECTION_FLAG_APPOP) != 0 } .filter { // Grandfather incomplete definition of PACKAGE_USAGE_STATS diff --git a/tests/cts/permissionui/Android.bp b/tests/cts/permissionui/Android.bp index 12fdbe533..06b8e4640 100644 --- a/tests/cts/permissionui/Android.bp +++ b/tests/cts/permissionui/Android.bp @@ -42,6 +42,7 @@ android_test { "CtsAccessibilityCommon", "platform-test-rules", "platform-test-annotations", + "android.permission.flags-aconfig-java", ], data: [ ":CtsPermissionPolicyApp25", diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt index b47fba56f..6f80ea5d6 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt @@ -111,6 +111,11 @@ abstract class BasePermissionTest { @JvmStatic protected val isAutomotive = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) + @JvmStatic + protected val isAutomotiveSplitscreen = isAutomotive && + packageManager.hasSystemFeature( + /* PackageManager.FEATURE_CAR_SPLITSCREEN_MULTITASKING */ + "android.software.car.splitscreen_multitasking") } @get:Rule val screenRecordRule = ScreenRecordRule(false, false) diff --git a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt new file mode 100644 index 000000000..83f53b252 --- /dev/null +++ b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.permissionui.cts + +import android.app.AppOpsManager +import android.app.Instrumentation +import android.app.ecm.EnhancedConfirmationManager +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import android.permission.flags.Flags +import android.platform.test.annotations.AppModeFull +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider +import androidx.test.filters.SdkSuppress +import androidx.test.platform.app.InstrumentationRegistry +import com.android.compatibility.common.util.SystemUtil.eventually +import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test + +@AppModeFull(reason = "Instant apps cannot install packages") +@SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM, codeName = "VanillaIceCream") +@RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) +class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { + + private val apkName = APP_APK_NAME_31 + private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() + private val context: Context = instrumentation.targetContext + private val ecm by lazy { context.getSystemService(EnhancedConfirmationManager::class.java)!! } + + @Rule + @JvmField + val mCheckFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenStoreAppThenIsNotRestrictedFromProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromStore(apkName) + runWithShellPermissionIdentity { + eventually { assertFalse(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenLocalAppThenIsRestrictedFromProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromLocalFile(apkName) + runWithShellPermissionIdentity { + eventually { assertTrue(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenDownloadedThenAppIsRestrictedFromProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromDownloadedFile(apkName) + runWithShellPermissionIdentity { + eventually { assertTrue(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenExplicitlyRestrictedAppThenIsRestrictedFromProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromStore(apkName) + runWithShellPermissionIdentity { + eventually { assertFalse(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + setAppEcmState(context, APP_PACKAGE_NAME, MODE_ERRORED) + eventually { assertTrue(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenRestrictedAppThenIsNotRestrictedFromNonProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromDownloadedFile(apkName) + runWithShellPermissionIdentity { + eventually { assertFalse(ecm.isRestricted(APP_PACKAGE_NAME, NON_PROTECTED_SETTING)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenRestrictedAppThenClearRestrictionNotAllowedByDefault() { + installPackageWithInstallSourceAndMetadataFromDownloadedFile(apkName) + runWithShellPermissionIdentity { + eventually { assertFalse(ecm.isClearRestrictionAllowed(APP_PACKAGE_NAME)) } + } + } + + @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @Test + fun givenRestrictedAppWhenClearRestrictionThenNotRestrictedFromProtectedSetting() { + installPackageWithInstallSourceAndMetadataFromDownloadedFile(apkName) + runWithShellPermissionIdentity { + eventually { assertTrue(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + ecm.setClearRestrictionAllowed(APP_PACKAGE_NAME) + eventually { assertTrue(ecm.isClearRestrictionAllowed(APP_PACKAGE_NAME)) } + ecm.clearRestriction(APP_PACKAGE_NAME) + eventually { assertFalse(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } + } + } + + companion object { + private const val NON_PROTECTED_SETTING = "example_setting_which_is_not_protected" + private const val PROTECTED_SETTING = "android:bind_accessibility_service" + private const val MODE_ERRORED = 2 + + @Throws(PackageManager.NameNotFoundException::class) + private fun setAppEcmState(context: Context, packageName: String, mode: Int) { + val appOpsManager = context.getSystemService(AppOpsManager::class.java)!! + appOpsManager.setMode( + AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, + context.packageManager + .getApplicationInfoAsUser( + packageName, + /* flags */ 0, + android.os.Process.myUserHandle() + ) + .uid, + packageName, + mode + ) + } + } +} diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTapjackingTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTapjackingTest.kt index 3a8a6a838..b81432369 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTapjackingTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTapjackingTest.kt @@ -43,6 +43,9 @@ class PermissionTapjackingTest : BaseUsePermissionTest() { // PermissionController for television uses a floating window. assumeFalse(isTv) + // Automotive split-screen multitasking uses multi-window mode + assumeFalse(isAutomotiveSplitscreen) + assertAppHasPermission(ACCESS_FINE_LOCATION, false) requestAppPermissionsForNoResult(ACCESS_FINE_LOCATION) {} @@ -63,6 +66,9 @@ class PermissionTapjackingTest : BaseUsePermissionTest() { // PermissionController for television uses a floating window. assumeFalse(isTv) + // Automotive split-screen multitasking uses multi-window mode + assumeFalse(isAutomotiveSplitscreen) + assertAppHasPermission(ACCESS_FINE_LOCATION, false) requestAppPermissionsForNoResult(ACCESS_FINE_LOCATION) {} diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt index 018a6e486..1f1aba1e7 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt @@ -20,6 +20,8 @@ import android.Manifest.permission.ACCESS_MEDIA_LOCATION import android.Manifest.permission.READ_MEDIA_IMAGES import android.Manifest.permission.READ_MEDIA_VIDEO import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED +import android.app.UiAutomation.ROTATION_FREEZE_270 +import android.app.UiAutomation.ROTATION_UNFREEZE import android.content.pm.PackageManager import android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME import android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT @@ -466,13 +468,31 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() { } @Test + fun testDismissAfterActivityRecreatedWithPickerOpen() { + installPackage(APP_APK_PATH_LATEST) + requestAppPermissionsAndAssertResult( + READ_MEDIA_IMAGES to false, + READ_MEDIA_VISUAL_USER_SELECTED to true, + waitForWindowTransition = false + ) { + doAndWaitForWindowTransition { click(By.res(SELECT_BUTTON)) } + clickImageOrVideo() + try { + doAndWaitForWindowTransition { uiAutomation.setRotation(ROTATION_FREEZE_270) } + clickImageOrVideo() + doAndWaitForWindowTransition { clickAllow() } + } finally { + uiAutomation.setRotation(ROTATION_UNFREEZE) + } + } + } + + @Test fun testCanSelectPhotosInSettings() { installPackage(APP_APK_PATH_LATEST) navigateToIndividualPermissionSetting(READ_MEDIA_IMAGES) click(By.res(SELECT_RADIO_BUTTON)) - doAndWaitForWindowTransition { - click(By.res(EDIT_PHOTOS_BUTTON)) - } + doAndWaitForWindowTransition { click(By.res(EDIT_PHOTOS_BUTTON)) } clickImageOrVideo() clickAllow() } diff --git a/tests/cts/role/Android.bp b/tests/cts/role/Android.bp index 368a45263..a2e3255c3 100644 --- a/tests/cts/role/Android.bp +++ b/tests/cts/role/Android.bp @@ -39,6 +39,7 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], data: [ diff --git a/tests/cts/safetycenter/Android.bp b/tests/cts/safetycenter/Android.bp index 6e0fedec0..e49587c39 100644 --- a/tests/cts/safetycenter/Android.bp +++ b/tests/cts/safetycenter/Android.bp @@ -48,5 +48,6 @@ android_test { "cts", "general-tests", "mts-permission", + "mcts-permission", ], } 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 963c593cd..8bcc724f3 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -3796,6 +3796,17 @@ class SafetyCenterManagerTest { assertThat(lastUpdated[key]).isNotNull() } + @Test + fun setSafetySourceData_dynamicHiddenWithIssueOnlyData_allowed() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.hiddenSourceConfig) + val expectedData = SafetySourceTestData.issuesOnly(safetySourceTestData.informationIssue) + + safetyCenterTestHelper.setData(DYNAMIC_HIDDEN_ID, expectedData) + + val actualData = safetyCenterManager.getSafetySourceDataWithPermission(DYNAMIC_HIDDEN_ID) + assertThat(actualData).isEqualTo(expectedData) + } + private fun dumpLastUpdated(): Map<String, String> { val dump = SystemUtil.runShellCommand("dumpsys safety_center data") return dump diff --git a/tests/hostside/safetycenter/helper-app/Android.bp b/tests/hostside/safetycenter/helper-app/Android.bp index d15caceaa..04e660134 100644 --- a/tests/hostside/safetycenter/helper-app/Android.bp +++ b/tests/hostside/safetycenter/helper-app/Android.bp @@ -31,6 +31,7 @@ android_test_helper_app { static_libs: [ "androidx.test.rules", "androidx.test.ext.junit", + "safety-center-pending-intents", "safety-center-test-util-lib", ], } diff --git a/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterInteractionLoggingHelperTests.kt b/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterInteractionLoggingHelperTests.kt index 784701b8a..0f1356ca4 100644 --- a/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterInteractionLoggingHelperTests.kt +++ b/tests/hostside/safetycenter/helper-app/src/android/safetycenter/hostside/device/SafetyCenterInteractionLoggingHelperTests.kt @@ -19,14 +19,21 @@ package android.safetycenter.hostside.device import android.content.Context import android.os.Bundle import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROUP_ID +import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID +import android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterActivity +import com.android.safetycenter.testing.SafetyCenterActivityLauncher.launchSafetyCenterQsActivity import com.android.safetycenter.testing.SafetyCenterActivityLauncher.openPageAndExit import com.android.safetycenter.testing.SafetyCenterFlags import com.android.safetycenter.testing.SafetyCenterTestConfigs +import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.SINGLE_SOURCE_ID import com.android.safetycenter.testing.SafetyCenterTestHelper import com.android.safetycenter.testing.SafetyCenterTestRule +import com.android.safetycenter.testing.SafetySourceTestData +import com.android.safetycenter.testing.SafetySourceTestData.Companion.INFORMATION_ISSUE_ID +import com.android.safetycenter.testing.UiTestHelper.waitAllTextDisplayed import org.junit.Before import org.junit.Rule import org.junit.Test @@ -47,6 +54,7 @@ class SafetyCenterInteractionLoggingHelperTests { private val context: Context = ApplicationProvider.getApplicationContext() private val safetyCenterTestHelper = SafetyCenterTestHelper(context) private val safetyCenterTestConfigs = SafetyCenterTestConfigs(context) + private val safetySourceTestData = SafetySourceTestData(context) @get:Rule val safetyCenterTestRule = SafetyCenterTestRule(safetyCenterTestHelper) @@ -61,6 +69,34 @@ class SafetyCenterInteractionLoggingHelperTests { } @Test + fun openSafetyCenterFullFromQs() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.informationWithIssue) + + context.launchSafetyCenterQsActivity { + openPageAndExit("Settings") { waitAllTextDisplayed("OK") } + } + } + + @Test + fun openSafetyCenterWithIssueIntent() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) + + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.informationWithIssue) + + val extras = Bundle() + extras.putString(EXTRA_SAFETY_SOURCE_ID, SINGLE_SOURCE_ID) + extras.putString(EXTRA_SAFETY_SOURCE_ISSUE_ID, INFORMATION_ISSUE_ID) + + context.launchSafetyCenterActivity(extras) {} + } + + @Test + fun openSafetyCenterQs() { + context.launchSafetyCenterQsActivity {} + } + + @Test fun openSubpageFromIntentExtra() { val config = safetyCenterTestConfigs.singleSourceConfig safetyCenterTestHelper.setConfig(config) 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 458516379..dc3cb3fc2 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 @@ -21,12 +21,16 @@ import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceIssue import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.safetycenter.pendingintents.PendingIntentSender +import com.android.safetycenter.testing.SafetyCenterActivityLauncher import com.android.safetycenter.testing.SafetyCenterFlags import com.android.safetycenter.testing.SafetyCenterTestConfigs import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.SINGLE_SOURCE_ID import com.android.safetycenter.testing.SafetyCenterTestHelper import com.android.safetycenter.testing.SafetyCenterTestRule import com.android.safetycenter.testing.SafetySourceTestData +import com.android.safetycenter.testing.StatusBarNotificationWithChannel +import com.android.safetycenter.testing.TestNotificationListener import org.junit.Before import org.junit.Rule import org.junit.Test @@ -49,7 +53,9 @@ class SafetyCenterNotificationLoggingHelperTests { private val safetySourceTestData = SafetySourceTestData(context) private val safetyCenterTestConfigs = SafetyCenterTestConfigs(context) - @get:Rule val safetyCenterTestRule = SafetyCenterTestRule(safetyCenterTestHelper) + @get:Rule + val safetyCenterTestRule = + SafetyCenterTestRule(safetyCenterTestHelper, withNotifications = true) @Before fun setUp() { @@ -64,6 +70,13 @@ class SafetyCenterNotificationLoggingHelperTests { safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, newTestDataWithNotifiableIssue()) } + @Test + fun openSafetyCenterFromNotification() { + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, newTestDataWithNotifiableIssue()) + + sendContentPendingIntent(TestNotificationListener.waitForSingleNotification()) + } + private fun newTestDataWithNotifiableIssue(): SafetySourceData = safetySourceTestData .defaultCriticalDataBuilder() @@ -74,4 +87,17 @@ class SafetyCenterNotificationLoggingHelperTests { .build() ) .build() + + companion object { + private fun sendContentPendingIntent( + statusBarNotificationWithChannel: StatusBarNotificationWithChannel + ) { + val contentIntent = + statusBarNotificationWithChannel.statusBarNotification.notification.contentIntent + SafetyCenterActivityLauncher.executeBlockAndExit( + launchActivity = { PendingIntentSender.send(contentIntent) }, + block = {} // No action required + ) + } + } } diff --git a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt index 5fe9e0a2a..91222d045 100644 --- a/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt +++ b/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt @@ -24,10 +24,13 @@ import com.android.compatibility.common.util.ApiLevelUtil import com.android.os.AtomsProto.Atom import com.android.os.AtomsProto.SafetyCenterInteractionReported import com.android.os.AtomsProto.SafetyCenterInteractionReported.Action +import com.android.os.AtomsProto.SafetyCenterInteractionReported.NavigationSource import com.android.os.AtomsProto.SafetyCenterInteractionReported.ViewType import com.android.tradefed.testtype.DeviceJUnit4ClassRunner import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test import com.google.common.truth.Truth.assertThat +import java.math.BigInteger +import java.security.MessageDigest import org.junit.After import org.junit.Assume.assumeTrue import org.junit.Before @@ -67,15 +70,76 @@ class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { val safetyCenterViewedAtoms = getInteractionReportedAtoms(Action.SAFETY_CENTER_VIEWED) - assertThat(safetyCenterViewedAtoms).isNotEmpty() + assertThat(safetyCenterViewedAtoms).hasSize(1) + with(safetyCenterViewedAtoms.first()) { + assertThat(navigationSource).isEqualTo(NavigationSource.SOURCE_UNKNOWN) + assertThat(viewType).isEqualTo(ViewType.FULL) + } } @Test - fun sendNotification_recordsNotificationPostedEvent() { + fun openSafetyCenterQs_recordsSafetyCenterViewedEvent() { + helperAppRule.runTest(TEST_CLASS_NAME, "openSafetyCenterQs") + + val safetyCenterViewedAtoms = getInteractionReportedAtoms(Action.SAFETY_CENTER_VIEWED) + + assertThat(safetyCenterViewedAtoms).hasSize(1) + with(safetyCenterViewedAtoms.first()) { + assertThat(navigationSource).isEqualTo(NavigationSource.QUICK_SETTINGS_TILE) + assertThat(viewType).isEqualTo(ViewType.QUICK_SETTINGS) + } + } + + @Test + fun openSafetyCenterFullFromQs_recordsViewEventWithCorrectSource() { + helperAppRule.runTest(TEST_CLASS_NAME, "openSafetyCenterFullFromQs") + + val safetyCenterViewedAtoms = getInteractionReportedAtoms(Action.SAFETY_CENTER_VIEWED) + + val viewTypesToNavSources = + safetyCenterViewedAtoms.associate { Pair(it.viewType, it.navigationSource) } + assertThat(viewTypesToNavSources) + .containsEntry(ViewType.FULL, NavigationSource.QUICK_SETTINGS_TILE) + } + + @Test + fun openSafetyCenterWithIssueIntent_recordsViewEventWithAssociatedIssueMetadata() { + helperAppRule.runTest(TEST_CLASS_NAME, testMethodName = "openSafetyCenterWithIssueIntent") + + val safetyCenterViewedAtoms = getInteractionReportedAtoms(Action.SAFETY_CENTER_VIEWED) + + assertThat(safetyCenterViewedAtoms).hasSize(1) + with(safetyCenterViewedAtoms.first()) { + assertThat(navigationSource).isEqualTo(NavigationSource.NOTIFICATION) + assertThat(encodedSafetySourceId).isEqualTo(ENCODED_SINGLE_SOURCE_ID) + assertThat(encodedIssueTypeId).isEqualTo(ENCODED_ISSUE_TYPE_ID) + } + } + + @Test + fun openSafetyCenterWithNotification_recordsViewEventWithAssociatedIssueMetadata() { assumeAtLeastUpsideDownCake("Safety Center notification APIs require Android U+") helperAppRule.runTest( testClassName = ".SafetyCenterNotificationLoggingHelperTests", + testMethodName = "openSafetyCenterFromNotification" + ) + + val safetyCenterViewedAtoms = getInteractionReportedAtoms(Action.SAFETY_CENTER_VIEWED) + + assertThat(safetyCenterViewedAtoms).hasSize(1) + with(safetyCenterViewedAtoms.first()) { + assertThat(navigationSource).isEqualTo(NavigationSource.NOTIFICATION) + assertThat(encodedSafetySourceId).isEqualTo(ENCODED_SINGLE_SOURCE_ID) + assertThat(encodedIssueTypeId).isEqualTo(ENCODED_ISSUE_TYPE_ID) + } + } + + @Test + fun sendNotification_recordsNotificationPostedEvent() { + assumeAtLeastUpsideDownCake("Safety Center notification APIs require Android U+") + helperAppRule.runTest( + testClassName = ".SafetyCenterNotificationLoggingHelperTests", testMethodName = "sendNotification" ) @@ -97,8 +161,7 @@ class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { assertThat(safetyCenterViewedAtoms).hasSize(1) with(safetyCenterViewedAtoms.first()) { assertThat(viewType).isEqualTo(ViewType.SUBPAGE) - assertThat(navigationSource) - .isEqualTo(SafetyCenterInteractionReported.NavigationSource.SOURCE_UNKNOWN) + assertThat(navigationSource).isEqualTo(NavigationSource.SOURCE_UNKNOWN) assertThat(sessionId).isNotNull() } } @@ -113,8 +176,7 @@ class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { val subpageViewedEvent = safetyCenterViewedAtoms.find { it.viewType == ViewType.SUBPAGE } assertThat(subpageViewedEvent).isNotNull() - assertThat(subpageViewedEvent!!.navigationSource) - .isEqualTo(SafetyCenterInteractionReported.NavigationSource.SAFETY_CENTER) + assertThat(subpageViewedEvent!!.navigationSource).isEqualTo(NavigationSource.SAFETY_CENTER) assertThat(safetyCenterViewedAtoms.map { it.sessionId }.distinct()).hasSize(1) } @@ -129,8 +191,7 @@ class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { assertThat(safetyCenterViewedAtoms).hasSize(1) with(safetyCenterViewedAtoms.first()) { assertThat(viewType).isEqualTo(ViewType.SUBPAGE) - assertThat(navigationSource) - .isEqualTo(SafetyCenterInteractionReported.NavigationSource.SETTINGS) + assertThat(navigationSource).isEqualTo(NavigationSource.SETTINGS) assertThat(sessionId).isNotNull() } } @@ -148,5 +209,27 @@ class SafetyCenterInteractionLoggingHostTest : BaseHostJUnit4Test() { private companion object { const val TEST_CLASS_NAME = ".SafetyCenterInteractionLoggingHelperTests" + + // LINT.IfChange(single_source_id) + val ENCODED_SINGLE_SOURCE_ID = encodeId("test_single_source_id") + // LINT.ThenChange(/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt:issue_type_id) + + // LINT.IfChange(issue_type_id) + val ENCODED_ISSUE_TYPE_ID = encodeId("issue_type_id") + // LINT.ThenChange(/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt:issue_type_id) + + /** + * Encodes a string into an long ID. The ID is a SHA-256 of the string, truncated to 64 + * bits. + */ + fun encodeId(id: String?): Long { + if (id == null) return 0 + + val digest = MessageDigest.getInstance("MD5") + digest.update(id.toByteArray()) + + // Truncate to the size of a long + return BigInteger(digest.digest()).toLong() + } } } diff --git a/tests/hostside/safetycenter/src/android/safetycenter/hostside/rules/RequireSafetyCenterRule.kt b/tests/hostside/safetycenter/src/android/safetycenter/hostside/rules/RequireSafetyCenterRule.kt index edf76e888..fe75a05a2 100644 --- a/tests/hostside/safetycenter/src/android/safetycenter/hostside/rules/RequireSafetyCenterRule.kt +++ b/tests/hostside/safetycenter/src/android/safetycenter/hostside/rules/RequireSafetyCenterRule.kt @@ -24,14 +24,23 @@ import org.junit.rules.TestRule import org.junit.runner.Description import org.junit.runners.model.Statement +/** toBooleanString() doesn't seem available on all Kotlin versions we need to support. */ +private fun String.toBooleanStrictInt(): Boolean = + when (this) { + "true" -> true + "false" -> false + else -> + throw IllegalArgumentException("The string doesn't represent a boolean value: $this") + } + /** JUnit rule for host side tests that requires Safety Center to be supported and enabled. */ class RequireSafetyCenterRule(private val hostTestClass: BaseHostJUnit4Test) : TestRule { private val safetyCenterSupported: Boolean by lazy { - shellCommandStdoutOrThrow("cmd safety_center supported").toBooleanStrict() + shellCommandStdoutOrThrow("cmd safety_center supported").toBooleanStrictInt() } private val safetyCenterEnabled: Boolean by lazy { - shellCommandStdoutOrThrow("cmd safety_center enabled").toBooleanStrict() + shellCommandStdoutOrThrow("cmd safety_center enabled").toBooleanStrictInt() } override fun apply(base: Statement, description: Description): Statement { diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt index 60c3b4d6a..fd3749094 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt @@ -159,6 +159,14 @@ class SafetyCenterTestConfigs(private val context: Context) { /** A [SafetyCenterConfig] with a dynamic source in a different, missing package. */ val singleSourceOtherPackageConfig = singleSourceConfig(dynamicOtherPackageSafetySource) + /** A [SafetyCenterConfig] with a dynamic hidden-by-default source. */ + val hiddenSourceConfig = + singleSourceConfig( + dynamicSafetySourceBuilder(DYNAMIC_HIDDEN_ID) + .setInitialDisplayState(SafetySource.INITIAL_DISPLAY_STATE_HIDDEN) + .build() + ) + /** A simple [SafetyCenterConfig] with a source supporting all profiles. */ val singleSourceAllProfileConfig = singleSourceConfig( @@ -848,7 +856,9 @@ class SafetyCenterTestConfigs(private val context: Context) { * ID of the only source provided in [singleSourceConfig], [severityZeroConfig] and * [noPageOpenConfig]. */ + // LINT.IfChange(single_source_id) const val SINGLE_SOURCE_ID = "test_single_source_id" + // LINT.ThenChange(/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt:single_source_id) /** ID of the only source provided in [singleSourceAllProfileConfig]. */ const val SINGLE_SOURCE_ALL_PROFILE_ID = "test_single_source_all_profile_id" diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt index 2c4f856bb..66be55fa8 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt @@ -802,7 +802,9 @@ class SafetySourceTestData(private val context: Context) { const val CRITICAL_ISSUE_ACTION_ID = "critical_issue_action_id" /** Issue type ID for all the issues in this file */ + // LINT.IfChange(issue_type_id) const val ISSUE_TYPE_ID = "issue_type_id" + // LINT.ThenChange(/tests/hostside/safetycenter/src/android/safetycenter/hostside/SafetyCenterInteractionLoggingHostTest.kt:issue_type_id) const val CONFIRMATION_TITLE = "Confirmation title" const val CONFIRMATION_TEXT = "Confirmation text" |