diff options
301 files changed, 6338 insertions, 1385 deletions
@@ -14,7 +14,8 @@ LOCAL_STATIC_JAVA_LIBRARIES += \ android-support-v7-appcompat \ android-support-v14-preference \ android-support-v17-preference-leanback \ - android-support-v17-leanback + android-support-v17-leanback \ + xz-java LOCAL_RESOURCE_DIR := \ frameworks/support/v17/leanback/res \ diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9120e7ec..3f1bb1d8 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -16,8 +16,11 @@ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> <uses-permission android:name="android.permission.READ_INSTALL_SESSIONS" /> <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" /> + <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.KILL_UID" /> + <uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" /> + <application android:label="@string/app_name" android:allowBackup="false" android:theme="@style/Theme.DialogWhenLarge" @@ -97,8 +100,31 @@ android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS"> <intent-filter> <action android:name="android.intent.action.GET_PERMISSIONS_COUNT" /> + <action android:name="android.intent.action.GET_PERMISSIONS_PACKAGES" /> </intent-filter> </receiver> + + <!-- Wearable Components --> + <service android:name=".wear.WearPackageInstallerService" + android:permission="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" + android:exported="true"> + <intent-filter> + <action android:name="com.android.packageinstaller.wear.INSTALL_PACKAGE"/> + <data android:scheme="content" android:mimeType="vnd.android.cursor.item/*"/> + </intent-filter> + <intent-filter> + <action android:name="com.android.packageinstaller.wear.UNINSTALL_PACKAGE"/> + </intent-filter> + </service> + + <provider android:name=".wear.WearPackageIconProvider" + android:authorities="com.google.android.packageinstaller.wear.provider" + android:grantUriPermissions="true" + android:exported="true" /> + + <activity android:name=".permission.ui.wear.WarningConfirmationActivity" + android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS" + android:theme="@style/Settings"/> </application> </manifest> diff --git a/res/drawable-watch-280dpi/ic_cc_cancel.png b/res/drawable-watch-280dpi/ic_cc_cancel.png Binary files differnew file mode 100644 index 00000000..249b8697 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_cc_cancel.png diff --git a/res/drawable-watch-280dpi/ic_cc_checkmark.png b/res/drawable-watch-280dpi/ic_cc_checkmark.png Binary files differnew file mode 100644 index 00000000..94db9ab0 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_cc_checkmark.png diff --git a/res/drawable-watch-280dpi/ic_cc_deny.png b/res/drawable-watch-280dpi/ic_cc_deny.png Binary files differnew file mode 100644 index 00000000..1733669f --- /dev/null +++ b/res/drawable-watch-280dpi/ic_cc_deny.png diff --git a/res/drawable-watch-280dpi/ic_permission_calendar.png b/res/drawable-watch-280dpi/ic_permission_calendar.png Binary files differnew file mode 100644 index 00000000..602bddf0 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_calendar.png diff --git a/res/drawable-watch-280dpi/ic_permission_calendardisable.png b/res/drawable-watch-280dpi/ic_permission_calendardisable.png Binary files differnew file mode 100644 index 00000000..b855932e --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_calendardisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_call.png b/res/drawable-watch-280dpi/ic_permission_call.png Binary files differnew file mode 100644 index 00000000..bcf4f868 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_call.png diff --git a/res/drawable-watch-280dpi/ic_permission_calldisable.png b/res/drawable-watch-280dpi/ic_permission_calldisable.png Binary files differnew file mode 100644 index 00000000..4781e1fe --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_calldisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_camera.png b/res/drawable-watch-280dpi/ic_permission_camera.png Binary files differnew file mode 100644 index 00000000..3d27269f --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_camera.png diff --git a/res/drawable-watch-280dpi/ic_permission_cameradisable.png b/res/drawable-watch-280dpi/ic_permission_cameradisable.png Binary files differnew file mode 100644 index 00000000..51fa2c38 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_cameradisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_contact.png b/res/drawable-watch-280dpi/ic_permission_contact.png Binary files differnew file mode 100644 index 00000000..3e26bfbb --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_contact.png diff --git a/res/drawable-watch-280dpi/ic_permission_contactdisable.png b/res/drawable-watch-280dpi/ic_permission_contactdisable.png Binary files differnew file mode 100644 index 00000000..059b147c --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_contactdisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_location.png b/res/drawable-watch-280dpi/ic_permission_location.png Binary files differnew file mode 100644 index 00000000..f002a9cf --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_location.png diff --git a/res/drawable-watch-280dpi/ic_permission_locationdisable.png b/res/drawable-watch-280dpi/ic_permission_locationdisable.png Binary files differnew file mode 100644 index 00000000..98bbb869 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_locationdisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_mic.png b/res/drawable-watch-280dpi/ic_permission_mic.png Binary files differnew file mode 100644 index 00000000..1ed9c941 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_mic.png diff --git a/res/drawable-watch-280dpi/ic_permission_micdisable.png b/res/drawable-watch-280dpi/ic_permission_micdisable.png Binary files differnew file mode 100644 index 00000000..d74f59b9 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_micdisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_more.png b/res/drawable-watch-280dpi/ic_permission_more.png Binary files differnew file mode 100644 index 00000000..f33e02bf --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_more.png diff --git a/res/drawable-watch-280dpi/ic_permission_sensor.png b/res/drawable-watch-280dpi/ic_permission_sensor.png Binary files differnew file mode 100644 index 00000000..712c5d40 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_sensor.png diff --git a/res/drawable-watch-280dpi/ic_permission_sensordisable.png b/res/drawable-watch-280dpi/ic_permission_sensordisable.png Binary files differnew file mode 100644 index 00000000..8faa436f --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_sensordisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_shield.png b/res/drawable-watch-280dpi/ic_permission_shield.png Binary files differnew file mode 100644 index 00000000..78d6742b --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_shield.png diff --git a/res/drawable-watch-280dpi/ic_permission_shielddisable.png b/res/drawable-watch-280dpi/ic_permission_shielddisable.png Binary files differnew file mode 100644 index 00000000..f0ef4134 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_shielddisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_sms.png b/res/drawable-watch-280dpi/ic_permission_sms.png Binary files differnew file mode 100644 index 00000000..39bb4b3e --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_sms.png diff --git a/res/drawable-watch-280dpi/ic_permission_smsdisable.png b/res/drawable-watch-280dpi/ic_permission_smsdisable.png Binary files differnew file mode 100644 index 00000000..e9375b1f --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_smsdisable.png diff --git a/res/drawable-watch-280dpi/ic_permission_storage.png b/res/drawable-watch-280dpi/ic_permission_storage.png Binary files differnew file mode 100644 index 00000000..60ec50c7 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_storage.png diff --git a/res/drawable-watch-280dpi/ic_permission_storagedisable.png b/res/drawable-watch-280dpi/ic_permission_storagedisable.png Binary files differnew file mode 100644 index 00000000..987b8249 --- /dev/null +++ b/res/drawable-watch-280dpi/ic_permission_storagedisable.png diff --git a/res/drawable-watch-hdpi/ic_cc_cancel.png b/res/drawable-watch-hdpi/ic_cc_cancel.png Binary files differnew file mode 100644 index 00000000..a57893e1 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_cc_cancel.png diff --git a/res/drawable-watch-hdpi/ic_cc_checkmark.png b/res/drawable-watch-hdpi/ic_cc_checkmark.png Binary files differnew file mode 100644 index 00000000..a18fe7ab --- /dev/null +++ b/res/drawable-watch-hdpi/ic_cc_checkmark.png diff --git a/res/drawable-watch-hdpi/ic_cc_deny.png b/res/drawable-watch-hdpi/ic_cc_deny.png Binary files differnew file mode 100644 index 00000000..bab22a3d --- /dev/null +++ b/res/drawable-watch-hdpi/ic_cc_deny.png diff --git a/res/drawable-watch-hdpi/ic_permission_calendar.png b/res/drawable-watch-hdpi/ic_permission_calendar.png Binary files differnew file mode 100644 index 00000000..b7424699 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_calendar.png diff --git a/res/drawable-watch-hdpi/ic_permission_calendardisable.png b/res/drawable-watch-hdpi/ic_permission_calendardisable.png Binary files differnew file mode 100644 index 00000000..def76b03 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_calendardisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_call.png b/res/drawable-watch-hdpi/ic_permission_call.png Binary files differnew file mode 100644 index 00000000..e14a6bd2 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_call.png diff --git a/res/drawable-watch-hdpi/ic_permission_calldisable.png b/res/drawable-watch-hdpi/ic_permission_calldisable.png Binary files differnew file mode 100644 index 00000000..e0f535ff --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_calldisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_camera.png b/res/drawable-watch-hdpi/ic_permission_camera.png Binary files differnew file mode 100644 index 00000000..7c1df6ba --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_camera.png diff --git a/res/drawable-watch-hdpi/ic_permission_cameradisable.png b/res/drawable-watch-hdpi/ic_permission_cameradisable.png Binary files differnew file mode 100644 index 00000000..9637808a --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_cameradisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_contact.png b/res/drawable-watch-hdpi/ic_permission_contact.png Binary files differnew file mode 100644 index 00000000..532e3a2c --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_contact.png diff --git a/res/drawable-watch-hdpi/ic_permission_contactdisable.png b/res/drawable-watch-hdpi/ic_permission_contactdisable.png Binary files differnew file mode 100644 index 00000000..32b45c53 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_contactdisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_location.png b/res/drawable-watch-hdpi/ic_permission_location.png Binary files differnew file mode 100644 index 00000000..3d6c0b9d --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_location.png diff --git a/res/drawable-watch-hdpi/ic_permission_locationdisable.png b/res/drawable-watch-hdpi/ic_permission_locationdisable.png Binary files differnew file mode 100644 index 00000000..c2475e21 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_locationdisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_mic.png b/res/drawable-watch-hdpi/ic_permission_mic.png Binary files differnew file mode 100644 index 00000000..8acb4c5f --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_mic.png diff --git a/res/drawable-watch-hdpi/ic_permission_micdisable.png b/res/drawable-watch-hdpi/ic_permission_micdisable.png Binary files differnew file mode 100644 index 00000000..a37a4e20 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_micdisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_more.png b/res/drawable-watch-hdpi/ic_permission_more.png Binary files differnew file mode 100644 index 00000000..08808bc4 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_more.png diff --git a/res/drawable-watch-hdpi/ic_permission_sensor.png b/res/drawable-watch-hdpi/ic_permission_sensor.png Binary files differnew file mode 100644 index 00000000..fd2939ab --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_sensor.png diff --git a/res/drawable-watch-hdpi/ic_permission_sensordisable.png b/res/drawable-watch-hdpi/ic_permission_sensordisable.png Binary files differnew file mode 100644 index 00000000..487a4861 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_sensordisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_shield.png b/res/drawable-watch-hdpi/ic_permission_shield.png Binary files differnew file mode 100644 index 00000000..cab08e47 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_shield.png diff --git a/res/drawable-watch-hdpi/ic_permission_shielddisable.png b/res/drawable-watch-hdpi/ic_permission_shielddisable.png Binary files differnew file mode 100644 index 00000000..548ac56c --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_shielddisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_sms.png b/res/drawable-watch-hdpi/ic_permission_sms.png Binary files differnew file mode 100644 index 00000000..dc3db2f9 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_sms.png diff --git a/res/drawable-watch-hdpi/ic_permission_smsdisable.png b/res/drawable-watch-hdpi/ic_permission_smsdisable.png Binary files differnew file mode 100644 index 00000000..608c4d04 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_smsdisable.png diff --git a/res/drawable-watch-hdpi/ic_permission_storage.png b/res/drawable-watch-hdpi/ic_permission_storage.png Binary files differnew file mode 100644 index 00000000..031d989f --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_storage.png diff --git a/res/drawable-watch-hdpi/ic_permission_storagedisable.png b/res/drawable-watch-hdpi/ic_permission_storagedisable.png Binary files differnew file mode 100644 index 00000000..08dc6625 --- /dev/null +++ b/res/drawable-watch-hdpi/ic_permission_storagedisable.png diff --git a/res/drawable-watch-mdpi/ic_cc_cancel.png b/res/drawable-watch-mdpi/ic_cc_cancel.png Binary files differnew file mode 100644 index 00000000..87fc65ab --- /dev/null +++ b/res/drawable-watch-mdpi/ic_cc_cancel.png diff --git a/res/drawable-watch-mdpi/ic_cc_checkmark.png b/res/drawable-watch-mdpi/ic_cc_checkmark.png Binary files differnew file mode 100644 index 00000000..02c22b19 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_cc_checkmark.png diff --git a/res/drawable-watch-mdpi/ic_cc_deny.png b/res/drawable-watch-mdpi/ic_cc_deny.png Binary files differnew file mode 100644 index 00000000..f3b29f7f --- /dev/null +++ b/res/drawable-watch-mdpi/ic_cc_deny.png diff --git a/res/drawable-watch-mdpi/ic_permission_calendar.png b/res/drawable-watch-mdpi/ic_permission_calendar.png Binary files differnew file mode 100644 index 00000000..6ae24429 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_calendar.png diff --git a/res/drawable-watch-mdpi/ic_permission_calendardisable.png b/res/drawable-watch-mdpi/ic_permission_calendardisable.png Binary files differnew file mode 100644 index 00000000..639109fa --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_calendardisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_call.png b/res/drawable-watch-mdpi/ic_permission_call.png Binary files differnew file mode 100644 index 00000000..d67a03a5 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_call.png diff --git a/res/drawable-watch-mdpi/ic_permission_calldisable.png b/res/drawable-watch-mdpi/ic_permission_calldisable.png Binary files differnew file mode 100644 index 00000000..39760b74 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_calldisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_camera.png b/res/drawable-watch-mdpi/ic_permission_camera.png Binary files differnew file mode 100644 index 00000000..807a66f6 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_camera.png diff --git a/res/drawable-watch-mdpi/ic_permission_cameradisable.png b/res/drawable-watch-mdpi/ic_permission_cameradisable.png Binary files differnew file mode 100644 index 00000000..edf4f7a7 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_cameradisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_contact.png b/res/drawable-watch-mdpi/ic_permission_contact.png Binary files differnew file mode 100644 index 00000000..2e146e20 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_contact.png diff --git a/res/drawable-watch-mdpi/ic_permission_contactdisable.png b/res/drawable-watch-mdpi/ic_permission_contactdisable.png Binary files differnew file mode 100644 index 00000000..e3903516 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_contactdisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_location.png b/res/drawable-watch-mdpi/ic_permission_location.png Binary files differnew file mode 100644 index 00000000..3862b24c --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_location.png diff --git a/res/drawable-watch-mdpi/ic_permission_locationdisable.png b/res/drawable-watch-mdpi/ic_permission_locationdisable.png Binary files differnew file mode 100644 index 00000000..1f875bd8 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_locationdisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_mic.png b/res/drawable-watch-mdpi/ic_permission_mic.png Binary files differnew file mode 100644 index 00000000..33327f0d --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_mic.png diff --git a/res/drawable-watch-mdpi/ic_permission_micdisable.png b/res/drawable-watch-mdpi/ic_permission_micdisable.png Binary files differnew file mode 100644 index 00000000..7a1b39c4 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_micdisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_more.png b/res/drawable-watch-mdpi/ic_permission_more.png Binary files differnew file mode 100644 index 00000000..a563f1a9 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_more.png diff --git a/res/drawable-watch-mdpi/ic_permission_sensor.png b/res/drawable-watch-mdpi/ic_permission_sensor.png Binary files differnew file mode 100644 index 00000000..59e1c01f --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_sensor.png diff --git a/res/drawable-watch-mdpi/ic_permission_sensordisable.png b/res/drawable-watch-mdpi/ic_permission_sensordisable.png Binary files differnew file mode 100644 index 00000000..d8d55c6d --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_sensordisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_shield.png b/res/drawable-watch-mdpi/ic_permission_shield.png Binary files differnew file mode 100644 index 00000000..7773fa48 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_shield.png diff --git a/res/drawable-watch-mdpi/ic_permission_shielddisable.png b/res/drawable-watch-mdpi/ic_permission_shielddisable.png Binary files differnew file mode 100644 index 00000000..42f452bf --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_shielddisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_sms.png b/res/drawable-watch-mdpi/ic_permission_sms.png Binary files differnew file mode 100644 index 00000000..11333ddb --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_sms.png diff --git a/res/drawable-watch-mdpi/ic_permission_smsdisable.png b/res/drawable-watch-mdpi/ic_permission_smsdisable.png Binary files differnew file mode 100644 index 00000000..b4416f4b --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_smsdisable.png diff --git a/res/drawable-watch-mdpi/ic_permission_storage.png b/res/drawable-watch-mdpi/ic_permission_storage.png Binary files differnew file mode 100644 index 00000000..07bd8f92 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_storage.png diff --git a/res/drawable-watch-mdpi/ic_permission_storagedisable.png b/res/drawable-watch-mdpi/ic_permission_storagedisable.png Binary files differnew file mode 100644 index 00000000..ed8af410 --- /dev/null +++ b/res/drawable-watch-mdpi/ic_permission_storagedisable.png diff --git a/res/drawable-watch-xhdpi/ic_cc_cancel.png b/res/drawable-watch-xhdpi/ic_cc_cancel.png Binary files differnew file mode 100644 index 00000000..fec6ecb8 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_cc_cancel.png diff --git a/res/drawable-watch-xhdpi/ic_cc_checkmark.png b/res/drawable-watch-xhdpi/ic_cc_checkmark.png Binary files differnew file mode 100644 index 00000000..1302723b --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_cc_checkmark.png diff --git a/res/drawable-watch-xhdpi/ic_cc_deny.png b/res/drawable-watch-xhdpi/ic_cc_deny.png Binary files differnew file mode 100644 index 00000000..a5f8dc1b --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_cc_deny.png diff --git a/res/drawable-watch-xhdpi/ic_permission_calendar.png b/res/drawable-watch-xhdpi/ic_permission_calendar.png Binary files differnew file mode 100644 index 00000000..806438c6 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_calendar.png diff --git a/res/drawable-watch-xhdpi/ic_permission_calendardisable.png b/res/drawable-watch-xhdpi/ic_permission_calendardisable.png Binary files differnew file mode 100644 index 00000000..821462e4 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_calendardisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_call.png b/res/drawable-watch-xhdpi/ic_permission_call.png Binary files differnew file mode 100644 index 00000000..079942b5 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_call.png diff --git a/res/drawable-watch-xhdpi/ic_permission_calldisable.png b/res/drawable-watch-xhdpi/ic_permission_calldisable.png Binary files differnew file mode 100644 index 00000000..13cd805e --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_calldisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_camera.png b/res/drawable-watch-xhdpi/ic_permission_camera.png Binary files differnew file mode 100644 index 00000000..03b0d8d0 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_camera.png diff --git a/res/drawable-watch-xhdpi/ic_permission_cameradisable.png b/res/drawable-watch-xhdpi/ic_permission_cameradisable.png Binary files differnew file mode 100644 index 00000000..bcb2a350 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_cameradisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_contact.png b/res/drawable-watch-xhdpi/ic_permission_contact.png Binary files differnew file mode 100644 index 00000000..996fe39d --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_contact.png diff --git a/res/drawable-watch-xhdpi/ic_permission_contactdisable.png b/res/drawable-watch-xhdpi/ic_permission_contactdisable.png Binary files differnew file mode 100644 index 00000000..1063f17b --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_contactdisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_location.png b/res/drawable-watch-xhdpi/ic_permission_location.png Binary files differnew file mode 100644 index 00000000..d9dc1fc9 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_location.png diff --git a/res/drawable-watch-xhdpi/ic_permission_locationdisable.png b/res/drawable-watch-xhdpi/ic_permission_locationdisable.png Binary files differnew file mode 100644 index 00000000..c3e7ae9f --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_locationdisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_mic.png b/res/drawable-watch-xhdpi/ic_permission_mic.png Binary files differnew file mode 100644 index 00000000..3a951ea8 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_mic.png diff --git a/res/drawable-watch-xhdpi/ic_permission_micdisable.png b/res/drawable-watch-xhdpi/ic_permission_micdisable.png Binary files differnew file mode 100644 index 00000000..a9c7c81e --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_micdisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_more.png b/res/drawable-watch-xhdpi/ic_permission_more.png Binary files differnew file mode 100644 index 00000000..a3f7ee5b --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_more.png diff --git a/res/drawable-watch-xhdpi/ic_permission_sensor.png b/res/drawable-watch-xhdpi/ic_permission_sensor.png Binary files differnew file mode 100644 index 00000000..73564014 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_sensor.png diff --git a/res/drawable-watch-xhdpi/ic_permission_sensordisable.png b/res/drawable-watch-xhdpi/ic_permission_sensordisable.png Binary files differnew file mode 100644 index 00000000..ef135a7e --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_sensordisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_shield.png b/res/drawable-watch-xhdpi/ic_permission_shield.png Binary files differnew file mode 100644 index 00000000..2fc8fd07 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_shield.png diff --git a/res/drawable-watch-xhdpi/ic_permission_shielddisable.png b/res/drawable-watch-xhdpi/ic_permission_shielddisable.png Binary files differnew file mode 100644 index 00000000..08a862e8 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_shielddisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_sms.png b/res/drawable-watch-xhdpi/ic_permission_sms.png Binary files differnew file mode 100644 index 00000000..c74ce084 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_sms.png diff --git a/res/drawable-watch-xhdpi/ic_permission_smsdisable.png b/res/drawable-watch-xhdpi/ic_permission_smsdisable.png Binary files differnew file mode 100644 index 00000000..b7256772 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_smsdisable.png diff --git a/res/drawable-watch-xhdpi/ic_permission_storage.png b/res/drawable-watch-xhdpi/ic_permission_storage.png Binary files differnew file mode 100644 index 00000000..1f16bdb6 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_storage.png diff --git a/res/drawable-watch-xhdpi/ic_permission_storagedisable.png b/res/drawable-watch-xhdpi/ic_permission_storagedisable.png Binary files differnew file mode 100644 index 00000000..41d42d57 --- /dev/null +++ b/res/drawable-watch-xhdpi/ic_permission_storagedisable.png diff --git a/res/drawable-watch/action_negative_bg.xml b/res/drawable-watch/action_negative_bg.xml new file mode 100644 index 00000000..7b21ba6d --- /dev/null +++ b/res/drawable-watch/action_negative_bg.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2015 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. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_enabled="false"> + <shape android:shape="oval"> + <solid android:color="@color/circular_button_disabled"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> + <item android:state_pressed="true"> + <shape android:shape="oval"> + <solid android:color="#757575"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#BDBDBD"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> +</selector> diff --git a/res/drawable-watch/action_positive_bg.xml b/res/drawable-watch/action_positive_bg.xml new file mode 100644 index 00000000..f3457c1a --- /dev/null +++ b/res/drawable-watch/action_positive_bg.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2015 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. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_enabled="false"> + <shape android:shape="oval"> + <solid android:color="@color/circular_button_disabled"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> + <item android:state_pressed="true"> + <shape android:shape="oval"> + <solid android:color="#009688"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#00BFA5"/> + <size android:width="40dp" android:height="40dp" /> + </shape> + </item> +</selector> diff --git a/res/drawable-watch/cancel_button.xml b/res/drawable-watch/cancel_button.xml new file mode 100644 index 00000000..641526a5 --- /dev/null +++ b/res/drawable-watch/cancel_button.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2015 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. +--> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + <item android:drawable="@drawable/action_negative_bg" /> + <item> + <bitmap android:src="@drawable/ic_cc_cancel" android:gravity="center" /> + </item> +</layer-list> diff --git a/res/drawable-watch/confirm_button.xml b/res/drawable-watch/confirm_button.xml new file mode 100644 index 00000000..2b53e42e --- /dev/null +++ b/res/drawable-watch/confirm_button.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2015 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. +--> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + <item android:drawable="@drawable/action_positive_bg" /> + <item> + <bitmap android:src="@drawable/ic_cc_checkmark" android:gravity="center" /> + </item> +</layer-list> diff --git a/res/drawable-watch/deny_button.xml b/res/drawable-watch/deny_button.xml new file mode 100644 index 00000000..1e7582bc --- /dev/null +++ b/res/drawable-watch/deny_button.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2015 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. +--> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + <item android:drawable="@drawable/action_negative_bg" /> + <item> + <bitmap android:src="@drawable/ic_cc_deny" android:gravity="center" /> + </item> +</layer-list> diff --git a/res/layout-watch/confirmation_dialog.xml b/res/layout-watch/confirmation_dialog.xml new file mode 100644 index 00000000..0b93579e --- /dev/null +++ b/res/layout-watch/confirmation_dialog.xml @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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. +--> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/confirmation" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ScrollView + android:id="@+id/scrolling_container" + android:overScrollMode="never" + android:scrollbars="none" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:id="@+id/content" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/current_page_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginTop="@dimen/grant_permissions_app_breadcrumb_margin_top" + android:textAppearance="@style/GrantPermissions.BreadcrumbText" /> + + <ImageView + android:id="@+id/icon" + android:layout_width="@dimen/grant_permissions_app_icon_size" + android:layout_height="@dimen/grant_permissions_app_icon_size" + android:tint="@color/grant_permissions_app_color" + android:layout_gravity="center" + android:layout_marginTop="@dimen/grant_permissions_app_icon_margin_top"/> + + <TextView + android:id="@+id/message" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/grant_permissions_title_margin_top" + android:paddingLeft="@dimen/grant_permissions_message_side_padding" + android:paddingRight="@dimen/grant_permissions_message_side_padding" + android:gravity="center" + android:textAppearance="@style/GrantPermissions.TitleText"/> + </LinearLayout> + </ScrollView> + + <!-- TODO: Change this to use a ViewStub instead of show/hiding the two layouts --> + <FrameLayout android:id="@+id/button_bar_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:background="#FF606060"> + <FrameLayout + android:id="@+id/horizontal_button_bar" + android:layout_width="match_parent" + android:layout_height="@dimen/conf_diag_button_container_height"> + <Button + android:id="@+id/permission_deny_button" + android:layout_width="54dp" + android:layout_height="54dp" + android:layout_gravity="top|left" + android:layout_marginLeft="@dimen/conf_diag_2button_margin_side" + android:layout_marginTop="@dimen/conf_diag_2button_margin_top" + android:background="@drawable/cancel_button"/> + + <Button + android:id="@+id/permission_allow_button" + android:layout_width="54dp" + android:layout_height="54dp" + android:layout_gravity="top|right" + android:layout_marginRight="@dimen/conf_diag_2button_margin_side" + android:layout_marginTop="@dimen/conf_diag_2button_margin_top" + android:background="@drawable/confirm_button"/> + </FrameLayout> + + <FrameLayout + android:id="@+id/vertical_button_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingLeft="@dimen/conf_diag_3button_padding_side" + android:paddingRight="@dimen/conf_diag_3button_padding_side" + android:visibility="gone"> + <LinearLayout + android:id="@+id/buttonPanel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + <Button + android:id="@+id/vertical_button1" + style="@style/Widget.WearDiag.Button"/> + + <Button + android:id="@+id/vertical_button2" + style="@style/Widget.WearDiag.Button"/> + + <Button + android:id="@+id/vertical_button3" + style="@style/Widget.WearDiag.Button"/> + + <!-- Adding padding to the bottom button causes rendering issues, so add + an empty view here instead --> + <Space android:layout_width="match_parent" + android:layout_height="@dimen/conf_diag_3button_padding_bottom"/> + </LinearLayout> + </FrameLayout> + </FrameLayout> +</FrameLayout> diff --git a/res/layout-watch/permissions_settings_item.xml b/res/layout-watch/permissions_settings_item.xml new file mode 100644 index 00000000..b370f1ac --- /dev/null +++ b/res/layout-watch/permissions_settings_item.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" > + <android.support.wearable.view.CircledImageView + android:id="@+id/image" + android:alpha="0.5" + android:layout_height="52dp" + android:layout_width="52dp" + android:layout_gravity="center_vertical" + app:circle_border_color="#FFFFFFFF" + app:circle_border_width="1dp" + app:circle_color="#00000000" + app:image_tint="#FFFFFFFF"/> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/settings_text_margin_left" + android:layout_gravity="center_vertical" + android:orientation="vertical" > + + <TextView + android:id="@+id/text" + android:alpha="0.5" + android:fontFamily="sans-serif-condensed-light" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/permissions_settings_item_color" + android:textSize="14sp" + android:maxLines="2" + android:ellipsize="end"/> + <TextView + android:id="@+id/state" + android:alpha="0.5" + android:fontFamily="sans-serif-condensed-light" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/permissions_settings_item_color" + android:textSize="14sp" + android:maxLines="1" + android:ellipsize="end"/> + </LinearLayout> + +</LinearLayout> diff --git a/res/layout-watch/settings.xml b/res/layout-watch/settings.xml new file mode 100644 index 00000000..46249d50 --- /dev/null +++ b/res/layout-watch/settings.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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. +--> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/container" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <include layout="@layout/settings_internal" /> +</FrameLayout> diff --git a/res/layout-watch/settings_internal.xml b/res/layout-watch/settings_internal.xml new file mode 100644 index 00000000..fdd21cef --- /dev/null +++ b/res/layout-watch/settings_internal.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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. +--> +<merge xmlns:android="http://schemas.android.com/apk/res/android"> + <TextView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="@dimen/settings_header_base_height" + android:layout_marginLeft="16dp" + android:layout_marginTop="@dimen/settings_header_top_margin" + android:textSize="@dimen/setting_short_header_text_size" + android:maxLines="2" + android:ellipsize="end" + android:textColor="#9E9E9E" + android:fontFamily="sans-serif-condensed-light" + /> + + <android.support.wearable.view.WearableListView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/wheel" + android:layout_width="match_parent" + android:layout_height="match_parent" + /> +</merge> diff --git a/res/values-af-television/strings.xml b/res/values-af-television/strings.xml index 9b4b6238..5a468f25 100644 --- a/res/values-af-television/strings.xml +++ b/res/values-af-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Weier en moenie weer vra nie"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Jy kan dit later verander in Instellings > Programme"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Wys stelselprogramme"</string> </resources> diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index d814aa9c..c4c930dd 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Moet nooit weer vra nie"</string> <string name="no_permissions" msgid="3210542466245591574">"Geen toestemmings nie"</string> <string name="additional_permissions" msgid="6667573114240111763">"Bykomende toestemmings"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Nog <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Nog <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"nog <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Hierdie program is vir \'n ouer weergawe van Android ontwerp. As toestemming geweier word, kan dit veroorsaak dat dit nie meer soos beplan funksioneer nie."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Wys vorige"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Versteek vorige"</string> <string name="default_permission_description" msgid="4992892207044156668">"voer \'n onbekende handeling uit"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> uit <xliff:g id="COUNT_1">%2$d</xliff:g> programme toegelaat"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> uit <xliff:g id="COUNT_1">%d</xliff:g> programme toegelaat"</string> <string name="menu_show_system" msgid="6773743421743728921">"Wys stelsel"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Versteek stelsel"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>-toestemmings"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Ligginginstellings"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is \'n verskaffer van liggingdienste vir hierdie toestel. Liggingtoegang kan vanuit ligginginstellings verander word."</string> <string name="system_warning" msgid="7103819124542305179">"As jy hierdie toestemming weier, sal basiese kenmerke van jou toestel dalk nie meer soos bedoel werk nie."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Afgedwing deur beleid"</string> - <string name="loading" msgid="7811651799620593731">"Laai tans …"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alle toestemmings"</string> - <string name="other_permissions" msgid="2016192512386091933">"Ander programvermoëns"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Toestemmingsversoek"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Skermoorlegger bespeur"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Om hierdie toestemminginstelling te verander, moet jy eers die skermoorlegger by Instellings > Programme afskakel"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Maak instellings oop"</string> </resources> diff --git a/res/values-am-television/strings.xml b/res/values-am-television/strings.xml index 5beefbce..7e75cbd4 100644 --- a/res/values-am-television/strings.xml +++ b/res/values-am-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"አይቀበሉና እንደገና ይጠይቁ"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ይሄንን በኋላ ላይ በቅንብሮችና መተግበሪያዎች ውስጥ ሊቀይሩት ይችላሉ"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"የስርዓት መተግበሪያዎችን አሳይ"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index de1f8538..8497d520 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"ሁለተኛ እንዳትጠይቅ"</string> <string name="no_permissions" msgid="3210542466245591574">"ምንም ፍቃዶች የሉም"</string> <string name="additional_permissions" msgid="6667573114240111763">"ተጨማሪ ፈቃዶች"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ተጨማሪ</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ተጨማሪ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ተጨማሪ"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ይህ መተግበሪያ ለAndroid አሮጌ ስሪት የተነደፈ ነበር። ፈቃድ መከልከል እንደሚፈለገው ከእንግዲህ እንዳይሰራ ሊያደርገው ይችላል።"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"የቆዩ አሳይ"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"የቆዩ ደብቅ"</string> <string name="default_permission_description" msgid="4992892207044156668">"ያልታወቀ እርምጃ ያከናውናል"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> ከ<xliff:g id="COUNT_1">%2$d</xliff:g> መተግበሪያዎች ተፈቅዶላቸዋል"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> ከ<xliff:g id="COUNT_1">%d</xliff:g> መተግበሪያዎች ተፈቅዶላቸዋል"</string> <string name="menu_show_system" msgid="6773743421743728921">"ስርዓትን አሳይ"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ስርዓትን ደብቅ"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ፍቃዶች"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"የአካባቢ ቅንብሮች"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> የዚህ መሳሪያ አካባቢ አገልግሎቶች አቅራቢ ነው። የአካባቢ መዳረሻ ከአካባቢ ቅንብሮች ሊሻሻል ይችላል።"</string> <string name="system_warning" msgid="7103819124542305179">"ይህን ፍቃድ ከከለከሉ የመሳሪያዎ መሰረታዊ ባህሪያት ከዚህ በኋላ እንደተፈለገው ላይሰሩ ይችላሉ።"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"በመመሪያ ተፈጻሚ የሆነ"</string> - <string name="loading" msgid="7811651799620593731">"በመጫን ላይ…"</string> - <string name="all_permissions" msgid="5156669007784613042">"ሁሉም ፍቃዶች"</string> - <string name="other_permissions" msgid="2016192512386091933">"ሌሎች የመተግበሪያ ችሎታዎች"</string> - <string name="permission_request_title" msgid="1204446718549121199">"የፍቃድ ጥያቄ"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"የማያ ገጽ ተደራቢ ተገኝቷል"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ይህን የፍቃድ ቅንብር ለመቀየር መጀመሪያ የማያ ገጽ ተደራቢውን ከቅንብሮች > መተግበሪያዎች ማጥፋት አለብዎ"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ቅንብሮችን ክፈት"</string> </resources> diff --git a/res/values-ar-television/strings.xml b/res/values-ar-television/strings.xml index 98a9d8fa..4f694454 100644 --- a/res/values-ar-television/strings.xml +++ b/res/values-ar-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"رفض وعدم طرح السؤال مرة أخرى"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"يمكنك تغيير ذلك لاحقًا من خلال الإعدادات > التطبيقات"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"عرض تطبيقات النظام"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a4e761a7..de75f337 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -63,7 +63,7 @@ <string name="dlg_ok" msgid="6944357727705699232">"موافق"</string> <string name="app_not_found_dlg_title" msgid="2692335460569505484">"لم يتم العثور على التطبيق"</string> <string name="app_not_found_dlg_text" msgid="6107465056055095930">"لم يتم العثور على التطبيق في قائمة التطبيقات المثبتة."</string> - <string name="uninstall_application_title" msgid="1860074100811653963">"إلغاء تثبيت التطبيق"</string> + <string name="uninstall_application_title" msgid="1860074100811653963">"إزالة التطبيق"</string> <string name="uninstall_update_title" msgid="4146940097553335390">"إزالة التحديث"</string> <string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> هو جزء من التطبيق التالي:"</string> <string name="uninstall_application_text" msgid="6691975835951187030">"هل تريد إزالة هذا التطبيق؟"</string> @@ -72,7 +72,7 @@ <string name="uninstall_update_text" msgid="2056387942084605027">"هل تريد استبدال هذا التطبيق بإصدار المصنع؟"</string> <string name="uninstalling" msgid="5556217435895938250">"جارٍ الإزالة..."</string> <string name="uninstall_done" msgid="3792487853420281888">"انتهت الإزالة."</string> - <string name="uninstall_failed" msgid="631122574306299512">"أخفق إلغاء التثبيت."</string> + <string name="uninstall_failed" msgid="631122574306299512">"أخفقت الإزالة."</string> <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"تتعذر الإزالة نظرًا لأن هذه الحزمة تمثل مشرفًا نشطًا للجهاز."</string> <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"لا يمكن الإزالة لأن هذه الحزمة تعد مشرف جهاز نشطًا للمستخدم <xliff:g id="USERNAME">%1$s</xliff:g>."</string> <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"هذا التطبيق مطلوب لملفك الشخصي للعمل ولا يمكن إزالته."</string> @@ -96,17 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"عدم السؤال مرة أخرى"</string> <string name="no_permissions" msgid="3210542466245591574">"ليست هناك أذونات"</string> <string name="additional_permissions" msgid="6667573114240111763">"أذونات إضافية"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g>لا أذونات أخرى</item> - <item quantity="two">إذنان آخران (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item> - <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> أذونات أخرى</item> - <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> إذنًا آخر</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> من الأذونات الأخرى</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>إذن واحد آخر</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> أخرى"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"تم تصميم هذا التطبيق لإصدار قديم من Android. وقد يؤدي رفض الإذن إلى عدم العمل على النحو المطلوب مرة أخرى."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"عرض الأذونات القديمة"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"إخفاء الأذونات القديمة"</string> <string name="default_permission_description" msgid="4992892207044156668">"تنفيذ إجراء غير معروف"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"تم السماح لعدد <xliff:g id="COUNT_0">%1$d</xliff:g> من <xliff:g id="COUNT_1">%2$d</xliff:g> من التطبيقات"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"تم السماح لعدد <xliff:g id="COUNT_0">%d</xliff:g> من <xliff:g id="COUNT_1">%d</xliff:g> من التطبيقات"</string> <string name="menu_show_system" msgid="6773743421743728921">"إظهار النظام"</string> <string name="menu_hide_system" msgid="7595471742649432977">"إخفاء النظام"</string> <string name="permission_title" msgid="6495415273398916381">"أذونات <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -114,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"إعدادات الموقع"</string> <string name="location_warning" msgid="8778701356292735971">"يعد <xliff:g id="APP_NAME">%1$s</xliff:g> أحد مقدمي خدمات الموقع لهذا الجهاز. يمكن تعديل إمكانية الوصول إلى الموقع من إعدادات الموقع."</string> <string name="system_warning" msgid="7103819124542305179">"إذا رفضت هذا الإذن، ربما لا تعمل ميزات أساسية في جهازك على النحو المنشود."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"فرضته إحدى السياسات"</string> - <string name="loading" msgid="7811651799620593731">"جارٍ التحميل..."</string> - <string name="all_permissions" msgid="5156669007784613042">"كل الأذونات"</string> - <string name="other_permissions" msgid="2016192512386091933">"إمكانات التطبيق الأخرى"</string> - <string name="permission_request_title" msgid="1204446718549121199">"طلب الإذن"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"تم اكتشاف طبقة متراكبة للشاشة"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"لتغيير إعداد هذا الإذن، يتعين عليك أولاً تعطيل الطبقة المتراكبة للشاشة من الإعدادات > التطبيقات"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"فتح الإعدادات"</string> </resources> diff --git a/res/values-az-rAZ-television/strings.xml b/res/values-az-rAZ-television/strings.xml index 09bd6a9d..9f26e20b 100644 --- a/res/values-az-rAZ-television/strings.xml +++ b/res/values-az-rAZ-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Rədd edin və daha soruşmayın"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bunu sonra Ayarlar vəTətbiqlər bölməsindən dəyişə bilərsiniz"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Sistem tətbiqlərini göstərin"</string> </resources> diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml index 5fb8257b..f543b819 100644 --- a/res/values-az-rAZ/strings.xml +++ b/res/values-az-rAZ/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"İcazə verin"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rədd edin"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> icazədən <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ədəd"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə <xliff:g id="ACTION">%2$s</xliff:g> üçün icazə verilsin?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə <xliff:g id="ACTION">%2$s</xliff:g> üçün icazə verin?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Tətbiqlər"</string> <string name="app_permissions" msgid="3146758905824597178">"Tətbiq icazələri"</string> <string name="never_ask_again" msgid="3798895821072102967">"Bir daha soruşma"</string> <string name="no_permissions" msgid="3210542466245591574">"İcazə yoxdur"</string> <string name="additional_permissions" msgid="6667573114240111763">"Əlavə icazələr"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">daha <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">daha <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"daha <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Bu tətbiq köhnə Android versiyası üçün nəzərdə tutulub. İcazəni rədd etmək onun lazımi şəkildə işləməməsinə səbəb ola bilər."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Varisi göstərin"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Varisi gizlədin"</string> <string name="default_permission_description" msgid="4992892207044156668">"naməlum əməliyyat etmək"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> tətbiqdən <xliff:g id="COUNT_0">%1$d</xliff:g> ədədinə icazə var"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> tətbiqdən <xliff:g id="COUNT_0">%d</xliff:g> ədədinə icazə var"</string> <string name="menu_show_system" msgid="6773743421743728921">"Sistemi göstərin"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Sistemi gizlədin"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> icazələr"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Məkan Ayarları"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu cihaz üçün məkan xidmətləri təminatçısıdır. Məkana giriş məkan ayarlarından dəyişdirilə bilər."</string> <string name="system_warning" msgid="7103819124542305179">"Bu icazəni rədd etsəniz, cihazınızın əsas funksiyaları lazımi qaydada işləməyə bilər."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Siyasət tərəfindən tətbiq olunur"</string> - <string name="loading" msgid="7811651799620593731">"Yüklənir…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Bütün icazələr"</string> - <string name="other_permissions" msgid="2016192512386091933">"Digər tətbiq imkanları"</string> - <string name="permission_request_title" msgid="1204446718549121199">"İcazə sorğusu"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran örtüyü aşkarlandı"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Bu icazə ayarını dəyişdirmək üçün əvvəldə Ayarlar və Tətbiqlər bölməsindən ekran örtüyünü söndürməlisiniz"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ayarları açın"</string> </resources> diff --git a/res/values-bg-television/strings.xml b/res/values-bg-television/strings.xml index c69acb23..85eabb02 100644 --- a/res/values-bg-television/strings.xml +++ b/res/values-bg-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Отказване, без повторно запитване"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Можете да промените това по-късно от „Настройки“ > „Приложения“"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Показване на системните приложения"</string> </resources> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 4260da34..b6c20525 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Никога вече да не се извежда запитване"</string> <string name="no_permissions" msgid="3210542466245591574">"Няма разрешения"</string> <string name="additional_permissions" msgid="6667573114240111763">"Допълнителни разрешения"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Още <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Още <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Още <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Това приложение е създадено за по-стара версия на Android. То може да спре да функционира нормално при отказване на разрешението."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Показване на предишните"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Скриване на предишните"</string> <string name="default_permission_description" msgid="4992892207044156668">"извършване на неизвестно действие"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> от <xliff:g id="COUNT_1">%2$d</xliff:g> приложения имат разрешение"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> от <xliff:g id="COUNT_1">%d</xliff:g> приложения имат разрешение"</string> <string name="menu_show_system" msgid="6773743421743728921">"Показване на системните"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Скриване на системните"</string> <string name="permission_title" msgid="6495415273398916381">"Разрешения за <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Настройки за местоположението"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> е доставчик на услуги за местоположението за това устройство. Достъпът до местоположението може да бъде променен от съответните настройки."</string> <string name="system_warning" msgid="7103819124542305179">"Ако откажете това разрешение, основни функции на устройството ви може да спрат да работят както трябва."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Наложено чрез правило"</string> - <string name="loading" msgid="7811651799620593731">"Зарежда се…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Всички разрешения"</string> - <string name="other_permissions" msgid="2016192512386091933">"Други възможности на приложението"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Заявка за разрешение"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Открито е екранно наслагване"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"За да промените настройката за това разрешение, трябва първо да изключите екранното наслагване от „Настройки“ > „Приложения“"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Отваряне на настройките"</string> </resources> diff --git a/res/values-bn-rBD-television/strings.xml b/res/values-bn-rBD-television/strings.xml index 47b3e0ac..4bf5bb76 100644 --- a/res/values-bn-rBD-television/strings.xml +++ b/res/values-bn-rBD-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"অস্বীকার করুন এবং আবার জিজ্ঞাসা করবেন না"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"আপনি সেটিংস > অ্যাপ্লিকেশান এ এটি পরে পরিবর্তন করতে পারেন"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"সিস্টেম অ্যাপ্লিকেশানগুলি দেখান"</string> </resources> diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 59bef73a..c66e26cb 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"মঞ্জুরি দিন"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"প্রত্যাখ্যান করুন"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> এর <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"আপনি কি <xliff:g id="APP_NAME">%1$s</xliff:g> কে <xliff:g id="ACTION">%2$s</xliff:g> করার মঞ্জুরি দেবেন?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>কে <xliff:g id="ACTION">%2$s</xliff:g> করার মঞ্জুরি দেবেন?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"অ্যাপ্লিকেশানগুলি"</string> <string name="app_permissions" msgid="3146758905824597178">"অ্যাপ্লিকেশানের অনুমতি"</string> <string name="never_ask_again" msgid="3798895821072102967">"পরে কখনই জিজ্ঞাসাই করবেন না"</string> <string name="no_permissions" msgid="3210542466245591574">"কোনো অনুমতি নেই"</string> <string name="additional_permissions" msgid="6667573114240111763">"অতিরিক্ত অনুমতিগুলি"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">আরো <xliff:g id="COUNT_1">%1$d</xliff:g>টি</item> - <item quantity="other">আরো <xliff:g id="COUNT_1">%1$d</xliff:g>টি</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"আরো <xliff:g id="COUNT">%1$d</xliff:g>টি"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"একটি পুরোনো সংস্করণের Android এর জন্য এই অ্যাপ্লিকেশানটি ডিজাইন করা হয়েছিল৷ অনুমতি অস্বীকার করলে এটিকে যে কাজের উদ্দেশ্যে তৈরি করা হয়েছিল সেটি নাও করতে পারে৷"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"লেগাসি দেখান"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"লেগাসি লুকান"</string> <string name="default_permission_description" msgid="4992892207044156668">"কোনো অজানা কার্য সঞ্চালন করুন"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g>টির মধ্যে <xliff:g id="COUNT_0">%1$d</xliff:g>টি অ্যাপ্লিকেশান মঞ্জুরিপ্রাপ্ত"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g>টির মধ্যে <xliff:g id="COUNT_0">%d</xliff:g>টি অ্যাপ্লিকেশান মঞ্জুরিপ্রাপ্ত"</string> <string name="menu_show_system" msgid="6773743421743728921">"সিস্টেম দেখান"</string> <string name="menu_hide_system" msgid="7595471742649432977">"সিস্টেম লুকান"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> অনুমতিগুলি"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"অবস্থান সেটিংস"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> এই ডিভাইসের জন্য একটি অবস্থান পরিষেবাগুলি প্রদান করে। অবস্থান সেটিংস থেকে অবস্থানের অ্যাক্সেস পরিবর্তন করা যায়।"</string> <string name="system_warning" msgid="7103819124542305179">"আপনি যদি এই অনুমতিটি অস্বীকার করেন, তবে আপনার ডিভাইসের প্রাথমিক বৈশিষ্ট্যগুলিকে যে কাজের উদ্দেশ্যে তৈরি করা হয়েছিল সেগুলি নাও করতে পারে৷"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"নীতি দ্বারা প্রয়োগ করা হয়েছে"</string> - <string name="loading" msgid="7811651799620593731">"লোড হচ্ছে..."</string> - <string name="all_permissions" msgid="5156669007784613042">"সমস্ত অনুমতি"</string> - <string name="other_permissions" msgid="2016192512386091933">"অন্যান্য অ্যাপ্লিকেশান ক্ষমতা"</string> - <string name="permission_request_title" msgid="1204446718549121199">"অনুমতির অনুরোধ"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"স্ক্রীন আচ্ছাদন সনাক্ত করা হয়েছে"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"এই অনুমতি সেটিংস পরিবর্তন করতে, আপনাকে প্রথমে সেটিংস > এ গিয়ে অ্যাপ্লিকেশানগুলি থেকে স্ক্রীন ওভারলে বন্ধ করতে হবে"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"সেটিংস খুলুন"</string> </resources> diff --git a/res/values-ca-television/strings.xml b/res/values-ca-television/strings.xml index a49c608a..ee3f4dab 100644 --- a/res/values-ca-television/strings.xml +++ b/res/values-ca-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Denega i no m\'ho tornis a preguntar"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Pots canviar-ho més endavant a Configuració > Aplicacions"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostra les aplicacions del sistema"</string> </resources> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index c9ce7952..d0e521e3 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permet"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denega"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Permetre que <xliff:g id="APP_NAME">%1$s</xliff:g> pugui <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Vols permetre que <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacions"</string> - <string name="app_permissions" msgid="3146758905824597178">"Permisos d\'aplicacions"</string> + <string name="app_permissions" msgid="3146758905824597178">"Permisos de l\'aplicació"</string> <string name="never_ask_again" msgid="3798895821072102967">"No el tornis a demanar"</string> <string name="no_permissions" msgid="3210542466245591574">"Sense permisos"</string> <string name="additional_permissions" msgid="6667573114240111763">"Més permisos"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> més</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> més</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> més"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aquesta aplicació es va dissenyar per a una versió anterior d\'Android. És possible que no funcioni com està previst si li denegues el permís."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostra els antics"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Amaga els antics"</string> <string name="default_permission_description" msgid="4992892207044156668">"dur a terme una acció desconeguda"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicacions permeses"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Es permeten <xliff:g id="COUNT_0">%d</xliff:g> aplicacions d\'un total de <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostra el sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Amaga el sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Configuració d\'ubicació"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> és un proveïdor de serveis d\'ubicació per a aquest dispositiu. L\'accés a la ubicació es pot modificar des de la configuració d\'ubicació."</string> <string name="system_warning" msgid="7103819124542305179">"Si no acceptes aquest permís, hi ha funcions bàsiques del dispositiu que poden deixar de funcionar com esperes."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicat en funció de la política"</string> - <string name="loading" msgid="7811651799620593731">"S\'està carregant..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Tots els permisos"</string> - <string name="other_permissions" msgid="2016192512386091933">"Altres competències de l\'aplicació"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Sol·licitud de permís"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"S\'ha detectat una superposició de pantalla"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Per canviar la configuració de permisos, cal que desactivis la superposició de pantalla des de Configuració > Aplicacions"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Obre Configuració"</string> </resources> diff --git a/res/values-cs-television/strings.xml b/res/values-cs-television/strings.xml index 5d1b2a26..1fbc5f21 100644 --- a/res/values-cs-television/strings.xml +++ b/res/values-cs-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Odmítnout a již se neptat"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Svoji volbu můžete později změnit v nabídce Nastavení > Aplikace."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Zobrazit systémové aplikace"</string> </resources> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 84db63a6..55167acf 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -92,19 +92,16 @@ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> z <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="permission_warning_template" msgid="5209102765005869454">"Povolit aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikace"</string> - <string name="app_permissions" msgid="3146758905824597178">"Oprávnění aplikací"</string> + <string name="app_permissions" msgid="3146758905824597178">"Oprávnění aplikace"</string> <string name="never_ask_again" msgid="3798895821072102967">"Již se znovu neptat"</string> <string name="no_permissions" msgid="3210542466245591574">"Žádná oprávnění"</string> <string name="additional_permissions" msgid="6667573114240111763">"Další oprávnění"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="few">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Ještě <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Ještě <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Tato aplikace byla vytvořena pro starší verzi platformy Android. Pokud oprávnění neudělíte, může přestat fungovat podle původního záměru."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Zobrazit starší oprávnění"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Skrýt starší oprávnění"</string> <string name="default_permission_description" msgid="4992892207044156668">"provést neznámou akci"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povoleno u <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$d</xliff:g> aplikací"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povoleno u <xliff:g id="COUNT_0">%d</xliff:g> z <xliff:g id="COUNT_1">%d</xliff:g> aplikací"</string> <string name="menu_show_system" msgid="6773743421743728921">"Zobrazit systémové aplikace"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Skrýt systémové aplikace"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> – oprávnění"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Nastavení polohy"</string> <string name="location_warning" msgid="8778701356292735971">"Služby určování polohy v tomto zařízení poskytuje aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>. Přístup k poloze lze upravit v nastavení polohy."</string> <string name="system_warning" msgid="7103819124542305179">"Pokud toto oprávnění zamítnete, základní funkce zařízení nemusejí fungovat správně."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Vynuceno zásadami"</string> - <string name="loading" msgid="7811651799620593731">"Načítání…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Všechna oprávnění"</string> - <string name="other_permissions" msgid="2016192512386091933">"Ostatní oprávnění aplikace"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Žádost o oprávnění"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Byla zjištěna překryvná vrstva obrazovky"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Chcete-li změnit nastavení tohoto oprávnění, v Nastavení > Aplikace je třeba nejprve vypnout překryvnou vrstvu obrazovky"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Otevřít nastavení"</string> </resources> diff --git a/res/values-da-television/strings.xml b/res/values-da-television/strings.xml index 63b9de88..7091f316 100644 --- a/res/values-da-television/strings.xml +++ b/res/values-da-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Afvis, og spørg ikke igen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan ændre dette på et senere tidspunkt i Indstillinger og apps"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Vis systemapps"</string> </resources> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 90f0e8a0..0b14942c 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Tillad"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Afvis"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ud af <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Vil du give <xliff:g id="APP_NAME">%1$s</xliff:g> tilladelse til at <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Vil du give <xliff:g id="APP_NAME">%1$s</xliff:g> lov til at <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string> <string name="app_permissions" msgid="3146758905824597178">"Apptilladelser"</string> <string name="never_ask_again" msgid="3798895821072102967">"Spørg ikke igen"</string> <string name="no_permissions" msgid="3210542466245591574">"Ingen tilladelser"</string> <string name="additional_permissions" msgid="6667573114240111763">"Flere tilladelser"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> mere</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mere</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> mere"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Denne app er udviklet til en ældre version af Android. Hvis du ikke giver den tilladelse, vil den muligvis ikke længere virke efter hensigten."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Vis gamle"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Skjul gamle"</string> <string name="default_permission_description" msgid="4992892207044156668">"udføre en ukendt handling"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> ud af <xliff:g id="COUNT_1">%2$d</xliff:g> apps har tilladelse"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> ud af <xliff:g id="COUNT_1">%d</xliff:g> apps har tilladelse"</string> <string name="menu_show_system" msgid="6773743421743728921">"Vis systemapps"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Skjul systemapps"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> tilladelser"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Placeringsindstillinger"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> udbyder placeringstjenester for denne enhed. Adgangen til din placering kan ændres i Placeringsindstillinger."</string> <string name="system_warning" msgid="7103819124542305179">"Hvis du afviser denne tilladelse, vil grundlæggende funktioner på din enhed muligvis ikke længere fungere efter hensigten."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Håndhæves af politik"</string> - <string name="loading" msgid="7811651799620593731">"Indlæser…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alle tilladelser"</string> - <string name="other_permissions" msgid="2016192512386091933">"Andre app-egenskaber"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Anmodning om tilladelse"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Der er registreret skærmoverlejring"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Hvis du vil ændre denne indstilling for tilladelser, skal du først slå skærmoverlejringen fra i Indstillinger > Apps"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Åbn indstillingerne"</string> </resources> diff --git a/res/values-de-television/strings.xml b/res/values-de-television/strings.xml index cf52f8ca..b1f0baf6 100644 --- a/res/values-de-television/strings.xml +++ b/res/values-de-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Ablehnen und nicht mehr fragen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Sie können dies später unter \"Einstellungen > Apps\" ändern."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"System-Apps anzeigen"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 76776b60..d3e3b45c 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Zulassen"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Verweigern"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> von <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ermöglichen, <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Zulassen, dass <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string> <string name="app_permissions" msgid="3146758905824597178">"App-Berechtigungen"</string> <string name="never_ask_again" msgid="3798895821072102967">"Nicht mehr fragen"</string> <string name="no_permissions" msgid="3210542466245591574">"Keine Berechtigungen"</string> <string name="additional_permissions" msgid="6667573114240111763">"Zusätzliche Berechtigungen"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Noch <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Noch <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> weitere"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Diese App wurde für eine ältere Version von Android konzipiert. Wenn Sie keine Berechtigung erteilen, funktioniert die App möglicherweise nicht mehr ordnungsgemäß."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Alte Berechtigungen anzeigen"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Alte Berechtigungen ausblenden"</string> <string name="default_permission_description" msgid="4992892207044156668">"Unbekannte Aktion durchführen"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> von <xliff:g id="COUNT_1">%2$d</xliff:g> Apps sind berechtigt."</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> von <xliff:g id="COUNT_1">%d</xliff:g> Apps sind berechtigt."</string> <string name="menu_show_system" msgid="6773743421743728921">"System anzeigen"</string> <string name="menu_hide_system" msgid="7595471742649432977">"System ausblenden"</string> <string name="permission_title" msgid="6495415273398916381">"Berechtigungen für <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Standorteinstellungen"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ist ein Anbieter von Standortdiensten für dieses Gerät. Die Berechtigungen für den Zugriff auf Ihren Standort können Sie in den Standorteinstellungen ändern."</string> <string name="system_warning" msgid="7103819124542305179">"Wenn Sie diese Berechtigung deaktivieren, funktionieren grundlegende Funktionen Ihres Geräts möglicherweise nicht mehr ordnungsgemäß."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Von Richtlinien durchgesetzt"</string> - <string name="loading" msgid="7811651799620593731">"Wird geladen…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alle Berechtigungen"</string> - <string name="other_permissions" msgid="2016192512386091933">"Andere App-Funktionen"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Berechtigungsanfrage"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Display-Overlay erkannt"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Um diese Berechtigungseinstellung zu ändern, müssen Sie zunächst das Display-Overlay über \"Einstellungen\" > \"Apps\" deaktivieren."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Einstellungen öffnen"</string> </resources> diff --git a/res/values-el-television/strings.xml b/res/values-el-television/strings.xml index d50b1bd3..30bc6c58 100644 --- a/res/values-el-television/strings.xml +++ b/res/values-el-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Απόρριψη και να μην ερωτηθώ ξανά"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Μπορείτε να το αλλάξετε αυτό αργότερα από το μενού Ρυθμίσεις > Εφαρμογές"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Εμφάνιση εφαρμογών συστήματος"</string> </resources> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index c549a166..09b7867e 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -92,17 +92,16 @@ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> από <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="permission_warning_template" msgid="5209102765005869454">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> να <xliff:g id="ACTION">%2$s</xliff:g>;"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Εφαρμογές"</string> - <string name="app_permissions" msgid="3146758905824597178">"Δικαιώματα εφ/γών"</string> + <string name="app_permissions" msgid="3146758905824597178">"Δικαιώματα εφαρμογών"</string> <string name="never_ask_again" msgid="3798895821072102967">"Να μην γίνει ποτέ ξανά ερώτηση"</string> <string name="no_permissions" msgid="3210542466245591574">"Χωρίς δικαιώματα"</string> <string name="additional_permissions" msgid="6667573114240111763">"Πρόσθετα δικαιώματα"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Ακόμα <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Ακόμα <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ακόμη"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Αυτή η εφαρμογή σχεδιάστηκε για παλαιότερη έκδοση του Android. Η άρνηση άδειας μπορεί να έχει ως αποτέλεσμα να διακοπεί η κανονική λειτουργία της."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Εμφάνιση παλαιών αδειών"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Απόκρυψη παλαιών αδειών"</string> <string name="default_permission_description" msgid="4992892207044156668">"εκτέλεση άγνωστης ενέργειας"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Επιτρέπονται <xliff:g id="COUNT_0">%1$d</xliff:g> από <xliff:g id="COUNT_1">%2$d</xliff:g> εφαρμογές"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Επιτρέπονται <xliff:g id="COUNT_0">%d</xliff:g> από <xliff:g id="COUNT_1">%d</xliff:g> εφαρμογές"</string> <string name="menu_show_system" msgid="6773743421743728921">"Εμφάνιση συστήματος"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Απόκρυψη συστήματος"</string> <string name="permission_title" msgid="6495415273398916381">"Δικαιώματα <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Ρυθμίσεις τοποθεσίας"</string> <string name="location_warning" msgid="8778701356292735971">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> είναι ο πάροχος των υπηρεσιών τοποθεσίας για τη συγκεκριμένη συσκευή. Μπορείτε να τροποποιήσετε την πρόσβαση τοποθεσίας από τις ρυθμίσεις τοποθεσίας."</string> <string name="system_warning" msgid="7103819124542305179">"Εάν αρνηθείτε να παραχωρήσετε αυτήν την άδεια, η λειτουργία ορισμένων βασικών δυνατοτήτων ενδέχεται να μην είναι η αναμενόμενη."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Επιβάλλεται από την πολιτική"</string> - <string name="loading" msgid="7811651799620593731">"Γίνεται φόρτωση…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Όλα τα δικαιώματα"</string> - <string name="other_permissions" msgid="2016192512386091933">"Άλλες δυνατότητες εφαρμογής"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Αίτημα άδειας"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Εντοπίστηκε επικάλυψη οθόνης"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Για να αλλάξετε αυτή τη ρύθμιση άδειας, θα πρέπει πρώτα να απενεργοποιήσετε την επικάλυψη οθόνης από τις Ρυθμίσεις > Εφαρμογές"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Άνοιγμα ρυθμίσεων"</string> </resources> diff --git a/res/values-en-rAU-television/strings.xml b/res/values-en-rAU-television/strings.xml index c081905a..e9174db9 100644 --- a/res/values-en-rAU-television/strings.xml +++ b/res/values-en-rAU-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Deny and don\'t ask again"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings > Apps"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string> </resources> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 3986d336..69bdf0c4 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string> <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string> <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> more"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Show legacy"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Hide legacy"</string> <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> of <xliff:g id="COUNT_1">%d</xliff:g> apps allowed"</string> <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string> <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string> - <string name="loading" msgid="7811651799620593731">"Loading…"</string> - <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string> - <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings > Apps"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string> </resources> diff --git a/res/values-en-rGB-television/strings.xml b/res/values-en-rGB-television/strings.xml index c081905a..e9174db9 100644 --- a/res/values-en-rGB-television/strings.xml +++ b/res/values-en-rGB-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Deny and don\'t ask again"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings > Apps"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string> </resources> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 3986d336..69bdf0c4 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string> <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string> <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> more"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Show legacy"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Hide legacy"</string> <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> of <xliff:g id="COUNT_1">%d</xliff:g> apps allowed"</string> <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string> <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string> - <string name="loading" msgid="7811651799620593731">"Loading…"</string> - <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string> - <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings > Apps"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string> </resources> diff --git a/res/values-en-rIN-television/strings.xml b/res/values-en-rIN-television/strings.xml index c081905a..e9174db9 100644 --- a/res/values-en-rIN-television/strings.xml +++ b/res/values-en-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Deny and don\'t ask again"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings > Apps"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string> </resources> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 3986d336..69bdf0c4 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string> <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string> <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> more"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Show legacy"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Hide legacy"</string> <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> of <xliff:g id="COUNT_1">%d</xliff:g> apps allowed"</string> <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string> <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string> - <string name="loading" msgid="7811651799620593731">"Loading…"</string> - <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string> - <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings > Apps"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string> </resources> diff --git a/res/values-es-rUS-television/strings.xml b/res/values-es-rUS-television/strings.xml index 04aed2a0..6e98efe3 100644 --- a/res/values-es-rUS-television/strings.xml +++ b/res/values-es-rUS-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Denegar el permiso y no volver a preguntar"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puedes cambiar esta opción más tarde en Configuración > Aplicaciones"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicaciones del sistema"</string> </resources> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index d65fa542..5c34b94e 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"No volver a preguntar"</string> <string name="no_permissions" msgid="3210542466245591574">"Sin permisos"</string> <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionales"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> más</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> más</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> más"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación se diseñó para una versión de Android anterior. Si deniegas el permiso, es posible que deje de funcionar de la forma prevista."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostrar permisos heredados"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ocultar permisos heredados"</string> <string name="default_permission_description" msgid="4992892207044156668">"realizar una acción desconocida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"El permiso se otorgó a <xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicaciones."</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"El permiso se otorgó a <xliff:g id="COUNT_0">%d</xliff:g> de <xliff:g id="COUNT_1">%d</xliff:g> aplicaciones."</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Configuración de la ubicación"</string> <string name="location_warning" msgid="8778701356292735971">"La aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> provee servicios de ubicación a este dispositivo. El acceso a la ubicación puede modificarse desde la configuración de la ubicación."</string> <string name="system_warning" msgid="7103819124542305179">"Si no concedes este permiso, es posible que algunas funciones básicas del dispositivo dejen de funcionar correctamente."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Se aplica en función de la política"</string> - <string name="loading" msgid="7811651799620593731">"Cargando…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Todos los permisos"</string> - <string name="other_permissions" msgid="2016192512386091933">"Otras funciones de la aplicación"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitud de permiso"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Se detectó una superposición de pantalla"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar esta configuración de permisos, primero debes desactivar la superposición de pantalla en Configuración > Aplicaciones"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configuración"</string> </resources> diff --git a/res/values-es-television/strings.xml b/res/values-es-television/strings.xml index 27074063..31dd5bc3 100644 --- a/res/values-es-television/strings.xml +++ b/res/values-es-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Denegar y no volver a preguntar"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puedes cambiar esta opción más tarde en Ajustes > Aplicaciones"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicaciones del sistema"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 04270e4b..55aa9f84 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rechazar"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"¿Permitir que <xliff:g id="APP_NAME">%1$s</xliff:g> pueda <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"¿Permitir que <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicaciones"</string> <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicaciones"</string> <string name="never_ask_again" msgid="3798895821072102967">"No volver a preguntar"</string> <string name="no_permissions" msgid="3210542466245591574">"Sin permisos"</string> <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionales"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> más</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> más</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> más"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación está diseñada para una versión anterior de Android. Si se le deniega el permiso, puede dejar de funcionar de la forma prevista."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostrar permisos heredados"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ocultar permisos heredados"</string> <string name="default_permission_description" msgid="4992892207044156668">"realizar una acción desconocida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicaciones permitidas"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> de <xliff:g id="COUNT_1">%d</xliff:g> aplicaciones admitidas"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostrar aplicaciones del sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar aplicaciones del sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Permisos: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Ajustes de ubicación"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> es un proveedor de servicios de ubicación de este dispositivo. El acceso a la ubicación se puede modificar en los ajustes de ubicación."</string> <string name="system_warning" msgid="7103819124542305179">"Si deniegas este permiso, es posible que algunas funciones básicas de tu dispositivo dejen de funcionar correctamente."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicado por política"</string> - <string name="loading" msgid="7811651799620593731">"Cargando..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Todos los permisos"</string> - <string name="other_permissions" msgid="2016192512386091933">"Otras funciones de la aplicación"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitud de permiso"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Superposición de pantalla detectada"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar la configuración de este permiso, desactiva la superposición de pantalla en Ajustes > Aplicaciones"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir ajustes"</string> </resources> diff --git a/res/values-et-rEE-television/strings.xml b/res/values-et-rEE-television/strings.xml index 8a66c249..ce6c2a39 100644 --- a/res/values-et-rEE-television/strings.xml +++ b/res/values-et-rEE-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Keela ja ära enam küsi"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Saate seda hiljem muuta jaotises Seaded > Rakendused"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Kuva süsteemirakendused"</string> </resources> diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 9f17942b..9713a172 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Lubamine"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Keelamine"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>-st"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Kas lubada rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Kas lubada rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g> toiming <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Rakendused"</string> <string name="app_permissions" msgid="3146758905824597178">"Rakenduse load"</string> <string name="never_ask_again" msgid="3798895821072102967">"Ära enam küsi"</string> <string name="no_permissions" msgid="3210542466245591574">"Lube ei ole"</string> <string name="additional_permissions" msgid="6667573114240111763">"Täiendavad load"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Veel <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Veel <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Veel <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Rakendus on mõeldud Androidi vanemale versioonile. Kui keeldute loa andmisest, ei pruugi see ootuspäraselt töötada."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Kuva pärand"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Peida pärand"</string> <string name="default_permission_description" msgid="4992892207044156668">"tundmatu toiming"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> rakendust <xliff:g id="COUNT_1">%2$d</xliff:g>-st on lubatud"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> rakendust <xliff:g id="COUNT_1">%d</xliff:g>-st on lubatud"</string> <string name="menu_show_system" msgid="6773743421743728921">"Süsteemi kuvamine"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Süsteemi peitmine"</string> <string name="permission_title" msgid="6495415273398916381">"Üksuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Asukohaseaded"</string> <string name="location_warning" msgid="8778701356292735971">"Rakendus <xliff:g id="APP_NAME">%1$s</xliff:g> on selle seadme asukohateenuste pakkuja. Asukoha juurdepääsu saab muuta asukohaseadetes."</string> <string name="system_warning" msgid="7103819124542305179">"Kui keelate loa, ei pruugi seadme põhifunktsioonid enam ootuspäraselt töötada."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Eeskirjadega jõustatud"</string> - <string name="loading" msgid="7811651799620593731">"Laadimine ..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Kõik load"</string> - <string name="other_permissions" msgid="2016192512386091933">"Rakenduse muud funktsioonid"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Loa taotlus"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Tuvastati ekraani ülekate"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Selle loa seade muutmiseks peate esmalt välja lülitama ekraani ülekatte menüüs Seaded > Rakendused"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ava seaded"</string> </resources> diff --git a/res/values-eu-rES-television/strings.xml b/res/values-eu-rES-television/strings.xml index 8442ad7a..641a5a51 100644 --- a/res/values-eu-rES-television/strings.xml +++ b/res/values-eu-rES-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Baztertu eta ez galdetu berriro"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Hori geroago alda dezakezu Ezarpenak > Aplikazioak atalean"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Erakutsi sistema-aplikazioak"</string> </resources> diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 706e1888..f691d98d 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Baimendu"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Eragotzi"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari \"<xliff:g id="ACTION">%2$s</xliff:g>\" baimena eman nahi diozu?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari \"<xliff:g id="ACTION">%2$s</xliff:g>\" ekintza egitea baimendu nahi diozu?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikazioak"</string> <string name="app_permissions" msgid="3146758905824597178">"Aplikaziorako baimenak"</string> <string name="never_ask_again" msgid="3798895821072102967">"Ez galdetu berriro"</string> <string name="no_permissions" msgid="3210542466245591574">"Ez dago baimenik"</string> <string name="additional_permissions" msgid="6667573114240111763">"Baimen gehigarriak"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> gehiago</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> gehiago</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Beste <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aplikazio hau Android-en bertsio zaharrago baterako diseinatuta dago. Baimena ukatzen baduzu, agian aurrerantzean ez du behar bezain ondo funtzionatuko."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Erakutsi aurrekoak"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ezkutatu aurrekoak"</string> <string name="default_permission_description" msgid="4992892207044156668">"Gauzatu ekintza ezezagunak"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> aplikaziok dute baimena"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g> aplikaziok dute baimena"</string> <string name="menu_show_system" msgid="6773743421743728921">"Erakutsi sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ezkutatu sistema"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> erabiltzeko baimenak"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Kokapen-ezarpenak"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> gailu honen kokapen-zerbitzuen hornitzailea da. Kokapenerako sarbidea kokapen-ezarpenetatik alda daiteke."</string> <string name="system_warning" msgid="7103819124542305179">"Baimena ematen ez baduzu, baliteke gailuaren oinarrizko eginbide batzuek behar bezala ez funtzionatzea."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Gidalerroen bidez aplikatzen da"</string> - <string name="loading" msgid="7811651799620593731">"Kargatzen…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Baimen guztiak"</string> - <string name="other_permissions" msgid="2016192512386091933">"Aplikazioaren beste gaitasun batzuk"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Baimen-eskaera"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Pantailaren gainjartzea detektatu da"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Baimen-ezarpen hau aldatzeko, pantailaren gainjartzea desaktibatu behar duzu Ezarpenak > Aplikazioak atalean"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ireki ezarpenak"</string> </resources> diff --git a/res/values-fa-television/strings.xml b/res/values-fa-television/strings.xml index a98545dc..13f09259 100644 --- a/res/values-fa-television/strings.xml +++ b/res/values-fa-television/strings.xml @@ -16,8 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"اجازه ندارد و دیگر سؤال نشود"</string> + <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"نادیده گرفته شود و دیگر سؤال نشود"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"میتوانید بعداً آن را در تنظیمات > برنامهها تغییر دهید"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"نمایش برنامههای سیستم"</string> </resources> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 54c6396b..c11fad08 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -19,8 +19,8 @@ <string name="app_name" msgid="2738748390251381682">"نصب کننده بسته"</string> <string name="next" msgid="3057143178373252333">"بعدی"</string> <string name="install" msgid="5896438203900042068">"نصب"</string> - <string name="done" msgid="3889387558374211719">"تمام"</string> - <string name="security_settings_desc" msgid="2706691034244052604">"این برنامه مجاز است که:"</string> + <string name="done" msgid="3889387558374211719">"انجام شد"</string> + <string name="security_settings_desc" msgid="2706691034244052604">"به این برنامه اجازه داده شود که:"</string> <string name="cancel" msgid="8360346460165114585">"لغو"</string> <string name="unknown" msgid="4742479012767208045">"ناشناس"</string> <string name="installing" msgid="8613631001631998372">"در حال نصب…"</string> @@ -87,8 +87,8 @@ <string name="devicePerms" msgid="6733560207731294504">"دسترسی به دستگاه"</string> <string name="no_new_perms" msgid="6657813692169565975">"این بهروزرسانی به مجوز جدیدی نیاز ندارد."</string> <string name="grant_confirm_question" msgid="4690289297029223742">"آیا میخواهید مجوزهای زیر را اعطا کنید؟ این مجوزها دسترسی به این موارد را بوجود میآورند:"</string> - <string name="grant_dialog_button_allow" msgid="4616529495342337095">"مجاز است"</string> - <string name="grant_dialog_button_deny" msgid="2176510645406614340">"اجازه ندارد"</string> + <string name="grant_dialog_button_allow" msgid="4616529495342337095">"مجاز"</string> + <string name="grant_dialog_button_deny" msgid="2176510645406614340">"رد کردن"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> از <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="permission_warning_template" msgid="5209102765005869454">"به <xliff:g id="APP_NAME">%1$s</xliff:g> برای <xliff:g id="ACTION">%2$s</xliff:g> اجازه میدهید؟"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"برنامهها"</string> @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"دیگر هرگز سؤال نشود"</string> <string name="no_permissions" msgid="3210542466245591574">"مجوزی موجود نیست"</string> <string name="additional_permissions" msgid="6667573114240111763">"مجوزهای بیشتر"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> مورد دیگر</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> مورد دیگر</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> مورد دیگر"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"این برنامه برای یک نسخه قدیمیتر از Android طراحی شده بود. نپذیرفتن اجازه ممکن است باعث شود که برنامه دیگر به صورتی که مورد نظر است کار نکند."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"نمایش مجوزهای قدیمی"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"پنهان کردن مجوزهای قدیمی"</string> <string name="default_permission_description" msgid="4992892207044156668">"انجام یک اقدام ناشناخته"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> برنامه از <xliff:g id="COUNT_1">%2$d</xliff:g> برنامه مجاز است"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> برنامه از <xliff:g id="COUNT_1">%d</xliff:g> برنامه مجاز است"</string> <string name="menu_show_system" msgid="6773743421743728921">"نمایش سیستم"</string> <string name="menu_hide_system" msgid="7595471742649432977">"پنهان کردن سیستم"</string> <string name="permission_title" msgid="6495415273398916381">"مجوزهای <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"تنظیمات مکان"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> یکی از ارائهدهندگان سرویسهای مکان برای این دستگاه است. با رفتن به تنظیمات مکان میتوانید دسترسی به موقعیت مکانی را تغییر دهید."</string> <string name="system_warning" msgid="7103819124542305179">"اگر این اجازه را رد کنید، ممکن است قابلیتهای اصلی دستگاهتان دیگر عملکرد موردانتظار را نداشته باشند."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"اجرا توسط خطمشی"</string> - <string name="loading" msgid="7811651799620593731">"درحال بارگیری…"</string> - <string name="all_permissions" msgid="5156669007784613042">"همه مجوزها"</string> - <string name="other_permissions" msgid="2016192512386091933">"سایر قابلیتهای برنامه"</string> - <string name="permission_request_title" msgid="1204446718549121199">"درخواست مجوز"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"همپوشانی صفحه شناسایی شد"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"برای تغییر این تنظیم مجوز، ابتدا باید همپوشانی صفحه را از «تنظیمات > برنامهها» خاموش کنید"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"باز کردن تنظیمات"</string> </resources> diff --git a/res/values-fi-television/strings.xml b/res/values-fi-television/strings.xml index c17ae794..23227121 100644 --- a/res/values-fi-television/strings.xml +++ b/res/values-fi-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Hylkää äläkä kysy uudelleen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Voit muuttaa tätä myöhemmin valitsemalla Asetukset > Sovellukset."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Näytä järjestelmäsovellukset"</string> </resources> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 4c69ed96..a835ab3b 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Salli"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Estä"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Onko sovelluksella <xliff:g id="APP_NAME">%1$s</xliff:g> lupa <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Sovellukset"</string> <string name="app_permissions" msgid="3146758905824597178">"Sovelluksen käyttöoikeudet"</string> <string name="never_ask_again" msgid="3798895821072102967">"Älä kysy enää koskaan"</string> <string name="no_permissions" msgid="3210542466245591574">"Ei käyttöoikeuksia"</string> <string name="additional_permissions" msgid="6667573114240111763">"Lisäkäyttöoikeudet"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lisää</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lisää</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> lisää"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Tämä sovellus on suunniteltu vanhemmalle Android-versiolle. Se ei välttämättä toimi oikein, jos käyttöoikeuksia ei sallita."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Näytä vanhat käyttöoikeudet"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Piilota vanhat käyttöoikeudet"</string> <string name="default_permission_description" msgid="4992892207044156668">"suorita tuntematon toiminto"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sallitut sovellukset: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sallitut sovellukset: <xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Näytä järjestelmä"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Piilota järjestelmä"</string> <string name="permission_title" msgid="6495415273398916381">"Kohteen <xliff:g id="PERMISSION">%1$s</xliff:g> käyttöluvat"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Sijaintiasetukset"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> on tämän laitteen sijaintipalveluiden tarjoaja. Sijainnin käyttöoikeutta voi muokata sijaintiasetuksissa."</string> <string name="system_warning" msgid="7103819124542305179">"Jos peruutat tämän käyttöoikeuden, laitteesi perustoiminnot eivät välttämättä enää toimi oikein."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Käytännön vahvistama"</string> - <string name="loading" msgid="7811651799620593731">"Ladataan…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Kaikki käyttöoikeudet"</string> - <string name="other_permissions" msgid="2016192512386091933">"Muut sovellusluvat"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Lupapyyntö"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Näytön peittokuva havaittiin"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ennen kuin voit muokata tätä käyttöoikeusasetusta, sinun täytyy poistaa näytön peittokuva käytöstä Asetukset-valikon Sovellukset-kohdasta."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Avaa Asetukset"</string> </resources> diff --git a/res/values-fr-rCA-television/strings.xml b/res/values-fr-rCA-television/strings.xml index 31293c9f..e80ff5a6 100644 --- a/res/values-fr-rCA-television/strings.xml +++ b/res/values-fr-rCA-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Refuser et ne plus demander"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vous pourrez modifier ce choix plus tard dans le menu Paramètres > Applications"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Afficher les applications système"</string> </resources> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 25d900c6..fb810bbb 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Autoriser"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à effectuer l\'action suivante : <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string> <string name="app_permissions" msgid="3146758905824597178">"Autorisations de l\'application"</string> <string name="never_ask_again" msgid="3798895821072102967">"Ne plus demander"</string> <string name="no_permissions" msgid="3210542466245591574">"Aucune autorisation"</string> <string name="additional_permissions" msgid="6667573114240111763">"Autorisations supplémentaires"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> autre</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> autres</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> autre(s)"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Cette application a été conçue pour une version antérieure d\'Android. Si vous n\'accordez pas l\'autorisation, il se peut qu\'elle ne fonctionne plus correctement."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Afficher les autorisations antérieures"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Masquer les autorisations antérieures"</string> <string name="default_permission_description" msgid="4992892207044156668">"effectuer une action inconnue"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Afficher le système"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Masquer le système"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> autorisations"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Paramètres de localisation"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> est un fournisseur de services de localisation pour cet appareil. L\'accès à la position peut être modifié dans le menu des paramètres de localisation."</string> <string name="system_warning" msgid="7103819124542305179">"Si vous rejetez cette autorisation, il est possible que cela touche certaines fonctionnalités de base de votre appareil."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Activé conformément à la politique"</string> - <string name="loading" msgid="7811651799620593731">"Chargement en cours…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Toutes les autorisations"</string> - <string name="other_permissions" msgid="2016192512386091933">"Autres autorisations de l\'application"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Demande d\'autorisation"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"La superposition d\'écran a été détectée"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Pour modifier ce paramètre d\'autorisation, vous devez tout d\'abord désactiver la superposition d\'écran en accédant à Paramètres > Applications."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ouvrir les paramètres"</string> </resources> diff --git a/res/values-fr-television/strings.xml b/res/values-fr-television/strings.xml index 68c673c1..84c949dd 100644 --- a/res/values-fr-television/strings.xml +++ b/res/values-fr-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Refuser et ne plus demander"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vous pourrez modifier ce paramètre plus tard sous Paramètres > Applications."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Afficher les applications système"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index bd1f9440..a6f34dc7 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Autoriser"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> sur <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à <xliff:g id="ACTION">%2$s</xliff:g> ?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à effectuer l\'action suivante : <xliff:g id="ACTION">%2$s</xliff:g> ?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string> <string name="app_permissions" msgid="3146758905824597178">"Autoris. des applis"</string> <string name="never_ask_again" msgid="3798895821072102967">"Ne plus jamais demander"</string> <string name="no_permissions" msgid="3210542466245591574">"Aucune autorisation"</string> <string name="additional_permissions" msgid="6667573114240111763">"Autorisations supplémentaires"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> autre</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> autres</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> autres"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Cette application a été conçue pour une ancienne version d\'Android. Si vous désactivez les autorisations, l\'application risque de ne plus fonctionner comme prévu."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Afficher les anciennes autorisations"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Masquer les anciennes autorisations"</string> <string name="default_permission_description" msgid="4992892207044156668">"effectuer une action inconnue"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Afficher les processus système"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Masquer les processus système"</string> <string name="permission_title" msgid="6495415273398916381">"Autorisations d\'accès aux données \"<xliff:g id="PERMISSION">%1$s</xliff:g>\""</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Paramètres de géolocalisation"</string> <string name="location_warning" msgid="8778701356292735971">"Les services de localisation pour cet appareil sont fournis via <xliff:g id="APP_NAME">%1$s</xliff:g>. Vous pouvez modifier l\'accès aux données de localisation dans les paramètres de localisation."</string> <string name="system_warning" msgid="7103819124542305179">"Si vous rejetez cette autorisation, il est possible que cela affecte certaines fonctionnalités de base de votre appareil."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Activé conformément aux règles"</string> - <string name="loading" msgid="7811651799620593731">"Chargement en cours…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Toutes les autorisations"</string> - <string name="other_permissions" msgid="2016192512386091933">"Autres autorisations de l\'application"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Demande d\'autorisation"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Superposition d\'écran détectée"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Pour modifier ce paramètre d\'autorisation, vous devez tout d\'abord désactiver la superposition d\'écran en accédant à Paramètres > Applications."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ouvrir les paramètres"</string> </resources> diff --git a/res/values-gl-rES-television/strings.xml b/res/values-gl-rES-television/strings.xml index 3d80f96c..12fb0f95 100644 --- a/res/values-gl-rES-television/strings.xml +++ b/res/values-gl-rES-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Denegar e non volver preguntar"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Podes cambiar esta opción máis tarde en Configuración e aplicacións"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicacións do sistema"</string> </resources> diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index 19245166..cab27926 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denegar"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Queres permitir que <xliff:g id="APP_NAME">%1$s</xliff:g> poida <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Queres permitir a <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacións"</string> <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicacións"</string> <string name="never_ask_again" msgid="3798895821072102967">"Non volver preguntar"</string> <string name="no_permissions" msgid="3210542466245591574">"Sen permisos"</string> <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionais"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> permisos máis</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> permiso máis</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> máis"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación deseñouse para unha versión anterior de Android. Denegar o permiso pode provocar que non funcione como está previsto."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostrar permisos herdados"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ocultar permisos herdados"</string> <string name="default_permission_description" msgid="4992892207044156668">"realiza unha acción descoñecida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicacións con permiso"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> de <xliff:g id="COUNT_1">%d</xliff:g> aplicacións con permiso"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Configuración da localización"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é un fornecedor de servizos de localización para este dispositivo. O acceso de localización pode modificarse desde a configuración de localización."</string> <string name="system_warning" msgid="7103819124542305179">"Se denegas este permiso, é posible que as funcións básicas do teu dispositivo deixen de funcionar segundo o previsto."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicado pola política"</string> - <string name="loading" msgid="7811651799620593731">"Cargando…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Todos os permisos"</string> - <string name="other_permissions" msgid="2016192512386091933">"Outras funcionalidades da aplicación"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitude de permiso"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Detectouse a superposición da pantalla"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar a configuración deste permiso, primeiro tes que desactivar a superposición da pantalla en Configuración > Aplicacións"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configuración"</string> </resources> diff --git a/res/values-gu-rIN-television/strings.xml b/res/values-gu-rIN-television/strings.xml index cd0dd3c6..6381a701 100644 --- a/res/values-gu-rIN-television/strings.xml +++ b/res/values-gu-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"નકારો અને ફરીથી પૂછશો નહીં"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"તમે પછીથી આને સેટિંગ્સ > એપ્લિકેશન્સમાં બદલી શકો છો"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"સિસ્ટમ એપ્લિકેશનો બતાવો"</string> </resources> diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml index fb11e93f..d261ab1f 100644 --- a/res/values-gu-rIN/strings.xml +++ b/res/values-gu-rIN/strings.xml @@ -52,8 +52,8 @@ <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"તમારા વ્યવસ્થાપક અજાણ સ્રોતોથી મેળવેલ એપ્લિકેશન્સના ઇન્સ્ટોલેશનની મંજૂરી આપતાં નથી."</string> <string name="ok" msgid="3468756155452870475">"ઑકે"</string> <string name="settings" msgid="6743583734099755409">"સેટિંગ્સ"</string> - <string name="allow_source_dlg_title" msgid="7568985073502399415">"એપ્લિકેશનો માટે નવો સ્રોત"</string> - <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> અન્ય એપ્લિકેશનો ઇન્સ્ટોલ કરવા માંગે છે.\n\nઆને હમણાં અને ભવિષ્યમાં મંજૂરી આપીએ?"</string> + <string name="allow_source_dlg_title" msgid="7568985073502399415">"એપ્લિકેશન્સ માટે નવો સ્રોત"</string> + <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> અન્ય એપ્લિકેશન્સ ઇન્સ્ટોલ કરવા માંગે છે.\n\nઆને હમણાં અને ભવિષ્યમાં મંજૂરી આપીએ?"</string> <string name="manage_applications" msgid="4033876279091996596">"એપ્લિકેશન્સનું સંચાલન કરો"</string> <string name="dlg_app_replacement_title" msgid="1232230739563820951">"એપ્લિકેશન બદલીએ?"</string> <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"તમે ઇન્સ્ટોલ કરી રહ્યાં છો તે એપ્લિકેશન બીજી એપ્લિકેશનનું સ્થાન લેશે.\n\nતમારો અગાઉનો તમામ ડેટા સાચવવામાં આવશે."</string> @@ -90,32 +90,23 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"મંજૂરી આપો"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"નકારો"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> માંથી <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને <xliff:g id="ACTION">%2$s</xliff:g> મંજૂરી આપીએ?"</string> - <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"એપ્લિકેશનો"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને <xliff:g id="ACTION">%2$s</xliff:g> ની મંજૂરી આપીએ?"</string> + <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"એપ્લિકેશન્સ"</string> <string name="app_permissions" msgid="3146758905824597178">"એપ્લિકેશન પરવાનગીઓ"</string> <string name="never_ask_again" msgid="3798895821072102967">"ફરી ક્યારેય પૂછશો નહીં"</string> <string name="no_permissions" msgid="3210542466245591574">"કોઈ પરવાનગીઓ નથી"</string> <string name="additional_permissions" msgid="6667573114240111763">"વધારાની પરવાનગીઓ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> વધુ</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> વધુ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> વધુ"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"આ એપ્લિકેશન Android ના જુના સંસ્કરણ માટે તૈયાર કરવામાં આવી હતી. પરવાનગી નકારવાથી તે ધાર્યા પ્રમાણે બિલકુલ કાર્ય કરશે નહી."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"લેગેસી દર્શાવો"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"લેગેસી છુપાવો"</string> <string name="default_permission_description" msgid="4992892207044156668">"એક અજાણી ક્રિયા કરો"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> માંથી <xliff:g id="COUNT_0">%1$d</xliff:g> એપ્લિકેશન્સને મંજૂરી છે"</string> - <string name="menu_show_system" msgid="6773743421743728921">"સિસ્ટમ બતાવો"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> માંથી <xliff:g id="COUNT_0">%d</xliff:g> એપ્લિકેશન્સને મંજૂરી છે"</string> + <string name="menu_show_system" msgid="6773743421743728921">"સિસ્ટમ દર્શાવો"</string> <string name="menu_hide_system" msgid="7595471742649432977">"સિસ્ટમ છુપાવો"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> પરવાનગીઓ"</string> - <string name="no_apps" msgid="1965493419005012569">"કોઇ એપ્લિકેશનો નથી"</string> + <string name="no_apps" msgid="1965493419005012569">"કોઇ એપ્લિકેશન્સ નથી"</string> <string name="location_settings" msgid="1774875730854491297">"સ્થાન સેટિંગ્સ"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> એ આ ઉપકરણ માટે સ્થાન સેવાઓના પ્રદાતા છે. સ્થાન સેટિંગ્સમાંથી સ્થાન ઍક્સેસ સંશોધિત કરી શકાય છે."</string> <string name="system_warning" msgid="7103819124542305179">"જો તમે આ પરવાનગી નકારો છો, તો તમારા ઉપકરણની મૂળભૂત સુવિધાઓ અપેક્ષા પ્રમાણે કાર્ય કરી શકશે નહીં."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"નીતિ દ્વારા લાગુ"</string> - <string name="loading" msgid="7811651799620593731">"લોડ કરી રહ્યું છે..."</string> - <string name="all_permissions" msgid="5156669007784613042">"બધી પરવાનગીઓ"</string> - <string name="other_permissions" msgid="2016192512386091933">"અન્ય એપ્લિકેશન ક્ષમતાઓ"</string> - <string name="permission_request_title" msgid="1204446718549121199">"પરવાનગીની વિનંતી"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"સ્ક્રીન ઓવરલે મળ્યું"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"આ પરવાનગી સેટિંગ બદલવા માટે, તમારે પહેલા સેટિંગ્સ > Apps માંથી સ્ક્રીન ઓવરલે બંધ કરવું પડશે"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"સેટિંગ્સ ખોલો"</string> </resources> diff --git a/res/values-hi-television/strings.xml b/res/values-hi-television/strings.xml index 42010e11..7d3daf66 100644 --- a/res/values-hi-television/strings.xml +++ b/res/values-hi-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"मना करें और फिर से ना पूछें"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"आप इसे बाद में सेटिंग > ऐप्स में बदल सकते हैं"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"सिस्टम ऐप्स दिखाएं"</string> </resources> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 0ca0ab17..3e4341c4 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"फिर कभी ना पूछें"</string> <string name="no_permissions" msgid="3210542466245591574">"कोई अनुमति नहीं"</string> <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त अनुमतियां"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> और</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> और</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> और"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"इस ऐप को Android के पुराने वर्शन के लिए डिज़ाइन किया गया था. अनुमति अस्वीकार करने पर हो सकता है कि फ़ंक्शन लक्षित रूप से काम नहीं करे."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"लीगेसी दिखाएं"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"लीगेसी छिपाएं"</string> <string name="default_permission_description" msgid="4992892207044156668">"कोई अज्ञात कार्रवाई करें"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> में से <xliff:g id="COUNT_0">%1$d</xliff:g> ऐप्स को अनुमति है"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> में से <xliff:g id="COUNT_0">%d</xliff:g> ऐप्स को अनुमति है"</string> <string name="menu_show_system" msgid="6773743421743728921">"सिस्टम दिखाएं"</string> <string name="menu_hide_system" msgid="7595471742649432977">"सिस्टम छिपाएं"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> अनुमतियां"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिंग"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> इस डिवाइस के लिए स्थान सेवाएं उपलब्ध कराने वाला प्रदाता है. स्थान ऐक्सेस को स्थान सेटिंग से बदला जा सकता है."</string> <string name="system_warning" msgid="7103819124542305179">"यदि आप इस अनुमति को अस्वीकार करते हैं, तो हो सकता है कि आपके डिवाइस की मूलभूत सुविधाएं लक्षित कार्य ना कर पाएं."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"नीति द्वारा लागू"</string> - <string name="loading" msgid="7811651799620593731">"लोड हो रहा है…"</string> - <string name="all_permissions" msgid="5156669007784613042">"सभी अनुमतियां"</string> - <string name="other_permissions" msgid="2016192512386091933">"अन्य ऐप कार्यक्षमताएं"</string> - <string name="permission_request_title" msgid="1204446718549121199">"अनुमति का अनुरोध"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रीन ओवरले को पहचाना गया"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"इस अनुमति सेटिंग को बदलने के लिए, आपको पहले सेटिंग > ऐप्स से स्क्रीन ओवरले को बंद करना होगा"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिंग खोलें"</string> </resources> diff --git a/res/values-hr-television/strings.xml b/res/values-hr-television/strings.xml index 151afe81..436923f9 100644 --- a/res/values-hr-television/strings.xml +++ b/res/values-hr-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Odbij i više ne pitaj"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"To možete kasnije promijenili u odjeljku Postavke > Aplikacije"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Prikaži aplikacije sustava"</string> </resources> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index be51e443..2e1f9dc7 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -90,20 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dopusti"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odbij"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> od <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Dopuštate li aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> da može <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Želite li dopustiti aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> izvršavanje radnje <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string> <string name="app_permissions" msgid="3146758905824597178">"Dopuštenja aplikacije"</string> <string name="never_ask_again" msgid="3798895821072102967">"Nikad više ne traži"</string> <string name="no_permissions" msgid="3210542466245591574">"Nema dopuštenja"</string> <string name="additional_permissions" msgid="6667573114240111763">"Dodatna dopuštenja"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Još <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ova je aplikacija napravljena za stariju verziju Androida. Ako ne dobije dopuštenje, možda više neće funkcionirati kako treba."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Prikaži staro"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Sakrij staro"</string> <string name="default_permission_description" msgid="4992892207044156668">"izvršiti nepoznatu radnju"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Broj aplikacija s dopuštenjem: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Broj aplikacija s dopuštenjem: <xliff:g id="COUNT_0">%d</xliff:g> od <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Prikaži sustav"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Sakrij sustav"</string> <string name="permission_title" msgid="6495415273398916381">"Dopuštenja – <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -111,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Postavke lokacije"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> pruža usluge lokacije za ovaj uređaj. Pristup lokaciji može se izmijeniti u postavkama lokacije."</string> <string name="system_warning" msgid="7103819124542305179">"Ako ne odobrite ovo dopuštenje, osnovne značajke vašeg uređaja možda više neće funkcionirati pravilno."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Provoditi se na temelju pravila"</string> - <string name="loading" msgid="7811651799620593731">"Učitavanje…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Sva dopuštenja"</string> - <string name="other_permissions" msgid="2016192512386091933">"Ostale mogućnosti aplikacije"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Zahtijevanje dopuštenja"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Otkriveno je preklapanje na zaslonu"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Da biste promijenili tu postavku dopuštenja, prvo morate isključiti preklapanje na zaslonu u Postavkama > Aplikacije"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Otvori postavke"</string> </resources> diff --git a/res/values-hu-television/strings.xml b/res/values-hu-television/strings.xml index cb780971..7c334b18 100644 --- a/res/values-hu-television/strings.xml +++ b/res/values-hu-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Megtagadás, és ne jelenjen meg többé"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ezt később módosíthatja a Beállítások > Alkalmazások pontnál"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Rendszeralkalmazások megjelenítése"</string> </resources> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 9c8b1db2..985a7097 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Ne kérdezzen rá többet"</string> <string name="no_permissions" msgid="3210542466245591574">"Nincs engedély"</string> <string name="additional_permissions" msgid="6667573114240111763">"További engedélyek"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> további</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> további</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> további"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ez az alkalmazás az Android egy korábbi verziójához készült. Az engedély megtagadása esetén előfordulhat, hogy a továbbiakban nem fog megfelelően működni."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Korábbiak megjelenítése"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Korábbiak elrejtése"</string> <string name="default_permission_description" msgid="4992892207044156668">"végrehajt egy ismeretlen műveletet"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g>/<xliff:g id="COUNT_0">%1$d</xliff:g> alkalmazás engedélyezve"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g>/<xliff:g id="COUNT_0">%d</xliff:g> alkalmazás engedélyezve"</string> <string name="menu_show_system" msgid="6773743421743728921">"Rendszerfolyamatok megjelenítése"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Rendszerfolyamatok elrejtése"</string> <string name="permission_title" msgid="6495415273398916381">"A(z) <xliff:g id="PERMISSION">%1$s</xliff:g> jogosultságai"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Helybeállítások"</string> <string name="location_warning" msgid="8778701356292735971">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> helyszolgáltatásokat biztosít ennek az eszköznek. A helyhozzáférést a helybeállításokban lehet módosítani."</string> <string name="system_warning" msgid="7103819124542305179">"Ha ezt nem engedélyezi, akkor előfordulhat, hogy az eszköz egyes alapfunkciói nem megfelelően fognak működni."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Irányelv által kényszerítve"</string> - <string name="loading" msgid="7811651799620593731">"Betöltés…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Az összes engedély"</string> - <string name="other_permissions" msgid="2016192512386091933">"Egyéb alkalmazáslehetőségek"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Engedélykérés"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Képernyőfedvény észlelve"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ennek az engedélynek a módosításához először ki kell kapcsolnia a képernyőfedvényt a Beállítások > Alkalmazások menüben"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Beállítások megnyitása"</string> </resources> diff --git a/res/values-hy-rAM-television/strings.xml b/res/values-hy-rAM-television/strings.xml index b23a74d8..5d76d4b5 100644 --- a/res/values-hy-rAM-television/strings.xml +++ b/res/values-hy-rAM-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Մերժել և այլևս չհարցնել"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Կարող եք փոխել սա ավելի ուշ Կարգավորումներում և Հավելվածներում"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Ցուցադրել համակարգի հավելվածները"</string> </resources> diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index b4b4fde3..13c6f381 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Այլևս երբեք չհարցնել"</string> <string name="no_permissions" msgid="3210542466245591574">"Թույլտվություններ չկան"</string> <string name="additional_permissions" msgid="6667573114240111763">"Լրացուցիչ թույլտվություններ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Եվս <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Եվս <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Եվս <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Այս հավելվածը նախատեսված է Android-ի ավելի հին տարբերակի համար: Եթե մերժեք թույլտվությունը, այն կարող է չաշխատել ինչպես հարկն է:"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Ցուցադրել հին թույլտվությունները"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Թաքցնել հին թույլտվությունները"</string> <string name="default_permission_description" msgid="4992892207044156668">"թույլատրել անհայտ գործողություն"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Թույլատրված է <xliff:g id="COUNT_0">%1$d</xliff:g> հավելվածի՝ <xliff:g id="COUNT_1">%2$d</xliff:g>-ից"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Թույլատրված է <xliff:g id="COUNT_0">%d</xliff:g> հավելվածի՝ <xliff:g id="COUNT_1">%d</xliff:g>-ից"</string> <string name="menu_show_system" msgid="6773743421743728921">"Ցուցադրել համակարգայինները"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Թաքցնել համակարգայինները"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> թույլտվություններ"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Տեղադրության կարգավորումներ"</string> <string name="location_warning" msgid="8778701356292735971">"Այս սարքի տեղադրության ծառայությունները տրամադրում է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը: Տեղադրության ցուցադրման կարգավորումները կարող եք փոխել տեղադրության կարգավորումներից:"</string> <string name="system_warning" msgid="7103819124542305179">"Եթե չտրամադրեք այս թույլտվությունը, ձեր սարքի հիմնական գործառույթները հնարավոր է սխալ աշխատեն:"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Սահմանված է կանոններով"</string> - <string name="loading" msgid="7811651799620593731">"Բեռնում…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Բոլոր թույլտվությունները"</string> - <string name="other_permissions" msgid="2016192512386091933">"Այլ հավելվածների հնարավորությունները"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Թույլտվության հարցում"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Հայտնաբերվել է էկրանի վերադրում"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Այս թույլտվության կարգավորումները փոխելու համար նախ անհրաժեշտ է անջատել էկրանի վերադրումը՝ անցնելով Կարգավորումներ > Հավելվածներ"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Բացել կարգավորումները"</string> </resources> diff --git a/res/values-in-television/strings.xml b/res/values-in-television/strings.xml index 9ab3b192..e8aeeb95 100644 --- a/res/values-in-television/strings.xml +++ b/res/values-in-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Tolak dan jangan tanya lagi"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Anda dapat mengubah ini nanti di Setelan > Aplikasi"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Tampilkan aplikasi sistem"</string> </resources> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 589f2954..f30cfa31 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Jangan tanya lagi"</string> <string name="no_permissions" msgid="3210542466245591574">"Tidak ada izin"</string> <string name="additional_permissions" msgid="6667573114240111763">"Izin tambahan"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lainnya</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lainnya</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> lainnya"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aplikasi ini dirancang untuk versi lama Android. Menolak izin dapat menyebabkan aplikasi tidak berfungsi lagi sesuai harapan."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Tampilkan lawas"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Sembunyikan lawas"</string> <string name="default_permission_description" msgid="4992892207044156668">"melakukan tindakan yang tidak dikenal"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> dari <xliff:g id="COUNT_1">%2$d</xliff:g> aplikasi diizinkan"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> dari <xliff:g id="COUNT_1">%d</xliff:g> aplikasi diizinkan"</string> <string name="menu_show_system" msgid="6773743421743728921">"Tampilkan sistem"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Sembunyikan sistem"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izin"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Setelan Lokasi"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> adalah penyedia layanan lokasi untuk perangkat ini. Akses lokasi dapat diubah dari setelan lokasi."</string> <string name="system_warning" msgid="7103819124542305179">"Jika Anda menolak izin ini, fitur dasar perangkat mungkin tidak berfungsi lagi sesuai harapan."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Diterapkan menurut kebijakan"</string> - <string name="loading" msgid="7811651799620593731">"Memuat…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Semua izin"</string> - <string name="other_permissions" msgid="2016192512386091933">"Kemampuan aplikasi lainnya"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Permintaan izin"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Hamparan layar terdeteksi"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Untuk mengubah setelan izin ini, terlebih dahulu Anda harus menonaktifkan hamparan layar dari Setelan > Aplikasi"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Buka setelan"</string> </resources> diff --git a/res/values-is-rIS-television/strings.xml b/res/values-is-rIS-television/strings.xml index 5e780185..78cc61af 100644 --- a/res/values-is-rIS-television/strings.xml +++ b/res/values-is-rIS-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Hafna og ekki spyrja aftur"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Þú getur breytt þessu seinna undir Stillingar og forrit"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Sýna kerfisforrit"</string> </resources> diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 41d176df..5e88ee38 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Ekki spyrja aftur"</string> <string name="no_permissions" msgid="3210542466245591574">"Engar heimildir"</string> <string name="additional_permissions" msgid="6667573114240111763">"Viðbótarheimildir"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> í viðbót</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> í viðbót</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> í viðbót"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Þetta forrit var hannað fyrir eldri útgáfu af Android. Ef því er ekki veitt heimild er hugsanlegt að það virki ekki rétt."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Sýna gamalt"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Fela gamalt"</string> <string name="default_permission_description" msgid="4992892207044156668">"framkvæma óþekkta aðgerð"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> forrit af <xliff:g id="COUNT_1">%2$d</xliff:g> leyfð"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> forrit af <xliff:g id="COUNT_1">%d</xliff:g> leyfð"</string> <string name="menu_show_system" msgid="6773743421743728921">"Sýna kerfisforrit"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Fela kerfisforrit"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> heimildir"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Staðsetningarstillingar"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> býður upp á staðsetningarþjónustu fyrir þetta tæki. Hægt er að breyta aðgangi að staðsetningu í stillingum staðsetningar."</string> <string name="system_warning" msgid="7103819124542305179">"Ef þú veitir ekki þessa heimild getur verið að grunneiginleikar tækisins virki ekki lengur sem skyldi."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Stjórnað af reglu"</string> - <string name="loading" msgid="7811651799620593731">"Hleður…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Allar heimildir"</string> - <string name="other_permissions" msgid="2016192512386091933">"Aðrir forritseiginleikar"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Beiðni um heimild"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Skjáyfirlögn greindist"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Til að breyta þessari heimildarstillingu þarftu fyrst að slökkva á skjáyfirlögn undir Stillingar > Forrit"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Opna stillingar"</string> </resources> diff --git a/res/values-it-television/strings.xml b/res/values-it-television/strings.xml index 8ccd29c5..db01c95c 100644 --- a/res/values-it-television/strings.xml +++ b/res/values-it-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Nega e non chiedermelo più"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puoi modificare questa scelta in seguito in Impostazioni > App"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostra app di sistema"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 68543309..8d72aaef 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Non chiedere più"</string> <string name="no_permissions" msgid="3210542466245591574">"Nessuna autorizzazione"</string> <string name="additional_permissions" msgid="6667573114240111763">"Altre autorizzazioni"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Altre <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> altra</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Altre <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Questa app è stata sviluppata per una versione precedente di Android. Se l\'autorizzazione viene negata, l\'app potrebbe non funzionare più come previsto."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostra precedenti"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Nascondi precedenti"</string> <string name="default_permission_description" msgid="4992892207044156668">"esegue un\'azione sconosciuta"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sono consentite <xliff:g id="COUNT_0">%1$d</xliff:g> app su <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sono consentite <xliff:g id="COUNT_0">%d</xliff:g> app su <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostra app di sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Nascondi app di sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Autorizzazioni <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Impostazioni posizione"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> è un fornitore di servizi di localizzazione per questo dispositivo. È possibile modificare l\'accesso alla posizione dalle impostazioni sulla posizione."</string> <string name="system_warning" msgid="7103819124542305179">"Se neghi questa autorizzazione, le funzionalità di base del dispositivo potrebbero non funzionare più come previsto."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Applicata in base alle norme"</string> - <string name="loading" msgid="7811651799620593731">"Caricamento…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Tutte le autorizzazioni"</string> - <string name="other_permissions" msgid="2016192512386091933">"Altre funzionalità dell\'app"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Richiesta di autorizzazione"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Overlay schermo rilevato"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Per modificare questa impostazione di autorizzazione, devi innanzitutto disattivare l\'overlay schermo da Impostazioni > App"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Apri impostazioni"</string> </resources> diff --git a/res/values-iw-television/strings.xml b/res/values-iw-television/strings.xml index 102e8dd7..2f35364b 100644 --- a/res/values-iw-television/strings.xml +++ b/res/values-iw-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"דחה ואל תשאל שוב"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"תוכל לשנות זאת מאוחר יותר ב\'הגדרות\' > \'אפליקציות\'"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"הצג אפליקציות מערכת"</string> </resources> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index e2f1057b..2ad697e2 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -96,15 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"לעולם אל תבקש שוב"</string> <string name="no_permissions" msgid="3210542466245591574">"אין הרשאות"</string> <string name="additional_permissions" msgid="6667573114240111763">"הרשאות נוספות"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="two">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">עוד <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"עוד <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"האפליקציה הזו עוצבה בשביל גרסה ישנה יותר של Android. דחיית ההרשאה עשויה לגרום לה לתפקד בצורה לקויה."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"הצג הרשאות ישנות"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"הסתר הרשאות ישנות"</string> <string name="default_permission_description" msgid="4992892207044156668">"ביצוע פעולה לא ידועה"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> מתוך <xliff:g id="COUNT_1">%2$d</xliff:g> אפליקציות קיבלו הרשאה"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> מתוך <xliff:g id="COUNT_1">%d</xliff:g> אפליקציות קיבלו הרשאה"</string> <string name="menu_show_system" msgid="6773743421743728921">"הצג מערכת"</string> <string name="menu_hide_system" msgid="7595471742649432977">"הסתר מערכת"</string> <string name="permission_title" msgid="6495415273398916381">"הרשאות <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"הגדרות מיקום"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> הוא ספק של שירותי מיקום בשביל המכשיר הזה. אפשר לשנות את גישת המיקום בהגדרות המיקום."</string> <string name="system_warning" msgid="7103819124542305179">"אם תדחה את ההרשאה הזו, ייתכן שתכונות בסיסיות במכשיר לא יפעלו כצפוי."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"נאכף באמצעות מדיניות"</string> - <string name="loading" msgid="7811651799620593731">"טוען..."</string> - <string name="all_permissions" msgid="5156669007784613042">"כל ההרשאות"</string> - <string name="other_permissions" msgid="2016192512386091933">"הרשאות אחרות של האפליקציה"</string> - <string name="permission_request_title" msgid="1204446718549121199">"בקשת הרשאה"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"זוהתה שכבת על במסך"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"כדי לשנות את הגדרת ההרשאה הזו, ראשית עליך לכבות את שכבת העל במסך ב\'הגדרות\' > \'אפליקציות\'"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"פתח הגדרות"</string> </resources> diff --git a/res/values-ja-television/strings.xml b/res/values-ja-television/strings.xml index 304f322b..013db3f1 100644 --- a/res/values-ja-television/strings.xml +++ b/res/values-ja-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"許可しない(次回から表示しない)"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"これは後から[設定]>[アプリ]で変更できます"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"システムアプリの表示"</string> </resources> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index f5f294e9..ce16be0e 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"今後は確認しない"</string> <string name="no_permissions" msgid="3210542466245591574">"権限がありません"</string> <string name="additional_permissions" msgid="6667573114240111763">"その他の権限"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">他<xliff:g id="COUNT_1">%1$d</xliff:g>件</item> - <item quantity="one">他<xliff:g id="COUNT_0">%1$d</xliff:g>件</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"他<xliff:g id="COUNT">%1$d</xliff:g>件"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"このアプリはAndroidの以前のバージョンを対象としています。権限を許可しないと、意図されたとおりに動作しなくなる可能性があります。"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"以前の許可を表示する"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"以前の許可を表示しない"</string> <string name="default_permission_description" msgid="4992892207044156668">"不明な操作の実行"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>個のアプリを許可"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g>個のアプリを許可"</string> <string name="menu_show_system" msgid="6773743421743728921">"システムを表示"</string> <string name="menu_hide_system" msgid="7595471742649432977">"システムを表示しない"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>の権限"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"位置情報の設定"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>はこの端末の位置情報サービスのプロバイダです。位置情報アクセスは位置情報の設定から変更できます。"</string> <string name="system_warning" msgid="7103819124542305179">"この権限を許可しないと、お使いの端末の基本的な機能が意図されたとおりに動作しなくなる可能性があります。"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ポリシーにより適用"</string> - <string name="loading" msgid="7811651799620593731">"読み込んでいます…"</string> - <string name="all_permissions" msgid="5156669007784613042">"すべての権限"</string> - <string name="other_permissions" msgid="2016192512386091933">"その他のアプリ機能"</string> - <string name="permission_request_title" msgid="1204446718549121199">"権限のリクエスト"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"画面オーバーレイを検出"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"この権限設定を変更するには、まず[設定]>[アプリ]から画面オーバーレイをOFFにします"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"設定を開く"</string> </resources> diff --git a/res/values-ka-rGE-television/strings.xml b/res/values-ka-rGE-television/strings.xml index 6d6f8063..2a3c7788 100644 --- a/res/values-ka-rGE-television/strings.xml +++ b/res/values-ka-rGE-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"უარყავი და აღარ მკითხო"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ამის შეცვლა მოგვიანებით შეგიძლიათ სექციაში პარამეტრები > აპები"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"სისტემის აპების ჩვენება"</string> </resources> diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 41ce43b3..cdb15365 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -97,13 +97,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"აღარასოდეს შემეკითხოს"</string> <string name="no_permissions" msgid="3210542466245591574">"ნებართვები არ არის"</string> <string name="additional_permissions" msgid="6667573114240111763">"დამატებითი ნებართვები"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> კიდევ</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> კიდევ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> სხვა"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ეს აპი Android-ის ძველი ვერსიისთვის შეიქმნა. ნებართვის უარყოფამ შესაძლოა მისი არასათანადო ფუნქციონირება გამოიწვიოს."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"მოძველებულების ჩვენება"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"მოძველებულების დამალვა"</string> <string name="default_permission_description" msgid="4992892207044156668">"უცნობი ქმედების შესრულება"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> დაშვებული აპიდან"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g> დაშვებული აპიდან"</string> <string name="menu_show_system" msgid="6773743421743728921">"სისტემის ჩვენება"</string> <string name="menu_hide_system" msgid="7595471742649432977">"სისტემური პროცესების დამალვა"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>-ის ნებართვები"</string> @@ -111,12 +110,4 @@ <string name="location_settings" msgid="1774875730854491297">"მდებარეობის პარამეტრები"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> არის მდებარეობის სერვისების მომწოდებელი ამ მოწყობილობისთვის. მდებარეობაზე წვდომის შეცვლა შესაძლებელია მდებარეობის პარამეტრებიდან."</string> <string name="system_warning" msgid="7103819124542305179">"ამ ნებართვის უარყოფის შემთხვევაში, თქვენი მოწყობილობის ძირითადმა ფუნქციებმა შესაძლოა სათანადოდ აღარ იმუშაოს."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"შეესაბამება წესს"</string> - <string name="loading" msgid="7811651799620593731">"იტვირთება..."</string> - <string name="all_permissions" msgid="5156669007784613042">"ყველა ნებართვა"</string> - <string name="other_permissions" msgid="2016192512386091933">"აპის სხვა შესაძლებლობები"</string> - <string name="permission_request_title" msgid="1204446718549121199">"ნებართვის მოთხოვნა"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"ეკრანის გადაფარვა გამოვლინდა"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ამ ნებართვის პარამეტრის შესაცვლელად, ჯერ უნდა გამორთოთ ეკრანის გადაფარვა პარამეტრებიდან > აპებიდან"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"პარამეტრების გახსნა"</string> </resources> diff --git a/res/values-kk-rKZ-television/strings.xml b/res/values-kk-rKZ-television/strings.xml index 6dc02cbe..66cbed40 100644 --- a/res/values-kk-rKZ-television/strings.xml +++ b/res/values-kk-rKZ-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Тыйым салу және қайтадан сұрамау"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Мұны кейінірек \"Параметрлер\" және \"Қолданбалар\" ішінен өзгертуге болады"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Жүйелік қолданбаларды көрсету"</string> </resources> diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index 8fe10ee4..427303ca 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Қайтадан сұрамау"</string> <string name="no_permissions" msgid="3210542466245591574">"Рұқсат жоқ"</string> <string name="additional_permissions" msgid="6667573114240111763">"Қосымша рұқсаттар"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Тағы <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Тағы <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Тағы <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Бұл қолданба Android жүйесінің ескі нұсқасына арналған. Рұқсаттан бас тартсаңыз, бұдан былай тиісінше жұмыс істемеуі мүмкін."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Ескіргенді көрсету"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ескіргенді жасыру"</string> <string name="default_permission_description" msgid="4992892207044156668">"белгісіз әрекетті орындау"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> қолданбаға рұқсат етілген"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g> қолданбаға рұқсат етілген"</string> <string name="menu_show_system" msgid="6773743421743728921">"Жүйені көрсету"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Жүйені жасыру"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> рұқсаттары"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Орынды анықтау параметрлері"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> — осы құрылғыға орынды анықтау қызметтерін көрсететін қолданба. Орынды пайдалану мүмкіндігін орынды анықтау параметрлерінде өзгертуге болады."</string> <string name="system_warning" msgid="7103819124542305179">"Бұл рұқсатты бермесеңіз, құрылғының негізгі функциялары енді көзделгендей жұмыс істемеуі мүмкін."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Саясат арқылы қолданылған"</string> - <string name="loading" msgid="7811651799620593731">"Жүктелуде…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Барлық рұқсаттар"</string> - <string name="other_permissions" msgid="2016192512386091933">"Басқа қолданба мүмкіндіктері"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Рұқсат сұрау"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Экранды қабаттастыру анықталды"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Бұл рұқсат параметрін өзгерту үшін алдымен «Параметрлер» > «Қолданбалар» тармағында экранды қабаттастыруды өшіру керек"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Параметрлерді ашу"</string> </resources> diff --git a/res/values-km-rKH-television/strings.xml b/res/values-km-rKH-television/strings.xml index a4e80094..ea068542 100644 --- a/res/values-km-rKH-television/strings.xml +++ b/res/values-km-rKH-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"បដិសេធ ហើយកុំសួរម្តងទៀត"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"អ្នកអាចប្តូរវាពេលក្រោយនៅក្នុងការកំណត់ > កម្មវិធី"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"បង្ហាញកម្មវិធីប្រព័ន្ធ"</string> </resources> diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 6396a99e..e11cef1d 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"កុំសួរទៀត"</string> <string name="no_permissions" msgid="3210542466245591574">"គ្មានសិទ្ធិអនុញ្ញាត"</string> <string name="additional_permissions" msgid="6667573114240111763">"សិទ្ធិអនុញ្ញាតបន្ថែម"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ទៀត</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ទៀត</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ទៀត"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"កម្មវិធីនេះត្រូវបានរចនាឡើងសម្រាប់កំណែចាស់របស់ Android។ ការបដិសេធសិទ្ធិអនុញ្ញាតអាចបណ្តាលឲ្យវាបំពេញមុខងារមិនដូចអ្វីដែលគេរំពឹងទុកតទៅទៀតទេ។"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"បង្ហាញវិធីបុរាណ"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"លាក់វិធីបុរាណ"</string> <string name="default_permission_description" msgid="4992892207044156668">"ប្រតិបត្តិការសកម្មភាពមិនស្គាល់"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"បានអនុញ្ញាតកម្មវិធី <xliff:g id="COUNT_0">%1$d</xliff:g> នៃ <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"បានអនុញ្ញាតកម្មវិធី <xliff:g id="COUNT_0">%d</xliff:g> នៃ <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"បង្ហាញប្រព័ន្ធ"</string> <string name="menu_hide_system" msgid="7595471742649432977">"លាក់ប្រព័ន្ធ"</string> <string name="permission_title" msgid="6495415273398916381">"សិទ្ធិអនុញ្ញាត <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ការកំណត់ទីតាំង"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> គឺជាអ្នកផ្តល់សេវាកម្មទីតាំងសម្រាប់ឧបករណ៍នេះ។ ការចូលដំណើរការទីតាំងអាចកែសម្រួលបានចេញពីការកំណត់ទីតាំង។"</string> <string name="system_warning" msgid="7103819124542305179">"ប្រសិនបើអ្នកបដិសេធសិទ្ធិអនុញ្ញាតនេះ លក្ខណៈពិសេសគោលនៃឧបករណ៍របស់អ្នកអាចមិនដំណើរការដូចដែលអ្នកចង់បានតទៅទៀតទេ។"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"អនុវត្តតាមគោលការណ៍"</string> - <string name="loading" msgid="7811651799620593731">"កំពុងដំណើរការ..."</string> - <string name="all_permissions" msgid="5156669007784613042">"សិទ្ធិអនុញ្ញាតទាំងអស់"</string> - <string name="other_permissions" msgid="2016192512386091933">"សមត្ថភាពកម្មវិធីផ្សេងទៀត"</string> - <string name="permission_request_title" msgid="1204446718549121199">"សំណើសុំសិទ្ធិអនុញ្ញាត"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"បានរកឃើញអេក្រង់ត្រួតគ្នា"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ដើម្បីប្តូរការកំណត់សិទ្ធិអនុញ្ញាតនេះ ជាដំបូងអ្នកត្រូវបិទអេក្រង់ត្រួតគ្នានៅក្នុង ការកំណត់ > កម្មវិធី"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"បើកការកំណត់"</string> </resources> diff --git a/res/values-kn-rIN-television/strings.xml b/res/values-kn-rIN-television/strings.xml index 5244bdc5..1e159c20 100644 --- a/res/values-kn-rIN-television/strings.xml +++ b/res/values-kn-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ನಿರಾಕರಿಸು ಹಾಗೂ ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡ"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ನೀವು ಇದನ್ನು ನಂತರದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ಗಳು > ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"ಸಿಸ್ಟಂ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತೋರಿಸು"</string> </resources> diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index 9ff55f9f..6a3dddc9 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ಅನುಮತಿಸು"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ನಿರಾಕರಿಸು"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> ರಲ್ಲಿ <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> <xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುವುದೇ?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗೆ <xliff:g id="ACTION">%2$s</xliff:g> ಕ್ರಮ ಅನುಮತಿಸುವುದೇ?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string> <string name="app_permissions" msgid="3146758905824597178">"ಅಪ್ಲಿಕೇಶನ್ ಅನುಮತಿಗಳು"</string> <string name="never_ask_again" msgid="3798895821072102967">"ಎಂದಿಗೂ ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡಿ"</string> <string name="no_permissions" msgid="3210542466245591574">"ಯಾವುದೇ ಅನುಮತಿಗಳಿಲ್ಲ"</string> <string name="additional_permissions" msgid="6667573114240111763">"ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳು"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಇನ್ನಷ್ಟು</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಇನ್ನಷ್ಟು</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ಇನ್ನಷ್ಟು"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ಈ ಅಪ್ಲಿಕೇಶನ್ Android ನ ಹಳೆಯ ಆವೃತ್ತಿಗೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿತ್ತು. ಅನುಮತಿ ನಿರಾಕರಿಸುವಿಕೆ ಇನ್ನು ಮುಂದೆ ಉದ್ದೇಶಿಸಲ್ಪಟ್ಟಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದೆ ಇರುವುದಕ್ಕೆ ಇದು ಕಾರಣವಾಗಬಹುದು."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ಹಳೆಯದನ್ನು ತೋರಿಸು"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ಹಳೆಯದನ್ನು ಮರೆಮಾಡು"</string> <string name="default_permission_description" msgid="4992892207044156668">"ಅಜ್ಞಾತ ಕ್ರಿಯೆಯನ್ನು ಮಾಡಿ"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> ನಲ್ಲಿ <xliff:g id="COUNT_0">%1$d</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> ನಲ್ಲಿ <xliff:g id="COUNT_0">%d</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ"</string> <string name="menu_show_system" msgid="6773743421743728921">"ಸಿಸ್ಟಂ ತೋರಿಸು"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ಸಿಸ್ಟಮ್ ಮರೆಮಾಡು"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ಅನುಮತಿಗಳು"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಈ ಸಾಧನಕ್ಕೆ ಸ್ಥಳ ಸೇವೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಸ್ಥಳ ಪ್ರವೇಶವನ್ನು ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ಗಳಿಂದ ಮಾರ್ಪಡಿಸಬಹುದು."</string> <string name="system_warning" msgid="7103819124542305179">"ನೀವು ಈ ಅನುಮತಿಯನ್ನು ನಿರಾಕರಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ ನಿಮ್ಮ ಸಾಧನದ ಮೂಲ ವೈಶಿಷ್ಟ್ಯಗಳು ಉದ್ದೇಶಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ನೀತಿಯ ಮೂಲಕ ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ"</string> - <string name="loading" msgid="7811651799620593731">"ಲೋಡ್ ಆಗುತ್ತಿದೆ..."</string> - <string name="all_permissions" msgid="5156669007784613042">"ಎಲ್ಲ ಅನುಮತಿಗಳು"</string> - <string name="other_permissions" msgid="2016192512386091933">"ಇತರ ಅಪ್ಲಿಕೇಶನ್ ಸಾಮರ್ಥ್ಯಗಳು"</string> - <string name="permission_request_title" msgid="1204446718549121199">"ಅನುಮತಿ ವಿನಂತಿ"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"ಪರದೆ ಆವರಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗಿದೆ"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ಈ ಅನುಮತಿ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು, ನೀವು ಮೊದಲು ಸೆಟ್ಟಿಂಗ್ಗಳು > ಅಪ್ಲಿಕೇಶನ್ಗಳಿಂದ ಪರದೆ ಆವರಿಸಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಆಫ್ ಮಾಡಬೇಕು"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> </resources> diff --git a/res/values-ko-television/strings.xml b/res/values-ko-television/strings.xml index cc85a89a..3638c9e2 100644 --- a/res/values-ko-television/strings.xml +++ b/res/values-ko-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"거부 및 다시 묻지 않음"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"설정 > 앱에서 나중에 변경할 수 있습니다."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>개 중 <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"시스템 앱 보기"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 55867cc9..27d5a20a 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"허용"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"거부"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 다음 작업을 허용하시겠습니까? <xliff:g id="ACTION">%2$s</xliff:g>"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 <xliff:g id="ACTION">%2$s</xliff:g> 작업 수행을 허용하시겠습니까?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"앱"</string> <string name="app_permissions" msgid="3146758905824597178">"앱 권한"</string> <string name="never_ask_again" msgid="3798895821072102967">"다시 묻지 않기"</string> <string name="no_permissions" msgid="3210542466245591574">"권한이 없음"</string> <string name="additional_permissions" msgid="6667573114240111763">"추가 권한"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>개 더보기</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>개 더보기</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g>개 더보기"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"이 앱은 Android 이전 버전에 맞게 설계되었습니다. 권한이 거부되면 정상적으로 작동하지 않을 수 있습니다."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"이전 권한 표시"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"이전 권한 숨기기"</string> <string name="default_permission_description" msgid="4992892207044156668">"알 수 없는 작업 수행"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>개 앱 허용됨"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g>개 앱 허용됨"</string> <string name="menu_show_system" msgid="6773743421743728921">"시스템 표시"</string> <string name="menu_hide_system" msgid="7595471742649432977">"시스템 숨기기"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> 권한"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"위치 설정"</string> <string name="location_warning" msgid="8778701356292735971">"이 기기의 위치 서비스 제공업체는 <xliff:g id="APP_NAME">%1$s</xliff:g>입니다. 위치 정보 액세스는 위치 설정에서 수정할 수 있습니다."</string> <string name="system_warning" msgid="7103819124542305179">"이 권한을 거부하는 경우 기기의 기본 기능이 제대로 작동하지 않을 수 있습니다."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"정책에 의해 시행됨"</string> - <string name="loading" msgid="7811651799620593731">"로드 중..."</string> - <string name="all_permissions" msgid="5156669007784613042">"모든 권한"</string> - <string name="other_permissions" msgid="2016192512386091933">"다른 앱 기능"</string> - <string name="permission_request_title" msgid="1204446718549121199">"권한 요청"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"화면 오버레이 감지됨"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"이 권한 설정을 변경하려면 먼저 설정 > 앱에서 화면 오버레이를 사용하지 않도록 설정해야 합니다."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"설정 열기"</string> </resources> diff --git a/res/values-ky-rKG-television/strings.xml b/res/values-ky-rKG-television/strings.xml index 8ff2a828..ac2019ae 100644 --- a/res/values-ky-rKG-television/strings.xml +++ b/res/values-ky-rKG-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Баш тартам жана экинчи суралбасын"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Муну кийин Жөндөөлөр > Колдонмолордон өзгөртө аласыз"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Тутум колдонмолорун көрсөтүү"</string> </resources> diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index 0716c2fa..09bcceb3 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -16,14 +16,20 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="2738748390251381682">"Топтом орноткуч"</string> + <!-- no translation found for app_name (2738748390251381682) --> + <skip /> <string name="next" msgid="3057143178373252333">"Кийинки"</string> - <string name="install" msgid="5896438203900042068">"Орнотуу"</string> - <string name="done" msgid="3889387558374211719">"Даяр"</string> + <!-- no translation found for install (5896438203900042068) --> + <skip /> + <!-- no translation found for done (3889387558374211719) --> + <skip /> <string name="security_settings_desc" msgid="2706691034244052604">"Бул колдонмого кийинки уруксаттар берилсин:"</string> - <string name="cancel" msgid="8360346460165114585">"Жокко чыгаруу"</string> - <string name="unknown" msgid="4742479012767208045">"Белгисиз"</string> - <string name="installing" msgid="8613631001631998372">"Орнотулууда…"</string> + <!-- no translation found for cancel (8360346460165114585) --> + <skip /> + <!-- no translation found for unknown (4742479012767208045) --> + <skip /> + <!-- no translation found for installing (8613631001631998372) --> + <skip /> <string name="install_done" msgid="3682715442154357097">"Колдонмо орнотулду."</string> <string name="install_confirm_question" msgid="7295206719219043890">"Бул колдонмону орнотоюн дегениңиз аныкпы? Ал кийинкилерге жетки алат:"</string> <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Бул колдонмону орнотоюн дегениңиз аныкпы? Ал эч бир атайын жетки уруксаттарын талап кылбайт."</string> @@ -32,9 +38,12 @@ <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Учурда иштпе турган бул колдонмого жаңыртуу орнотоюн дегениңиз аныкпы? Сиздин сакталган берилиштериңиз өчүрүлбөйт. Ал эч бир атайын жетки уруксаттарын талап кылбайт."</string> <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Бул камтылган колдонмого жаңыртуу орнотоюн дегениңиз аныкпы? Сиздин сакталган берилиштериңиз өчүрүлбөйт. Ал эч бир атайын жетки уруксаттарын талап кылбайт."</string> <string name="install_failed" msgid="6579998651498970899">"Колдонмо орнотулган жок."</string> - <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Топтом бузулган окшойт."</string> - <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Аталышы окшош, бирок колтамгасы дал келбеген топтом мурунтан эле орнотулган."</string> - <string name="install_failed_older_sdk" msgid="7947925824732917665">"Топтом жаңыраак Android версияларында гана иштейт."</string> + <!-- no translation found for install_failed_invalid_apk (1287935707565682604) --> + <skip /> + <!-- no translation found for install_failed_inconsistent_certificates (1517751954440692054) --> + <skip /> + <!-- no translation found for install_failed_older_sdk (7947925824732917665) --> + <skip /> <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Бул колдонмо планшетиңизге шайкеш эмес."</string> <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Бул колдонмо сыналгыңызга шайкеш келбейт."</string> <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Бул колдонмо телефонуңузга шайкеш эмес."</string> @@ -44,23 +53,29 @@ <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун планшетиңизге орнотуу мүмкүн эмес."</string> <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> сыналгыңызга орнотулбай койду."</string> <string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун телефонуңузга орнотуу мүмкүн эмес."</string> - <string name="launch" msgid="4826921505917605463">"Ачуу"</string> - <string name="unknown_apps_dlg_title" msgid="2855558586206583032">"Орнотуу бөгөттөлгөн"</string> + <!-- no translation found for launch (4826921505917605463) --> + <skip /> + <!-- no translation found for unknown_apps_dlg_title (2855558586206583032) --> + <skip /> <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Коопсуздукту камсыздоо үчүн, планшетиңизде белгисиз булактардан келген колдонмолорду орнотуу бөгөттөлгөн."</string> <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Коопсуздукту камсыз кылуу үчн, сыналгыңызда белгисз булактардн алынгн колдонмлрду орнтуу бөгөттөлгн."</string> <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Коопсуздукту камсыздоо үчүн, телефонуңузда белгисиз булактардан келген колдонмолорду орнотуу бөгөттөлгөн."</string> <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Администраторуңуз белгисиз булактардан алынган колдонмолордун орнотулушуна жол бербейт."</string> - <string name="ok" msgid="3468756155452870475">"Жарайт"</string> - <string name="settings" msgid="6743583734099755409">"Жөндөөлөр"</string> + <!-- no translation found for ok (3468756155452870475) --> + <skip /> + <!-- no translation found for settings (6743583734099755409) --> + <skip /> <string name="allow_source_dlg_title" msgid="7568985073502399415">"Колдонмолордун жаңы булагы"</string> <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> башка колдонмо орноткусу келет.\n\nАзыр жана кийин буга уруксат берилсинби?"</string> <string name="manage_applications" msgid="4033876279091996596">"Колдонмолорду башкаруу"</string> <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Колдонмо алмаштырылсынбы?"</string> <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Сиз орнотуп жаткан колдонмо башка колдонмону жок кылат.\n\nМурунку колдонуучу берилиштериңиздин бардыгы сакталат."</string> <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Бул системалык колдонмо.\n\nМурунку колдонуучу берилиштериңиздин бардыгы сакталат."</string> - <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Бош орун жок"</string> + <!-- no translation found for out_of_space_dlg_title (7843674437613797326) --> + <skip /> <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун телефонуңузга орнотуу мүмкүн эмес. Орун бошотуп, кайталап орнотуп көрүңүз."</string> - <string name="dlg_ok" msgid="6944357727705699232">"Жарайт"</string> + <!-- no translation found for dlg_ok (6944357727705699232) --> + <skip /> <string name="app_not_found_dlg_title" msgid="2692335460569505484">"Колдонмо табылган жок"</string> <string name="app_not_found_dlg_text" msgid="6107465056055095930">"Колдонмо орнотулган колдонмолор тизмегинен табылган жок."</string> <string name="uninstall_application_title" msgid="1860074100811653963">"Колдонмону чечип салуу"</string> @@ -70,16 +85,19 @@ <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Бул колдонмо "<b>"бардык"</b>" колдонуучулардан алынып салынсынбы? Бул колдонмо жана анын берилиштери бул түзмөктүн "<b>"бардык"</b>" колдонуучуларынан алынат."</string> <string name="uninstall_application_text_user" msgid="8766882355635485733">"Бул колдонмону <xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусу үчүн орнотуудан чыгаргыңыз келеби?"</string> <string name="uninstall_update_text" msgid="2056387942084605027">"Бул колдонмону абалкы орнотулган версиясы менен алмаштырасызбы?"</string> - <string name="uninstalling" msgid="5556217435895938250">"Чыгарылып салынууда…"</string> + <!-- no translation found for uninstalling (5556217435895938250) --> + <skip /> <string name="uninstall_done" msgid="3792487853420281888">"Чечилип бүттү."</string> <string name="uninstall_failed" msgid="631122574306299512">"Чечүү ийгиликсиз болду."</string> <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Чечүү кыйрады, анткени бул таңгак түзмөктүн учурдагы администратору."</string> <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Орнотуудан чыгара албайт, анткени бул таңгак <xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусунун активдүү түзмөк администратору."</string> <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Бул колдонмо жумуш профилиңизге талап кылынат жана аны орнотуудан чыгаруу мүмкүн эмес."</string> <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Бул колдонмо түзмөк администраторуңузга керектелет жана орнотуудан чыгаруу мүмкүн эмес."</string> - <string name="manage_device_administrators" msgid="891392489300312370">"Түзмөктүн администраторлорун башкаруу"</string> + <!-- no translation found for manage_device_administrators (891392489300312370) --> + <skip /> <string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун чечип салуу мүмкүн эмес."</string> - <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Талдоо катасы"</string> + <!-- no translation found for Parse_error_dlg_title (6079580916889596257) --> + <skip /> <string name="Parse_error_dlg_text" msgid="7623286983621067011">"Таңгакты окууда маселе пайда болду."</string> <string name="newPerms" msgid="6039428254474104210">"Жаңы"</string> <string name="allPerms" msgid="1024385515840703981">"Бардыгы"</string> @@ -90,19 +108,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Уруксат берүү"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Жок"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> ичинен <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна <xliff:g id="ACTION">%2$s</xliff:g> уруксат берилсинби?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн <xliff:g id="ACTION">%2$s</xliff:g> уруксатпы?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Колдонмолор"</string> <string name="app_permissions" msgid="3146758905824597178">"Колдонмо уруксаттары"</string> <string name="never_ask_again" msgid="3798895821072102967">"Экинчи сураба"</string> <string name="no_permissions" msgid="3210542466245591574">"Уруксаттар жок"</string> <string name="additional_permissions" msgid="6667573114240111763">"Кошумча уруксаттар"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Дагы <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Дагы <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"дагы <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Бул колдонмо эски Android версиясы үчүн түзүлгөн. Уруксат берилбесе, ал туура эмес иштеп калышы мүмкүн."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Уруксаттарды көрсөтүү"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Уруксаттарды жашыруу"</string> <string name="default_permission_description" msgid="4992892207044156668">"белгисиз аракеттерди жасайт"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> ичинен <xliff:g id="COUNT_0">%1$d</xliff:g> колдонмого уруксат берилген"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> ичинен <xliff:g id="COUNT_0">%d</xliff:g> колдонмого уруксат берилген"</string> <string name="menu_show_system" msgid="6773743421743728921">"Тутумду көрсөтүү"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Тутумду жашыруу"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> уруксат"</string> @@ -110,12 +127,4 @@ <string name="location_settings" msgid="1774875730854491297">"Жайгашкан жерди анктоо жөндлрү"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> - бул түзмөктөгү жайгашкан жерди аныктоо кызматынын камсыздоочусу. Жайгашкан жерди көрүү мүмкүнчүлүгүн жайгашкан жерди аныктоо жөндөөлөрүнөн өзгөртсө болот."</string> <string name="system_warning" msgid="7103819124542305179">"Эгер бул уруксатты четке каксаңыз, түзмөгүңүздүн негизги функциялары талаптагыдай иштебей калышы мүмкүн."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Саясат тарабынан күчүнө киргизилген"</string> - <string name="loading" msgid="7811651799620593731">"Жүктөлүүдө…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Бардык уруксаттар"</string> - <string name="other_permissions" msgid="2016192512386091933">"Колдонмонун башка жөндөмдөрү"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Уруксат суроо"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Экран кабатталышы аныкталды"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Бул уруксаттын жөндөөсүн өзгөртүү үчүн, адегенде Жөндөөлөр > Колдонмолордон экрандын кабатталышын өчүрүңүз"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Жөндөөлөрдү ачуу"</string> </resources> diff --git a/res/values-lo-rLA-television/strings.xml b/res/values-lo-rLA-television/strings.xml index a49a8f2b..d34d14f8 100644 --- a/res/values-lo-rLA-television/strings.xml +++ b/res/values-lo-rLA-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ປະຕິເສດ ແລະຢ່າຖາມອີກ"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ທ່ານສາມາດປ່ຽນແປງສິ່ງນີ້ໃນພາຍຫຼັງໄດ້ໃນການຕັ້ງຄ່າ > ແອັບ"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"ສະແດງແອັບລະບົບ"</string> </resources> diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 4e0203be..e8c73edc 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"ຢ່າຖາມອີກ"</string> <string name="no_permissions" msgid="3210542466245591574">"ບໍ່ມີການອະນຸຍາດ"</string> <string name="additional_permissions" msgid="6667573114240111763">"ການອະນຸຍາດເພີ່ມເຕີມ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ເພີ່ມເຕີມ</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ເພີ່ມເຕີມ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ເພີ່ມເຕີມ"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ແອັບນີ້ຖືກອອກແບບມາສຳລັບ Android ເວີຊັນເກົ່າ. ການປະຕິເສດການອະນຸຍາດອາດຈະເຮັດໃຫ້ມັນບໍ່ເຮັດວຽກຕາມຕ້ອງການໄດ້ອີກ."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ສະແດງຕຳນານ"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ເຊື່ອງຕຳນານ"</string> <string name="default_permission_description" msgid="4992892207044156668">"ເຮັດການດຳເນີນການທີ່ບໍ່ຮູ້ຈັກ"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> ໃນ <xliff:g id="COUNT_1">%2$d</xliff:g> ແອັບໄດ້ຮັບອະນຸຍາດແລ້ວ"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> ໃນ <xliff:g id="COUNT_1">%d</xliff:g> ແອັບໄດ້ຮັບອະນຸຍາດແລ້ວ"</string> <string name="menu_show_system" msgid="6773743421743728921">"ສະແດງລະບົບ"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ເຊື່ອງລະບົບ"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ການອະນຸຍາດ"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ການຕັ້ງຄ່າທີ່ຕັ້ງ"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ແມ່ນຜູ້ໃຫ້ບໍລິການເລື່ອງການບໍລິການທີ່ຕັ້ງສຳລັບອຸປະກອນນີ້. ການເຂົ້າເຖິງທີ່ຕັ້ງແມ່ນສາມາດດັດແປງໄດ້ຈາກການຕັ້ງຄ່າທີ່ຕັ້ງ."</string> <string name="system_warning" msgid="7103819124542305179">"ຖ້າທ່ານປະຕິເສດການອະນຸຍາດນີ້, ຄຸນສົມບັດໃຊ້ງານພື້ນຖານຂອງອຸປະກອນຂອງທ່ານອາດຈະບໍ່ເຮັດໜ້າທີ່ຕາມທີ່ກຳນົດໄວ້."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ບັງຄັບໃຊ້ຕາມນະໂຍບາຍແລ້ວ"</string> - <string name="loading" msgid="7811651799620593731">"ກຳລັງໂຫລດ..."</string> - <string name="all_permissions" msgid="5156669007784613042">"ທຸກການອະນຸຍາດ"</string> - <string name="other_permissions" msgid="2016192512386091933">"ຄວາມສາມາດອື່ນຂອງແອັບ"</string> - <string name="permission_request_title" msgid="1204446718549121199">"ການຮ້ອງຂໍການອະນຸຍາດ"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"ກວດພົບການວາງຊ້ອນໜ້າຈໍແລ້ວ"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ເພື່ອປ່ຽນແປງການຕັ້ງຄ່າການອະນຸຍາດນີ້, ກ່ອນອື່ນໝົດທ່ານຕ້ອງປິດການວາງຊ້ອນໜ້າຈໍຈາກແອັບການຕັ້ງຄ່າ"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ເປີດການຕັ້ງຄ່າ"</string> </resources> diff --git a/res/values-lt-television/strings.xml b/res/values-lt-television/strings.xml index a1c02a16..d83c56de 100644 --- a/res/values-lt-television/strings.xml +++ b/res/values-lt-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Atmesti ir daugiau neklausti"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Tai vėliau galėsite pakeisti skiltyje „Nustatymai > Programos“"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Rodyti sistemos programas"</string> </resources> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index c8897229..7ad1285c 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -96,15 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Daugiau niekada neklausti"</string> <string name="no_permissions" msgid="3210542466245591574">"Nėra jokių leidimų"</string> <string name="additional_permissions" msgid="6667573114240111763">"Papildomi leidimai"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Dar <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ši programa skirta senesnės versijos „Android“. Uždraudus leidimą ji gali nebeveikti kaip numatyta."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Rodyti pasenusius"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Slėpti pasenusius"</string> <string name="default_permission_description" msgid="4992892207044156668">"atlieka nežinomą veiksmą"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Leidžiama programų: <xliff:g id="COUNT_0">%1$d</xliff:g> iš <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Leidžiama programų: <xliff:g id="COUNT_0">%d</xliff:g> iš <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Rodyti sistemą"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Slėpti sistemą"</string> <string name="permission_title" msgid="6495415273398916381">"Leidimai: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Vietovės nustatymai"</string> <string name="location_warning" msgid="8778701356292735971">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ yra šio įrenginio vietovės paslaugų teikėjas. Vietovės pasiekiamumą galima keisti vietovės nustatymuose."</string> <string name="system_warning" msgid="7103819124542305179">"Jei uždrausite šį leidimą, pagrindinės įrenginio funkcijos gali nebeveikti, kaip numatyta."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Reikalaujama pagal politikos nuostatas"</string> - <string name="loading" msgid="7811651799620593731">"Įkeliama..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Visi leidimai"</string> - <string name="other_permissions" msgid="2016192512386091933">"Kitos programos galimybės"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Leidimo užklausa"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Aptikta ekrano perdanga"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Jei norite pakeisti šį leidimo nustatymą, pirmiausia turite išjungti ekrano perdangą skiltyje „Nustatymai > Programos“"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Atidaryti nustatymus"</string> </resources> diff --git a/res/values-lv-television/strings.xml b/res/values-lv-television/strings.xml index d42eebe4..4e71d7d1 100644 --- a/res/values-lv-television/strings.xml +++ b/res/values-lv-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Noraidīt un vairs nejautāt"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vēlāk varat veikt izmaiņas sadaļā Iestatījumi > Lietotnes."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>. no <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Rādīt sistēmas lietotnes"</string> </resources> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 27b71cd0..d97f51e0 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -96,14 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Vairs nejautāt"</string> <string name="no_permissions" msgid="3210542466245591574">"Nav atļauju"</string> <string name="additional_permissions" msgid="6667573114240111763">"Papildu atļaujas"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="zero">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Vēl <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Šī lietotne ir paredzēta vecākai Android versijai. Ja noraidīsiet atļauju, iespējams, netiks nodrošināta paredzētā lietotnes darbība."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Rādīt mantotās atļaujas"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Slēpt mantotās atļaujas"</string> <string name="default_permission_description" msgid="4992892207044156668">"veikt nezināmu darbību"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Atļautas <xliff:g id="COUNT_0">%1$d</xliff:g> lietotnes no <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Atļautas <xliff:g id="COUNT_0">%d</xliff:g> lietotnes no <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Rādīt sistēmas lietotnes"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Slēpt sistēmas lietotnes"</string> <string name="permission_title" msgid="6495415273398916381">"Lietotnes <xliff:g id="PERMISSION">%1$s</xliff:g> atļaujas"</string> @@ -111,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Atrašanās vietas iestatījumi"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> nodrošina šai ierīcei atrašanās vietu pakalpojumus. Piekļuves iestatījumus atrašanās vietas datiem var mainīt atrašanās vietas iestatījumos."</string> <string name="system_warning" msgid="7103819124542305179">"Ja nepiešķirsiet šo atļauju, ierīces pamatfunkcijas, iespējams, vairs nedarbosies, kā paredzēts."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Īstenota saskaņā ar politiku"</string> - <string name="loading" msgid="7811651799620593731">"Notiek ielāde..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Visas atļaujas"</string> - <string name="other_permissions" msgid="2016192512386091933">"Citas lietotnes atļaujas"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Atļaujas pieprasījums"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Konstatēts ekrāna pārklājums"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Lai mainītu šo atļaujas iestatījumu, vispirms sadaļā “Iestatījumi un lietotnes” izslēdziet ekrāna pārklājumu."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Atvērt iestatījumus"</string> </resources> diff --git a/res/values-mk-rMK-television/strings.xml b/res/values-mk-rMK-television/strings.xml index 74425713..6722f1e2 100644 --- a/res/values-mk-rMK-television/strings.xml +++ b/res/values-mk-rMK-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Одбиј и не прашувај повторно"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Може да го промените ова подоцна во Поставки > Апликации"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Прикажи ги системските апликации"</string> </resources> diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index 8cc487b2..61792c92 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Никогаш не прашувај повторно"</string> <string name="no_permissions" msgid="3210542466245591574">"Нема дозволи"</string> <string name="additional_permissions" msgid="6667573114240111763">"Дополнителни дозволи"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Уште <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Уште <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Уште <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Оваа апликација е дизајнирана за постара верзија на Android. Одбивањето на дозволата може да предизвика веќе да не функционира како што треба."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Прикажи наследено"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Сокриј наследено"</string> <string name="default_permission_description" msgid="4992892207044156668">"изврши непознато дејство"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Дозволени се <xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g> апликации"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Дозволени се <xliff:g id="COUNT_0">%d</xliff:g> од <xliff:g id="COUNT_1">%d</xliff:g> апликации"</string> <string name="menu_show_system" msgid="6773743421743728921">"Прикажи систем"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Сокриј систем"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> дозволи"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Поставки за локација"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> е давател на услуги според локација за овој уред. Пристапот до локацијата може да се смени од Поставките за локација."</string> <string name="system_warning" msgid="7103819124542305179">"Ако ја одбиете оваа дозвола, основните функции на вашиот уред можеби веќе нема да функционираат како што треба."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Наложено од политиката"</string> - <string name="loading" msgid="7811651799620593731">"Се вчитува..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Сите дозволи"</string> - <string name="other_permissions" msgid="2016192512386091933">"Други можности на апликацијата"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Барање дозвола"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Откривме преклопување на екранот"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"За да ја измените оваа поставка за дозвола, прво мора да го исклучите преклопувањето на екранот од Поставки > Апликации"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Отвори поставки"</string> </resources> diff --git a/res/values-ml-rIN-television/strings.xml b/res/values-ml-rIN-television/strings.xml index 284fe16d..b582ffe2 100644 --- a/res/values-ml-rIN-television/strings.xml +++ b/res/values-ml-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"നിരസിക്കുക, വീണ്ടും ആവശ്യപ്പെടരുത്"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"പിന്നീട് നിങ്ങൾക്കിത് ക്രമീകരണവും ആപ്സും എന്നതിൽ മാറ്റാനാകും"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"സിസ്റ്റം ആപ്സ് കാണിക്കുക"</string> </resources> diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 55a3d09a..9a5ee064 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"അനുവദിക്കുക"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"നിരസിക്കുക"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനെ <xliff:g id="ACTION">%2$s</xliff:g> എന്നതിന് അനുവദിക്കണോ?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനെ <xliff:g id="ACTION">%2$s</xliff:g> ചെയ്യാൻ അനുവദിക്കണോ?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ആപ്സ്"</string> <string name="app_permissions" msgid="3146758905824597178">"ആപ്പ് അനുമതികൾ"</string> <string name="never_ask_again" msgid="3798895821072102967">"വീണ്ടും ചോദിക്കരുത്"</string> <string name="no_permissions" msgid="3210542466245591574">"അനുമതികൾ ഇല്ല"</string> <string name="additional_permissions" msgid="6667573114240111763">"അധിക അനുമതികൾ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> എണ്ണം കൂടി</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> എണ്ണം കൂടി</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> എണ്ണം കൂടി"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ഈ ആപ്പ് Android-ന്റെ പഴയ പതിപ്പിനായാണ് രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. അനുമതി നിരസിക്കുന്നത് തുടർന്ന് ഉദ്ദേശിച്ചവിധം പ്രവർത്തിക്കാതിരിക്കാനിടയാക്കുന്നു."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ലെഗസി കാണിക്കുക"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ലെഗസി മറയ്ക്കുക"</string> <string name="default_permission_description" msgid="4992892207044156668">"ഒരു അജ്ഞാതപ്രവർത്തനം നടത്തുക"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> ആപ്പ്സ് അനുവദനീയം"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> / <xliff:g id="COUNT_1">%d</xliff:g> ആപ്പ്സ് അനുവദനീയം"</string> <string name="menu_show_system" msgid="6773743421743728921">"സിസ്റ്റം കാണിക്കുക"</string> <string name="menu_hide_system" msgid="7595471742649432977">"സിസ്റ്റം മറയ്ക്കുക"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> അനുമതികൾ"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ലൊക്കേഷൻ ക്രമീകരണം"</string> <string name="location_warning" msgid="8778701356292735971">"ഈ ഉപകരണത്തിനായുള്ള ലൊക്കേഷൻ സേവനങ്ങളുടെ ദാതാവ് <xliff:g id="APP_NAME">%1$s</xliff:g> ആണ്. ലൊക്കേഷൻ ക്രമീകരണത്തിൽ നിന്ന് ലൊക്കേഷൻ ആക്സസ് പരിഷ്കരിക്കാവുന്നതാണ്."</string> <string name="system_warning" msgid="7103819124542305179">"നിങ്ങൾ ഈ അനുമതി നിഷേധിക്കുന്നുവെങ്കിൽ, നിങ്ങളുടെ ഉപകരണത്തിന്റെ അടിസ്ഥാന ഫീച്ചറുകൾ ഉദ്ദേശിച്ചത് പോലെ തുടർന്ന് പ്രവർത്തിച്ചേക്കില്ല."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"നയം മുഖേനെ നടപ്പിലാക്കിയത്"</string> - <string name="loading" msgid="7811651799620593731">"ലോഡുചെയ്യുന്നു..."</string> - <string name="all_permissions" msgid="5156669007784613042">"എല്ലാ അനുമതികളും"</string> - <string name="other_permissions" msgid="2016192512386091933">"മറ്റ് ആപ്പ് ശേഷികൾ"</string> - <string name="permission_request_title" msgid="1204446718549121199">"അനുമതി അഭ്യർത്ഥന"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"സ്ക്രീൻ ഓവർലേ കണ്ടെത്തി"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ഈ അനുമതി ക്രമീകരണം മാറ്റുന്നതിന്, ക്രമീകരണം > ആപ്സ് എന്നതിൽ നിന്ന് നിങ്ങളാദ്യം സ്ക്രീൻ ഓവർലേ ഓഫാക്കേണ്ടതാണ്"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ക്രമീകരണം തുറക്കുക"</string> </resources> diff --git a/res/values-mn-rMN-television/strings.xml b/res/values-mn-rMN-television/strings.xml index f97debf8..fdb04866 100644 --- a/res/values-mn-rMN-television/strings.xml +++ b/res/values-mn-rMN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Taтгалзаад дахин бүү асуугаарай"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Та дараа үүнийг Toхиргоо & Апп дотроос солих боломжтой"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Системийн апп-ыг харуулах"</string> </resources> diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 3bce33e9..071e9b50 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Дахиад хэзээ ч битгий асуу"</string> <string name="no_permissions" msgid="3210542466245591574">"Зөвшөөрөлгүй байна"</string> <string name="additional_permissions" msgid="6667573114240111763">"Нэмэлт зөвшөөрөл"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> бусад</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> бусад</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> бусад"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Энэхүү аппыг нь Android-ын хуучин хувилбарт зориулсан. Зөвшөөрлийг үгүйсгэх нь цаашид ажиллахгүй болгож болно."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Хуучин зөвшөөрлийг харуулах"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Хуучин зөвшөөрлийг нуух"</string> <string name="default_permission_description" msgid="4992892207044156668">"Танигдаагүй үйлдлийг гүйцэтгэх"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g>-аас <xliff:g id="COUNT_0">%1$d</xliff:g> апп-ыг зөвшөөрдөг"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g>-аас <xliff:g id="COUNT_0">%d</xliff:g> апп-ыг зөвшөөрдөг"</string> <string name="menu_show_system" msgid="6773743421743728921">"Системийг харуулах"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Системийг нуух"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> зөвшөөрөл"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Байршлын тохиргоо"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь энэ төхөөрөмжийн байршлын үйлчилгээ үзүүлэгч юм. Байршилд хандалтыг байршлын тохиргоо хэсгээс өөрчилж болно."</string> <string name="system_warning" msgid="7103819124542305179">"Хэрэв та энэ зөвшөөрөлд татгалзсан тохиолдолд таны төхөөрөмжийн үндсэн функц нь алдаатай ажиллаж магадгүй."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Бодлогын дагуу хэрэгжсэн"</string> - <string name="loading" msgid="7811651799620593731">"Ачаалж байна..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Бүх зөвшөөрөл"</string> - <string name="other_permissions" msgid="2016192512386091933">"Бусад апп-ын боломж"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Зөвшөөрлийн хүсэлт"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Дэлгэцийн давхарга илрүүллээ"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Зөвшөөрлийн тохиргоог өөрчлөхийн тулд, эхлээд Тохиргоо ба Апп хэсгээс дэлгэцийн давхаргыг унтраана уу."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Тохиргоог нээх"</string> </resources> diff --git a/res/values-mr-rIN-television/strings.xml b/res/values-mr-rIN-television/strings.xml index a4b37b02..d21a785c 100644 --- a/res/values-mr-rIN-television/strings.xml +++ b/res/values-mr-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"नकार द्या आणि पुन्हा विचारू नका"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"आपण हे नंतर सेटिंग्ज आणि अॅप्स मध्ये बदलू शकता"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"सिस्टीम अॅप्स दर्शवा"</string> </resources> diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index b4a3049f..ac9ea21b 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"पुन्हा कधीही विचारू नका"</string> <string name="no_permissions" msgid="3210542466245591574">"परवानग्या नाहीत"</string> <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त परवानग्या"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">आणखी <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">आणखी <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> अधिक"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"हा अॅप Android च्या जुन्या आवृत्तीसाठी डिझाइन करण्यात आला होता. परवानगी नाकारल्यामुळे तो यापुढे उद्देशाप्रमाणे कार्य करणार नाही."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"परंपरागत दर्शवा"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"परंपरागत लपवा"</string> <string name="default_permission_description" msgid="4992892207044156668">"अज्ञात क्रिया करा"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> पैकी <xliff:g id="COUNT_0">%1$d</xliff:g> अॅप्सना अनुमती दिली"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> पैकी <xliff:g id="COUNT_0">%d</xliff:g> अॅप्सना अनुमती दिली"</string> <string name="menu_show_system" msgid="6773743421743728921">"सिस्टम दर्शवा"</string> <string name="menu_hide_system" msgid="7595471742649432977">"सिस्टीम लपवा"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> परवानग्या"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिंग्ज"</string> <string name="location_warning" msgid="8778701356292735971">"या डिव्हाइससाठी <xliff:g id="APP_NAME">%1$s</xliff:g> स्थान सेवांचा प्रदाता आहे. स्थान प्रवेश स्थान सेटिंग्ज वरून सुधारित केला जाऊ शकतो."</string> <string name="system_warning" msgid="7103819124542305179">"आपण ही परवानगी नाकारल्यास, आपल्या डिव्हाइसची मुलभूत वैशिष्ट्ये अपेक्षित असल्याप्रमाणे कदाचित कार्य करू शकणार नाहीत."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"धोरणाद्वारे सक्ती केली"</string> - <string name="loading" msgid="7811651799620593731">"लोड करत आहे..."</string> - <string name="all_permissions" msgid="5156669007784613042">"सर्व परवानग्या"</string> - <string name="other_permissions" msgid="2016192512386091933">"अन्य अॅप क्षमता"</string> - <string name="permission_request_title" msgid="1204446718549121199">"परवानगीची विनंती"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रीन आच्छादन आढळले"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"हे परवानगी सेटिंग बदलण्यासाठी, आपल्याला सेटिंग्ज > Apps मधून स्क्रीन आच्छादन बंद करावे लागेल"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिंग्ज उघडा"</string> </resources> diff --git a/res/values-ms-rMY-television/strings.xml b/res/values-ms-rMY-television/strings.xml index 0ea0cde4..7b1bd3c6 100644 --- a/res/values-ms-rMY-television/strings.xml +++ b/res/values-ms-rMY-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Tolak dan jangan tanya lagi"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Anda boleh menukar ini nanti dalam Tetapan > Apl"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Tunjukkan apl sistem"</string> </resources> diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 1dbe2a5c..c80665f4 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Jangan tanya lagi"</string> <string name="no_permissions" msgid="3210542466245591574">"Tiada kebenaran"</string> <string name="additional_permissions" msgid="6667573114240111763">"Kebenaran tambahan"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lagi</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lagi</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> lagi"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Apl ini direka bentuk untuk versi Android yang lebih lama. Tindakan menafikan kebenaran boleh menyebabkannya tidak berfungsi seperti yang dimaksudkan lagi."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Tunjukkan yang lama"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Sembunyikan yang lama"</string> <string name="default_permission_description" msgid="4992892207044156668">"laksanakan tindakan yang tidak diketahui"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> daripada <xliff:g id="COUNT_1">%2$d</xliff:g> apl dibenarkan"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> daripada <xliff:g id="COUNT_1">%d</xliff:g> apl dibenarkan"</string> <string name="menu_show_system" msgid="6773743421743728921">"Tunjukkan sistem"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Sembunyikan sistem"</string> <string name="permission_title" msgid="6495415273398916381">"Kebenaran <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Tetapan Lokasi"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ialah pembekal perkhidmatan lokasi untuk peranti ini. Akses lokasi boleh diubah suai daripada tetapan lokasi."</string> <string name="system_warning" msgid="7103819124542305179">"Jika anda tolak kebenaran ini, ciri asas peranti anda mungkin tidak berfungsi seperti yang dimaksudkan lagi."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Dikuatkuasakan oleh dasar"</string> - <string name="loading" msgid="7811651799620593731">"Memuatkan…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Semua kebenaran"</string> - <string name="other_permissions" msgid="2016192512386091933">"Keupayaan apl yang lain"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Permintaan kebenaran"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Tindanan skrin dikesan"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Untuk menukar tetapan kebenaran ini, anda perlu mematikan tindanan skrin daripada Tetapan > Apl terlebih dahulu"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Buka tetapan"</string> </resources> diff --git a/res/values-my-rMM-television/strings.xml b/res/values-my-rMM-television/strings.xml index a950b7ea..30d274d7 100644 --- a/res/values-my-rMM-television/strings.xml +++ b/res/values-my-rMM-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ငြင်းဆိုပြီး ထပ်မံ မမေးပါနှင့်"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"နောင်တွင် ဤသည်အား ဆက်တင်များ > App များတွင် ပြင်နိုင်၏"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"စနစ်အပ်ဖ်များ ပြသရန်"</string> </resources> diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index 401f7280..7489872e 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ခွင့်ပြုသည်"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ငြင်းပယ်သည်"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> အား <xliff:g id="ACTION">%2$s</xliff:g> ခွင့်ပြုသလား။"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> အား <xliff:g id="ACTION">%2$s</xliff:g> လုပ်ခွင့်ပြုသလား?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Appများ"</string> <string name="app_permissions" msgid="3146758905824597178">"App ခွင့်ပြုချက်များ"</string> <string name="never_ask_again" msgid="3798895821072102967">"ထပ်မမေးရန်"</string> <string name="no_permissions" msgid="3210542466245591574">"ခွင့်ပြုချက်မရှိ"</string> <string name="additional_permissions" msgid="6667573114240111763">"ထပ်တိုး ခွင့်ပြုချက်များ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"> နောက်ထပ် <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one"> နောက်ထပ် <xliff:g id="COUNT_0">%1$d</xliff:g> </item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"နောက်ထပ် <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ဤapp အား Android ၏ ဗားရှင်းဟောင်းအတွက် ပုံဆွဲရေးဆွဲထား၏။ ခွင့်ပြုချက်ပေးရန် ငြင်းဆိုပါက ရည်ရွယ်ထားသကဲ့သို့ ဆောင်ရွက်လိမ့်မည် မဟုတ်ပါ။"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"အဟောင်းများ ပြရန်"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"အဟောင်းများ ဖျောက်ရန်"</string> <string name="default_permission_description" msgid="4992892207044156668">"အမျိုးအမည်မသိ ဆောင်ရွက်ချက်တစ်ခု လုပ်ရန်"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> app များ ခွင့်ပြုခဲ့၏"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> / <xliff:g id="COUNT_1">%d</xliff:g> app များ ခွင့်ပြုခဲ့၏"</string> <string name="menu_show_system" msgid="6773743421743728921">"စနစ်ကိုပြသရန်"</string> <string name="menu_hide_system" msgid="7595471742649432977">"စနစ်ကို ဖျောက်မည်"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ခွင့်ပြုချက်များ"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"တည်နေရာ ဆက်တင်များ"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် ဤစက်ပစ္စည်းအတွက် တည်နေရာ ဝန်ဆောင်မှုများ ထုတ်ပေးသူဖြစ်သည်။ တည်နေရာ အသုံးပြုမှုကို တည်နေရာချိန်ညှိမှုများတွင် ပြုပြင်နိုင်သည်။"</string> <string name="system_warning" msgid="7103819124542305179">"ဤခွင့်ပြုချက်အား သင် ငြင်းဆိုပါက၊ သင့်စက်ကိရိယာ၏ အခြေခံလုပ်ဆောင်ချက်များသည် ရည်ရွယ်ထားသကဲ့သို့ အလုပ်လုပ်မည် မဟုတ်ပါ။"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"မူဝါဒအားဖြင့်ပြဌာန်းရန်"</string> - <string name="loading" msgid="7811651799620593731">"တင်နေ…"</string> - <string name="all_permissions" msgid="5156669007784613042">"ခွင့်ပြုချက်များ အားလုံး"</string> - <string name="other_permissions" msgid="2016192512386091933">"အခြားအပ်ဖ်၏ စွမ်းရည်များ"</string> - <string name="permission_request_title" msgid="1204446718549121199">"ခွင့်ပြုချက် တောင်းခံမှု"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"မျက်နှာပြင် ထပ်ပေးမှုကို ရှာတွေ့ခဲ့"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ဒီခွင့်ပြုချက် ဆက်တင်ကို ပြောင်းရန်၊ သင်ဟာ ဦးစွာ ဆက်တင်များ > Appများ ထဲတွင် မျက်နှာပြင် ထပ်ပေးမှုကို ပိတ်လိုက်ရန် လိုမယ်"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ဆက်တင်းများ ဖွင့်ရန်"</string> </resources> diff --git a/res/values-nb-television/strings.xml b/res/values-nb-television/strings.xml index df32fa97..1aace13d 100644 --- a/res/values-nb-television/strings.xml +++ b/res/values-nb-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Avvis, og ikke spør igjen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan endre dette senere i Innstillinger > Apper"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Vis systemapper"</string> </resources> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 7d72c921..a06fc6d2 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Spør aldri igjen"</string> <string name="no_permissions" msgid="3210542466245591574">"Ingen tillatelser"</string> <string name="additional_permissions" msgid="6667573114240111763">"Flere tillatelser"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> til</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> til</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> til"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Denne appen er designet for en eldre versjon av Android. Hvis du nekter å gi tillatelse, kan det føre til at den ikke lenger fungerer etter hensikten."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Vis den eldre versjonen"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Skjul den eldre versjonen"</string> <string name="default_permission_description" msgid="4992892207044156668">"utfør en ukjent handling"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> av <xliff:g id="COUNT_1">%2$d</xliff:g> apper er tillatt"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> av <xliff:g id="COUNT_1">%d</xliff:g> apper er tillatt"</string> <string name="menu_show_system" msgid="6773743421743728921">"Vis systemet"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Skjul systemet"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> tillatelser"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Posisjonsinnstillinger"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> er en leverandør av posisjonstjenester for denne enheten. Tilgang til posisjon kan endres fra posisjonsinnstillingene."</string> <string name="system_warning" msgid="7103819124542305179">"Hvis du ikke gir denne tillatelsen, kan grunnleggende funksjoner på enheten slutte å fungere som de skal."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Påkrevd ifølge retningslinjene"</string> - <string name="loading" msgid="7811651799620593731">"Laster inn …"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alle tillatelser"</string> - <string name="other_permissions" msgid="2016192512386091933">"Andre appfunksjoner"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Forespørsel om tillatelse"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Skjermoverlegg oppdaget"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"For å endre denne tillatelsesinnstilingen må du først slå av skjermoverlegget fra Innstillinger > Apper"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Åpne innstillingene"</string> </resources> diff --git a/res/values-ne-rNP-television/strings.xml b/res/values-ne-rNP-television/strings.xml index f6c9f6b5..44b9c5ec 100644 --- a/res/values-ne-rNP-television/strings.xml +++ b/res/values-ne-rNP-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"अस्वीकृत गर्नुहोस् र फेरि नसोध्नुहोस्"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"तपाईँ यसलाई पछि सेटिङ > अनुप्रयोगमा बदल्न सक्नु हुन्छ"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"प्रणाली अनुप्रयोगहरू देखाउनुहोस्"</string> </resources> diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 4a3c6708..651b0d66 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"फेरि कहिल्यै नसोध्नुहोस्"</string> <string name="no_permissions" msgid="3210542466245591574">"कुनै अनुमतिहरू छैनन्"</string> <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त अनुमतिहरू"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> थप</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> थप</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> थप"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"यो अनुप्रयोग Android को पुरानो संस्करणका लागि डिजाइन गरिएको थियो। अनुमति अस्वीकृत गर्नाले यसले चाहिएको जस्तो कार्य नगर्न सक्छ।"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"लिगेसी देखाउनुहोस्"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"लिगेसी लुकाउनुहोस्"</string> <string name="default_permission_description" msgid="4992892207044156668">"एउटा अज्ञात कार्य गर्नुहोस्"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> को <xliff:g id="COUNT_0">%1$d</xliff:g> अनुप्रयोगहरूलाई अनुमति छ"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> को <xliff:g id="COUNT_0">%d</xliff:g> अनुप्रयोगहरूलाई अनुमति छ"</string> <string name="menu_show_system" msgid="6773743421743728921">"प्रणाली देखाउनुहोस्"</string> <string name="menu_hide_system" msgid="7595471742649432977">"प्रणाली लुकाउनुहोस्"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> अनुमतिहरु"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिङहरू"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> यो यन्त्रका लागि स्थान सेवाहरूको एउटा प्रदायक हो। स्थान पहुँच स्थान सेटिङहरूबाट परिमार्जन गर्न सकिन्छ।"</string> <string name="system_warning" msgid="7103819124542305179">"तपाईँले यो अनुमति अस्वीकार गर्नुभयो भने तपाईँको यन्त्रका मूल विशेषताहरू अब चाहेअनुसार कार्य नगर्न सक्छ।"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"नीतिद्वारा लागू गरियो"</string> - <string name="loading" msgid="7811651799620593731">"लोड हुँदैछ..."</string> - <string name="all_permissions" msgid="5156669007784613042">"सबै अनुमतिहरू"</string> - <string name="other_permissions" msgid="2016192512386091933">"अन्य अनुप्रयोग क्षमताहरू"</string> - <string name="permission_request_title" msgid="1204446718549121199">"अनुमति अनुरोध"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रिन ओभरले पत्ता लाग्यो"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"यो अनुमति सेटिङ परिवर्तन गर्न, तपाईँले पहिला सेटिङ अनुप्रयोगबाट स्क्रिन ओभरले बन्द गर्नु पर्दछ।"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिङहरू खोल्नुहोस्"</string> </resources> diff --git a/res/values-nl-television/strings.xml b/res/values-nl-television/strings.xml index 671d58e3..c998aa16 100644 --- a/res/values-nl-television/strings.xml +++ b/res/values-nl-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Weigeren en niet meer vragen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"U kunt dit later wijzigen in \'Instellingen\' > \'Apps\'"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Systeem-apps weergeven"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 72fc07dd..d8573c09 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -27,37 +27,37 @@ <string name="install_done" msgid="3682715442154357097">"App geïnstalleerd."</string> <string name="install_confirm_question" msgid="7295206719219043890">"Wilt u deze app installeren? Deze krijgt toegang tot:"</string> <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Wilt u deze app installeren? Hiervoor is geen speciale toegang vereist."</string> - <string name="install_confirm_question_update" msgid="4624159567361487964">"Wilt u een update voor deze bestaande app installeren? Je huidige gegevens gaan niet verloren. De bijgewerkte app krijgt toegang tot:"</string> - <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Wilt u een update van deze ingebouwde app installeren? Je huidige gegevens gaan niet verloren. De bijgewerkte app krijgt toegang tot:"</string> - <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Wilt u een update voor deze bestaande app installeren? Je huidige gegevens gaan niet verloren. Hiervoor is geen speciale toegang vereist."</string> - <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Wilt u een update voor deze ingebouwde app installeren? Je huidige gegevens gaan niet verloren. Hiervoor is geen speciale toegang vereist."</string> + <string name="install_confirm_question_update" msgid="4624159567361487964">"Wilt u een update voor deze bestaande app installeren? Uw huidige gegevens gaan niet verloren. De bijgewerkte app krijgt toegang tot:"</string> + <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Wilt u een update van deze ingebouwde app installeren? Uw huidige gegevens gaan niet verloren. De bijgewerkte app krijgt toegang tot:"</string> + <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Wilt u een update voor deze bestaande app installeren? Uw huidige gegevens gaan niet verloren. Hiervoor is geen speciale toegang vereist."</string> + <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Wilt u een update voor deze ingebouwde app installeren? Uw huidige gegevens gaan niet verloren. Hiervoor is geen speciale toegang vereist."</string> <string name="install_failed" msgid="6579998651498970899">"App niet geïnstalleerd."</string> <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Het pakket lijkt beschadigd."</string> <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Een bestaand pakket met dezelfde naam en een conflicterende handtekening is al geïnstalleerd."</string> <string name="install_failed_older_sdk" msgid="7947925824732917665">"Het pakket werkt alleen met nieuwe versies van Android."</string> - <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Deze app is niet compatibel met je tablet."</string> - <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Deze app is niet compatibel met je tv."</string> - <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Deze app is niet compatibel met je telefoon."</string> + <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Deze app is niet compatibel met uw tablet."</string> + <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Deze app is niet compatibel met uw tv."</string> + <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Deze app is niet compatibel met uw telefoon."</string> <string name="install_failed_file_not_found" msgid="1958430133396322619">"Het opgegeven pakket is verwijderd voordat de installatie was voltooid."</string> <string name="install_failed_verify_failed" msgid="5567372439890440205">"De verificatie van het pakket is niet voltooid. Het pakket kan niet worden geïnstalleerd."</string> <string name="install_failed_verify_timeout" msgid="7083090219270140373">"Tijdens het verifiëren van dit pakket is een time-out opgetreden. Installeer het pakket later."</string> - <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op je tablet."</string> - <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op je tv."</string> - <string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op je telefoon."</string> + <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op uw tablet."</string> + <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op uw tv."</string> + <string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd op uw telefoon."</string> <string name="launch" msgid="4826921505917605463">"Openen"</string> <string name="unknown_apps_dlg_title" msgid="2855558586206583032">"De installatie is geblokkeerd"</string> - <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Voor de veiligheid blokkeert je tablet de installatie van apps uit onbekende bronnen."</string> - <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Om veiligheidsredenen is je tv ingesteld om de installatie te blokkeren van apps die zijn verkregen van onbekende bronnen."</string> - <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Voor de veiligheid blokkeert je telefoon de installatie van apps uit onbekende bronnen."</string> - <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Je beheerder staat de installatie van apps afkomstig van onbekende bronnen niet toe."</string> + <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Voor de veiligheid blokkeert uw tablet de installatie van apps uit onbekende bronnen."</string> + <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Om veiligheidsredenen is uw tv ingesteld om de installatie te blokkeren van apps die zijn verkregen van onbekende bronnen."</string> + <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Voor de veiligheid blokkeert uw telefoon de installatie van apps uit onbekende bronnen."</string> + <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Uw beheerder staat de installatie van apps afkomstig van onbekende bronnen niet toe."</string> <string name="ok" msgid="3468756155452870475">"OK"</string> <string name="settings" msgid="6743583734099755409">"Instellingen"</string> <string name="allow_source_dlg_title" msgid="7568985073502399415">"Nieuwe bron voor apps"</string> <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil andere apps installeren.\n\nWilt u dit nu en in de toekomst toestaan?"</string> <string name="manage_applications" msgid="4033876279091996596">"Apps beheren"</string> <string name="dlg_app_replacement_title" msgid="1232230739563820951">"App vervangen?"</string> - <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"De app die u installeert, vervangt een andere app.\n\nAl je eerdere gebruikersgegevens worden opgeslagen."</string> - <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Dit is een systeemapp.\n\nAl je eerdere gebruikersgegevens worden opgeslagen."</string> + <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"De app die u installeert, vervangt een andere app.\n\nAl uw eerdere gebruikersgegevens worden opgeslagen."</string> + <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Dit is een systeemapp.\n\nAl uw eerdere gebruikersgegevens worden opgeslagen."</string> <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Geen ruimte beschikbaar"</string> <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden geïnstalleerd. Maak ruimte vrij en probeer het opnieuw."</string> <string name="dlg_ok" msgid="6944357727705699232">"OK"</string> @@ -75,8 +75,8 @@ <string name="uninstall_failed" msgid="631122574306299512">"Verwijdering mislukt."</string> <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Kan niet verwijderen omdat dit pakket een actieve apparaatbeheerder is."</string> <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Kan dit pakket niet verwijderen omdat het een actieve apparaatbeheerder is voor de gebruiker <xliff:g id="USERNAME">%1$s</xliff:g>."</string> - <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Deze app is vereist voor je werkprofiel en kan niet worden verwijderd."</string> - <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Deze app is vereist door je apparaatbeheerder en kan niet worden verwijderd."</string> + <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Deze app is vereist voor uw werkprofiel en kan niet worden verwijderd."</string> + <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Deze app is vereist door uw apparaatbeheerder en kan niet worden verwijderd."</string> <string name="manage_device_administrators" msgid="891392489300312370">"Apparaatbeheerders beheren"</string> <string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden verwijderd."</string> <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Parseerfout"</string> @@ -92,30 +92,21 @@ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> van <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="permission_warning_template" msgid="5209102765005869454">"Toestaan dat <xliff:g id="APP_NAME">%1$s</xliff:g> het volgende doet: <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string> - <string name="app_permissions" msgid="3146758905824597178">"App-machtigingen"</string> + <string name="app_permissions" msgid="3146758905824597178">"App-rechten"</string> <string name="never_ask_again" msgid="3798895821072102967">"Niet meer vragen"</string> <string name="no_permissions" msgid="3210542466245591574">"Geen rechten"</string> <string name="additional_permissions" msgid="6667573114240111763">"Aanvullende rechten"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Nog <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Nog <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Nog <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Deze app is ontworpen voor een oudere versie van Android. Als u geen toestemming geeft, kan de app mogelijk niet functioneren zoals is bedoeld."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Verouderde weergeven"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Verouderde verbergen"</string> <string name="default_permission_description" msgid="4992892207044156668">"een onbekende actie uitvoeren"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Verleend aan <xliff:g id="COUNT_0">%1$d</xliff:g> van <xliff:g id="COUNT_1">%2$d</xliff:g> apps"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Verleend aan <xliff:g id="COUNT_0">%d</xliff:g> van <xliff:g id="COUNT_1">%d</xliff:g> apps"</string> <string name="menu_show_system" msgid="6773743421743728921">"Systeem-apps weergeven"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Systeem-apps verbergen"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> rechten"</string> <string name="no_apps" msgid="1965493419005012569">"Geen apps"</string> <string name="location_settings" msgid="1774875730854491297">"Locatie-instellingen"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is een leverancier van locatieservices voor dit apparaat. Locatietoegang kan worden aangepast via de locatie-instellingen."</string> - <string name="system_warning" msgid="7103819124542305179">"Als u deze toestemming weigert, functioneren basisfuncties van je apparaat mogelijk niet meer zoals bedoeld."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Afgedwongen door beleid"</string> - <string name="loading" msgid="7811651799620593731">"Laden…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alle rechten"</string> - <string name="other_permissions" msgid="2016192512386091933">"Andere app-mogelijkheden"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Toestemmingsverzoek"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Schermoverlay gedetecteerd"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Als u deze instelling voor rechten wilt wijzigen, moet u eerst de schermoverlay uitschakelen via \'Instellingen\' > \'Apps\'"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Instellingen openen"</string> + <string name="system_warning" msgid="7103819124542305179">"Als u deze toestemming weigert, functioneren basisfuncties van uw apparaat mogelijk niet meer zoals bedoeld."</string> </resources> diff --git a/res/values-pa-rIN-television/strings.xml b/res/values-pa-rIN-television/strings.xml index cebc66fe..775e320f 100644 --- a/res/values-pa-rIN-television/strings.xml +++ b/res/values-pa-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ਅਸਵੀਕਾਰ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਨਾ ਪੁੱਛੋ"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ > ਐਪਸ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"ਸਿਸਟਮ ਐਪਸ ਦਿਖਾਓ"</string> </resources> diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml index 772258fb..6c969491 100644 --- a/res/values-pa-rIN/strings.xml +++ b/res/values-pa-rIN/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"ਦੁਬਾਰਾ ਕਦੇ ਨਾ ਪੁੱਛਣਾ"</string> <string name="no_permissions" msgid="3210542466245591574">"ਕੋਈ ਅਨੁਮਤੀਆਂ ਨਹੀਂ ਹਨ"</string> <string name="additional_permissions" msgid="6667573114240111763">"ਅਤਿਰਿਕਤ ਅਨੁਮਤੀਆਂ"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਹੋਰ</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਹੋਰ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> ਹੋਰ"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ਇਹ ਐਪ Android ਦੇ ਕਿਸੇ ਪੁਰਾਣੇ ਸੰਸਕਰਣ ਲਈ ਬਣਾਈ ਗਈ ਸੀ। ਅਨੁਮਤੀ ਨੂੰ ਇਨਕਾਰ ਕਰਨਾ ਇਸਦੇ ਉਦੇਸ਼ਿਤ ਫੰਕਸ਼ਨ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰ ਸਕਦਾ ਹੈ।"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ਵਿਰਾਸਤ ਦਿਖਾਓ"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ਵਿਰਾਸਤ ਲੁਕਾਓ"</string> <string name="default_permission_description" msgid="4992892207044156668">"ਕੋਈ ਅਗਿਆਤ ਕਾਰਵਾਈ ਕਰੋ"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> ਦੇ <xliff:g id="COUNT_0">%1$d</xliff:g> ਐਪਸ ਦੀ ਆਗਿਆ ਦਿੱਤੀ"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g> ਦੇ <xliff:g id="COUNT_0">%d</xliff:g> ਐਪਸ ਦੀ ਆਗਿਆ ਦਿੱਤੀ"</string> <string name="menu_show_system" msgid="6773743421743728921">"ਸਿਸਟਮ ਦਿਖਾਓ"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ਸਿਸਟਮ ਲੁਕਾਓ"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ਅਨੁਮਤੀਆਂ"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ਸਥਿਤੀ ਸੈਟਿੰਗਾਂ"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਇਸ ਡਿਵਾਈਸ ਲਈ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾਵਾਂ ਦਾ ਇੱਕ ਪ੍ਰਦਾਤਾ ਹੈ। ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਪਹੁੰਚ ਨੂੰ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੈਟਿੰਗਾਂ ਤੋਂ ਸੰਸ਼ੋਧਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"</string> <string name="system_warning" msgid="7103819124542305179">"ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਅਨੁਮਤੀ ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀਆਂ ਮੂੂਲ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਮੁਤਾਬਕ ਕੰਮ ਨਹੀਂ ਵੀ ਕਰ ਸਕਦੀਆਂ।"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ਨੀਤੀ ਮੁਤਾਬਕ ਲਾਗੂ ਕੀਤਾ"</string> - <string name="loading" msgid="7811651799620593731">"ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string> - <string name="all_permissions" msgid="5156669007784613042">"ਸਾਰੀਆਂ ਅਨੁਮਤੀਆਂ"</string> - <string name="other_permissions" msgid="2016192512386091933">"ਹੋਰ ਐਪ ਸਮਰੱਥਤਾਵਾਂ"</string> - <string name="permission_request_title" msgid="1204446718549121199">"ਅਨੁਮਤੀ ਬੇਨਤੀ"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"ਸਕਰੀਨ ਓਵਰਲੇਅ ਲੱਭ ਗਿਆ"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ਇਸ ਇਜ਼ਾਜਤ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ; ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਸੈਟਿੰਗਜ਼ ਅਤੇ ਐਪਸ ਤੋਂ ਸਕ੍ਰੀਨ ਓਵਰਲੇਅ ਬੰਦ ਕਰਨਾ ਪਵੇਗਾ"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ਸੈਟਿੰਗਜ਼ ਖੋਲ੍ਹੋ"</string> </resources> diff --git a/res/values-pl-television/strings.xml b/res/values-pl-television/strings.xml index 035832fc..401a272b 100644 --- a/res/values-pl-television/strings.xml +++ b/res/values-pl-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Odmów i nie pytaj ponownie"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Możesz to później zmienić, wybierając Ustawienia > Aplikacje"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Pokaż aplikacje systemowe"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index d6929bd8..a5a8700d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -96,15 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Nie pytaj ponownie"</string> <string name="no_permissions" msgid="3210542466245591574">"Brak uprawnień"</string> <string name="additional_permissions" msgid="6667573114240111763">"Dodatkowe uprawnienia"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="few">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Jeszcze <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> więcej"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ta aplikacja jest przeznaczona na straszą wersję Androida. Odmówienie uprawnień może spowodować, że przestanie ona działać w zamierzony sposób."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Pokaż starsze"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ukryj starsze"</string> <string name="default_permission_description" msgid="4992892207044156668">"wykonywanie nieznanych działań"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Dozwolone: <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$d</xliff:g> aplikacji"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Dozwolone: <xliff:g id="COUNT_0">%d</xliff:g> z <xliff:g id="COUNT_1">%d</xliff:g> aplikacji"</string> <string name="menu_show_system" msgid="6773743421743728921">"Pokaż systemowe"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ukryj systemowe"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> – uprawnienia"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Ustawienia lokalizacji"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> jest dostawcą usług lokalizacyjnych dla tego urządzenia. Dostęp do danych lokalizacji można zmienić w ustawieniach lokalizacji."</string> <string name="system_warning" msgid="7103819124542305179">"Jeśli odmówisz tych uprawnień, podstawowe funkcje urządzenia mogą nie działać prawidłowo."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Narzucone przez zasady"</string> - <string name="loading" msgid="7811651799620593731">"Ładuję…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Wszystkie uprawnienia"</string> - <string name="other_permissions" msgid="2016192512386091933">"Inne funkcje aplikacji"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Prośba o pozwolenie"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Wykryto nakładkę ekranową"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Aby zmodyfikować te uprawnienia, musisz najpierw wyłączyć nakładkę ekranową, klikając Ustawienia > Aplikacje"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Otwórz ustawienia"</string> </resources> diff --git a/res/values-pt-rBR-television/strings.xml b/res/values-pt-rBR-television/strings.xml deleted file mode 100644 index 4c29ba52..00000000 --- a/res/values-pt-rBR-television/strings.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2015 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:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Negar e não perguntar novamente"</string> - <string name="grant_dialog_how_to_change" msgid="615414835189256888">"É possível alterar isso mais tarde em \"Config.\" > \"Apps\""</string> - <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar apps do sistema"</string> -</resources> diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml deleted file mode 100644 index 7fd4f79d..00000000 --- a/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2007 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:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="2738748390251381682">"Instalador do pacote"</string> - <string name="next" msgid="3057143178373252333">"Próximo"</string> - <string name="install" msgid="5896438203900042068">"Instalar"</string> - <string name="done" msgid="3889387558374211719">"Concluído"</string> - <string name="security_settings_desc" msgid="2706691034244052604">"Permitir que este app:"</string> - <string name="cancel" msgid="8360346460165114585">"Cancelar"</string> - <string name="unknown" msgid="4742479012767208045">"Desconhecido"</string> - <string name="installing" msgid="8613631001631998372">"Instalando..."</string> - <string name="install_done" msgid="3682715442154357097">"App instalado."</string> - <string name="install_confirm_question" msgid="7295206719219043890">"Deseja instalar este app? Ele terá acesso a:"</string> - <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Deseja instalar este app? Não requer acesso especial."</string> - <string name="install_confirm_question_update" msgid="4624159567361487964">"Deseja instalar uma atualização para este app? Os dados existentes não serão perdidos. O app atualizado terá acesso a:"</string> - <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Deseja instalar uma atualização para este app integrado? Os dados existentes não serão perdidos. O app atualizado terá acesso a:"</string> - <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Deseja instalar uma atualização para este app existente? Seus dados existentes não serão perdidos. A atualização não requer qualquer acesso especial."</string> - <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Deseja instalar uma atualização para este app integrado? Seus dados existentes não serão perdidos. A atualização não requer qualquer acesso especial."</string> - <string name="install_failed" msgid="6579998651498970899">"O app não foi instalado."</string> - <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que o pacote está corrompido."</string> - <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Um pacote existente com o mesmo nome e uma assinatura conflitante já foi instalado."</string> - <string name="install_failed_older_sdk" msgid="7947925824732917665">"O pacote funciona somente em versões mais recentes do Android."</string> - <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Este app não é compatível com seu tablet."</string> - <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Este app não é compatível com sua TV."</string> - <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Este app não é compatível com seu telefone."</string> - <string name="install_failed_file_not_found" msgid="1958430133396322619">"O pacote especificado foi excluído antes da instalação ser concluída."</string> - <string name="install_failed_verify_failed" msgid="5567372439890440205">"O pacote não passou pela verificação e não pôde ser instalado."</string> - <string name="install_failed_verify_timeout" msgid="7083090219270140373">"O tempo limite foi atingido ao tentar verificar este pacote. Tente instalá-lo novamente mais tarde."</string> - <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> em seu tablet."</string> - <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> na sua TV."</string> - <string name="install_failed_msg" product="default" msgid="8554909560982962052">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> em seu telefone."</string> - <string name="launch" msgid="4826921505917605463">"Abrir"</string> - <string name="unknown_apps_dlg_title" msgid="2855558586206583032">"Instalação bloqueada"</string> - <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Por segurança, o tablet está config. p/ bloquear a instalação de aplicat. de fontes desconhecidas."</string> - <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por segurança, sua TV está configurada para bloquear a instalação de apps de fontes desconhecidas."</string> - <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Por segurança, o telefone está config. p/ bloquear a instalação de aplicat. de fontes desconhecidas."</string> - <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Seu administrador não permite a instalação de apps baixados de fontes desconhecidas."</string> - <string name="ok" msgid="3468756155452870475">"OK"</string> - <string name="settings" msgid="6743583734099755409">"Configurações"</string> - <string name="allow_source_dlg_title" msgid="7568985073502399415">"Nova fonte para apps"</string> - <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> deseja instalar outros apps.\n\nPermitir isso agora e no futuro?"</string> - <string name="manage_applications" msgid="4033876279091996596">"Gerenciar apps"</string> - <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Substituir app?"</string> - <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"O app que você está instalando substituirá outro app.\n\nTodos os seus dados de usuário anteriores serão salvos."</string> - <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Este é um app do sistema.\n\nTodos os seus dados de usuário anteriores serão salvos."</string> - <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Sem espaço"</string> - <string name="out_of_space_dlg_text" msgid="4774775404294282216">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g>. Libere um pouco de espaço e tente novamente."</string> - <string name="dlg_ok" msgid="6944357727705699232">"OK"</string> - <string name="app_not_found_dlg_title" msgid="2692335460569505484">"App não encontrado"</string> - <string name="app_not_found_dlg_text" msgid="6107465056055095930">"O app não foi encontrado na lista de apps instalados."</string> - <string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar app"</string> - <string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalar atualização"</string> - <string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> é parte do seguinte app:"</string> - <string name="uninstall_application_text" msgid="6691975835951187030">"Deseja desinstalar este app?"</string> - <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Deseja desinstalar este app para "<b>"todos"</b>" os usuários? O app e seus dados serão removidos para "<b>"todos"</b>" os usuários do dispositivo."</string> - <string name="uninstall_application_text_user" msgid="8766882355635485733">"Deseja desinstalar este app para o usuário <xliff:g id="USERNAME">%1$s</xliff:g>?"</string> - <string name="uninstall_update_text" msgid="2056387942084605027">"Deseja substituir este app pela versão de fábrica?"</string> - <string name="uninstalling" msgid="5556217435895938250">"Desinstalando..."</string> - <string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string> - <string name="uninstall_failed" msgid="631122574306299512">"Desinstalação malsucedida."</string> - <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Não é possível desinstalar, pois este pacote é um admin. de dispositivos ativo."</string> - <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Não é possível desinstalar este pacote porque ele é um administrador de dispositivo ativo para o usuário <xliff:g id="USERNAME">%1$s</xliff:g>."</string> - <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Este app é necessário para seu perfil de trabalho e não pode ser desinstalado."</string> - <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"O app é exigido pelo administrador do dispositivo e não pode ser desinstalado."</string> - <string name="manage_device_administrators" msgid="891392489300312370">"Gerenciar os administradores do dispositivo"</string> - <string name="uninstall_failed_msg" msgid="8969754702803951175">"Não foi possível desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> - <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Erro de análise"</string> - <string name="Parse_error_dlg_text" msgid="7623286983621067011">"Ocorreu um problema ao analisar o pacote."</string> - <string name="newPerms" msgid="6039428254474104210">"Novas"</string> - <string name="allPerms" msgid="1024385515840703981">"Todas"</string> - <string name="privacyPerms" msgid="1850527049572617">"Privacidade"</string> - <string name="devicePerms" msgid="6733560207731294504">"Acesso ao dispositivo"</string> - <string name="no_new_perms" msgid="6657813692169565975">"Esta atualização não requer novas permissões."</string> - <string name="grant_confirm_question" msgid="4690289297029223742">"Deseja conceder as permissões a seguir? Será concedido acesso para:"</string> - <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string> - <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Negar"</string> - <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Permitir que o app <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> - <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string> - <string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string> - <string name="never_ask_again" msgid="3798895821072102967">"Não perguntar novamente"</string> - <string name="no_permissions" msgid="3210542466245591574">"Sem permissão"</string> - <string name="additional_permissions" msgid="6667573114240111763">"Permissões adicionais"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> - <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Este app foi projetado para uma versão anterior do Android. Negar a permissão pode fazer com que ele deixe de funcionar conforme esperado."</string> - <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> apps permitidos"</string> - <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string> - <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string> - <string name="permission_title" msgid="6495415273398916381">"Permissões para <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> - <string name="no_apps" msgid="1965493419005012569">"Nenhum app"</string> - <string name="location_settings" msgid="1774875730854491297">"Configurações de localização"</string> - <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é um provedor de serviços de localização para este dispositivo. O acesso local pode ser modificado nas configurações de localização."</string> - <string name="system_warning" msgid="7103819124542305179">"Se você negar essa permissão, recursos básicos do seu dispositivo poderão não funcionar mais como deveriam."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicável por política"</string> - <string name="loading" msgid="7811651799620593731">"Carregando…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Todas as permissões"</string> - <string name="other_permissions" msgid="2016192512386091933">"Outros recursos do app"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitação de permissão"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de tela detectada"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar a configuração dessa permissão, você deve primeiro desativar a sobreposição de tela em \"Config.\" > \"Apps\""</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configurações"</string> -</resources> diff --git a/res/values-pt-rPT-television/strings.xml b/res/values-pt-rPT-television/strings.xml index 306e0661..91ebad3a 100644 --- a/res/values-pt-rPT-television/strings.xml +++ b/res/values-pt-rPT-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Recusar e não perguntar novamente"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Pode depois alterar esta definição mais tarde em Definições > Aplicações"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicações do sistema"</string> </resources> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f38aac62..ed8c7f7b 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Nunca perguntar novamente"</string> <string name="no_permissions" msgid="3210542466245591574">"Sem autorizações"</string> <string name="additional_permissions" msgid="6667573114240111763">"Autorizações adicionais"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Mais <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Mais <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicação foi concebida para uma versão mais antiga do Android. Negar autorização pode fazer com que deixe de funcionar como pretendido."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostrar antigas"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ocultar antigas"</string> <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicações autorizadas"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> de <xliff:g id="COUNT_1">%d</xliff:g> aplicações autorizadas"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Autorizações de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Definições de localização"</string> <string name="location_warning" msgid="8778701356292735971">"O <xliff:g id="APP_NAME">%1$s</xliff:g> é um fornecedor de serviços de localização para este dispositivo. É possível modificar o acesso à localização a partir das definições de localização."</string> <string name="system_warning" msgid="7103819124542305179">"Se negar esta autorização, as funcionalidades básicas do seu dispositivo podem deixar de funcionar corretamente."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Imposta pela política"</string> - <string name="loading" msgid="7811651799620593731">"A carregar…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Todas as autorizações"</string> - <string name="other_permissions" msgid="2016192512386091933">"Outras capacidades de aplicações"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Pedido de autorização"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de ecrã detetada"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar esta definição de autorização, primeiro tem de desativar a sobreposição do ecrã em Definições > Aplicações"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir definições"</string> </resources> diff --git a/res/values-pt-television/strings.xml b/res/values-pt-television/strings.xml index 4c29ba52..2ff53045 100644 --- a/res/values-pt-television/strings.xml +++ b/res/values-pt-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Negar e não perguntar novamente"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"É possível alterar isso mais tarde em \"Config.\" > \"Apps\""</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar apps do sistema"</string> </resources> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 7fd4f79d..7da99743 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Negar"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Permitir que o app <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Permitir que <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string> <string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string> <string name="never_ask_again" msgid="3798895821072102967">"Não perguntar novamente"</string> <string name="no_permissions" msgid="3210542466245591574">"Sem permissão"</string> <string name="additional_permissions" msgid="6667573114240111763">"Permissões adicionais"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Mais <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Este app foi projetado para uma versão anterior do Android. Negar a permissão pode fazer com que ele deixe de funcionar conforme esperado."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Mostrar legado"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ocultar legado"</string> <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> apps permitidos"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> de <xliff:g id="COUNT_1">%d</xliff:g> apps permitidos"</string> <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string> <string name="permission_title" msgid="6495415273398916381">"Permissões para <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Configurações de localização"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é um provedor de serviços de localização para este dispositivo. O acesso local pode ser modificado nas configurações de localização."</string> <string name="system_warning" msgid="7103819124542305179">"Se você negar essa permissão, recursos básicos do seu dispositivo poderão não funcionar mais como deveriam."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicável por política"</string> - <string name="loading" msgid="7811651799620593731">"Carregando…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Todas as permissões"</string> - <string name="other_permissions" msgid="2016192512386091933">"Outros recursos do app"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitação de permissão"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de tela detectada"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar a configuração dessa permissão, você deve primeiro desativar a sobreposição de tela em \"Config.\" > \"Apps\""</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configurações"</string> </resources> diff --git a/res/values-ro-television/strings.xml b/res/values-ro-television/strings.xml index 67514279..ed9e34ff 100644 --- a/res/values-ro-television/strings.xml +++ b/res/values-ro-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Respingeți și nu se mai întreabă"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puteți modifica permisiunile ulterior din Setări > Aplicații"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Afișează aplicațiile de sistem"</string> </resources> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 2a7800ca..db967e74 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -20,17 +20,17 @@ <string name="next" msgid="3057143178373252333">"Înainte"</string> <string name="install" msgid="5896438203900042068">"Instalaţi"</string> <string name="done" msgid="3889387558374211719">"Terminat"</string> - <string name="security_settings_desc" msgid="2706691034244052604">"Permiteți acestei aplicații să:"</string> + <string name="security_settings_desc" msgid="2706691034244052604">"Permiteţi acestei aplicații să:"</string> <string name="cancel" msgid="8360346460165114585">"Anulați"</string> <string name="unknown" msgid="4742479012767208045">"Necunoscut"</string> <string name="installing" msgid="8613631001631998372">"În curs de instalare..."</string> <string name="install_done" msgid="3682715442154357097">"Aplicaţie instalată."</string> - <string name="install_confirm_question" msgid="7295206719219043890">"Doriți să instalaţi această aplicație? Aceasta va avea acces la:"</string> - <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Doriți să instalaţi această aplicație? Aplicaţia nu solicită un acces special."</string> - <string name="install_confirm_question_update" msgid="4624159567361487964">"Doriți să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string> - <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Doriți să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string> - <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Doriți să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string> - <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Doriți să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string> + <string name="install_confirm_question" msgid="7295206719219043890">"Doriţi să instalaţi această aplicație? Aceasta va avea acces la:"</string> + <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Doriţi să instalaţi această aplicație? Aplicaţia nu solicită un acces special."</string> + <string name="install_confirm_question_update" msgid="4624159567361487964">"Doriţi să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string> + <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Doriţi să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string> + <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Doriţi să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string> + <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Doriţi să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string> <string name="install_failed" msgid="6579998651498970899">"Aplicaţia nu este instalată."</string> <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pachetul pare a fi deteriorat."</string> <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Un pachet cu același nume și cu o semnătură conflictuală este deja instalat."</string> @@ -38,9 +38,9 @@ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Această aplicație nu este compatibilă cu tableta dvs."</string> <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Aplicația nu este compatibilă cu televizorul."</string> <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Această aplicație nu este compatibilă cu telefonul dvs."</string> - <string name="install_failed_file_not_found" msgid="1958430133396322619">"Pachetul specificat a fost șters înainte ca instalarea să poată fi finalizată."</string> + <string name="install_failed_file_not_found" msgid="1958430133396322619">"Pachetul specificat a fost şters înainte ca instalarea să poată fi finalizată."</string> <string name="install_failed_verify_failed" msgid="5567372439890440205">"Pachetul nu a trecut de verificare și nu pot fi instalat."</string> - <string name="install_failed_verify_timeout" msgid="7083090219270140373">"La verificarea pachetului timpul limită a expirat. Încercați să instalaţi din nou ulterior."</string> + <string name="install_failed_verify_timeout" msgid="7083090219270140373">"La verificarea pachetului timpul limită a expirat. Încercaţi să instalaţi din nou ulterior."</string> <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe tableta dvs."</string> <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe televizor."</string> <string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe telefonul dvs."</string> @@ -53,8 +53,8 @@ <string name="ok" msgid="3468756155452870475">"OK"</string> <string name="settings" msgid="6743583734099755409">"Setări"</string> <string name="allow_source_dlg_title" msgid="7568985073502399415">"Sursă nouă pentru aplicații"</string> - <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> doreşte să instaleze alte aplicații.\n\nPermiteți acest lucru acum și pe viitor?"</string> - <string name="manage_applications" msgid="4033876279091996596">"Gestionați aplicații"</string> + <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> doreşte să instaleze alte aplicații.\n\nPermiteţi acest lucru acum și pe viitor?"</string> + <string name="manage_applications" msgid="4033876279091996596">"Gestionaţi aplicații"</string> <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Înlocuiţi aplicația?"</string> <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Aplicaţia pe care o instalaţi va înlocui o altă aplicație.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string> <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Aceasta este o aplicație de sistem.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string> @@ -66,10 +66,10 @@ <string name="uninstall_application_title" msgid="1860074100811653963">"Dezinstalaţi aplicația"</string> <string name="uninstall_update_title" msgid="4146940097553335390">"Dezinstalaţi actualizarea"</string> <string name="uninstall_activity_text" msgid="6680688689803932550">" <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> face parte din următoarea aplicație:"</string> - <string name="uninstall_application_text" msgid="6691975835951187030">"Doriți să dezinstalaţi această aplicație?"</string> - <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Doriți să dezinstalaţi această aplicație pentru "<b>"toţi"</b>" utilizatorii? Aplicaţia și datele acesteia vor fi eliminate de la "<b>"toţi"</b>" utilizatorii de pe acest dispozitiv."</string> + <string name="uninstall_application_text" msgid="6691975835951187030">"Doriţi să dezinstalaţi această aplicație?"</string> + <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Doriţi să dezinstalaţi această aplicație pentru "<b>"toţi"</b>" utilizatorii? Aplicaţia și datele acesteia vor fi eliminate de la "<b>"toţi"</b>" utilizatorii de pe acest dispozitiv."</string> <string name="uninstall_application_text_user" msgid="8766882355635485733">"Dezinstalați această aplicație pentru utilizatorul <xliff:g id="USERNAME">%1$s</xliff:g>?"</string> - <string name="uninstall_update_text" msgid="2056387942084605027">"Doriți să înlocuiţi această aplicație cu versiunea din fabrică?"</string> + <string name="uninstall_update_text" msgid="2056387942084605027">"Doriţi să înlocuiţi această aplicație cu versiunea din fabrică?"</string> <string name="uninstalling" msgid="5556217435895938250">"În curs de dezinstalare..."</string> <string name="uninstall_done" msgid="3792487853420281888">"Dezinstalare finalizată."</string> <string name="uninstall_failed" msgid="631122574306299512">"Dezinstalare nefinalizată."</string> @@ -77,7 +77,7 @@ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nu se poate dezinstala, pachetul este administrator de dispozitive activ pt. <xliff:g id="USERNAME">%1$s</xliff:g>."</string> <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Aplicația este necesară pentru profilul de serviciu și nu poate fi dezinstalată."</string> <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Aplicație necesară administratorului dispozitivului. Nu poate fi dezinstalată."</string> - <string name="manage_device_administrators" msgid="891392489300312370">"Gestionați administratori de dispozitive"</string> + <string name="manage_device_administrators" msgid="891392489300312370">"Gestionaţi administratori de dispozitive"</string> <string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi dezinstalată."</string> <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Erori de analizare"</string> <string name="Parse_error_dlg_text" msgid="7623286983621067011">"A apărut o problemă la analizarea pachetului."</string> @@ -96,14 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Nu mai întreba niciodată"</string> <string name="no_permissions" msgid="3210542466245591574">"Fără permisiuni"</string> <string name="additional_permissions" msgid="6667573114240111763">"Permisiuni suplimentare"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="few">Încă <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Încă <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">Încă <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Încă <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Această aplicație a fost creată pentru o versiune Android mai veche. Dacă nu acordați permisiunea, este posibil ca aceasta să nu mai funcționeze corespunzător."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Afișați permisiunile vechi"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ascundeți permisiunile vechi"</string> <string name="default_permission_description" msgid="4992892207044156668">"efectuează o acțiune necunoscută"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> din <xliff:g id="COUNT_1">%2$d</xliff:g> (de) aplicații au această permisiune"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> din <xliff:g id="COUNT_1">%d</xliff:g> (de) aplicații au această permisiune"</string> <string name="menu_show_system" msgid="6773743421743728921">"Afișați aplicațiile de sistem"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ascundeți aplicațiile de sistem"</string> <string name="permission_title" msgid="6495415273398916381">"Permisiuni pentru <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -111,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Setări privind locația"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> este un furnizor de servicii de localizare pentru acest dispozitiv. Accesul la locație poate fi modificat din setările privind locația."</string> <string name="system_warning" msgid="7103819124542305179">"Dacă refuzați această permisiune, este posibil ca funcțiile de bază ale dispozitivului să nu mai funcționează corespunzător."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicată conform politicii"</string> - <string name="loading" msgid="7811651799620593731">"Se încarcă..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Toate permisiunile"</string> - <string name="other_permissions" msgid="2016192512386091933">"Alte funcții ale aplicației"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Solicitare de permisiune"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"S-a detectat suprapunerea pe ecran"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ca să schimbați această setare pentru permisiuni, mai întâi trebuie să dezactivați suprapunerea pe ecran din Setări > Aplicații"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Deschideți setările"</string> </resources> diff --git a/res/values-round/dimens.xml b/res/values-round/dimens.xml new file mode 100644 index 00000000..5e7309b9 --- /dev/null +++ b/res/values-round/dimens.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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> + <!-- Dimensions for the Grant permissions Confirmation Dialog --> + <dimen name="conf_diag_button_container_height">96dp</dimen> + <dimen name="conf_diag_2button_margin_side">32dp</dimen> + <dimen name="conf_diag_2button_margin_top">10dp</dimen> + +</resources> diff --git a/res/values-ru-television/strings.xml b/res/values-ru-television/strings.xml index ef77002f..bbbd74bf 100644 --- a/res/values-ru-television/strings.xml +++ b/res/values-ru-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Запретить и больше не спрашивать"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Чтобы изменить разрешения, откройте \"Настройки\" и выберите \"Приложения\"."</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Показать системные приложения"</string> </resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 21ae1fe6..30c48047 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -87,24 +87,21 @@ <string name="devicePerms" msgid="6733560207731294504">"Доступ к устройству"</string> <string name="no_new_perms" msgid="6657813692169565975">"Установка этого обновления не требует новых разрешений."</string> <string name="grant_confirm_question" msgid="4690289297029223742">"Предоставить следующие разрешения? Вот к чему будет получен доступ:"</string> - <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Разрешить"</string> + <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Принять"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Отклонить"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> из <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="permission_warning_template" msgid="5209102765005869454">"Разрешить приложению \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Приложения"</string> - <string name="app_permissions" msgid="3146758905824597178">"Разрешения приложений"</string> + <string name="app_permissions" msgid="3146758905824597178">"Разрешения для приложений"</string> <string name="never_ask_again" msgid="3798895821072102967">"Больше не запрашивать"</string> <string name="no_permissions" msgid="3210542466245591574">"Разрешения не требуются"</string> <string name="additional_permissions" msgid="6667573114240111763">"Ещё разрешения"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Ещё <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Это приложение было разработано для более ранней версии Android. Отзыв разрешения может вызвать неполадки в работе."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Показать старые"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Скрыть старые"</string> <string name="default_permission_description" msgid="4992892207044156668">"выполняет неизвестные действия"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Приложения с разрешением: <xliff:g id="COUNT_0">%1$d</xliff:g> из <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Приложения с разрешением: <xliff:g id="COUNT_0">%d</xliff:g> из <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Показать системные процессы"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Скрыть системные процессы"</string> <string name="permission_title" msgid="6495415273398916381">"Разрешения (<xliff:g id="PERMISSION">%1$s</xliff:g>)"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Настройки геоданных"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> является поставщиком услуг геолокации для этого устройства. Вы можете изменить параметры доступа в настройках геоданных."</string> <string name="system_warning" msgid="7103819124542305179">"Если вы не предоставите это разрешение, основные функции устройства могут работать неправильно."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"В соответствии с политикой"</string> - <string name="loading" msgid="7811651799620593731">"Загрузка…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Все разрешения"</string> - <string name="other_permissions" msgid="2016192512386091933">"Что ещё может приложение"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Запрос разрешений"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Обнаружены наложения"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Чтобы предоставить или отменить разрешение, сначала отключите наложения. Для этого нажмите \"Настройки > Приложения\"."</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Открыть настройки"</string> </resources> diff --git a/res/values-si-rLK-television/strings.xml b/res/values-si-rLK-television/strings.xml index 9f058ed2..cd373200 100644 --- a/res/values-si-rLK-television/strings.xml +++ b/res/values-si-rLK-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ප්රතික්ෂේප කරන්න, නැවත අසන්න එපා"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"ඔබට මෙය පසුව සැකසීම් > යෙදුම් තුළ වෙනස් කළ හැකිය"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"පද්ධති යෙදුම් පෙන්වන්න"</string> </resources> diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 1ab14753..0ef5c246 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ඉඩ දෙන්න"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ප්රතික්ෂේප කරන්න"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> න් <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> කිරීමට <xliff:g id="APP_NAME">%1$s</xliff:g> ට ඉඩ දෙන්නද?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට <xliff:g id="ACTION">%2$s</xliff:g> ට ඉඩ දෙන්නද?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"යෙදුම්"</string> <string name="app_permissions" msgid="3146758905824597178">"යෙදුම් අවසර"</string> <string name="never_ask_again" msgid="3798895821072102967">"නැවත කිසිදා නොඅසන්න"</string> <string name="no_permissions" msgid="3210542466245591574">"අවසර නොමැත"</string> <string name="additional_permissions" msgid="6667573114240111763">"අතිරේක අවසර"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">.තව <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">.තව <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"තවත් <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"මෙම යෙදුම නිර්මාණය කර ඇත්තේ Android වල පැරණි අනුවාදයකට වේ. අවසර නොදීම මඟින් එය බලාපොරොත්තු වන ආකාරයට වැඩ නොකිරීමට හැක."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ලෙගසි පෙන්වන්න"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ලෙගසි සඟවන්න"</string> <string name="default_permission_description" msgid="4992892207044156668">"නොදන්නා ක්රියාවක් සිදු කරන්න"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"යෙදුම් <xliff:g id="COUNT_1">%2$d</xliff:g> න් <xliff:g id="COUNT_0">%1$d</xliff:g> කට ඉඩ දෙන ලදි"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"යෙදුම් <xliff:g id="COUNT_1">%d</xliff:g> න් <xliff:g id="COUNT_0">%d</xliff:g> කට ඉඩ දෙන ලදි"</string> <string name="menu_show_system" msgid="6773743421743728921">"පද්ධතිය පෙන්වන්න"</string> <string name="menu_hide_system" msgid="7595471742649432977">"පද්ධතිය සඟවන්න"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> අවසර"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"ස්ථාන සැකසීම්"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> මෙම උපාංගය සඳහා ස්ථාන සේවාවන් සපයන්නෙකු වේ. ස්ථාන ප්රවේශය ස්ථාන සැකසීම් වෙතින් වෙනස් කළ හැක."</string> <string name="system_warning" msgid="7103819124542305179">"ඔබ මෙම අවසරය ප්රතික්ෂේප කරන්නේ නම්, සමහර යෙදුම් බලාපොරොත්තු පරිදි ක්රියා නොකරනු ඇත."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ප්රතිපත්තිය මඟින් බලාත්මක කරයි"</string> - <string name="loading" msgid="7811651799620593731">"පූරණය කරමින්…"</string> - <string name="all_permissions" msgid="5156669007784613042">"සියලු අවසර"</string> - <string name="other_permissions" msgid="2016192512386091933">"වෙනත් යෙදුම් හැකියාවන්"</string> - <string name="permission_request_title" msgid="1204446718549121199">"අවසර ඉල්ලීම"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"තිර උඩැතිරියක් අනාවරණය කරන ලදි"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"මෙම අවසර සැකසීම වෙනස් කිරීම සඳහා, ඔබට මුලින්ම සැකසීම් > යෙදුම් වෙතින් තිර උඩැතිරිය අක්රිය කර යුතුයි"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"සැකසීම් විවෘත කරන්න"</string> </resources> diff --git a/res/values-sk-television/strings.xml b/res/values-sk-television/strings.xml index 7326f155..70b73aa1 100644 --- a/res/values-sk-television/strings.xml +++ b/res/values-sk-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Zamietnuť a nabudúce sa nepýtať"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Neskôr to môžete zmeniť v časti Nastavenia > Aplikácie"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Zobraziť systémové aplikácie"</string> </resources> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 93f55792..6d5124be 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -96,15 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Túto otázku už nezobrazovať"</string> <string name="no_permissions" msgid="3210542466245591574">"Žiadne povolenia"</string> <string name="additional_permissions" msgid="6667573114240111763">"Ďalšie povolenia"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalšie</item> - <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalšieho</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalších</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ďalšie</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Počet ďalších povolení: <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Táto aplikácia bola navrhnutá pre staršiu verziu systému Android. Odmietnutie povolenia môže spôsobiť, že nebude optimálne fungovať."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Zobraziť staré povolenia"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Skryť staré povolenia"</string> <string name="default_permission_description" msgid="4992892207044156668">"umožňuje vykonať neznámu akciu"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povolené: <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$d</xliff:g> aplikácií"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povolené: <xliff:g id="COUNT_0">%d</xliff:g> z <xliff:g id="COUNT_1">%d</xliff:g> aplikácií"</string> <string name="menu_show_system" msgid="6773743421743728921">"Zobraziť systémové aplikácie"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Skryť systémové aplikácie"</string> <string name="permission_title" msgid="6495415273398916381">"Povolenia <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Nastavenia polohy"</string> <string name="location_warning" msgid="8778701356292735971">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je poskytovateľ služieb určovania polohy tohto zariadenia. Prístup k polohe môžete upraviť v nastaveniach polohy."</string> <string name="system_warning" msgid="7103819124542305179">"Ak toto povolenie zamietnete, základné funkcie vášho zariadenia nemusia pracovať podľa očakávaní."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Vynútené pravidlom"</string> - <string name="loading" msgid="7811651799620593731">"Načítava sa…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Všetky povolenia"</string> - <string name="other_permissions" msgid="2016192512386091933">"Ďalšie možnosti aplikácie"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Žiadosť o povolenie"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Bolo zistené prekrytie obrazovky"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ak chcete zmeniť nastavenie tohto povolenia, musíte najprv v časti Nastavenia > Aplikácie vypnúť prekrytie obrazovky"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Otvoriť nastavenia"</string> </resources> diff --git a/res/values-sl-television/strings.xml b/res/values-sl-television/strings.xml index d5ca8680..91cc2e1f 100644 --- a/res/values-sl-television/strings.xml +++ b/res/values-sl-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Zavrni in ne sprašuj več"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"To lahko pozneje spremenite v »Nastavitve > Aplikacije«"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Prikaz sistemskih aplikacij"</string> </resources> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 86219831..eefe4e3e 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -90,21 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dovoli"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Zavrni"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> od <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Dovolite aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> izvesti to dejanje: <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Dovolite aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> to dejanje: <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string> <string name="app_permissions" msgid="3146758905824597178">"Dovoljenja za aplikacije"</string> <string name="never_ask_again" msgid="3798895821072102967">"Ne vprašaj nikoli več"</string> <string name="no_permissions" msgid="3210542466245591574">"Ni dovoljenj"</string> <string name="additional_permissions" msgid="6667573114240111763">"Dodatna dovoljenja"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="two">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Še <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ta aplikacija je bila zasnovana za starejšo različico sistema Android. Če dovoljenje zavrnete, lahko preneha delovati, kot bi morala."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Pokaži starejša"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Skrij starejša"</string> <string name="default_permission_description" msgid="4992892207044156668">"izvedba neznanega dejanja"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Dovoljene aplikacije: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Dovoljenih je toliko aplikacij: <xliff:g id="COUNT_0">%d</xliff:g> od <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Prikaz sistemskih aplikacij"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Skrivanje sistemskih aplikacij"</string> <string name="permission_title" msgid="6495415273398916381">"Dovoljenja za: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Nastavitve lokacije"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> je ponudnik lokacijskih storitev za to napravo. Dostop do lokacije je mogoče spremeniti v nastavitvah lokacije."</string> <string name="system_warning" msgid="7103819124542305179">"Če zavrnete to dovoljenje, osnovne funkcije naprave morda ne bodo več delovale, kot bi morale."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Uveljavlja pravilnik"</string> - <string name="loading" msgid="7811651799620593731">"Nalaganje …"</string> - <string name="all_permissions" msgid="5156669007784613042">"Vsa dovoljenja"</string> - <string name="other_permissions" msgid="2016192512386091933">"Druge zmožnosti aplikacije"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Zahteva za dovoljenje"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Zaznano prekrivanje zaslona"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Če želite spremeniti nastavitev tega dovoljenja, morate najprej izklopiti prekrivanje zaslona v »Nastavitve > Aplikacije«"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Odpri nastavitve"</string> </resources> diff --git a/res/values-sq-rAL-television/strings.xml b/res/values-sq-rAL-television/strings.xml index 68122461..afeb9ab1 100644 --- a/res/values-sq-rAL-television/strings.xml +++ b/res/values-sq-rAL-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Refuzo dhe mos pyet përsëri"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Këtë mund ta ndryshosh më vonë te Cilësimet > Aplikacionet"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Shfaq aplikacionet e sistemit"</string> </resources> diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml index 1e3d9985..3b4ba02c 100644 --- a/res/values-sq-rAL/strings.xml +++ b/res/values-sq-rAL/strings.xml @@ -90,32 +90,23 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Lejo"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuzo"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> nga <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Të lejohet apl. \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" të realizojë \"<xliff:g id="ACTION">%2$s</xliff:g>\"?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Të lejohet <xliff:g id="APP_NAME">%1$s</xliff:g> që <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacionet"</string> <string name="app_permissions" msgid="3146758905824597178">"Lejet e aplikacionit"</string> <string name="never_ask_again" msgid="3798895821072102967">"Mos pyet më asnjëherë"</string> <string name="no_permissions" msgid="3210542466245591574">"Nuk ka leje"</string> <string name="additional_permissions" msgid="6667573114240111763">"Lejet shtesë"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> të tjera</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> të tjera</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> të tjera"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ky aplikacion është projektuar për një version më të vjetër të Android. Refuzimi i lejeve mund të shkaktojë që ai të mos funksionojë më siç duhet."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Shfaq lejet e trashëguara"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Fshih lejet e trashëguara"</string> <string name="default_permission_description" msgid="4992892207044156668">"kryej një veprim të panjohur"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> aplikacione nga <xliff:g id="COUNT_1">%2$d</xliff:g> të tilla u lejuan"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> aplikacione nga <xliff:g id="COUNT_1">%d</xliff:g> të tilla u lejuan"</string> <string name="menu_show_system" msgid="6773743421743728921">"Shfaq sistemin"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Fshih sistemin"</string> <string name="permission_title" msgid="6495415273398916381">"Lejet për <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> <string name="no_apps" msgid="1965493419005012569">"Asnjë aplikacion"</string> - <string name="location_settings" msgid="1774875730854491297">"Cilësimet e vendndodhjeve"</string> + <string name="location_settings" msgid="1774875730854491297">"Cilësimet e vendndodhjes"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> është një ofrues i shërbimeve të vendndodhjes për këtë pajisje. Qasja e vendndodhjes mund të modifikohet nga cilësimet e vendndodhjes."</string> <string name="system_warning" msgid="7103819124542305179">"Nëse e refuzon këtë leje, funksionet bazë të pajisjes tënde mund të mos funksionojnë më siç pritet."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Zbatuar nga politika"</string> - <string name="loading" msgid="7811651799620593731">"Po ngarkon..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Të gjitha lejet"</string> - <string name="other_permissions" msgid="2016192512386091933">"Kapacitete të tjera të aplikacionit"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Kërkesa e lejes"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Mbivendosja e ekranit u zbulua"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Për të ndryshuar këtë cilësim të lejes, në fillim duhet të çaktivizosh mbivendosjen e ekranit nga Cilësimet > Aplikacionet"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Hap cilësimet"</string> </resources> diff --git a/res/values-sr-television/strings.xml b/res/values-sr-television/strings.xml index 01d4b9f1..3bdd1c13 100644 --- a/res/values-sr-television/strings.xml +++ b/res/values-sr-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Одбиј и не питај поново"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ово можете да промените касније у Подешавањима > Апликације"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Прикажи системске апликације"</string> </resources> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 0d1af776..b645763b 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -90,20 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дозволи"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Одбиј"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>. од <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Желите ли да дозволите да услуга <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Желите ли да дозволите да <xliff:g id="APP_NAME">%1$s</xliff:g> обави радњу <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апликације"</string> <string name="app_permissions" msgid="3146758905824597178">"Дозволе за апликације"</string> <string name="never_ask_again" msgid="3798895821072102967">"Никада више не тражи"</string> <string name="no_permissions" msgid="3210542466245591574">"Нема дозвола"</string> <string name="additional_permissions" msgid="6667573114240111763">"Додатне дозволе"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">још <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">још <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">још <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"још <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ова апликација је дизајнирана за старију верзију Android-а. Ако одбијете дозволу, она можда више неће правилно да функционише."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Прикажи застареле"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Сакриј застареле"</string> <string name="default_permission_description" msgid="4992892207044156668">"обавља непознату радњу"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Апликације са дозволом (<xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g>)"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Апликације са дозволом (<xliff:g id="COUNT_0">%d</xliff:g> од <xliff:g id="COUNT_1">%d</xliff:g>)"</string> <string name="menu_show_system" msgid="6773743421743728921">"Прикажи системске"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Сакриј системске"</string> <string name="permission_title" msgid="6495415273398916381">"Дозволе за апликацију <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -111,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Подешавања локације"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> пружа услуге локације за овај уређај. Приступ локацији можете да измените у подешавањима локације."</string> <string name="system_warning" msgid="7103819124542305179">"Ако одбијете ову дозволу, основне функције уређаја можда неће више функционисати исправно."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Примењује се у складу са смерницама"</string> - <string name="loading" msgid="7811651799620593731">"Учитава се…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Све дозволе"</string> - <string name="other_permissions" msgid="2016192512386091933">"Остале могућности апликације"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Захтев за дозволу"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Откривен је елемент који прекрива садржај екрана"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Да бисте променили подешавање ове дозволе, прво треба да искључите елемент који прекрива садржај екрана у одељку Подешавања > Апликације"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Отвори подешавања"</string> </resources> diff --git a/res/values-sv-television/strings.xml b/res/values-sv-television/strings.xml index 178a011c..9be25ca7 100644 --- a/res/values-sv-television/strings.xml +++ b/res/values-sv-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Neka och fråga inte igen"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan ändra detta senare i Inställningar > Appar"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Visa systemappar"</string> </resources> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 86c19317..517eceac 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Fråga aldrig igen"</string> <string name="no_permissions" msgid="3210542466245591574">"Inga behörigheter"</string> <string name="additional_permissions" msgid="6667573114240111763">"Ytterligare behörigheter"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> till</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> till</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> till"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Den här appen utformades för en äldre version av Android. Om du nekar appen behörighet kan det hända att den inte längre fungerar som den ska."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Visa tidigare behörigheter"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Dölj tidigare behörigheter"</string> <string name="default_permission_description" msgid="4992892207044156668">"utför en okänd åtgärd"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> av <xliff:g id="COUNT_1">%2$d</xliff:g> appar tillåts"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> av <xliff:g id="COUNT_1">%d</xliff:g> appar tillåts"</string> <string name="menu_show_system" msgid="6773743421743728921">"Visa systemet"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Dölj systemet"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> behörigheter"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Platsinställningar"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> är en platstjänstleverantör för enheten. Platsåtkomsten kan redigeras i platsinställningarna."</string> <string name="system_warning" msgid="7103819124542305179">"Om du nekar appen behörighet kan det hända att grundläggande funktioner på enheten inte fungerar som de ska."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enligt policyn"</string> - <string name="loading" msgid="7811651799620593731">"Läser in …"</string> - <string name="all_permissions" msgid="5156669007784613042">"Alla behörigheter"</string> - <string name="other_permissions" msgid="2016192512386091933">"Andra appbehörigheter"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Begäran om behörighet"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Skärmöverlagring har upptäckts"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Innan du kan ändra den här behörighetsinställningen måste du inaktivera skärmöverlagring under Inställningar > Appar"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Öppna inställningarna"</string> </resources> diff --git a/res/values-sw-television/strings.xml b/res/values-sw-television/strings.xml index fb169fc0..3bbfe0ef 100644 --- a/res/values-sw-television/strings.xml +++ b/res/values-sw-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Kataa na usiulize tena"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Unaweza kubadilisha hatua hii baadaye kwenye Mipangilio na Programu"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Onyesha programu za mfumo"</string> </resources> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index eb9c1474..e83e9979 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Ruhusu"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Kataa"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> kati ya <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"Je, ungependa kuruhusu <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"Je, ungependa kuruhusu <xliff:g id="APP_NAME">%1$s</xliff:g> ifanye <xliff:g id="ACTION">%2$s</xliff:g>?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programu"</string> <string name="app_permissions" msgid="3146758905824597178">"Ruhusa za programu"</string> <string name="never_ask_again" msgid="3798895821072102967">"Usiulize tena"</string> <string name="no_permissions" msgid="3210542466245591574">"Hakuna ruhusa"</string> <string name="additional_permissions" msgid="6667573114240111763">"Ruhusa za ziada"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> zaidi</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> zaidi</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> zaidi"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Programu hii iliundwa kwa ajili ya toleo la zamani la Android. Kuinyima ruhusa kunaweza kusababisha iache kutenda kazi kama ilivyokusudiwa."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Onyesha ruhusa zilizopitwa na wakati"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ficha ruhusa zilizopitwa na wakati"</string> <string name="default_permission_description" msgid="4992892207044156668">"kutekeleza kitendo kisichojulikana"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Inaruhusu programu <xliff:g id="COUNT_0">%1$d</xliff:g> kati ya <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Inaruhusu programu <xliff:g id="COUNT_0">%d</xliff:g> kati ya <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Onyesha mfumo"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ficha mfumo"</string> <string name="permission_title" msgid="6495415273398916381">"Ruhusa <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Mipangilio ya Mahali"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> hutoa huduma za mahali kwenye kifaa hiki. Idhini ya kufikia mahali inaweza kurekebishwa katika mipangilio ya mahali."</string> <string name="system_warning" msgid="7103819124542305179">"Usipokubali ruhusa hii, huenda vipengele vya msingi vya kifaa chako havitafanya kazi kama ilivyokusudiwa."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Hutekelezwa na sera"</string> - <string name="loading" msgid="7811651799620593731">"Inapakia…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Ruhusa zote"</string> - <string name="other_permissions" msgid="2016192512386091933">"Uwezo mwingine wa programu"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Ombi la idhini"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Imetambua tangazo lililowekelewa juu ya skrini"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ili kubadilisha mpangilio huu wa ruhusa, ni lazima kwanza uzime tangazo lililowekelewa juu ya skrini kwenye Mipangilio na Programu"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Fungua mipangilio"</string> </resources> diff --git a/res/values-ta-rIN-television/strings.xml b/res/values-ta-rIN-television/strings.xml index 31973a5f..c011481c 100644 --- a/res/values-ta-rIN-television/strings.xml +++ b/res/values-ta-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"நிராகரி, மீண்டும் கேட்காதே"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"அமைப்புகள் > பயன்பாடுகள் என்பதில் பிறகு மாற்றலாம்"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"முறைமைப் பயன்பாடுகளைக் காட்டு"</string> </resources> diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 6c16c03d..eddf10fb 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -90,32 +90,23 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"அனுமதி"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"நிராகரி"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> செயலுக்கு <xliff:g id="APP_NAME">%1$s</xliff:g>-ஐ அனுமதிக்கவா?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> செயலுக்கு <xliff:g id="APP_NAME">%1$s</xliff:g>ஐ அனுமதிக்கவா?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"பயன்பாடுகள்"</string> <string name="app_permissions" msgid="3146758905824597178">"பயன்பாட்டு அனுமதிகள்"</string> <string name="never_ask_again" msgid="3798895821072102967">"மீண்டும் கேட்காதே"</string> <string name="no_permissions" msgid="3210542466245591574">"அனுமதிகள் இல்லை"</string> <string name="additional_permissions" msgid="6667573114240111763">"கூடுதல் அனுமதிகள்"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">மேலும் <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">மேலும் <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"மேலும் <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"இந்தப் பயன்பாடு Android இன் பழைய பதிப்புக்காக வடிவமைக்கப்பட்டது. அனுமதியை மறுத்தால் அது சரியாக செயல்படாமல் போகலாம்."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"முந்தைய அனுமதிகளைக் காட்டு"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"முந்தைய அனுமதிகளை மறை"</string> <string name="default_permission_description" msgid="4992892207044156668">"அறியாத செயலைச் செயல்படுத்தும்"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"அனுமதிக்கப்படும் பயன்பாடுகள்: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string> - <string name="menu_show_system" msgid="6773743421743728921">"அமைப்பைக் காட்டு"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"அனுமதிக்கப்படும் பயன்பாடுகள்: <xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g>"</string> + <string name="menu_show_system" msgid="6773743421743728921">"முறைமையைக் காட்டு"</string> <string name="menu_hide_system" msgid="7595471742649432977">"முறைமையை மறை"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> அனுமதிகள்"</string> <string name="no_apps" msgid="1965493419005012569">"பயன்பாடுகள் இல்லை"</string> <string name="location_settings" msgid="1774875730854491297">"இருப்பிட அமைப்புகள்"</string> <string name="location_warning" msgid="8778701356292735971">"இந்தச் சாதனத்திற்கான இருப்பிடச் சேவைகளின் வழங்குநர் <xliff:g id="APP_NAME">%1$s</xliff:g> ஆகும். இருப்பிட அமைப்புகளிலிருந்து இருப்பிட அணுகலை மாற்றலாம்."</string> <string name="system_warning" msgid="7103819124542305179">"இந்த அனுமதியை நிராகரித்தால், உங்கள் சாதனத்தின் அடிப்படை அம்சங்கள் சரியாகச் செயல்படாமல் போகலாம்."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"கொள்கையின் படி செயல்படுத்தப்பட்டது"</string> - <string name="loading" msgid="7811651799620593731">"ஏற்றுகிறது..."</string> - <string name="all_permissions" msgid="5156669007784613042">"எல்லா அனுமதிகளும்"</string> - <string name="other_permissions" msgid="2016192512386091933">"பயன்பாட்டின் பிற திறன்கள்"</string> - <string name="permission_request_title" msgid="1204446718549121199">"அனுமதி கோரிக்கை"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"திரையின் மேலே செயல்படும் பயன்பாடுகள் கண்டறியப்பட்டன"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"இந்த அனுமதியை மாற்ற, அமைப்புகள் > பயன்பாடுகள் என்பதற்குச் சென்று, திரையின் மேலே செயல்படும் பயன்பாடுகளை முதலில் முடக்கவும்"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"அமைப்புகளைத் திற"</string> </resources> diff --git a/res/values-te-rIN-television/strings.xml b/res/values-te-rIN-television/strings.xml index 5fc27106..f2f777e2 100644 --- a/res/values-te-rIN-television/strings.xml +++ b/res/values-te-rIN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"నిరాకరిస్తున్నాను, మళ్లీ అడగవద్దు"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"మీరు దీన్ని తర్వాత సెట్టింగ్లు > అనువర్తనాల్లో మార్చవచ్చు"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"సిస్టమ్ అనువర్తనాలను చూపు"</string> </resources> diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index de29a0be..b67fbf7b 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"అనుమతించు"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"తిరస్కరించు"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>లో <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> <xliff:g id="APP_NAME">%1$s</xliff:g>ని అనుమతించాలా?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> కోసం <xliff:g id="APP_NAME">%1$s</xliff:g>ని అనుమతించాలా?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"అనువర్తనాలు"</string> <string name="app_permissions" msgid="3146758905824597178">"అనువర్తన అనుమతులు"</string> <string name="never_ask_again" msgid="3798895821072102967">"మళ్లీ ఎప్పుడూ అడగవద్దు"</string> <string name="no_permissions" msgid="3210542466245591574">"అనుమతులు లేవు"</string> <string name="additional_permissions" msgid="6667573114240111763">"అదనపు అనుమతులు"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">మరో <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="one">మరో <xliff:g id="COUNT_0">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"మరో <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ఈ అనువర్తనం పాత Android సంస్కరణ కోసం రూపొందించబడింది. అనుమతిని నిరాకరించినట్లయితే ఇది ఇకపై ఉద్దేశించిన రీతిలో పని చేయకపోవచ్చు."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"ముందుగానే సెట్ చేసినవి చూపు"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ముందుగానే సెట్ చేసినవి దాచు"</string> <string name="default_permission_description" msgid="4992892207044156668">"తెలియని చర్యను చేస్తుంది"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g>లో <xliff:g id="COUNT_0">%1$d</xliff:g> అనువర్తనాలు అనుమతించబడ్డాయి"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%d</xliff:g>లో <xliff:g id="COUNT_0">%d</xliff:g> అనువర్తనాలు అనుమతించబడ్డాయి"</string> <string name="menu_show_system" msgid="6773743421743728921">"సిస్టమ్ను చూపు"</string> <string name="menu_hide_system" msgid="7595471742649432977">"సిస్టమ్ను దాచు"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> అనుమతులు"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"స్థాన సెట్టింగ్లు"</string> <string name="location_warning" msgid="8778701356292735971">"ఈ పరికరం కోసం స్థాన సేవల ప్రదాత <xliff:g id="APP_NAME">%1$s</xliff:g>. స్థాన సెట్టింగ్ల నుండి స్థాన ప్రాప్యతను సవరించవచ్చు."</string> <string name="system_warning" msgid="7103819124542305179">"మీరు ఈ అనుమతిని నిరాకరిస్తే, మీ పరికర ప్రాథమిక లక్షణాలు ఇకపై ఉద్దేశించిన రీతిలో పని చేయకపోవచ్చు."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"విధానం ద్వారా అమలు చేయబడింది"</string> - <string name="loading" msgid="7811651799620593731">"లోడ్ అవుతోంది..."</string> - <string name="all_permissions" msgid="5156669007784613042">"అన్ని అనుమతులు"</string> - <string name="other_permissions" msgid="2016192512386091933">"ఇతర అనువర్తన సామర్థ్యాలు"</string> - <string name="permission_request_title" msgid="1204446718549121199">"అనుమతి అభ్యర్థన"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"స్క్రీన్ అతివ్యాప్తి గుర్తించబడింది"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ఈ అనుమతి సెట్టింగ్ను మార్చడానికి, మీరు ముందుగా సెట్టింగ్లు > అనువర్తనాల నుండి స్క్రీన్ అతివ్యాప్తిని ఆఫ్ చేయాలి"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"సెట్టింగ్లను తెరువు"</string> </resources> diff --git a/res/values-th-television/strings.xml b/res/values-th-television/strings.xml index eba9c53e..0bb1218f 100644 --- a/res/values-th-television/strings.xml +++ b/res/values-th-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"ปฏิเสธและไม่ต้องถามอีก"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"คุณสามารถเปลี่ยนได้ภายหลังในการตั้งค่า > แอป"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"แสดงแอประบบ"</string> </resources> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 7058a652..b19f047a 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"ไม่ต้องถามอีก"</string> <string name="no_permissions" msgid="3210542466245591574">"ไม่มีสิทธิ์"</string> <string name="additional_permissions" msgid="6667573114240111763">"สิทธิ์เพิ่มเติม"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">อีก <xliff:g id="COUNT_1">%1$d</xliff:g> รายการ</item> - <item quantity="one">อีก <xliff:g id="COUNT_0">%1$d</xliff:g> รายการ</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"และอีก <xliff:g id="COUNT">%1$d</xliff:g> สิทธิ์"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"แอปนี้ออกแบบมาเพื่อ Android เวอร์ชันเก่า การปฏิเสธสิทธิ์อาจทำให้แอปไม่ทำงานตามที่ต้องการอีกต่อไป"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"แสดงสิทธิ์เดิม"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"ซ่อนสิทธิ์เดิม"</string> <string name="default_permission_description" msgid="4992892207044156668">"ดำเนินการทำงานที่ไม่รู้จัก"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"อนุญาตแล้ว <xliff:g id="COUNT_0">%1$d</xliff:g> จาก <xliff:g id="COUNT_1">%2$d</xliff:g> แอป"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"อนุญาตแล้ว <xliff:g id="COUNT_0">%d</xliff:g> จาก <xliff:g id="COUNT_1">%d</xliff:g> แอป"</string> <string name="menu_show_system" msgid="6773743421743728921">"แสดงระบบ"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ซ่อนระบบ"</string> <string name="permission_title" msgid="6495415273398916381">"สิทธิ์ในการใช้<xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"การตั้งค่าตำแหน่ง"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> เป็นผู้ให้บริการตำแหน่งสำหรับอุปกรณ์นี้ คุณสามารถแก้ไขสิทธิ์เข้าถึงตำแหน่งได้จากการตั้งค่าตำแหน่ง"</string> <string name="system_warning" msgid="7103819124542305179">"หากคุณปฏิเสธสิทธิ์นี้ คุณลักษณะพื้นฐานของอุปกรณ์อาจไม่ทำงานตามที่ควรจะเป็นอีกต่อไป"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"บังคับใช้โดยนโยบาย"</string> - <string name="loading" msgid="7811651799620593731">"กำลังโหลด…"</string> - <string name="all_permissions" msgid="5156669007784613042">"สิทธิ์ทั้งหมด"</string> - <string name="other_permissions" msgid="2016192512386091933">"ความสามารถอื่นๆ ของแอป"</string> - <string name="permission_request_title" msgid="1204446718549121199">"คำขอสิทธิ์"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"ตรวจพบการวางซ้อนหน้าจอ"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"ในการเปลี่ยนแปลงการตั้งค่าสิทธิ์นี้ ก่อนอื่น คุณต้องปิดการวางซ้อนหน้าจอที่การตั้งค่า > แอป"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"เปิดการตั้งค่า"</string> </resources> diff --git a/res/values-tl-television/strings.xml b/res/values-tl-television/strings.xml index 074886db..007f3916 100644 --- a/res/values-tl-television/strings.xml +++ b/res/values-tl-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Tanggihan at huwag nang tatanunging muli"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Mababago mo ito sa ibang pagkakataon sa Mga Setting > Mga App"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Ipakita ang mga app ng system"</string> </resources> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index eb7dbc99..7c71b060 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Huwag kailanman itanong muli"</string> <string name="no_permissions" msgid="3210542466245591574">"Walang mga pahintulot"</string> <string name="additional_permissions" msgid="6667573114240111763">"Mga karagdagang pahintulot"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> pa</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pa</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> pa"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ang app na ito ay idinisenyo para sa mas lumang bersyon ng Android. Kapag tinanggihan ang pahintulot, maaaring hindi na ito gumana ayon sa inaasahan."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Ipakita ang legacy"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Itago ang legacy"</string> <string name="default_permission_description" msgid="4992892207044156668">"gumawa ng hindi kilalang pagkilos"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Pinapayagan ang <xliff:g id="COUNT_0">%1$d</xliff:g> sa <xliff:g id="COUNT_1">%2$d</xliff:g> (na) app"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Pinapayagan ang <xliff:g id="COUNT_0">%d</xliff:g> sa <xliff:g id="COUNT_1">%d</xliff:g> (na) app"</string> <string name="menu_show_system" msgid="6773743421743728921">"Ipakita ang system"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Itago ang system"</string> <string name="permission_title" msgid="6495415273398916381">"Mga pahintulot sa <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Mga Setting ng Lokasyon"</string> <string name="location_warning" msgid="8778701356292735971">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay isang provider ng mga serbisyo sa lokasyon para sa device na ito. Mababago ang access sa lokasyon mula sa mga setting ng lokasyon."</string> <string name="system_warning" msgid="7103819124542305179">"Kung tatanggihan mo ang pahintulot na ito, maaaring hindi na gumana ang mga pangunahing feature ng iyong device gaya ng inaasahan."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Ipinapatupad sa pamamagitan ng patakaran"</string> - <string name="loading" msgid="7811651799620593731">"Naglo-load..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Lahat ng pahintulot"</string> - <string name="other_permissions" msgid="2016192512386091933">"Iba pang mga kakayahan ng app"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Kahilingan sa pagpapahintulot"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Natukoy ang overlay ng screen"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Upang baguhin ang setting ng pahintulot na ito, kailangan mo munang i-off ang overlay ng screen mula sa Mga Setting > Mga App"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Buksan ang mga setting"</string> </resources> diff --git a/res/values-tr-television/strings.xml b/res/values-tr-television/strings.xml index ab51750e..24947be3 100644 --- a/res/values-tr-television/strings.xml +++ b/res/values-tr-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Reddet ve bir daha sorma"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bu ayarı daha sonra Ayarlar > Uygulamalar\'dan değiştirebilirsiniz"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Sistem uygulamalarını göster"</string> </resources> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 6b5437b8..720d1a13 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Bir daha sorma"</string> <string name="no_permissions" msgid="3210542466245591574">"İzin yok"</string> <string name="additional_permissions" msgid="6667573114240111763">"Ek izinler"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tane daha</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tane daha</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> tane daha"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Bu uygulama, Android\'in daha eski bir sürümü için tasarlandı. İznin reddedilmesi, uygulamanın bundan sonra amaçlandığı gibi çalışmamasına neden olabilir."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Eskileri göster"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Eskileri gizle"</string> <string name="default_permission_description" msgid="4992892207044156668">"bilinmeyen bir işlem gerçekleştirme"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> uygulamaya izin veriliyor"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> / <xliff:g id="COUNT_1">%d</xliff:g> uygulamaya izin veriliyor"</string> <string name="menu_show_system" msgid="6773743421743728921">"Sistemi göster"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Sistemi gizle"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izinleri"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Konum Ayarları"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>, bu cihaz için konum hizmetlerinin bir sağlayıcısıdır. Konum erişimi, konum ayarlarından değiştirilebilir."</string> <string name="system_warning" msgid="7103819124542305179">"Bu izni reddederseniz cihazınızın temel özellikleri artık beklendiği gibi çalışmayabilir."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Politika tarafından zorunlu tutuldu"</string> - <string name="loading" msgid="7811651799620593731">"Yükleniyor..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Tüm izinler"</string> - <string name="other_permissions" msgid="2016192512386091933">"Diğer uygulama özellikleri"</string> - <string name="permission_request_title" msgid="1204446718549121199">"İzin isteği"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran yer paylaşımı tespit edildi"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Bu izin ayarını değiştirmek için ilk olarak Ayarlar > Uygulamalar\'dan ekran yer paylaşımını kapatmanız gerekir"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Ayarları aç"</string> </resources> diff --git a/res/values-uk-television/strings.xml b/res/values-uk-television/strings.xml index 1db8e422..9cee135b 100644 --- a/res/values-uk-television/strings.xml +++ b/res/values-uk-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Відмовити й більше не запитувати"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Можна змінити згодом у меню \"Налаштування\" > \"Додатки\""</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> з <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Показати системні додатки"</string> </resources> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 1450c9d6..bef09fd4 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -96,15 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Більше не запитувати"</string> <string name="no_permissions" msgid="3210542466245591574">"Немає дозволів"</string> <string name="additional_permissions" msgid="6667573114240111763">"Додаткові дозволи"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="few">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="many">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item> - <item quantity="other">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"Ще <xliff:g id="COUNT">%1$d</xliff:g>"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Цей додаток створено для старішої версії ОС Android. Якщо скасувати дозвіл, він може працювати неналежним чином."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Показати застарілі дозволи"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Сховати застарілі дозволи"</string> <string name="default_permission_description" msgid="4992892207044156668">"виконувати невідому дію"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Дозволено додатків: <xliff:g id="COUNT_0">%1$d</xliff:g> з <xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Дозволено додатків: <xliff:g id="COUNT_0">%d</xliff:g> з <xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Показати системні додатки"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Сховати системні додатки"</string> <string name="permission_title" msgid="6495415273398916381">"Дозволи: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string> @@ -112,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Налаштування геоданих"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> є постачальником служб локації для цього пристрою. Доступом до місцезнаходження можна керувати в налаштуваннях геоданих."</string> <string name="system_warning" msgid="7103819124542305179">"Якщо скасувати цей дозвіл, основні функції вашого пристрою можуть працювати неналежним чином."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Застосовується правилом"</string> - <string name="loading" msgid="7811651799620593731">"Завантаження…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Усі дозволи"</string> - <string name="other_permissions" msgid="2016192512386091933">"Інші дозволи додатка"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Запит на дозвіл"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Виявлено накладання на екрані"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Щоб змінити налаштування цього дозволу, спершу вимкніть накладання на екрані в меню \"Налаштування\" > \"Додатки\""</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Відкрити налаштування"</string> </resources> diff --git a/res/values-ur-rPK-television/strings.xml b/res/values-ur-rPK-television/strings.xml index 234ef31a..80a5279c 100644 --- a/res/values-ur-rPK-television/strings.xml +++ b/res/values-ur-rPK-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"انکار کریں اور دوبارہ مت پوچھیں"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"آپ بعد میں ترتیبات > ایپس میں جا کر اسے تبدیل کرسکتے ہیں"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"سسٹم ایپس دکھائیں"</string> </resources> diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 2ed1a3dd..ff6c5280 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"اجازت دیں"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"مسترد کریں"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> از <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو \"<xliff:g id="ACTION">%2$s</xliff:g>\" کی اجازت دیں؟"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو <xliff:g id="ACTION">%2$s</xliff:g> کی اجازت دیں؟"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ایپس"</string> <string name="app_permissions" msgid="3146758905824597178">"ایپ کی اجازتیں"</string> <string name="never_ask_again" msgid="3798895821072102967">"دوبارہ کبھی نہ پوچھیں"</string> <string name="no_permissions" msgid="3210542466245591574">"کوئی اجازتیں نہیں ہیں"</string> <string name="additional_permissions" msgid="6667573114240111763">"اضافی اجازتیں"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> مزید</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> مزید</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> مزید"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"یہ ایپ Android کے ایک پرانے ورژن کیلئے ڈیزائن کی گئی تھی۔ اجازت دینے سے انکار کرنے پر ممکن ہے کہ وہ مزید ٹھیک سے کام نہ کرے۔"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"پرانی اجازتیں دکھائیں"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"پرانی اجازتیں چھپائیں"</string> <string name="default_permission_description" msgid="4992892207044156668">"ایک نامعلوم کارروائی کو انجام دیں"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> میں سے <xliff:g id="COUNT_1">%2$d</xliff:g> ایپس کو اجازت دے دی گئی"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> میں سے <xliff:g id="COUNT_1">%d</xliff:g> ایپس کو اجازت دے دی گئی"</string> <string name="menu_show_system" msgid="6773743421743728921">"سسٹم دکھائیں"</string> <string name="menu_hide_system" msgid="7595471742649432977">"سسٹم چھپائیں"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> اجازتیں"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"مقام کی ترتیبات"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> اس آلہ کیلئے مقام کی سروسز کا فراہم کنندہ ہے۔ مقام کی رسائی میں مقام کی ترتیبات سے ترمیم کی جا سکتی ہے۔"</string> <string name="system_warning" msgid="7103819124542305179">"اگرآپ اس اجازت کو مسترد کرتے ہیں تو شاید آپ کے آلہ کی بنیادی خصوصیات ٹھیک سے کام نہ کریں۔"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"پالیسی کی طرف سے نافذ کردہ"</string> - <string name="loading" msgid="7811651799620593731">"لوڈ ہورہا ہے…"</string> - <string name="all_permissions" msgid="5156669007784613042">"تمام اجازاتیں"</string> - <string name="other_permissions" msgid="2016192512386091933">"دوسری ایپ اہلیتیں"</string> - <string name="permission_request_title" msgid="1204446718549121199">"اجازت کی درخواست"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"اسکرین اورلے کا پتہ چلا ہے"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"اس اجازت کی ترتیب کو تبدیل کرنے کیلئے آپ کو پہلے ترتیبات > Apps سے سکرین اورلے آف کرنا ہوگا"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"ترتیبات کھولیں"</string> </resources> diff --git a/res/values-uz-rUZ-television/strings.xml b/res/values-uz-rUZ-television/strings.xml index faf8c269..9d43d7be 100644 --- a/res/values-uz-rUZ-television/strings.xml +++ b/res/values-uz-rUZ-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Rad etilsin va boshqa so‘ralmasin"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Siz buni keyinroq Sozlamalar > Ilovalar bo‘limi orqali ham o‘zgartirishingiz mumkin"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Tizim ilovalarini ko‘rsatish"</string> </resources> diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index cebee29a..08410df9 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -95,14 +95,13 @@ <string name="app_permissions" msgid="3146758905824597178">"Ilovalar uchun ruxsatlar"</string> <string name="never_ask_again" msgid="3798895821072102967">"Boshqa so‘ralmasin"</string> <string name="no_permissions" msgid="3210542466245591574">"Hech qanday ruxsat talab qilinmaydi"</string> - <string name="additional_permissions" msgid="6667573114240111763">"Qo‘shimcha ruxsatlar"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">Yana <xliff:g id="COUNT_1">%1$d</xliff:g> ta</item> - <item quantity="one">Yana <xliff:g id="COUNT_0">%1$d</xliff:g> ta</item> - </plurals> + <string name="additional_permissions" msgid="6667573114240111763">"Qo‘shimcha ruxsatnomalar"</string> + <string name="additional_permissions_more" msgid="5359708933519276635">"Yana <xliff:g id="COUNT">%1$d</xliff:g> ta"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Bu ilova Androidning eskiroq versiyasiga mo‘ljallab ishlab chiqilgan. Agar ruxsat bermasangiz, u kutilganidek ishlamasligi mumkin."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Eskirlarini ko‘rsatish"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Eskilarini berkitish"</string> <string name="default_permission_description" msgid="4992892207044156668">"noma’lum amalni bajarish"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Ruxsat berilgan: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Ruxsat berilgan: <xliff:g id="COUNT_0">%d</xliff:g>/<xliff:g id="COUNT_1">%d</xliff:g>"</string> <string name="menu_show_system" msgid="6773743421743728921">"Tizimga oid jarayonlarni ko‘rsatish"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Tizimga oid jarayonlarni berkitish"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> uchun ruxsatlar"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Joylashuv sozlamalari"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu qurilma uchun joylashuvni aniqlash xizmatini taqdim etuvchi ilova hisoblanadi. Joylashuv ma’lumotlariga kirish vakolatini joylashuv sozlamalaridan o‘zgartirish mumkin."</string> <string name="system_warning" msgid="7103819124542305179">"Agar bu ruxsatni rad qilsangiz, qurilmangizning asosiy funksiyalari bundan buyon kutilganidek ishlamasligi mumkin."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Qoidaga muvofiq"</string> - <string name="loading" msgid="7811651799620593731">"Yuklanmoqda…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Barcha ruxsatnomalar"</string> - <string name="other_permissions" msgid="2016192512386091933">"Ilovaning boshqa imkoniyatlari"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Ruxsatnoma so‘rovi"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran ustidan ochiladigan ilova aniqlandi"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Bu ruxsatnoma parametrini o‘zgartirish uchun avval Sozlamalar > Ilovalar bo‘limidan ekran ustidan ochilish funksiyasini o‘chirib qo‘ying"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Sozlamalarni ochish"</string> </resources> diff --git a/res/values-vi-television/strings.xml b/res/values-vi-television/strings.xml index fd7282c7..9c8ac070 100644 --- a/res/values-vi-television/strings.xml +++ b/res/values-vi-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Từ chối và không hỏi lại"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bạn có thể thay đổi cài đặt này sau trong Cài đặt > Ứng dụng"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Hiển thị ứng dụng hệ thống"</string> </resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 69bc823b..54f1326c 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Không bao giờ hỏi lại"</string> <string name="no_permissions" msgid="3210542466245591574">"Không có quyền"</string> <string name="additional_permissions" msgid="6667573114240111763">"Quyền khác"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> quyền khác</item> - <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> quyền khác</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> khác"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ứng dụng này được thiết kế cho các phiên bản Android cũ hơn. Từ chối quyền có thể làm cho ứng dụng không còn hoạt động như mong muốn."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Hiển thị quyền cũ"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Ẩn quyền cũ"</string> <string name="default_permission_description" msgid="4992892207044156668">"thực hiện hành động không xác định"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"Đã cho phép <xliff:g id="COUNT_0">%1$d</xliff:g> trong số <xliff:g id="COUNT_1">%2$d</xliff:g> ứng dụng"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"Đã cho phép <xliff:g id="COUNT_0">%d</xliff:g> trong số <xliff:g id="COUNT_1">%d</xliff:g> ứng dụng"</string> <string name="menu_show_system" msgid="6773743421743728921">"Hiển thị hệ thống"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Ẩn hệ thống"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> quyền"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Cài đặt vị trí"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> là nhà cung cấp dịch vụ vị trí cho thiết bị này. Bạn có thể sửa đổi quyền truy cập vị trí từ cài đặt vị trí."</string> <string name="system_warning" msgid="7103819124542305179">"Nếu bạn từ chối quyền này, các tính năng cơ bản trên thiết bị của bạn có thể không còn hoạt động như dự kiến."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Được thực thi bằng chính sách"</string> - <string name="loading" msgid="7811651799620593731">"Đang tải…"</string> - <string name="all_permissions" msgid="5156669007784613042">"Tất cả các quyền"</string> - <string name="other_permissions" msgid="2016192512386091933">"Các khả năng khác của ứng dụng"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Yêu cầu quyền"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Đã phát hiện lớp phủ màn hình"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Để thay đổi cài đặt quyền này, trước tiên bạn phải tắt lớp phủ màn hình từ Cài đặt > Ứng dụng"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Mở cài đặt"</string> </resources> diff --git a/res/values-watch/attrs.xml b/res/values-watch/attrs.xml new file mode 100644 index 00000000..e220f4c8 --- /dev/null +++ b/res/values-watch/attrs.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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> + <!-- START: Ported from WearableSupport --> + <declare-styleable name="CircledImageView"> + <attr name="android:src" /> + <attr name="circle_color" format="color" /> + <attr name="circle_radius" format="dimension" /> + <attr name="circle_radius_pressed" format="dimension" /> + <attr name="circle_border_width" format="dimension" /> + <attr name="circle_border_color" format="color" /> + <attr name="circle_padding" format="dimension" /> + <attr name="shadow_width" format="dimension" /> + <attr name="image_circle_percentage" format="dimension" /> + <attr name="image_horizontal_offcenter_percentage" format="dimension" /> + <attr name="image_tint" format="color" /> + <attr name="circle_radius_percent" format="fraction" /> + <attr name="circle_radius_pressed_percent" format="fraction" /> + </declare-styleable> + <!-- END: Ported from WearableSupport --> +</resources> diff --git a/res/values-watch/colors.xml b/res/values-watch/colors.xml new file mode 100644 index 00000000..b81d6e3b --- /dev/null +++ b/res/values-watch/colors.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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> + <color name="grant_permissions_app_color">@color/grant_permissions_white_text_alpha_100</color> + <color name="grant_permissions_progress_color">@color/grant_permissions_white_text_alpha_100</color> + <color name="grant_permissions_title_color">@color/grant_permissions_white_text_alpha_70</color> + + <color name="grant_permissions_white_text_alpha_100">@color/off_white</color> + <color name="grant_permissions_white_text_alpha_70">#b2eeeeee</color> + + <color name="permissions_settings_item_color">#FFFFFFFF</color> + + <color name="off_white">#ffeeeeee</color> + + <color name="primary_text_light">#424242</color> + + <!-- Copied from wearable support --> + <color name="circular_button_disabled">#757575</color> + + <!-- Copied from wearable Clockwork Settings --> + <color name="cw_dark_gray">#424242</color> +</resources> diff --git a/res/values-watch/dimens.xml b/res/values-watch/dimens.xml new file mode 100644 index 00000000..24d2a058 --- /dev/null +++ b/res/values-watch/dimens.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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> + <dimen name="grant_permissions_app_icon_size">20dp</dimen> + <dimen name="grant_permissions_app_icon_margin_top">6dp</dimen> + + <dimen name="grant_permissions_app_breadcrumb_margin_top">6dp</dimen> + <dimen name="grant_permissions_title_margin_top">6dp</dimen> + <dimen name="grant_permissions_message_side_padding">32dp</dimen> + + <dimen name="action_dialog_z">16dp</dimen> + + <!-- Dimensions for the Grant permissions Confirmation Dialog --> + <dimen name="conf_diag_floating_height">16dp</dimen> + <dimen name="conf_diag_button_container_top_margin">6dp</dimen> + <dimen name="conf_diag_button_container_height">72dp</dimen> + <dimen name="conf_diag_2button_margin_side">16dp</dimen> + <dimen name="conf_diag_2button_margin_top">9dp</dimen> + <dimen name="conf_diag_3button_padding_side">32dp</dimen> + <dimen name="conf_diag_3button_padding_bottom">22dp</dimen> + + + <!-- START: Ported values --> + <item name="default_settings_circle_radius_percent" format="fraction" type="dimen">40%</item> + <item name="selected_settings_circle_radius_percent" format="fraction" type="dimen">50%</item> + <dimen name="round_content_padding_left">40dp</dimen> + <dimen name="round_content_padding_right">24dp</dimen> + <dimen name="content_padding_left">12dp</dimen> + <dimen name="settings_wearable_list_view_vertical_padding_round">14dp</dimen> + <dimen name="setting_header_extra_line_height">16dp</dimen> + <dimen name="setting_long_header_text_size">20dp</dimen> + <dimen name="settings_header_base_height">50dp</dimen> + <dimen name="settings_header_top_margin">14dp</dimen> + <dimen name="settings_header_top_margin_circular">18dp</dimen> + <dimen name="settings_header_top_margin_multiline">6dp</dimen> + <dimen name="settings_header_top_margin_circular_multiline">16dp</dimen> + <dimen name="setting_short_header_text_size">24dp</dimen> + <dimen name="settings_text_margin_left">10dp</dimen> + <!-- END: Ported values --> +</resources> diff --git a/res/values-watch/integers.xml b/res/values-watch/integers.xml new file mode 100644 index 00000000..365ac3ab --- /dev/null +++ b/res/values-watch/integers.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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"> + <!-- START: Ported values --> + <integer name="short_title_length">13</integer> + <integer name="char_limit_per_line">18</integer> + <!-- END: Ported values --> +</resources> diff --git a/res/values-watch/strings.xml b/res/values-watch/strings.xml new file mode 100644 index 00000000..82fe4ae9 --- /dev/null +++ b/res/values-watch/strings.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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"> + <!-- Title for the dialog button to deny a permission grant and never ask the user again. [CHAR LIMIT=29]--> + <string name="grant_dialog_button_deny_dont_ask_again">Deny, don\'t ask again</string> + + <!-- Template for the current permission from the total number of permissions. --> + <string name="current_permission_template"> + <xliff:g id="current_permission_index" example="1">%1$s</xliff:g> / + <xliff:g id="permission_count" example="2">%2$s</xliff:g> + </string> + + <!-- Preference row title for showing system apps. --> + <string name="preference_show_system_apps">Show system apps</string> + + <!-- Summary of a permission switch when it's enforced by policy [CHAR LIMIT=17] --> + <string name="permission_summary_enforced_by_policy">Can\'t be changed</string> + + <!-- Generic text to indicate that a setting is enabled. Should be in all caps. [CHAR LIMIT=40] --> + <string name="generic_enabled">ENABLED</string> + <!-- Generic text to indicate that a setting is disabled. Should be in all caps. [CHAR LIMIT=40] --> + <string name="generic_disabled">DISABLED</string> +</resources> diff --git a/res/values-watch/styles.xml b/res/values-watch/styles.xml new file mode 100644 index 00000000..01ab90eb --- /dev/null +++ b/res/values-watch/styles.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 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> + <style name="Theme.DialogWhenLarge" parent="@android:style/Theme.DeviceDefault.NoActionBar"/> + + <!-- START: Ported values --> + <style name="TextAppearance.Wearable.Small" parent="android:TextAppearance.Medium"> + <item name="android:textSize">16sp</item> + <item name="android:textColor">@color/primary_text_light</item> + </style> + + <style name="TextView.Small" parent="@android:style/Widget.Holo.Light"> + <item name="android:fontFamily">sans-serif-condensed</item> + <item name="android:textAppearance">@style/TextAppearance.Wearable.Small</item> + </style> + + <style name="TextView.Small.Light"> + <item name="android:fontFamily">sans-serif-condensed-light</item> + <item name="android:textAppearance">@style/TextAppearance.Wearable.Small</item> + </style> + + <style name="TextAppearance.Settings.Label" parent="android:TextAppearance.Medium"> + <item name="android:textSize">14sp</item> + <item name="android:textColor">#FFFFFFFF</item> + </style> + + <style name="TextAppearance.Settings.Label.Large"> + <item name="android:textSize">16sp</item> + </style> + + <style name="TextView.Settings.Label" parent="TextView.Small.Light"> + <item name="android:textAppearance">@style/TextAppearance.Settings.Label</item> + </style> + <!-- END: Ported values --> +</resources> diff --git a/res/values-watch/themes.xml b/res/values-watch/themes.xml new file mode 100644 index 00000000..2dfc7519 --- /dev/null +++ b/res/values-watch/themes.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2015 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> + <style name="Settings" parent="@android:style/Theme.DeviceDefault.NoActionBar"> + <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Permissions</item> + <item name="android:windowBackground">@color/cw_dark_gray</item> + <item name="android:colorBackground">@color/cw_dark_gray</item> + </style> + + <style name="GrantPermissions" parent="Settings"> + <item name="android:windowIsFloating">true</item> + <item name="android:windowElevation">@dimen/action_dialog_z</item> + </style> + + <style name="GrantPermissions.BreadcrumbText"> + <item name="android:fontFamily">sans-serif-condensed</item> + <item name="android:textSize">16sp</item> + <item name="android:textColor">@color/grant_permissions_progress_color</item> + </style> + + <style name="GrantPermissions.TitleText"> + <item name="android:fontFamily">sans-serif-condensed-light</item> + <item name="android:textSize">18sp</item> + <item name="android:textColor">@color/grant_permissions_title_color</item> + <item name="android:lineSpacingMultiplier">1.221</item> + </style> + + <!-- Copied from WearableSupport lib --> + <style name="TextAppearance.WearDiag" parent="android:TextAppearance.Medium"> + <item name="android:textColor">#FFFFFF</item> + <item name="android:textSize">16sp</item> + </style> + <style name="TextAppearance.WearDiag.Button"> + <item name="android:textSize">16sp</item> + </style> + <style name="Widget.WearDiag.Button" parent="@android:style/Widget.DeviceDefault.Button"> + <item name="android:fontFamily">sans-serif-condensed-light</item> + <item name="android:gravity">center_vertical|left</item> + <item name="android:textAppearance">@style/TextAppearance.WearDiag.Button</item> + <item name="android:background">@android:color/transparent</item> + <item name="android:minLines">1</item> + <item name="android:maxLines">3</item> + <item name="android:ellipsize">marquee</item> + <item name="android:layout_height">60dp</item> + <item name="android:layout_width">wrap_content</item> + <item name="android:drawablePadding">12dp</item> + </style> +</resources> diff --git a/res/values-zh-rCN-television/strings.xml b/res/values-zh-rCN-television/strings.xml index be3cdce7..392d1a69 100644 --- a/res/values-zh-rCN-television/strings.xml +++ b/res/values-zh-rCN-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"拒绝,不要再询问"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"您以后可以在“设置”>“应用”中更改此设置"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"显示系统应用"</string> </resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 4248b05c..425592ae 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -92,17 +92,16 @@ <string name="current_permission_template" msgid="6378304249516652817">"第 <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> 项权限(共 <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> 项)"</string> <string name="permission_warning_template" msgid="5209102765005869454">"要允许<xliff:g id="APP_NAME">%1$s</xliff:g><xliff:g id="ACTION">%2$s</xliff:g>吗?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"应用"</string> - <string name="app_permissions" msgid="3146758905824597178">"应用所需权限"</string> + <string name="app_permissions" msgid="3146758905824597178">"应用权限"</string> <string name="never_ask_again" msgid="3798895821072102967">"不再询问"</string> <string name="no_permissions" msgid="3210542466245591574">"没有权限"</string> <string name="additional_permissions" msgid="6667573114240111763">"其他权限"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">另外 <xliff:g id="COUNT_1">%1$d</xliff:g> 项</item> - <item quantity="one">另外 <xliff:g id="COUNT_0">%1$d</xliff:g> 项</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"另外 <xliff:g id="COUNT">%1$d</xliff:g> 项"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"此应用专为旧版 Android 打造。拒绝权限可能会导致其无法正常运行。"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"显示旧权限"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"隐藏旧权限"</string> <string name="default_permission_description" msgid="4992892207044156668">"执行未知操作"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"已授权 <xliff:g id="COUNT_0">%1$d</xliff:g> 个应用(共 <xliff:g id="COUNT_1">%2$d</xliff:g> 个)"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"已授权 <xliff:g id="COUNT_0">%d</xliff:g> 个应用(共 <xliff:g id="COUNT_1">%d</xliff:g> 个)"</string> <string name="menu_show_system" msgid="6773743421743728921">"显示系统应用"</string> <string name="menu_hide_system" msgid="7595471742649432977">"隐藏系统应用"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>权限"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"位置信息设置"</string> <string name="location_warning" msgid="8778701356292735971">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”是此设备的一个位置信息服务提供程序。您可以在位置信息设置中修改位置信息使用权。"</string> <string name="system_warning" msgid="7103819124542305179">"如果您拒绝此权限,您设备的基本功能可能会无法正常使用。"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"依据政策强制执行"</string> - <string name="loading" msgid="7811651799620593731">"正在加载…"</string> - <string name="all_permissions" msgid="5156669007784613042">"所有权限"</string> - <string name="other_permissions" msgid="2016192512386091933">"其他应用功能"</string> - <string name="permission_request_title" msgid="1204446718549121199">"权限请求"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"检测到屏幕叠加层"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"要更改此权限设置,您必须首先在“设置”>“应用”中关闭屏幕叠加层"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"打开设置"</string> </resources> diff --git a/res/values-zh-rHK-television/strings.xml b/res/values-zh-rHK-television/strings.xml index cc6a84df..8e95036d 100644 --- a/res/values-zh-rHK-television/strings.xml +++ b/res/values-zh-rHK-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"拒絕,不要再詢問"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"您日後可以在 [設定] > [應用程式] 中變更這項設定"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"顯示系統應用程式"</string> </resources> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 947ba084..ad986cb5 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"不再要求輸入"</string> <string name="no_permissions" msgid="3210542466245591574">"沒有權限"</string> <string name="additional_permissions" msgid="6667573114240111763">"其他權限"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">還有 <xliff:g id="COUNT_1">%1$d</xliff:g> 個</item> - <item quantity="one">還有 <xliff:g id="COUNT_0">%1$d</xliff:g> 個</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"還有 <xliff:g id="COUNT">%1$d</xliff:g> 個"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"這個應用程式專為舊版本的 Android 設計。拒絕權限可能會導致它無法如預期 運作。"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"顯示舊的權限"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"隱藏舊的權限"</string> <string name="default_permission_description" msgid="4992892207044156668">"執行不明的操作"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"已允許 <xliff:g id="COUNT_0">%1$d</xliff:g> 個應用程式 (共 <xliff:g id="COUNT_1">%2$d</xliff:g> 個)"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"已允許 <xliff:g id="COUNT_0">%d</xliff:g> 個應用程式 (共 <xliff:g id="COUNT_1">%d</xliff:g> 個)"</string> <string name="menu_show_system" msgid="6773743421743728921">"顯示系統"</string> <string name="menu_hide_system" msgid="7595471742649432977">"隱藏系統"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>權限"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"位置設定"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>為此裝置提供位置資訊服務。您可以在位置設定中更改位置存取權。"</string> <string name="system_warning" msgid="7103819124542305179">"如果您拒絕這個權限,您的裝置的基本功能可能無法正常運作。"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"由政策強制執行"</string> - <string name="loading" msgid="7811651799620593731">"正在載入…"</string> - <string name="all_permissions" msgid="5156669007784613042">"所有權限"</string> - <string name="other_permissions" msgid="2016192512386091933">"其他應用程式功能"</string> - <string name="permission_request_title" msgid="1204446718549121199">"權限要求"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"已偵測到螢幕重疊功能"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"如要變更此權限設定,請先前往 [設定] > [應用程式],以關閉螢幕重疊功能"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"開啟設定"</string> </resources> diff --git a/res/values-zh-rTW-television/strings.xml b/res/values-zh-rTW-television/strings.xml index aa860102..15928001 100644 --- a/res/values-zh-rTW-television/strings.xml +++ b/res/values-zh-rTW-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"拒絕且不要再詢問"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"您日後可在 [設定] > [應用程式] 中進行變更"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"顯示系統應用程式"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 2c9861f4..7b56e6b9 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -90,19 +90,18 @@ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"允許"</string> <string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒絕"</string> <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="permission_warning_template" msgid="5209102765005869454">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string> + <string name="permission_warning_template" msgid="5209102765005869454">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string> <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"應用程式"</string> <string name="app_permissions" msgid="3146758905824597178">"應用程式權限"</string> <string name="never_ask_again" msgid="3798895821072102967">"不要再詢問我"</string> <string name="no_permissions" msgid="3210542466245591574">"沒有權限"</string> <string name="additional_permissions" msgid="6667573114240111763">"其他權限"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="other">還有 <xliff:g id="COUNT_1">%1$d</xliff:g> 項</item> - <item quantity="one">還有 <xliff:g id="COUNT_0">%1$d</xliff:g> 項</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"還有 <xliff:g id="COUNT">%1$d</xliff:g> 項"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"這個應用程式是為舊版 Android 所開發。拒絕授予權限可能導致應用程式無法正常運作。"</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"顯示舊有權限"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"隱藏舊有權限"</string> <string name="default_permission_description" msgid="4992892207044156668">"執行不明的動作"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"已授權 <xliff:g id="COUNT_0">%1$d</xliff:g> 個應用程式 (共 <xliff:g id="COUNT_1">%2$d</xliff:g> 個)"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"已授權 <xliff:g id="COUNT_0">%d</xliff:g> 個應用程式 (共 <xliff:g id="COUNT_1">%d</xliff:g> 個)"</string> <string name="menu_show_system" msgid="6773743421743728921">"顯示系統"</string> <string name="menu_hide_system" msgid="7595471742649432977">"隱藏系統"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>權限"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"位置資訊設定"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> 是這台裝置的定位服務供應商。您可以在位置資訊設定中修改位置資訊存取權。"</string> <string name="system_warning" msgid="7103819124542305179">"如果您拒絕這項權限,裝置的基本功能可能無法正常運作。"</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"依據政策規定執行"</string> - <string name="loading" msgid="7811651799620593731">"載入中…"</string> - <string name="all_permissions" msgid="5156669007784613042">"所有權限"</string> - <string name="other_permissions" msgid="2016192512386091933">"其他應用程式功能"</string> - <string name="permission_request_title" msgid="1204446718549121199">"權限要求"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"偵測到畫面重疊圖層"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"如要變更這項權限設定,您必須先依序前往 [設定] > [應用程式],關閉裝置畫面重疊圖層"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"開啟設定"</string> </resources> diff --git a/res/values-zu-television/strings.xml b/res/values-zu-television/strings.xml index 0d9cbeab..af79ec95 100644 --- a/res/values-zu-television/strings.xml +++ b/res/values-zu-television/strings.xml @@ -19,5 +19,4 @@ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Yenqaba futhi ungasabuzi"</string> <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ungashintsha lokhu kamuva kuzilungiselelo > izinhlelo zokusebenza"</string> <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> - <string name="preference_show_system_apps" msgid="7330308025768596149">"Bonisa izinhlelo zokusebenza zesistimu"</string> </resources> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index f0524bab..718d5093 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -96,13 +96,12 @@ <string name="never_ask_again" msgid="3798895821072102967">"Ungaphinde ubuze"</string> <string name="no_permissions" msgid="3210542466245591574">"Akukho zimvume"</string> <string name="additional_permissions" msgid="6667573114240111763">"Izimvume ezingeziwe"</string> - <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> okuningi</item> - <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> okuningi</item> - </plurals> + <string name="additional_permissions_more" msgid="5359708933519276635">"<xliff:g id="COUNT">%1$d</xliff:g> okuningi"</string> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Lolu hlelo lokusebenza ludizayinelwe inguqulo endala ye-Android. Ukwala imvume kungalibangela ukuthi lingasasebenzi njengoba kuhlosiwe."</string> + <string name="show_legacy_permissions" msgid="8564016242732902337">"Bonisa ifa"</string> + <string name="hide_legacy_permissions" msgid="663430183171847324">"Fihla ifa"</string> <string name="default_permission_description" msgid="4992892207044156668">"Yenza isenzo esingaziwa"</string> - <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> kuzinhlelo zokusebenza ezingu-<xliff:g id="COUNT_1">%2$d</xliff:g> ezivunyelwe"</string> + <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%d</xliff:g> kuzinhlelo zokusebenza ezingu-<xliff:g id="COUNT_1">%d</xliff:g> ezivunyelwe"</string> <string name="menu_show_system" msgid="6773743421743728921">"Bonisa isistimu"</string> <string name="menu_hide_system" msgid="7595471742649432977">"Fihla isistimu"</string> <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izimvume"</string> @@ -110,12 +109,4 @@ <string name="location_settings" msgid="1774875730854491297">"Izilungiselelo Zendawo"</string> <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ingumhlinzeki wamasevisi wendawo kule divayisi. Ukufinyelela kwendawo kungashintshwa kusuka kuzilungiselelo zendawo."</string> <string name="system_warning" msgid="7103819124542305179">"Uma unqabela le mvume, izici eziyisisekelo zedivayisi yakho zingahle zingasasebenzi njengoba zihlosiwe."</string> - <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Isetshenziswe yinqubomgomo"</string> - <string name="loading" msgid="7811651799620593731">"Iyalayisha..."</string> - <string name="all_permissions" msgid="5156669007784613042">"Zonke izimvume"</string> - <string name="other_permissions" msgid="2016192512386091933">"Amanye amakhono wohlelo lokusebenza"</string> - <string name="permission_request_title" msgid="1204446718549121199">"Isicelo semvume"</string> - <string name="screen_overlay_title" msgid="3021729846864038529">"Kutholwe imbondela yesikrini"</string> - <string name="screen_overlay_message" msgid="2141944461571677331">"Ukuze uguqule lesi silungiselelo semvume, kuzomele uqale uvale imbondela yesikrini kusukela ku-Izilungiselelo > Izinhlelo zokusebenza"</string> - <string name="screen_overlay_button" msgid="4344544843349937743">"Vula izilungiselelo"</string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index d79ba63d..0f1a73f2 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -274,4 +274,9 @@ before permissions can be changed. [CHAR LIMIT=NONE] --> <string name="screen_overlay_button">Open settings</string> + <!-- Title of dialog telling users that Install/Uninstall action is not supported on Android Wear. --> + <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. --> + <string name="wear_not_allowed_dlg_text">Instal/Uninstall actions not supported on Wear.</string> + </resources> diff --git a/src/android/support/wearable/view/CircledImageView.java b/src/android/support/wearable/view/CircledImageView.java new file mode 100644 index 00000000..53cb78cf --- /dev/null +++ b/src/android/support/wearable/view/CircledImageView.java @@ -0,0 +1,603 @@ +/* + * Copyright (C) 2015 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.support.wearable.view; + +import android.animation.ArgbEvaluator; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.RadialGradient; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; + +import java.util.Objects; +import com.android.packageinstaller.R; + +import com.android.packageinstaller.R; + +/** + * An image view surrounded by a circle. + */ +@TargetApi(Build.VERSION_CODES.LOLLIPOP) +public class CircledImageView extends View { + + private static final ArgbEvaluator ARGB_EVALUATOR = new ArgbEvaluator(); + + private Drawable mDrawable; + + private final RectF mOval; + private final Paint mPaint; + + private ColorStateList mCircleColor; + + private float mCircleRadius; + private float mCircleRadiusPercent; + + private float mCircleRadiusPressed; + private float mCircleRadiusPressedPercent; + + private float mRadiusInset; + + private int mCircleBorderColor; + + private float mCircleBorderWidth; + private float mProgress = 1f; + private final float mShadowWidth; + + private float mShadowVisibility; + private boolean mCircleHidden = false; + + private float mInitialCircleRadius; + + private boolean mPressed = false; + + private boolean mProgressIndeterminate; + private ProgressDrawable mIndeterminateDrawable; + private Rect mIndeterminateBounds = new Rect(); + private long mColorChangeAnimationDurationMs = 0; + + private float mImageCirclePercentage = 1f; + private float mImageHorizontalOffcenterPercentage = 0f; + private Integer mImageTint; + + private final Drawable.Callback mDrawableCallback = new Drawable.Callback() { + @Override + public void invalidateDrawable(Drawable drawable) { + invalidate(); + } + + @Override + public void scheduleDrawable(Drawable drawable, Runnable runnable, long l) { + // Not needed. + } + + @Override + public void unscheduleDrawable(Drawable drawable, Runnable runnable) { + // Not needed. + } + }; + + private int mCurrentColor; + + private final AnimatorUpdateListener mAnimationListener = new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + int color = (int) animation.getAnimatedValue(); + if (color != CircledImageView.this.mCurrentColor) { + CircledImageView.this.mCurrentColor = color; + CircledImageView.this.invalidate(); + } + } + }; + + private ValueAnimator mColorAnimator; + + public CircledImageView(Context context) { + this(context, null); + } + + public CircledImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CircledImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CircledImageView); + mDrawable = a.getDrawable(R.styleable.CircledImageView_android_src); + + mCircleColor = a.getColorStateList(R.styleable.CircledImageView_circle_color); + if (mCircleColor == null) { + mCircleColor = ColorStateList.valueOf(android.R.color.darker_gray); + } + + mCircleRadius = a.getDimension( + R.styleable.CircledImageView_circle_radius, 0); + mInitialCircleRadius = mCircleRadius; + mCircleRadiusPressed = a.getDimension( + R.styleable.CircledImageView_circle_radius_pressed, mCircleRadius); + mCircleBorderColor = a.getColor( + R.styleable.CircledImageView_circle_border_color, Color.BLACK); + mCircleBorderWidth = a.getDimension(R.styleable.CircledImageView_circle_border_width, 0); + + if (mCircleBorderWidth > 0) { + mRadiusInset += mCircleBorderWidth; + } + + float circlePadding = a.getDimension(R.styleable.CircledImageView_circle_padding, 0); + if (circlePadding > 0) { + mRadiusInset += circlePadding; + } + mShadowWidth = a.getDimension(R.styleable.CircledImageView_shadow_width, 0); + + mImageCirclePercentage = a.getFloat( + R.styleable.CircledImageView_image_circle_percentage, 0f); + + mImageHorizontalOffcenterPercentage = a.getFloat( + R.styleable.CircledImageView_image_horizontal_offcenter_percentage, 0f); + + if (a.hasValue(R.styleable.CircledImageView_image_tint)) { + mImageTint = a.getColor(R.styleable.CircledImageView_image_tint, 0); + } + + mCircleRadiusPercent = a.getFraction(R.styleable.CircledImageView_circle_radius_percent, + 1, 1, 0f); + + mCircleRadiusPressedPercent = a.getFraction( + R.styleable.CircledImageView_circle_radius_pressed_percent, 1, 1, + mCircleRadiusPercent); + + a.recycle(); + + mOval = new RectF(); + mPaint = new Paint(); + mPaint.setAntiAlias(true); + + mIndeterminateDrawable = new ProgressDrawable(); + // {@link #mDrawableCallback} must be retained as a member, as Drawable callback + // is held by weak reference, we must retain it for it to continue to be called. + mIndeterminateDrawable.setCallback(mDrawableCallback); + + setWillNotDraw(false); + + setColorForCurrentState(); + } + + public void setCircleHidden(boolean circleHidden) { + if (circleHidden != mCircleHidden) { + mCircleHidden = circleHidden; + invalidate(); + } + } + + + @Override + protected boolean onSetAlpha(int alpha) { + return true; + } + + @Override + protected void onDraw(Canvas canvas) { + int paddingLeft = getPaddingLeft(); + int paddingTop = getPaddingTop(); + + + float circleRadius = mPressed ? getCircleRadiusPressed() : getCircleRadius(); + if (mShadowWidth > 0 && mShadowVisibility > 0) { + // First let's find the center of the view. + mOval.set(paddingLeft, paddingTop, getWidth() - getPaddingRight(), + getHeight() - getPaddingBottom()); + // Having the center, lets make the shadow start beyond the circled and possibly the + // border. + final float radius = circleRadius + mCircleBorderWidth + + mShadowWidth * mShadowVisibility; + mPaint.setColor(Color.BLACK); + mPaint.setAlpha(Math.round(mPaint.getAlpha() * getAlpha())); + mPaint.setStyle(Style.FILL); + // TODO: precalc and pre-allocate this + mPaint.setShader(new RadialGradient(mOval.centerX(), mOval.centerY(), radius, + new int[]{Color.BLACK, Color.TRANSPARENT}, new float[]{0.6f, 1f}, + Shader.TileMode.MIRROR)); + canvas.drawCircle(mOval.centerX(), mOval.centerY(), radius, mPaint); + mPaint.setShader(null); + } + if (mCircleBorderWidth > 0) { + // First let's find the center of the view. + mOval.set(paddingLeft, paddingTop, getWidth() - getPaddingRight(), + getHeight() - getPaddingBottom()); + // Having the center, lets make the border meet the circle. + mOval.set(mOval.centerX() - circleRadius, mOval.centerY() - circleRadius, + mOval.centerX() + circleRadius, mOval.centerY() + circleRadius); + mPaint.setColor(mCircleBorderColor); + // {@link #Paint.setAlpha} is a helper method that just sets the alpha portion of the + // color. {@link #Paint.setPaint} will clear any previously set alpha value. + mPaint.setAlpha(Math.round(mPaint.getAlpha() * getAlpha())); + mPaint.setStyle(Style.STROKE); + mPaint.setStrokeWidth(mCircleBorderWidth); + + if (mProgressIndeterminate) { + mOval.roundOut(mIndeterminateBounds); + mIndeterminateDrawable.setBounds(mIndeterminateBounds); + mIndeterminateDrawable.setRingColor(mCircleBorderColor); + mIndeterminateDrawable.setRingWidth(mCircleBorderWidth); + mIndeterminateDrawable.draw(canvas); + } else { + canvas.drawArc(mOval, -90, 360 * mProgress, false, mPaint); + } + } + if (!mCircleHidden) { + mOval.set(paddingLeft, paddingTop, getWidth() - getPaddingRight(), + getHeight() - getPaddingBottom()); + // {@link #Paint.setAlpha} is a helper method that just sets the alpha portion of the + // color. {@link #Paint.setPaint} will clear any previously set alpha value. + mPaint.setColor(mCurrentColor); + mPaint.setAlpha(Math.round(mPaint.getAlpha() * getAlpha())); + + mPaint.setStyle(Style.FILL); + float centerX = mOval.centerX(); + float centerY = mOval.centerY(); + + canvas.drawCircle(centerX, centerY, circleRadius, mPaint); + } + + if (mDrawable != null) { + mDrawable.setAlpha(Math.round(getAlpha() * 255)); + + if (mImageTint != null) { + mDrawable.setTint(mImageTint); + } + mDrawable.draw(canvas); + } + + super.onDraw(canvas); + } + + private void setColorForCurrentState() { + int newColor = mCircleColor.getColorForState(getDrawableState(), + mCircleColor.getDefaultColor()); + if (mColorChangeAnimationDurationMs > 0) { + if (mColorAnimator != null) { + mColorAnimator.cancel(); + } else { + mColorAnimator = new ValueAnimator(); + } + mColorAnimator.setIntValues(new int[] { + mCurrentColor, newColor }); + mColorAnimator.setEvaluator(ARGB_EVALUATOR); + mColorAnimator.setDuration(mColorChangeAnimationDurationMs); + mColorAnimator.addUpdateListener(this.mAnimationListener); + mColorAnimator.start(); + } else { + if (newColor != mCurrentColor) { + mCurrentColor = newColor; + invalidate(); + } + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + final float radius = getCircleRadius() + mCircleBorderWidth + + mShadowWidth * mShadowVisibility; + float desiredWidth = radius * 2; + float desiredHeight = radius * 2; + + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + int width; + int height; + + if (widthMode == MeasureSpec.EXACTLY) { + width = widthSize; + } else if (widthMode == MeasureSpec.AT_MOST) { + width = (int) Math.min(desiredWidth, widthSize); + } else { + width = (int) desiredWidth; + } + + if (heightMode == MeasureSpec.EXACTLY) { + height = heightSize; + } else if (heightMode == MeasureSpec.AT_MOST) { + height = (int) Math.min(desiredHeight, heightSize); + } else { + height = (int) desiredHeight; + } + + super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + if (mDrawable != null) { + // Retrieve the sizes of the drawable and the view. + final int nativeDrawableWidth = mDrawable.getIntrinsicWidth(); + final int nativeDrawableHeight = mDrawable.getIntrinsicHeight(); + final int viewWidth = getMeasuredWidth(); + final int viewHeight = getMeasuredHeight(); + final float imageCirclePercentage = mImageCirclePercentage > 0 + ? mImageCirclePercentage : 1; + + final float scaleFactor = Math.min(1f, + Math.min( + (float) nativeDrawableWidth != 0 + ? imageCirclePercentage * viewWidth / nativeDrawableWidth : 1, + (float) nativeDrawableHeight != 0 + ? imageCirclePercentage + * viewHeight / nativeDrawableHeight : 1)); + + // Scale the drawable down to fit the view, if needed. + final int drawableWidth = Math.round(scaleFactor * nativeDrawableWidth); + final int drawableHeight = Math.round(scaleFactor * nativeDrawableHeight); + + // Center the drawable within the view. + final int drawableLeft = (viewWidth - drawableWidth) / 2 + + Math.round(mImageHorizontalOffcenterPercentage * drawableWidth); + final int drawableTop = (viewHeight - drawableHeight) / 2; + + mDrawable.setBounds(drawableLeft, drawableTop, drawableLeft + drawableWidth, + drawableTop + drawableHeight); + } + + super.onLayout(changed, left, top, right, bottom); + } + + public void setImageDrawable(Drawable drawable) { + if (drawable != mDrawable) { + final Drawable existingDrawable = mDrawable; + mDrawable = drawable; + + final boolean skipLayout = drawable != null + && existingDrawable != null + && existingDrawable.getIntrinsicHeight() == drawable.getIntrinsicHeight() + && existingDrawable.getIntrinsicWidth() == drawable.getIntrinsicWidth(); + + if (skipLayout) { + mDrawable.setBounds(existingDrawable.getBounds()); + } else { + requestLayout(); + } + + invalidate(); + } + } + + public void setImageResource(int resId) { + setImageDrawable(resId == 0 ? null : getContext().getDrawable(resId)); + } + + public void setImageCirclePercentage(float percentage) { + float clamped = Math.max(0, Math.min(1, percentage)); + if (clamped != mImageCirclePercentage) { + mImageCirclePercentage = clamped; + invalidate(); + } + } + + public void setImageHorizontalOffcenterPercentage(float percentage) { + if (percentage != mImageHorizontalOffcenterPercentage) { + mImageHorizontalOffcenterPercentage = percentage; + invalidate(); + } + } + + public void setImageTint(int tint) { + if (tint != mImageTint) { + mImageTint = tint; + invalidate(); + } + } + + public float getCircleRadius() { + float radius = mCircleRadius; + if (mCircleRadius <= 0 && mCircleRadiusPercent > 0) { + radius = Math.max(getMeasuredHeight(), getMeasuredWidth()) * mCircleRadiusPercent; + } + + return radius - mRadiusInset; + } + + public float getCircleRadiusPercent() { + return mCircleRadiusPercent; + } + + public float getCircleRadiusPressed() { + float radius = mCircleRadiusPressed; + + if (mCircleRadiusPressed <= 0 && mCircleRadiusPressedPercent > 0) { + radius = Math.max(getMeasuredHeight(), getMeasuredWidth()) + * mCircleRadiusPressedPercent; + } + + return radius - mRadiusInset; + } + + public float getCircleRadiusPressedPercent() { + return mCircleRadiusPressedPercent; + } + + public void setCircleRadius(float circleRadius) { + if (circleRadius != mCircleRadius) { + mCircleRadius = circleRadius; + invalidate(); + } + } + + /** + * Sets the radius of the circle to be a percentage of the largest dimension of the view. + * @param circleRadiusPercent A {@code float} from 0 to 1 representing the radius percentage. + */ + public void setCircleRadiusPercent(float circleRadiusPercent) { + if (circleRadiusPercent != mCircleRadiusPercent) { + mCircleRadiusPercent = circleRadiusPercent; + invalidate(); + } + } + + public void setCircleRadiusPressed(float circleRadiusPressed) { + if (circleRadiusPressed != mCircleRadiusPressed) { + mCircleRadiusPressed = circleRadiusPressed; + invalidate(); + } + } + + /** + * Sets the radius of the circle to be a percentage of the largest dimension of the view when + * pressed. + * @param circleRadiusPressedPercent A {@code float} from 0 to 1 representing the radius + * percentage. + */ + public void setCircleRadiusPressedPercent(float circleRadiusPressedPercent) { + if (circleRadiusPressedPercent != mCircleRadiusPressedPercent) { + mCircleRadiusPressedPercent = circleRadiusPressedPercent; + invalidate(); + } + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + setColorForCurrentState(); + } + + public void setCircleColor(int circleColor) { + setCircleColorStateList(ColorStateList.valueOf(circleColor)); + } + + public void setCircleColorStateList(ColorStateList circleColor) { + if (!Objects.equals(circleColor, mCircleColor)) { + mCircleColor = circleColor; + setColorForCurrentState(); + invalidate(); + } + } + + public ColorStateList getCircleColorStateList() { + return mCircleColor; + } + + public int getDefaultCircleColor() { + return mCircleColor.getDefaultColor(); + } + + /** + * Show the circle border as an indeterminate progress spinner. + * The views circle border width and color must be set for this to have an effect. + * + * @param show true if the progress spinner is shown, false to hide it. + */ + public void showIndeterminateProgress(boolean show) { + mProgressIndeterminate = show; + if (show) { + mIndeterminateDrawable.startAnimation(); + } else { + mIndeterminateDrawable.stopAnimation(); + } + } + + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + if (visibility != View.VISIBLE) { + showIndeterminateProgress(false); + } else if (mProgressIndeterminate) { + showIndeterminateProgress(true); + } + } + + public void setProgress(float progress) { + if (progress != mProgress) { + mProgress = progress; + invalidate(); + } + } + + /** + * Set how much of the shadow should be shown. + * @param shadowVisibility Value between 0 and 1. + */ + public void setShadowVisibility(float shadowVisibility) { + if (shadowVisibility != mShadowVisibility) { + mShadowVisibility = shadowVisibility; + invalidate(); + } + } + + public float getInitialCircleRadius() { + return mInitialCircleRadius; + } + + public void setCircleBorderColor(int circleBorderColor) { + mCircleBorderColor = circleBorderColor; + } + + /** + * Set the border around the circle. + * @param circleBorderWidth Width of the border around the circle. + */ + public void setCircleBorderWidth(float circleBorderWidth) { + if (circleBorderWidth != mCircleBorderWidth) { + mCircleBorderWidth = circleBorderWidth; + invalidate(); + } + } + + @Override + public void setPressed(boolean pressed) { + super.setPressed(pressed); + if (pressed != mPressed) { + mPressed = pressed; + invalidate(); + } + } + + public Drawable getImageDrawable() { + return mDrawable; + } + + /** + * @return the milliseconds duration of the transition animation when the color changes. + */ + public long getColorChangeAnimationDuration() { + return mColorChangeAnimationDurationMs; + } + + /** + * @param mColorChangeAnimationDurationMs the milliseconds duration of the color change + * animation. The color change animation will run if the color changes with {@link #setCircleColor} + * or as a result of the active state changing. + */ + public void setColorChangeAnimationDuration(long mColorChangeAnimationDurationMs) { + this.mColorChangeAnimationDurationMs = mColorChangeAnimationDurationMs; + } +} diff --git a/src/android/support/wearable/view/Gusterpolator.java b/src/android/support/wearable/view/Gusterpolator.java new file mode 100644 index 00000000..dc85bcb5 --- /dev/null +++ b/src/android/support/wearable/view/Gusterpolator.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2015 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.support.wearable.view; + +import android.animation.TimeInterpolator; +import android.annotation.TargetApi; +import android.os.Build; + +/** + * Interpolator that uses a Bezier derived S shaped curve. + * @hide + */ +@TargetApi(Build.VERSION_CODES.KITKAT_WATCH) +class Gusterpolator implements TimeInterpolator { + + /** An instance of {@link android.support.wearable.view.Gusterpolator}. */ + public static final Gusterpolator INSTANCE = new Gusterpolator(); + + /** + * To avoid users of this class creating multiple copies needlessly, the constructor is + * private. + */ + private Gusterpolator() {} + + /** + * Lookup table values. + * Generated using a Bezier curve from (0,0) to (1,1) with control points: + * P0 (0,0) + * P1 (0.4, 0) + * P2 (0.2, 1.0) + * P3 (1.0, 1.0) + * + * Values sampled with x at regular intervals between 0 and 1. + */ + private static final float[] VALUES = new float[] { + 0.0f, 0.0002f, 0.0009f, 0.0019f, 0.0036f, 0.0059f, 0.0086f, 0.0119f, 0.0157f, 0.0209f, + 0.0257f, 0.0321f, 0.0392f, 0.0469f, 0.0566f, 0.0656f, 0.0768f, 0.0887f, 0.1033f, 0.1186f, + 0.1349f, 0.1519f, 0.1696f, 0.1928f, 0.2121f, 0.237f, 0.2627f, 0.2892f, 0.3109f, 0.3386f, + 0.3667f, 0.3952f, 0.4241f, 0.4474f, 0.4766f, 0.5f, 0.5234f, 0.5468f, 0.5701f, 0.5933f, + 0.6134f, 0.6333f, 0.6531f, 0.6698f, 0.6891f, 0.7054f, 0.7214f, 0.7346f, 0.7502f, 0.763f, + 0.7756f, 0.7879f, 0.8f, 0.8107f, 0.8212f, 0.8326f, 0.8415f, 0.8503f, 0.8588f, 0.8672f, + 0.8754f, 0.8833f, 0.8911f, 0.8977f, 0.9041f, 0.9113f, 0.9165f, 0.9232f, 0.9281f, 0.9328f, + 0.9382f, 0.9434f, 0.9476f, 0.9518f, 0.9557f, 0.9596f, 0.9632f, 0.9662f, 0.9695f, 0.9722f, + 0.9753f, 0.9777f, 0.9805f, 0.9826f, 0.9847f, 0.9866f, 0.9884f, 0.9901f, 0.9917f, 0.9931f, + 0.9944f, 0.9955f, 0.9964f, 0.9973f, 0.9981f, 0.9986f, 0.9992f, 0.9995f, 0.9998f, 1.0f, 1.0f + }; + + private static final float STEP_SIZE = 1.0f / (VALUES.length - 1); + + @Override + public float getInterpolation(float input) { + if (input >= 1.0f) { + return 1.0f; + } + + if (input <= 0f) { + return 0f; + } + + int position = Math.min( + (int)(input * (VALUES.length - 1)), + VALUES.length - 2); + + float quantized = position * STEP_SIZE; + float difference = input - quantized; + float weight = difference / STEP_SIZE; + + return VALUES[position] + weight * (VALUES[position + 1] - VALUES[position]); + } +} diff --git a/src/android/support/wearable/view/ProgressDrawable.java b/src/android/support/wearable/view/ProgressDrawable.java new file mode 100644 index 00000000..63e6a039 --- /dev/null +++ b/src/android/support/wearable/view/ProgressDrawable.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2015 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.support.wearable.view; + +import android.animation.ObjectAnimator; +import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.Property; +import android.view.animation.LinearInterpolator; + +/** + * Drawable for showing an indeterminate progress indicator. + * + * TODO: When Material progress drawable is available in the support library stop using this. + * + * @hide + */ +@TargetApi(Build.VERSION_CODES.KITKAT_WATCH) +class ProgressDrawable extends Drawable { + + private static Property<ProgressDrawable, Integer> LEVEL = + new Property<ProgressDrawable, Integer>(Integer.class, "level") { + @Override + public Integer get(ProgressDrawable drawable) { + return drawable.getLevel(); + } + + @Override + public void set(ProgressDrawable drawable, Integer value) { + drawable.setLevel(value); + drawable.invalidateSelf(); + } + }; + /** Max level for a level drawable, as specified in developer docs for {@link Drawable}. */ + private static final int MAX_LEVEL = 10000; + + /** How many different sections are there, five gives us the material style star. **/ + private static final int NUMBER_OF_SEGMENTS = 5; + + private static final int LEVELS_PER_SEGMENT = MAX_LEVEL / NUMBER_OF_SEGMENTS; + private static final float STARTING_ANGLE = -90f; + private static final long ANIMATION_DURATION = 6000; + private static final int FULL_CIRCLE = 360; + private static final int MAX_SWEEP = 306; + private static final int CORRECTION_ANGLE = FULL_CIRCLE - MAX_SWEEP; + /** How far through each cycle does the bar stop growing and start shrinking, half way. **/ + private static final float GROW_SHRINK_RATIO = 0.5f; + // TODO: replace this with BakedBezierInterpolator when its available in support library. + private static final TimeInterpolator mInterpolator = Gusterpolator.INSTANCE; + + private final RectF mInnerCircleBounds = new RectF(); + private final Paint mPaint = new Paint(); + private final ObjectAnimator mAnimator; + private float mCircleBorderWidth; + private int mCircleBorderColor; + + public ProgressDrawable() { + mPaint.setAntiAlias(true); + mPaint.setStyle(Paint.Style.STROKE); + mAnimator = ObjectAnimator.ofInt(this, LEVEL, 0, MAX_LEVEL); + mAnimator.setRepeatCount(ValueAnimator.INFINITE); + mAnimator.setRepeatMode(ValueAnimator.RESTART); + mAnimator.setDuration(ANIMATION_DURATION); + mAnimator.setInterpolator(new LinearInterpolator()); + } + + public void setRingColor(int color) { + mCircleBorderColor = color; + } + + public void setRingWidth(float width) { + mCircleBorderWidth = width; + } + + public void startAnimation() { + mAnimator.start(); + } + + public void stopAnimation() { + mAnimator.cancel(); + } + + @Override + public void draw(Canvas canvas) { + canvas.save(); + mInnerCircleBounds.set(getBounds()); + mInnerCircleBounds.inset(mCircleBorderWidth / 2.0f, mCircleBorderWidth / 2.0f); + mPaint.setStrokeWidth(mCircleBorderWidth); + mPaint.setColor(mCircleBorderColor); + + float sweepAngle = FULL_CIRCLE; + boolean growing = false; + float correctionAngle = 0; + int level = getLevel(); + + int currentSegment = level / LEVELS_PER_SEGMENT; + int offset = currentSegment * LEVELS_PER_SEGMENT; + float progress = (level - offset) / (float) LEVELS_PER_SEGMENT; + + growing = progress < GROW_SHRINK_RATIO; + correctionAngle = CORRECTION_ANGLE * progress; + + if (growing) { + sweepAngle = MAX_SWEEP * mInterpolator.getInterpolation( + lerpInv(0f, GROW_SHRINK_RATIO, progress)); + } else { + sweepAngle = MAX_SWEEP * (1.0f - mInterpolator.getInterpolation( + lerpInv(GROW_SHRINK_RATIO, 1.0f, progress))); + } + + sweepAngle = Math.max(1, sweepAngle); + + canvas.rotate( + level * (1.0f / MAX_LEVEL) * 2 * FULL_CIRCLE + STARTING_ANGLE + correctionAngle, + mInnerCircleBounds.centerX(), + mInnerCircleBounds.centerY()); + canvas.drawArc(mInnerCircleBounds, + growing ? 0 : MAX_SWEEP - sweepAngle, + sweepAngle, + false, + mPaint); + canvas.restore(); + } + + @Override + public void setAlpha(int i) { + // Not supported. + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + // Not supported. + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + @Override + protected boolean onLevelChange(int level) { + return true; // Changing the level of this drawable does change its appearance. + } + + /** + * Returns the interpolation scalar (s) that satisfies the equation: + * {@code value = }lerp(a, b, s) + * + * <p>If {@code a == b}, then this function will return 0. + */ + private static float lerpInv(float a, float b, float value) { + return a != b ? ((value - a) / (b - a)) : 0.0f; + } +} diff --git a/src/android/support/wearable/view/SimpleAnimatorListener.java b/src/android/support/wearable/view/SimpleAnimatorListener.java new file mode 100644 index 00000000..13631a2a --- /dev/null +++ b/src/android/support/wearable/view/SimpleAnimatorListener.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015 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.support.wearable.view; + +import android.animation.Animator; +import android.annotation.TargetApi; +import android.os.Build; + +/** + * Convenience class for listening for Animator events that implements the AnimatorListener + * interface and allows extending only methods that are necessary. + */ +@TargetApi(Build.VERSION_CODES.KITKAT_WATCH) +public class SimpleAnimatorListener implements Animator.AnimatorListener { + + private boolean mWasCanceled; + + @Override + public void onAnimationCancel(Animator animator) { + mWasCanceled = true; + } + + @Override + public void onAnimationEnd(Animator animator) { + if (!mWasCanceled) { + onAnimationComplete(animator); + } + } + + @Override + public void onAnimationRepeat(Animator animator) { + } + + @Override + public void onAnimationStart(Animator animator) { + mWasCanceled = false; + } + + /** + * Called when the animation finishes. Not called if the animation was canceled. + */ + public void onAnimationComplete(Animator animator) { + } + + /** + * Provides information if the animation was cancelled. + * @return True if animation was cancelled. + */ + public boolean wasCanceled() { + return mWasCanceled; + } + +} diff --git a/src/android/support/wearable/view/WearableListView.java b/src/android/support/wearable/view/WearableListView.java new file mode 100644 index 00000000..01baa98b --- /dev/null +++ b/src/android/support/wearable/view/WearableListView.java @@ -0,0 +1,1387 @@ +/* + * Copyright (C) 2015 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.support.wearable.view; + +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.PointF; +import android.os.Build; +import android.os.Handler; +import android.support.v7.widget.LinearSmoothScroller; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.Property; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.Scroller; + +import java.util.ArrayList; +import java.util.List; + +/** + * An alternative version of ListView that is optimized for ease of use on small screen wearable + * devices. It displays a vertically scrollable list of items, and automatically snaps to the + * nearest item when the user stops scrolling. + * + * <p> + * For a quick start, you will need to implement a subclass of {@link .Adapter}, + * which will create and bind your views to the {@link .ViewHolder} objects. If you want to add + * more visual treatment to your views when they become the central items of the + * WearableListView, have them implement the {@link .OnCenterProximityListener} interface. + * </p> + */ +@TargetApi(Build.VERSION_CODES.KITKAT_WATCH) +public class WearableListView extends RecyclerView { + @SuppressWarnings("unused") + private static final String TAG = "WearableListView"; + + private static final long FLIP_ANIMATION_DURATION_MS = 150; + private static final long CENTERING_ANIMATION_DURATION_MS = 150; + + private static final float TOP_TAP_REGION_PERCENTAGE = .33f; + private static final float BOTTOM_TAP_REGION_PERCENTAGE = .33f; + + // Each item will occupy one third of the height. + private static final int THIRD = 3; + + private final int mMinFlingVelocity; + private final int mMaxFlingVelocity; + + private boolean mMaximizeSingleItem; + private boolean mCanClick = true; + // WristGesture navigation signals are delivered as KeyEvents. Allow developer to disable them + // for this specific View. It might be cleaner to simply have users re-implement onKeyDown(). + // TOOD: Finalize the disabling mechanism here. + private boolean mGestureNavigationEnabled = true; + private int mTapPositionX; + private int mTapPositionY; + private ClickListener mClickListener; + + private Animator mScrollAnimator; + // This is a little hacky due to the fact that animator provides incremental values instead of + // deltas and scrolling code requires deltas. We animate WearableListView directly and use this + // field to calculate deltas. Obviously this means that only one scrolling algorithm can run at + // a time, but I don't think it would be wise to have more than one running. + private int mLastScrollChange; + + private SetScrollVerticallyProperty mSetScrollVerticallyProperty = + new SetScrollVerticallyProperty(); + + private final List<OnScrollListener> mOnScrollListeners = new ArrayList<OnScrollListener>(); + + private final List<OnCentralPositionChangedListener> mOnCentralPositionChangedListeners = + new ArrayList<OnCentralPositionChangedListener>(); + + private OnOverScrollListener mOverScrollListener; + + private boolean mGreedyTouchMode; + + private float mStartX; + + private float mStartY; + + private float mStartFirstTop; + + private final int mTouchSlop; + + private boolean mPossibleVerticalSwipe; + + private int mInitialOffset = 0; + + private Scroller mScroller; + + // Top and bottom boundaries for tap checking. Need to recompute by calling computeTapRegions + // before referencing. + private final float[] mTapRegions = new float[2]; + + private boolean mGestureDirectionLocked; + private int mPreviousCentral = 0; + + // Temp variable for storing locations on screen. + private final int[] mLocation = new int[2]; + + // TODO: Consider clearing this when underlying data set changes. If the data set changes, you + // can't safely assume that this pressed view is in the same place as it was before and it will + // receive setPressed(false) unnecessarily. In theory it should be fine, but in practice we + // have places like this: mIconView.setCircleColor(pressed ? mPressedColor : mSelectedColor); + // This might set selected color on non selected item. Our logic should be: if you change + // underlying data set, all best are off and you need to preserve the state; we will clear + // this field. However, I am not willing to introduce this so late in C development. + private View mPressedView = null; + + private final Runnable mPressedRunnable = new Runnable() { + @Override + public void run() { + if (getChildCount() > 0) { + mPressedView = getChildAt(findCenterViewIndex()); + mPressedView.setPressed(true); + } else { + Log.w(TAG, "mPressedRunnable: the children were removed, skipping."); + } + } + }; + + private final Runnable mReleasedRunnable = new Runnable() { + @Override + public void run() { + releasePressedItem(); + } + }; + + private Runnable mNotifyChildrenPostLayoutRunnable = new Runnable() { + @Override + public void run() { + notifyChildrenAboutProximity(false); + } + }; + + private final AdapterDataObserver mObserver = new AdapterDataObserver() { + @Override + public void onChanged() { + WearableListView.this.addOnLayoutChangeListener(new OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + WearableListView.this.removeOnLayoutChangeListener(this); + if (WearableListView.this.getChildCount() > 0) { + WearableListView.this.animateToCenter(); + } + } + }); + } + }; + + public WearableListView(Context context) { + this(context, null); + } + + public WearableListView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public WearableListView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + setHasFixedSize(true); + setOverScrollMode(View.OVER_SCROLL_NEVER); + setLayoutManager(new LayoutManager()); + + final RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE && getChildCount() > 0) { + handleTouchUp(null, newState); + } + for (OnScrollListener listener : mOnScrollListeners) { + listener.onScrollStateChanged(newState); + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + onScroll(dy); + } + }; + setOnScrollListener(onScrollListener); + + final ViewConfiguration vc = ViewConfiguration.get(context); + mTouchSlop = vc.getScaledTouchSlop(); + + mMinFlingVelocity = vc.getScaledMinimumFlingVelocity(); + mMaxFlingVelocity = vc.getScaledMaximumFlingVelocity(); + } + + @Override + public void setAdapter(RecyclerView.Adapter adapter) { + RecyclerView.Adapter currentAdapter = getAdapter(); + if (currentAdapter != null) { + currentAdapter.unregisterAdapterDataObserver(mObserver); + } + + super.setAdapter(adapter); + + if (adapter != null) { + adapter.registerAdapterDataObserver(mObserver); + } + } + + /** + * @return the position of the center child's baseline; -1 if no center child exists or if + * the center child does not return a valid baseline. + */ + @Override + public int getBaseline() { + // No children implies there is no center child for which a baseline can be computed. + if (getChildCount() == 0) { + return super.getBaseline(); + } + + // Compute the baseline of the center child. + final int centerChildIndex = findCenterViewIndex(); + final int centerChildBaseline = getChildAt(centerChildIndex).getBaseline(); + + // If the center child has no baseline, neither does this list view. + if (centerChildBaseline == -1) { + return super.getBaseline(); + } + + return getCentralViewTop() + centerChildBaseline; + } + + /** + * @return true if the list is scrolled all the way to the top. + */ + public boolean isAtTop() { + if (getChildCount() == 0) { + return true; + } + + int centerChildIndex = findCenterViewIndex(); + View centerView = getChildAt(centerChildIndex); + return getChildAdapterPosition(centerView) == 0 && + getScrollState() == RecyclerView.SCROLL_STATE_IDLE; + } + + /** + * Clears the state of the layout manager that positions list items. + */ + public void resetLayoutManager() { + setLayoutManager(new LayoutManager()); + } + + /** + * Controls whether WearableListView should intercept all touch events and also prevent the + * parent from receiving them. + * @param greedy If true it will intercept all touch events. + */ + public void setGreedyTouchMode(boolean greedy) { + mGreedyTouchMode = greedy; + } + + /** + * By default the first element of the list is initially positioned in the center of the screen. + * This method allows the developer to specify a different offset, e.g. to hide the + * WearableListView before the user is allowed to use it. + * + * @param top How far the elements should be pushed down. + */ + public void setInitialOffset(int top) { + mInitialOffset = top; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (!isEnabled()) { + return false; + } + + if (mGreedyTouchMode && getChildCount() > 0) { + int action = event.getActionMasked(); + if (action == MotionEvent.ACTION_DOWN) { + mStartX = event.getX(); + mStartY = event.getY(); + mStartFirstTop = getChildCount() > 0 ? getChildAt(0).getTop() : 0; + mPossibleVerticalSwipe = true; + mGestureDirectionLocked = false; + } else if (action == MotionEvent.ACTION_MOVE && mPossibleVerticalSwipe) { + handlePossibleVerticalSwipe(event); + } + getParent().requestDisallowInterceptTouchEvent(mPossibleVerticalSwipe); + } + return super.onInterceptTouchEvent(event); + } + + private boolean handlePossibleVerticalSwipe(MotionEvent event) { + if (mGestureDirectionLocked) { + return mPossibleVerticalSwipe; + } + float deltaX = Math.abs(mStartX - event.getX()); + float deltaY = Math.abs(mStartY - event.getY()); + float distance = (deltaX * deltaX) + (deltaY * deltaY); + // Verify that the distance moved in the combined x/y direction is at + // least touch slop before determining the gesture direction. + if (distance > (mTouchSlop * mTouchSlop)) { + if (deltaX > deltaY) { + mPossibleVerticalSwipe = false; + } + mGestureDirectionLocked = true; + } + return mPossibleVerticalSwipe; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!isEnabled()) { + return false; + } + + // super.onTouchEvent can change the state of the scroll, keep a copy so that handleTouchUp + // can exit early if scrollState != IDLE when the touch event started. + int scrollState = getScrollState(); + boolean result = super.onTouchEvent(event); + if (getChildCount() > 0) { + int action = event.getActionMasked(); + if (action == MotionEvent.ACTION_DOWN) { + handleTouchDown(event); + } else if (action == MotionEvent.ACTION_UP) { + handleTouchUp(event, scrollState); + getParent().requestDisallowInterceptTouchEvent(false); + } else if (action == MotionEvent.ACTION_MOVE) { + if (Math.abs(mTapPositionX - (int) event.getX()) >= mTouchSlop || + Math.abs(mTapPositionY - (int) event.getY()) >= mTouchSlop) { + releasePressedItem(); + mCanClick = false; + } + result |= handlePossibleVerticalSwipe(event); + getParent().requestDisallowInterceptTouchEvent(mPossibleVerticalSwipe); + } else if (action == MotionEvent.ACTION_CANCEL) { + getParent().requestDisallowInterceptTouchEvent(false); + mCanClick = true; + } + } + return result; + } + + private void releasePressedItem() { + if (mPressedView != null) { + mPressedView.setPressed(false); + mPressedView = null; + } + Handler handler = getHandler(); + if (handler != null) { + handler.removeCallbacks(mPressedRunnable); + } + } + + private void onScroll(int dy) { + for (OnScrollListener listener : mOnScrollListeners) { + listener.onScroll(dy); + } + notifyChildrenAboutProximity(true); + } + + /** + * Adds a listener that will be called when the content of the list view is scrolled. + */ + public void addOnScrollListener(OnScrollListener listener) { + mOnScrollListeners.add(listener); + } + + /** + * Removes listener for scroll events. + */ + public void removeOnScrollListener(OnScrollListener listener) { + mOnScrollListeners.remove(listener); + } + + /** + * Adds a listener that will be called when the central item of the list changes. + */ + public void addOnCentralPositionChangedListener(OnCentralPositionChangedListener listener) { + mOnCentralPositionChangedListeners.add(listener); + } + + /** + * Removes a listener that would be called when the central item of the list changes. + */ + public void removeOnCentralPositionChangedListener(OnCentralPositionChangedListener listener) { + mOnCentralPositionChangedListeners.remove(listener); + } + + /** + * Determines if navigation of list with wrist gestures is enabled. + */ + public boolean isGestureNavigationEnabled() { + return mGestureNavigationEnabled; + } + + /** + * Sets whether navigation of list with wrist gestures is enabled. + */ + public void setEnableGestureNavigation(boolean enabled) { + mGestureNavigationEnabled = enabled; + } + + @Override /* KeyEvent.Callback */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + // Respond to keycodes (at least originally generated and injected by wrist gestures). + if (mGestureNavigationEnabled) { + switch (keyCode) { + case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS: + fling(0, -mMinFlingVelocity); + return true; + case KeyEvent.KEYCODE_NAVIGATE_NEXT: + fling(0, mMinFlingVelocity); + return true; + case KeyEvent.KEYCODE_NAVIGATE_IN: + return tapCenterView(); + case KeyEvent.KEYCODE_NAVIGATE_OUT: + // Returing false leaves the action to the container of this WearableListView + // (e.g. finishing the activity containing this WearableListView). + return false; + } + } + return super.onKeyDown(keyCode, event); + } + + /** + * Simulate tapping the child view at the center of this list. + */ + private boolean tapCenterView() { + if (!isEnabled() || getVisibility() != View.VISIBLE) { + return false; + } + int index = findCenterViewIndex(); + View view = getChildAt(index); + ViewHolder holder = getChildViewHolder(view); + if (mClickListener != null) { + mClickListener.onClick(holder); + return true; + } + return false; + } + + private boolean checkForTap(MotionEvent event) { + // No taps are accepted if this view is disabled. + if (!isEnabled()) { + return false; + } + + float rawY = event.getRawY(); + int index = findCenterViewIndex(); + View view = getChildAt(index); + ViewHolder holder = getChildViewHolder(view); + computeTapRegions(mTapRegions); + if (rawY > mTapRegions[0] && rawY < mTapRegions[1]) { + if (mClickListener != null) { + mClickListener.onClick(holder); + } + return true; + } + if (index > 0 && rawY <= mTapRegions[0]) { + animateToMiddle(index - 1, index); + return true; + } + if (index < getChildCount() - 1 && rawY >= mTapRegions[1]) { + animateToMiddle(index + 1, index); + return true; + } + if (index == 0 && rawY <= mTapRegions[0] && mClickListener != null) { + // Special case: if the top third of the screen is empty and the touch event happens + // there, we don't want to immediately disallow the parent from using it. We tell + // parent to disallow intercept only after we locked a gesture. Before that he + // might do something with the action. + mClickListener.onTopEmptyRegionClick(); + return true; + } + return false; + } + + private void animateToMiddle(int newCenterIndex, int oldCenterIndex) { + if (newCenterIndex == oldCenterIndex) { + throw new IllegalArgumentException( + "newCenterIndex must be different from oldCenterIndex"); + } + List<Animator> animators = new ArrayList<Animator>(); + View child = getChildAt(newCenterIndex); + int scrollToMiddle = getCentralViewTop() - child.getTop(); + startScrollAnimation(animators, scrollToMiddle, FLIP_ANIMATION_DURATION_MS); + } + + private void startScrollAnimation(List<Animator> animators, int scroll, long duration) { + startScrollAnimation(animators, scroll, duration, 0); + } + + private void startScrollAnimation(List<Animator> animators, int scroll, long duration, + long delay) { + startScrollAnimation(animators, scroll, duration, delay, null); + } + + private void startScrollAnimation( + int scroll, long duration, long delay, Animator.AnimatorListener listener) { + startScrollAnimation(null, scroll, duration, delay, listener); + } + + private void startScrollAnimation(List<Animator> animators, int scroll, long duration, + long delay, Animator.AnimatorListener listener) { + if (mScrollAnimator != null) { + mScrollAnimator.cancel(); + } + + mLastScrollChange = 0; + ObjectAnimator scrollAnimator = ObjectAnimator.ofInt(this, mSetScrollVerticallyProperty, + 0, -scroll); + + if (animators != null) { + animators.add(scrollAnimator); + AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether(animators); + mScrollAnimator = animatorSet; + } else { + mScrollAnimator = scrollAnimator; + } + mScrollAnimator.setDuration(duration); + if (listener != null) { + mScrollAnimator.addListener(listener); + } + if (delay > 0) { + mScrollAnimator.setStartDelay(delay); + } + mScrollAnimator.start(); + } + + @Override + public boolean fling(int velocityX, int velocityY) { + if (getChildCount() == 0) { + return false; + } + // If we are flinging towards empty space (before first element or after last), we reuse + // original flinging mechanism. + final int index = findCenterViewIndex(); + final View child = getChildAt(index); + int currentPosition = getChildPosition(child); + if ((currentPosition == 0 && velocityY < 0) || + (currentPosition == getAdapter().getItemCount() - 1 && velocityY > 0)) { + return super.fling(velocityX, velocityY); + } + + if (Math.abs(velocityY) < mMinFlingVelocity) { + return false; + } + velocityY = Math.max(Math.min(velocityY, mMaxFlingVelocity), -mMaxFlingVelocity); + + if (mScroller == null) { + mScroller = new Scroller(getContext(), null, true); + } + mScroller.fling(0, 0, 0, velocityY, Integer.MIN_VALUE, Integer.MAX_VALUE, + Integer.MIN_VALUE, Integer.MAX_VALUE); + int finalY = mScroller.getFinalY(); + int delta = finalY / (getPaddingTop() + getAdjustedHeight() / 2); + if (delta == 0) { + // If the fling would not be enough to change position, we increase it to satisfy user's + // intent of switching current position. + delta = velocityY > 0 ? 1 : -1; + } + int finalPosition = Math.max( + 0, Math.min(getAdapter().getItemCount() - 1, currentPosition + delta)); + smoothScrollToPosition(finalPosition); + return true; + } + + public void smoothScrollToPosition(int position, RecyclerView.SmoothScroller smoothScroller) { + LayoutManager layoutManager = (LayoutManager) getLayoutManager(); + layoutManager.setCustomSmoothScroller(smoothScroller); + smoothScrollToPosition(position); + layoutManager.clearCustomSmoothScroller(); + } + + @Override + public ViewHolder getChildViewHolder(View child) { + return (ViewHolder) super.getChildViewHolder(child); + } + + /** + * Adds a listener that will be called when the user taps on the WearableListView or its items. + */ + public void setClickListener(ClickListener clickListener) { + mClickListener = clickListener; + } + + /** + * Adds a listener that will be called when the user drags the top element below its allowed + * bottom position. + * + * @hide + */ + public void setOverScrollListener(OnOverScrollListener listener) { + mOverScrollListener = listener; + } + + private int findCenterViewIndex() { + // TODO(gruszczy): This could be easily optimized, so that we stop looking when we the + // distance starts growing again, instead of finding the closest. It would safe half of + // the loop. + int count = getChildCount(); + int index = -1; + int closest = Integer.MAX_VALUE; + int centerY = getCenterYPos(this); + for (int i = 0; i < count; ++i) { + final View child = getChildAt(i); + int childCenterY = getTop() + getCenterYPos(child); + final int distance = Math.abs(centerY - childCenterY); + if (distance < closest) { + closest = distance; + index = i; + } + } + if (index == -1) { + throw new IllegalStateException("Can't find central view."); + } + return index; + } + + private static int getCenterYPos(View v) { + return v.getTop() + v.getPaddingTop() + getAdjustedHeight(v) / 2; + } + + private void handleTouchUp(MotionEvent event, int scrollState) { + if (mCanClick && event != null && checkForTap(event)) { + Handler handler = getHandler(); + if (handler != null) { + handler.postDelayed(mReleasedRunnable, ViewConfiguration.getTapTimeout()); + } + return; + } + + if (scrollState != RecyclerView.SCROLL_STATE_IDLE) { + // We are flinging, so let's not start animations just yet. Instead we will start them + // when the fling finishes. + return; + } + + if (isOverScrolling()) { + mOverScrollListener.onOverScroll(); + } else { + animateToCenter(); + } + } + + private boolean isOverScrolling() { + return getChildCount() > 0 + // If first view top was below the central top, it means it was never centered. + // Don't allow overscroll, otherwise a simple touch (instead of a drag) will be + // enough to trigger overscroll. + && mStartFirstTop <= getCentralViewTop() + && getChildAt(0).getTop() >= getTopViewMaxTop() + && mOverScrollListener != null; + } + + private int getTopViewMaxTop() { + return getHeight() / 2; + } + + private int getItemHeight() { + // Round up so that the screen is fully occupied by 3 items. + return getAdjustedHeight() / THIRD + 1; + } + + /** + * Returns top of the central {@code View} in the list when such view is fully centered. + * + * This is a more or a less a static value that you can use to align other views with the + * central one. + */ + public int getCentralViewTop() { + return getPaddingTop() + getItemHeight(); + } + + /** + * Automatically starts an animation that snaps the list to center on the element closest to the + * middle. + */ + public void animateToCenter() { + final int index = findCenterViewIndex(); + final View child = getChildAt(index); + final int scrollToMiddle = getCentralViewTop() - child.getTop(); + startScrollAnimation(scrollToMiddle, CENTERING_ANIMATION_DURATION_MS, 0, + new SimpleAnimatorListener() { + @Override + public void onAnimationEnd(Animator animator) { + if (!wasCanceled()) { + mCanClick = true; + } + } + }); + } + + /** + * Animate the list so that the first view is back to its initial position. + * @param endAction Action to execute when the animation is done. + * @hide + */ + public void animateToInitialPosition(final Runnable endAction) { + final View child = getChildAt(0); + final int scrollToMiddle = getCentralViewTop() + mInitialOffset - child.getTop(); + startScrollAnimation(scrollToMiddle, CENTERING_ANIMATION_DURATION_MS, 0, + new SimpleAnimatorListener() { + @Override + public void onAnimationEnd(Animator animator) { + if (endAction != null) { + endAction.run(); + } + } + }); + } + + private void handleTouchDown(MotionEvent event) { + if (mCanClick) { + mTapPositionX = (int) event.getX(); + mTapPositionY = (int) event.getY(); + float rawY = event.getRawY(); + computeTapRegions(mTapRegions); + if (rawY > mTapRegions[0] && rawY < mTapRegions[1]) { + View view = getChildAt(findCenterViewIndex()); + if (view instanceof OnCenterProximityListener) { + Handler handler = getHandler(); + if (handler != null) { + handler.removeCallbacks(mReleasedRunnable); + handler.postDelayed(mPressedRunnable, ViewConfiguration.getTapTimeout()); + } + } + } + } + } + + private void setScrollVertically(int scroll) { + scrollBy(0, scroll - mLastScrollChange); + mLastScrollChange = scroll; + } + + private int getAdjustedHeight() { + return getAdjustedHeight(this); + } + + private static int getAdjustedHeight(View v) { + return v.getHeight() - v.getPaddingBottom() - v.getPaddingTop(); + } + + private void computeTapRegions(float[] tapRegions) { + mLocation[0] = mLocation[1] = 0; + getLocationOnScreen(mLocation); + int mScreenTop = mLocation[1]; + int height = getHeight(); + tapRegions[0] = mScreenTop + height * TOP_TAP_REGION_PERCENTAGE; + tapRegions[1] = mScreenTop + height * (1 - BOTTOM_TAP_REGION_PERCENTAGE); + } + + /** + * Determines if, when there is only one item in the WearableListView, that the single item + * is laid out so that it's height fills the entire WearableListView. + */ + public boolean getMaximizeSingleItem() { + return mMaximizeSingleItem; + } + + /** + * When set to true, if there is only one item in the WearableListView, it will fill the entire + * WearableListView. When set to false, the default behavior will be used and the single item + * will fill only a third of the screen. + */ + public void setMaximizeSingleItem(boolean maximizeSingleItem) { + mMaximizeSingleItem = maximizeSingleItem; + } + + private void notifyChildrenAboutProximity(boolean animate) { + LayoutManager layoutManager = (LayoutManager) getLayoutManager(); + int count = layoutManager.getChildCount(); + + if (count == 0) { + return; + } + + int index = layoutManager.findCenterViewIndex(); + for (int i = 0; i < count; ++i) { + final View view = layoutManager.getChildAt(i); + ViewHolder holder = getChildViewHolder(view); + holder.onCenterProximity(i == index, animate); + } + final int position = getChildViewHolder(getChildAt(index)).getPosition(); + if (position != mPreviousCentral) { + for (OnScrollListener listener : mOnScrollListeners) { + listener.onCentralPositionChanged(position); + } + for (OnCentralPositionChangedListener listener : + mOnCentralPositionChangedListeners) { + listener.onCentralPositionChanged(position); + } + mPreviousCentral = position; + } + } + + // TODO: Move this to a separate class, so it can't directly interact with the WearableListView. + private class LayoutManager extends RecyclerView.LayoutManager { + private int mFirstPosition; + + private boolean mPushFirstHigher; + + private int mAbsoluteScroll; + + private boolean mUseOldViewTop = true; + + private boolean mWasZoomedIn = false; + + private RecyclerView.SmoothScroller mSmoothScroller; + + private RecyclerView.SmoothScroller mDefaultSmoothScroller; + + // We need to have another copy of the same method, because this one uses + // LayoutManager.getChildCount/getChildAt instead of View.getChildCount/getChildAt and + // they return different values. + private int findCenterViewIndex() { + // TODO(gruszczy): This could be easily optimized, so that we stop looking when we the + // distance starts growing again, instead of finding the closest. It would safe half of + // the loop. + int count = getChildCount(); + int index = -1; + int closest = Integer.MAX_VALUE; + int centerY = getCenterYPos(WearableListView.this); + for (int i = 0; i < count; ++i) { + final View child = getLayoutManager().getChildAt(i); + int childCenterY = getTop() + getCenterYPos(child); + final int distance = Math.abs(centerY - childCenterY); + if (distance < closest) { + closest = distance; + index = i; + } + } + if (index == -1) { + throw new IllegalStateException("Can't find central view."); + } + return index; + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, State state) { + final int parentBottom = getHeight() - getPaddingBottom(); + // By default we assume this is the first run and the first element will be centered + // with optional initial offset. + int oldTop = getCentralViewTop() + mInitialOffset; + // Here we handle any other situation where we relayout or we want to achieve a + // specific layout of children. + if (mUseOldViewTop && getChildCount() > 0) { + // We are performing a relayout after we already had some children, because e.g. the + // contents of an adapter has changed. First we want to check, if the central item + // from before the layout is still here, because we want to preserve it. + int index = findCenterViewIndex(); + int position = getPosition(getChildAt(index)); + if (position == NO_POSITION) { + // Central item was removed. Let's find the first surviving item and use it + // as an anchor. + for (int i = 0, N = getChildCount(); index + i < N || index - i >= 0; ++i) { + View child = getChildAt(index + i); + if (child != null) { + position = getPosition(child); + if (position != NO_POSITION) { + index = index + i; + break; + } + } + child = getChildAt(index - i); + if (child != null) { + position = getPosition(child); + if (position != NO_POSITION) { + index = index - i; + break; + } + } + } + } + if (position == NO_POSITION) { + // None of the children survives the relayout, let's just use the top of the + // first one. + oldTop = getChildAt(0).getTop(); + int count = state.getItemCount(); + // Lets first make sure that the first position is not above the last element, + // which can happen if elements were removed. + while (mFirstPosition >= count && mFirstPosition > 0) { + mFirstPosition--; + } + } else { + // Some of the children survived the relayout. We will keep it in its place, + // but go through previous children and maybe add them. + if (!mWasZoomedIn) { + // If we were previously zoomed-in on a single item, ignore this and just + // use the default value set above. Reasoning: if we are still zoomed-in, + // oldTop will be ignored when laying out the single child element. If we + // are no longer zoomed in, then we want to position items using the top + // of the single item as if the single item was not zoomed in, which is + // equal to the default value. + oldTop = getChildAt(index).getTop(); + } + while (oldTop > getPaddingTop() && position > 0) { + position--; + oldTop -= getItemHeight(); + } + if (position == 0 && oldTop > getCentralViewTop()) { + // We need to handle special case where the first, central item was removed + // and now the first element is hanging below, instead of being nicely + // centered. + oldTop = getCentralViewTop(); + } + mFirstPosition = position; + } + } else if (mPushFirstHigher) { + // We are trying to position elements ourselves, so we force position of the first + // one. + oldTop = getCentralViewTop() - getItemHeight(); + } + + performLayoutChildren(recycler, state, parentBottom, oldTop); + + // Since the content might have changed, we need to adjust the absolute scroll in case + // some elements have disappeared or were added. + if (getChildCount() == 0) { + setAbsoluteScroll(0); + } else { + View child = getChildAt(findCenterViewIndex()); + setAbsoluteScroll(child.getTop() - getCentralViewTop() + getPosition(child) * + getItemHeight()); + } + + mUseOldViewTop = true; + mPushFirstHigher = false; + } + + private void performLayoutChildren(Recycler recycler, State state, int parentBottom, + int top) { + detachAndScrapAttachedViews(recycler); + + if (mMaximizeSingleItem && state.getItemCount() == 1) { + performLayoutOneChild(recycler, parentBottom); + mWasZoomedIn = true; + } else { + performLayoutMultipleChildren(recycler, state, parentBottom, top); + mWasZoomedIn = false; + } + + if (getChildCount() > 0) { + post(mNotifyChildrenPostLayoutRunnable); + } + } + + private void performLayoutOneChild(Recycler recycler, int parentBottom) { + final int right = getWidth() - getPaddingRight(); + View v = recycler.getViewForPosition(getFirstPosition()); + addView(v, 0); + measureZoomView(v); + v.layout(getPaddingLeft(), getPaddingTop(), right, parentBottom); + } + + private void performLayoutMultipleChildren(Recycler recycler, State state, int parentBottom, + int top) { + int bottom; + final int left = getPaddingLeft(); + final int right = getWidth() - getPaddingRight(); + final int count = state.getItemCount(); + // If we are laying out children with center element being different than the first, we + // need to start with previous child which appears half visible at the top. + for (int i = 0; getFirstPosition() + i < count; i++, top = bottom) { + if (top >= parentBottom) { + break; + } + View v = recycler.getViewForPosition(getFirstPosition() + i); + addView(v, i); + measureThirdView(v); + bottom = top + getItemHeight(); + v.layout(left, top, right, bottom); + } + } + + private void setAbsoluteScroll(int absoluteScroll) { + mAbsoluteScroll = absoluteScroll; + for (OnScrollListener listener : mOnScrollListeners) { + listener.onAbsoluteScrollChange(mAbsoluteScroll); + } + } + + private void measureView(View v, int height) { + final LayoutParams lp = (LayoutParams) v.getLayoutParams(); + final int widthSpec = getChildMeasureSpec(getWidth(), + getPaddingLeft() + getPaddingRight() + lp.leftMargin + lp.rightMargin, lp.width, + canScrollHorizontally()); + final int heightSpec = getChildMeasureSpec(getHeight(), + getPaddingTop() + getPaddingBottom() + lp.topMargin + lp.bottomMargin, + height, canScrollVertically()); + v.measure(widthSpec, heightSpec); + } + + private void measureThirdView(View v) { + measureView(v, (int) (1 + (float) getHeight() / THIRD)); + } + + private void measureZoomView(View v) { + measureView(v, getHeight()); + } + + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + + @Override + public boolean canScrollVertically() { + // Disable vertical scrolling when zoomed. + return getItemCount() != 1 || !mWasZoomedIn; + } + + @Override + public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, State state) { + // TODO(gruszczy): This code is shit, needs to be rewritten. + if (getChildCount() == 0) { + return 0; + } + int scrolled = 0; + final int left = getPaddingLeft(); + final int right = getWidth() - getPaddingRight(); + if (dy < 0) { + while (scrolled > dy) { + final View topView = getChildAt(0); + if (getFirstPosition() > 0) { + final int hangingTop = Math.max(-topView.getTop(), 0); + final int scrollBy = Math.min(scrolled - dy, hangingTop); + scrolled -= scrollBy; + offsetChildrenVertical(scrollBy); + if (getFirstPosition() > 0 && scrolled > dy) { + mFirstPosition--; + View v = recycler.getViewForPosition(getFirstPosition()); + addView(v, 0); + measureThirdView(v); + final int bottom = topView.getTop(); + final int top = bottom - getItemHeight(); + v.layout(left, top, right, bottom); + } else { + break; + } + } else { + mPushFirstHigher = false; + int maxScroll = mOverScrollListener!= null ? + getHeight() : getTopViewMaxTop(); + final int scrollBy = Math.min(-dy + scrolled, maxScroll - topView.getTop()); + scrolled -= scrollBy; + offsetChildrenVertical(scrollBy); + break; + } + } + } else if (dy > 0) { + final int parentHeight = getHeight(); + while (scrolled < dy) { + final View bottomView = getChildAt(getChildCount() - 1); + if (state.getItemCount() > mFirstPosition + getChildCount()) { + final int hangingBottom = + Math.max(bottomView.getBottom() - parentHeight, 0); + final int scrollBy = -Math.min(dy - scrolled, hangingBottom); + scrolled -= scrollBy; + offsetChildrenVertical(scrollBy); + if (scrolled < dy) { + View v = recycler.getViewForPosition(mFirstPosition + getChildCount()); + final int top = getChildAt(getChildCount() - 1).getBottom(); + addView(v); + measureThirdView(v); + final int bottom = top + getItemHeight(); + v.layout(left, top, right, bottom); + } else { + break; + } + } else { + final int scrollBy = + Math.max(-dy + scrolled, getHeight() / 2 - bottomView.getBottom()); + scrolled -= scrollBy; + offsetChildrenVertical(scrollBy); + break; + } + } + } + recycleViewsOutOfBounds(recycler); + setAbsoluteScroll(mAbsoluteScroll + scrolled); + return scrolled; + } + + @Override + public void scrollToPosition(int position) { + mUseOldViewTop = false; + if (position > 0) { + mFirstPosition = position - 1; + mPushFirstHigher = true; + } else { + mFirstPosition = position; + mPushFirstHigher = false; + } + requestLayout(); + } + + public void setCustomSmoothScroller(RecyclerView.SmoothScroller smoothScroller) { + mSmoothScroller = smoothScroller; + } + + public void clearCustomSmoothScroller() { + mSmoothScroller = null; + } + + public RecyclerView.SmoothScroller getDefaultSmoothScroller(RecyclerView recyclerView) { + if (mDefaultSmoothScroller == null) { + mDefaultSmoothScroller = new SmoothScroller( + recyclerView.getContext(), this); + } + return mDefaultSmoothScroller; + } + @Override + public void smoothScrollToPosition(RecyclerView recyclerView, State state, + int position) { + RecyclerView.SmoothScroller scroller = mSmoothScroller; + if (scroller == null) { + scroller = getDefaultSmoothScroller(recyclerView); + } + scroller.setTargetPosition(position); + startSmoothScroll(scroller); + } + + private void recycleViewsOutOfBounds(RecyclerView.Recycler recycler) { + final int childCount = getChildCount(); + final int parentWidth = getWidth(); + // Here we want to use real height, so we don't remove views that are only visible in + // padded section. + final int parentHeight = getHeight(); + boolean foundFirst = false; + int first = 0; + int last = 0; + for (int i = 0; i < childCount; i++) { + final View v = getChildAt(i); + if (v.hasFocus() || (v.getRight() >= 0 && v.getLeft() <= parentWidth && + v.getBottom() >= 0 && v.getTop() <= parentHeight)) { + if (!foundFirst) { + first = i; + foundFirst = true; + } + last = i; + } + } + for (int i = childCount - 1; i > last; i--) { + removeAndRecycleViewAt(i, recycler); + } + for (int i = first - 1; i >= 0; i--) { + removeAndRecycleViewAt(i, recycler); + } + if (getChildCount() == 0) { + mFirstPosition = 0; + } else if (first > 0) { + mPushFirstHigher = true; + mFirstPosition += first; + } + } + + public int getFirstPosition() { + return mFirstPosition; + } + + @Override + public void onAdapterChanged(RecyclerView.Adapter oldAdapter, + RecyclerView.Adapter newAdapter) { + removeAllViews(); + } + } + + /** + * Interface for receiving callbacks when WearableListView children become or cease to be the + * central item. + */ + public interface OnCenterProximityListener { + /** + * Called when this view becomes central item of the WearableListView. + * + * @param animate Whether you should animate your transition of the View to become the + * central item. If false, this is the initial setting and you should + * transition immediately. + */ + void onCenterPosition(boolean animate); + + /** + * Called when this view stops being the central item of the WearableListView. + * @param animate Whether you should animate your transition of the View to being + * non central item. If false, this is the initial setting and you should + * transition immediately. + */ + void onNonCenterPosition(boolean animate); + } + + /** + * Interface for listening for click events on WearableListView. + */ + public interface ClickListener { + /** + * Called when the central child of the WearableListView is tapped. + * @param view View that was clicked. + */ + public void onClick(ViewHolder view); + + /** + * Called when the user taps the top third of the WearableListView and no item is present + * there. This can happen when you are in initial state and the first, top-most item of the + * WearableListView is centered. + */ + public void onTopEmptyRegionClick(); + } + + /** + * @hide + */ + public interface OnOverScrollListener { + public void onOverScroll(); + } + + /** + * Interface for listening to WearableListView content scrolling. + */ + public interface OnScrollListener { + /** + * Called when the content is scrolled, reporting the relative scroll value. + * @param scroll Amount the content was scrolled. This is a delta from the previous + * position to the new position. + */ + public void onScroll(int scroll); + + /** + * Called when the content is scrolled, reporting the absolute scroll value. + * + * @deprecated BE ADVISED DO NOT USE THIS This might provide wrong values when contents + * of a RecyclerView change. + * + * @param scroll Absolute scroll position of the content inside the WearableListView. + */ + @Deprecated + public void onAbsoluteScrollChange(int scroll); + + /** + * Called when WearableListView's scroll state changes. + * + * @param scrollState The updated scroll state. One of {@link #SCROLL_STATE_IDLE}, + * {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}. + */ + public void onScrollStateChanged(int scrollState); + + /** + * Called when the central item of the WearableListView changes. + * + * @param centralPosition Position of the item in the Adapter. + */ + public void onCentralPositionChanged(int centralPosition); + } + + /** + * A listener interface that can be added to the WearableListView to get notified when the + * central item is changed. + */ + public interface OnCentralPositionChangedListener { + /** + * Called when the central item of the WearableListView changes. + * + * @param centralPosition Position of the item in the Adapter. + */ + void onCentralPositionChanged(int centralPosition); + } + + /** + * Base class for adapters providing data for the WearableListView. For details refer to + * RecyclerView.Adapter. + */ + public static abstract class Adapter extends RecyclerView.Adapter<ViewHolder> { + } + + private static class SmoothScroller extends LinearSmoothScroller { + + private static final float MILLISECONDS_PER_INCH = 100f; + + private final LayoutManager mLayoutManager; + + public SmoothScroller(Context context, WearableListView.LayoutManager manager) { + super(context); + mLayoutManager = manager; + } + + @Override + protected void onStart() { + super.onStart(); + } + + // TODO: (mindyp): when flinging, return the dydt that triggered the fling. + @Override + protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { + return MILLISECONDS_PER_INCH / displayMetrics.densityDpi; + } + + @Override + public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int + snapPreference) { + // Snap to center. + return (boxStart + boxEnd) / 2 - (viewStart + viewEnd) / 2; + } + + @Override + public PointF computeScrollVectorForPosition(int targetPosition) { + if (targetPosition < mLayoutManager.getFirstPosition()) { + return new PointF(0, -1); + } else { + return new PointF(0, 1); + } + } + } + + /** + * Wrapper around items displayed in the list view. {@link .Adapter} must return objects that + * are instances of this class. Consider making the wrapped View implement + * {@link .OnCenterProximityListener} if you want to receive a callback when it becomes or + * ceases to be the central item in the WearableListView. + */ + public static class ViewHolder extends RecyclerView.ViewHolder { + public ViewHolder(View itemView) { + super(itemView); + } + + /** + * Called when the wrapped view is becoming or ceasing to be the central item of the + * WearableListView. + * + * Retained as protected for backwards compatibility. + * + * @hide + */ + protected void onCenterProximity(boolean isCentralItem, boolean animate) { + if (!(itemView instanceof OnCenterProximityListener)) { + return; + } + OnCenterProximityListener item = (OnCenterProximityListener) itemView; + if (isCentralItem) { + item.onCenterPosition(animate); + } else { + item.onNonCenterPosition(animate); + } + } + } + + private class SetScrollVerticallyProperty extends Property<WearableListView, Integer> { + public SetScrollVerticallyProperty() { + super(Integer.class, "scrollVertically"); + } + + @Override + public Integer get(WearableListView wearableListView) { + return wearableListView.mLastScrollChange; + } + + @Override + public void set(WearableListView wearableListView, Integer value) { + wearableListView.setScrollVertically(value); + } + } +} diff --git a/src/com/android/packageinstaller/DeviceUtils.java b/src/com/android/packageinstaller/DeviceUtils.java new file mode 100644 index 00000000..8e2d57ea --- /dev/null +++ b/src/com/android/packageinstaller/DeviceUtils.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2015 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.packageinstaller; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Configuration; + +public class DeviceUtils { + public static boolean isTelevision(Context context) { + int uiMode = context.getResources().getConfiguration().uiMode; + return (uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION; + } + + public static boolean isWear(final Context context) { + return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH); + } +} diff --git a/src/com/android/packageinstaller/InstallFlowAnalytics.java b/src/com/android/packageinstaller/InstallFlowAnalytics.java index 2fc6db37..4591f31c 100644 --- a/src/com/android/packageinstaller/InstallFlowAnalytics.java +++ b/src/com/android/packageinstaller/InstallFlowAnalytics.java @@ -85,6 +85,11 @@ public class InstallFlowAnalytics implements Parcelable { */ static final byte RESULT_PACKAGE_MANAGER_INSTALL_FAILED = 6; + /** + * Installation blocked since this feature is not allowed on Android Wear devices yet. + */ + static final byte RESULT_NOT_ALLOWED_ON_WEAR = 7; + private static final int FLAG_INSTALLS_FROM_UNKNOWN_SOURCES_PERMITTED = 1 << 0; private static final int FLAG_INSTALL_REQUEST_FROM_UNKNOWN_SOURCE = 1 << 1; private static final int FLAG_VERIFY_APPS_ENABLED = 1 << 2; @@ -600,4 +605,4 @@ public class InstallFlowAnalytics implements Parcelable { } return digest.digest(); } -}
\ No newline at end of file +} diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java index 6bcd80e4..868872a9 100644 --- a/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -110,6 +110,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen private static final int DLG_INSTALL_ERROR = DLG_BASE + 4; private static final int DLG_ALLOW_SOURCE = DLG_BASE + 5; private static final int DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES = DLG_BASE + 6; + private static final int DLG_NOT_SUPPORTED_ON_WEAR = DLG_BASE + 7; private void startInstallConfirm() { TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); @@ -293,7 +294,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen Log.i(TAG, "Canceling installation"); finish(); } - }) + }) .setOnCancelListener(this) .create(); case DLG_INSTALL_ERROR : @@ -333,6 +334,18 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen }) .setOnCancelListener(this) .create(); + case DLG_NOT_SUPPORTED_ON_WEAR: + return new AlertDialog.Builder(this) + .setTitle(R.string.wear_not_allowed_dlg_title) + .setMessage(R.string.wear_not_allowed_dlg_text) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + setResult(RESULT_OK); + finish(); + } + }) + .setOnCancelListener(this) + .create(); } return null; } @@ -478,6 +491,13 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen mInstallFlowAnalytics.setAppVerifierInstalled(isAppVerifierInstalled()); mInstallFlowAnalytics.setPackageUri(mPackageURI.toString()); + if (DeviceUtils.isWear(this)) { + showDialogInner(DLG_NOT_SUPPORTED_ON_WEAR); + mInstallFlowAnalytics.setFlowFinished( + InstallFlowAnalytics.RESULT_NOT_ALLOWED_ON_WEAR); + return; + } + final String scheme = mPackageURI.getScheme(); if (scheme != null && !"file".equals(scheme) && !"package".equals(scheme)) { Log.w(TAG, "Unsupported scheme " + scheme); diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java index d465ee09..a0f23d64 100644 --- a/src/com/android/packageinstaller/permission/model/AppPermissions.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java @@ -23,6 +23,8 @@ import android.text.BidiFormatter; import android.text.TextPaint; import android.text.TextUtils; +import com.android.packageinstaller.DeviceUtils; + import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; @@ -165,9 +167,12 @@ public final class AppPermissions { private static CharSequence loadEllipsizedAppLabel(Context context, PackageInfo packageInfo) { String label = packageInfo.applicationInfo.loadLabel( context.getPackageManager()).toString(); - String noNewLineLabel = label.replace("\n", " "); - String ellipsizedLabel = TextUtils.ellipsize(noNewLineLabel, sAppLabelEllipsizePaint, + String ellipsizedLabel = label.replace("\n", " "); + if (!DeviceUtils.isWear(context)) { + // Only ellipsize for non-Wear devices. + ellipsizedLabel = TextUtils.ellipsize(ellipsizedLabel, sAppLabelEllipsizePaint, MAX_APP_LABEL_LENGTH_PIXELS, TextUtils.TruncateAt.END).toString(); + } return BidiFormatter.getInstance().unicodeWrap(ellipsizedLabel); } } diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java index 2a46f1a6..3604cd71 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -18,6 +18,7 @@ package com.android.packageinstaller.permission.model; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -30,37 +31,52 @@ import com.android.packageinstaller.permission.utils.Utils; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class PermissionStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - int[] counts = new int[3]; - ArrayList<CharSequence> grantedGroups = new ArrayList<>(); - boolean succeeded = false; + if (Intent.ACTION_GET_PERMISSIONS_COUNT.equals(intent.getAction())) { + Intent responseIntent = new Intent(intent.getStringExtra( + Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT)); + responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); - boolean isForPackage = intent.hasExtra(Intent.EXTRA_PACKAGE_NAME); + int[] counts = new int[3]; + ArrayList<CharSequence> grantedGroups = new ArrayList<>(); + boolean succeeded = false; - Intent responseIntent = new Intent(intent.getStringExtra( - Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT)); - responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); - - - if (isForPackage) { - String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); - succeeded = getPermissionsCount(context, pkg, counts, grantedGroups); - } else { - succeeded = getAppsWithPermissionsCount(context, counts); - } - if (succeeded) { - responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts); + boolean isForPackage = intent.hasExtra(Intent.EXTRA_PACKAGE_NAME); if (isForPackage) { - responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT, - grantedGroups.toArray(new CharSequence[grantedGroups.size()])); + String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); + succeeded = getPermissionsCount(context, pkg, counts, grantedGroups); + } else { + succeeded = getAppsWithPermissionsCount(context, counts); } - } + if (succeeded) { + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts); - context.sendBroadcast(responseIntent); + if (isForPackage) { + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT, + grantedGroups.toArray(new CharSequence[grantedGroups.size()])); + } + } + context.sendBroadcast(responseIntent); + } else if (Intent.ACTION_GET_PERMISSIONS_PACKAGES.equals(intent.getAction())) { + Intent responseIntent = new Intent(intent.getStringExtra( + Intent.EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT)); + responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); + + List<String> appsList = new ArrayList<>(); + List<CharSequence> appLabelsList = new ArrayList<>(); + if (getAppsWithRuntimePermissions(context, appsList, appLabelsList)) { + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_APP_LIST_RESULT, + appsList.toArray(new String[appsList.size()])); + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT, + appLabelsList.toArray(new String[appLabelsList.size()])); + } + context.sendBroadcast(responseIntent); + } } public boolean getPermissionsCount(Context context, String pkg, int[] counts, @@ -105,6 +121,40 @@ public class PermissionStatusReceiver extends BroadcastReceiver { } } + public boolean getAppsWithRuntimePermissions(Context context, List<String> appsList, + List<CharSequence> appLabelsList) { + final List<ApplicationInfo> appInfos = Utils.getAllInstalledApplications(context); + if (appInfos == null) { + return false; + } + final int appInfosSize = appInfos.size(); + try { + for (int i = 0; i < appInfosSize; ++i) { + final String packageName = appInfos.get(i).packageName; + PackageInfo packageInfo = context.getPackageManager().getPackageInfo( + packageName, PackageManager.GET_PERMISSIONS); + AppPermissions appPermissions = + new AppPermissions(context, packageInfo, null, false, null); + + boolean shouldShow = false; + for (AppPermissionGroup group : appPermissions.getPermissionGroups()) { + if (Utils.shouldShowPermission(group, packageName)) { + shouldShow = true; + break; + } + } + if (shouldShow) { + appsList.add(packageName); + appLabelsList.add(appPermissions.getAppLabel()); + } + } + } catch (NameNotFoundException e) { + return false; + } + + return true; + } + public boolean getAppsWithPermissionsCount(Context context, int[] counts) { ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context); // Indexed by uid. diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 56b3f466..ffa8bf35 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -38,6 +38,7 @@ import android.view.View; import android.view.Window; import android.view.WindowManager; +import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; @@ -71,8 +72,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity setTitle(R.string.permission_request_title); - if (Utils.isTelevision(this)) { + if (DeviceUtils.isTelevision(this)) { mViewHandler = new GrantPermissionsTvViewHandler(this).setResultListener(this); + } else if (DeviceUtils.isWear(this)) { + mViewHandler = new GrantPermissionsWatchViewHandler(this).setResultListener(this); } else { mViewHandler = new GrantPermissionsDefaultViewHandler(this).setResultListener(this); } diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java new file mode 100644 index 00000000..21042f00 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java @@ -0,0 +1,176 @@ +package com.android.packageinstaller.permission.ui; + +import android.content.Context; +import android.graphics.PixelFormat; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; + +import com.android.packageinstaller.R; +import com.android.packageinstaller.permission.ui.wear.ConfirmationViewHandler; + +/** + * Watch-specific view handler for the grant permissions activity. + */ +final class GrantPermissionsWatchViewHandler extends ConfirmationViewHandler + implements GrantPermissionsViewHandler { + private static final String TAG = "GrantPermsWatchViewH"; + + private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME"; + + private final Context mContext; + + private ResultListener mResultListener; + + private String mGroupName; + private boolean mShowDoNotAsk; + + private CharSequence mMessage; + private String mCurrentPageText; + private Icon mIcon; + + GrantPermissionsWatchViewHandler(Context context) { + super(context); + mContext = context; + } + + @Override + public GrantPermissionsWatchViewHandler setResultListener(ResultListener listener) { + mResultListener = listener; + return this; + } + + @Override + public View createView() { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "createView()"); + } + + mShowDoNotAsk = false; + + return super.createView(); + } + + @Override + public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) { + outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + outLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; + outLayoutParams.format = PixelFormat.OPAQUE; + outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; + outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; + } + + @Override + public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon, + CharSequence message, boolean showDoNotAsk) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "updateUi() - groupName: " + groupName + + ", groupCount: " + groupCount + + ", groupIndex: " + groupIndex + + ", icon: " + icon + + ", message: " + message + + ", showDoNotAsk: " + showDoNotAsk); + } + + mGroupName = groupName; + mShowDoNotAsk = showDoNotAsk; + mMessage = message; + mIcon = icon; + mCurrentPageText = (groupCount > 1 ? + mContext.getString(R.string.current_permission_template, groupIndex + 1, groupCount) + : null); + + invalidate(); + } + + @Override + public void saveInstanceState(Bundle outState) { + outState.putString(ARG_GROUP_NAME, mGroupName); + } + + @Override + public void loadInstanceState(Bundle savedInstanceState) { + mGroupName = savedInstanceState.getString(ARG_GROUP_NAME); + } + + @Override + public void onBackPressed() { + if (mResultListener != null) { + mResultListener.onPermissionGrantResult(mGroupName, false, false); + } + } + + @Override // ConfirmationViewHandler + public void onButton1() { + onClick(true /* granted */, false /* doNotAskAgain */); + } + + @Override // ConfirmationViewHandler + public void onButton2() { + onClick(false /* granted */, false /* doNotAskAgain */); + } + + @Override // ConfirmationViewHandler + public void onButton3() { + onClick(false /* granted */, true /* doNotAskAgain */); + } + + @Override // ConfirmationViewHandler + public CharSequence getCurrentPageText() { + return mCurrentPageText; + } + + @Override // ConfirmationViewHandler + public Icon getPermissionIcon() { + return mIcon; + } + + @Override // ConfirmationViewHandler + public CharSequence getMessage() { + return mMessage; + } + + @Override // ConfirmationViewHandler + public int getButtonBarMode() { + return mShowDoNotAsk ? MODE_VERTICAL_BUTTONS : MODE_HORIZONTAL_BUTTONS; + } + + @Override // ConfirmationViewHandler + public CharSequence getVerticalButton1Text() { + return mContext.getString(R.string.grant_dialog_button_allow); + } + + @Override // ConfirmationViewHandler + public CharSequence getVerticalButton2Text() { + return mContext.getString(R.string.grant_dialog_button_deny); + } + + @Override // ConfirmationViewHandler + public CharSequence getVerticalButton3Text() { + return mContext.getString(R.string.grant_dialog_button_deny_dont_ask_again); + } + + @Override // ConfirmationViewHandler + public Drawable getVerticalButton1Icon(){ + return mContext.getDrawable(R.drawable.confirm_button); + } + + @Override // ConfirmationViewHandler + public Drawable getVerticalButton2Icon(){ + return mContext.getDrawable(R.drawable.cancel_button); + } + + @Override // ConfirmationViewHandler + public Drawable getVerticalButton3Icon(){ + return mContext.getDrawable(R.drawable.deny_button); + } + + private void onClick(boolean granted, boolean doNotAskAgain) { + if (mResultListener != null) { + mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain); + } + } +} diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java index 8ba6b127..f7fcec5e 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java @@ -21,6 +21,9 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; +import com.android.packageinstaller.permission.ui.wear.AppPermissionsFragmentWear; +import com.android.packageinstaller.DeviceUtils; + public final class ManagePermissionsActivity extends OverlayTouchActivity { private static final String LOG_TAG = "ManagePermissionsActivity"; @@ -47,7 +50,12 @@ public final class ManagePermissionsActivity extends OverlayTouchActivity { finish(); return; } - fragment = AppPermissionsFragment.newInstance(packageName); + + if (DeviceUtils.isWear(this)) { + fragment = AppPermissionsFragmentWear.newInstance(packageName); + } else { + fragment = AppPermissionsFragment.newInstance(packageName); + } } break; case Intent.ACTION_MANAGE_PERMISSION_APPS: { diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index 8dacd037..1e588939 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -39,6 +39,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.PermissionApps; @@ -185,7 +186,7 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple return; } - boolean isTelevision = Utils.isTelevision(context); + boolean isTelevision = DeviceUtils.isTelevision(context); PreferenceScreen screen = getPreferenceScreen(); ArraySet<String> preferencesToRemove = new ArraySet<>(); diff --git a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java index 40058f6d..35b6f1af 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java @@ -15,6 +15,7 @@ import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.TextView; +import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.utils.Utils; @@ -117,7 +118,7 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment { @Override public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { - if (Utils.isTelevision(getContext())) { + if (DeviceUtils.isTelevision(getContext())) { mGridView = (VerticalGridView) inflater.inflate( R.layout.leanback_preferences_list, parent, false); mGridView.setWindowAlignmentOffset(0); diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java index 7b58fed1..976fee11 100644 --- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java @@ -26,6 +26,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.utils.Utils; @@ -42,7 +43,7 @@ public abstract class SettingsWithHeader extends PermissionsFrameFragment Bundle savedInstanceState) { ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); - if (!Utils.isTelevision(getContext())) { + if (!DeviceUtils.isTelevision(getContext())) { mHeader = inflater.inflate(R.layout.header, root, false); getPreferencesContainer().addView(mHeader, 0); updateHeader(); diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java new file mode 100644 index 00000000..18db94c1 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java @@ -0,0 +1,333 @@ +/* +* Copyright (C) 2015 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.packageinstaller.permission.ui.wear; + +import android.Manifest; +import android.annotation.Nullable; +import android.app.Activity; +import android.app.Fragment; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.wearable.view.WearableListView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.android.packageinstaller.R; +import com.android.packageinstaller.permission.model.AppPermissionGroup; +import com.android.packageinstaller.permission.model.AppPermissions; +import com.android.packageinstaller.permission.ui.OverlayTouchActivity; +import com.android.packageinstaller.permission.ui.wear.settings.PermissionsSettingsAdapter; +import com.android.packageinstaller.permission.ui.wear.settings.SettingsAdapter; +import com.android.packageinstaller.permission.utils.LocationUtils; +import com.android.packageinstaller.permission.utils.SafetyNetLogger; +import com.android.packageinstaller.permission.utils.Utils; + +import java.util.ArrayList; +import java.util.List; + +public final class AppPermissionsFragmentWear extends TitledSettingsFragment { + + private static final String LOG_TAG = "ManagePermsFragment"; + + private static final int WARNING_CONFIRMATION_REQUEST = 252; + private List<AppPermissionGroup> mToggledGroups; + private AppPermissions mAppPermissions; + private PermissionsSettingsAdapter mAdapter; + + private boolean mHasConfirmedRevoke; + private int mPendingPermGroupIndex = -1; + + public static AppPermissionsFragmentWear newInstance(String packageName) { + return setPackageName(new AppPermissionsFragmentWear(), packageName); + } + + private static <T extends Fragment> T setPackageName(T fragment, String packageName) { + Bundle arguments = new Bundle(); + arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName); + fragment.setArguments(arguments); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); + Activity activity = getActivity(); + PackageManager pm = activity.getPackageManager(); + PackageInfo packageInfo; + + try { + packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); + } catch (PackageManager.NameNotFoundException e) { + Log.i(LOG_TAG, "No package:" + activity.getCallingPackage(), e); + packageInfo = null; + } + + if (packageInfo == null) { + Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show(); + activity.finish(); + return; + } + + mAppPermissions = new AppPermissions(activity, packageInfo, null, true, new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }); + + mAdapter = new PermissionsSettingsAdapter(getContext()); + + initializePermissionGroupList(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.settings, container, false); + } + + @Override + public void onResume() { + super.onResume(); + mAppPermissions.refresh(); + + // Also refresh the UI + final int count = mAdapter.getItemCount(); + for (int i = 0; i < count; ++i) { + updatePermissionGroupSetting(i); + } + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + if (mAppPermissions != null) { + initializeLayout(mAdapter); + bindHeader(mAppPermissions.getPackageInfo()); + } + } + + private void bindHeader(PackageInfo packageInfo) { + Activity activity = getActivity(); + PackageManager pm = activity.getPackageManager(); + ApplicationInfo appInfo = packageInfo.applicationInfo; + CharSequence label = appInfo.loadLabel(pm); + mHeader.setText(label); + } + + private void initializePermissionGroupList() { + final String packageName = mAppPermissions.getPackageInfo().packageName; + List<AppPermissionGroup> groups = mAppPermissions.getPermissionGroups(); + List<SettingsAdapter.Setting<AppPermissionGroup>> nonSystemGroups = new ArrayList<>(); + + final int count = groups.size(); + for (int i = 0; i < count; ++i) { + final AppPermissionGroup group = groups.get(i); + if (!Utils.shouldShowPermission(group, packageName)) { + continue; + } + + boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG); + + SettingsAdapter.Setting<AppPermissionGroup> setting = + new SettingsAdapter.Setting<AppPermissionGroup>( + group.getLabel(), + getPermissionGroupIcon(group), + i); + setting.data = group; + + // The UI shows System settings first, then non-system settings + if (isPlatform) { + mAdapter.addSetting(setting); + } else { + nonSystemGroups.add(setting); + } + } + + // Now add the non-system settings to the end of the list + final int nonSystemCount = nonSystemGroups.size(); + for (int i = 0; i < nonSystemCount; ++i) { + final SettingsAdapter.Setting<AppPermissionGroup> setting = nonSystemGroups.get(i); + mAdapter.addSetting(setting); + } + } + + @Override + public void onPause() { + super.onPause(); + logAndClearToggledGroups(); + } + + @Override + public void onClick(WearableListView.ViewHolder view) { + final int index = view.getPosition(); + SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index); + final AppPermissionGroup group = setting.data; + + if (group == null) { + Log.e(LOG_TAG, "Error: AppPermissionGroup is null"); + return; + } + + // The way WearableListView is designed, there is no way to avoid this click handler + // Since the policy is fixed, ignore the click as the user is not able to change the state + // of this permission group + if (group.isPolicyFixed()) { + return; + } + + OverlayTouchActivity activity = (OverlayTouchActivity) getActivity(); + if (activity.isObscuredTouch()) { + activity.showOverlayDialog(); + return; + } + + addToggledGroup(group); + + if (LocationUtils.isLocationGroupAndProvider(group.getName(), group.getApp().packageName)) { + LocationUtils.showLocationDialog(getContext(), mAppPermissions.getAppLabel()); + return; + } + + if (!group.areRuntimePermissionsGranted()) { + group.grantRuntimePermissions(false); + } else { + final boolean grantedByDefault = group.hasGrantedByDefaultPermission(); + if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) { + mPendingPermGroupIndex = index; + Intent intent = new Intent(getActivity(), WarningConfirmationActivity.class); + intent.putExtra(WarningConfirmationActivity.EXTRA_WARNING_MESSAGE, + getString(grantedByDefault ? + R.string.system_warning : R.string.old_sdk_deny_warning)); + startActivityForResult(intent, WARNING_CONFIRMATION_REQUEST); + } else { + group.revokeRuntimePermissions(false); + } + } + + updatePermissionGroupSetting(index); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == WARNING_CONFIRMATION_REQUEST) { + if (resultCode == Activity.RESULT_OK) { + SettingsAdapter.Setting<AppPermissionGroup> setting = + mAdapter.get(mPendingPermGroupIndex); + final AppPermissionGroup group = setting.data; + group.revokeRuntimePermissions(false); + if (!group.hasGrantedByDefaultPermission()) { + mHasConfirmedRevoke = true; + } + + updatePermissionGroupSetting(mPendingPermGroupIndex); + } + + mPendingPermGroupIndex = -1; + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } + + private void updatePermissionGroupSetting(int index) { + SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index); + AppPermissionGroup group = setting.data; + mAdapter.updateSetting( + index, + group.getLabel(), + getPermissionGroupIcon(group), + group); + } + + private void addToggledGroup(AppPermissionGroup group) { + if (mToggledGroups == null) { + mToggledGroups = new ArrayList<>(); + } + // Double toggle is back to initial state. + if (mToggledGroups.contains(group)) { + mToggledGroups.remove(group); + } else { + mToggledGroups.add(group); + } + } + + private void logAndClearToggledGroups() { + if (mToggledGroups != null) { + String packageName = mAppPermissions.getPackageInfo().packageName; + SafetyNetLogger.logPermissionsToggled(packageName, mToggledGroups); + mToggledGroups = null; + } + } + + private int getPermissionGroupIcon(AppPermissionGroup group) { + String groupName = group.getName(); + boolean isEnabled = group.areRuntimePermissionsGranted(); + int resId; + + switch (groupName) { + case Manifest.permission_group.CALENDAR: + resId = isEnabled ? R.drawable.ic_permission_calendar + : R.drawable.ic_permission_calendardisable; + break; + case Manifest.permission_group.CAMERA: + resId = isEnabled ? R.drawable.ic_permission_camera + : R.drawable.ic_permission_cameradisable; + break; + case Manifest.permission_group.CONTACTS: + resId = isEnabled ? R.drawable.ic_permission_contact + : R.drawable.ic_permission_contactdisable; + break; + case Manifest.permission_group.LOCATION: + resId = isEnabled ? R.drawable.ic_permission_location + : R.drawable.ic_permission_locationdisable; + break; + case Manifest.permission_group.MICROPHONE: + resId = isEnabled ? R.drawable.ic_permission_mic + : R.drawable.ic_permission_micdisable; + break; + case Manifest.permission_group.PHONE: + resId = isEnabled ? R.drawable.ic_permission_call + : R.drawable.ic_permission_calldisable; + break; + case Manifest.permission_group.SENSORS: + resId = isEnabled ? R.drawable.ic_permission_sensor + : R.drawable.ic_permission_sensordisable; + break; + case Manifest.permission_group.SMS: + resId = isEnabled ? R.drawable.ic_permission_sms + : R.drawable.ic_permission_smsdisable; + break; + case Manifest.permission_group.STORAGE: + resId = isEnabled ? R.drawable.ic_permission_storage + : R.drawable.ic_permission_storagedisable; + break; + default: + resId = isEnabled ? R.drawable.ic_permission_shield + : R.drawable.ic_permission_shielddisable; + } + + return resId; + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java new file mode 100644 index 00000000..db3340f6 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java @@ -0,0 +1,348 @@ +package com.android.packageinstaller.permission.ui.wear; + +import android.animation.ObjectAnimator; +import android.animation.PropertyValuesHolder; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.android.packageinstaller.R; + +public abstract class ConfirmationViewHandler implements + Handler.Callback, + View.OnClickListener, + ViewTreeObserver.OnScrollChangedListener, + ViewTreeObserver.OnGlobalLayoutListener { + private static final String TAG = "ConfirmationViewHandler"; + + public static final int MODE_HORIZONTAL_BUTTONS = 0; + public static final int MODE_VERTICAL_BUTTONS = 1; + + private static final int MSG_SHOW_BUTTON_BAR = 1001; + private static final int MSG_HIDE_BUTTON_BAR = 1002; + private static final long HIDE_ANIM_DURATION = 500; + + private View mRoot; + private TextView mCurrentPageText; + private ImageView mIcon; + private TextView mMessage; + private ScrollView mScrollingContainer; + private ViewGroup mContent; + private ViewGroup mHorizontalButtonBar; + private ViewGroup mVerticalButtonBar; + private Button mVerticalButton1; + private Button mVerticalButton2; + private Button mVerticalButton3; + private View mButtonBarContainer; + + private Context mContext; + + private Handler mHideHandler; + private Interpolator mInterpolator; + private float mButtonBarFloatingHeight; + private ObjectAnimator mButtonBarAnimator; + private float mCurrentTranslation; + private boolean mHiddenBefore; + + // TODO: Move these into a builder + /** In the 2 button layout, this is allow button */ + public abstract void onButton1(); + /** In the 2 button layout, this is deny button */ + public abstract void onButton2(); + public abstract void onButton3(); + public abstract CharSequence getVerticalButton1Text(); + public abstract CharSequence getVerticalButton2Text(); + public abstract CharSequence getVerticalButton3Text(); + public abstract Drawable getVerticalButton1Icon(); + public abstract Drawable getVerticalButton2Icon(); + public abstract Drawable getVerticalButton3Icon(); + public abstract CharSequence getCurrentPageText(); + public abstract Icon getPermissionIcon(); + public abstract CharSequence getMessage(); + + public ConfirmationViewHandler(Context context) { + mContext = context; + } + + public View createView() { + mRoot = LayoutInflater.from(mContext).inflate(R.layout.confirmation_dialog, null); + + mMessage = (TextView) mRoot.findViewById(R.id.message); + mCurrentPageText = (TextView) mRoot.findViewById(R.id.current_page_text); + mIcon = (ImageView) mRoot.findViewById(R.id.icon); + mButtonBarContainer = mRoot.findViewById(R.id.button_bar_container); + mContent = (ViewGroup) mRoot.findViewById(R.id.content); + mScrollingContainer = (ScrollView) mRoot.findViewById(R.id.scrolling_container); + mHorizontalButtonBar = (ViewGroup) mRoot.findViewById(R.id.horizontal_button_bar); + mVerticalButtonBar = (ViewGroup) mRoot.findViewById(R.id.vertical_button_bar); + + Button horizontalAllow = (Button) mRoot.findViewById(R.id.permission_allow_button); + Button horizontalDeny = (Button) mRoot.findViewById(R.id.permission_deny_button); + horizontalAllow.setOnClickListener(this); + horizontalDeny.setOnClickListener(this); + + mVerticalButton1 = (Button) mRoot.findViewById(R.id.vertical_button1); + mVerticalButton2 = (Button) mRoot.findViewById(R.id.vertical_button2); + mVerticalButton3 = (Button) mRoot.findViewById(R.id.vertical_button3); + mVerticalButton1.setOnClickListener(this); + mVerticalButton2.setOnClickListener(this); + mVerticalButton3.setOnClickListener(this); + + mInterpolator = AnimationUtils.loadInterpolator(mContext, + android.R.interpolator.fast_out_slow_in); + mButtonBarFloatingHeight = mContext.getResources().getDimension( + R.dimen.conf_diag_floating_height); + mHideHandler = new Handler(this); + + mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this); + mRoot.getViewTreeObserver().addOnGlobalLayoutListener(this); + + return mRoot; + } + + /** + * Child class should override this for other modes. Call invalidate() to update the UI to the + * new button mode. + * @return The current mode the layout should use for the buttons + */ + public int getButtonBarMode() { + return MODE_HORIZONTAL_BUTTONS; + } + + public void invalidate() { + CharSequence currentPageText = getCurrentPageText(); + if (!TextUtils.isEmpty(currentPageText)) { + mCurrentPageText.setText(currentPageText); + mCurrentPageText.setVisibility(View.VISIBLE); + } else { + mCurrentPageText.setVisibility(View.GONE); + } + + Icon icon = getPermissionIcon(); + if (icon != null) { + mIcon.setImageIcon(icon); + mIcon.setVisibility(View.VISIBLE); + } else { + mIcon.setVisibility(View.GONE); + } + mMessage.setText(getMessage()); + + switch (getButtonBarMode()) { + case MODE_HORIZONTAL_BUTTONS: + mHorizontalButtonBar.setVisibility(View.VISIBLE); + mVerticalButtonBar.setVisibility(View.GONE); + break; + case MODE_VERTICAL_BUTTONS: + mHorizontalButtonBar.setVisibility(View.GONE); + mVerticalButtonBar.setVisibility(View.VISIBLE); + + mVerticalButton1.setText(getVerticalButton1Text()); + mVerticalButton2.setText(getVerticalButton2Text()); + + mVerticalButton1.setCompoundDrawablesWithIntrinsicBounds( + getVerticalButton1Icon(), null, null, null); + mVerticalButton2.setCompoundDrawablesWithIntrinsicBounds( + getVerticalButton2Icon(), null, null, null); + + CharSequence verticalButton3Text = getVerticalButton3Text(); + if (TextUtils.isEmpty(verticalButton3Text)) { + mVerticalButton3.setVisibility(View.GONE); + } else { + mVerticalButton3.setText(getVerticalButton3Text()); + mVerticalButton3.setCompoundDrawablesWithIntrinsicBounds( + getVerticalButton3Icon(), null, null, null); + } + break; + } + + mScrollingContainer.scrollTo(0, 0); + + mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR); + mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR); + } + + @Override + public void onGlobalLayout() { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "onGlobalLayout"); + Log.d(TAG, " contentHeight: " + mContent.getHeight()); + } + + if (mButtonBarAnimator != null) { + mButtonBarAnimator.cancel(); + } + + // In order to fake the buttons peeking at the bottom, need to do set the + // padding properly. + if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) { + mContent.setPadding(0, 0, 0, mButtonBarContainer.getHeight()); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, " set mContent.PaddingBottom: " + mButtonBarContainer.getHeight()); + } + } + + mButtonBarContainer.setTranslationY(mButtonBarContainer.getHeight()); + + // Give everything a chance to render + mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR); + mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR); + mHideHandler.sendEmptyMessageDelayed(MSG_SHOW_BUTTON_BAR, 50); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + switch (id) { + case R.id.permission_allow_button: + case R.id.vertical_button1: + onButton1(); + break; + case R.id.permission_deny_button: + case R.id.vertical_button2: + onButton2(); + break; + case R.id.vertical_button3: + onButton3(); + break; + } + } + + @Override + public boolean handleMessage (Message msg) { + switch (msg.what) { + case MSG_SHOW_BUTTON_BAR: + showButtonBar(); + return true; + case MSG_HIDE_BUTTON_BAR: + hideButtonBar(); + return true; + } + return false; + } + + @Override + public void onScrollChanged () { + mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR); + hideButtonBar(); + } + + private void showButtonBar() { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "showButtonBar"); + } + + // Setup Button animation. + // pop the button bar back to full height, stop all animation + if (mButtonBarAnimator != null) { + mButtonBarAnimator.cancel(); + } + + // stop any calls to hide the button bar in the future + mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR); + mHiddenBefore = false; + + // Evaluate the max height the button bar can go + final int screenHeight = mRoot.getHeight(); + final int buttonBarHeight = mButtonBarContainer.getHeight(); + final int buttonBarMaxHeight = + Math.min(buttonBarHeight, screenHeight / 2); + + if (Log.isLoggable(TAG, Log.DEBUG)) { + final int contentHeight = mContent.getHeight() - buttonBarHeight; + Log.d(TAG, " screenHeight: " + screenHeight); + Log.d(TAG, " contentHeight: " + contentHeight); + Log.d(TAG, " buttonBarHeight: " + buttonBarHeight); + Log.d(TAG, " buttonBarMaxHeight: " + buttonBarMaxHeight); + } + + mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight); + mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000); + + generateButtonBarAnimator(buttonBarHeight, + buttonBarHeight - buttonBarMaxHeight, 0, mButtonBarFloatingHeight, 1000); + } + + private void hideButtonBar() { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "hideButtonBar"); + } + + // The desired margin space between the button bar and the bottom of the dialog text + final int topMargin = mContext.getResources().getDimensionPixelSize( + R.dimen.conf_diag_button_container_top_margin); + final int contentHeight = mContent.getHeight() + topMargin; + final int screenHeight = mRoot.getHeight(); + final int buttonBarHeight = mButtonBarContainer.getHeight(); + + final int offset = screenHeight + buttonBarHeight + - contentHeight + Math.max(mScrollingContainer.getScrollY(), 0); + final int translationY = (offset > 0 ? + mButtonBarContainer.getHeight() - offset : mButtonBarContainer.getHeight()); + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, " contentHeight: " + contentHeight); + Log.d(TAG, " buttonBarHeight: " + buttonBarHeight); + Log.d(TAG, " mContent.getPaddingBottom(): " + mContent.getPaddingBottom()); + Log.d(TAG, " mScrollingContainer.getScrollY(): " + mScrollingContainer.getScrollY()); + Log.d(TAG, " translationY: " + translationY); + } + + if (!mHiddenBefore || mButtonBarAnimator == null) { + // hasn't hidden the bar yet, just hide now to the right height + generateButtonBarAnimator( + mButtonBarContainer.getTranslationY(), translationY, + mButtonBarFloatingHeight, 0, HIDE_ANIM_DURATION); + } else if (mButtonBarAnimator.isRunning()) { + // we are animating the button bar closing, change to animate to the right place + if (Math.abs(mCurrentTranslation - translationY) > 1e-2f) { + mButtonBarAnimator.cancel(); // stop current animation + + if (Math.abs(mButtonBarContainer.getTranslationY() - translationY) > 1e-2f) { + long duration = Math.max((long) ( + (float) HIDE_ANIM_DURATION + * (translationY - mButtonBarContainer.getTranslationY()) + / mButtonBarContainer.getHeight()), 0); + generateButtonBarAnimator( + mButtonBarContainer.getTranslationY(), translationY, + mButtonBarFloatingHeight, 0, duration); + } else { + mButtonBarContainer.setTranslationY(translationY); + mButtonBarContainer.setTranslationZ(0); + } + } + } else { + // not currently animating, have already hidden, snap to the right offset + mButtonBarContainer.setTranslationY(translationY); + mButtonBarContainer.setTranslationZ(0); + } + + mHiddenBefore = true; + } + + private void generateButtonBarAnimator( + float startY, float endY, float startZ, float endZ, long duration) { + mButtonBarAnimator = + ObjectAnimator.ofPropertyValuesHolder( + mButtonBarContainer, + PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, startY, endY), + PropertyValuesHolder.ofFloat(View.TRANSLATION_Z, startZ, endZ)); + mCurrentTranslation = endY; + mButtonBarAnimator.setDuration(duration); + mButtonBarAnimator.setInterpolator(mInterpolator); + mButtonBarAnimator.start(); + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java b/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java new file mode 100644 index 00000000..ef7efb28 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear; + +import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.support.wearable.view.WearableListView; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowInsets; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.android.packageinstaller.permission.ui.wear.settings.ViewUtils; +import com.android.packageinstaller.R; + +/** + * Base settings Fragment that shows a title at the top of the page. + */ +public abstract class TitledSettingsFragment extends Fragment implements + View.OnLayoutChangeListener, WearableListView.ClickListener { + + private static final int ITEM_CHANGE_DURATION_MS = 120; + + private static final String TAG = "TitledSettingsFragment"; + private int mInitialHeaderHeight; + + protected TextView mHeader; + protected WearableListView mWheel; + + private int mCharLimitShortTitle; + private int mCharLimitLine; + private int mChinOffset; + + private TextWatcher mHeaderTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void afterTextChanged(Editable editable) { + adjustHeaderSize(); + } + }; + + private void adjustHeaderTranslation() { + int translation = 0; + if (mWheel.getChildCount() > 0) { + translation = mWheel.getCentralViewTop() - mWheel.getChildAt(0).getTop(); + } + + float newTranslation = Math.min(Math.max(-mInitialHeaderHeight, -translation), 0); + + int position = mWheel.getChildAdapterPosition(mWheel.getChildAt(0)); + if (position == 0 || newTranslation < 0) { + mHeader.setTranslationY(newTranslation); + } + } + + @Override + public void onTopEmptyRegionClick() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mCharLimitShortTitle = getResources().getInteger(R.integer.short_title_length); + mCharLimitLine = getResources().getInteger(R.integer.char_limit_per_line); + } + + @Override + public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, + int oldTop, int oldRight, int oldBottom) { + if (view == mHeader) { + mInitialHeaderHeight = bottom - top; + if (ViewUtils.getIsCircular(getContext())) { + // We are adding more margin on circular screens, so we need to account for it and use + // it for hiding the header. + mInitialHeaderHeight += + ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin; + } + } else if (view == mWheel) { + adjustHeaderTranslation(); + } + } + + protected void initializeLayout(RecyclerView.Adapter adapter) { + View v = getView(); + mWheel = (WearableListView) v.findViewById(R.id.wheel); + + mHeader = (TextView) v.findViewById(R.id.header); + mHeader.addOnLayoutChangeListener(this); + mHeader.addTextChangedListener(mHeaderTextWatcher); + + mWheel.setAdapter(adapter); + mWheel.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + adjustHeaderTranslation(); + } + }); + mWheel.setClickListener(this); + mWheel.addOnLayoutChangeListener(this); + + // Decrease item change animation duration to approximately half of the default duration. + RecyclerView.ItemAnimator itemAnimator = mWheel.getItemAnimator(); + itemAnimator.setChangeDuration(ITEM_CHANGE_DURATION_MS); + + adjustHeaderSize(); + + positionOnCircular(getContext(), mHeader, mWheel); + } + + public void positionOnCircular(Context context, View header, final ViewGroup wheel) { + if (ViewUtils.getIsCircular(context)) { + FrameLayout.LayoutParams params = + (FrameLayout.LayoutParams) header.getLayoutParams(); + params.topMargin = (int) context.getResources().getDimension( + R.dimen.settings_header_top_margin_circular); + // Note that the margins are made symmetrical here. Since they're symmetrical we choose + // the smaller value to maximize usable width. + final int margin = (int) Math.min(context.getResources().getDimension( + R.dimen.round_content_padding_left), context.getResources().getDimension( + R.dimen.round_content_padding_right)); + params.leftMargin = margin; + params.rightMargin = margin; + params.gravity = Gravity.CENTER_HORIZONTAL; + header.setLayoutParams(params); + + if (header instanceof TextView) { + ((TextView) header).setGravity(Gravity.CENTER); + } + + final int leftPadding = (int) context.getResources().getDimension( + R.dimen.round_content_padding_left); + final int rightPadding = (int) context.getResources().getDimension( + R.dimen.round_content_padding_right); + final int topPadding = (int) context.getResources().getDimension( + R.dimen.settings_wearable_list_view_vertical_padding_round); + final int bottomPadding = (int) context.getResources().getDimension( + R.dimen.settings_wearable_list_view_vertical_padding_round); + wheel.setPadding(leftPadding, topPadding, rightPadding, mChinOffset + bottomPadding); + wheel.setClipToPadding(false); + + wheel.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { + @Override + public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { + mChinOffset = insets.getSystemWindowInsetBottom(); + wheel.setPadding(leftPadding, topPadding, rightPadding, + mChinOffset + bottomPadding); + // This listener is invoked after each time we navigate to SettingsActivity and + // it keeps adding padding. We need to disable it after the first update. + v.setOnApplyWindowInsetsListener(null); + return insets.consumeSystemWindowInsets(); + } + }); + } else { + int leftPadding = (int) context.getResources().getDimension( + R.dimen.content_padding_left); + wheel.setPadding(leftPadding, wheel.getPaddingTop(), wheel.getPaddingRight(), + wheel.getPaddingBottom()); + } + } + + private void adjustHeaderSize() { + int length = mHeader.length(); + + if (length <= mCharLimitShortTitle) { + mHeader.setTextSize(TypedValue.COMPLEX_UNIT_PX, + getResources().getDimensionPixelSize( + R.dimen.setting_short_header_text_size)); + } else { + mHeader.setTextSize(TypedValue.COMPLEX_UNIT_PX, + getResources().getDimensionPixelSize( + R.dimen.setting_long_header_text_size)); + } + + boolean singleLine = length <= mCharLimitLine; + + float height = getResources().getDimension(R.dimen.settings_header_base_height); + if (!singleLine) { + height += getResources().getDimension(R.dimen.setting_header_extra_line_height); + } + mHeader.setMinHeight((int) height); + + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mHeader.getLayoutParams(); + final Context context = getContext(); + if (!singleLine) { + // Make the top margin a little bit smaller so there is more space for the title. + if (ViewUtils.getIsCircular(context)) { + params.topMargin = getResources().getDimensionPixelSize( + R.dimen.settings_header_top_margin_circular_multiline); + } else { + params.topMargin = getResources().getDimensionPixelSize( + R.dimen.settings_header_top_margin_multiline); + } + } else { + if (ViewUtils.getIsCircular(context)) { + params.topMargin = getResources().getDimensionPixelSize( + R.dimen.settings_header_top_margin_circular); + } else { + params.topMargin = getResources().getDimensionPixelSize( + R.dimen.settings_header_top_margin); + } + } + mHeader.setLayoutParams(params); + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java b/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java new file mode 100644 index 00000000..e26dabd6 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java @@ -0,0 +1,110 @@ +/* +* Copyright (C) 2015 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.packageinstaller.permission.ui.wear; + +import android.app.Activity; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; +import android.os.Bundle; + +import com.android.packageinstaller.R; + +public final class WarningConfirmationActivity extends Activity { + public final static String EXTRA_WARNING_MESSAGE = "EXTRA_WARNING_MESSAGE"; + + private ConfirmationViewHandler mViewHandler; + private String mMessage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mMessage = getIntent().getStringExtra(EXTRA_WARNING_MESSAGE); + + mViewHandler = new ConfirmationViewHandler(this) { + @Override // ConfirmationViewHandler + public int getButtonBarMode() { + return MODE_VERTICAL_BUTTONS; + } + + @Override + public void onButton1() { + setResult(Activity.RESULT_CANCELED); + finish(); + } + + @Override + public void onButton2() { + setResult(Activity.RESULT_OK); + finish(); + } + + @Override + public void onButton3() { + // no-op + } + + @Override + public CharSequence getVerticalButton1Text() { + return getString(R.string.cancel); + } + + @Override + public CharSequence getVerticalButton2Text() { + return getString(R.string.grant_dialog_button_deny); + } + + @Override + public CharSequence getVerticalButton3Text() { + return null; + } + + @Override + public Drawable getVerticalButton1Icon() { + return getDrawable(R.drawable.cancel_button); + } + + @Override + public Drawable getVerticalButton2Icon() { + return getDrawable(R.drawable.confirm_button); + } + + @Override + public Drawable getVerticalButton3Icon() { + return null; + } + + @Override + public CharSequence getCurrentPageText() { + return null; + } + + @Override + public Icon getPermissionIcon() { + return null; + } + + @Override + public CharSequence getMessage() { + return mMessage; + } + }; + + setContentView(mViewHandler.createView()); + mViewHandler.invalidate(); + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java new file mode 100644 index 00000000..02c203b3 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear.settings; + +import android.support.wearable.view.WearableListView; + +public interface ExtendedOnCenterProximityListener + extends WearableListView.OnCenterProximityListener { + float getProximityMinValue(); + + float getProximityMaxValue(); + + float getCurrentProximityValue(); + + void setScalingAnimatorValue(float value); +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java new file mode 100644 index 00000000..6b725419 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear.settings; + +import android.animation.ObjectAnimator; +import android.support.wearable.view.WearableListView; +import android.view.View; + + +public class ExtendedViewHolder extends WearableListView.ViewHolder { + public static final long DEFAULT_ANIMATION_DURATION = 150; + + private ObjectAnimator mScalingUpAnimator; + + private ObjectAnimator mScalingDownAnimator; + + private float mMinValue; + + private float mMaxValue; + + public ExtendedViewHolder(View itemView) { + super(itemView); + if (itemView instanceof ExtendedOnCenterProximityListener) { + ExtendedOnCenterProximityListener item = + (ExtendedOnCenterProximityListener) itemView; + mMinValue = item.getProximityMinValue(); + item.setScalingAnimatorValue(mMinValue); + mMaxValue = item.getProximityMaxValue(); + mScalingUpAnimator = ObjectAnimator.ofFloat(item, "scalingAnimatorValue", mMinValue, + mMaxValue); + mScalingUpAnimator.setDuration(DEFAULT_ANIMATION_DURATION); + mScalingDownAnimator = ObjectAnimator.ofFloat(item, "scalingAnimatorValue", + mMaxValue, mMinValue); + mScalingDownAnimator.setDuration(DEFAULT_ANIMATION_DURATION); + } + } + + public void onCenterProximity(boolean isCentralItem, boolean animate) { + if (!(itemView instanceof ExtendedOnCenterProximityListener)) { + return; + } + ExtendedOnCenterProximityListener item = (ExtendedOnCenterProximityListener) itemView; + if (isCentralItem) { + if (animate) { + mScalingDownAnimator.cancel(); + if (!mScalingUpAnimator.isRunning()) { + mScalingUpAnimator.setFloatValues(item.getCurrentProximityValue(), + mMaxValue); + mScalingUpAnimator.start(); + } + } else { + mScalingUpAnimator.cancel(); + item.setScalingAnimatorValue(item.getProximityMaxValue()); + } + } else { + mScalingUpAnimator.cancel(); + if (animate) { + if (!mScalingDownAnimator.isRunning()) { + mScalingDownAnimator.setFloatValues(item.getCurrentProximityValue(), + mMinValue); + mScalingDownAnimator.start(); + } + } else { + mScalingDownAnimator.cancel(); + item.setScalingAnimatorValue(item.getProximityMinValue()); + } + } + super.onCenterProximity(isCentralItem, animate); + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java b/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java new file mode 100644 index 00000000..0e0adcbb --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear.settings; + +import android.content.Context; +import android.content.res.Resources; +import android.support.wearable.view.WearableListView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.packageinstaller.R; +import com.android.packageinstaller.permission.model.AppPermissionGroup; + +public final class PermissionsSettingsAdapter extends SettingsAdapter<AppPermissionGroup> { + private Resources mRes; + + public PermissionsSettingsAdapter(Context context) { + super(context, R.layout.permissions_settings_item); + mRes = context.getResources(); + } + + @Override + public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new PermissionsViewHolder(new PermissionsSettingsItem(parent.getContext())); + } + + @Override + public void onBindViewHolder(WearableListView.ViewHolder holder, int position) { + super.onBindViewHolder(holder, position); + PermissionsViewHolder viewHolder = (PermissionsViewHolder) holder; + AppPermissionGroup group = get(position).data; + + if (group.isPolicyFixed()) { + viewHolder.imageView.setEnabled(false); + viewHolder.textView.setEnabled(false); + viewHolder.state.setEnabled(false); + viewHolder.state.setText( + mRes.getString(R.string.permission_summary_enforced_by_policy)); + } else { + viewHolder.imageView.setEnabled(true); + viewHolder.textView.setEnabled(true); + viewHolder.state.setEnabled(true); + + if (group.areRuntimePermissionsGranted()) { + viewHolder.state.setText(R.string.generic_enabled); + } else { + viewHolder.state.setText(R.string.generic_disabled); + } + } + } + + private static final class PermissionsViewHolder extends SettingsAdapter.SettingsItemHolder { + public final TextView state; + + public PermissionsViewHolder(View view) { + super(view); + state = (TextView) view.findViewById(R.id.state); + } + } + + private class PermissionsSettingsItem extends SettingsItem { + private final TextView mState; + private final float mCenteredAlpha = 1.0f; + private final float mNonCenteredAlpha = 0.5f; + + public PermissionsSettingsItem (Context context) { + super(context); + mState = (TextView) findViewById(R.id.state); + } + + @Override + public void onCenterPosition(boolean animate) { + mImage.setAlpha(mImage.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha); + mText.setAlpha(mText.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha); + mState.setAlpha(mState.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha); + } + + @Override + public void onNonCenterPosition(boolean animate) { + mImage.setAlpha(mNonCenteredAlpha); + mText.setAlpha(mNonCenteredAlpha); + mState.setAlpha(mNonCenteredAlpha); + } + } +} + diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java b/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java new file mode 100644 index 00000000..baf1a2b4 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear.settings; + +import android.content.Context; +import android.support.wearable.view.CircledImageView; +import android.support.wearable.view.WearableListView; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.android.packageinstaller.R; + +import java.util.ArrayList; + +/** + * Common adapter for settings views. Maintains a list of 'Settings', consisting of a name, + * icon and optional activity-specific data. + */ +public class SettingsAdapter<T> extends WearableListView.Adapter { + private static final String TAG = "SettingsAdapter"; + private final Context mContext; + + public static final class Setting<S> { + public static final int ID_INVALID = -1; + + public final int id; + public int nameResourceId; + public CharSequence name; + public int iconResource; + public boolean inProgress; + public S data; + + public Setting(CharSequence name, int iconResource, S data) { + this(name, iconResource, data, ID_INVALID); + } + + public Setting(CharSequence name, int iconResource, S data, int id) { + this.name = name; + this.iconResource = iconResource; + this.data = data; + this.inProgress = false; + this.id = id; + } + + public Setting(int nameResource, int iconResource, S data, int id) { + this.nameResourceId = nameResource; + this.iconResource = iconResource; + this.data = data; + this.inProgress = false; + this.id = id; + } + + public Setting(int nameResource, int iconResource, int id) { + this.nameResourceId = nameResource; + this.iconResource = iconResource; + this.data = null; + this.inProgress = false; + this.id = id; + } + + public Setting(CharSequence name, int iconResource, int id) { + this(name, iconResource, null, id); + } + + } + + private final int mItemLayoutId; + private final float mDefaultCircleRadiusPercent; + private final float mSelectedCircleRadiusPercent; + + protected ArrayList<Setting<T>> mSettings = new ArrayList<Setting<T>>(); + + public SettingsAdapter(Context context, int itemLayoutId) { + mContext = context; + mItemLayoutId = itemLayoutId; + mDefaultCircleRadiusPercent = context.getResources().getFraction( + R.dimen.default_settings_circle_radius_percent, 1, 1); + mSelectedCircleRadiusPercent = context.getResources().getFraction( + R.dimen.selected_settings_circle_radius_percent, 1, 1); + } + + @Override + public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new SettingsItemHolder(new SettingsItem(parent.getContext())); + } + + @Override + public void onBindViewHolder(WearableListView.ViewHolder holder, int position) { + Setting<T> setting = mSettings.get(position); + if (setting.iconResource == -1) { + ((SettingsItemHolder) holder).imageView.setVisibility(View.GONE); + } else { + ((SettingsItemHolder) holder).imageView.setVisibility(View.VISIBLE); + ((SettingsItemHolder) holder).imageView.setImageResource( + mSettings.get(position).iconResource); + } + Log.d(TAG, "onBindViewHolder " + setting.name + " " + setting.id + " " + setting + .nameResourceId); + if (setting.name == null && setting.nameResourceId != 0) { + setting.name = mContext.getString(setting.nameResourceId); + } + ((SettingsItemHolder) holder).textView.setText(setting.name); + } + + @Override + public int getItemCount() { + return mSettings.size(); + } + + public void addSetting(CharSequence name, int iconResource) { + addSetting(name, iconResource, null); + } + + public void addSetting(CharSequence name, int iconResource, T intent) { + addSetting(mSettings.size(), name, iconResource, intent); + } + + public void addSetting(int index, CharSequence name, int iconResource, T intent) { + addSetting(Setting.ID_INVALID, index, name, iconResource, intent); + } + + public void addSetting(int id, int index, CharSequence name, int iconResource, T intent) { + mSettings.add(index, new Setting<T>(name, iconResource, intent, id)); + notifyItemInserted(index); + } + + public void addSettingDontNotify(Setting<T> setting) { + mSettings.add(setting); + } + + public void addSetting(Setting<T> setting) { + mSettings.add(setting); + notifyItemInserted(mSettings.size() - 1); + } + + public void addSetting(int index, Setting<T> setting) { + mSettings.add(index, setting); + notifyItemInserted(index); + } + + /** + * Returns the index of the setting in the adapter based on the ID supplied when it was + * originally added. + * @param id the setting's id + * @return index in the adapter of the setting. -1 if not found. + */ + public int findSetting(int id) { + for (int i = mSettings.size() - 1; i >= 0; --i) { + Setting setting = mSettings.get(i); + + if (setting.id == id) { + return i; + } + } + + return -1; + } + + /** + * Removes a setting at the given index. + * @param index the index of the setting to be removed + */ + public void removeSetting(int index) { + mSettings.remove(index); + notifyDataSetChanged(); + } + + public void clearSettings() { + mSettings.clear(); + notifyDataSetChanged(); + } + + /** + * Updates a setting in place. + * @param index the index of the setting + * @param name the updated setting name + * @param iconResource the update setting icon + * @param intent the updated intent for the setting + */ + public void updateSetting(int index, CharSequence name, int iconResource, T intent) { + Setting<T> setting = mSettings.get(index); + setting.iconResource = iconResource; + setting.name = name; + setting.data = intent; + notifyItemChanged(index); + } + + public Setting<T> get(int position) { + return mSettings.get(position); + } + + protected static class SettingsItemHolder extends ExtendedViewHolder { + public final CircledImageView imageView; + public final TextView textView; + + public SettingsItemHolder(View itemView) { + super(itemView); + + imageView = ((CircledImageView) itemView.findViewById(R.id.image)); + textView = ((TextView) itemView.findViewById(R.id.text)); + } + } + + protected class SettingsItem extends FrameLayout implements ExtendedOnCenterProximityListener { + + protected final CircledImageView mImage; + protected final TextView mText; + + public SettingsItem(Context context) { + super(context); + View view = View.inflate(context, mItemLayoutId, null); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT); + params.gravity = Gravity.CENTER_VERTICAL; + addView(view, params); + mImage = (CircledImageView) findViewById(R.id.image); + mText = (TextView) findViewById(R.id.text); + } + + @Override + public float getProximityMinValue() { + return mDefaultCircleRadiusPercent; + } + + @Override + public float getProximityMaxValue() { + return mSelectedCircleRadiusPercent; + } + + @Override + public float getCurrentProximityValue() { + return mImage.getCircleRadiusPressedPercent(); + } + + @Override + public void setScalingAnimatorValue(float value) { + mImage.setCircleRadiusPercent(value); + mImage.setCircleRadiusPressedPercent(value); + } + + @Override + public void onCenterPosition(boolean animate) { + mImage.setAlpha(1f); + mText.setAlpha(1f); + } + + @Override + public void onNonCenterPosition(boolean animate) { + mImage.setAlpha(0.5f); + mText.setAlpha(0.5f); + } + + TextView getTextView() { + return mText; + } + } +} diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java new file mode 100644 index 00000000..cf1c0fd0 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015 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.packageinstaller.permission.ui.wear.settings; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; + +/** + * Utility to determine screen shape + */ +public class ViewUtils { + + public static boolean getIsCircular(Context context) { + return context.getResources().getConfiguration().isScreenRound(); + } + + /** + * Set the given {@code view} and all descendants to the given {@code enabled} state. + * + * @param view the parent view of a subtree of components whose enabled state must be set + * @param enabled the new enabled state of the subtree of components + */ + public static void setEnabled(View view, boolean enabled) { + view.setEnabled(enabled); + + if (view instanceof ViewGroup) { + final ViewGroup viewGroup = (ViewGroup) view; + for (int i = 0; i < viewGroup.getChildCount(); i++) { + setEnabled(viewGroup.getChildAt(i), enabled); + } + } + } +} diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java index 2940a729..2cc5d8aa 100644 --- a/src/com/android/packageinstaller/permission/utils/Utils.java +++ b/src/com/android/packageinstaller/permission/utils/Utils.java @@ -33,6 +33,8 @@ import android.util.TypedValue; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; +import java.util.List; + public class Utils { private static final String LOG_TAG = "Utils"; @@ -127,14 +129,13 @@ public class Utils { return launcherPkgs; } + public static List<ApplicationInfo> getAllInstalledApplications(Context context) { + return context.getPackageManager().getInstalledApplications(0); + } + public static boolean isSystem(PermissionApp app, ArraySet<String> launcherPkgs) { ApplicationInfo info = app.getAppInfo(); return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0 && !launcherPkgs.contains(info.packageName); } - - public static boolean isTelevision(Context context) { - int uiMode = context.getResources().getConfiguration().uiMode; - return (uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION; - } } diff --git a/src/com/android/packageinstaller/wear/WearPackageIconProvider.java b/src/com/android/packageinstaller/wear/WearPackageIconProvider.java new file mode 100644 index 00000000..02b9d298 --- /dev/null +++ b/src/com/android/packageinstaller/wear/WearPackageIconProvider.java @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2015 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.packageinstaller.wear; + +import android.annotation.TargetApi; +import android.app.ActivityManager; +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.net.Uri; +import android.os.Binder; +import android.os.Build; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.List; + +import static android.content.pm.PackageManager.PERMISSION_GRANTED; + +public class WearPackageIconProvider extends ContentProvider { + private static final String TAG = "WearPackageIconProvider"; + public static final String AUTHORITY = "com.google.android.packageinstaller.wear.provider"; + + private static final String REQUIRED_PERMISSION = + "com.google.android.permission.INSTALL_WEARABLE_PACKAGES"; + + /** MIME types. */ + public static final String ICON_TYPE = "vnd.android.cursor.item/cw_package_icon"; + + @Override + public boolean onCreate() { + return true; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + throw new UnsupportedOperationException("Query is not supported."); + } + + @Override + public String getType(Uri uri) { + if (uri == null) { + throw new IllegalArgumentException("URI passed in is null."); + } + + if (AUTHORITY.equals(uri.getEncodedAuthority())) { + return ICON_TYPE; + } + return null; + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + throw new UnsupportedOperationException("Insert is not supported."); + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + if (uri == null) { + throw new IllegalArgumentException("URI passed in is null."); + } + + enforcePermissions(uri); + + if (ICON_TYPE.equals(getType(uri))) { + final File file = WearPackageUtil.getIconFile( + this.getContext().getApplicationContext(), getPackageNameFromUri(uri)); + if (file != null) { + file.delete(); + } + } + + return 0; + } + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + throw new UnsupportedOperationException("Update is not supported."); + } + + @Override + public ParcelFileDescriptor openFile( + Uri uri, @SuppressWarnings("unused") String mode) throws FileNotFoundException { + if (uri == null) { + throw new IllegalArgumentException("URI passed in is null."); + } + + enforcePermissions(uri); + + if (ICON_TYPE.equals(getType(uri))) { + final File file = WearPackageUtil.getIconFile( + this.getContext().getApplicationContext(), getPackageNameFromUri(uri)); + if (file != null) { + return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); + } + } + return null; + } + + public static Uri getUriForPackage(final String packageName) { + return Uri.parse("content://" + AUTHORITY + "/icons/" + packageName + ".icon"); + } + + private String getPackageNameFromUri(Uri uri) { + if (uri == null) { + return null; + } + List<String> pathSegments = uri.getPathSegments(); + String packageName = pathSegments.get(pathSegments.size() - 1); + + if (packageName.endsWith(".icon")) { + packageName = packageName.substring(0, packageName.lastIndexOf(".")); + } + return packageName; + } + + /** + * Make sure the calling app is either a system app or the same app or has the right permission. + * @throws SecurityException if the caller has insufficient permissions. + */ + @TargetApi(Build.VERSION_CODES.BASE_1_1) + private void enforcePermissions(Uri uri) { + // Redo some of the permission check in {@link ContentProvider}. Just add an extra check to + // allow System process to access this provider. + Context context = getContext(); + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); + final int myUid = android.os.Process.myUid(); + + if (uid == myUid || isSystemApp(context, pid)) { + return; + } + + if (context.checkPermission(REQUIRED_PERMISSION, pid, uid) == PERMISSION_GRANTED) { + return; + } + + // last chance, check against any uri grants + if (context.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_READ_URI_PERMISSION) + == PERMISSION_GRANTED) { + return; + } + + throw new SecurityException("Permission Denial: reading " + + getClass().getName() + " uri " + uri + " from pid=" + pid + + ", uid=" + uid); + } + + /** + * From the pid of the calling process, figure out whether this is a system app or not. We do + * this by checking the application information corresponding to the pid and then checking if + * FLAG_SYSTEM is set. + */ + @TargetApi(Build.VERSION_CODES.CUPCAKE) + private boolean isSystemApp(Context context, int pid) { + // Get the Activity Manager Object + ActivityManager aManager = + (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + // Get the list of running Applications + List<ActivityManager.RunningAppProcessInfo> rapInfoList = + aManager.getRunningAppProcesses(); + for (ActivityManager.RunningAppProcessInfo rapInfo : rapInfoList) { + if (rapInfo.pid == pid) { + try { + PackageInfo pkgInfo = context.getPackageManager().getPackageInfo( + rapInfo.pkgList[0], 0); + if (pkgInfo != null && pkgInfo.applicationInfo != null && + (pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + Log.d(TAG, pid + " is a system app."); + return true; + } + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Could not find package information.", e); + return false; + } + } + } + return false; + } +} diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java new file mode 100644 index 00000000..ba83ea28 --- /dev/null +++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java @@ -0,0 +1,625 @@ +/* + * Copyright (C) 2015 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.packageinstaller.wear; + +import android.annotation.Nullable; +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.FeatureInfo; +import android.content.pm.IPackageDeleteObserver; +import android.content.pm.IPackageInstallObserver; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageParser; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.ParcelFileDescriptor; +import android.os.PowerManager; +import android.os.Process; +import android.text.TextUtils; +import android.util.Log; + +import com.android.packageinstaller.DeviceUtils; +import com.android.packageinstaller.PackageUtil; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Service that will install/uninstall packages. It will check for permissions and features as well. + * + * ----------- + * + * Debugging information: + * + * Install Action example: + * adb shell am startservice -a com.android.packageinstaller.wear.INSTALL_PACKAGE \ + * -t vnd.android.cursor.item/wearable_apk \ + * -d content://com.google.android.clockwork.home.provider/host/com.google.android.wearable.app/wearable/com.google.android.gms/apk \ + * --es android.intent.extra.INSTALLER_PACKAGE_NAME com.google.android.gms \ + * --ez com.google.android.clockwork.EXTRA_CHECK_PERMS false \ + * --eu com.google.android.clockwork.EXTRA_PERM_URI content://com.google.android.clockwork.home.provider/host/com.google.android.wearable.app/permissions \ + * com.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService + * + * Retry GMS: + * adb shell am startservice -a com.android.packageinstaller.wear.RETRY_GMS \ + * com.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService + */ +public class WearPackageInstallerService extends Service { + private static final String TAG = "WearPkgInstallerService"; + + private static final String KEY_PERM_URI = + "com.google.android.clockwork.EXTRA_PERM_URI"; + private static final String KEY_CHECK_PERMS = + "com.google.android.clockwork.EXTRA_CHECK_PERMS"; + private static final String KEY_SKIP_IF_SAME_VERSION = + "com.google.android.clockwork.EXTRA_SKIP_IF_SAME_VERSION"; + private static final String KEY_COMPRESSION_ALG = + "com.google.android.clockwork.EXTRA_KEY_COMPRESSION_ALG"; + private static final String KEY_COMPANION_SDK_VERSION = + "com.google.android.clockwork.EXTRA_KEY_COMPANION_SDK_VERSION"; + private static final String KEY_COMPANION_DEVICE_VERSION = + "com.google.android.clockwork.EXTRA_KEY_COMPANION_DEVICE_VERSION"; + + private static final String KEY_PACKAGE_NAME = + "com.google.android.clockwork.EXTRA_PACKAGE_NAME"; + private static final String KEY_APP_LABEL = "com.google.android.clockwork.EXTRA_APP_LABEL"; + private static final String KEY_APP_ICON_URI = + "com.google.android.clockwork.EXTRA_APP_ICON_URI"; + private static final String KEY_PERMS_LIST = "com.google.android.clockwork.EXTRA_PERMS_LIST"; + private static final String KEY_HAS_LAUNCHER = + "com.google.android.clockwork.EXTRA_HAS_LAUNCHER"; + + private static final String HOME_APP_PACKAGE_NAME = "com.google.android.wearable.app"; + private static final String SHOW_PERMS_SERVICE_CLASS = + "com.google.android.clockwork.packagemanager.ShowPermsService"; + + private static final String ASSET_URI_ARG = "assetUri"; + private static final String PACKAGE_NAME_ARG = "packageName"; + private static final String PERM_URI_ARG = "permUri"; + private static final String START_ID_ARG = "startId"; + private static final String CHECK_PERMS_ARG = "checkPerms"; + private static final String SKIP_IF_SAME_VERSION_ARG = "skipIfSameVersion"; + private static final String COMPRESSION_ALG = "compressionAlg"; + private static final String COMPANION_SDK_VERSION = "companionSdkVersion"; + private static final String COMPANION_DEVICE_VERSION = "companionDeviceVersion"; + + /** + * Normally sent by the Play store (See http://go/playstore-gms_updated), we instead + * broadcast, ourselves. http://b/17387718 + */ + private static final String GMS_UPDATED_BROADCAST = "com.google.android.gms.GMS_UPDATED"; + public static final String GMS_PACKAGE_NAME = "com.google.android.gms"; + + private final int START_INSTALL = 1; + private final int START_UNINSTALL = 2; + + private final class ServiceHandler extends Handler { + public ServiceHandler(Looper looper) { + super(looper); + } + + public void handleMessage(Message msg) { + switch (msg.what) { + case START_INSTALL: + installPackage(msg.getData().getString(PACKAGE_NAME_ARG), + (Uri) msg.getData().getParcelable(ASSET_URI_ARG), + (Uri) msg.getData().getParcelable(PERM_URI_ARG), + msg.getData().getInt(START_ID_ARG), + msg.getData().getBoolean(CHECK_PERMS_ARG), + msg.getData().getBoolean(SKIP_IF_SAME_VERSION_ARG), + msg.getData().getString(COMPRESSION_ALG), + msg.getData().getInt(COMPANION_SDK_VERSION), + msg.getData().getInt(COMPANION_DEVICE_VERSION)); + break; + case START_UNINSTALL: + uninstallPackage(msg.getData().getString(PACKAGE_NAME_ARG), + msg.getData().getInt(START_ID_ARG)); + break; + } + } + } + private ServiceHandler mServiceHandler; + + private static volatile PowerManager.WakeLock lockStatic = null; + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + HandlerThread thread = new HandlerThread("PackageInstallerThread", + Process.THREAD_PRIORITY_BACKGROUND); + thread.start(); + + mServiceHandler = new ServiceHandler(thread.getLooper()); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (!DeviceUtils.isWear(this)) { + Log.w(TAG, "Not running on wearable"); + return START_NOT_STICKY; + } + PowerManager.WakeLock lock = getLock(this.getApplicationContext()); + if (!lock.isHeld()) { + lock.acquire(); + } + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Got install/uninstall request " + intent); + } + if (intent != null) { + if (Intent.ACTION_INSTALL_PACKAGE.equals(intent.getAction())) { + final Message msg = mServiceHandler.obtainMessage(START_INSTALL); + final Bundle startInstallArgs = new Bundle(); + startInstallArgs.putParcelable(ASSET_URI_ARG, intent.getData()); + startInstallArgs.putString(PACKAGE_NAME_ARG, intent.getStringExtra( + Intent.EXTRA_INSTALLER_PACKAGE_NAME)); + startInstallArgs.putInt(START_ID_ARG, startId); + Uri permUri = intent.getParcelableExtra(KEY_PERM_URI); + startInstallArgs.putParcelable(PERM_URI_ARG, permUri); + startInstallArgs.putBoolean(CHECK_PERMS_ARG, + intent.getBooleanExtra(KEY_CHECK_PERMS, true)); + startInstallArgs.putBoolean(SKIP_IF_SAME_VERSION_ARG, + intent.getBooleanExtra(KEY_SKIP_IF_SAME_VERSION, false)); + startInstallArgs.putString(COMPRESSION_ALG, + intent.getStringExtra(KEY_COMPRESSION_ALG)); + startInstallArgs.putInt(COMPANION_SDK_VERSION, + intent.getIntExtra(KEY_COMPANION_SDK_VERSION, 0)); + startInstallArgs.putInt(COMPANION_DEVICE_VERSION, + intent.getIntExtra(KEY_COMPANION_DEVICE_VERSION, 0)); + msg.setData(startInstallArgs); + mServiceHandler.sendMessage(msg); + } else if (Intent.ACTION_UNINSTALL_PACKAGE.equals(intent.getAction())) { + Message msg = mServiceHandler.obtainMessage(START_UNINSTALL); + Bundle startUninstallArgs = new Bundle(); + startUninstallArgs.putString(PACKAGE_NAME_ARG, intent.getStringExtra( + Intent.EXTRA_INSTALLER_PACKAGE_NAME)); + startUninstallArgs.putInt(START_ID_ARG, startId); + msg.setData(startUninstallArgs); + mServiceHandler.sendMessage(msg); + } + } + return START_NOT_STICKY; + } + + private void installPackage(String packageName, Uri packageUri, Uri permUri, int startId, + boolean checkPerms, boolean skipIfSameVersion, @Nullable String compressionAlg, + int companionSdkVersion, int companionDeviceVersion) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Installing package: " + packageName + ", packageUri: " + packageUri + + ",permUri: " + permUri + ", startId: " + startId + ", checkPerms: " + + checkPerms + ", skipIfSameVersion: " + skipIfSameVersion + + ", compressionAlg: " + compressionAlg + ", companionSdkVersion: " + + companionSdkVersion + ", companionDeviceVersion: " + companionDeviceVersion); + } + final PackageManager pm = getPackageManager(); + File tempFile = null; + int installFlags = 0; + PowerManager.WakeLock lock = getLock(this.getApplicationContext()); + boolean messageSent = false; + try { + PackageInfo existingPkgInfo = null; + try { + existingPkgInfo = pm.getPackageInfo(packageName, + PackageManager.GET_UNINSTALLED_PACKAGES); + if(existingPkgInfo != null) { + installFlags |= PackageManager.INSTALL_REPLACE_EXISTING; + } + } catch (PackageManager.NameNotFoundException e) { + // Ignore this exception. We could not find the package, will treat as a new + // installation. + } + if((installFlags & PackageManager.INSTALL_REPLACE_EXISTING )!= 0) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Replacing package:" + packageName); + } + } + ParcelFileDescriptor parcelFd = getContentResolver() + .openFileDescriptor(packageUri, "r"); + tempFile = WearPackageUtil.getFileFromFd(WearPackageInstallerService.this, + parcelFd, packageName, compressionAlg); + if (tempFile == null) { + Log.e(TAG, "Could not create a temp file from FD for " + packageName); + return; + } + PackageParser.Package pkg = PackageUtil.getPackageInfo(tempFile); + if (pkg == null) { + Log.e(TAG, "Could not parse apk information for " + packageName); + return; + } + + if (!pkg.packageName.equals(packageName)) { + Log.e(TAG, "Wearable Package Name has to match what is provided for " + + packageName); + return; + } + + List<String> wearablePerms = pkg.requestedPermissions; + + // Log if the installed pkg has a higher version number. + if (existingPkgInfo != null) { + if (existingPkgInfo.versionCode == pkg.mVersionCode) { + if (skipIfSameVersion) { + Log.w(TAG, "Version number (" + pkg.mVersionCode + + ") of new app is equal to existing app for " + packageName + + "; not installing due to versionCheck"); + return; + } else { + Log.w(TAG, "Version number of new app (" + pkg.mVersionCode + + ") is equal to existing app for " + packageName); + } + } else if (existingPkgInfo.versionCode > pkg.mVersionCode) { + Log.w(TAG, "Version number of new app (" + pkg.mVersionCode + + ") is lower than existing app ( " + existingPkgInfo.versionCode + + ") for " + packageName); + } + + // Following the Android Phone model, we should only check for permissions for any + // newly defined perms. + if (existingPkgInfo.requestedPermissions != null) { + for (int i = 0; i < existingPkgInfo.requestedPermissions.length; ++i) { + // If the permission is granted, then we will not ask to request it again. + if ((existingPkgInfo.requestedPermissionsFlags[i] & + PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { + wearablePerms.remove(existingPkgInfo.requestedPermissions[i]); + } + } + } + } + + // Check permissions on both the new wearable package and also on the already installed + // wearable package. + // If the app is targeting API level 23, we will also start a service in ClockworkHome + // which will ultimately prompt the user to accept/reject permissions. + if (checkPerms && !checkPermissions(pkg, companionSdkVersion, companionDeviceVersion, + permUri, wearablePerms, tempFile)) { + Log.w(TAG, "Wearable does not have enough permissions."); + return; + } + + // Check that the wearable has all the features. + boolean hasAllFeatures = true; + if (pkg.reqFeatures != null) { + for (FeatureInfo feature : pkg.reqFeatures) { + if (feature.name != null && !pm.hasSystemFeature(feature.name) && + (feature.flags & FeatureInfo.FLAG_REQUIRED) != 0) { + Log.e(TAG, "Wearable does not have required feature: " + feature + + " for " + packageName); + hasAllFeatures = false; + } + } + } + + if (!hasAllFeatures) { + return; + } + + // Finally install the package. + pm.installPackage(Uri.fromFile(tempFile), + new PackageInstallObserver(this, lock, startId), installFlags, packageName); + messageSent = true; + Log.i(TAG, "Sent installation request for " + packageName); + } catch (FileNotFoundException e) { + Log.e(TAG, "Could not find the file with URI " + packageUri, e); + } finally { + if (!messageSent) { + // Some error happened. If the message has been sent, we can wait for the observer + // which will finish the service. + if (tempFile != null) { + tempFile.delete(); + } + finishService(lock, startId); + } + } + } + + private void uninstallPackage(String packageName, int startId) { + final PackageManager pm = getPackageManager(); + PowerManager.WakeLock lock = getLock(this.getApplicationContext()); + pm.deletePackage(packageName, new PackageDeleteObserver(lock, startId), + PackageManager.DELETE_ALL_USERS); + startPermsServiceForUninstall(packageName); + Log.i(TAG, "Sent delete request for " + packageName); + } + + private boolean checkPermissions(PackageParser.Package pkg, int companionSdkVersion, + int companionDeviceVersion, Uri permUri, List<String> wearablePermissions, + File apkFile) { + // If the Wear App is targeted for M-release, since the permission model has been changed, + // permissions may not be granted on the phone yet. We need a different flow for user to + // accept these permissions. + // + // Assumption: Code is running on E-release, so Wear is always running M. + // - Case 1: If the Wear App(WA) is targeting 23, always choose the M model (4 cases) + // - Case 2: Else if the Phone App(PA) is targeting 23 and Phone App(P) is running on M, + // show a Dialog so that the user can accept all perms (1 case) + // - Also show a warning to the developer if the watch is targeting M + // - Case 3: If Case 2 is false, then the behavior on the phone is pre-M. Stick to pre-M + // behavior on watch (as long as we don't hit case 1). + // - 3a: WA(22) PA(22) P(22) -> watch app is not targeting 23 + // - 3b: WA(22) PA(22) P(23) -> watch app is not targeting 23 + // - 3c: WA(22) PA(23) P(22) -> watch app is not targeting 23 + // - Case 4: We did not get Companion App's/Device's version, always show dialog to user to + // accept permissions. (This happens if the AndroidWear Companion App is really old). + boolean isWearTargetingM = + pkg.applicationInfo.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1; + if (isWearTargetingM) { // Case 1 + // Install the app if Wear App is ready for the new perms model. + return true; + } + + List<String> unavailableWearablePerms = getWearPermsNotGrantedOnPhone(pkg.packageName, + permUri, wearablePermissions); + if (unavailableWearablePerms == null) { + return false; + } + + if (unavailableWearablePerms.size() == 0) { + // All permissions requested by the watch are already granted on the phone, no need + // to do anything. + return true; + } + + // Cases 2 and 4. + boolean isCompanionTargetingM = companionSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1; + boolean isCompanionRunningM = companionDeviceVersion > Build.VERSION_CODES.LOLLIPOP_MR1; + if (isCompanionTargetingM) { // Case 2 Warning + Log.w(TAG, "MNC: Wear app's targetSdkVersion should be at least 23, if " + + "phone app is targeting at least 23, will continue."); + } + if ((isCompanionTargetingM && isCompanionRunningM) || // Case 2 + companionSdkVersion == 0 || companionDeviceVersion == 0) { // Case 4 + startPermsServiceForInstall(pkg, apkFile, unavailableWearablePerms); + } + + // Case 3a-3c. + return false; + } + + /** + * Given a {@string packageName} corresponding to a phone app, query the provider for all the + * perms that are granted. + * @return null if there is an error retrieving this info + * else, a list of all the wearable perms that are not in the list of granted perms of + * the phone. + */ + private List<String> getWearPermsNotGrantedOnPhone(String packageName, Uri permUri, + List<String> wearablePermissions) { + if (permUri == null) { + Log.e(TAG, "Permission URI is null"); + return null; + } + Cursor permCursor = getContentResolver().query(permUri, null, null, null, null); + if (permCursor == null) { + Log.e(TAG, "Could not get the cursor for the permissions"); + return null; + } + + Set<String> grantedPerms = new HashSet<>(); + Set<String> ungrantedPerms = new HashSet<>(); + while(permCursor.moveToNext()) { + // Make sure that the MatrixCursor returned by the ContentProvider has 2 columns and + // verify their types. + if (permCursor.getColumnCount() == 2 + && Cursor.FIELD_TYPE_STRING == permCursor.getType(0) + && Cursor.FIELD_TYPE_INTEGER == permCursor.getType(1)) { + String perm = permCursor.getString(0); + Integer granted = permCursor.getInt(1); + if (granted == 1) { + grantedPerms.add(perm); + } else { + ungrantedPerms.add(perm); + } + } + } + permCursor.close(); + + ArrayList<String> unavailableWearablePerms = new ArrayList<>(); + for (String wearablePerm : wearablePermissions) { + if (!grantedPerms.contains(wearablePerm)) { + unavailableWearablePerms.add(wearablePerm); + if (!ungrantedPerms.contains(wearablePerm)) { + // This is an error condition. This means that the wearable has permissions that + // are not even declared in its host app. This is a developer error. + Log.e(TAG, "Wearable " + packageName + " has a permission \"" + wearablePerm + + "\" that is not defined in the host application's manifest."); + } else { + Log.w(TAG, "Wearable " + packageName + " has a permission \"" + wearablePerm + + "\" that is not granted in the host application."); + } + } + } + return unavailableWearablePerms; + } + + private void finishService(PowerManager.WakeLock lock, int startId) { + if (lock.isHeld()) { + lock.release(); + } + stopSelf(startId); + } + + private synchronized PowerManager.WakeLock getLock(Context context) { + if (lockStatic == null) { + PowerManager mgr = + (PowerManager) context.getSystemService(Context.POWER_SERVICE); + lockStatic = mgr.newWakeLock( + PowerManager.PARTIAL_WAKE_LOCK, context.getClass().getSimpleName()); + lockStatic.setReferenceCounted(true); + } + return lockStatic; + } + + private void startPermsServiceForInstall(final PackageParser.Package pkg, final File apkFile, + List<String> unavailableWearablePerms) { + final String packageName = pkg.packageName; + + Intent showPermsIntent = new Intent() + .setComponent(new ComponentName(HOME_APP_PACKAGE_NAME, SHOW_PERMS_SERVICE_CLASS)) + .setAction(Intent.ACTION_INSTALL_PACKAGE); + final PackageManager pm = getPackageManager(); + pkg.applicationInfo.publicSourceDir = apkFile.getPath(); + final CharSequence label = pkg.applicationInfo.loadLabel(pm); + final Uri iconUri = getIconFileUri(packageName, pkg.applicationInfo.loadIcon(pm)); + if (TextUtils.isEmpty(label) || iconUri == null) { + Log.e(TAG, "MNC: Could not launch service since either label " + label + + ", or icon Uri " + iconUri + " is invalid."); + } else { + showPermsIntent.putExtra(KEY_APP_LABEL, label); + showPermsIntent.putExtra(KEY_APP_ICON_URI, iconUri); + showPermsIntent.putExtra(KEY_PACKAGE_NAME, packageName); + showPermsIntent.putExtra(KEY_PERMS_LIST, + unavailableWearablePerms.toArray(new String[0])); + showPermsIntent.putExtra(KEY_HAS_LAUNCHER, WearPackageUtil.hasLauncherActivity(pkg)); + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "MNC: Launching Intent " + showPermsIntent + " for " + packageName + + " with name " + label); + } + startService(showPermsIntent); + } + } + + private void startPermsServiceForUninstall(final String packageName) { + Intent showPermsIntent = new Intent() + .setComponent(new ComponentName(HOME_APP_PACKAGE_NAME, SHOW_PERMS_SERVICE_CLASS)) + .setAction(Intent.ACTION_UNINSTALL_PACKAGE); + showPermsIntent.putExtra(KEY_PACKAGE_NAME, packageName); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Launching Intent " + showPermsIntent + " for " + packageName); + } + startService(showPermsIntent); + } + + private Uri getIconFileUri(final String packageName, final Drawable d) { + if (d == null || !(d instanceof BitmapDrawable)) { + Log.e(TAG, "Drawable is not a BitmapDrawable for " + packageName); + return null; + } + File iconFile = WearPackageUtil.getIconFile(this, packageName); + + if (iconFile == null) { + Log.e(TAG, "Could not get icon file for " + packageName); + return null; + } + + FileOutputStream fos = null; + try { + // Convert bitmap to byte array + Bitmap bitmap = ((BitmapDrawable) d).getBitmap(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos); + + // Write the bytes into the file + fos = new FileOutputStream(iconFile); + fos.write(bos.toByteArray()); + fos.flush(); + + return WearPackageIconProvider.getUriForPackage(packageName); + } catch (IOException e) { + Log.e(TAG, "Could not convert drawable to icon file for package " + packageName, e); + return null; + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + // ignore + } + } + } + } + + private class PackageInstallObserver extends IPackageInstallObserver.Stub { + private Context mContext; + private PowerManager.WakeLock mWakeLock; + private int mStartId; + private PackageInstallObserver(Context context, PowerManager.WakeLock wakeLock, + int startId) { + mContext = context; + mWakeLock = wakeLock; + mStartId = startId; + } + + public void packageInstalled(String packageName, int returnCode) { + if (returnCode >= 0) { + Log.i(TAG, "Package " + packageName + " was installed."); + } else { + Log.e(TAG, "Package install failed " + packageName + ", returnCode " + returnCode); + } + + // Delete tempFile from the file system. + File tempFile = WearPackageUtil.getTemporaryFile(mContext, packageName); + if (tempFile != null) { + tempFile.delete(); + } + + // Broadcast the "UPDATED" gmscore intent, normally sent by play store. + // TODO: Remove this broadcast if/when we get the play store to do this for us. + if (GMS_PACKAGE_NAME.equals(packageName)) { + Intent gmsInstalledIntent = new Intent(GMS_UPDATED_BROADCAST); + gmsInstalledIntent.setPackage(GMS_PACKAGE_NAME); + mContext.sendBroadcast(gmsInstalledIntent); + } + + finishService(mWakeLock, mStartId); + } + } + + private class PackageDeleteObserver extends IPackageDeleteObserver.Stub { + private PowerManager.WakeLock mWakeLock; + private int mStartId; + + private PackageDeleteObserver(PowerManager.WakeLock wakeLock, int startId) { + mWakeLock = wakeLock; + mStartId = startId; + } + + public void packageDeleted(String packageName, int returnCode) { + if (returnCode >= 0) { + Log.i(TAG, "Package " + packageName + " was uninstalled."); + } else { + Log.e(TAG, "Package uninstall failed " + packageName + ", returnCode " + + returnCode); + } + finishService(mWakeLock, mStartId); + } + } +} diff --git a/src/com/android/packageinstaller/wear/WearPackageUtil.java b/src/com/android/packageinstaller/wear/WearPackageUtil.java new file mode 100644 index 00000000..dc420757 --- /dev/null +++ b/src/com/android/packageinstaller/wear/WearPackageUtil.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2015 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.packageinstaller.wear; + +import android.annotation.Nullable; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.PackageParser; +import android.os.ParcelFileDescriptor; +import android.system.ErrnoException; +import android.system.Os; +import android.text.TextUtils; +import android.util.Log; + +import org.tukaani.xz.LZMAInputStream; +import org.tukaani.xz.XZInputStream; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; + +public class WearPackageUtil { + private static final String TAG = "WearablePkgInstaller"; + + private static final String COMPRESSION_LZMA = "lzma"; + private static final String COMPRESSION_XZ = "xz"; + + public static File getTemporaryFile(Context context, String packageName) { + try { + File newFileDir = new File(context.getFilesDir(), "tmp"); + newFileDir.mkdirs(); + Os.chmod(newFileDir.getAbsolutePath(), 0771); + File newFile = new File(newFileDir, packageName + ".apk"); + return newFile; + } catch (ErrnoException e) { + Log.e(TAG, "Failed to open.", e); + return null; + } + } + + public static File getIconFile(final Context context, final String packageName) { + try { + File newFileDir = new File(context.getFilesDir(), "images/icons"); + newFileDir.mkdirs(); + Os.chmod(newFileDir.getAbsolutePath(), 0771); + return new File(newFileDir, packageName + ".icon"); + } catch (ErrnoException e) { + Log.e(TAG, "Failed to open.", e); + return null; + } + } + + /** + * In order to make sure that the Wearable Asset Manager has a reasonable apk that can be used + * by the PackageManager, we will parse it before sending it to the PackageManager. + * Unfortunately, PackageParser needs a file to parse. So, we have to temporarily convert the fd + * to a File. + * + * @param context + * @param fd FileDescriptor to convert to File + * @param packageName Name of package, will define the name of the file + * @param compressionAlg Can be null. For ALT mode the APK will be compressed. We will + * decompress it here + */ + public static File getFileFromFd(Context context, ParcelFileDescriptor fd, + String packageName, @Nullable String compressionAlg) { + File newFile = getTemporaryFile(context, packageName); + if (fd == null || fd.getFileDescriptor() == null) { + return null; + } + InputStream fr = new ParcelFileDescriptor.AutoCloseInputStream(fd); + try { + if (TextUtils.equals(compressionAlg, COMPRESSION_XZ)) { + fr = new XZInputStream(fr); + } else if (TextUtils.equals(compressionAlg, COMPRESSION_LZMA)) { + fr = new LZMAInputStream(fr); + } + } catch (IOException e) { + Log.e(TAG, "Compression was set to " + compressionAlg + ", but could not decode ", e); + return null; + } + + int nRead; + byte[] data = new byte[1024]; + try { + final FileOutputStream fo = new FileOutputStream(newFile); + while ((nRead = fr.read(data, 0, data.length)) != -1) { + fo.write(data, 0, nRead); + } + fo.flush(); + fo.close(); + Os.chmod(newFile.getAbsolutePath(), 0644); + return newFile; + } catch (IOException e) { + Log.e(TAG, "Reading from Asset FD or writing to temp file failed ", e); + return null; + } catch (ErrnoException e) { + Log.e(TAG, "Could not set permissions on file ", e); + return null; + } finally { + try { + fr.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to close the file from FD ", e); + } + } + } + + public static boolean hasLauncherActivity(PackageParser.Package pkg) { + if (pkg == null || pkg.activities == null) { + return false; + } + + final int activityCount = pkg.activities.size(); + for (int i = 0; i < activityCount; ++i) { + if (pkg.activities.get(i).intents != null) { + ArrayList<PackageParser.ActivityIntentInfo> intents = + pkg.activities.get(i).intents; + final int intentsCount = intents.size(); + for (int j = 0; j < intentsCount; ++j) { + final PackageParser.ActivityIntentInfo intentInfo = intents.get(j); + if (intentInfo.hasAction(Intent.ACTION_MAIN)) { + if (intentInfo.hasCategory(Intent.CATEGORY_INFO) || + intentInfo .hasCategory(Intent.CATEGORY_LAUNCHER)) { + return true; + } + } + } + } + } + return false; + } +} |