summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk29
-rw-r--r--AndroidManifest.xml75
-rw-r--r--PREUPLOAD.cfg7
-rw-r--r--res/drawable/ic_android_92.xml2
-rw-r--r--res/drawable/ic_done_92.xml2
-rw-r--r--res/drawable/ic_error.xml26
-rw-r--r--res/drawable/ic_remove.xml26
-rw-r--r--res/drawable/ic_report_problem_92.xml2
-rw-r--r--res/drawable/ic_settings_multiuser.xml25
-rw-r--r--res/layout-television/app_details.xml (renamed from res/layout/app_details.xml)0
-rw-r--r--res/layout-television/uninstall_progress.xml (renamed from res/layout/uninstall_progress.xml)1
-rw-r--r--res/layout/grant_permissions.xml108
-rw-r--r--res/layout/header.xml2
-rw-r--r--res/layout/install_confirm.xml91
-rw-r--r--res/layout/install_confirm_perm.xml127
-rw-r--r--res/layout/install_confirm_perm_update.xml153
-rw-r--r--res/layout/install_failed.xml96
-rw-r--r--res/layout/install_installing.xml (renamed from res/layout/op_progress.xml)112
-rw-r--r--res/layout/install_staging.xml113
-rw-r--r--res/layout/install_start.xml160
-rw-r--r--res/layout/install_success.xml101
-rw-r--r--res/layout/preference_category_material.xml2
-rw-r--r--res/layout/preference_permissions.xml2
-rw-r--r--res/layout/preference_permissions_switch.xml2
-rw-r--r--res/layout/review_permissions.xml55
-rw-r--r--res/values-af/strings.xml47
-rw-r--r--res/values-am/strings.xml47
-rw-r--r--res/values-ar/strings.xml49
-rw-r--r--res/values-az-television/strings.xml (renamed from res/values-az-rAZ-television/strings.xml)0
-rw-r--r--res/values-az-watch/strings.xml (renamed from res/values-az-rAZ-watch/strings.xml)0
-rw-r--r--res/values-az/strings.xml (renamed from res/values-az-rAZ/strings.xml)47
-rw-r--r--res/values-b+sr+Latn/strings.xml47
-rw-r--r--res/values-be-television/strings.xml (renamed from res/values-be-rBY-television/strings.xml)4
-rw-r--r--res/values-be-watch/strings.xml (renamed from res/values-be-rBY-watch/strings.xml)0
-rw-r--r--res/values-be/strings.xml (renamed from res/values-be-rBY/strings.xml)49
-rw-r--r--res/values-bg/strings.xml47
-rw-r--r--res/values-bn-television/strings.xml (renamed from res/values-bn-rBD-television/strings.xml)0
-rw-r--r--res/values-bn-watch/strings.xml (renamed from res/values-bn-rBD-watch/strings.xml)0
-rw-r--r--res/values-bn/strings.xml (renamed from res/values-bn-rBD/strings.xml)47
-rw-r--r--res/values-bs-television/strings.xml (renamed from res/values-bs-rBA-television/strings.xml)2
-rw-r--r--res/values-bs-watch/strings.xml (renamed from res/values-bs-rBA-watch/strings.xml)2
-rw-r--r--res/values-bs/strings.xml (renamed from res/values-bs-rBA/strings.xml)49
-rw-r--r--res/values-ca/strings.xml47
-rw-r--r--res/values-cs/strings.xml47
-rw-r--r--res/values-da/strings.xml47
-rw-r--r--res/values-de/strings.xml47
-rw-r--r--res/values-el/strings.xml49
-rw-r--r--res/values-en-rAU/strings.xml47
-rw-r--r--res/values-en-rGB/strings.xml47
-rw-r--r--res/values-en-rIN/strings.xml47
-rw-r--r--res/values-es-rUS/strings.xml51
-rw-r--r--res/values-es/strings.xml49
-rw-r--r--res/values-et-television/strings.xml (renamed from res/values-et-rEE-television/strings.xml)8
-rw-r--r--res/values-et-watch/strings.xml (renamed from res/values-et-rEE-watch/strings.xml)0
-rw-r--r--res/values-et/strings.xml (renamed from res/values-et-rEE/strings.xml)51
-rw-r--r--res/values-eu-television/strings.xml (renamed from res/values-eu-rES-television/strings.xml)0
-rw-r--r--res/values-eu-watch/strings.xml (renamed from res/values-eu-rES-watch/strings.xml)0
-rw-r--r--res/values-eu/strings.xml (renamed from res/values-eu-rES/strings.xml)51
-rw-r--r--res/values-fa/strings.xml49
-rw-r--r--res/values-fi/strings.xml47
-rw-r--r--res/values-fr-rCA/strings.xml47
-rw-r--r--res/values-fr/strings.xml47
-rw-r--r--res/values-gl-television/strings.xml (renamed from res/values-gl-rES-television/strings.xml)0
-rw-r--r--res/values-gl-watch/strings.xml (renamed from res/values-gl-rES-watch/strings.xml)0
-rw-r--r--res/values-gl/strings.xml (renamed from res/values-gl-rES/strings.xml)47
-rw-r--r--res/values-gu-television/strings.xml (renamed from res/values-gu-rIN-television/strings.xml)0
-rw-r--r--res/values-gu-watch/strings.xml (renamed from res/values-gu-rIN-watch/strings.xml)0
-rw-r--r--res/values-gu/strings.xml (renamed from res/values-gu-rIN/strings.xml)47
-rw-r--r--res/values-hi/strings.xml47
-rw-r--r--res/values-hr/strings.xml49
-rw-r--r--res/values-hu-television/strings.xml4
-rw-r--r--res/values-hu/strings.xml49
-rw-r--r--res/values-hy-television/strings.xml (renamed from res/values-hy-rAM-television/strings.xml)0
-rw-r--r--res/values-hy-watch/strings.xml (renamed from res/values-hy-rAM-watch/strings.xml)0
-rw-r--r--res/values-hy/strings.xml (renamed from res/values-hy-rAM/strings.xml)57
-rw-r--r--res/values-in/strings.xml57
-rw-r--r--res/values-is-television/strings.xml (renamed from res/values-is-rIS-television/strings.xml)0
-rw-r--r--res/values-is-watch/strings.xml (renamed from res/values-is-rIS-watch/strings.xml)0
-rw-r--r--res/values-is/strings.xml (renamed from res/values-is-rIS/strings.xml)49
-rw-r--r--res/values-it/strings.xml47
-rw-r--r--res/values-iw/strings.xml57
-rw-r--r--res/values-ja/strings.xml47
-rw-r--r--res/values-ka-television/strings.xml (renamed from res/values-ka-rGE-television/strings.xml)0
-rw-r--r--res/values-ka-watch/strings.xml (renamed from res/values-ka-rGE-watch/strings.xml)0
-rw-r--r--res/values-ka/strings.xml (renamed from res/values-ka-rGE/strings.xml)51
-rw-r--r--res/values-kk-television/strings.xml (renamed from res/values-kk-rKZ-television/strings.xml)0
-rw-r--r--res/values-kk-watch/strings.xml (renamed from res/values-kk-rKZ-watch/strings.xml)0
-rw-r--r--res/values-kk/strings.xml (renamed from res/values-kk-rKZ/strings.xml)47
-rw-r--r--res/values-km-television/strings.xml (renamed from res/values-km-rKH-television/strings.xml)0
-rw-r--r--res/values-km-watch/strings.xml (renamed from res/values-km-rKH-watch/strings.xml)0
-rw-r--r--res/values-km/strings.xml (renamed from res/values-km-rKH/strings.xml)49
-rw-r--r--res/values-kn-television/strings.xml (renamed from res/values-kn-rIN-television/strings.xml)2
-rw-r--r--res/values-kn-watch/strings.xml (renamed from res/values-kn-rIN-watch/strings.xml)0
-rw-r--r--res/values-kn/strings.xml (renamed from res/values-kn-rIN/strings.xml)53
-rw-r--r--res/values-ko/strings.xml47
-rw-r--r--res/values-ky-television/strings.xml (renamed from res/values-ky-rKG-television/strings.xml)0
-rw-r--r--res/values-ky-watch/strings.xml (renamed from res/values-ky-rKG-watch/strings.xml)0
-rw-r--r--res/values-ky/strings.xml (renamed from res/values-ky-rKG/strings.xml)53
-rw-r--r--res/values-lo-television/strings.xml (renamed from res/values-lo-rLA-television/strings.xml)0
-rw-r--r--res/values-lo-watch/strings.xml (renamed from res/values-lo-rLA-watch/strings.xml)0
-rw-r--r--res/values-lo/strings.xml (renamed from res/values-lo-rLA/strings.xml)49
-rw-r--r--res/values-lt/strings.xml47
-rw-r--r--res/values-lv/strings.xml47
-rw-r--r--res/values-mk-television/strings.xml (renamed from res/values-mk-rMK-television/strings.xml)0
-rw-r--r--res/values-mk-watch/strings.xml (renamed from res/values-mk-rMK-watch/strings.xml)0
-rw-r--r--res/values-mk/strings.xml (renamed from res/values-mk-rMK/strings.xml)47
-rw-r--r--res/values-ml-television/strings.xml (renamed from res/values-ml-rIN-television/strings.xml)0
-rw-r--r--res/values-ml-watch/strings.xml (renamed from res/values-ml-rIN-watch/strings.xml)0
-rw-r--r--res/values-ml/strings.xml (renamed from res/values-ml-rIN/strings.xml)49
-rw-r--r--res/values-mn-television/strings.xml (renamed from res/values-mn-rMN-television/strings.xml)2
-rw-r--r--res/values-mn-watch/strings.xml (renamed from res/values-mn-rMN-watch/strings.xml)2
-rw-r--r--res/values-mn/strings.xml (renamed from res/values-mn-rMN/strings.xml)55
-rw-r--r--res/values-mr-television/strings.xml (renamed from res/values-mr-rIN-television/strings.xml)0
-rw-r--r--res/values-mr-watch/strings.xml (renamed from res/values-mr-rIN-watch/strings.xml)0
-rw-r--r--res/values-mr/strings.xml (renamed from res/values-mr-rIN/strings.xml)47
-rw-r--r--res/values-ms-television/strings.xml (renamed from res/values-ms-rMY-television/strings.xml)0
-rw-r--r--res/values-ms-watch/strings.xml (renamed from res/values-ms-rMY-watch/strings.xml)0
-rw-r--r--res/values-ms/strings.xml (renamed from res/values-ms-rMY/strings.xml)47
-rw-r--r--res/values-my-television/strings.xml (renamed from res/values-my-rMM-television/strings.xml)0
-rw-r--r--res/values-my-watch/strings.xml (renamed from res/values-my-rMM-watch/strings.xml)0
-rw-r--r--res/values-my/strings.xml (renamed from res/values-my-rMM/strings.xml)51
-rw-r--r--res/values-nb/strings.xml49
-rw-r--r--res/values-ne-television/strings.xml (renamed from res/values-ne-rNP-television/strings.xml)0
-rw-r--r--res/values-ne-watch/strings.xml (renamed from res/values-ne-rNP-watch/strings.xml)0
-rw-r--r--res/values-ne/strings.xml (renamed from res/values-ne-rNP/strings.xml)47
-rw-r--r--res/values-nl/strings.xml51
-rw-r--r--res/values-pa-television/strings.xml (renamed from res/values-pa-rIN-television/strings.xml)0
-rw-r--r--res/values-pa-watch/strings.xml (renamed from res/values-pa-rIN-watch/strings.xml)0
-rw-r--r--res/values-pa/strings.xml (renamed from res/values-pa-rIN/strings.xml)49
-rw-r--r--res/values-pl/strings.xml49
-rw-r--r--res/values-pt-rBR/strings.xml47
-rw-r--r--res/values-pt-rPT/strings.xml47
-rw-r--r--res/values-pt/strings.xml47
-rw-r--r--res/values-ro/strings.xml49
-rw-r--r--res/values-ru/strings.xml47
-rw-r--r--res/values-si-television/strings.xml (renamed from res/values-si-rLK-television/strings.xml)0
-rw-r--r--res/values-si-watch/strings.xml (renamed from res/values-si-rLK-watch/strings.xml)0
-rw-r--r--res/values-si/strings.xml (renamed from res/values-si-rLK/strings.xml)47
-rw-r--r--res/values-sk/strings.xml47
-rw-r--r--res/values-sl/strings.xml47
-rw-r--r--res/values-sq-television/strings.xml (renamed from res/values-sq-rAL-television/strings.xml)0
-rw-r--r--res/values-sq-watch/strings.xml (renamed from res/values-sq-rAL-watch/strings.xml)0
-rw-r--r--res/values-sq/strings.xml (renamed from res/values-sq-rAL/strings.xml)47
-rw-r--r--res/values-sr/strings.xml47
-rw-r--r--res/values-sv/strings.xml47
-rw-r--r--res/values-sw-television/strings.xml2
-rw-r--r--res/values-sw-watch/strings.xml2
-rw-r--r--res/values-sw/strings.xml53
-rw-r--r--res/values-ta-television/strings.xml (renamed from res/values-ta-rIN-television/strings.xml)0
-rw-r--r--res/values-ta-watch/strings.xml (renamed from res/values-ta-rIN-watch/strings.xml)0
-rw-r--r--res/values-ta/strings.xml (renamed from res/values-ta-rIN/strings.xml)47
-rw-r--r--res/values-te-television/strings.xml (renamed from res/values-te-rIN-television/strings.xml)0
-rw-r--r--res/values-te-watch/strings.xml (renamed from res/values-te-rIN-watch/strings.xml)0
-rw-r--r--res/values-te/strings.xml (renamed from res/values-te-rIN/strings.xml)47
-rw-r--r--res/values-th/strings.xml49
-rw-r--r--res/values-tl/strings.xml47
-rw-r--r--res/values-tr/strings.xml47
-rw-r--r--res/values-uk/strings.xml47
-rw-r--r--res/values-ur-television/strings.xml (renamed from res/values-ur-rPK-television/strings.xml)0
-rw-r--r--res/values-ur-watch/strings.xml (renamed from res/values-ur-rPK-watch/strings.xml)0
-rw-r--r--res/values-ur/strings.xml (renamed from res/values-ur-rPK/strings.xml)49
-rw-r--r--res/values-uz-television/strings.xml (renamed from res/values-uz-rUZ-television/strings.xml)0
-rw-r--r--res/values-uz-watch/strings.xml (renamed from res/values-uz-rUZ-watch/strings.xml)0
-rw-r--r--res/values-uz/strings.xml (renamed from res/values-uz-rUZ/strings.xml)51
-rw-r--r--res/values-vi-television/strings.xml4
-rw-r--r--res/values-vi/strings.xml51
-rw-r--r--res/values-watch/styles.xml2
-rw-r--r--res/values-watch/themes.xml2
-rw-r--r--res/values-zh-rCN/strings.xml47
-rw-r--r--res/values-zh-rHK-television/strings.xml2
-rw-r--r--res/values-zh-rHK-watch/strings.xml2
-rw-r--r--res/values-zh-rHK/strings.xml49
-rw-r--r--res/values-zh-rTW-television/strings.xml2
-rw-r--r--res/values-zh-rTW/strings.xml87
-rw-r--r--res/values-zu/strings.xml47
-rw-r--r--res/values/attrs.xml (renamed from res/values-watch/attrs.xml)0
-rw-r--r--res/values/colors.xml20
-rw-r--r--res/values/dimens.xml2
-rw-r--r--res/values/strings.xml108
-rwxr-xr-xres/values/styles.xml16
-rw-r--r--res/values/themes.xml21
-rw-r--r--src/com/android/packageinstaller/DeviceUtils.java4
-rw-r--r--src/com/android/packageinstaller/EventResultPersister.java353
-rwxr-xr-xsrc/com/android/packageinstaller/InstallAppProgress.java424
-rw-r--r--src/com/android/packageinstaller/InstallEventReceiver.java76
-rw-r--r--src/com/android/packageinstaller/InstallFailed.java161
-rwxr-xr-xsrc/com/android/packageinstaller/InstallInstalling.java409
-rw-r--r--src/com/android/packageinstaller/InstallStaging.java221
-rw-r--r--src/com/android/packageinstaller/InstallStart.java247
-rw-r--r--src/com/android/packageinstaller/InstallSuccess.java107
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java793
-rw-r--r--src/com/android/packageinstaller/PackageUtil.java66
-rw-r--r--src/com/android/packageinstaller/TemporaryFileManager.java95
-rwxr-xr-xsrc/com/android/packageinstaller/UninstallAppProgress.java395
-rw-r--r--src/com/android/packageinstaller/UninstallEventReceiver.java85
-rw-r--r--src/com/android/packageinstaller/UninstallFinish.java263
-rw-r--r--src/com/android/packageinstaller/UninstallUninstalling.java179
-rwxr-xr-xsrc/com/android/packageinstaller/UninstallerActivity.java313
-rw-r--r--src/com/android/packageinstaller/handheld/ErrorDialogFragment.java57
-rw-r--r--src/com/android/packageinstaller/handheld/UninstallAlertDialogFragment.java111
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java28
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissions.java5
-rw-r--r--src/com/android/packageinstaller/permission/model/Permission.java22
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java27
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionGroup.java32
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionGroups.java51
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java296
-rw-r--r--src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java41
-rw-r--r--src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java106
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java20
-rw-r--r--src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java31
-rw-r--r--src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java33
-rw-r--r--src/com/android/packageinstaller/permission/ui/auto/GrantPermissionsAutoViewHandler.java46
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java190
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java107
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java50
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java46
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java190
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java107
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/MultiTargetSwitchPreference.java59
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java20
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java18
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java27
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java3
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java2
-rw-r--r--src/com/android/packageinstaller/permission/utils/EventLogger.java144
-rw-r--r--src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java42
-rw-r--r--src/com/android/packageinstaller/permission/utils/Utils.java19
-rw-r--r--src/com/android/packageinstaller/television/ErrorFragment.java66
-rw-r--r--src/com/android/packageinstaller/television/UninstallAlertFragment.java121
-rwxr-xr-xsrc/com/android/packageinstaller/television/UninstallAppProgress.java377
-rw-r--r--src/com/android/packageinstaller/television/UninstallAppProgressFragment.java108
-rw-r--r--src/com/android/packageinstaller/wear/PackageInstallerImpl.java5
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageInstallerService.java244
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageUtil.java46
-rw-r--r--tests/Android.mk41
-rw-r--r--tests/src/com/android/packageinstaller/permission/utils/EventLoggerTest.java128
-rw-r--r--tests/src/com/android/packageinstaller/shadows/ShadowMetricsLogger.java86
-rw-r--r--tests/src/com/android/packageinstaller/shadows/ShadowPackageInstaller.java38
-rw-r--r--tests/src/com/android/packageinstaller/shadows/ShadowSystemProperties.java53
245 files changed, 9194 insertions, 3757 deletions
diff --git a/Android.mk b/Android.mk
index d4499c28..976462b8 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,32 +1,26 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
+LOCAL_USE_AAPT2 := true
+
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := \
$(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES += \
+LOCAL_STATIC_ANDROID_LIBRARIES += \
android-support-v4 \
+ android-support-annotations \
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
android-support-v14-preference \
android-support-v17-preference-leanback \
android-support-v17-leanback \
- xz-java
-
-LOCAL_RESOURCE_DIR := \
- frameworks/support/v17/leanback/res \
- frameworks/support/v7/preference/res \
- frameworks/support/v14/preference/res \
- frameworks/support/v17/preference-leanback/res \
- frameworks/support/v7/appcompat/res \
- frameworks/support/v7/recyclerview/res \
- $(LOCAL_PATH)/res
+ SettingsLib
-LOCAL_AAPT_FLAGS := --auto-add-overlay \
- --extra-packages android.support.v17.leanback:android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ xz-java
LOCAL_PACKAGE_NAME := PackageInstaller
LOCAL_CERTIFICATE := platform
@@ -38,6 +32,11 @@ LOCAL_PROGUARD_FLAG_FILES := proguard.flags
# Comment for now unitl all private API dependencies are removed
# LOCAL_SDK_VERSION := system_current
-include frameworks/base/packages/SettingsLib/common.mk
-
include $(BUILD_PACKAGE)
+
+ifeq (PackageInstaller,$(LOCAL_PACKAGE_NAME))
+# Use the following include to make our test apk.
+ifeq (,$(ONE_SHOT_MAKEFILE))
+include $(call all-makefiles-under,$(LOCAL_PATH))
+endif
+endif
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 654e5d1c..f9391753 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -14,23 +14,35 @@
<uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" />
<uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+ <uses-permission android:name="android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS" />
<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="android.permission.MANAGE_APP_OPS_RESTRICTIONS" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
<uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" />
+ <uses-permission android:name="android.permission.ACCESS_INSTANT_APPS" />
+
<application android:label="@string/app_name"
android:allowBackup="false"
- android:theme="@style/Theme.DialogWhenLarge"
+ android:theme="@style/DialogWhenLarge"
android:supportsRtl="true"
android:defaultToDeviceProtectedStorage="true"
android:directBootAware="true">
- <activity android:name=".PackageInstallerActivity"
- android:configChanges="orientation|keyboardHidden|screenSize"
+ <receiver android:name=".TemporaryFileManager"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ </intent-filter>
+ </receiver>
+
+ <activity android:name=".InstallStart"
+ android:exported="true"
android:excludeFromRecents="true">
<intent-filter android:priority="1">
<action android:name="android.intent.action.VIEW" />
@@ -53,14 +65,36 @@
</intent-filter>
</activity>
- <activity android:name=".InstallAppProgress"
- android:configChanges="orientation|keyboardHidden|screenSize"
+ <activity android:name=".InstallStaging"
+ android:exported="false" />
+
+ <activity android:name=".PackageInstallerActivity"
+ android:exported="false" />
+
+ <activity android:name=".InstallInstalling"
+ android:theme="@style/DialogWhenLargeNoAnimation"
+ android:exported="false" />
+
+ <receiver android:name=".InstallEventReceiver"
+ android:permission="android.permission.INSTALL_PACKAGES"
+ android:exported="true">
+ <intent-filter android:priority="1">
+ <action android:name="com.android.packageinstaller.ACTION_INSTALL_COMMIT" />
+ </intent-filter>
+ </receiver>
+
+ <activity android:name=".InstallSuccess"
+ android:theme="@style/DialogWhenLargeNoAnimation"
+ android:exported="false" />
+
+ <activity android:name=".InstallFailed"
+ android:theme="@style/DialogWhenLargeNoAnimation"
android:exported="false" />
<activity android:name=".UninstallerActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
- android:theme="@style/Theme.AlertDialogActivity">
+ android:theme="@style/AlertDialogActivity">
<intent-filter android:priority="1">
<action android:name="android.intent.action.DELETE" />
<action android:name="android.intent.action.UNINSTALL_PACKAGE" />
@@ -69,14 +103,31 @@
</intent-filter>
</activity>
- <activity android:name=".UninstallAppProgress"
+ <receiver android:name=".UninstallEventReceiver"
+ android:permission="android.permission.INSTALL_PACKAGES"
+ android:exported="true">
+ <intent-filter android:priority="1">
+ <action android:name="com.android.packageinstaller.ACTION_UNINSTALL_COMMIT" />
+ </intent-filter>
+ </receiver>
+
+ <activity android:name=".UninstallUninstalling"
+ android:excludeFromRecents="true"
+ android:theme="@style/AlertDialogActivity"
+ android:exported="false" />
+
+ <receiver android:name=".UninstallFinish"
+ android:exported="false" />
+
+ <activity android:name=".television.UninstallAppProgress"
android:configChanges="mnc|mnc|touchscreen|navigation|screenLayout|screenSize|smallestScreenSize|orientation|locale|keyboard|keyboardHidden|fontScale|uiMode|layoutDirection|density"
android:exported="false" />
<activity android:name=".permission.ui.GrantPermissionsActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
- android:theme="@style/GrantPermissions">
+ android:theme="@style/GrantPermissions"
+ android:visibleToInstantApps="true">
<intent-filter android:priority="1">
<action android:name="android.content.pm.action.REQUEST_PERMISSIONS" />
<category android:name="android.intent.category.DEFAULT" />
@@ -111,14 +162,6 @@
android:excludeFromRecents="true"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar" />
- <receiver android:name=".permission.model.PermissionStatusReceiver"
- android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS">
- <intent-filter android:priority="1">
- <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"
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
new file mode 100644
index 00000000..1a4ce243
--- /dev/null
+++ b/PREUPLOAD.cfg
@@ -0,0 +1,7 @@
+[Builtin Hooks]
+xmllint = true
+commit_msg_changeid_field = true
+
+[Hook Scripts]
+checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT}
+
diff --git a/res/drawable/ic_android_92.xml b/res/drawable/ic_android_92.xml
index 7d527377..1d3791c1 100644
--- a/res/drawable/ic_android_92.xml
+++ b/res/drawable/ic_android_92.xml
@@ -20,6 +20,6 @@
android:viewportWidth="92.0"
android:viewportHeight="92.0">
<path
- android:fillColor="#C8CCCE"
+ android:fillColor="#000000"
android:pathData="m23,69c0,2.11 1.72,3.83 3.83,3.83h3.83v13.42c0,3.18 2.57,5.75 5.75,5.75 3.18,0 5.75,-2.57 5.75,-5.75L42.17,72.83h7.67v13.42c0,3.18 2.57,5.75 5.75,5.75 3.18,0 5.75,-2.57 5.75,-5.75L61.33,72.83h3.83c2.11,0 3.83,-1.72 3.83,-3.83L69,30.67L23,30.67L23,69zM13.42,30.67c-3.18,0 -5.75,2.57 -5.75,5.75v26.83c0,3.18 2.57,5.75 5.75,5.75 3.18,0 5.75,-2.57 5.75,-5.75L19.17,36.42c0,-3.18 -2.57,-5.75 -5.75,-5.75zM78.58,30.67c-3.18,0 -5.75,2.57 -5.75,5.75v26.83c0,3.18 2.57,5.75 5.75,5.75 3.18,0 5.75,-2.57 5.75,-5.75L84.33,36.42c0,-3.18 -2.57,-5.75 -5.75,-5.75zM59.53,8.28 L64.53,3.28c0.75,-0.75 0.75,-1.95 0,-2.7 -0.75,-0.75 -1.95,-0.75 -2.7,0L56.16,6.23C53.09,4.72 49.66,3.84 46,3.84c-3.68,0 -7.13,0.88 -10.22,2.41L30.09,0.56c-0.75,-0.75 -1.95,-0.75 -2.7,0 -0.75,0.75 -0.75,1.95 0,2.7l5.02,5.02C26.72,12.48 23,19.23 23,26.84h46c0,-7.63 -3.74,-14.37 -9.47,-18.55zM38.33,19.17h-3.83v-3.83h3.83v3.83zM57.5,19.17h-3.83v-3.83h3.83v3.83z"/>
</vector>
diff --git a/res/drawable/ic_done_92.xml b/res/drawable/ic_done_92.xml
index 396338d3..185b274d 100644
--- a/res/drawable/ic_done_92.xml
+++ b/res/drawable/ic_done_92.xml
@@ -20,6 +20,6 @@
android:viewportWidth="92.0"
android:viewportHeight="92.0">
<path
- android:fillColor="#C8CCCE"
+ android:fillColor="#000000"
android:pathData="M34.5,61.99 L18.51,46 13.09,51.42 34.5,72.83l46,-46 -5.42,-5.42z"/>
</vector>
diff --git a/res/drawable/ic_error.xml b/res/drawable/ic_error.xml
new file mode 100644
index 00000000..28612a1c
--- /dev/null
+++ b/res/drawable/ic_error.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"
+ android:fillColor="#000000"/>
+</vector>
diff --git a/res/drawable/ic_remove.xml b/res/drawable/ic_remove.xml
new file mode 100644
index 00000000..dd46eda6
--- /dev/null
+++ b/res/drawable/ic_remove.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13L7,13v-2h10v2z"
+ android:fillColor="#000000"/>
+</vector>
diff --git a/res/drawable/ic_report_problem_92.xml b/res/drawable/ic_report_problem_92.xml
index f262601f..c90a33ed 100644
--- a/res/drawable/ic_report_problem_92.xml
+++ b/res/drawable/ic_report_problem_92.xml
@@ -20,6 +20,6 @@
android:viewportWidth="92.0"
android:viewportHeight="92.0">
<path
- android:fillColor="#C8CCCE"
+ android:fillColor="#000000"
android:pathData="M2,84H90L46,8 2,84zM50,72h-8v-8h8v8zM50,56H42V40h8v16z"/>
</vector>
diff --git a/res/drawable/ic_settings_multiuser.xml b/res/drawable/ic_settings_multiuser.xml
new file mode 100644
index 00000000..b24a5d43
--- /dev/null
+++ b/res/drawable/ic_settings_multiuser.xml
@@ -0,0 +1,25 @@
+<!--
+ Copyright (C) 2016 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorAccent">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M12.0,12.0c2.21,0.0 4.0,-1.79 4.0,-4.0s-1.79,-4.0 -4.0,-4.0 -4.0,1.79 -4.0,4.0 1.79,4.0 4.0,4.0zm0.0,2.0c-2.67,0.0 -8.0,1.34 -8.0,4.0l0.0,2.0l16.0,0.0l0.0,-2.0c0.0,-2.66 -5.33,-4.0 -8.0,-4.0z"/>
+</vector>
diff --git a/res/layout/app_details.xml b/res/layout-television/app_details.xml
index 86923c5c..86923c5c 100644
--- a/res/layout/app_details.xml
+++ b/res/layout-television/app_details.xml
diff --git a/res/layout/uninstall_progress.xml b/res/layout-television/uninstall_progress.xml
index cc12408f..e24f63b5 100644
--- a/res/layout/uninstall_progress.xml
+++ b/res/layout-television/uninstall_progress.xml
@@ -34,6 +34,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:src="@drawable/ic_android_92"
+ android:tint="@color/bigIconColor"
android:contentDescription="@null" />
<ProgressBar android:id="@+id/progress_bar"
diff --git a/res/layout/grant_permissions.xml b/res/layout/grant_permissions.xml
index 8ed9c5d6..ee531d25 100644
--- a/res/layout/grant_permissions.xml
+++ b/res/layout/grant_permissions.xml
@@ -67,53 +67,85 @@
android:visibility="gone">
</CheckBox>
- <com.android.packageinstaller.permission.ui.ButtonBarLayout
- android:id="@+id/button_group"
- android:layout_width="match_parent"
+ <LinearLayout
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="6dip"
android:paddingTop="4dp"
- android:paddingBottom="4dp"
- android:gravity="bottom">
-
- <TextView
- android:id="@+id/current_page_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:paddingEnd="12dp"
- android:singleLine="true"
- style="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="invisible">
- </TextView>
-
- <Space
- android:id="@+id/spacer"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:visibility="invisible" >
- </Space>
+ android:paddingBottom="4dp">
- <Button
- android:id="@+id/permission_deny_button"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/buttonBarButtonStyle"
- android:text="@string/grant_dialog_button_deny" >
- </Button>
-
- <Button
- android:id="@+id/permission_allow_button"
+ android:layout_gravity="bottom"
+ android:gravity="center"
+ android:orientation="horizontal">
+ <!-- dummy to enforce correct height -->
+ <Button
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:visibility="invisible">
+ </Button>
+
+ <TextView
+ android:id="@+id/current_page_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="12dp"
+ android:singleLine="true"
+ style="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:visibility="gone">
+ </TextView>
+
+ <Button
+ android:id="@+id/permission_more_info_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/grant_dialog_button_more_info"
+ android:visibility="gone">
+ </Button>
+ </LinearLayout>
+
+ <com.android.packageinstaller.permission.ui.ButtonBarLayout
+ android:id="@+id/button_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/buttonBarButtonStyle"
- android:text="@string/grant_dialog_button_allow" >
- </Button>
-
- </com.android.packageinstaller.permission.ui.ButtonBarLayout>
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
+ android:orientation="horizontal"
+ android:gravity="bottom">
+
+ <Space
+ android:id="@+id/spacer"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:visibility="invisible" >
+ </Space>
+
+ <Button
+ android:id="@+id/permission_deny_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/grant_dialog_button_deny" >
+ </Button>
+
+ <Button
+ android:id="@+id/permission_allow_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/grant_dialog_button_allow" >
+ </Button>
+
+ </com.android.packageinstaller.permission.ui.ButtonBarLayout>
+
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/header.xml b/res/layout/header.xml
index a4449452..1c42476b 100644
--- a/res/layout/header.xml
+++ b/res/layout/header.xml
@@ -34,7 +34,7 @@
android:layout_alignWithParentIfMissing="true"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorPrimaryInverse"
+ android:textColor="?android:attr/textColorPrimary"
android:textAlignment="viewStart" />
<ImageView
diff --git a/res/layout/install_confirm.xml b/res/layout/install_confirm.xml
new file mode 100644
index 00000000..8f10c15c
--- /dev/null
+++ b/res/layout/install_confirm.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/app_icon"
+ android:layout_marginStart="16dp"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter"
+ android:src="@drawable/ic_file_download" />
+
+ <TextView android:id="@+id/app_name"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/titleTextStyle"
+ android:singleLine="true"
+ android:text="@string/app_name_unknown"
+ android:ellipsize="end" />
+
+ </LinearLayout>
+
+ <ScrollView android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:padding="16dip">
+
+ <TextView android:id="@+id/install_confirm_question"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ </ScrollView>
+
+ <LinearLayout style="?android:attr/buttonBarStyle"
+ android:background="?android:attr/windowBackground"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="8dp"
+ android:measureWithLargestChild="true">
+
+ <!-- spacer to push buttons to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/cancel_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/cancel"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ <Button android:id="@+id/ok_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/next"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/install_confirm_perm.xml b/res/layout/install_confirm_perm.xml
new file mode 100644
index 00000000..048b69de
--- /dev/null
+++ b/res/layout/install_confirm_perm.xml
@@ -0,0 +1,127 @@
+<?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.
+-->
+
+<!--
+ Defines the layout of the splash screen that displays the security
+ settings required for an application and requests the confirmation of the
+ user before it is installed.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <!-- title bar -->
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/app_icon"
+ android:layout_marginStart="16dp"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+
+ <TextView android:id="@+id/app_name"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/titleTextStyle"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+ </LinearLayout>
+
+ <TextView android:id="@+id/install_confirm_question"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/colorPrimary"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/install_confirm_question"
+ android:elevation="@dimen/headerElevation"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ android:paddingBottom="16dp"/>
+
+ <!-- content -->
+ <TabHost android:id="@android:id/tabhost"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TabWidget android:id="@android:id/tabs"
+ android:visibility="gone"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <FrameLayout android:id="@android:id/tabcontent"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="0" />
+
+ <android.support.v4.view.ViewPager android:id="@+id/pager"
+ android:background="?android:attr/windowBackground"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ </LinearLayout>
+
+ </TabHost>
+
+ <!-- Bottom buttons -->
+ <LinearLayout style="?android:attr/buttonBarStyle"
+ android:background="?android:attr/windowBackground"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="8dp"
+ android:measureWithLargestChild="true">
+
+ <!-- spacer to push buttons to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/cancel_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/cancel"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ <Button android:id="@+id/ok_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/next"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/res/layout/install_confirm_perm_update.xml b/res/layout/install_confirm_perm_update.xml
new file mode 100644
index 00000000..7341897d
--- /dev/null
+++ b/res/layout/install_confirm_perm_update.xml
@@ -0,0 +1,153 @@
+<?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.
+-->
+
+<!--
+ Defines the layout of the splash screen that displays the security
+ settings required for an application and requests the confirmation of the
+ user before it is installed.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <!-- title bar -->
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/app_icon"
+ android:layout_marginStart="16dp"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+
+ <TextView android:id="@+id/app_name"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/titleTextStyle"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+ </LinearLayout>
+
+ <TextView android:id="@+id/install_confirm_question"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/colorPrimary"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/install_confirm_question"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp" />
+
+ <!-- content -->
+ <LinearLayout android:id="@+id/install_confirm_panel"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <TabHost android:id="@android:id/tabhost"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <HorizontalScrollView android:id="@+id/tabscontainer"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:fillViewport="true"
+ android:elevation="@dimen/headerElevation"
+ android:scrollbars="none">
+
+ <FrameLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TabWidget android:id="@android:id/tabs"
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center" />
+
+ </FrameLayout>
+
+ </HorizontalScrollView>
+
+ <!-- divider underneath tabs -->
+ <View android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginTop="-1dp"
+ android:background="#1F000000" />
+
+ <FrameLayout android:id="@android:id/tabcontent"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="0" />
+
+ <android.support.v4.view.ViewPager android:id="@+id/pager"
+ android:background="?android:attr/windowBackground"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ </LinearLayout>
+
+ </TabHost>
+
+ <!-- Bottom buttons -->
+ <LinearLayout style="?android:attr/buttonBarStyle"
+ android:background="?android:attr/windowBackground"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="8dp"
+ android:measureWithLargestChild="true">
+
+ <!-- spacer to push buttons to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/cancel_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/cancel"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ <Button android:id="@+id/ok_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/next"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/res/layout/install_failed.xml b/res/layout/install_failed.xml
new file mode 100644
index 00000000..d000ee9a
--- /dev/null
+++ b/res/layout/install_failed.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/app_icon"
+ android:layout_marginStart="16dp"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+
+ <TextView android:id="@+id/app_name"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/titleTextStyle"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/simple_status_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <ImageView android:id="@+id/center_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="12dp"
+ android:src="@drawable/ic_report_problem_92"
+ android:tint="@color/bigIconColor"
+ android:contentDescription="@null" />
+
+ <TextView android:id="@+id/simple_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/buttons_panel"
+ style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:measureWithLargestChild="true"
+ android:padding="8dip">
+
+ <!-- spacer to push button to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/done_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/done"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/res/layout/op_progress.xml b/res/layout/install_installing.xml
index e2125622..a043a014 100644
--- a/res/layout/op_progress.xml
+++ b/res/layout/install_installing.xml
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+
+<!-- Copyright (C) 2016 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.
@@ -19,10 +20,34 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <include layout="@layout/app_details"
- android:id="@+id/app_snippet" />
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical">
+
+ <ImageView
+ android:id="@+id/app_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_marginStart="16dp"
+ android:scaleType="fitCenter" />
+
+ <TextView
+ android:id="@+id/app_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/titleTextStyle" />
+
+ </LinearLayout>
- <LinearLayout android:id="@+id/center_view"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -31,21 +56,23 @@
android:paddingLeft="16dip"
android:paddingRight="16dip">
- <ImageView android:id="@+id/center_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ <ImageView
+ android:layout_width="92dp"
+ android:layout_height="92dp"
android:layout_marginBottom="12dp"
- android:src="@drawable/ic_android_92"
- android:contentDescription="@null" />
+ android:contentDescription="@null"
+ android:tint="@color/bigIconColor"
+ android:src="@drawable/ic_file_download" />
- <ProgressBar android:id="@+id/progress_bar"
+ <ProgressBar
+ android:id="@+id/progress_bar"
+ style="?android:attr/progressBarStyleHorizontal"
android:layout_width="250dp"
android:layout_height="wrap_content"
- android:indeterminate="true"
- style="?android:attr/progressBarStyleHorizontal">
- </ProgressBar>
+ android:indeterminate="false" />
- <TextView android:id="@+id/center_text"
+ <TextView
+ android:id="@+id/center_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@@ -54,63 +81,28 @@
</LinearLayout>
- <!-- This explanation text is shown only after the progress bar below goes away. -->
- <ScrollView android:id="@+id/explanation_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:visibility="gone"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView android:id="@+id/explanation_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- <TextView android:id="@+id/explanation"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- </LinearLayout>
-
- </ScrollView>
-
- <LinearLayout android:id="@+id/buttons_panel"
+ <LinearLayout
+ android:id="@+id/buttons_panel"
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal"
android:measureWithLargestChild="true"
+ android:orientation="horizontal"
android:padding="8dip">
- <!-- spacer to push buttons to the right -->
- <View android:layout_width="0dp"
+ <View
+ android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
- <Button android:id="@+id/done_button"
+ <Button
+ android:id="@+id/cancel_button"
+ style="?android:attr/buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/done"
android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- <Button android:id="@+id/launch_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/launch"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
+ android:text="@string/cancel" />
</LinearLayout>
</LinearLayout>
-
-
diff --git a/res/layout/install_staging.xml b/res/layout/install_staging.xml
new file mode 100644
index 00000000..e3022e7a
--- /dev/null
+++ b/res/layout/install_staging.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<!--
+ Defines the layout of the splash screen that displays the security
+ settings required for an application and requests the confirmation of the
+ user before it is installed.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <!-- title bar -->
+ <LinearLayout android:id="@+id/app_snippet"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:background="?android:attr/colorPrimary"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <ImageView android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_marginLeft="16dp"
+ android:scaleType="fitCenter"
+ android:src="@drawable/ic_file_download"
+ android:tint="?android:attr/colorAccent" />
+
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="32dp"
+ android:layout_marginRight="16dp"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:text="@string/app_name_unknown"
+ android:textAppearance="?android:attr/titleTextStyle" />
+
+ </LinearLayout>
+
+ <!-- content -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <ImageView
+ android:layout_width="92dp"
+ android:layout_height="92dp"
+ android:scaleType="fitCenter"
+ android:layout_marginBottom="12dp"
+ android:contentDescription="@null"
+ android:tint="@color/bigIconColor"
+ android:src="@drawable/ic_file_download" />
+
+ <ProgressBar
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="250dp"
+ android:layout_height="wrap_content"
+ android:indeterminate="true" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:text="@string/message_staging"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ </LinearLayout>
+
+ <!-- Bottom buttons -->
+ <LinearLayout style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="8dp">
+
+ <!-- spacer to push button to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/cancel_button"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxLines="2"
+ android:text="@string/cancel" />
+
+ </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/res/layout/install_start.xml b/res/layout/install_start.xml
deleted file mode 100644
index f8d839ff..00000000
--- a/res/layout/install_start.xml
+++ /dev/null
@@ -1,160 +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.
--->
-
-<!--
- Defines the layout of the splash screen that displays the security
- settings required for an application and requests the confirmation of the
- user before it is installed.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- title bar -->
- <LinearLayout android:id="@+id/app_snippet"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:orientation="horizontal">
-
- <ImageView android:id="@+id/app_icon"
- android:layout_marginLeft="16dp"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_gravity="center_vertical"
- android:scaleType="fitCenter" />
-
- <TextView android:id="@+id/app_name"
- android:layout_gravity="center_vertical"
- android:layout_marginLeft="32dp"
- android:layout_marginRight="16dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/titleTextStyle"
- android:singleLine="true"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <!-- content -->
- <LinearLayout android:id="@+id/install_confirm_panel"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <TextView android:id="@+id/install_confirm_question"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/colorPrimary"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/install_confirm_question"
- android:paddingLeft="16dp"
- android:paddingRight="16dp" />
-
- <View android:id="@+id/spacer"
- android:layout_width="match_parent"
- android:layout_height="16dp"
- android:visibility="gone"
- android:background="?android:attr/colorPrimary" />
-
- <TabHost android:id="@android:id/tabhost"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1">
-
- <LinearLayout android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <HorizontalScrollView android:id="@+id/tabscontainer"
- android:background="?android:attr/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fillViewport="true"
- android:scrollbars="none">
-
- <FrameLayout android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <TabWidget android:id="@android:id/tabs"
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center" />
-
- </FrameLayout>
-
- </HorizontalScrollView>
-
- <!-- divider underneath tabs -->
- <View android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginTop="-1dp"
- android:background="#1F000000" />
-
- <FrameLayout android:id="@android:id/tabcontent"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="0" />
-
- <android.support.v4.view.ViewPager android:id="@+id/pager"
- android:background="?android:attr/windowBackground"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- </LinearLayout>
-
- </TabHost>
-
- <!-- Bottom buttons -->
- <LinearLayout style="?android:attr/buttonBarStyle"
- android:background="?android:attr/windowBackground"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="8dp"
- android:measureWithLargestChild="true">
-
- <!-- spacer to push buttons to the right -->
- <View android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <Button android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/cancel"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle" />
-
- <Button android:id="@+id/ok_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/next"
- android:maxLines="2"
- android:filterTouchesWhenObscured="true"
- style="?android:attr/buttonBarButtonStyle" />
-
- </LinearLayout>
-
- </LinearLayout>
-
-</LinearLayout>
-
-
diff --git a/res/layout/install_success.xml b/res/layout/install_success.xml
new file mode 100644
index 00000000..fee6bede
--- /dev/null
+++ b/res/layout/install_success.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout android:id="@+id/app_snippet"
+ android:background="?android:attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ android:elevation="@dimen/headerElevation"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/app_icon"
+ android:layout_marginStart="16dp"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+
+ <TextView android:id="@+id/app_name"
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/titleTextStyle"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <ImageView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="12dp"
+ android:src="@drawable/ic_done_92"
+ android:tint="@color/bigIconColor"
+ android:contentDescription="@null" />
+
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:text="@string/install_done"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ </LinearLayout>
+
+ <LinearLayout style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:measureWithLargestChild="true"
+ android:padding="8dip">
+
+ <!-- spacer to push buttons to the right -->
+ <View android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button android:id="@+id/done_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/done"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ <Button android:id="@+id/launch_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/launch"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/res/layout/preference_category_material.xml b/res/layout/preference_category_material.xml
index c60fd12b..f62260bc 100644
--- a/res/layout/preference_category_material.xml
+++ b/res/layout/preference_category_material.xml
@@ -22,7 +22,7 @@
android:orientation="vertical">
<TextView
- android:id="@+android:id/title"
+ android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip"
diff --git a/res/layout/preference_permissions.xml b/res/layout/preference_permissions.xml
index 631d56bd..2a03067c 100644
--- a/res/layout/preference_permissions.xml
+++ b/res/layout/preference_permissions.xml
@@ -29,7 +29,7 @@
android:clipToPadding="false">
<LinearLayout
- android:id="@*android:id/icon_frame"
+ android:id="@android:id/icon_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
diff --git a/res/layout/preference_permissions_switch.xml b/res/layout/preference_permissions_switch.xml
index 78d2a4ef..50e2c99f 100644
--- a/res/layout/preference_permissions_switch.xml
+++ b/res/layout/preference_permissions_switch.xml
@@ -29,7 +29,7 @@
android:clipToPadding="false">
<LinearLayout
- android:id="@*android:id/icon_frame"
+ android:id="@android:id/icon_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
diff --git a/res/layout/review_permissions.xml b/res/layout/review_permissions.xml
index 71d31917..d771ce13 100644
--- a/res/layout/review_permissions.xml
+++ b/res/layout/review_permissions.xml
@@ -27,13 +27,13 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dip"
android:layout_marginEnd="16dip"
+ android:layout_marginBottom="16dip"
android:orientation="horizontal">
<ImageView
android:id="@+id/app_icon"
android:layout_width="36dip"
android:layout_height="36dip"
- android:tint="?android:attr/colorAccent"
android:scaleType="fitCenter">
</ImageView>
@@ -56,35 +56,56 @@
android:layout_weight="1">
</FrameLayout>
- <com.android.packageinstaller.permission.ui.ButtonBarLayout
- android:layout_width="match_parent"
+ <LinearLayout
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="2dip"
android:paddingTop="16dip">
+ <Button
+ android:id="@+id/permission_more_info_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/grant_dialog_button_more_info">
+ </Button>
+
<Space
- android:id="@+id/spacer"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"
- android:visibility="invisible" />
+ android:visibility="invisible">
+ </Space>
- <Button
- android:id="@+id/cancel_button"
+ <com.android.packageinstaller.permission.ui.ButtonBarLayout
+ android:id="@+id/button_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/buttonBarButtonStyle"
- android:text="@string/review_button_cancel" />
+ android:layout_gravity="bottom"
+ android:orientation="horizontal"
+ android:gravity="bottom">
- <Button
- android:id="@+id/continue_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_marginStart="8dip"
- android:text="@string/review_button_continue" />
+ <Button
+ android:id="@+id/cancel_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/review_button_cancel">
+ </Button>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_marginStart="8dip"
+ android:text="@string/review_button_continue">
+ </Button>
- </com.android.packageinstaller.permission.ui.ButtonBarLayout>
+ </com.android.packageinstaller.permission.ui.ButtonBarLayout>
+
+ </LinearLayout>
</LinearLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 71b6d5e0..b9dc2fd4 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Kanselleer"</string>
<string name="unknown" msgid="4742479012767208045">"Onbekend"</string>
<string name="installing" msgid="8613631001631998372">"Installeer tans…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installeer tans <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="3682715442154357097">"Program geïnstalleer."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Wil jy hierdie program installeer? Dit sal kan ingaan by:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Wil jy hierdie program installeer? Dit vereis nie enige spesiale toegang nie."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Wil jy \'n opdatering na hierdie ingeboude program installeer? Jou bestaande data sal nie verlore raak nie. Dit vereis nie enige spesiale toegang nie."</string>
<string name="install_failed" msgid="6579998651498970899">"Program nie geïnstalleer nie."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Die installering van die pakket is geblokkeer."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Die pakket bots met \'n bestaande pakket met dieselfde naam."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Hierdie program is nie met jou tablet versoenbaar nie."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Program is nie geïnstalleer nie omdat pakket met \'n bestaande pakket bots."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Program is nie geïnstalleer nie omdat dit nie met jou tablet versoenbaar is nie."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Hierdie program is nie met jou TV versoenbaar nie."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Hierdie program is nie met jou foon versoenbaar nie."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Dit lyk asof die pakket korrup is."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Program is nie geïnstalleer nie omdat dit nie met jou foon versoenbaar is nie."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Program is nie geïnstalleer nie omdat pakket ongeldig blyk te wees."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie op jou tablet geïnstalleer word nie."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie op jou TV geïnstalleer word nie."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie op jou foon geïnstalleer word nie."</string>
<string name="launch" msgid="4826921505917605463">"Open"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Om veiligheidsredes, is jou tablet gestel om installering van programme van onbekende bronne te blokkeer."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Jou TV is vir veiligheid gestel om te keer dat programme van onbekende bronne af geïnstalleer word."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Om veiligheidsredes, is jou foon gestel om installering van programme van onbekende bronne te blokkeer."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Jou administrateur laat nie toe dat programme van onbekende bronne af geïnstalleer word nie."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Jou administrateur laat nie toe dat programme wat by onbekende bronne verkry is, geïnstalleer word nie"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Hierdie gebruiker kan nie onbekende programme installeer nie"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Instellings"</string>
<string name="manage_applications" msgid="4033876279091996596">"Bestuur programme"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Program nie gevind nie"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Die program is nie in die lys van geïnstalleerde programme gevind nie."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nie toegelaat nie"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Die huidige gebruiker mag nie hierdie deïnstallering uitvoer nie."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Fout"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Program kon nie gedeïnstalleer word nie."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Deïnstalleer program"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Deïnstalleer opdatering"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> is deel van die volgende program:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Wil jy hierdie program vir die gebruiker <xliff:g id="USERNAME">%1$s</xliff:g> deïnstalleer?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Vervang hierdie program met die fabriekweergawe? Alle data sal verwyder word."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Vervang hierdie program met die fabriekweergawe? Alle data sal verwyder word. Dit beïnvloed alle gebruikers van hierdie toestel, insluitend dié met werkprofiele."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Voer tans deïnstallerings uit"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mislukte installerings"</string>
<string name="uninstalling" msgid="5556217435895938250">"Deïnstalleer tans…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Deïnstalleer tans <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Deïnstallering klaar."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Het <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> gedeïnstalleer"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Deïnstallasie onsuksesvol."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Kan nie deïnstalleer nie omdat hierdie pakket \'n aktiewe toesteladministrateur is."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Kan nie deïnstalleer nie, omdat hierdie pakket \'n aktiewe toesteladministrateur vir die gebruiker <xliff:g id="USERNAME">%1$s</xliff:g> is."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Kon nie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> deïnstalleer nie."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Kan nie aktiewe toesteladministrasieprogram deïnstalleer nie"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Kan nie aktiewe toesteladministrasieprogram vir <xliff:g id="USERNAME">%1$s</xliff:g> deïnstalleer nie"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Dié program word vereis vir sommige gebruikers of profiele en is vir ander gedeïnstalleer"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Hierdie program is nodig vir jou profiel en kan nie gedeïnstalleer word nie."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Jou toesteladministrateur vereis die program; dit kan nie deïnstalleer word nie."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Bestuur toesteladministrateurs"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Bestuur toesteladministrasieprogramme"</string>
<string name="manage_users" msgid="3125018886835668847">"Bestuur gebruikers"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie deïnstalleer word nie."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Kon nie die pakket ontleed nie."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Hierdie opdatering vereis geen nuwe toestemmings nie."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Wil jy die volgende toestemmings toestaan? Dit sal toegang kry tot:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Weier"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Meer inligting"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Weier in elk geval"</string>
<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="7332275268559121742">"Laat &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; toe om <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> is gedeaktiveer"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"alles is gedeaktiveer"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"geen is gedeaktiveer nie"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Laat toe"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programme"</string>
<string name="app_permissions" msgid="3146758905824597178">"Programtoestemmings"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Installeer- en deïnstalleerhandelinge word nie in Wear gesteun nie."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is opgedateer. Laat <xliff:g id="APP_NAME_1">%1$s</xliff:g> toegang tot die volgende kry?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Kies waarby <xliff:g id="APP_NAME">%1$s</xliff:g> mag ingaan"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> is opgedateer. Kies waarby hierdie program mag ingaan."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Kies waartoe &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; toegang mag kry"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; is opgedateer. Kies waartoe hierdie program toegang mag kry."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Kanselleer"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Gaan voort"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nuwe toestemmings"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Huidige toestemmings"</string>
<string name="message_staging" msgid="6151794817691100003">"Voer tans program uit …"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Onbekend"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Jou tablet word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Jou TV word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Jou foon word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Jou foon en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou foon of verlies van data wat uit sy gebruik kan spruit."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Jou tablet en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou tablet of verlies van data wat uit sy gebruik kan spruit."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Jou TV en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou TV of verlies van data wat uit sy gebruik kan spruit."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Gaan voort"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Instellings"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installeer/deïnstalleer Wear-programme"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 8cb9dac4..43457187 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ይቅር"</string>
<string name="unknown" msgid="4742479012767208045">"ያልታወቀ"</string>
<string name="installing" msgid="8613631001631998372">"በመጫን ላይ…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ን በመጫን ላይ…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"ለዚህ አብሮ ለተሰራ መተግበሪያ ዝማኔ መጫን ይፈልጋሉ? ነባር ውሂብዎ አይጠፉም። ምንም የተለየ መዳረሻ አይፈልግም።"</string>
<string name="install_failed" msgid="6579998651498970899">"ትግበራ አልተጫነም።"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ጥቅሉ እንዳይጫን ታግዷል።"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ጥቅሉ ተመሳሳይ ስም ካለው ነባር ጥቅል ጋር ይጋጫል።"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ይሄ መተግበሪያ ከእርስዎ ጡባዊ ጋር ተኳኋኝ አይደለም።"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"እንደ ጥቅል ያልተጫነ መተግበሪያ ከነባር ጥቅል ጋር ይጋጫል።"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"እንደ መተግበሪያ ያልተጫነ መተግበሪያ ከጡባዊዎ ጋር ተኳሃኝ አይደለም።"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ይሄ መተግበሪያ ከእርስዎ ቴሌቪዥን ጋር ተኳሃኝ አይደለም።"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ይሄ መተግበሪያ ከእርስዎ ስልክ ጋር ተኳኋኝ አይደለም።"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ፓኬጁ ብልሹ ሆኖ ተገኝቷል።"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"እንደ መተግበሪያ ያልተጫነ መተግበሪያ ከስልክዎ ጋር ተኳሃኝ አይደለም።"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"እንደ ጥቅል ያልተጫነ መተግበሪያ ልክ ያልሆነ ይመስላል።"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"የእርስዎ አስተዳዳሪ ካልታወቁ ምንጮች የመጡ መተግበሪያዎች እንዲጫኑ አይፈቅድም"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ያልታወቁ መተግበሪያዎች በዚህ ተጠቃሚ ሊጫኑ አይችሉም"</string>
<string name="ok" msgid="3468756155452870475">"እሺ"</string>
<string name="settings" msgid="6743583734099755409">"ቅንብሮች"</string>
<string name="manage_applications" msgid="4033876279091996596">"መተግበሪያዎች አስተዳድር"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"አይፈቀድም"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"አሁን ያለው ተጠቃሚ ይህን ማራገፍ ሥራ እንዲያከናውን አይፈቀድለትም።"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ስሕተት"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"መተግበሪያ ሊራገፍ አልተቻለም"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"ይህን መተግበሪያ ለተጠቃሚ <xliff:g id="USERNAME">%1$s</xliff:g> ማራገፍ ይፈልጋሉ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ይህ መተግበሪያ በፋብሪክው ስሪት ይተካ? ሁሉም ውሂብ ይወገዳል።"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ይህ መተግበሪያ በፋብሪክው ስሪት ይተካ? ሁሉም ውሂብ ይወገዳል። እነዚያን የሥራ መገለጫዎች ያላቸውን ጨምሮ ሁሉንም በዚህ መሣሪያ ላይ ባሉ ተጠቃሚዎች ላይ ተጽዕኖ ያሳርፍባቸዋል።"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"በማሄድ ላይ ያሉ ማራገፎች"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ያልተሳኩ ማራገፎች"</string>
<string name="uninstalling" msgid="5556217435895938250">"ባለመጫንላይ"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ን በማራገፍ ላይ…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"አራግፍ ተጠናቋል"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ተራግፏል"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ን ማራገፍ ስኬታማ አልነበረም።"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ገባሪ የመሣሪያ አስተዳደር መተግበሪያን ማራገፍ አይቻልም"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"ለ<xliff:g id="USERNAME">%1$s</xliff:g> ገባሪ የመሣሪያ አስተዳደር መተግበሪያን ማራገፍ አይቻልም"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ይህ መተግበሪያ ለአንዳንድ ተጠቃሚዎች ወይም መገለጫዎች ያስፈልጋል እና ለሌሎች ተራግፏል"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ይህ መተግበሪያ ለእርስዎ መገለጫዎ ያስፈልጋል እና ሊራገፍ አይችልም።"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ይህ መተግበሪያ በመሣሪያዎ አስተዳዳሪ የሚፈለግ እና ሊራገፍ የማይችል ነው።"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"የመሣሪያ አስተዳዳሪዎችን አደራጅ"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"የመሣሪያ አስተዳደር መተግበሪያዎችን ያስተዳድሩ"</string>
<string name="manage_users" msgid="3125018886835668847">"ተጠቃሚዎችን ያስተዳድሩ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>ማራገፍ አልተቻለም"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"አካታቹን መተንተን ችግር ነበረ።"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ይህ ዝማኔ ምንም አዲስ ፈቃድ አያስፈልገውም።"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"የሚከተሉት ፍቃዶችን መስጠት ይፈልጋሉ? የእነዚህ መዳረሻዎችን ይሰጣል፦"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ከልክል"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ተጨማሪ መረጃ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ለማንኛውም ከልክል"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g> እንዲከናወን ይፈቀድለት?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> ተሰናክሏል"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"ሁሉም ተሰናክሏል"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ምንም አልተሰናከለም"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"ፍቀድ"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"መተግበሪያዎች"</string>
<string name="app_permissions" msgid="3146758905824597178">"የመተግበሪያ ፈቃዶች"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"በWear ላይ የመጫን/ማራገፍ እርምጃዎች አይደገፉም።"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ተዘምኗል። <xliff:g id="APP_NAME_1">%1$s</xliff:g> የሚከተለው እንዲደርስ ይፍቀዱ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ምን መድረስ እንደሚችል ይምረጡ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ተዘምኗል። ይህ መተግበሪያ ምን መድረስ እንደሚችል ይምረጡ።"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ምን መድረስ እንደሚችል ይምረጡ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ተዘምኗል። ይህ መተግበሪያ ምን መድረስ እንደሚችል ይምረጡ።"</string>
<string name="review_button_cancel" msgid="957906817733578877">"ይቅር"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ቀጥል"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"አዲስ ፍቃዶች"</string>
<string name="current_permissions_category" msgid="998210994450606094">"የአሁኖቹ ፍቃዶች"</string>
<string name="message_staging" msgid="6151794817691100003">"መተግበሪያን በማዘጋጀት ላይ…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"ያልታወቀ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ለእርስዎ ደህንነት ሲባል የእርስዎ ጡባዊ ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ለእርስዎ ደህንነት ሲባል የእርስዎ ቴሌቪዥን ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ለእርስዎ ደህንነት ሲባል የእርስዎ ስልክ ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"የእርስዎ ስልክ እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይልበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ስልክ ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"የእርስዎ ጡባዊ እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ጡባዊ ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"የእርስዎ ቴሌቪዥን እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ቴሌቪዥን ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ቀጥል"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ቅንብሮች"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"የWear መተግበሪያዎችን መጫን/ማራገፍ"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 1f32e914..cbfcd902 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"إلغاء"</string>
<string name="unknown" msgid="4742479012767208045">"غير معروف"</string>
<string name="installing" msgid="8613631001631998372">"جارٍ التثبيت..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"جارٍ تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"هل تريد تثبيت تحديث لهذا التطبيق المضمن؟ لن يتم فقد بياناتك الحالية. كما أنه لا يتطلب أي دخول خاص."</string>
<string name="install_failed" msgid="6579998651498970899">"التطبيق ليس مثبتًا."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"تم حظر تثبيت الحزمة."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"تتعارض الحزمة مع حزمة حالية تحمل الاسم نفسه."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"هذا التطبيق ليس متوافقً مع جهازك اللوحي."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"لم يتم تثبيت التطبيق لأن حزمة التثبيت تتعارض مع حزمة حالية."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"لم يتم تثبيت التطبيق لأنه ليس متوافقًا مع جهازك اللوحي."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"هذا التطبيق لا يتوافق مع جهاز التلفزيون."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"لا يتوافق هذا التطبيق مع هاتفك."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"يبدو أن الحزمة تالفة."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"لم يتم تثبيت التطبيق لأنه ليس متوافقًا مع هاتفك."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"لم يتم تثبيت التطبيق لأن الحزمة تبدو غير صالحة."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"لا يسمح المشرف بتثبيت التطبيقات التي يتم الحصول عليها من مصادر غير معروفة"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"يتعذر على هذا المستخدم تثبيت التطبيقات غير المعروفة"</string>
<string name="ok" msgid="3468756155452870475">"موافق"</string>
<string name="settings" msgid="6743583734099755409">"الإعدادات"</string>
<string name="manage_applications" msgid="4033876279091996596">"إدارة التطبيقات"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"غير مسموح به"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"غير مسموح للمستخدم الحالي بتنفيذ عملية إلغاء التثبيت هذه."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"الخطأ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"تعذر إلغاء تثبيت التطبيق."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"هل تريد إزالة هذا التطبيق للمستخدم <xliff:g id="USERNAME">%1$s</xliff:g>؟"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"هل تريد استبدال هذا التطبيق بإصدار المصنع؟ ستتم إزالة جميع البيانات."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"هل تريد استبدال هذا التطبيق بإصدار المصنع؟ ستتم إزالة جميع البيانات. وسيؤثر هذا في جميع مستخدمي هذا الجهاز، بما في ذلك من لديهم ملفات شخصية للعمل."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"عمليات إلغاء التثبيت الجارية"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"عمليات إلغاء التثبيت غير الناجحة"</string>
<string name="uninstalling" msgid="5556217435895938250">"جارٍ الإزالة..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"جارٍ إلغاء تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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_done_app" msgid="775837862728680479">"تم إلغاء تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
+ <string name="uninstall_failed" msgid="631122574306299512">"تعذّر إلغاء التثبيت."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"لم يتم إلغاء تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> بنجاح."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"تعذر إلغاء تثبيت تطبيق مشرف الأجهزة النشطة"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"تعذر إلغاء تثبيت تطبيق مشرف الأجهزة النشطة لدى <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"هذا التطبيق مطلوب لبعض المستخدمين أو الملفات الشخصية وتم إلغاء تثبيته لآخرين."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"هذا التطبيق مطلوب لملفك الشخصي ولا يمكن إلغاء تثبيته."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"مشرف الجهاز يحتاج إلى هذا التطبيق ولا يمكن إزالته."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"إدارة مشرفي الجهاز"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"إدارة تطبيقات مشرف الجهاز"</string>
<string name="manage_users" msgid="3125018886835668847">"إدارة حسابات المستخدمين"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"تعذرت إزالة <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"حدثت مشكلة أثناء تحليل الحزمة."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"لا يتطلب هذا التحديث أي أذونات جديدة."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"هل ترغب في منح الأذونات التالية؟ علمًا بأنها تتيح الدخول إلى:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"رفض"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"مزيد من المعلومات"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"الرفض على أي حال"</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="7332275268559121742">"‏هل توافق على منح &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; إذن <xliff:g id="ACTION">%2$s</xliff:g>؟"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> إذن معطَّل"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"كل الأذونات معطّلة"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ليس هناك أذونات معطّلة"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"سماح"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"التطبيقات"</string>
<string name="app_permissions" msgid="3146758905824597178">"أذونات التطبيق"</string>
@@ -122,12 +134,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"‏لا تتوافق إجراءات التثبيت/إلغاء التثبيت مع نظام Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"تم تحديث <xliff:g id="APP_NAME_0">%1$s</xliff:g>. هل تريد السماح لتطبيق <xliff:g id="APP_NAME_1">%1$s</xliff:g> بالوصول إلى ما يلي؟"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"اختيار ما تريد السماح لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> بالوصول إليه"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"تم تحديث <xliff:g id="APP_NAME">%1$s</xliff:g>. اختر ما تريد السماح لهذا التطبيق بالوصول إليه."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"‏اختيار ما تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إليه"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"‏تم تحديث &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. عليك اختيار ما تريد السماح لهذا التطبيق بالوصول إليه."</string>
<string name="review_button_cancel" msgid="957906817733578877">"إلغاء"</string>
<string name="review_button_continue" msgid="4809162078179371370">"متابعة"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"الأذونات الجديدة"</string>
<string name="current_permissions_category" msgid="998210994450606094">"الأذونات الحالية"</string>
<string name="message_staging" msgid="6151794817691100003">"جارٍ الطرح المرحلي للتطبيق…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"غير معروف"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"لأغراض الأمان، غير مسموح لجهازك اللوحي بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"لأغراض الأمان، غير مسموح لجهاز التلفزيون الذي تستخدمه بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"لأغراض الأمان، غير مسموح لهاتفك بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"يعتبر الهاتف والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث لهاتفك أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"يعتبر الجهاز اللوحي والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث للجهاز اللوحي أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"يعتبر جهاز التلفزيون والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث لجهاز التلفزيون أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"متابعة"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"الإعدادات"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"‏تثبيت / إلغاء تثبيت تطبيقات Android Wear"</string>
</resources>
diff --git a/res/values-az-rAZ-television/strings.xml b/res/values-az-television/strings.xml
index 92fa5270..92fa5270 100644
--- a/res/values-az-rAZ-television/strings.xml
+++ b/res/values-az-television/strings.xml
diff --git a/res/values-az-rAZ-watch/strings.xml b/res/values-az-watch/strings.xml
index ef6723b5..ef6723b5 100644
--- a/res/values-az-rAZ-watch/strings.xml
+++ b/res/values-az-watch/strings.xml
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az/strings.xml
index 1db456c9..5d6593f8 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Ləğv et"</string>
<string name="unknown" msgid="4742479012767208045">"Naməlum"</string>
<string name="installing" msgid="8613631001631998372">"Quraşdırılır..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> quraşdırılır…"</string>
<string name="install_done" msgid="3682715442154357097">"Tətbiq quraşdırılıb."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Bu tətbiqi quraşdırmaq istəyirsiniz? Tətbiq buraya giriş əldə edəcək:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Bu tətbiqi quraşdırmaq istəyirsiniz? Hər hansı bir xüsusi keçid tələb etmir."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Bu daxili tətbiq güncəllənməsini quraşdırmaq istəyirsiniz? Hazırki datanız itməyəcək. O, xüsusi giriş tələb etmir."</string>
<string name="install_failed" msgid="6579998651498970899">"Tətbiq quraşdırılmayıb."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paket yüklənməyə qarşı blok edildi."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket mövcud eyni adlı paket ilə ziddiyət təşkil edir."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Bu tətbiq planşetinizə uyğun deyil."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Bu paketin mövcud paket ilə ziddiyəti səbəbiylə tətbiq quraşdırılmadı."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Bu tətbiq planşetinizə uyğun gəlmədiyi üçün tətbiq quraşdırılmadı."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Bu proqram TV-nizlə uyğun gəlmir."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Bu tətbiq telefonunuza uyğun deyil."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Bu paket zədələnmiş kimi görünür."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Bu tətbiq telefonunuza uyğun gəlmədiyi üçün tətbiq quraşdırılmadı."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Paket yanlış kimi göründüyü üçün tətbiq quraşdırılmadı."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> planşetinizə yüklənə bilmədi."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> proqramını TV-nizdə quraşdırmaq mümkün olmadı."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> telefonunuza quraşdırıla bilmədi."</string>
<string name="launch" msgid="4826921505917605463">"Aç"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Təhlükəsizlik məqsədilə planşetiniz naməlum mənbələrdən əldə edilmiş tətbiq quraşdırılmasının qarşısını alıb."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Təhlükəsizlik üçün TV-niz naməlum mənbələrdən əldə olunan proqramların quraşdırılmasını bloklamağa təyin olunub."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Təhlükəsizlik məqsədilə telefonunuz naməlum mənbələrdən əldə edilmiş tətbiq quraşdırılmasının qarşısını alıb."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Naməlum mənbələrdən əldə edilmiş tətbiqlərin quraşdırılmasına administrator icazə vermir."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Naməlum mənbələrdən əldə edilmiş tətbiqlərin quraşdırılmasına admin tərəfindən icazə verilmir"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Naməlum tətbiqlər bu istifadəçi tərəfindən quraşdırıla bilməz"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Ayarlar"</string>
<string name="manage_applications" msgid="4033876279091996596">"Tətbiqləri idarə et"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Tətbiq tapılmadı"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Tətbiq quraşdırılmış tətbiqlər siyahısında tapılmadı."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"İcazə verilmir"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Cari istifadəçiyə bu silinməni həyata keçirməyə icazə verilmir."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Xəta"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Tətbiq sistemdən silinmədi."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Tətbiqi qaldır"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Güncəlləməni sil"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> bu tətbiqin hissəsidir:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> adlı istifadəçi üçün bu tətbiqi sistemdən silmək istəyirsiniz?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Tətbiq zavod versiyası ilə əvəz olunsun? Bütün data silinəcək."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Tətbiq zavod versiyası ilə əvəz olunsun? Bütün data silinəcək. Bu, iş profilləri olanlar da daxil olmaqla bu cihazın bütün istifadəçilərinə təsir edir."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"İşləyən sistemlər silinmələr"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Uğursuz olan sistemlər silinmələr"</string>
<string name="uninstalling" msgid="5556217435895938250">"Silinir..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sistemdən silinir…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Sistemdən silmə tamamlandı."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sistemdən silindi"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Aradan qaldırılma uğursuz oldu."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Bu paket aktiv cihaz administratoru olduğu üçün aradan qaldırıla bilməz."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Quraşdırılmışı ləğv etmək mümkün deyil, çünki bu paket <xliff:g id="USERNAME">%1$s</xliff:g> adlı istifadəçi üçün aktiv cihaz inzibatçısıdır."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sistemdən silinməsi uğursuz oldu."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktiv cihaz admin tətbiqini sistemdən silmək mümkün olmadı"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> üçün aktiv cihaz admin tətbiqini sistemdən silmək mümkün olmadı"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Bu tətbiq bəzi istifadəçi və profillər tərəfindən tələb olunur və digərləri üçün silinib"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Bu tətbiq profil üçün tələb olunur və silinə bilməz."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Bu tətbiq cihaz administratoru tərəfindən tələb olunur və sistemdən silinə bilməz."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Cihaz administratorlarını idarə edin"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Cihaz admin tətbiqlərini idarə edin"</string>
<string name="manage_users" msgid="3125018886835668847">"İstifadəçiləri idarə edin"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> sistemdən silinə bilməz."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Paketin təhlilində problem var idi."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Bu güncəllənmə heç bir icazə istəmir"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Aşağıdakı icazələri vermək istəyirsiz? Əldə ediləcək çıxışlar:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rədd edin"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Daha ətraflı"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Hər bir halda 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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; tətbiqinə <xliff:g id="ACTION">%2$s</xliff:g> fəaliyyəti üçün icazə verilsin?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> deaktiv edildi"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"hamısı deaktiv edildi"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"heç biri deaktiv edilmədi"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"İcazə 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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Yükləmə/Silmə fəaliyyətləri Wear\'də dəstəklənmir."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> tətbiqi güncəlləndi. <xliff:g id="APP_NAME_1">%1$s</xliff:g> tətbiqinə aşağıdakılara giriş hüququ verilsin?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinin giriş hüququnu seçin"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqi güncəlləndi. Bu tətbiqin giriş hüququnu seçin."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; tətbiqinin giriş hüququnu seçin"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; tətbiqi güncəlləndi. Bu tətbiqin giriş hüququnu seçin."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Ləğv edin"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Davam edin"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Yeni icazələr"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Cari icazələr"</string>
<string name="message_staging" msgid="6151794817691100003">"Tətbiq hazırlanır..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Naməlum"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Təhlükəsizliyiniz üçün planşetə bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Təhlükəsizliyiniz üçün TV-yə bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Təhlükəsizliyiniz üçün telefona bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefon və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla telefona dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verən data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Planşet və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla planşetə dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verə biləcək data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Tv və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla Tv\'ə dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verən data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Davam edin"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ayarlar"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear tətbiqləri quraşdırılır/silinir"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 42455ced..c32d9c66 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Otkaži"</string>
<string name="unknown" msgid="4742479012767208045">"Nepoznato"</string>
<string name="installing" msgid="8613631001631998372">"Instaliranje..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalira se <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacija je instalirana."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Želite li da instalirate ovu aplikaciju? Imaće pristup sledećem:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Želite li da instalirate ovu aplikaciju? Ne zahteva poseban pristup."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Da li želite da instalirate ažuriranje ove ugrađene aplikacije? Postojeći podaci neće biti izgubljeni. Nije potreban poseban pristup."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instaliranje paketa je blokirano."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket je u sukobu sa postojećim paketom istog naziva."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ova aplikacija nije kompatibilna sa tabletom."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacija nije instalirana jer je paket neusaglašen sa postojećim paketom."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacija nije instalirana jer nije kompatibilna sa tabletom."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ova aplikacija nije kompatibilna sa TV-om."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ova aplikacija nije kompatibilna sa telefonom."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Izgleda da je paket oštećen."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacija nije instalirana jer nije kompatibilna sa telefonom."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacija nije instalirana jer je paket nevažeći."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Nije moguće instalirati aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> na tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Nismo uspeli da instaliramo <xliff:g id="APP_NAME">%1$s</xliff:g> na TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Nije moguće instalirati aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> na telefon."</string>
<string name="launch" msgid="4826921505917605463">"Otvori"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Iz bezbednosnih razloga na tabletu je blokirana instalacija aplikacija sa nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"TV je iz bezbednosnih razloga podešen tako da blokira instalaciju aplikacija iz nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Iz bezbednosnih razloga na telefonu je blokirana instalacija aplikacija sa nepoznatih izvora."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administrator ne dozvoljava instaliranje aplikacija dobijenih iz nepoznatih izvora."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administrator ne dozvoljava instaliranje aplikacija dobijenih iz nepoznatih izvora"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ovaj korisnik ne može da instalira nepoznate aplikacije"</string>
<string name="ok" msgid="3468756155452870475">"Potvrdi"</string>
<string name="settings" msgid="6743583734099755409">"Podešavanja"</string>
<string name="manage_applications" msgid="4033876279091996596">"Upravljanje aplikacijama"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Potvrdi"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikacija nije pronađena"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikacija nije pronađena na listi instaliranih aplikacija."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nije dozvoljeno"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Aktuelnom korisniku nije dozvoljeno da obavi ovo deinstaliranje."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Greška"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Deinstaliranje aplikacije nije uspelo."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Deinstaliranje aplikacije"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Deinstaliranje ažuriranja"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> je deo sledeće aplikacije:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Želite li da deinstalirate ovu aplikaciju za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Želite li da zamenite ovu aplikaciju fabričkom verzijom? Svi podaci će biti uklonjeni."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Želite li da zamenite ovu aplikaciju fabričkom verzijom? Svi podaci će biti uklonjeni. Ovo utiče na sve korisnike ovog uređaja, uključujući i one sa profilima za Work."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Aktivna deinstaliranja"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neuspela deinstaliranja"</string>
<string name="uninstalling" msgid="5556217435895938250">"Deinstaliranje..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> se deinstalira…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Deinstaliranje je završeno."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Aplikacija <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> je deinstalirana"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Deinstaliranje nije uspelo."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nije moguće deinstalirati zato što je ovaj paket aktivan administrator uređaja."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nije moguće deinst. jer je paket aktivni administrator uređaja za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Deinstaliranje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> nije uspelo."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Ne možete da deinstalirate aplikaciju za aktivnog administratora uređaja"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Ne možete da deinstalirate aplikaciju za aktivnog administratora uređaja za <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ova aplikacija je potrebna za neke korisnike ili profile, a deinstalirana je za druge"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ova aplikacija je potrebna za vaš profil i ne može da se deinstalira."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ova aplikacija je potrebna administratoru uređaja i ne može da se deinstalira."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Upravljaj administratorima uređaja"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Upravljaj aplikacijama za administratore uređaja"</string>
<string name="manage_users" msgid="3125018886835668847">"Upravljaj korisnicima"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Nije moguće deinstalirati aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Došlo je do problema pri raščlanjivanju paketa."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ovo ažuriranje ne zahteva nove dozvole."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Da li želite da odobrite sledeće dozvole? Odobrićete pristup za:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odbaci"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Više informacija"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Ipak 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="7332275268559121742">"Želite li da dozvolite da &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Onemogućenih: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"sve su onemogućene"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nijedna nije onemogućena"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dozvoli"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
<string name="app_permissions" msgid="3146758905824597178">"Dozvole za aplikacije"</string>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Radnje Instaliraj/Deinstaliraj nisu podržane u Wear-u."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> je ažurirana. Želite li da dozvolite da <xliff:g id="APP_NAME_1">%1$s</xliff:g> pristupa sledećim stavkama?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Izaberite čemu <xliff:g id="APP_NAME">%1$s</xliff:g> može da pristupa"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je ažurirana. Izaberite čemu aplikacija može da pristupa."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Izaberite čemu &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; može da pristupa"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikacija &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; je ažurirana. Izaberite čemu ova aplikacija može da pristupa."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Otkaži"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Nastavi"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nove dozvole"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktuelne dozvole"</string>
<string name="message_staging" msgid="6151794817691100003">"Aplikacija se priprema…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nepoznato"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Tabletu iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Televizoru iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Telefonu iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefon i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja telefona ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tablet i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja tableta ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja TV-a ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Nastavi"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Podešavanja"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instaliranje/deinstaliranje Wear aplikacija"</string>
</resources>
diff --git a/res/values-be-rBY-television/strings.xml b/res/values-be-television/strings.xml
index 5735d627..befb367c 100644
--- a/res/values-be-rBY-television/strings.xml
+++ b/res/values-be-television/strings.xml
@@ -20,8 +20,8 @@
<string name="grant_dialog_how_to_change" msgid="615414835189256888">"Пазней гэта можна змянiць у раздзеле «Налады &gt; Праграмы»"</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>
- <string name="app_permissions_decor_title" msgid="1461057434211920209">"Дазволы праграмы"</string>
- <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Дазволы праграмы"</string>
+ <string name="app_permissions_decor_title" msgid="1461057434211920209">"Дазволы праграм"</string>
+ <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Дазволы праграм"</string>
<string name="permission_apps_decor_title" msgid="3644363529649579576">"Дазволы праграмы <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
<string name="additional_permissions_decor_title" msgid="7000432624396037882">"Дадатковыя дазволы"</string>
<string name="system_apps_decor_title" msgid="5292119639812561805">"Дазволы праграмы <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
diff --git a/res/values-be-rBY-watch/strings.xml b/res/values-be-watch/strings.xml
index 99b2ce8a..99b2ce8a 100644
--- a/res/values-be-rBY-watch/strings.xml
+++ b/res/values-be-watch/strings.xml
diff --git a/res/values-be-rBY/strings.xml b/res/values-be/strings.xml
index c4dba525..4abb422f 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Скасаваць"</string>
<string name="unknown" msgid="4742479012767208045">"Невядомы"</string>
<string name="installing" msgid="8613631001631998372">"Усталяванне..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Ідзе ўсталяванне <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Усталяваць абнаўленне для гэтага ўбудаванага прыкладання? Вашы iснуючыя дадзеныя не будуць згублены. Спецыяльны доступ не патрабуецца."</string>
<string name="install_failed" msgid="6579998651498970899">"Прыкладанне не ўсталявана."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Для пакета заблакіравана магчымасць усталявання."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакет канфліктуе з існым пакетам з аднолькавым імем."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Гэта праграма несумяшчальная з вашым планшэтам."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Праграма не ўсталявана, таму што пакет канфліктуе з існуючым пакетам."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Праграма не ўсталявана, таму што яна несумяшчальная з вашым планшэтам."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Гэта праграма несумяшчальная з вашым тэлевізарам."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Гэта праграма несумяшчальная з вашым тэлефонам."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Пакет, магчыма, пашкоджаны."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Праграма не ўсталявана, таму што яна несумяшчальная з вашым тэлефонам."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Праграма не ўсталявана, таму што пакет, магчыма, з\'яўляецца несапраўдным."</string>
<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_text" product="tablet" msgid="7504186369474734767">"У мэтах бяспекі ваш планшэт наладжаны на блакiроўку ўсталёўкі прыкладанняў, атрыманых з невядомых крыніц."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"У мэтах бяспекі ваш тэлевізар наладжаны на блакiроўку ўсталёўкі праграм з невядомых крыніц."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"У мэтах бяспекі ваш тэлефон наладжаны на блакiроўку ўсталёўкі прыкладанняў, атрыманых з невядомых крыніц."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Ваш адміністратар не дазваляе ўсталёўку праграм з невядомых крыніц."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Ваш адміністратар не дазваляе ўсталёўку праграм з невядомых крыніц."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Гэты карыстальнік не можа ўсталёўваць невядомыя праграмы"</string>
<string name="ok" msgid="3468756155452870475">"ОК"</string>
<string name="settings" msgid="6743583734099755409">"Налады"</string>
<string name="manage_applications" msgid="4033876279091996596">"Кіраванне прыкладаннямі"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Забаронена"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Бягучы карыстальнік не мае дазволу на гэта выдаленне."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Памылка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Нельга выдаліць праграму."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Выдалiць прыкладанне"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Хочаце выдаліць гэту праграму для карыстальніка <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Замяніць гэту праграму заводскай версіяй? Усе даныя будуць выдалены."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Замяніць гэту праграму заводскай версіяй? Усе даныя будуць выдаленыя. Гэта паўплывае на ўсіх карыстальнікаў гэтай прылады, у тым ліку карыстальнікаў з працоўнымі профілямі."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Актыўныя выдаленні"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Збоі выдалення"</string>
<string name="uninstalling" msgid="5556217435895938250">"Выдаленне..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> выдаляецца…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Выдаленне завершана"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Выдалена <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"Не атрымалася выдаліць <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Немагчыма выдаліць актыўную праграму адміністратара прылады"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Немагчыма выдаліць актыўную праграму адміністратара прылады для карыстальніка <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Гэта праграма патрабуецца для некаторых карыстальнікаў або профіляў і была выдалена для іншых"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Гэта праграма неабходная для вашага профілю і не можа быць выдалена."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Гэта праграма патрабуецца адміністратару вашай прылады і не можа быць выдалена."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Кіраваць адміністратарамі прылады"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Праграмы адміністратара для кіравання прыладамі"</string>
<string name="manage_users" msgid="3125018886835668847">"Кіраванне карыстальнікамі"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Немагчыма выдалiць прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Памылка аналiзу пакета."</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"Гэтае абнаўленне не патрабуе ніякіх новых дазволаў."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Даць наступны дазвол? Ён будзе атрымліваць доступ да:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Адмовіць"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Дадатковая iнфармацыя"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Усё роўна адмовіць"</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="7332275268559121742">"Дазволіць &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Адключана: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"усе адключаны"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"няма адключаных"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дазволіць"</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="1089938738199748687">"Больш не пытацца"</string>
<string name="no_permissions" msgid="3210542466245591574">"Няма дазволаў"</string>
<string name="additional_permissions" msgid="6667573114240111763">"Дадатковыя дазволы"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Дзеянні па ўсталяванні або выдаленні не падтрымліваюцца на Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Праграма <xliff:g id="APP_NAME_0">%1$s</xliff:g> абноўлена. Дазволіць <xliff:g id="APP_NAME_1">%1$s</xliff:g> доступ да наступнага?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Выберыце, да чаго дазволіць доступ праграме <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Праграма <xliff:g id="APP_NAME">%1$s</xliff:g> абноўлена. Выберыце, да чаго ёй дазволіць доступ."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Выберыце, да чаго дазволіць доступ праграме &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Праграма &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; была абноўлена. Выберыце, да чаго ёй дазволіць доступ."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Скасаваць"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Далей"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Новыя дазволы"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Бягучыя дазволы"</string>
<string name="message_staging" msgid="6151794817691100003">"Падрыхтоўка праграмы..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Невядома"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"У мэтах бяспекі вашаму планшэту не дазваляецца ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"У мэтах бяспекі вашаму тэлевізару не дазваляецца ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"У мэтах бяспекі вашаму тэлефону не дазваляецца ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Ваш тэлефон і асабістыя даныя больш уразлівыя для нападаў невядомых праграм. Пры ўсталёўцы гэтай праграмы вы згаджаецеся, што несяце адказнасць за любыя пашкоджанні тэлефона ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Ваш планшэт і асабістыя даныя больш уразлівыя для нападаў невядомых праграм. Пры ўсталёўцы гэтай праграмы вы згаджаецеся, што несяце адказнасць за любыя пашкоджанні планшэта ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Ваш тэлевізар і асабістыя даныя больш уразлівыя для нападаў невядомых праграм. Пры ўсталёўцы гэтай праграмы вы згаджаецеся, што несяце адказнасць за любыя пашкоджанні тэлевізара ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Працягнуць"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Налады"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Усталяванне/выдаленне праграм wear"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 20cc1872..413e4892 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Отказ"</string>
<string name="unknown" msgid="4742479012767208045">"Неизвестно"</string>
<string name="installing" msgid="8613631001631998372">"Инсталира се..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> се инсталира…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Искате ли да инсталирате актуализация за това вградено приложение? Съществуващите ви данни няма да бъдат загубени. Не се изисква специален достъп."</string>
<string name="install_failed" msgid="6579998651498970899">"Приложението не бе инсталирано."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Инсталирането на пакета бе блокирано."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакетът е в конфликт със съществуващ пакет със същото име."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Това приложение не е съвместимо с таблета ви."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Приложението не бе инсталирано, тъй като пакетът е в конфликт със съществуващ пакет."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Приложението не бе инсталирано, тъй като не е съвместимо с таблета ви."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Това приложение не е съвместимо с телевизора ви."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Това приложение не е съвместимо с телeфона ви."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Изглежда, че пакетът е повреден."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Приложението не бе инсталирано, тъй като не е съвместимо с телефона ви."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Приложението не бе инсталирано, тъй като изглежда, че пакетът е невалиден."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Администраторът ви не разрешава инсталирането на приложения, получени от неизвестни източници"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Този потребител не може да инсталира неизвестни приложения"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Настройки"</string>
<string name="manage_applications" msgid="4033876279091996596">"Управление на приложенията"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Приложението не бе намерено"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Приложението не бе намерено в списъка с инсталирани приложения."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Няма разрешение"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Текущият потребител няма разрешение да извърши това деинсталиране."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Грешка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Приложението не можа да бъде деинсталирано."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Искате ли да деинсталирате това приложение за потребителя <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Това приложение да се замени ли с фабричната версия? Всички данни ще бъдат премахнати."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Това приложение да се замени ли с фабричната версия? Всички данни ще бъдат премахнати. Промяната ще засегне всеки потребител на устройството, включително тези със служебни потребителски профили."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Активни деинсталирания"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Неуспешни деинсталирания"</string>
<string name="uninstalling" msgid="5556217435895938250">"Деинсталира се..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> се деинсталира…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Деинсталирането завърши."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Деинсталирахте <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"Деинсталирането на <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> бе неуспешно."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Активното приложение за администриране на устройството не може да се деинсталира"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Активното приложение за администриране на устройството не може да се деинсталира за <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Това приложение е необходимо за някои потребители или потребителски профили и бе деинсталирано за други."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Това приложение е необходимо за потребителския ви профил и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Приложението се изисква от администратора на у-вото и не може да се деинсталира."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Управление на администраторите на устройства"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Управление на прилож. за администриране на у-вото"</string>
<string name="manage_users" msgid="3125018886835668847">"Управление на потребителите"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> не можа да се деинсталира."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"При синтактичния анализ на пакета възникна проблем."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Тази актуализация не изисква нови разрешения."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Искате ли да предоставите следните разрешения? Така ще се получи достъп до:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Отказване"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Още информация"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Отказване въпреки това"</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="7332275268559121742">"Разрешаване на &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; да <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Деактивирахте <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"всички са деактивирани"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"няма деактивирани"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Разрешаване"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Приложения"</string>
<string name="app_permissions" msgid="3146758905824597178">"Разрешения за приложения"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Действията инсталиране и деинсталиране не се поддържат на устройства с Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Приложението <xliff:g id="APP_NAME_0">%1$s</xliff:g> е актуализирано. Искате ли да разрешите на <xliff:g id="APP_NAME_1">%1$s</xliff:g> достъп до следните неща?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Изберете до какво да разрешите достъп на <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Приложението <xliff:g id="APP_NAME">%1$s</xliff:g> е актуализирано. Изберете до какво да му разрешите достъп."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Изберете до какво да има достъп &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Приложението &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; е актуализирано. Изберете до какво да има достъп."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Отказ"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Напред"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Нови разрешения"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Текущи разрешения"</string>
<string name="message_staging" msgid="6151794817691100003">"Приложението се подготвя…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Неизвестно"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"От съображения за сигурност на таблета ви не могат да се инсталират неизвестни приложения от този източник."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"От съображения за сигурност на телевизора ви не могат да се инсталират неизвестни приложения от този източник."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"От съображения за сигурност на телефона ви не могат да се инсталират неизвестни приложения от този източник."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Телефонът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на телефона или загуба на информация вследствие на използването на приложението."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Таблетът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на таблета или загуба на информация вследствие на използването на приложението."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Телевизорът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на телевизора или загуба на информация вследствие на използването на приложението."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Напред"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Настройки"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Инсталир./деинсталир. на прилож. за Wear"</string>
</resources>
diff --git a/res/values-bn-rBD-television/strings.xml b/res/values-bn-television/strings.xml
index 06761f3e..06761f3e 100644
--- a/res/values-bn-rBD-television/strings.xml
+++ b/res/values-bn-television/strings.xml
diff --git a/res/values-bn-rBD-watch/strings.xml b/res/values-bn-watch/strings.xml
index 79a91f48..79a91f48 100644
--- a/res/values-bn-rBD-watch/strings.xml
+++ b/res/values-bn-watch/strings.xml
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn/strings.xml
index f068b08e..1f21c5b2 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"বাতিল করুন"</string>
<string name="unknown" msgid="4742479012767208045">"অজানা"</string>
<string name="installing" msgid="8613631001631998372">"ইনস্টল করা হচ্ছে…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ইন্সটল করা হচ্ছে…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"আপনি কি ভেতরে থাকা অ্যাপ্লিকেশানের একটি আপডেট ইনস্টল করতে চান? আপনার বিদ্যমান ডেটাগুলি একই রকম থাকবে৷ এর জন্য কোনো বিশেষ অ্যাক্সেসের প্রয়োজন নেই৷"</string>
<string name="install_failed" msgid="6579998651498970899">"অ্যাপ্লিকেশান ইনস্টল করা হয়নি৷"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ইনস্টল হওয়া থেকে প্যাকেজটিকে অবরুদ্ধ করা হয়েছে।"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"প্যাকেজটির সাথে একই নামের আরেকটি বিদ্যমান প্যাকেজের দ্বন্দ্ব হচ্ছে।"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"এই অ্যাপ্লিকেশানটি আপনার ট্যাবলেটের জন্য উপযুক্ত নয়৷"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"কোনো বিদ্যমান প্যাকেজের সাথে এই প্যাকেজটির বিবাদ থাকার ফলে অ্যাপ ইনস্টল করা হয়নি৷"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"অ্যাপটি আপনার ট্যাবলেটের জন্য উপযুক্ত না হওয়ার কারণে এটি ইনস্টল করা হয়নি৷"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"এই অ্যাপ্লিকেশানটি আপনার টিভির জন্য উপযুক্ত নয়৷"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"এই অ্যাপ্লিকেশানটি আপনার ফোনের জন্য উপযুক্ত নয়৷"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"প্যাকেজটি ক্ষতিগ্রস্ত বলে মনে হচ্ছে৷"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"অ্যাপটি আপনার ফোনের জন্য উপযুক্ত না হওয়ার কারণে এটি ইনস্টল করা হয়নি৷"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"প্যাকেজটি অবৈধ বলে মনে হওয়ার কারণে অ্যাপ ইনস্টল করা হয়নি৷"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"আপনার প্রশাসক অজানা উৎস থেকে প্রাপ্ত অ্যাপ ইনস্টল করার অনুমতি দেয় না"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"এই ব্যবহারকারী অজানা অ্যাপ ইনস্টল করতে পারবেন না"</string>
<string name="ok" msgid="3468756155452870475">"ঠিক আছে"</string>
<string name="settings" msgid="6743583734099755409">"সেটিংস"</string>
<string name="manage_applications" msgid="4033876279091996596">"অ্যাপ্লিকেশানগুলির পরিচালনা করুন"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"অনুমোদিত নয়"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"বর্তমান ব্যবহারকারী এই আনইনস্টলের কাজটি করার জন্য অনুমোদিত নয়৷"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ত্রুটি"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"অ্যাপ আনইনস্টল করা গেল না৷"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"আপনি কি ব্যবহারকারী <xliff:g id="USERNAME">%1$s</xliff:g> এর জন্য এই অ্যাপ্লিকেশানটি আনইনস্টল করতে চান?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ফ্যাক্টরি সংস্করণের সাথে এই অ্যাপটিকে বদলাবেন? সব ডেটা মুছে যাবে।"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ফ্যাক্টরি সংস্করণের সাথে এই অ্যাপটিকে বদলাবেন? সমস্ত ডেটা মুছে যাবে। এটি এই ডিভাইসের সমস্ত ব্যবহারকারী সহ তাদের কার্যের প্রোফাইলের উপরেও প্রভাব ফেলবে।"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"এগুলি আনইনস্টল করা হচ্ছে"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"এগুলি আনইনস্টল করা যায়নি"</string>
<string name="uninstalling" msgid="5556217435895938250">"আনইনস্টল করা হচ্ছে ..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> আনইনস্টল করা হচ্ছে…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"আনইনস্টল সমাপ্ত হয়েছে৷"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> আনইনস্টল করা হয়েছে"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> আনইনস্টল করা গেল না৷"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"সক্রিয় থাকা ডিভাইস প্রশাসক অ্যাপটি আনইনস্টল করা যাবে না"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> এর সক্রিয় থাকা ডিভাইস প্রশাসক অ্যাপটি আনইনস্টল করা যাবে না"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"কিছু ব্যবহারকারী বা প্রোফাইলের জন্য এই অ্যাপ্লিকেশানটি আবশ্যক এবং অন্যদের জন্য আনইনস্টল করা হবে"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"আপনার প্রোফাইলের জন্য এই অ্যাপ্লিকেশানটি প্রয়োজন এবং এটিকে আনইনস্টল করা যাবে না৷"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"আপনার ডিভাইস প্রশাসকের চাহিদা অনুযায়ী এই অ্যাপ্লিকেশানটি আবশ্যক এবং এটি আনইনস্টল করা যাবে না।"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ডিভাইস প্রশাসকদের পরিচালনা করুন"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ডিভাইস প্রশাসক অ্যাপগুলি পরিচালনা করুন"</string>
<string name="manage_users" msgid="3125018886835668847">"ব্যবহারকারীদের পরিচালনা করুন"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> আনইনস্টল করা যায়নি৷"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"প্যাকেজটি বিশ্লেষণ করার ক্ষেত্রে একটি সমস্যা হয়েছে৷"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"এই আপডেটের জন্য কোনো নতুন অনুমতির প্রয়োজন নেই৷"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"আপনি কি নিম্নলিখিত অনুমতিগুলি প্রদান করতে চান? এটি এতে অ্যাক্সেস করার সুযোগ পাবে:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"প্রত্যাখ্যান করুন"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"আরো তথ্য"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"যাইহোক অস্বীকার করুন"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;কে <xliff:g id="ACTION">%2$s</xliff:g> এর অনুমতি দেবেন?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g>টি অক্ষম করা হয়েছে"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"সমস্ত অক্ষম করা হয়েছে"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"কোনো কিছুই অক্ষম করা হয়নি"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"অনুমতি দিন"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"অ্যাপ্লিকেশানগুলি"</string>
<string name="app_permissions" msgid="3146758905824597178">"অ্যাপ্লিকেশানের অনুমতি"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ওয়েরে ইনস্টল/আনইনস্টল করার কাজগুলি সমর্থিত নয়।"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> আপডেট করা হয়েছে৷ <xliff:g id="APP_NAME_1">%1$s</xliff:g>কে নিম্নলিখিত জিনিসগুলি অ্যাক্সেস করার অনুমতি দেবেন?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g>কে কোন কোন জিনিসগুলিতে অ্যাক্সেস দেবেন তা বেছে নিন"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> আপডেট করা হয়েছে৷ এই অ্যাপ্লিকেশানটিকে কোন কোন জিনিসগুলিতে অ্যাক্সেস দেবেন তা চয়ন করুন৷"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; কে কোন জিনিসগুলিতে অ্যাক্সেস দেবেন তা চয়ন করুন"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; আপডেট করা হয়েছে৷ এই অ্যাপ্লিকেশানটিকে কোন জিনিসগুলিতে অ্যাক্সেস দেবেন তা চয়ন করুন৷"</string>
<string name="review_button_cancel" msgid="957906817733578877">"বাতিল করুন"</string>
<string name="review_button_continue" msgid="4809162078179371370">"চালিয়ে যান"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"নতুন অনুমতিগুলি"</string>
<string name="current_permissions_category" msgid="998210994450606094">"বর্তমান অনুমতিগুলি"</string>
<string name="message_staging" msgid="6151794817691100003">"অ্যাপ্লিকেশান স্টেজ করা হচ্ছে..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"অজানা"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"আপনার নিরাপত্তার জন্য আপনার ট্যাবলেট কে এই উৎস থেকে আসা অজানা অ্যাপ ইনস্টল করার অনুমতি দেওয়া হয় না।"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"আপনার নিরাপত্তার জন্য আপনার TV কে এই উৎস থেকে আসা অজানা অ্যাপ ইনস্টল করার অনুমতি দেওয়া হয় না।"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"আপনার নিরাপত্তার জন্য আপনার ফোন কে এই উৎস থেকে আসা অজানা অ্যাপ ইনস্টল করার অনুমতি দেওয়া হয় না।"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"অজানা অ্যাপের দ্বারা আপনার ফোন এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হলেন যে এটি ব্যবহারের ফলে আপনার ফোনের বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"অজানা অ্যাপের দ্বারা আপনার ট্যাবলেট এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হলেন যে এটি ব্যবহারের ফলে আপনার ট্যাবলেটের বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"অজানা অ্যাপের দ্বারা আপনার টিভি এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হলেন যে এটি ব্যবহারের ফলে আপনার টিভি বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"চালিয়ে যান"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"সেটিংস"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"ওয়্যার অ্যাপ ইনস্টল/আনইনস্টল করা হচ্ছে"</string>
</resources>
diff --git a/res/values-bs-rBA-television/strings.xml b/res/values-bs-television/strings.xml
index 8fba2cc7..af92b84d 100644
--- a/res/values-bs-rBA-television/strings.xml
+++ b/res/values-bs-television/strings.xml
@@ -19,7 +19,7 @@
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Odbij i ne pitaj ponovo"</string>
<string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ovo možete kasnije promijeniti u odjeljku Postavke &gt; 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 sistemske aplikacije"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Prikaz sistemskih aplikacija"</string>
<string name="app_permissions_decor_title" msgid="1461057434211920209">"Odobrenja za aplikacije"</string>
<string name="manage_permissions_decor_title" msgid="4823785025722958092">"Odobrenja za aplikacije"</string>
<string name="permission_apps_decor_title" msgid="3644363529649579576">"Odobrenja za aplikaciju: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
diff --git a/res/values-bs-rBA-watch/strings.xml b/res/values-bs-watch/strings.xml
index dcae0979..b08f35d9 100644
--- a/res/values-bs-rBA-watch/strings.xml
+++ b/res/values-bs-watch/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5828565432145544298">"Odbij i ne pitaj ponovo"</string>
<string name="current_permission_template" msgid="6691830243038105737">"<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="7042886929865431207">"Prikaži sistemske aplikacije"</string>
+ <string name="preference_show_system_apps" msgid="7042886929865431207">"Prikaz sistemskih aplikacija"</string>
<string name="permission_summary_enforced_by_policy" msgid="9002523259681588936">"Ne mijenja se"</string>
<string name="generic_yes" msgid="3394094077553763689">"Da"</string>
<string name="generic_cancel" msgid="6384078447202012984">"Otkaži"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs/strings.xml
index e1cde366..49134223 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Otkaži"</string>
<string name="unknown" msgid="4742479012767208045">"Nepoznato"</string>
<string name="installing" msgid="8613631001631998372">"Instalacija u toku..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instaliranje <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacija je instalirana."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Želite li instalirati ovu aplikaciju? Ona će dobiti pristup:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Želite li instalirati ovu aplikaciju? Ona ne zahtijeva poseban pristup."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Želite li ažurirati ovu ugrađenu aplikaciju? Vaš postojeći podaci neće biti izgubljeni. Nije potreban poseban pristup."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instaliranje ovog paketa je blokirano."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket je u koliziji sa postojećim paketom istog imena."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ova aplikacija nije kompatibilna s vašim tabletom."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacija nije instalirana jer paket nije usaglašen s postojećim paketom."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacija nije instalirana jer nije kompatibilna s vašim tabletom."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ova aplikacija nije kompatibilna s vašim TV-om."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ova aplikacija nije kompatibilna s vašim telefonom."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Čini se da je paket oštećen."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacija nije instalirana jer nije kompatibilna s vašim telefonom."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacija nije instalirana jer izgleda da paket nije važeći."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> ne možete instalirati na svoj tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Nije moguće instalirati aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> na vaš TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> ne možete instalirati na svoj telefon."</string>
<string name="launch" msgid="4826921505917605463">"Otvori"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Iz sigurnosnih razloga, vaš tablet je podešen da blokira instaliranje aplikacija dobivenih iz nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Vaš TV je zbog sigurnosti podešen da blokira instaliranje aplikacija iz nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Iz sigurnosnih razloga, vaš telefon je podešen da blokira instaliranje aplikacija dobivenih iz nepoznatih izvora."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Vaš administrator ne dozvoljava instaliranje aplikacija iz nepoznatih izvora."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Vaš administrator ne dozvoljava instaliranje aplikacija iz nepoznatih izvora."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ovaj korisnik ne može instalirati nepoznate aplikacije."</string>
<string name="ok" msgid="3468756155452870475">"Uredu"</string>
<string name="settings" msgid="6743583734099755409">"Postavke"</string>
<string name="manage_applications" msgid="4033876279091996596">"Upravljaj aplikacijama"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Uredu"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikacija nije pronađena"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikacija nije pronađena na spisku instaliranih aplikacija."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nije dozvoljeno"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Trenutnom korisniku nije dozvoljeno da izvrši ovu deinstalaciju."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Greška"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Nije bilo moguće deinstalirati aplikaciju."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Uklanjanje aplikacije"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Uklanjanje ažuriranja"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> je dio sljedeće aplikacije:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Želite li ukloniti ovu aplikaciju za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Želite li ovu aplikaciju zamijeniti s fabričkom verzijom? Svi podaci će biti uklonjeni."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Želite li ovu aplikaciju zamijeniti s fabričkom verzijom? Svi podaci će biti uklonjeni. To će utjecati na sve korisnike uređaja, uključujući i one s radnim profilima."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Tekuća deinstaliranja"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neuspjela deinstaliranja"</string>
<string name="uninstalling" msgid="5556217435895938250">"Uklanjanje u toku..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Deinstalacija paketa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Uklanjanje završeno."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Deinstaliran je paket <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Uklanjanje nije uspjelo."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Ovaj paket ne možete ukloniti jer je aktivni administrator uređaja."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Ne može se ukloniti jer ovaj paket funkcionira kao aktivni administrator uređaja za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Paket <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> nije uspješno deinstaliran."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Nije moguće deinstalirati aktivnu aplikaciju administratora uređaja"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nije moguće deinstalirati aktivnu aplikaciju administratora uređaja za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ova aplikacija je neophodna nekim korisnicima ili profilima, a kod ostalih je deinstalirana"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ova aplikacija je potrebna za vaš profil i ne može se deinstalirati."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ova aplikacija je potrebna administratoru vašeg uređaja i ne može se ukloniti."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Upravljanje administratorima uređaja"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Upravljajte aplikacijama administratora uređaja"</string>
<string name="manage_users" msgid="3125018886835668847">"Upravljanje korisnicima"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> se ne može ukloniti."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Došlo je do problema prilikom raščlanjivanja paketa."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Za ovo ažuriranje nisu potrebne nove dozvole."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Želite li dati sljedeće dozvole? Odobrit ćete pristup:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odbij"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Više informacija"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Odbij svakako"</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="7332275268559121742">"Želite li dozvoliti aplikaciji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; da <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"omogućeno je <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"sve je onemogućeno"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ništa nije onemogućeno"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dozvoli"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
<string name="app_permissions" msgid="3146758905824597178">"Odobrenja za aplikacije"</string>
@@ -101,7 +113,7 @@
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ova aplikacija je kreirana za stariju verziju Androida. Odbijanje odobrenja može uzrokovati da ona više ne funkcionira onako kako je primarno zamišljeno."</string>
<string name="default_permission_description" msgid="4992892207044156668">"izvrši nepoznatu radnju"</string>
<string name="app_permissions_group_summary" msgid="4787239772223699263">"Aplikacije sa odobrenjem: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
- <string name="menu_show_system" msgid="6773743421743728921">"Prikaži sistemske"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Prikaz sistemskih aplikacija"</string>
<string name="menu_hide_system" msgid="7595471742649432977">"Sakrij sistemske"</string>
<string name="permission_title" msgid="6495415273398916381">"Odobrenja za aplikaciju: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
<string name="no_apps" msgid="1965493419005012569">"Nijedna aplikacija"</string>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Instaliranje/deinstaliranje nije podržano na Wearu."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> je ažurirana. Želite li aplikaciji <xliff:g id="APP_NAME_1">%1$s</xliff:g> dopustiti pristup sljedećem?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Odaberite čemu aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> može pristupati"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je ažurirana. Odaberite čemu ova aplikacija može pristupati."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Izaberite čemu aplikacija &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&amp;Lt;/b&gt; može pristupiti"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikacija &amp;Lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&amp;Lt;/b&gt; je ažurirana. Izaberite čemu ova aplikacija može pristupiti."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Otkaži"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Nastavi"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nova odobrenja"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Postojeća odobrenja"</string>
<string name="message_staging" msgid="6151794817691100003">"Aplikacija se postavlja…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nepoznato"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Vašem tabletu iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Vašem TV-u iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Vašem telefonu iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Vaši podaci na telefonu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na telefonu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Vaši podaci na tabletu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na tabletu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Vaši podaci na TV-u i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na TV-u ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Nastavi"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Postavke"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"(De)instaliranje wear aplikacija"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e1318b46..ebf182f2 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancel·la"</string>
<string name="unknown" msgid="4742479012767208045">"Desconegut"</string>
<string name="installing" msgid="8613631001631998372">"S\'està instal·lant..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"S\'està instal·lant <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplicació instal·lada."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Vols instal·lar aquesta aplicació? Tindrà els permisos següents:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Vols instal·lar aquesta aplicació? No requereix cap accés especial."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vols instal·lar una actualització a aquesta aplicació integrada? Les teves dades existents no es perdran. No cal cap tipus d\'accés especial."</string>
<string name="install_failed" msgid="6579998651498970899">"L\'aplicació no s\'ha instal·lat."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"El paquet s\'ha bloquejat perquè no es pugui instal·lar."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"El paquet no és compatible amb un paquet que té el mateix nom."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Aquesta aplicació no és compatible amb la teva tauleta."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"L\'aplicació no s\'ha instal·lat perquè el paquet entra en conflicte amb un d\'existent."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"L\'aplicació no s\'ha instal·lat perquè no és compatible amb la teva tauleta."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Aquesta aplicació no és compatible amb el teu televisor."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Aquesta aplicació no és compatible amb el teu telèfon."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Sembla que el paquet està malmès."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"L\'aplicació no s\'ha instal·lat perquè no és compatible amb el teu telèfon."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"L\'aplicació no s\'ha instal·lat perquè sembla que el paquet no és vàlid."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> no s\'ha pogut instal·lar a la tauleta."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> no s\'ha pogut instal·lar al televisor."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> no s\'ha pogut instal·lar al telèfon."</string>
<string name="launch" msgid="4826921505917605463">"Obre"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Per seguretat, la tauleta està def. per bloq. instal·lació d\'apl. que s\'obtenen de fonts desconegud."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Per seguretat, el televisor està configurat perquè no instal·li aplicacions de fonts desconegudes."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Per seguretat, el telèfon està configurat per bloquejar les aplicacions que procedeixin de fonts desconegudes."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"L\'administrador no permet instal·lar aplicacions que s\'hagin obtingut de fonts desconegudes."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"L\'administrador no permet instal·lar aplicacions de fonts desconegudes"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Aquest usuari no pot instal·lar aplicacions desconegudes"</string>
<string name="ok" msgid="3468756155452870475">"D\'acord"</string>
<string name="settings" msgid="6743583734099755409">"Configuració"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gestiona les aplicacions"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"D\'acord"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"No s\'ha trobat l\'aplicació"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"No s\'ha trobat l\'aplicació a la llista d\'aplicacions instal·lades."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Sense autorització"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"L\'usuari actual no té permís per dur a terme aquesta desinstal·lació."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"No s\'ha pogut desinstal·lar l\'aplicació."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstal·la l\'aplicació"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Desinstal·la l\'actualització"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> forma part de l\'aplicació següent:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Vols desinstal·lar aquesta aplicació per a l\'usuari <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Si substitueixes aquesta aplicació per la versió de fàbrica, s\'esborraran totes les dades."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Si substitueixes aquesta aplicació per la versió de fàbrica, s\'esborraran totes les dades. Això afectarà tots els usuaris d\'aquest dispositiu, inclosos els que tinguin un perfil professional."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Desinstal·lacions en curs"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Desinstal·lacions fallides"</string>
<string name="uninstalling" msgid="5556217435895938250">"S\'està desinstal·lant..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"S\'està desinstal·lant <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstal·lació finalitzada."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"S\'ha desinstal·lat <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"S\'ha produït un error en la desinstal·lació."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"No es pot desinstal·lar perquè aquest paquet és administ. actiu d\'un dispositiu."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"No es pot desinstal·lar perquè el paquet és un administrador de dispositius actius per a l’usuari <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"No s\'ha pogut desinstal·lar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> correctament."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"No es pot desinstal·lar l\'aplicació activa de l\'administrador del dispositiu"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"No es pot desinstal·lar l\'aplicació activa de l\'administrador del dispositiu per a <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"L\'aplicació cal en alguns usuaris o perfils i s\'ha desinstal·lat per a d\'altres"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Aquesta aplicació es necessita per al teu perfil i no es pot desinstal·lar."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"L\'administrador del dispositiu necessita l\'aplicació i no la pots desinstal·lar."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gestiona els administradors del dispositiu"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gestiona les aplicacions d\'administració del dispositiu"</string>
<string name="manage_users" msgid="3125018886835668847">"Gestiona els usuaris"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> no s\'ha pogut desinstal·lar."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"S\'ha produït un problema en analitzar el paquet."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Aquesta actualització no requereix permisos nous."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Vols concedir els permisos següents? S\'obtindrà accés a:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denega"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Més informació"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Denega de totes maneres"</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="7332275268559121742">"Vols permetre a &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> permisos desactivats"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"tots els permisos desactivats"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"cap permís desactivat"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permet"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacions"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permisos d\'aplicacions"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Les accions d\'instal·lar o de desinstal·lar no s\'admeten a Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"S\'ha actualitzat <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Vols permetre que <xliff:g id="APP_NAME_1">%1$s</xliff:g> tingui accés al següent?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Tria a què vols que tingui accés <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"S\'ha actualitzat <xliff:g id="APP_NAME">%1$s</xliff:g>. Tria a què vols que tingui accés aquesta aplicació."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Tria a què vols que tingui accés &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"S\'ha actualitzat &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Tria a què vols que tingui accés aquesta aplicació."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancel·la"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continua"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Permisos nous"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permisos actuals"</string>
<string name="message_staging" msgid="6151794817691100003">"S\'està preparant la instal·lació de l\'aplicació…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconegut"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Per seguretat, la tauleta no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Per seguretat, el televisor no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Per seguretat, el telèfon no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"El telèfon i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al telèfon o de la pèrdua de dades que pugui resultar del seu ús."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"La tauleta i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi a la tauleta o de la pèrdua de dades que pugui resultar del seu ús."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"El televisor i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al televisor o de la pèrdua de dades que pugui resultar del seu ús."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continua"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Configuració"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instal·lant o desinstal·lant aplicacions de Wear"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 76f5942b..03d7b564 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Zrušit"</string>
<string name="unknown" msgid="4742479012767208045">"Neznámé"</string>
<string name="installing" msgid="8613631001631998372">"Probíhá instalace..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalace balíčku <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikace je nainstalována."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Chcete tuto aplikaci nainstalovat? Aplikace získá přístup k těmto oprávněním:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Chcete tuto aplikaci nainstalovat? Aplikace nevyžaduje žádná zvláštní oprávnění."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Chcete nainstalovat aktualizaci této integrované aplikace? Vaše existující data nebudou ztracena. Není vyžadován žádný zvláštní přístup."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikaci nelze nainstalovat."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instalace balíčku byla zablokována."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Balíček je v konfliktu se stávajícím balíčkem, který má stejný název."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Tato aplikace s vaším tabletem není kompatibilní."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikaci nelze nainstalovat, protože balíček je v konfliktu se stávajícím balíčkem."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikaci nelze nainstalovat, protože s tabletem není kompatibilní."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Tato aplikace s vaší televizí není kompatibilní."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Tato aplikace s vaším telefonem není kompatibilní."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Zdá se, že je balíček poškozen."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikaci nelze nainstalovat, protože s telefonem není kompatibilní."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikaci nelze nainstalovat, protože balíček zřejmě není platný."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> do tohoto tabletu nelze nainstalovat."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> se do televize nepodařilo nainstalovat."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> do tohoto telefonu nelze nainstalovat."</string>
<string name="launch" msgid="4826921505917605463">"Otevřít"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Tablet je z důvodu zabezpečení nastaven tak, aby blokoval instalace aplikací z neznámých zdrojů."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Z bezpečnostních důvodů je v televizi nastaveno blokování aplikací získaných z neznámých zdrojů."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Telefon je z důvodu zabezpečení nastaven tak, aby blokoval instalace aplikací z neznámých zdrojů."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Váš administrátor nedovoluje instalaci aplikací z neznámých zdrojů."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Váš administrátor nedovoluje instalaci aplikací z neznámých zdrojů"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Tento uživatel nemůže instalovat neznámé aplikace"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Nastavení"</string>
<string name="manage_applications" msgid="4033876279091996596">"Spravovat aplikace"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikace nebyla nalezena"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikaci se nepodařilo najít na seznamu nainstalovaných aplikací."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Není povoleno"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Aktuální uživatel nemá k odinstalaci oprávnění."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Chyba"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplikaci nelze odinstalovat."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Odinstalovat aplikaci"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Odinstalovat aktualizaci"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"Činnost <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> je součástí následující aplikace:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Chcete tuto aplikaci pro uživatele <xliff:g id="USERNAME">%1$s</xliff:g> odinstalovat?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Chcete tuto aplikaci nahradit tovární verzí? Všechna data budou odstraněna."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Chcete tuto aplikaci nahradit tovární verzí? Všechna data budou odstraněna. Tato akce ovlivní všechny uživatele zařízení, včetně uživatelů s pracovním profilem."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Probíhající odinstalace"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neúspěšné odinstalace"</string>
<string name="uninstalling" msgid="5556217435895938250">"Probíhá odinstalace..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Odinstalace balíčku <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Odinstalace byla dokončena."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Balíček <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> byl odinstalován"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Odinstalace se nezdařila."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nelze odinstalovat, protože je tento balíček aktivním správcem zařízení."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Balíček nelze odinstalovat, protože je aktivním administrátorem zařízení pro uživatele <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Odinstalace balíčku <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> se nezdařila."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktivní aplikaci pro správu zařízení nelze odinstalovat"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Aktivní aplikaci pro správu zařízení uživatele <xliff:g id="USERNAME">%1$s</xliff:g> nelze odinstalovat"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Tato aplikace je u některých uživatelů nebo profilů požadována, u ostatních byla odinstalována."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Tato aplikace je pro váš profil požadována a nelze ji odinstalovat."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Tato aplikace je administrátorem zařízení vyžadována a nelze ji odinstalovat."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Spravovat správce zařízení"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Přejít do nastavení aplikací pro správu zařízení"</string>
<string name="manage_users" msgid="3125018886835668847">"Správa uživatelů"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> nelze odinstalovat."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Při analýze balíčku došlo k chybě."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Tato aktualizace nevyžaduje žádná nová oprávnění."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Chcete udělit následující oprávnění? Získáte přístup k:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmítnout"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Další informace"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Zamítnout"</string>
<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="7332275268559121742">"Povolit aplikaci &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"zakázáno (<xliff:g id="COUNT">%1$d</xliff:g>)"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"vše zakázáno"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nic nezakázáno"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Povolit"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikace"</string>
<string name="app_permissions" msgid="3146758905824597178">"Oprávnění aplikací"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Akce instalace/odinstalace nejsou v zařízení Wear podporovány."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikace <xliff:g id="APP_NAME_0">%1$s</xliff:g> byla aktualizována. Chcete aplikaci <xliff:g id="APP_NAME_1">%1$s</xliff:g> povolit přístup k následujícím položkám?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Určete, k čemu aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> povolíte přístup"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> byla aktualizována. Určete, k čemu jí povolíte přístup."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Určete, k čemu aplikaci &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; povolíte přístup"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikace &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; byla aktualizována. Určete, k čemu jí povolíte přístup."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Zrušit"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Pokračovat"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nová oprávnění"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktuální oprávnění"</string>
<string name="message_staging" msgid="6151794817691100003">"Příprava instalace…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Neznámá aplikace"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Z bezpečnostních důvodů do tabletu není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Z bezpečnostních důvodů do televize není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Z bezpečnostních důvodů do telefonu není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefon a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na telefonu nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tablet a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na tabletu nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Televize a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na televizi nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Pokračovat"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Nastavení"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalace/odinstalace aplikací pro Wear"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0415803c..dacb7070 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Annuller"</string>
<string name="unknown" msgid="4742479012767208045">"Ukendt"</string>
<string name="installing" msgid="8613631001631998372">"Installerer..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Appen er installeret."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Vil du installere denne applikation? Den får adgang til følgende:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Vil du installere denne applikation? Den kræver ingen særlig adgang."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vil du installere en opdatering til denne indbyggede applikation? Dine eksisterende data vil ikke gå tabt. Det kræver ikke nogen særlig adgang."</string>
<string name="install_failed" msgid="6579998651498970899">"Appen blev ikke installeret."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Pakken blev blokeret i at blive installeret."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakken er i modstrid med en eksisterende pakke af samme navn."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Denne app er ikke kompatibel med din tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Appen blev ikke installeret, da pakken er i strid med en eksisterende pakke."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Appen blev ikke installeret, da den er ikke kompatibel med din tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Denne app er ikke kompatibel med dit fjernsyn."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Denne app er ikke kompatibel med din telefon."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pakken ser ud til at være beskadiget."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Appen blev ikke installeret, da den ikke er kompatibel med din telefon."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Appen blev ikke installeret, da pakken ser ud til at være ugyldig."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på din tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på dit tv."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på din telefon."</string>
<string name="launch" msgid="4826921505917605463">"Åbn"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Din tablet er som sikkerhed indstillet til at blokere installation af apps fra ukendte kilder."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Dit tv er af sikkerhedshensyn konfigureret til at forhindre installering af apps fra ukendte kilder."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Din telefon er som sikkerhed indstillet til at blokere installation af apps fra ukendte kilder."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Din administrator tillader ikke installation af apps, der hentes fra ukendte kilder."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Din administrator tillader ikke installation af apps, der hentes fra ukendte kilder"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Denne bruger kan ikke installere ukendte apps"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Indstillinger"</string>
<string name="manage_applications" msgid="4033876279091996596">"Administrer apps"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Appen blev ikke fundet"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Appen blev ikke fundet på listen over installerede apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ikke tilladt"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Den nuværende bruger har ikke tilladelse til at udføre denne afinstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Fejl"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Appen kunne ikke afinstalleres."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Afinstaller appen"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Afinstaller opdatering"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> er en del af følgende app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Vil du afinstallere denne app for brugeren <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Vil du erstatte denne app med fabriksversionen? Alle data fjernes."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Vil du erstatte denne app med fabriksversionen? Alle data fjernes. Dette påvirker alle brugere af denne enhed, herunder de brugere, der har arbejdsprofiler."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Igangværende afinstallationer"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mislykkede afinstallationer"</string>
<string name="uninstalling" msgid="5556217435895938250">"Afinstallerer..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Afinstallerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Afinstallationen er afsluttet."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> blev afinstalleret"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Afinstallationen mislykkedes."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Der kan ikke afinstalleres, fordi denne pakke er en aktiv enhedsadministrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Pakken kan ikke afinstalleres. Den er aktiv enhedsadministrator for brugeren <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> kunne ikke afinstalleres."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Den aktive app til enhedsadministration kan ikke afinstalleres"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Den aktive app til enhedsadministration for <xliff:g id="USERNAME">%1$s</xliff:g> kan ikke afinstalleres"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Denne app kræves for nogle brugere eller profiler og afinstalleres for andre"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Denne app er nødvendig for din profil og kan ikke afinstalleres."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Denne app er påkrævet af din enhedsadministrator og kan ikke afinstalleres."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Administrer enhedsadministratorer"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Administrer apps til enhedsadministration"</string>
<string name="manage_users" msgid="3125018886835668847">"Administrer brugere"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke afinstalleres."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Der opstod et problem med parsing af pakken."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Denne opdatering kræver ingen nye tilladelser."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Vil du give følgende tilladelser? Det vil få adgang til:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Afvis"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Få flere oplysninger"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Afvis alligevel"</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="7332275268559121742">"Vil du give &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; tilladelse til at <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> er deaktiveret"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"alle er deaktiveret"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ingen er deaktiveret"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Tillad"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"Apptilladelser"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Det er ikke muligt at installere/afinstallere på Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> er blevet opdateret. Vil du give <xliff:g id="APP_NAME_1">%1$s</xliff:g> adgang til følgende?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Vælg, hvad <xliff:g id="APP_NAME">%1$s</xliff:g> må få adgang til"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> er blevet opdateret. Vælg, hvad denne app må få adgang til."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Vælg, hvad &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; må få adgang til"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; er blevet opdateret. Vælg, hvad denne app må få adgang til."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Annuller"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Fortsæt"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nye tilladelser"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktuelle tilladelser"</string>
<string name="message_staging" msgid="6151794817691100003">"Forbereder appen…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Ukendt"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Din tablet har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Dit fjernsyn har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Din telefon har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Din telefon og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på din telefon eller tab af data, der kan skyldes brug af appen."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Din tablet og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på din tablet eller tab af data, der kan skyldes brug af appen."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Dit fjernsyn og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på dit fjernsyn eller tab af data, der kan skyldes brug af appen."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Fortsæt"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Indstillinger"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installerer/afinstallerer Wear-apps"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 077d587d..627ba64a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Abbrechen"</string>
<string name="unknown" msgid="4742479012767208045">"Unbekannt"</string>
<string name="installing" msgid="8613631001631998372">"Wird installiert..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> wird installiert…"</string>
<string name="install_done" msgid="3682715442154357097">"App wurde installiert."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Möchtest du diese App installieren? Sie erhält dann folgende Berechtigungen:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Möchtest du diese App installieren? Sie benötigt keinen besonderen Zugriff."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Möchtest du ein Update für diese integrierte App installieren? Deine vorhandenen Daten bleiben erhalten. Die App benötigt keine besonderen Zugriffsrechte."</string>
<string name="install_failed" msgid="6579998651498970899">"App wurde nicht installiert."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Die Installation des Pakets wurde blockiert."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Das Paket steht in Konflikt mit einem bestehenden Paket mit demselben Namen."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Diese App ist nicht mit deinem Tablet kompatibel."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Die App wurde nicht installiert, da das Paket in Konflikt mit einem bestehenden Paket steht."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Die App wurde nicht installiert, da sie nicht mit deinem Tablet kompatibel ist."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Diese App ist nicht mit deinem Fernseher kompatibel."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Diese App ist nicht mit deinem Telefon kompatibel."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Das Paket ist offenbar beschädigt."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Die App wurde nicht installiert, da sie nicht mit deinem Smartphone kompatibel ist."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Die App wurde nicht installiert, da das Paket offenbar ungültig ist."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> konnte nicht auf deinem Tablet installiert werden."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> konnte nicht auf deinem Fernseher installiert werden."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> konnte nicht auf deinem Telefon installiert werden."</string>
<string name="launch" msgid="4826921505917605463">"Öffnen"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Aus Sicherheitsgründen kannst du auf deinem Tablet keine Apps von unbekannten Quellen installieren."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Aus Sicherheitsgründen kannst du auf dem Fernseher keine Apps von unbekannten Quellen installieren."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Aus Sicherheitsgründen kannst du auf deinem Telefon keine Apps von unbekannten Quellen installieren."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Dein Administrator erlaubt die Installation von Apps aus unbekannten Quellen nicht."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Dein Administrator lässt keine Installationen von Apps aus unbekannten Quellen zu"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Dieser Nutzer darf keine unbekannten Apps installieren"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Einstellungen"</string>
<string name="manage_applications" msgid="4033876279091996596">"Apps verwalten"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"App nicht gefunden"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Die App wurde nicht in der Liste der installierten Apps gefunden."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Keine Berechtigung"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Der aktuelle Nutzer ist nicht dazu berechtigt, diese Deinstallation auszuführen."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Fehler"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"App konnte nicht deinstalliert werden."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"App deinstallieren"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Update deinstallieren"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> gehört zu folgender App:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Möchtest du diese App für den Nutzer <xliff:g id="USERNAME">%1$s</xliff:g> deinstallieren?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Diese App durch die Werksversion ersetzen? Alle Daten werden entfernt."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Diese App durch die Werksversion ersetzen? Alle Daten werden entfernt. Dies betrifft alle Nutzer des Geräts, einschließlich Arbeitsprofilen."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Laufende Deinstallationen"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Fehlgeschlagene Deinstallationen"</string>
<string name="uninstalling" msgid="5556217435895938250">"Wird deinstalliert..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> wird deinstalliert…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Deinstallation abgeschlossen"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> deinstalliert"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Deinstallation fehlgeschlagen"</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Deinstallation nicht möglich: Dieses Paket ist ein aktiver Geräteadministrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Deinstallation nicht möglich, Paket ist ein aktiver Geräteadministrator für <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Deinstallation von <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> fehlgeschlagen."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktive Apps zur Geräteverwaltung können nicht deinstalliert werden"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Die aktive App zur Geräteverwaltung kann nicht für <xliff:g id="USERNAME">%1$s</xliff:g> deinstalliert werden"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Diese App wird für einige Nutzer oder Profile benötigt und wurde für andere deinstalliert"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Diese App wird für dein Profil benötigt und kann nicht deinstalliert werden."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Die App wurde als obligatorisch festgelegt und kann nicht deinstalliert werden."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Geräteadministratoren verwalten"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Apps zur Geräteverwaltung"</string>
<string name="manage_users" msgid="3125018886835668847">"Nutzer verwalten"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> konnte nicht deinstalliert werden."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Beim Parsen des Pakets ist ein Problem aufgetreten."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Für dieses Update sind keine neuen Berechtigungen erforderlich."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Möchtest du die folgenden Berechtigungen gewähren? Sie ermöglichen den Zugriff auf Folgendes:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Ablehnen"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Weitere Informationen"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Trotzdem ablehnen"</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="7332275268559121742">"Zulassen, dass die App &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g> darf?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> deaktiviert"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"Alle deaktiviert"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"Keine deaktiviert"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Zulassen"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"App-Berechtigungen"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Von Android Wear nicht unterstützte Aktionen installieren/deinstallieren."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> wurde aktualisiert. Darf <xliff:g id="APP_NAME_1">%1$s</xliff:g> auf folgende Berechtigungen zugreifen?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Worauf darf <xliff:g id="APP_NAME">%1$s</xliff:g> zugreifen?"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> wurde aktualisiert. Worauf darf diese App zugreifen?"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Worauf darf die App &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; zugreifen?"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Die App &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; wurde aktualisiert. Worauf darf diese App zugreifen?"</string>
<string name="review_button_cancel" msgid="957906817733578877">"Abbrechen"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Weiter"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Neue Berechtigungen"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktuelle Berechtigungen"</string>
<string name="message_staging" msgid="6151794817691100003">"App wird vorbereitet…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Unbekannt"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Aus Sicherheitsgründen kannst du auf dem Tablet keine unbekannten Apps aus dieser Quelle installieren."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Aus Sicherheitsgründen kannst du auf dem Fernseher keine unbekannten Apps aus dieser Quelle installieren."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Aus Sicherheitsgründen kannst du auf dem Smartphone keine unbekannten Apps aus dieser Quelle installieren."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Unbekannte Apps können gefährlich für dein Smartphone und deine personenbezogenen Daten sein. Indem du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Smartphone und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Unbekannte Apps können gefährlich für dein Tablet und deine personenbezogenen Daten sein. Indem du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Tablet und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Unbekannte Apps können gefährlich für deinen Fernseher und deine personenbezogenen Daten sein. Indem du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Fernseher und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Weiter"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Einstellungen"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear-Apps installieren/deinstallieren"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ad4c3e24..b15a77d2 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Ακύρωση"</string>
<string name="unknown" msgid="4742479012767208045">"Άγνωστο"</string>
<string name="installing" msgid="8613631001631998372">"Εγκατάσταση..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Εγκατάσταση <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Θέλετε να εγκαταστήσετε μια ενημέρωση για αυτήν την ενσωματωμένη εφαρμογή; Τα υπάρχοντα δεδομένα σας δεν θα χαθούν. Δεν απαιτείται ειδική πρόσβαση."</string>
<string name="install_failed" msgid="6579998651498970899">"Η εφαρμογή δεν έχει εγκατασταθεί."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Η εγκατάσταση του πακέτου αποκλείστηκε."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Παρουσιάζεται διένεξη του πακέτου με ένα υπάρχον πακέτο με το ίδιο όνομα."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Αυτή η εφαρμογή δεν είναι συμβατή με το tablet σας."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Η εφαρμογή δεν έχει εγκατασταθεί, επειδή το πακέτο έρχεται σε διένεξη με κάποιο υπάρχον πακέτο."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Η εφαρμογή δεν έχει εγκατασταθεί, επειδή δεν είναι συμβατή με το tablet που χρησιμοποιείτε."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Αυτή η εφαρμογή δεν είναι συμβατή με την τηλεόρασή σας."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Αυτή η εφαρμογή δεν είναι συμβατή με το τηλέφωνό σας."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Το πακέτο ενδέχεται να είναι κατεστραμμένο."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Η εφαρμογή δεν έχει εγκατασταθεί, επειδή δεν είναι συμβατή με το τηλέφωνό σας."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Η εφαρμογή δεν έχει εγκατασταθεί, επειδή φαίνεται ότι το πακέτο δεν είναι έγκυρο."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Δεν ήταν δυνατή η εγκατάσταση της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g> στο tablet σας."</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_text" product="tablet" msgid="7504186369474734767">"Για λόγους ασφαλείας, το tablet σας έχει ρυθμιστεί να αποκλείει την εγκατ. εφαρμ. από άγν. πηγές."</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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Ο διαχειριστής σας δεν επιτρέπει την εγκατάσταση εφαρμογών που προέρχονται από άγνωστες πηγές"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Δεν είναι δυνατή η εγκατάσταση άγνωστων εφαρμογών από αυτόν τον χρήστη"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Ρυθμίσεις"</string>
<string name="manage_applications" msgid="4033876279091996596">"Διαχείριση εφαρμογών"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Δεν βρέθηκε εφαρμογή"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Η εφαρμογή δεν βρέθηκε στη λίστα με τις εγκατεστημένες εφαρμογές."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Δεν επιτρέπεται"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Δεν επιτρέπεται στον τρέχοντα χρήση να εκτελέσει την απεγκατάσταση."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Σφάλμα"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Δεν ήταν δυνατή η απεγκατάσταση της εφαρμογής."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Θέλετε να καταργήσετε την εγκατάσταση αυτής της εφαρμογής για το χρήστη <xliff:g id="USERNAME">%1$s</xliff:g>;"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Αντικατάσταση αυτής της εφαρμογής με την εργοστασιακή έκδοση; Όλα τα δεδομένα θα καταργηθούν."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Αντικατάσταση αυτής της εφαρμογής με την εργοστασιακή έκδοση; Όλα τα δεδομένα θα καταργηθούν. Αυτό επηρεάζει όλους τους χρήστες της συσκευής, συμπεριλαμβανομένων και αυτών με προφίλ εργασίας."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Απεγκαταστάσεις σε εξέλιξη"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Αποτυχημένες απεγκαταστάσεις"</string>
<string name="uninstalling" msgid="5556217435895938250">"Κατάργηση εγκατάστασης..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Απεγκατάσταση <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Η κατάργηση εγκατάστασης ολοκληρώθηκε."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Απεγκαταστάθηκε <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"Επιτυχής απεγκατάσταση <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Η κατάργ. εγκατάστ. της ενεργούς εφαρμογής διαχείρισης συσκευής δεν είναι δυνατή"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Η κατάργ. εγκατάστασης της ενεργούς εφαρμογής διαχείρισης συσκευής για τον χρήστη <xliff:g id="USERNAME">%1$s</xliff:g> δεν είναι δυνατή"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Η εφαρμογή απαιτείται για κάποιους χρήστες/προφίλ και απεγκαταστήθηκε για άλλους"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Αυτή η εφαρμογή απαιτείται για το προφίλ σας και δεν είναι δυνατή η απεγκατάστασή της."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Η εφαρμογή απαιτείται από το διαχειριστή και δεν είναι δυνατή η απεγκατάσταση."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Διαχείριση διαχειριστών συσκευής"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Διαχείριση εφαρμογών διαχείρισης συσκευής"</string>
<string name="manage_users" msgid="3125018886835668847">"Διαχείριση χρηστών"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Δεν ήταν δυνατή η κατάργηση της εγκατάστασης της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Παρουσιάστηκε ένα πρόβλημα κατά την ανάλυση του πακέτου."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Αυτή η ενημέρωση δεν απαιτεί νέες άδειες."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Θέλετε να εκχωρήσετε τα ακόλουθα δικαιώματα; Συνεπάγεται πρόσβαση σε:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Απόρριψη"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Περισσότερες πληροφορίες"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Απόρριψη"</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="7332275268559121742">"Να επιτρέπεται στην εφαρμογή &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; να <xliff:g id="ACTION">%2$s</xliff:g>;"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"έχουν απενεργοποιηθεί <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"έχουν απενεργοποιηθεί όλες"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"δεν έχει απενεργοποιηθεί καμία"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Να επιτρέπεται"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Εφαρμογές"</string>
<string name="app_permissions" msgid="3146758905824597178">"Δικαιώματα εφ/γών"</string>
@@ -102,7 +114,7 @@
<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="menu_hide_system" msgid="7595471742649432977">"Απόκρυψη συστήματος"</string>
- <string name="permission_title" msgid="6495415273398916381">"Δικαιώματα <xliff:g id="PERMISSION">%1$s</xliff:g>"</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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Οι ενέργειες εγκατάστασης/απεγκατάστασης δεν υποστηρίζονται στο Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Η εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> έχει ενημερωθεί. Να επιτρέπεται στην εφαρμογή <xliff:g id="APP_NAME_1">%1$s</xliff:g> να έχει πρόσβαση στα παρακάτω;"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Επιλέξτε το περιεχόμενο στο οποίο θέλετε να επιτρέψετε την πρόσβαση της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> έχει ενημερωθεί. Επιλέξτε το περιεχόμενο στο οποίο θέλετε να επιτρέψετε την πρόσβαση αυτής της εφαρμογής."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Επιλέξτε σε τι θα έχει πρόσβαση η εφαρμογή &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Η εφαρμογή &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ενημερώθηκε. Επιλέξτε σε τι θα έχει πρόσβαση αυτή η εφαρμογή."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Ακύρωση"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Συνέχεια"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Νέες άδειες"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Τρέχουσες άδειες"</string>
<string name="message_staging" msgid="6151794817691100003">"Σταδιακή διάθεση εφαρμογής…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Άγνωστη"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στο tablet σας."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στην τηλεόρασή σας."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στο τηλέφωνό σας."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Το τηλέφωνό σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για οποιαδήποτε ζημιά στο τηλέφωνο ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Το tablet σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για οποιαδήποτε ζημιά στο tablet ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Η τηλεόρασή σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για οποιαδήποτε ζημιά στην τηλεόρασή ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Συνέχεια"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ρυθμίσεις"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Εγκατάσταση/απεγκατάσταση εφαρμογών Wear"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index aa3486f2..71fc0165 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancel"</string>
<string name="unknown" msgid="4742479012767208045">"Unknown"</string>
<string name="installing" msgid="8613631001631998372">"Installing…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"App installed."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Do you want to install this application? It will get access to:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Do you want to install this application? It does not require any special access."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Do you want to install an update to this built-in application? Your existing data will not be lost. It does not require any special access."</string>
<string name="install_failed" msgid="6579998651498970899">"App not installed."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"The package was blocked from being installed."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"The package conflicts with an existing package by the same name."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"This app isn\'t compatible with your tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App not installed as package conflicts with an existing package."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App not installed as app isn\'t compatible with your tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"This app isn\'t compatible with your TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"This app isn\'t compatible with your phone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"The package appears to be corrupt."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App not installed as app isn\'t compatible with your phone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App not installed as package appears to be invalid."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your phone."</string>
<string name="launch" msgid="4826921505917605463">"Open"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"For security, your tablet is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"For security, your TV is set to block installations of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"For security, your phone is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Your administrator doesn\'t allow installation of apps obtained from unknown sources."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Your admin doesn\'t allow installation of apps obtained from unknown sources"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Unknown apps can\'t be installed by this user"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Settings"</string>
<string name="manage_applications" msgid="4033876279091996596">"Manage apps"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"App not found"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"The app wasn\'t found in the list of installed apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Not allowed"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"The current user is not allowed to perform this uninstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"App could not be uninstalled."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Uninstall app"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Uninstall update"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> is part of the following app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Do you want to uninstall this app for the user <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Replace this app with the factory version? All data will be removed."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Replace this app with the factory version? All data will be removed. This affects all users of this device, including those with work profiles."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Running uninstalls"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Failed uninstalls"</string>
<string name="uninstalling" msgid="5556217435895938250">"Uninstalling…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Uninstalled <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Uninstall unsuccessful."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Can\'t uninstall because this package is an active device administrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Can\'t uninstall because this package is an active device administrator for the user <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> unsuccessful."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Can\'t uninstall active device admin app"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Can\'t uninstall active device admin app for <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"This app is required for some users or profiles and was uninstalled for others"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"This app is needed for your profile and can\'t be uninstalled."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"This app is required by your device administrator and can\'t be uninstalled."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Manage device administrators"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Manage device admin apps"</string>
<string name="manage_users" msgid="3125018886835668847">"Manage users"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"There was a problem while parsing the package."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"This update requires no new permissions."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Do you want to grant the following permissions? It will get access to:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"More info"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Deny anyway"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> of <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> disabled"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"all disabled"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"none disabled"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Allow"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Install/Uninstall actions not supported on Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> has been updated. Allow <xliff:g id="APP_NAME_1">%1$s</xliff:g> to access the following?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Choose what to allow <xliff:g id="APP_NAME">%1$s</xliff:g> to access"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> has been updated. Choose what to allow this app to access."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Choose what to allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to access"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; has been updated. Choose what to allow this app to access."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancel"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continue"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"New permissions"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Current permissions"</string>
<string name="message_staging" msgid="6151794817691100003">"Staging app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Unknown"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"For your security, your TV is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continue"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Settings"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installing/uninstalling Wear apps"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index aa3486f2..71fc0165 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancel"</string>
<string name="unknown" msgid="4742479012767208045">"Unknown"</string>
<string name="installing" msgid="8613631001631998372">"Installing…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"App installed."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Do you want to install this application? It will get access to:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Do you want to install this application? It does not require any special access."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Do you want to install an update to this built-in application? Your existing data will not be lost. It does not require any special access."</string>
<string name="install_failed" msgid="6579998651498970899">"App not installed."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"The package was blocked from being installed."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"The package conflicts with an existing package by the same name."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"This app isn\'t compatible with your tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App not installed as package conflicts with an existing package."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App not installed as app isn\'t compatible with your tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"This app isn\'t compatible with your TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"This app isn\'t compatible with your phone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"The package appears to be corrupt."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App not installed as app isn\'t compatible with your phone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App not installed as package appears to be invalid."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your phone."</string>
<string name="launch" msgid="4826921505917605463">"Open"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"For security, your tablet is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"For security, your TV is set to block installations of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"For security, your phone is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Your administrator doesn\'t allow installation of apps obtained from unknown sources."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Your admin doesn\'t allow installation of apps obtained from unknown sources"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Unknown apps can\'t be installed by this user"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Settings"</string>
<string name="manage_applications" msgid="4033876279091996596">"Manage apps"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"App not found"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"The app wasn\'t found in the list of installed apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Not allowed"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"The current user is not allowed to perform this uninstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"App could not be uninstalled."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Uninstall app"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Uninstall update"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> is part of the following app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Do you want to uninstall this app for the user <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Replace this app with the factory version? All data will be removed."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Replace this app with the factory version? All data will be removed. This affects all users of this device, including those with work profiles."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Running uninstalls"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Failed uninstalls"</string>
<string name="uninstalling" msgid="5556217435895938250">"Uninstalling…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Uninstalled <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Uninstall unsuccessful."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Can\'t uninstall because this package is an active device administrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Can\'t uninstall because this package is an active device administrator for the user <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> unsuccessful."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Can\'t uninstall active device admin app"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Can\'t uninstall active device admin app for <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"This app is required for some users or profiles and was uninstalled for others"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"This app is needed for your profile and can\'t be uninstalled."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"This app is required by your device administrator and can\'t be uninstalled."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Manage device administrators"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Manage device admin apps"</string>
<string name="manage_users" msgid="3125018886835668847">"Manage users"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"There was a problem while parsing the package."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"This update requires no new permissions."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Do you want to grant the following permissions? It will get access to:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"More info"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Deny anyway"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> of <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> disabled"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"all disabled"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"none disabled"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Allow"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Install/Uninstall actions not supported on Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> has been updated. Allow <xliff:g id="APP_NAME_1">%1$s</xliff:g> to access the following?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Choose what to allow <xliff:g id="APP_NAME">%1$s</xliff:g> to access"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> has been updated. Choose what to allow this app to access."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Choose what to allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to access"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; has been updated. Choose what to allow this app to access."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancel"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continue"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"New permissions"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Current permissions"</string>
<string name="message_staging" msgid="6151794817691100003">"Staging app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Unknown"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"For your security, your TV is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continue"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Settings"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installing/uninstalling Wear apps"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index aa3486f2..71fc0165 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancel"</string>
<string name="unknown" msgid="4742479012767208045">"Unknown"</string>
<string name="installing" msgid="8613631001631998372">"Installing…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"App installed."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Do you want to install this application? It will get access to:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Do you want to install this application? It does not require any special access."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Do you want to install an update to this built-in application? Your existing data will not be lost. It does not require any special access."</string>
<string name="install_failed" msgid="6579998651498970899">"App not installed."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"The package was blocked from being installed."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"The package conflicts with an existing package by the same name."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"This app isn\'t compatible with your tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App not installed as package conflicts with an existing package."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App not installed as app isn\'t compatible with your tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"This app isn\'t compatible with your TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"This app isn\'t compatible with your phone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"The package appears to be corrupt."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App not installed as app isn\'t compatible with your phone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App not installed as package appears to be invalid."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed on your phone."</string>
<string name="launch" msgid="4826921505917605463">"Open"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"For security, your tablet is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"For security, your TV is set to block installations of apps obtained from unknown sources."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"For security, your phone is set to block installation of apps obtained from unknown sources."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Your administrator doesn\'t allow installation of apps obtained from unknown sources."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Your admin doesn\'t allow installation of apps obtained from unknown sources"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Unknown apps can\'t be installed by this user"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Settings"</string>
<string name="manage_applications" msgid="4033876279091996596">"Manage apps"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"App not found"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"The app wasn\'t found in the list of installed apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Not allowed"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"The current user is not allowed to perform this uninstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"App could not be uninstalled."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Uninstall app"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Uninstall update"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> is part of the following app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Do you want to uninstall this app for the user <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Replace this app with the factory version? All data will be removed."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Replace this app with the factory version? All data will be removed. This affects all users of this device, including those with work profiles."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Running uninstalls"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Failed uninstalls"</string>
<string name="uninstalling" msgid="5556217435895938250">"Uninstalling…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Uninstalled <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Uninstall unsuccessful."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Can\'t uninstall because this package is an active device administrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Can\'t uninstall because this package is an active device administrator for the user <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Uninstalling <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> unsuccessful."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Can\'t uninstall active device admin app"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Can\'t uninstall active device admin app for <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"This app is required for some users or profiles and was uninstalled for others"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"This app is needed for your profile and can\'t be uninstalled."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"This app is required by your device administrator and can\'t be uninstalled."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Manage device administrators"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Manage device admin apps"</string>
<string name="manage_users" msgid="3125018886835668847">"Manage users"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"There was a problem while parsing the package."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"This update requires no new permissions."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Do you want to grant the following permissions? It will get access to:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"More info"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Deny anyway"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> of <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> disabled"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"all disabled"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"none disabled"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Allow"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Install/Uninstall actions not supported on Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> has been updated. Allow <xliff:g id="APP_NAME_1">%1$s</xliff:g> to access the following?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Choose what to allow <xliff:g id="APP_NAME">%1$s</xliff:g> to access"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> has been updated. Choose what to allow this app to access."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Choose what to allow &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; to access"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; has been updated. Choose what to allow this app to access."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancel"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continue"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"New permissions"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Current permissions"</string>
<string name="message_staging" msgid="6151794817691100003">"Staging app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Unknown"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"For your security, your TV is not allowed to install unknown apps from this source."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continue"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Settings"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installing/uninstalling Wear apps"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index fedbe451..120c3301 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Desconocido"</string>
<string name="installing" msgid="8613631001631998372">"Instalando…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Se instaló la aplicación."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"¿Deseas instalar la aplicación? Esta tendrá acceso a lo siguiente:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"¿Deseas instalar esta aplicación? No requiere accesos especiales."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"¿Quieres instalar una actualización de esta aplicación integrada? Los datos existentes no se perderán. No se requiere ningún acceso especial."</string>
<string name="install_failed" msgid="6579998651498970899">"No se instaló la aplicación."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Se bloqueó el paquete para impedir la instalación."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"El paquete está en conflicto con otro paquete existente que tiene el mismo nombre."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Esta app no es compatible con la tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"No se instaló la app ya que está en conflicto con un paquete existente."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"No se instaló la app porque no es compatible con tu tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Esta app no es compatible con la TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Esta app no es compatible con el teléfono."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que el paquete está dañado."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"No se instaló la app porque no es compatible con tu teléfono."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"No se instaló la app porque parece que el paquete no es válido."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"No se pudo instalar <xliff:g id="APP_NAME">%1$s</xliff:g> en tu tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"No se pudo instalar <xliff:g id="APP_NAME">%1$s</xliff:g> en la TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"No se pudo instalar <xliff:g id="APP_NAME">%1$s</xliff:g> en tu dispositivo."</string>
<string name="launch" msgid="4826921505917605463">"Abrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Tu tablet se configuró para bloquear la instalación de aplicaciones de fuentes desconocidas."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por seguridad, la TV se configuró para bloquear instalación de aplicaciones de fuentes desconocidas."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Tu dispositivo se configuró para bloquear la instalación de aplicaciones de fuentes desconocidas."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"El administrador no permite la instalación de aplicaciones que se obtuvieron de fuentes desconocidas."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Tu administrador no permite la instalación de apps que se obtuvieron de fuentes desconocidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Este usuario no puede instalar apps desconocidas"</string>
<string name="ok" msgid="3468756155452870475">"Aceptar"</string>
<string name="settings" msgid="6743583734099755409">"Configuración"</string>
<string name="manage_applications" msgid="4033876279091996596">"Administrar aplicaciones"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Aceptar"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"No se encontró la aplicación."</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"La aplicación no se encontró en la lista de aplicaciones instaladas."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"No tiene permiso"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"El usuario actual no tiene permiso para llevar a cabo esta desinstalación."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"No se pudo desinstalar la app."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar la aplicación"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalar la actualización"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> es parte de la siguiente aplicación:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"¿Deseas desinstalar esta aplicación para el usuario <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"¿Deseas reemplazar esta app con la versión de fábrica? Se quitarán todos los datos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"¿Deseas reemplazar esta app con la versión de fábrica? Se quitarán todos los datos. Esta acción afectará a todos los usuarios de este dispositivo, incluidos los que poseen perfiles de trabajo."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Desinstalaciones activas"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Desinstalaciones con errores"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalando…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Desinstalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"La desinstalación finalizó."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Se desinstaló <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstalación incorrecta"</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"No se puede desinstalar este paquete porque es un admin. de dispositivos activo."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"No se puede desinstalar este paquete porque es un admin. de disp. activo para <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"No se pudo desinstalar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"No se puede desinstalar la app de administración activa del dispositivo"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"No se puede desinstalar la app de administración activa del dispositivo para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"App necesaria en algunos usuarios o perfiles, y desinstalada en otros"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Esta app es necesaria en tu perfil y no la puedes desinstalar."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"El admin. del dispositivo necesita esta aplicación y no se puede desinstalar."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Administrar los administradores de dispositivos"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Administrar apps del dispositivo del administrador"</string>
<string name="manage_users" msgid="3125018886835668847">"Administrar usuarios"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"No se pudo desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Se produjo un error durante el análisis del paquete."</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"Esta actualización no requiere permisos nuevos."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"¿Quieres conceder los permisos indicados a continuación? Esto dará acceso a:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rechazar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Más información"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Denegar de todos modos"</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="7332275268559121742">"¿Quieres que &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; realice la siguiente acción: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"¿Quieres que la app de &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; realice la siguiente acción: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> inhabilitados"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todos inhabilitados"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ninguno inhabilitado"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicaciones"</string>
- <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicaciones"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisos de apps"</string>
<string name="never_ask_again" msgid="1089938738199748687">"No volver a preguntar"</string>
<string name="no_permissions" msgid="3210542466245591574">"Sin permisos"</string>
<string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionales"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear no admite las acciones de instalación y desinstalación"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Se actualizó <xliff:g id="APP_NAME_0">%1$s</xliff:g>. ¿Deseas otorgar los siguientes permisos de acceso a <xliff:g id="APP_NAME_1">%1$s</xliff:g>?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Selecciona los permisos de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Se actualizó <xliff:g id="APP_NAME">%1$s</xliff:g>. Selecciona los permisos de acceso para esta app."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Selecciona los permisos de acceso para &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Se actualizó &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Selecciona los permisos de acceso para esta app."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Permisos nuevos"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permisos actuales"</string>
<string name="message_staging" msgid="6151794817691100003">"Preparando app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconocido"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Por tu seguridad, tu tablet no tiene permitido instalar apps desconocidas de esta fuente."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Por tu seguridad, tu TV no tiene permitido instalar apps desconocidas de esta fuente."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Por tu seguridad, tu teléfono no tiene permitido instalar apps desconocidas de esta fuente."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Tu teléfono y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra tu teléfono y la pérdida de datos que pueda ocasionar su uso."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tu tablet y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra tu tablet y la pérdida de datos que pueda ocasionar su uso."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Tu TV y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra tu TV y la pérdida de datos que pueda ocasionar su uso."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Configuración"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalando/desinstalando apps para Wear"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 15e3b8af..7afcc111 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Desconocida"</string>
<string name="installing" msgid="8613631001631998372">"Instalando…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplicación instalada"</string>
<string name="install_confirm_question" msgid="7295206719219043890">"¿Quieres instalar esta aplicación? Tendrá los siguientes permisos:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"¿Quieres instalar esta aplicación? No requiere accesos especiales."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"¿Quieres instalar una actualización de esta aplicación integrada? Tus datos no se perderán. No requiere ningún acceso especial."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplicación no instalada"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Se ha bloqueado la instalación del paquete."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Existe un conflicto entre el paquete y otro paquete con el mismo nombre."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Esta aplicación no es compatible con el tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"La aplicación no se ha instalado debido a un conflicto con un paquete actual."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"La aplicación no se ha instalado porque no es compatible con tu tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Esta aplicación no es compatible con tu TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Esta aplicación no es compatible con el teléfono."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que el paquete está dañado."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"La aplicación no se ha instalado porque no es compatible con tu teléfono."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"La aplicación no se ha instalado porque parece que el paquete no es válido."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"No se ha podido instalar <xliff:g id="APP_NAME">%1$s</xliff:g> en el tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> no se ha podido instalar en tu TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"No se ha podido instalar <xliff:g id="APP_NAME">%1$s</xliff:g> en el teléfono."</string>
<string name="launch" msgid="4826921505917605463">"Abrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Por seguridad, el tablet se ha configurado para bloquear aplicaciones de orígenes desconocidos."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por razones de seguridad, tu TV esta configurada para bloquear la instalación de aplicaciones procedentes de fuentes desconocidas."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Por seguridad, el teléfono se ha configurado para bloquear aplicaciones de orígenes desconocidos."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Tu administrador no permite la instalación de aplicaciones obtenidas de fuentes desconocidas."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"El administrador no permite instalar aplicaciones de fuentes desconocidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Este usuario no puede instalar aplicaciones desconocidas"</string>
<string name="ok" msgid="3468756155452870475">"Aceptar"</string>
<string name="settings" msgid="6743583734099755409">"Ajustes"</string>
<string name="manage_applications" msgid="4033876279091996596">"Administrar aplicaciones"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Aceptar"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplicación no encontrada"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"No se ha encontrado la aplicación en la lista de aplicaciones instaladas."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"No permitido"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"El usuario actual no puede iniciar el proceso de desinstalación."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"No se ha podido desinstalar la aplicación."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar aplicación"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalar actualización"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> forma parte de esta aplicación:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"¿Quieres desinstalar esta aplicación para el usuario <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"¿Quieres sustituir esta aplicación con la versión de fábrica? Ten en cuenta que se eliminarán todos los datos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"¿Quieres sustituir esta aplicación con la versión de fábrica? Ten en cuenta que se eliminarán todos los datos. Esto afecta a todos los usuarios del dispositivo, incluidos los que tienen perfiles de trabajo."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Desinstalaciones en curso"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Desinstalaciones fallidas"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalando..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Desinstalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalación completada"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Se ha desinstalado <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstalación correcta"</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"No se puede desinstalar porque este paquete es un administrador de dispositivos activo."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"No se puede instalar porque este paquete es un administrador de dispositivos activos para el usuario <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"No se ha podido desinstalar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"No se puede desinstalar la aplicación de administración de dispositivos activa"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"No se ha podido desinstalar la aplicación de administración de dispositivos activa de <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Aplicación necesaria para algunos usuarios o perfiles y desinstalada en otros casos"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Esta aplicación es necesaria para tu perfil y no se puede desinstalar."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Esta aplicación es necesaria para el administrador de tu dispositivo y no se puede desinstalar."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gestionar administradores de dispositivos"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gestionar aplicaciones de admón. de dispositivos"</string>
<string name="manage_users" msgid="3125018886835668847">"Administrar usuarios"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"No se ha podido desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Se ha producido un error al analizar el paquete."</string>
@@ -83,10 +91,14 @@
<string name="devicePerms" msgid="6733560207731294504">"Acceso al dispositivo"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Esta actualización no requiere permisos nuevos."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"¿Quieres conceder los siguientes permisos? Podrá acceder a:"</string>
- <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rechazar"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denegar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Más información"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Denegar de todos modos"</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="7332275268559121742">"¿Permitir a &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Inhabilitados: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todos inhabilitados"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ninguno inhabilitado"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicaciones"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicaciones"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Las acciones de instalar y desinstalar no pueden realizarse en Wear"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> se ha actualizado. ¿Quieres conceder a <xliff:g id="APP_NAME_1">%1$s</xliff:g> los siguientes permisos de acceso?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Elige los permisos de acceso que quieres conceder a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> se ha actualizado. Elige los permisos de acceso que quieres conceder a esta aplicación."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Elige los permisos de acceso que quieres conceder a &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; se ha actualizado. Elige los permisos de acceso que quieres conceder a esta aplicación."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Permisos nuevos"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permisos actuales"</string>
<string name="message_staging" msgid="6151794817691100003">"Preparando aplicación…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconocido"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Por motivos de seguridad, tu tablet no puede instalar aplicaciones desconocidas de esta fuente."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Por motivos de seguridad, tu TV no puede instalar aplicaciones desconocidas de esta fuente."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Por motivos de seguridad, tu teléfono no puede instalar aplicaciones desconocidas de esta fuente."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Tu teléfono y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu teléfono o la pérdida de datos que se pueda derivar de su uso."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tu tablet y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu tablet o la pérdida de datos que se pueda derivar de su uso."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Tu TV y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu TV o la pérdida de datos que se pueda derivar de su uso."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ajustes"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalando/desinstalando apps para Wear"</string>
</resources>
diff --git a/res/values-et-rEE-television/strings.xml b/res/values-et-television/strings.xml
index b1e2a37c..2ee43178 100644
--- a/res/values-et-rEE-television/strings.xml
+++ b/res/values-et-television/strings.xml
@@ -20,9 +20,9 @@
<string name="grant_dialog_how_to_change" msgid="615414835189256888">"Saate seda hiljem muuta jaotises Seaded &gt; 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>
- <string name="app_permissions_decor_title" msgid="1461057434211920209">"Rakenduse load"</string>
- <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Rakenduse load"</string>
- <string name="permission_apps_decor_title" msgid="3644363529649579576">"Üksuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
+ <string name="app_permissions_decor_title" msgid="1461057434211920209">"Rakenduste load"</string>
+ <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Rakenduste load"</string>
+ <string name="permission_apps_decor_title" msgid="3644363529649579576">"Teenuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
<string name="additional_permissions_decor_title" msgid="7000432624396037882">"Lisaload"</string>
- <string name="system_apps_decor_title" msgid="5292119639812561805">"Üksuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
+ <string name="system_apps_decor_title" msgid="5292119639812561805">"Teenuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
</resources>
diff --git a/res/values-et-rEE-watch/strings.xml b/res/values-et-watch/strings.xml
index 328e2150..328e2150 100644
--- a/res/values-et-rEE-watch/strings.xml
+++ b/res/values-et-watch/strings.xml
diff --git a/res/values-et-rEE/strings.xml b/res/values-et/strings.xml
index 9bb98602..26f7b4af 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Tühista"</string>
<string name="unknown" msgid="4742479012767208045">"Tundmatu"</string>
<string name="installing" msgid="8613631001631998372">"Installimine ..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Paketi <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installimine …"</string>
<string name="install_done" msgid="3682715442154357097">"Rakendus on installitud."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Kas soovite rakenduse installida? See pääseb järgmiste üksuste juurde:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Kas soovite rakenduse installida? See ei nõua spetsiaalseid juurdepääsuõigusi."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Kas soovite installida sisseehitatud rakenduse värskenduse? Olemasolevad andmed ei lähe kaduma. See ei nõua erijuurdepääsu."</string>
<string name="install_failed" msgid="6579998651498970899">"Rakendus pole installitud."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paketi installimine blokeeriti."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakett on vastuolus olemasoleva paketiga, millel on sama nimi."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Rakendus ei ühildu teie tahvelarvutiga."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Rakendust ei installitud, kuna pakett on olemasoleva paketiga vastuolus."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Rakendust ei installitud, kuna rakendus ei ühildu teie tahvelarvutiga."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Rakendus ei ühildu teie teleriga."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Rakendus ei ühildu teie telefoniga."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pakett tundub olevat rikutud."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Rakendust ei installitud, kuna rakendus ei ühildu teie telefoniga."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Rakendust ei installitud, kuna pakett näib olevat sobimatu."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> ei saa teie tahvelarvutisse installida."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> ei saa teie telerisse installida."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> ei saa teie telefoni installida."</string>
<string name="launch" msgid="4826921505917605463">"Ava"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Turvalisuse eesmärgil blokeerib tahvelarvuti tundmatutest allikatest pärit rakenduste installimise."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Turvakaalutlustel on teleris blokeeritud tundmatutest allikatest pärinevate rakenduste installimine."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Turvalisuse eesmärgil blokeerib telefon tundmatutest allikatest pärit rakenduste installimise."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administraator ei luba installida tundmatutest allikatest pärinevaid rakendusi."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administraator ei luba installida tundmatutest allikatest pärinevaid rakendusi"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"See kasutaja ei saa installida tundmatuid rakendusi"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Seaded"</string>
<string name="manage_applications" msgid="4033876279091996596">"Rakenduste haldamine"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Rakendust ei leitud"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Rakendust ei leitud installitud rakenduste loendist."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ei ole lubatud"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Praegusel kasutajal ei ole lubatud seda desinstallimist teha."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Viga"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Rakendust ei saanud desinstallida."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Rakenduse desinstallimine"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Värskenduse desinstallimine"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> on osa järgmisest rakendusest:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Kas soovite kasutaja <xliff:g id="USERNAME">%1$s</xliff:g> puhul rakenduse desinstallida?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Kas asendada see rakendus tehaseversiooniga? Kõik andmed eemaldatakse."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Kas asendada see rakendus tehaseversiooniga? Kõik andmed eemaldatakse. See mõjutab kõiki seadme kasutajaid, sh neid, kellel on tööprofiilid."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Käimasolevad desinstallimised"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Ebaõnnestunud desinstallimised"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstallimine ..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Üksuse <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> desinstallimine …"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstallimine on lõpetatud."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Üksus <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> on desinstallitud"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstallimine ebaõnnestus."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Ei saa desinstallida, sest pakett on aktiivse seadme administraator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Desinstallida ei saa, sest pakett on kasutaja <xliff:g id="USERNAME">%1$s</xliff:g> aktiivne seadme administraator."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Üksuse <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> desinstallimine ebaõnnestus."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktiivset seadme administraatori rakendust ei saa desinstallida"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Kasutaja <xliff:g id="USERNAME">%1$s</xliff:g> puhul ei saa aktiivset seadme administraatori rakendust desinstallida"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Rakendus on mõne kasutaja ja profiili puhul vajalik, teiste puhul see desinstalliti"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"See rakendus on vajalik teie profiili jaoks ja seda ei saa desinstallida."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Seadme administraator vajab seda rakendust ja seda ei saa desinstallida."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Halda seadme ülemaid"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Halda seadme administraatori rakendusi"</string>
<string name="manage_users" msgid="3125018886835668847">"Halda kasutajaid"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> ei saanud desinstallida."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Probleem paketi sõelumisel."</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"See värskendus ei nõua uusi lube."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Kas soovite anda järgmise loa? See annab juurdepääsu järgmisele:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Keela"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Lisateave"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Keela ikkagi"</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="7332275268559121742">"Kas lubada rakendusel &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> on keelatud"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"kõik on keelatud"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"mitte ükski pole keelatud"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Luba"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Rakendused"</string>
- <string name="app_permissions" msgid="3146758905824597178">"Rakenduse load"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Rakenduste load"</string>
<string name="never_ask_again" msgid="1089938738199748687">"Ä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>
@@ -102,7 +114,7 @@
<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="menu_show_system" msgid="6773743421743728921">"Kuva süsteem"</string>
<string name="menu_hide_system" msgid="7595471742649432977">"Peida süsteem"</string>
- <string name="permission_title" msgid="6495415273398916381">"Üksuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Teenuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
<string name="no_apps" msgid="1965493419005012569">"Rakendusi pole"</string>
<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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ei toeta installimist/desinstallimist."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Rakendust <xliff:g id="APP_NAME_0">%1$s</xliff:g> värskendati. Kas anda rakendusele <xliff:g id="APP_NAME_1">%1$s</xliff:g> juurdepääs järgmisele?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Valige, millele lubate rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> juurde pääseda"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> värskendati. Valige, millele lubate sellel rakendusel juurde pääseda."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Valige, millele lubate rakendusel &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; juurde pääseda"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Rakendust &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; värskendati. Valige, millele lubate sellel rakendusel juurde pääseda."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Tühista"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Jätka"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Uued load"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Praegused load"</string>
<string name="message_staging" msgid="6151794817691100003">"Rakenduse ettevalmistamine …"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Tundmatu"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Teie turvalisuse huvides ei ole tahvelarvutil lubatud installida sellest allikast tundmatuid rakendusi."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Teie turvalisuse huvides ei ole TV-l lubatud installida sellest allikast tundmatuid rakendusi."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Teie turvalisuse huvides ei ole telefonil lubatud installida sellest allikast tundmatuid rakendusi."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Teie telefon ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate telefoni kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Teie tahvelarvuti ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate tahvelarvuti kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Teie teler ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate teleri kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Jätka"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Seaded"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Weari rak. installimine/desinstallimine"</string>
</resources>
diff --git a/res/values-eu-rES-television/strings.xml b/res/values-eu-television/strings.xml
index 907cf7d8..907cf7d8 100644
--- a/res/values-eu-rES-television/strings.xml
+++ b/res/values-eu-television/strings.xml
diff --git a/res/values-eu-rES-watch/strings.xml b/res/values-eu-watch/strings.xml
index 89eb2968..89eb2968 100644
--- a/res/values-eu-rES-watch/strings.xml
+++ b/res/values-eu-watch/strings.xml
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu/strings.xml
index f4a14e7d..2a434d9e 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Utzi"</string>
<string name="unknown" msgid="4742479012767208045">"Ezezaguna"</string>
<string name="installing" msgid="8613631001631998372">"Instalatzen…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> instalatzen…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikazioa instalatu da."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Aplikazioa instalatu nahi duzu? Elementu hauetarako sarbidea izango du:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Aplikazioa instalatu nahi duzu? Ez du sarbide berezirik behar."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Aplikazio integratu honen eguneratzea instalatu nahi duzu? Lehendik dauden datuak ez dira galduko. Ez du sarbide berezirik behar."</string>
<string name="install_failed" msgid="6579998651498970899">"Ez da aplikazioa instalatu."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Blokeatu egin da paketea instalatzeko aukera."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Izen bereko beste pakete batekin gatazkan dago paketea."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Aplikazioa ez da tabletarekin bateragarria."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Ez da instalatu aplikazioa, gatazka bat sortu delako lehendik dagoen pakete batekin."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Ez da instalatu aplikazioa, ez delako tabletarekin bateragarria."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Aplikazioa ez da telebistarekin bateragarria."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Aplikazioa ez da telefonoarekin bateragarria."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paketea hondatuta dagoela dirudi."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Ez da instalatu aplikazioa, ez delako telefonoarekin bateragarria."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Ez da instalatu aplikazioa, paketeak ez duelako balio."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Ezin izan da <xliff:g id="APP_NAME">%1$s</xliff:g> tabletan instalatu."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Ezin izan da instalatu <xliff:g id="APP_NAME">%1$s</xliff:g> telebistan."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Ezin izan da <xliff:g id="APP_NAME">%1$s</xliff:g> telefonoan instalatu."</string>
<string name="launch" msgid="4826921505917605463">"Ireki"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Segurtasuna bermatzeko, iturburu ezezagunetako aplikazioak blokeatzeko dago konfiguratuta tableta."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Segurtasuna bermatzeko, iturburu ezezagunetako aplikazioak blokeatzeko dago konfiguratuta telebista."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Segurtasuna bermatzeko, iturburu ezezagunetako aplikazioak blokeatzeko dago konfiguratuta telefonoa."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratzaileak ez du onartzen iturburu ezezagunetako aplikazioak instalatzea."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratzaileak ez du onartzen iturburu ezezagunetako aplikazioak instalatzea"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Erabiltzaile honek ezin ditu instalatu aplikazio ezezagunak"</string>
<string name="ok" msgid="3468756155452870475">"Ados"</string>
<string name="settings" msgid="6743583734099755409">"Ezarpenak"</string>
<string name="manage_applications" msgid="4033876279091996596">"Kudeatu aplikazioak"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Ados"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Ez da aplikazioa aurkitu"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikazioa ez da aurkitu instalatutako aplikazioen zerrendan."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ez dauka baimenik"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Erabiltzaile honek ez dauka desinstalatzeko baimenik."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Errorea"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Ezin izan da desinstalatu aplikazioa."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalatu aplikazioa"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalatu eguneratzea"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> aplikazio honen zati da:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearen aplikazioa desinstalatu nahi duzu?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Aplikazio hau jatorrizko bertsioarekin ordeztu nahi duzu? Datu guztiak ezabatuko dira."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Aplikazio hau jatorrizko bertsioarekin ordeztu nahi duzu? Datu guztiak ezabatuko dira. Gailuaren erabiltzaile guztiengan izango du eragina, laneko profilak dituztenengan barne."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Abian diren desinstalatze-eragiketak"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Huts egin duten desinstalatze-eragiketak"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalatzen…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> desinstalatzen…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalatu da."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Desinstalatu da <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Ezin izan da desinstalatu."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Ezin izan da desinstalatu paketea gailu-administratzaile aktiboa delako."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Ezin da desinstalatu, pakete hau <xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearen gailu-administratzaile aktiboa delako."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Ezin izan da desinstalatu <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Ezin da desinstalatu gailua administratzeko aplikazio aktiboa"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Ezin da desinstalatu <xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearen gailua administratzeko aplikazio aktiboa"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Erabiltzaile edo profil batzuek behar dute aplikazio hau, baina desinstalatu egin da beste guztientzat."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Zure profilak behar du aplikazio hau eta ezin da desinstalatu."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Gailuaren administratzaileak aplikazio hori behar du eta ezin da desinstalatu."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Kudeatu gailu-administratzaileak"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Kudeatu gailua administratzeko aplikazioak"</string>
<string name="manage_users" msgid="3125018886835668847">"Kudeatu erabiltzaileak"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Ezin izan da <xliff:g id="APP_NAME">%1$s</xliff:g> desinstalatu."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Arazo bat izan da paketea analizatzean."</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"Eguneratze honek ez du baimen berririk behar."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Baimen hauek eman nahi dituzu? Hauetarako sarbidea lortzeko balioko dute:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Ukatu"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Informazio gehiago"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Ukatu hala ere"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; aplikazioari <xliff:g id="ACTION">%2$s</xliff:g> baimena eman nahi diozu?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; aplikazioari \"<xliff:g id="ACTION">%2$s</xliff:g>\" izeneko baimena eman nahi diozu?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> desgaituta"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"guztiak desgaituta"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"guztiak gaituta"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Baimendu"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikazioak"</string>
- <string name="app_permissions" msgid="3146758905824597178">"Aplikaziorako baimenak"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Aplikazio-baimenak"</string>
<string name="never_ask_again" msgid="1089938738199748687">"Ez galdetu berriro"</string>
<string name="no_permissions" msgid="3210542466245591574">"Ez dago baimenik"</string>
<string name="additional_permissions" msgid="6667573114240111763">"Baimen gehigarriak"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Instalatzeko eta desinstalatzeko ekintzak ezin dira gauzatu Wear gailuetan."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Eguneratu egin da <xliff:g id="APP_NAME_0">%1$s</xliff:g>. <xliff:g id="APP_NAME_1">%1$s</xliff:g> hauek atzitzeko gai izatea nahi duzu?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak zer atzi dezakeen"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Eguneratu egin da <xliff:g id="APP_NAME">%1$s</xliff:g>. Aukeratu aplikazioak zer atzi dezakeen."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Aukeratu zer atzi dezakeen &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; aplikazioak"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Eguneratu egin da &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Aukeratu aplikazioak zer atzi dezakeen."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Utzi"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Jarraitu"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Baimen berriak"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Uneko baimenak"</string>
<string name="message_staging" msgid="6151794817691100003">"Aplikazioa prestatzen…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Ezezaguna"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Segurtasuna bermatzeko, tableta honetan ezin dira instalatu iturburu honetako aplikazio ezezagunak."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Segurtasuna bermatzeko, telebista honetan ezin dira instalatu iturburu honetako aplikazio ezezagunak."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Segurtasuna bermatzeko, telefono honetan ezin dira instalatu iturburu honetako aplikazio ezezagunak."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartzen duzu hura erabiltzeagatik telefonoak jasan ditzakeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartzen duzu hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartzen duzu haiek erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Egin aurrera"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ezarpenak"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear aplikazioak instalatzea/desinstalatzea"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 023f1161..daac9ecb 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -16,7 +16,7 @@
<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>
+ <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>
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"لغو"</string>
<string name="unknown" msgid="4742479012767208045">"ناشناس"</string>
<string name="installing" msgid="8613631001631998372">"در حال نصب…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"درحال نصب <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"آیا می‌خواهید یک به‌روزرسانی برای این برنامه کاربردی داخلی نصب کنید؟ داده‌های موجود شما از دست نخواهد رفت. به دسترسی ویژه‌ای نیاز ندارد."</string>
<string name="install_failed" msgid="6579998651498970899">"برنامه نصب نشد."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"از نصب شدن بسته جلوگیری شد."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"بسته بارگذاری با یک بسته موجود با همین نام تداخل دارد."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"این برنامه با رایانه لوحی شما سازگار نیست."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"برنامه نصب نشد چون بسته با بسته موجود تداخل دارد."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"برنامه نصب نشد چون با رایانه لوحی‌تان سازگار نیست."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"این برنامه با تلویزیون شما سازگار نیست."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"این برنامه با تلفن شما سازگار نیست."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"این بسته به نظر می‌رسد خراب است."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"برنامه نصب نشد چون با تلفنتان سازگار نیست."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"برنامه نصب نشد چون به نظر می‌رسد بسته معتبر نیست."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"سرپرست سیستم شما اجازه نمی‌دهد برنامه‌های دریافت‌شده از منابع ناشناس را نصب کنید"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"این کاربر نمی‌تواند برنامه‌های ناشناس نصب کند"</string>
<string name="ok" msgid="3468756155452870475">"تأیید"</string>
<string name="settings" msgid="6743583734099755409">"تنظیمات"</string>
<string name="manage_applications" msgid="4033876279091996596">"مدیریت برنامه‌ها"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"مجاز نیست"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"کاربر کنونی مجاز به انجام این حذف نصب نیست."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"خطا"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"برنامه را نمی‌توان حذف نصب کرد."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"آیا می‌خواهید این برنامه را برای این کاربر <xliff:g id="USERNAME">%1$s</xliff:g> حذف نصب کنید؟"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"این برنامه با نسخه کارخانه جایگزین شود؟ همه داده‌ها پاک می‌شوند."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"این برنامه با نسخه کارخانه جایگزین شود؟ همه داده‌ها پاک می‌شوند. این کار همه کاربران این دستگاه (از جمله کاربرانی که نمایه کاری دارند) را تحت تأثیر قرار خواهد داد."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"حذف‌نصب‌های درحال انجام"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"حذف‌نصب‌های ناموفق"</string>
<string name="uninstalling" msgid="5556217435895938250">"در حال حذف نصب..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"درحال حذف نصب <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"حذف نصب پایان یافت."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> را حذف نصب کرد"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> باموفقیت حذف نصب شد."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"نمی‌توان برنامه فعال سرپرست دستگاه را حذف نصب کرد"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"نمی‌توان برنامه فعال سرپرست دستگاه را برای <xliff:g id="USERNAME">%1$s</xliff:g> حذف نصب کرد"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"این برنامه برای برخی کاربران یا نمایه‌ها ضروری است و برای بقیه حذف نصب شد"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"این برنامه برای نمایه شما لازم است و نمی‌توان آن را حذف نصب کرد."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"سرپرست دستگاه شما این برنامه را لازم کرده است و نمی‌تواند حذف نصب شود."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"مدیریت سرپرستان دستگاه"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"مدیریت برنامه‌های سرپرست دستگاه"</string>
<string name="manage_users" msgid="3125018886835668847">"مدیریت کاربران"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> حذف نصب نشد."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"مشکلی در تجزیه این بسته وجود داشت."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"این به‌روزرسانی به مجوز جدیدی نیاز ندارد."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"آیا می‌خواهید مجوزهای زیر را اعطا کنید؟ این مجوزها دسترسی به این موارد را بوجود می‌آورند:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"اجازه ندارد"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"اطلاعات بیشتر"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"در هر صورت نادیده گرفته شود"</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="7332275268559121742">"‏به&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; اجازه <xliff:g id="ACTION">%2$s</xliff:g> را می‌دهید؟"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> مجوز غیرفعال هستند"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"همه مجوزها غیرفعال هستند"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"هیچ‌ موردی غیرفعال نیست"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"مجاز است"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"برنامه‌ها"</string>
<string name="app_permissions" msgid="3146758905824597178">"مجوزهای برنامه"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"‏عملکردهای نصب/حذف نصب در Wear پشتیبانی نمی‌شود."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> به‌روزرسانی شد. به <xliff:g id="APP_NAME_1">%1$s</xliff:g> برای دسترسی به موارد زیر اجازه می‌دهید؟"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"انتخاب کنید <xliff:g id="APP_NAME">%1$s</xliff:g> اجازه دارد به چه چیزی دسترسی داشته باشد"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> به‌روزرسانی شد. انتخاب کنید این برنامه اجازه دارد به چه چیزی دسترسی داشته باشد."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"‏انتخاب کنید &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; اجازه دارد به چه چیزی دسترسی پیدا کند"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; به‌روزرسانی شده است. انتخاب کنید این برنامه اجازه دارد به چه چیزی دسترسی پیدا کند."</string>
<string name="review_button_cancel" msgid="957906817733578877">"لغو"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ادامه"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"مجوزهای جدید"</string>
<string name="current_permissions_category" msgid="998210994450606094">"مجوزهای کنونی"</string>
<string name="message_staging" msgid="6151794817691100003">"مرحله‌بندی برنامه…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"نامشخص"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"برای امنیت شما، رایانه لوحی‌تان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شوند."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"برای امنیت شما، تلویزیونتان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شوند."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"برای امنیت شما، تلفنتان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شوند."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"تلفن و داده‌های شخصی‌تان در برابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به تلفن یا از دست رفتن داده‌ای هستید که ممکن است در نتیجه استفاده از آن به وجود آید."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"رایانه لوحی و داده‌های شخصی‌تان در برابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به رایانه لوحی یا از دست رفتن داده‌ای هستید که ممکن است در نتیجه استفاده از آن به وجود آید."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"تلویزیون و داده‌های شخصی‌تان در برابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به تلویزیون یا از دست رفتن داده‌ای هستید که ممکن است در نتیجه استفاده از آن به وجود آید."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ادامه"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"تنظیمات"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"نصب/حذف نصب برنامه‌های پوشیدنی"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index c1fff93f..c50c3793 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Peruuta"</string>
<string name="unknown" msgid="4742479012767208045">"Tuntematon"</string>
<string name="installing" msgid="8613631001631998372">"Asennetaan…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Asennetaan kohdetta <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Sovellus on asennettu."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Haluatko asentaa tämän sovelluksen? Se saa käyttöönsä seuraavat ominaisuudet:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Haluatko asentaa tämän sovelluksen? Se ei vaadi erityisiä käyttöoikeuksia."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Haluatko asentaa päivityksen tähän laitteen mukana tulleeseen sovellukseen? Et menetä nykyisiä tietojasi. Päivitys ei edellytä erityisiä käyttöoikeuksia."</string>
<string name="install_failed" msgid="6579998651498970899">"Sovellusta ei asennettu."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paketin asennus estettiin."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paketti on ristiriidassa samannimisen olemassa olevan paketin kanssa."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Tämä sovellus ei ole yhteensopiva tablettisi kanssa."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Sovellusta ei asennettu, koska paketti on ristiriidassa nykyisen paketin kanssa."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Sovellusta ei asennettu, koska se ei ole yhteensopiva tabletin kanssa."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Tämä sovellus ei ole yhteensopiva televisiosi kanssa."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Tämä sovellus ei ole yhteensopiva puhelimesi kanssa."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paketti vaikuttaa olevan vahingoittunut."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Sovellusta ei asennettu, koska se ei ole yhteensopiva puhelimen kanssa."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Sovellusta ei asennettu, koska paketti vaikuttaa virheelliseltä."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Sovelluksen <xliff:g id="APP_NAME">%1$s</xliff:g> asentaminen tähän tablet-laitteeseen epäonnistui."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei asennu televisioosi."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Sovelluksen <xliff:g id="APP_NAME">%1$s</xliff:g> asentaminen puhelimeesi ei onnistunut."</string>
<string name="launch" msgid="4826921505917605463">"Avaa"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Turv.syistä tabletti on asetettu estämään tuntemattomista lähteistä hankittujen sovell. asennus."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Turvallisuussyistä televisioosi ei voi asentaa sovelluksia, joiden lähde on tuntematon."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Turv.syistä puhelimesi on asetettu estämään tuntemattomista lähteistä hankittujen sovell. asennus."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Järjestelmänvalvoja ei salli tuntemattomista lähteistä saatujen sovellusten asentamista."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Järjestelmänvalvoja ei salli sovellusten asentamista tuntemattomista lähteistä."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Tämä käyttäjä ei voi asentaa tuntemattomia sovelluksia."</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Asetukset"</string>
<string name="manage_applications" msgid="4033876279091996596">"Hallinnoi sovelluksia"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Sovellusta ei löydy"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Sovellusta ei löydy asennettujen sovelluksien luettelosta."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ei sallittu"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Nykyisellä käyttäjällä ei ole oikeutta suorittaa tätä poistoa."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Virhe"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Sovelluksen poistaminen epäonnistui."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Poista sovellus"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Poista päivitys"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> on osa seuraavaa sovellusta:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Haluatko poistaa tämän sovelluksen käyttäjältä <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Haluatko korvata tämän sovelluksen tehdasversiolla? Kaikki tiedot poistetaan."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Haluatko korvata tämän sovelluksen tehdasversiolla? Kaikki tiedot poistetaan. Tämä vaikuttaa kaikkiin laitteen käyttäjiin, myös työprofiileihin."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Käynnissä olevat poistot"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Epäonnistuneet poistot"</string>
<string name="uninstalling" msgid="5556217435895938250">"Poistetaan..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Poistetaan pakettia <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Poisto valmis."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> poistettu"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Poisto epäonnistui."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Pakettia ei voi poistaa, koska se on aktiivinen laitteen ylläpitäjä."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Ei voi poistaa – paketti on käyttäjän <xliff:g id="USERNAME">%1$s</xliff:g> aktiivinen laitteen järjestelmänvalvoja."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> on poistettu."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktiivista laitteenhallintasovellusta ei voi poistaa käytöstä."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Käyttäjän <xliff:g id="USERNAME">%1$s</xliff:g> aktiivista laitteenhallintasovellusta ei voi poistaa käytöstä."</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Jotkin käyttäjät/profiilit tarvitsevat tätä sovellusta ja se poistettiin muista."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Profiilisi käyttö edellyttää tätä sovellusta. Sovellusta ei voi poistaa."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Laitteen järjestelmänvalvoja tarvitsee tätä sovellusta eikä sitä voi poistaa."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Hallinnoi laitteen ylläpitäjiä"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Hallinnoi laitteenhallintasovelluksia"</string>
<string name="manage_users" msgid="3125018886835668847">"Hallinnoi käyttäjiä"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Sovelluksen <xliff:g id="APP_NAME">%1$s</xliff:g> poistaminen epäonnistui"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Paketin jäsentämisessä esiintyi ongelma."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Tämä päivitys ei vaadi uusia käyttöoikeuksia."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Haluatko antaa seuraavat käyttöoikeudet? Sovellus saa käyttöönsä nämä kohteet:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Estä"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Lisätietoja"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Kiellä silti"</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="7332275268559121742">"Saako &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> pois käytöstä"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"kaikki pois käytöstä"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"kaikki käytössä"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Salli"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Sovellukset"</string>
<string name="app_permissions" msgid="3146758905824597178">"Sovelluksen käyttöoikeudet"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ei tue asennus- ja poistotoimintoja."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> on päivitetty. Myönnetäänkö sovellukselle <xliff:g id="APP_NAME_1">%1$s</xliff:g> seuraavat käyttöoikeudet?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Valitse, mitä käyttöoikeuksia haluat myöntää sovellukselle <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> on päivitetty. Valitse, mitä käyttöoikeuksia haluat myöntää tälle sovellukselle."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Valitse, mitä käyttöoikeuksia sovellukselle &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; myönnetään."</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; on päivitetty. Valitse, mitä käyttöoikeuksia tälle sovellukselle myönnetään."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Peruuta"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Jatka"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Uudet käyttöoikeudet"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Nykyiset käyttöoikeudet"</string>
<string name="message_staging" msgid="6151794817691100003">"Valmistellaan sovellusta…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Tuntematon"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Turvallisuussyistä tabletti ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Turvallisuussyistä televisiosi ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Turvallisuussyistä puhelin ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Tuntemattomat sovellukset voivat helpommin kaapata puhelimesi ja henkilötietosi. Lataamalla sovelluksia tästä lähteestä hyväksyt, että olet itse vastuussa puhelimellesi aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tuntemattomat sovellukset voivat helpommin kaapata tablettisi ja henkilötietosi. Lataamalla sovelluksia tästä lähteestä hyväksyt, että olet itse vastuussa tabletillesi aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Tuntemattomat sovellukset voivat helpommin kaapata televisiosi ja henkilötietosi. Lataamalla sovelluksen hyväksyt, että olet itse vastuussa mahdollisista televisiolle aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Jatka"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Asetukset"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear-sovellusten asennus/poistaminen"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 08074a3b..838a9998 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Annuler"</string>
<string name="unknown" msgid="4742479012767208045">"Inconnu"</string>
<string name="installing" msgid="8613631001631998372">"Installation..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installation de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> en cours…"</string>
<string name="install_done" msgid="3682715442154357097">"Application installée."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Voulez-vous installer cette application? Elle pourra :"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Voulez-vous installer cette application? Elle n\'exige aucun accès particulier."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Voulez-vous installer une mise à jour pour cette application intégrée? Vos données existantes ne seront pas perdues. Aucun droit d\'accès spécial n\'est requis."</string>
<string name="install_failed" msgid="6579998651498970899">"Application non installée."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"L\'installation du paquet a été bloquée."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Le paquet est en conflit avec un paquet existant du même nom."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Cette application n\'est pas compatible avec votre tablette."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"L\'application n\'a pas été installée, car le paquet entre en conflit avec un paquet existant."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"L\'application n\'a pas été installée, car elle n\'est pas compatible avec votre tablette."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Cette application n\'est pas compatible avec votre téléviseur."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Cette application n\'est pas compatible avec votre téléphone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Le paquet semble corrompu."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"L\'application n\'a pas été installée, car elle n\'est pas compatible avec votre téléphone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"L\'application n\'a pas été installée, car elle ne semble pas être valide."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Impossible d\'installer <xliff:g id="APP_NAME">%1$s</xliff:g> sur cette tablette."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'a pas pu être installée sur votre téléviseur."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Impossible d\'installer <xliff:g id="APP_NAME">%1$s</xliff:g> sur ce téléphone."</string>
<string name="launch" msgid="4826921505917605463">"Ouvrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Pour plus de sécurité, votre tablette bloque l\'installation d\'applications de sources inconnues."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Votre téléviseur est configuré pour bloquer l\'installation d\'applications provenant de sources inconnues"</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Pour plus de sécurité, votre téléphone bloque l\'installation d\'applications de sources inconnues."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Votre administrateur n\'autorise pas l\'installation d\'applications obtenues à partir de sources inconnues."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Votre administrateur n\'autorise pas l\'installation d\'applications obtenues à partir de sources inconnues"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Cet utilisateur ne peut pas installer les applications inconnues"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Paramètres"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gérer les applications"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Application non trouvée"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"L\'application ne figure pas dans la liste des applications installées."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Non autorisé"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"L\'utilisateur actuel n\'est pas autorisé à effectuer cette désinstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erreur"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"L\'application n\'a pas pu être désinstallée."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Désinstaller l\'application"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Désinstaller mise à jour"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> fait partie de l\'application suivante :"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Voulez-vous désinstaller cette application pour l\'utilisateur <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Remplacer cette application par la version d\'usine? Toutes les données seront supprimées."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Remplacer cette application par la version d\'usine? Toutes les données seront supprimées. Cela touchera tous les utilisateurs de cet appareil, y compris ceux qui utilisent un profil professionnel."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Désinstallations en cours"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Désinstallations échouées"</string>
<string name="uninstalling" msgid="5556217435895938250">"Désinstallation..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Désinstallation de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> en cours…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Désinstallation terminée."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"L\'application <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> a bien été désinstallée"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Échec de la désinstallation."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Impossible de désinstaller ce paquet, car il s\'agit d\'un administrateur actif."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Désinst. imposs., car ce paquet est un administrateur d\'appareil actif pour <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"La désinstallation de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> n\'a pas réussi."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Impossible de désinstaller une application d\'administration de l\'appareil active"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Impossible de désinstaller une application d\'administration de l\'appareil active pour <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Cette application est nécessaire pour certains utilisateurs ou profils, et elle a été désinstallée pour d\'autres."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Cette application est nécessaire pour votre profil et ne peut pas être désinstallée."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Impossible de désinstaller l\'application : requise par administrateur appareil."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gérer les administrateurs de l\'appareil"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gérer les applications d\'administration d\'appareils"</string>
<string name="manage_users" msgid="3125018886835668847">"Gérer les utilisateurs"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Impossible de désinstaller <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Un problème est survenu lors de l\'analyse du paquet."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Cette mise à jour n\'exige pas de nouvelles autorisations."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Voulez-vous accorder les autorisations suivantes? Cette application aura accès aux éléments suivants :"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"En savoir plus"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Refuser quand même"</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="7332275268559121742">"Autoriser &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; à <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> autorisation(s) désactivée(s)"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"toutes les autorisations sont désactivées"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"aucune autorisation n\'est désactivée"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Autoriser"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string>
<string name="app_permissions" msgid="3146758905824597178">"Autorisations de l\'application"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Les actions d\'installation et de désinstallation ne sont pas prises en charge par Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> a été mis à jour. Autorisez-vous <xliff:g id="APP_NAME_1">%1$s</xliff:g> à accéder aux éléments suivants?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Définissez les autorisations d\'accès de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> a été mis à jour. Définissez ses autorisations d\'accès."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Définissez les autorisations d\'accès de l\'application « <xliff:g id="APP_NAME">%1$s</xliff:g> »"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"L\'application « <xliff:g id="APP_NAME">%1$s</xliff:g> » a été mise à jour. Définissez ses autorisations d\'accès."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Annuler"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuer"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nouvelles autorisations"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Autorisations actuelles"</string>
<string name="message_staging" msgid="6151794817691100003">"Pré-production de l\'application en cours…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Inconnue"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur cette tablette."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléviseur."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléphone."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Votre téléphone et vos données personnelles sont plus vulnérables aux attaques provenant d\'applications inconnues. En installant cette application vous acceptez d\'être le seul responsable de tout dommage causé à votre téléphone ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Votre tablette et vos données personnelles sont plus vulnérables aux attaques provenant d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre tablette ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Votre téléviseur et vos données personnelles sont plus vulnérables face aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléviseur ou de toute perte de données pouvant découler de son utilisation."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuer"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Paramètres"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installer/désinstaller applis Google Wear"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index d7799aa1..2a0850a3 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Annuler"</string>
<string name="unknown" msgid="4742479012767208045">"Inconnu"</string>
<string name="installing" msgid="8613631001631998372">"Installation..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installation de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Application installée."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Voulez-vous installer cette application ? Elle permet les actions suivantes :"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Voulez-vous installer cette application ? Elle n\'exige aucun accès particulier."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Voulez-vous installer une mise à jour pour cette application intégrée ? Vos données existantes ne seront pas perdues. Aucun droit d\'accès spécial n\'est requis."</string>
<string name="install_failed" msgid="6579998651498970899">"Application non installée."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"L\'installation du package a été bloquée."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Le package est en conflit avec un autre package ayant le même nom."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Cette application n\'est pas compatible avec votre tablette."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"L\'application n\'a pas été installée, car le package entre en conflit avec un package existant."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"L\'application n\'a pas été installée, car elle n\'est pas compatible avec votre tablette."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Cette application n\'est pas compatible avec votre téléviseur."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Cette application n\'est pas compatible avec votre téléphone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Le package semble corrompu."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"L\'application n\'a pas été installée, car elle n\'est pas compatible avec votre téléphone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"L\'application n\'a pas été installée, car le package semble ne pas être valide."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Impossible d\'installer <xliff:g id="APP_NAME">%1$s</xliff:g> sur cette tablette."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Impossible d\'installer <xliff:g id="APP_NAME">%1$s</xliff:g> sur votre téléviseur."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Impossible d\'installer <xliff:g id="APP_NAME">%1$s</xliff:g> sur ce téléphone."</string>
<string name="launch" msgid="4826921505917605463">"Ouvrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Pour plus de sécurité, votre tablette bloque l\'installation d\'applications de sources inconnues."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"À des fins de sécurité, l\'installation des applis de source inconnue est bloquée sur ce téléviseur."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Pour plus de sécurité, votre téléphone bloque l\'installation d\'applications de sources inconnues."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Votre administrateur n\'autorise pas l\'installation d\'applications obtenues à partir de sources inconnues."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Votre administrateur n\'autorise pas l\'installation d\'applications obtenues à partir de sources inconnues"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Cet utilisateur ne peut pas installer d\'applications inconnues"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Paramètres"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gérer les applications"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Application non trouvée"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"L\'application ne figure pas dans la liste des applications installées."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Non autorisé"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"L\'utilisateur actuel n\'est pas autorisé à effectuer cette désinstallation."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erreur"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Impossible de désinstaller l\'application."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Désinstaller l\'application"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Désinstaller la mise à jour"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> fait partie de l\'application suivante :"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Voulez-vous désinstaller cette application pour l\'utilisateur <xliff:g id="USERNAME">%1$s</xliff:g> ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Remplacer cette application par la version d\'usine ? Toutes les données seront supprimées."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Remplacer cette application par la version d\'usine ? Toutes les données seront supprimées. Tous les utilisateurs de cet appareil seront affectés, y compris ceux qui ont un profil professionnel."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Désinstallations en cours"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Désinstallations non abouties"</string>
<string name="uninstalling" msgid="5556217435895938250">"Désinstallation..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Désinstallation de l\'application <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Désinstallation terminée."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"L\'application <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> a été désinstallée"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Échec de la désinstallation."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Impossible de désinstaller ce package, car il s\'agit d\'un administrateur actif."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Désinstallation imposs., car ce package est administrateur appareil actif pour <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Échec de la désinstallation de l\'application <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Impossible de désinstaller une application d\'administration de l\'appareil active"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Impossible de désinstaller une application d\'administration de l\'appareil active pour <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Cette application nécessaire pour certains utilisateurs ou profils a été désinstallée pour d\'autres."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Impossible de désinstaller l\'application, car elle est nécessaire pour votre profil."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Impossible désinstaller appli, car elle est requise par administrateur appareil."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gérer les administrateurs de l\'appareil"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gérer les applis d\'administration de l\'appareil"</string>
<string name="manage_users" msgid="3125018886835668847">"Gérer les utilisateurs"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Impossible de désinstaller <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Un problème est survenu lors de l\'analyse du package."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Cette mise à jour n\'exige pas de nouvelles autorisations."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Voulez-vous accorder les autorisations suivantes ? L\'utilisateur aura accès aux éléments suivants :"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Plus d\'infos"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Refuser quand même"</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="7332275268559121742">"Autoriser l\'application &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; à <xliff:g id="ACTION">%2$s</xliff:g> ?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> désactivées"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"toutes désactivées"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"aucune désactivée"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Autoriser"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string>
<string name="app_permissions" msgid="3146758905824597178">"Autoris. des applis"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Opérations d\'installation et de désinstallation impossibles sur Android Wear"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> a été mise à jour. Autoriser <xliff:g id="APP_NAME_1">%1$s</xliff:g> à accéder aux éléments suivants ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Choisissez à quels éléments <xliff:g id="APP_NAME">%1$s</xliff:g> peut accéder"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> a été mise à jour. Choisissez à quels éléments cette application peut accéder."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Sélectionner les éléments auxquels &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; peut accéder"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"L\'application &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; a été mise à jour. Sélectionnez les éléments auxquels elle peut accéder."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Annuler"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuer"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nouvelles autorisations"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Autorisations actuelles"</string>
<string name="message_staging" msgid="6151794817691100003">"Pré-production de l\'application…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Inconnu"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur cette tablette."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléviseur."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléphone."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Votre téléphone et vos données personnelles sont plus vulnérables face aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléphone ou de toute perte de données pouvant découler de son utilisation."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Votre tablette et vos données personnelles sont plus vulnérables face aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre tablette ou de toute perte de données pouvant découler de son utilisation."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Votre téléviseur et vos données personnelles sont plus vulnérables face aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléviseur ou de toute perte de données pouvant découler de son utilisation."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuer"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Paramètres"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installer/Désinstaller les applis Wear"</string>
</resources>
diff --git a/res/values-gl-rES-television/strings.xml b/res/values-gl-television/strings.xml
index 01e84987..01e84987 100644
--- a/res/values-gl-rES-television/strings.xml
+++ b/res/values-gl-television/strings.xml
diff --git a/res/values-gl-rES-watch/strings.xml b/res/values-gl-watch/strings.xml
index 5cbb970c..5cbb970c 100644
--- a/res/values-gl-rES-watch/strings.xml
+++ b/res/values-gl-watch/strings.xml
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl/strings.xml
index 478d688d..9b31c901 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Descoñecido"</string>
<string name="installing" msgid="8613631001631998372">"Instalando…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplicación instalada"</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Queres instalar esta aplicación? Poderá acceder a:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Queres instalar esta aplicación? Non require ningún acceso especial."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Queres instalar unha actualización para esta aplicación integrada? Non se perderán os teus datos existentes. Non require ningún acceso especial."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplicación non instalada"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Bloqueouse a instalación do paquete."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"O paquete entra en conflito cun paquete que xa ten o mesmo nome."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Esta aplicación non é compatible coa túa tableta."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"A aplicación non se instalou porque o paquete presenta un conflito cun paquete existente."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"A aplicación non se instalou porque a aplicación non é compatible coa tableta."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Esta aplicación non é compatible coa túa televisión."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Esta aplicación non é compatible co teu teléfono."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que o paquete está danado."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"A aplicación non se instalou porque a aplicación non é compatible co teléfono."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"A aplicación non se instalou porque parece que o paquete non é válido."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Non se puido instalar <xliff:g id="APP_NAME">%1$s</xliff:g> na túa tableta."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> non se puido instalar na túa televisión."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Non se puido instalar <xliff:g id="APP_NAME">%1$s</xliff:g> no teu teléfono."</string>
<string name="launch" msgid="4826921505917605463">"Abrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Por seguridade, a tableta está definido para bloquear a instalación de apps de fontes descoñecidas."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por seguranza, a TV está definida para bloquear a instalación de aplicacións de fontes descoñecidas."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Por seguridade, o teléfono está definido para bloquear a instalación de apps de fontes descoñecidas."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"O teu administrador non permite a instalación de aplicacións obtidas a partir de fontes descoñecidas."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"O teu administrador non permite a instalación de aplicacións obtidas a partir de fontes descoñecidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Este usuario non pode instalar aplicacións descoñecidas"</string>
<string name="ok" msgid="3468756155452870475">"Aceptar"</string>
<string name="settings" msgid="6743583734099755409">"Configuración"</string>
<string name="manage_applications" msgid="4033876279091996596">"Xestionar aplicacións"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Aceptar"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Non se encontrou a aplicación"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Non se atopou a aplicación na lista de aplicacións instaladas."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Non permitido"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"O usuario actual non pode realizar esta desinstalación."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erro"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Non se puido desinstalar a aplicación."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar aplicación"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalar actualización"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> forma parte da seguinte aplicación:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Queres desinstalar esta aplicación para o usuario <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Queres substituír esta aplicación pola versión que viña de fábrica? Eliminaranse todos os datos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Queres substituír esta aplicación pola versión que viña de fábrica? Eliminaranse todos os datos. Isto afectará a todos os usuarios do dispositivo, incluídos os que teñan perfís de traballo."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Desintalacións en curso"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Erros nas desinstalacións"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalando…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Desinstalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalación finalizada"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Desinstalouse <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstalación incorrecta"</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Non se pode desinstalar porque o paquete é administrador de dispositivo activo."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Non se pode desinstalar porque este paquete actúa como un administrador de dispositivo activo para o usuario <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"A desinstalación de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> non se realizou correctamente."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Non se puido desinstalar a aplicación de administración de dispositivos activa"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Non se puido desinstalar a aplicación de administración de dispositivos activa para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"A aplicación é necesaria para algúns usuarios ou perfís e estaba desinstalada para outros"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"O teu perfil necesita esta aplicación e non se pode desinstalar."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"O administrador do teu dispositivo necesita esta aplicación e non se pode desinstalar."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Xestionar administradores do dispositivo"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Xestionar apps de administración de dispositivos"</string>
<string name="manage_users" msgid="3125018886835668847">"Administrar usuarios"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Non se puido desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Produciuse un problema ao analizar o paquete."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Esta actualización non require novos permisos."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Queres conceder os seguintes permisos? Obterá acceso a:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denegar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Máis información"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Denegar igualmente"</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="7332275268559121742">"Queres permitir á aplicación &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> desactivados"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todos desactivados"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ningún desactivado"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacións"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicacións"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"As accións de instalar e desinstalar non son compatibles con Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Actualizouse <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Queres permitir que <xliff:g id="APP_NAME_1">%1$s</xliff:g> acceda ao seguinte?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Escolle a que lle queres permitir o acceso a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Actualizouse <xliff:g id="APP_NAME">%1$s</xliff:g>. Escolle a que lle queres permitir o acceso a esta aplicación."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Seleccionar os permisos de acceso que queres dar a &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Actualizouse a aplicación &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Selecciona os permisos de acceso que lle queres dar."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Novos permisos"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permisos actuais"</string>
<string name="message_staging" msgid="6151794817691100003">"Probando aplicación…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Descoñecida"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Por cuestións de seguranza, na tableta non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Por cuestións de seguranza, na televisión non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Por cuestións de seguranza, no teléfono non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"O teléfono e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados no teléfono ou da perda dos datos que se poden derivar do seu uso."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"A tableta e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados na tableta ou da perda dos datos que se poden derivar do seu uso."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"A televisión e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados na televisión ou da perda dos datos que se poden derivar do seu uso."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Configuración"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalando/desinstalando apps Wear"</string>
</resources>
diff --git a/res/values-gu-rIN-television/strings.xml b/res/values-gu-television/strings.xml
index b0a40b6c..b0a40b6c 100644
--- a/res/values-gu-rIN-television/strings.xml
+++ b/res/values-gu-television/strings.xml
diff --git a/res/values-gu-rIN-watch/strings.xml b/res/values-gu-watch/strings.xml
index 6e83cf2e..6e83cf2e 100644
--- a/res/values-gu-rIN-watch/strings.xml
+++ b/res/values-gu-watch/strings.xml
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu/strings.xml
index d5ac0341..50585101 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"રદ કરો"</string>
<string name="unknown" msgid="4742479012767208045">"અજાણ્યું"</string>
<string name="installing" msgid="8613631001631998372">"ઇન્સ્ટોલ કરી રહ્યું છે…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ને ઇન્સ્ટૉલ કરી રહ્યાં છીએ…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"શું તમે આ બિલ્ટ-ઇન એપ્લિકેશનના અપડેટને ઇન્સ્ટોલ કરવા માગો છો? તમારો અસ્તિત્વમાંનો ડેટા ગુમ થશે નહીં. તેને કોઈ વિશિષ્ટ ઍક્સેસની જરૂર હોતી નથી."</string>
<string name="install_failed" msgid="6579998651498970899">"ઍપ્લિકેશન ઇન્સ્ટોલ કરેલ નથી."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"પૅકેજને ઇન્સ્ટૉલ થવાથી અવરોધિત કરવામાં આવ્યું હતું."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"પૅકેજનો સમાન નામ દ્વારા અસ્તિત્વમાંના પૅકેજ સાથે વિરોધ છે."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"આ અ‍ૅપ્લિકેશન તમારા ટેબ્લેટ સાથે સુસંગત નથી."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"પૅકેજનો અસ્તિત્વમાંના પૅકેજ સાથે વિરોધાભાસ હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"તમારા ટેબ્લેટ સાથે ઍપ્લિકેશન સુસંગત ન હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"આ અ‍ૅપ્લિકેશન તમારા ટીવી સાથે સુસંગત નથી."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"આ અ‍ૅપ્લિકેશન તમારા ફોન સાથે સુસંગત નથી."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"પૅકેજ દૂષિત થયેલો દેખાય છે."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"તમારા ફોન સાથે ઍપ્લિકેશન સુસંગત ન હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"પૅકેજ અમાન્ય લાગી રહ્યું હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"તમારા વ્યવસ્થાપક અજાણ્યા સ્રોતોથી મેળવેલ ઍપ્લિકેશનોના ઇન્સ્ટૉલેશનની મંજૂરી આપતા નથી"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"આ વપરાશકર્તા અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરી શકશે નહીં"</string>
<string name="ok" msgid="3468756155452870475">"ઓકે"</string>
<string name="settings" msgid="6743583734099755409">"સેટિંગ્સ"</string>
<string name="manage_applications" msgid="4033876279091996596">"એપ્લિકેશન્સનું સંચાલન કરો"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"મંજૂરી નથી"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"વર્તમાન વપરાશકર્તાને આ અનઇન્સ્ટૉલેશન કરવાની મંજૂરી નથી."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ભૂલ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ઍપ્લિકેશન અનઇન્સ્ટૉલ કરી શકાઈ નહીં."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"શું તમે <xliff:g id="USERNAME">%1$s</xliff:g> વપરાશકર્તા માટે આ એપ્લિકેશનને અનઇન્સ્ટોલ કરવા માગો છો?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"આ ઍપ્લિકેશનને ફેક્ટરી સંસ્કરણથી બદલીએ? તમામ ડેટા દૂર કરવામાં આવશે."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"આ ઍપ્લિકેશનને ફેક્ટરી સંસ્કરણથી બદલીએ? તમામ ડેટા દૂર કરવામાં આવશે. આનાથી કાર્ય પ્રોફાઇલ્સ સાથેના વપરાશકર્તાઓ સહિત આ ઉપકરણના તમામ વપરાશકર્તાઓ પ્રભાવિત થશે."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"ચાલી રહેલા અનઇન્સ્ટૉલ"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"નિષ્ફળ થયેલા અનઇન્સ્ટૉલ"</string>
<string name="uninstalling" msgid="5556217435895938250">"અનઇન્સ્ટોલ કરી રહ્યું છે..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ને અનઇન્સ્ટૉલ કરી રહ્યાં છે…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"અનઇન્સ્ટોલ કરો સમાપ્ત થયું."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> અનઇન્સ્ટૉલ કર્યું"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ને અનઇન્સ્ટૉલ કરવું અસફળ રહ્યું."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"સક્રિય ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનોને અનઇન્સ્ટૉલ કરી શકાતી નથી"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> માટે સક્રિય ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનોને અનઇન્સ્ટૉલ કરી શકાતી નથી"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"આ અ‍ૅપ્લિકેશન અમુક વપરાશકર્તાઓ અથવા પ્રોફાઇલ્સ માટે જરૂરી છે અને તે અન્ય લોકો માટે અનઇન્સ્ટૉલ કરી હતી"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"તમારી કાર્ય પ્રોફાઇલ માટે ઍપ્લિકેશન જરૂરી છે અને અનઇન્સ્ટૉલ કરી શકાતી નથી."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"આ ઍપ્લિકેશન તમારા ઉપકરણ વ્યવસ્થાપક માટે આવશ્યક છે અને તે અનઇન્સ્ટોલ કરી શકાતી નથી."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ઉપકરણ વ્યવસ્થાપકોને સંચાલિત કરો"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનોનું સંચાલન કરો"</string>
<string name="manage_users" msgid="3125018886835668847">"વપરાશકર્તાઓનું સંચાલન કરો"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> અનઇન્સ્ટોલ કરી શકાઈ નથી."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"પૅકેજનું વિશ્લેષણ કરવામાં એક સમસ્યા આવી હતી."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"આ અપડેટને કોઈ નવી પરવાનગીઓની જરૂર નથી."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"શું તમે નીચેની પરવાનગીઓ આપવા માગો છો? તેને આની ઍક્સેસ મળશે:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"નકારો"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"વધુ માહિતી"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"કોઇપણ રીતે નકારો"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ને <xliff:g id="ACTION">%2$s</xliff:g> મંજૂરી આપીએ?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> અક્ષમ કરી"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"તમામ અક્ષમ કરી"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"કોઈપણ અક્ષમ કરેલ નથી"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"મંજૂરી આપો"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ઍપ્લિકેશનો"</string>
<string name="app_permissions" msgid="3146758905824597178">"ઍપ્લિકેશન પરવાનગીઓ"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear પર ઇન્સ્ટૉલ/અનઇન્સ્ટૉલ ક્રિયાઓ સમર્થિત નથી."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ને અપડેટ કરવામાં આવી છે. <xliff:g id="APP_NAME_1">%1$s</xliff:g> ને નીચેના માટે ઍક્સેસની મંજૂરી આપો."</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને અપડેટ કરવામાં આવી છે. આ ઍપ્લિકેશનને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; અપડેટ કરવામાં આવી છે. આ ઍપ્લિકેશનને શેના ઍક્સેસ માટેની મંજૂરી આપવી તે પસંદ કરો."</string>
<string name="review_button_cancel" msgid="957906817733578877">"રદ કરો"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ચાલુ રાખો"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"નવી પરવાનગીઓ"</string>
<string name="current_permissions_category" msgid="998210994450606094">"વર્તમાન પરવાનગીઓ"</string>
<string name="message_staging" msgid="6151794817691100003">"ઍપ્લિકેશન અમલમં છે..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"અજાણી"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"તમારી સુરક્ષા માટે, તમારા ટૅબ્લેટને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"તમારી સુરક્ષા માટે, તમારા ટીવીને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"તમારી સુરક્ષા માટે, તમારા ફોનને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"તમારો ફોન અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ફોનને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"તમારું ટૅબ્લેટ અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ટૅબ્લેટને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"તમારું ટીવી અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ટીવીને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ચાલુ રાખો"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"સેટિંગ્સ"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"એમ્બેડ ઍપ્લિકેશનો ઇન્સ્ટૉલ/અનઇન્સ્ટૉલ"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 26293534..bd94a8b1 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"अभी नहीं"</string>
<string name="unknown" msgid="4742479012767208045">"अज्ञात"</string>
<string name="installing" msgid="8613631001631998372">"इंस्‍टॉल कर रहा है…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> इंस्टॉल हो रहा है…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"क्या आप इस अंतर्निहित एप में नई जानकारी इंस्टॉल करना चाहते हैं? आपका मौजूदा डेटा बना रहेगा. इसे किसी विशेष पहुंच की आवश्यकता नहीं होती."</string>
<string name="install_failed" msgid="6579998651498970899">"ऐप्स इंस्‍टॉल नहीं हुआ."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"पैकेज को इंस्टॉल होने से अवरुद्ध किया हुआ है."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"यह पैकेज इसी नाम के एक मौजूदा पैकेज के विरोध में है."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"यह ऐप आपके टैबलेट के संगत नहीं है."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि पैकेज का किसी मौजूदा पैकेज से विरोध है."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि ऐप्लिकेशन आपके टैबलेट से संगत नहीं है."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"यह ऐप आपके टीवी के संगत नहीं है."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"यह ऐप आपके फ़ोन के संगत नहीं है."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"पैकेज दूषित दिखाई देता है."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि ऐप्लिकेशन आपके फ़ोन से संगत नहीं है."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि पैकेज अमान्य लग रहा है."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"आपका व्यवस्थापक अनजान स्रोतों से मिलने वाले ऐप्लिकेशन को इंस्टॉल करने की अनुमति नहीं देता है"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"यह उपयोगकर्ता अनजान ऐप्लिकेशन इंस्टॉल नहीं कर सकता"</string>
<string name="ok" msgid="3468756155452870475">"ठीक है"</string>
<string name="settings" msgid="6743583734099755409">"सेटिंग"</string>
<string name="manage_applications" msgid="4033876279091996596">"ऐप्स प्रबंधित करें"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"अनुमति नहीं है"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"वर्तमान उपयोगकर्ता को यह अनइंस्टॉलेशन निष्पादित करने की अनुमति नहीं है."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"गड़बड़ी"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ऐप्लिकेशन अनइंस्टॉल नहीं किया जा सका."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"क्या आप उपयोगकर्ता <xliff:g id="USERNAME">%1$s</xliff:g> के लिए इस ऐप्स को अनइंस्टॉल करना चाहते हैं?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"इस ऐप्लिकेशन को फ़ैक्टरी वर्शन से बदलें? सभी डेटा निकाल दिया जाएगा."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"इस ऐप्लिकेशन को फ़ैक्टरी वर्शन से बदलें? सभी डेटा निकाल दिया जाएगा. यह इस डिवाइस के सभी उपयोगकर्ताओं को प्रभावित करेगा, जिनमें कार्य प्रोफ़ाइल वाले उपयोगकर्ता शामिल हैं."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"वे अनइंस्टॉल जो चल रहे हैं"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"वे अनइंस्टॉल जो सफल नहीं रहे"</string>
<string name="uninstalling" msgid="5556217435895938250">"अनइंस्‍टॉल कर रहा है…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> अनइंस्टॉल किया जा रहा है…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"अनइंस्‍टॉल करना पूर्ण हो गया."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> अनइंस्टॉल किया गया"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> को अनइंस्टॉल करना असफल."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"सक्रिय डिवाइस व्यवस्थापक ऐप्लिकेशन को अनइंस्टॉल नहीं किया जा सकता"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> के लिए सक्रिय डिवाइस व्यवस्थापक ऐप्लिकेशन को अनइंस्टॉल नहीं किया जा सकता"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"यह ऐप्लिकेशन कुछ उपयोगकर्ताओं या प्रोफ़ाइल हेतु आवश्यक है और अन्य हेतु अनइंस्टॉल हो गया है"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"आपकी कार्य प्रोफ़ाइल के लिए यह ऐप्लिकेशन आवश्यक है और उसे अनइंस्टॉल नहीं किया जा सकता."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"आपके डिवाइस व्यवस्थापक के लिए यह ऐप्स जरूरी है व इसे अनइंस्टॉल नहीं किया जा सकता."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"डिवाइस व्‍यवस्‍थापकों को प्रबंधित करें"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"डिवाइस व्यवस्थापक ऐप्लिकेशन प्रबंधित करें"</string>
<string name="manage_users" msgid="3125018886835668847">"उपयोगकर्ताओं को प्रबंधित करें"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> को अनइंस्‍टॉल नहीं किया जा सका."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"पैकेज को पार्स करने में कोई समस्‍या थी."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"इस नई जानकारी के लिए अनुमति की आवश्‍यकता नहीं है."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"क्या आप निम्नलिखित के लिए अनुमति देना चाहते हैं ? इसे इन पर एक्सेस प्राप्त होगी:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"अस्वीकार करें"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"अधिक जानकारी"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"फिर भी अस्वीकार करें"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; को <xliff:g id="ACTION">%2$s</xliff:g> की अनुमति दें?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> अक्षम"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"सभी अक्षम हैं"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"कोई भी अक्षम नहीं है"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमति दें"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ऐप्स"</string>
<string name="app_permissions" msgid="3146758905824597178">"ऐप अनुमतियां"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"इंस्टॉल/अनइंस्टॉल किए जाने की कार्रवाइयां Wear पर समर्थित नहीं हैं."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> को अपडेट किया गया है. <xliff:g id="APP_NAME_1">%1$s</xliff:g> को निम्‍न एक्‍सेस करने दें?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"चुनें कि <xliff:g id="APP_NAME">%1$s</xliff:g> को क्‍या-क्‍या एक्‍सेस करने देना है"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> को अपडेट किया गया है. चुनें कि इस ऐप को क्‍या-क्‍या एक्‍सेस करने देना है."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"यह चुनें कि &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; को क्या-क्या एक्सेस करने देना है"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; को अपडेट कर दिया गया है. यह चुनें कि इस ऐप्लिकेशन को क्या-क्या एक्सेस करने देना है."</string>
<string name="review_button_cancel" msgid="957906817733578877">"अभी नहीं"</string>
<string name="review_button_continue" msgid="4809162078179371370">"जारी रखें"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"नई अनुमतियां"</string>
<string name="current_permissions_category" msgid="998210994450606094">"वर्तमान अनुमतियां"</string>
<string name="message_staging" msgid="6151794817691100003">"ऐप्लिकेशन चरणबद्ध किया जा रहा है…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"अज्ञात"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"आपकी सुरक्षा के लिए, आपके टैबलेट को इस स्रोत से आने वाले अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"आपकी सुरक्षा के लिए, आपके टीवी को इस स्रोत से आने वाले अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"आपकी सुरक्षा के लिए, आपके फ़ोन को इस स्रोत से आने वाले अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"आपका फ़ोन और व्यक्तिगत डेटा अज्ञात ऐप्लिकेशन के हमले के प्रति अधिक संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके आप सहमति देते हैं कि इसके उपयोग के चलते आपके फ़ोन को होने वाले किसी भी नुकसान या डेटा की हानि के लिए आप ज़िम्मेदार हैं."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"आपका टैबलेट और व्यक्तिगत डेटा अज्ञात ऐप्लिकेशन के हमले के प्रति अधिक संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके आप सहमति देते हैं कि इसके उपयोग के चलते आपके टैबलेट को होने वाले किसी भी नुकसान या डेटा की हानि के लिए आप ज़िम्मेदार हैं."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"आपका टीवी और व्यक्तिगत डेटा अज्ञात ऐप्लिकेशन के हमले के प्रति अधिक संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके आप सहमति देते हैं कि इसके उपयोग के चलते आपके टीवी को होने वाले किसी भी नुकसान या डेटा की हानि के लिए आप ज़िम्मेदार हैं."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"जारी रखें"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"सेटिंग"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"वियर ऐप इंस्टॉल/अनइंस्टॉल हो रहे हैं"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index f1f5d7ab..4fbc7868 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Odustani"</string>
<string name="unknown" msgid="4742479012767208045">"Nepoznato"</string>
<string name="installing" msgid="8613631001631998372">"Instaliranje..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instaliranje paketa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacija je instalirana."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Želite li instalirati ovu aplikaciju? Aplikacija će moći sljedeće:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Želite li instalirati ovu aplikaciju? Aplikacija ne zahtijeva nikakav poseban pristup."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Želite li instalirati ažuriranje te ugrađene aplikacije? Vaši postojeći podaci neće se izgubiti. Nije potreban nikakav poseban pristup."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instaliranje paketa blokirano je."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket je u sukobu s postojećim paketom istog naziva."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Aplikacija nije kompatibilna s vašim tabletom."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacija koja nije instalirana kao paket u sukobu je s postojećim paketom."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacija koja nije instalirana kao aplikacija nije kompatibilna s vašim tabletom."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Aplikacija nije kompatibilna s vašim televizorom."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Aplikacija nije kompatibilna s vašim telefonom."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Čini se da je paket oštećen."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacija koja nije instalirana kao aplikacija nije kompatibilna s vašim telefonom."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacija koja nije instalirana kao paket vjerojatno nije važeća."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> nije moguće instalirati na ovo tabletno računalo."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Nije bilo moguće instalirati aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> na vaš televizor."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> nije moguće instalirati na vaš telefon."</string>
<string name="launch" msgid="4826921505917605463">"Otvori"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Radi sigurnosti vaš je tablet postavljen da blokira instaliranje aplikacija iz nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Iz sigurnosnih razloga televizor blokira instaliranje aplikacija iz nepoznatih izvora."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Radi sigurnosti vaš je telefon postavljen da blokira instaliranje aplikacija iz nepoznatih izvora."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Vaš administrator ne dopušta instaliranje aplikacija dobivenih iz nepoznatih izvora."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Vaš administrator ne dopušta instaliranje aplikacija iz nepoznatih izvora"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ovaj korisnik ne može instalirati nepoznate aplikacije"</string>
<string name="ok" msgid="3468756155452870475">"U redu"</string>
<string name="settings" msgid="6743583734099755409">"Postavke"</string>
<string name="manage_applications" msgid="4033876279091996596">"Upravljanje aplikacijama"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"U redu"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikacija nije pronađena"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Na popisu instaliranih aplikacija ova aplikacija nije pronađena."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nije dopušteno"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Trenutačni korisnik nema dopuštenje za to deinstaliranje."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Pogreška"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Deinstaliranje aplikacije nije uspjelo."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Deinstaliraj aplikaciju"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Deinstalacija ažuriranja"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"Aktivnost <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> dio je sljedeće aplikacije:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Želite li deinstalirati tu aplikaciju za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Želite li tu aplikaciju zamijeniti tvorničkom verzijom? Izgubit ćete sve podatke."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Želite li tu aplikaciju zamijeniti tvorničkom verzijom? Izgubit ćete sve podatke. To se odnosi na sve korisnike uređaja, uključujući one s radnim profilima."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Deinstaliranja u tijeku"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neuspjela deinstaliranja"</string>
<string name="uninstalling" msgid="5556217435895938250">"Deinstaliranje..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Deinstaliranje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Deinstalacija je završena."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Aplikacija <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> deinstalirana"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Deinstalacija nije uspjela."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Deinstalacija nije moguća jer je ovaj paket aktivni administrator uređaja."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Paket nije moguće deinst. jer je administrator aktivnog uređaja za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Deinstaliranje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> nije uspjelo."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Deinstaliranje aktivne aplikacije administratora uređaja nije uspjelo"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nije uspjelo deinstaliranje aktivne aplikacije administratora uređaja za <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ta je aplikacija obavezna za neke korisnike ili profile, deinstalirana je za ostale"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ta je aplikacija potrebna za vaš profil i ne može se deinstalirati."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ta je aplikacija neophodna administratoru uređaja i nije ju moguće deinstalirati."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Upravljanje administratorima uređaja"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Upravljaj aplikacijama administratora uređaja"</string>
<string name="manage_users" msgid="3125018886835668847">"Upravljaj korisnicima"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> nije moguće instalirati."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Došlo je do problema pri analiziranju paketa."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ovo ažuriranje ne zahtijeva nove dozvole."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Želite li dati sljedeće dozvole? Odobrit će se pristup sljedećem:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odbij"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Više informacija"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Svejedno 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="7332275268559121742">"Želite li aplikaciji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; dopustiti sljedeće: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"Želite li aplikaciji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; dopustiti da može <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Onemogućeno: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"sve onemogućeno"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ništa nije onemogućeno"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dopusti"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
<string name="app_permissions" msgid="3146758905824597178">"Dopuštenja aplikacije"</string>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Radnje instaliranja i deinstaliranja nisu podržane na Wearu."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> ažurirana je. Želite li dopustiti da <xliff:g id="APP_NAME_1">%1$s</xliff:g> pristupa sljedećem?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Odaberite čemu će <xliff:g id="APP_NAME">%1$s</xliff:g> moći pristupiti"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ažurirana je. Odaberite čemu će moći pristupiti."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Odaberite čemu će &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; moći pristupiti"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikacija &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ažurirana je. Odaberite čemu će moći pristupiti."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Otkaži"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Nastavi"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nova dopuštenja"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Trenutačna dopuštenja"</string>
<string name="message_staging" msgid="6151794817691100003">"Postavljanje aplikacije…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nepoznato"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Iz sigurnosnih razloga tablet nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Iz sigurnosnih razloga televizor nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Iz sigurnosnih razloga telefon nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Vaš telefon i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje telefona ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Vaš tablet i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje tableta ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Vaš TV i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje televizora ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Nastavi"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Postavke"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instaliranje/deinstaliranje Wear apl."</string>
</resources>
diff --git a/res/values-hu-television/strings.xml b/res/values-hu-television/strings.xml
index 76778ce2..0557700a 100644
--- a/res/values-hu-television/strings.xml
+++ b/res/values-hu-television/strings.xml
@@ -22,7 +22,7 @@
<string name="preference_show_system_apps" msgid="7330308025768596149">"Rendszeralkalmazások megjelenítése"</string>
<string name="app_permissions_decor_title" msgid="1461057434211920209">"Alkalmazásengedélyek"</string>
<string name="manage_permissions_decor_title" msgid="4823785025722958092">"Alkalmazásengedélyek"</string>
- <string name="permission_apps_decor_title" msgid="3644363529649579576">"A(z) <xliff:g id="PERMISSION">%1$s</xliff:g> jogosultságai"</string>
+ <string name="permission_apps_decor_title" msgid="3644363529649579576">"<xliff:g id="PERMISSION">%1$s</xliff:g> – jogosultságok"</string>
<string name="additional_permissions_decor_title" msgid="7000432624396037882">"További engedélyek"</string>
- <string name="system_apps_decor_title" msgid="5292119639812561805">"A(z) <xliff:g id="PERMISSION">%1$s</xliff:g> jogosultságai"</string>
+ <string name="system_apps_decor_title" msgid="5292119639812561805">"<xliff:g id="PERMISSION">%1$s</xliff:g> – jogosultságok"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3183ec12..ad6c2331 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Mégse"</string>
<string name="unknown" msgid="4742479012767208045">"Ismeretlen"</string>
<string name="installing" msgid="8613631001631998372">"Telepítés..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> telepítése…"</string>
<string name="install_done" msgid="3682715442154357097">"Alkalmazás telepítve."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Telepíti ezt az alkalmazást? Az a következőkhöz fog hozzáférést kapni:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Telepíti ezt az alkalmazást? Az alkalmazás nem igényel különleges hozzáférést."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Telepít egy frissítést ehhez a beépített alkalmazáshoz? A meglévő adatai nem vesznek el. A frissítés nem igényel különleges hozzáférést."</string>
<string name="install_failed" msgid="6579998651498970899">"Az alkalmazás nincs telepítve."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"A csomag telepítését letiltotta a rendszer."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"A csomag ütközésben van egy ugyanolyan nevű már meglévő csomaggal."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ez az alkalmazás nem kompatibilis táblagépével."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"A nem csomagként telepített alkalmazás ütközik egy már létező csomaggal."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"A nem alkalmazásként telepített alkalmazás nem kompatibilis az Ön táblagépével."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ez az alkalmazás nem kompatibilis tévéjével."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ez az alkalmazás nem kompatibilis telefonjával."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"A csomag hibás."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"A nem alkalmazásként telepített alkalmazás nem kompatibilis az Ön telefonjával."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"A nem csomagként telepített alkalmazás érvénytelen."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás nem telepíthető táblagépére."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás nem telepíthető a tévéjére."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás nem telepíthető telefonjára."</string>
<string name="launch" msgid="4826921505917605463">"Megnyitás"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Táblagépe biztonsági okokból letiltja az ismeretlen forrásokból származó alkalmazások telepítését."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Tévéje úgy van beállítva, hogy letiltja az ismeretlen forrásokból származó alkalmazások telepítését."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Telefonja biztonsági okokból letiltja az ismeretlen forrásokból származó alkalmazások telepítését."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"A rendszergazda nem engedélyezi az ismeretlen forrásokból származó alkalmazások telepítését."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"A rendszergazda nem engedélyezi az ismeretlen forrásokból származó alkalmazások telepítését"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ez a felhasználó nem telepíthet ismeretlen alkalmazásokat"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Beállítások"</string>
<string name="manage_applications" msgid="4033876279091996596">"Alkalmazások kezelése"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Az alkalmazás nem található"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Az alkalmazás nem található a telepített alkalmazások listájában."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nem engedélyezett"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"A jelenlegi felhasználó számára nem engedélyezett az eltávolítás végrehajtása."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Hiba"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Az alkalmazás nem távolítható el."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Alkalmazás eltávolítása"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Frissítés eltávolítása"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"A(z) <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> a következő alkalmazás része:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Eltávolítja ezt az alkalmazást <xliff:g id="USERNAME">%1$s</xliff:g> felhasználó esetében?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Lecseréli az alkalmazást a gyári verzióra? Minden adat törlődik."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Lecseréli az alkalmazást a gyári verzióra? Minden adat törlődik. Ez az eszköz összes felhasználóját érinti, így a munkaprofilokkal rendelkezőket is."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Futó telepítések"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Sikertelen telepítések"</string>
<string name="uninstalling" msgid="5556217435895938250">"Eltávolítás..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"A(z) <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> eltávolítása folyamatban van…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Az eltávolítás befejeződött."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"A(z) <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> eltávolítása befejeződött"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Az eltávolítás sikertelen."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nem lehet eltávolítani: a csomag aktív eszközkezelő."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nem lehet eltávolítani, mert a csomag <xliff:g id="USERNAME">%1$s</xliff:g> aktív eszközadminisztrátora."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"A(z) <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> eltávolítása nem sikerült."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Nem lehet eltávolítani az aktív eszközrendszergazdai alkalmazást"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nem lehet eltávolítani az aktív eszközrendszergazdai alkalmazást <xliff:g id="USERNAME">%1$s</xliff:g> felhasználó esetében"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Egyes felhasználóknak/profiloknak szüksége van erre, másoknál pedig eltávolították"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ez az alkalmazás szükséges a profiljához, így nem távolítható el."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Az alkalmazásra szüksége van az eszköz adminisztrátorának, és nem távolítható el."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Eszközadminisztrátorok kezelése"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Eszközrendszergazdai alkalmazások kezelése"</string>
<string name="manage_users" msgid="3125018886835668847">"Felhasználók kezelése"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Nem sikerült a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> eltávolítása"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Gond volt a csomag elemzésekor."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"A frissítés nem igényel új engedélyeket."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Megadja a következő engedélyeket? A következőkhöz biztosít hozzáférést:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Elutasítás"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"További információ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Tiltás mindenképpen"</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="7332275268559121742">"Engedélyezi a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; számára a következőt: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> van letiltva"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"az összes le van tiltva"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"egy sincs letiltva"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Engedélyezés"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Alkalmazások"</string>
<string name="app_permissions" msgid="3146758905824597178">"Alkalmazásengedélyek"</string>
@@ -102,7 +114,7 @@
<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="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>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> – jogosultságok"</string>
<string name="no_apps" msgid="1965493419005012569">"Nincsenek alkalmazások"</string>
<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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"A Wear nem támogatja a telepítés/eltávolítás műveletet."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"A(z) <xliff:g id="APP_NAME_0">%1$s</xliff:g> frissítve. Engedélyezi, hogy a(z) <xliff:g id="APP_NAME_1">%1$s</xliff:g> hozzáférjen a következőhöz?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Válassza ki, hogy a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> mihez férjen hozzá"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> frissítve. Válassza ki, hogy mihez férjen hozzá ez az alkalmazás."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Válassza ki, hogy a(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; mihez férjen hozzá"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"A(z) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; frissítése megtörtént. Válassza ki, hogy mihez férjen hozzá ez az alkalmazás."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Mégse"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Tovább"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Új engedélyek"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Jelenlegi engedélyek"</string>
<string name="message_staging" msgid="6151794817691100003">"Alkalmazás fokozatos közzététele…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Ismeretlen"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Az Ön biztonsága érdekében táblagépe nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Az Ön biztonsága érdekében tévéje nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Az Ön biztonsága érdekében telefonja nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonja és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elismeri, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a telefont ért károkért."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Táblagépe és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elismeri, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a táblagépet ért károkért."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Tévéje és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elismeri, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a tévét ért károkért."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Tovább"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Beállítások"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear-alkalmazások telepítése/törlése"</string>
</resources>
diff --git a/res/values-hy-rAM-television/strings.xml b/res/values-hy-television/strings.xml
index f2606734..f2606734 100644
--- a/res/values-hy-rAM-television/strings.xml
+++ b/res/values-hy-television/strings.xml
diff --git a/res/values-hy-rAM-watch/strings.xml b/res/values-hy-watch/strings.xml
index 5538858c..5538858c 100644
--- a/res/values-hy-rAM-watch/strings.xml
+++ b/res/values-hy-watch/strings.xml
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy/strings.xml
index 8b892d64..4809604f 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Չեղարկել"</string>
<string name="unknown" msgid="4742479012767208045">"Անհայտ"</string>
<string name="installing" msgid="8613631001631998372">"Տեղադրվում է..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-ի տեղադրում…"</string>
<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>
@@ -33,20 +34,18 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Ցանկանու՞մ եք այս ներկառուցված հավելվածում թարմացում տեղադրել: Ձեր ընթացիկ տվյալները չեն կորի: Այն չի պահանջում որևէ հատուկ մուտք:"</string>
<string name="install_failed" msgid="6579998651498970899">"Հավելվածը տեղադրված չէ:"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Փաթեթի տեղադրումն արգելափակվել է:"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Փաթեթը հակասության մեջ է մտնում մեկ այլ, առկա, նույնանուն փաթեթի հետ:"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Այս հավելվածը համատեղելի չէ ձեր պլանշետի հետ:"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Հավելվածը չի տեղադրվել, քանի որ տեղադրման փաթեթն ունի հակասություն առկա փաթեթի հետ:"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Հավելվածը չի տեղադրվել, քանի որ այն համատեղելի չէ ձեր պլանշետի հետ:"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Այս հավելվածը համատեղելի չէ ձեր հեռուստացույցի հետ:"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Այս հավելվածը համատեղելի չէ ձեր հեռախոսի հետ:"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Փաթեթը կարծես թե վնասված է:"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Հավելվածը չի տեղադրվել, քանի որ այն համատեղելի չէ ձեր հեռախոսի հետ:"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Հավելվածը չի տեղադրվել, քանի որ տեղադրման փաթեթը, կարծես թե, վնասված է:"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Ձեր ադմինիստրատորը թույլ չի տալիս տեղադրել հավելվածներ անհայտ աղբյուրներից"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Այս օգտատերը չի կարող անհայտ հավելվածներ տեղադրել"</string>
+ <string name="ok" msgid="3468756155452870475">"Հաստատել"</string>
<string name="settings" msgid="6743583734099755409">"Կարգավորումներ"</string>
<string name="manage_applications" msgid="4033876279091996596">"Կառավարել հավելվածները"</string>
<string name="dlg_app_replacement_title" msgid="1232230739563820951">"Փոխարինե՞լ հավելվածը:"</string>
@@ -54,9 +53,13 @@
<string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Սա համակարգային ծրագիր է:\n\nՁեր բոլոր նախկին օգտատիրոջ տվյալները կպահվեն:"</string>
<string name="out_of_space_dlg_title" msgid="7843674437613797326">"Տարածքից դուրս"</string>
<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>
+ <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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Արգելված է"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Ընթացիկ օգտատերը հեռացնելու թույլտվություն չունի:"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Սխալ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Հնարավոր չէ հեռացնել հավելվածը:"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ցանկանում եք ապատեղադրե՞լ այս ծրագիրը <xliff:g id="USERNAME">%1$s</xliff:g> օգտատիրոջ համար:"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Փոխարինե՞լ այս հավելվածը գործարանային տարբերակով: Բոլոր տվյալները կհեռացվեն:"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Փոխարինե՞լ այս հավելվածը գործարանային տարբերակով: Բոլոր տվյալները կհեռացվեն: Դա վերաբերում է այս սարքի բոլոր օգտատերերին, այդ թվում նաև աշխատանքային պրոֆիլներ ունեցողներին:"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Ընթացիկ հեռացումներ"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Ձախողված հեռացումներ"</string>
<string name="uninstalling" msgid="5556217435895938250">"Ապատեղադրում է..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> հավելվածը հեռացվում է…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Ապատեղադրումը ավարտված է:"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Հեռացված <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"Չհաջողվեց հեռացնել <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> հավելվածը:"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Հնարավոր չէ հեռացնել ակտիվ սարքի ադմինիստրատորի հավելվածը"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Հնարավոր չէ հեռացնել ակտիվ սարքի ադմինիստրատորի հավելվածը <xliff:g id="USERNAME">%1$s</xliff:g> օգտատիրոջ համար"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Այս հավելվածն անհրաժեշտ է որոշ օգտատերերի կամ պրոֆիլների համար և մնացածի մոտ հեռացվել է"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Այս հավելվածն անհրաժեշտ է ձեր պրոֆիլի համար: Այն հնարավոր չէ հեռացնել:"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ծրագիրը ձեր սարքի ադմինիստրատորի կողմից նշվել է որպես պարտադիր և չի կարող հեռացվել:"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Կառավարել սարքի ադմինիստրատորներին"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Կառավարել սարքի ադմինիստրատորի հավելվածները"</string>
<string name="manage_users" msgid="3125018886835668847">"Կառավարել օգտատերերին"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը չհաջողվեց ապատեղադրել:"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Փաթեթը վերլուծելիս խնդիր առաջացավ:"</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"Այս թարմացումը պահանջում է, որ նոր թույլտվություններ չտրվեն:"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ցանկանու՞մ եք շնորհել հետևյալ թույլտվությունները: Այն կստանա մատչում`"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Մերժել"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Այլ տեղեկություններ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Մերժել ամեն դեպքում"</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="7332275268559121742">"Թո՞ւյլ տալ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; հավելվածին <xliff:g id="ACTION">%2$s</xliff:g>:"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"Թույլատրե՞լ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; հավելվածին <xliff:g id="ACTION">%2$s</xliff:g>:"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"կասեցվել է <xliff:g id="COUNT">%1$d</xliff:g> թույլտվություն"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"բոլոր թույլտվությունները կասեցվել են"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ոչ մի թույլտվություն չի կասեցվել"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Թույլատրել"</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="1089938738199748687">"Այլևս չհարցնել"</string>
<string name="no_permissions" msgid="3210542466245591574">"Թույլտվություններ չկան"</string>
<string name="additional_permissions" msgid="6667573114240111763">"Լրացուցիչ թույլտվություններ"</string>
@@ -104,7 +116,7 @@
<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_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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Տեղադրման/հեռացման գործողությունները Android Wear-ում չեն աջակցվում:"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> հավելվածը թարմացվել է: Թույլ տա՞լ <xliff:g id="APP_NAME_1">%1$s</xliff:g> հավելվածին օգտագործել հետևյալը:"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Ընտրեք, ինչ թույլտվություններ եք ցանկանում տրամադրել <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը թարմացվել է: Ընտրեք, ինչ թույլտվություններ եք ցանկանում տրամադրել այդ հավելվածին:"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Ընտրեք, ինչ թույլտվություններ եք ցանկանում տրամադրել &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; հավելվածին"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; հավելվածը թարմացվել է: Ընտրեք, ինչ թույլտվություններ եք ցանկանում տրամադրել այդ հավելվածին:"</string>
<string name="review_button_cancel" msgid="957906817733578877">"Չեղարկել"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Շարունակել"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Նոր թույլտվությունները"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Առկա թույլտվությունները"</string>
<string name="message_staging" msgid="6151794817691100003">"Հավելվածի նախապատրաստում…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Անհայտ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Անվտանգության նկատառումներից ելնելով՝ ձեր պլանշետին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Անվտանգության նկատառումներից ելնելով՝ ձեր հեռուստացույցին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Անվտանգության նկատառումներից ելնելով՝ ձեր հեռախոսին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Ձեր հեռախոսը և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր հեռախոսին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Ձեր պլանշետը և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր պլանշետին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Ձեր TV-ն և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր TV-ին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Շարունակել"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Կարգավորումներ"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear հավելվածների տեղադրում/հեռացում"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 32195550..1dcd7d1a 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -18,12 +18,13 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="2738748390251381682">"Pemasang paket"</string>
<string name="next" msgid="3057143178373252333">"Berikutnya"</string>
- <string name="install" msgid="5896438203900042068">"Pasang"</string>
+ <string name="install" msgid="5896438203900042068">"Instal"</string>
<string name="done" msgid="3889387558374211719">"Selesai"</string>
<string name="security_settings_desc" msgid="2706691034244052604">"Izinkan apl ini untuk:"</string>
<string name="cancel" msgid="8360346460165114585">"Batal"</string>
<string name="unknown" msgid="4742479012767208045">"Tidak diketahui"</string>
<string name="installing" msgid="8613631001631998372">"Memasang..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Menginstal <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Apl terpasang."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Apakah Anda ingin memasang aplikasi ini? Aplikasi akan memiliki akses ke:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Apakah Anda ingin memasang aplikasi ini? Aplikasi tidak memerlukan akses khusus apa pun."</string>
@@ -33,47 +34,54 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Anda ingin memasang pembaruan ke aplikasi yang ada di dalamnya? Data Anda yang ada akan hilang. Tindakan ini tidak memerlukan akses khusus apa pun."</string>
<string name="install_failed" msgid="6579998651498970899">"Apl tidak terpasang."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paket diblokir sehingga tidak dapat dipasang."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket ini bentrok dengan paket yang sudah ada dan bernama sama."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Aplikasi ini tidak kompatibel dengan tablet Anda."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikasi yang tidak dipasang sebagai paket akan bentrok dengan paket yang sudah ada."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikasi yang tidak dipasang sebagai aplikasi tidak kompatibel dengan tablet Anda."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Aplikasi ini tidak kompatibel dengan TV Anda."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Aplikasi ini tidak kompatibel dengan ponsel Anda."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paket tampaknya rusak."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikasi yang tidak dipasang sebagai aplikasi tidak kompatibel dengan ponsel Anda."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikasi yang tidak dipasang sebagai paket tampaknya tidak valid."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasang pada tablet Anda."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasang di TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasang pada ponsel Anda."</string>
<string name="launch" msgid="4826921505917605463">"Buka"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Demi keamanan, tablet Anda disetel utk mencekal pemasangan apl yg diperoleh dari sumber tak dikenal."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Demi keamanan, TV disetel untuk memblokir pemasangan aplikasi dari sumber tak dikenal."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Demi keamanan, ponsel Anda disetel utk mencekal pemasangan apl yg diperoleh dari sumber tak dikenal."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administrator tidak mengizinkan pemasangan aplikasi yang didapatkan dari sumber tak dikenal."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Admin tidak mengizinkan penginstalan aplikasi yang didapatkan dari sumber tidak dikenal"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Aplikasi yang tidak dikenal tidak dapat diinstal oleh pengguna ini"</string>
<string name="ok" msgid="3468756155452870475">"Oke"</string>
<string name="settings" msgid="6743583734099755409">"Setelan"</string>
<string name="manage_applications" msgid="4033876279091996596">"Kelola apl"</string>
<string name="dlg_app_replacement_title" msgid="1232230739563820951">"Ganti apl?"</string>
- <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Apl yang Anda pasang akan menggantikan apl lain.\n\nSemua data pengguna Anda sebelumnya akan disimpan."</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Apl yang Anda instal akan menggantikan apl lain.\n\nSemua data pengguna Anda sebelumnya akan disimpan."</string>
<string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Ini adalah apl sistem.\n\nSemua data pengguna Anda sebelumnya akan disimpan."</string>
<string name="out_of_space_dlg_title" msgid="7843674437613797326">"Kehabisan ruang penyimpanan"</string>
<string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasang. Kosongkan sebagian ruang dan coba lagi."</string>
<string name="dlg_ok" msgid="6944357727705699232">"Oke"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Apl tidak ditemukan"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Apl tersebut tidak ditemukan di dalam daftar apl yang terpasang."</string>
- <string name="uninstall_application_title" msgid="1860074100811653963">"Copot pemasangan apl"</string>
- <string name="uninstall_update_title" msgid="4146940097553335390">"Copot pemasangan pembaruan"</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Tidak diizinkan"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Pengguna saat ini tidak diizinkan mencopot pemasangan."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Kesalahan"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplikasi tidak dapat dipasang."</string>
+ <string name="uninstall_application_title" msgid="1860074100811653963">"Uninstal apl"</string>
+ <string name="uninstall_update_title" msgid="4146940097553335390">"Uninstal pembaruan"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> adalah bagian dari apl berikut:"</string>
<string name="uninstall_application_text" msgid="6691975835951187030">"Apakah Anda ingin mencopot pemasangan apl ini?"</string>
<string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Anda ingin mencopot aplikasi ini untuk "<b>"semua"</b>" pengguna? Aplikasi dan datanya akan dihapus dari "<b>"semua"</b>" pengguna pada perangkat."</string>
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ingin mencopot pemasangan aplikasi ini untuk pengguna <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Gantikan aplikasi ini dengan versi pabrik? Semua data akan dihapus."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Gantikan aplikasi ini dengan versi pabrik? Semua data akan dihapus. Tindakan ini memengaruhi semua pengguna perangkat ini, termasuk yang memiliki profil kerja."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Menjalankan uninstal"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Uninstal yang gagal"</string>
<string name="uninstalling" msgid="5556217435895938250">"Mencopot pemasangan..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Mencopot pemasangan <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Pencopotan pemasangan selesai."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> di-uninstal"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Pencopotan pemasangan tidak berhasil."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Tdk dpt mencopot pemasangan krn paket ini adlh administrator perangkat yg aktif."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Tidak dapat mencopot pemasangan karena paket ini adalah administrator perangkat aktif untuk pengguna <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Gagal mencopot pemasangan <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Tidak dapat meng-uninstal aplikasi admin perangkat yang aktif"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Tidak dapat meng-uninstal aplikasi admin perangkat yang aktif untuk <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Aplikasi ini diperlukan untuk beberapa pengguna atau profil, dan telah dicopot pemasangannya untuk yang lainnya"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Aplikasi ini diperlukan untuk profil Anda dan tidak dapat dicopot pemasangannya."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Aplikasi diwajibkan administrator perangkat &amp; pemasangannya tidak bisa dicopot."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Kelola administrator perangkat"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Kelola aplikasi admin perangkat"</string>
<string name="manage_users" msgid="3125018886835668847">"Kelola pengguna"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dicopot pemasangannya."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Terjadi masalah saat mengurai paket."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Pembaruan ini tidak memerlukan izin baru."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ingin memberikan izin ini? Akses akan diberikan ke:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Tolak"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Info selengkapnya"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Tetap tolak"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> dari <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Izinkan &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; untuk <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> dinonaktifkan"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"semua dinonaktifkan"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"tidak ada yang dinonaktifkan"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Izinkan"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikasi"</string>
<string name="app_permissions" msgid="3146758905824597178">"Izin aplikasi"</string>
@@ -116,14 +128,23 @@
<string name="screen_overlay_message" msgid="2141944461571677331">"Untuk mengubah setelan izin ini, terlebih dahulu Anda harus menonaktifkan hamparan layar dari Setelan &gt; Aplikasi"</string>
<string name="screen_overlay_button" msgid="4344544843349937743">"Buka setelan"</string>
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
- <string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Tindakan Pasang/Copot Pemasangan tidak didukung di Wear."</string>
+ <string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Instal/Uninstal tidak didukung di Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> telah diperbarui. Izinkan <xliff:g id="APP_NAME_1">%1$s</xliff:g> untuk mengakses berikut ini?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Pilih item yang boleh diakses oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah diperbarui. Pilih item yang boleh diakses oleh aplikasi ini."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Pilih item yang boleh diakses oleh &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; telah diperbarui. Pilih item yang boleh diakses oleh aplikasi ini."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Batal"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Lanjutkan"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Izin baru"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Izin saat ini"</string>
<string name="message_staging" msgid="6151794817691100003">"Menyiapkan aplikasi..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Tidak dikenal"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Demi keamanan, TV tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Demi keamanan, TV tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Demi keamanan, ponsel tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Data pribadi dan ponsel lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan ponsel atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Data pribadi dan tablet lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan tablet atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Data pribadi dan TV lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan TV atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Lanjutkan"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Setelan"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Melakukan instal/uninstal aplikasi Wear"</string>
</resources>
diff --git a/res/values-is-rIS-television/strings.xml b/res/values-is-television/strings.xml
index 0c1fad7c..0c1fad7c 100644
--- a/res/values-is-rIS-television/strings.xml
+++ b/res/values-is-television/strings.xml
diff --git a/res/values-is-rIS-watch/strings.xml b/res/values-is-watch/strings.xml
index b82da5e5..b82da5e5 100644
--- a/res/values-is-rIS-watch/strings.xml
+++ b/res/values-is-watch/strings.xml
diff --git a/res/values-is-rIS/strings.xml b/res/values-is/strings.xml
index c4398b3f..da4d68d8 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Hætta við"</string>
<string name="unknown" msgid="4742479012767208045">"Óþekkt"</string>
<string name="installing" msgid="8613631001631998372">"Setur upp…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Setur upp <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Forritið er uppsett."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Viltu setja þetta forrit upp? Það mun fá aðgang að:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Viltu setja þetta forrit upp? Það krefst ekki neins sérstaks aðgangs."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Viltu setja upp uppfærslu á þessu innbyggða forriti? Eldri gögn glatast ekki. Forritið krefst ekki neins sérstaks aðgangs."</string>
<string name="install_failed" msgid="6579998651498970899">"Forritið er ekki uppsett."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Lokað var á uppsetningu pakkans."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakkinn rekst á við annan pakka með sama heiti."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Þetta forrit er ekki samhæft við spjaldtölvuna."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Forritið var ekki sett upp vegna árekstra á milli pakkans og annars pakka."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Forritið var ekki sett upp því að forritið er ekki samhæft við spjaldtölvuna þína."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Þetta forrit er ekki samhæft við sjónvarpið."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Þetta forrit er ekki samhæft við símann."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pakkinn virðist vera skemmdur."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Forritið var ekki sett upp því að forritið er ekki samhæft við símann þinn."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Forritið var ekki sett upp því að pakkinn virðist vera ógildur."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Ekki tókst að setja <xliff:g id="APP_NAME">%1$s</xliff:g> upp í spjaldtölvunni."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Ekki var hægt að setja <xliff:g id="APP_NAME">%1$s</xliff:g> upp í sjónvarpinu."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Ekki tókst að setja <xliff:g id="APP_NAME">%1$s</xliff:g> upp í símanum."</string>
<string name="launch" msgid="4826921505917605463">"Opna"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Af öryggisástæðum er spjaldtölvan stillt á að loka á uppsetningu forrita af óþekktum uppruna."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Af öryggisástæðum er sjónvarpið stillt á að loka á uppsetningu forrita af óþekktum uppruna."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Af öryggisástæðum er síminn stilltur á að loka á uppsetningu forrita af óþekktum uppruna."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Kerfisstjórinn þinn leyfir ekki uppsetningu forrita af óþekktum uppruna."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Kerfisstjórinn leyfir ekki uppsetningu forrita af óþekktum uppruna"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Þessi notandi getur ekki sett upp óþekkt forrit"</string>
<string name="ok" msgid="3468756155452870475">"Í lagi"</string>
<string name="settings" msgid="6743583734099755409">"Stillingar"</string>
<string name="manage_applications" msgid="4033876279091996596">"Stjórna forritum"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Í lagi"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Forritið finnst ekki"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Forritið fannst ekki á listanum yfir uppsett forrit."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ekki heimilað"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Núverandi notandi hefur ekki heimild til að fjarlægja þetta."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Villa"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Ekki tókst að fjarlægja forritið."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Fjarlægja forrit"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Fjarlægja uppfærslu"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> er hluti af þessu forriti:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Viltu fjarlægja þetta forrit fyrir notandann <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Viltu skipta þessu forriti út fyrir verksmiðjuútgáfuna? Öll gögn verða fjarlægð."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Viltu skipta þessu forriti út fyrir verksmiðjuútgáfuna? Öll gögn verða fjarlægð. Þetta hefur áhrif á alla notendur tækisins, þar á meðal þá sem eru með vinnusnið."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Fjarlægingar í gangi"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Fjarlægingar sem mistókust"</string>
<string name="uninstalling" msgid="5556217435895938250">"Fjarlægir…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Fjarlægir <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Forritið hefur verið fjarlægt."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Fjarlægði <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Ekki tókst að fjarlægja forritið."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Ekki er hægt að fjarlægja forritið því að pakkinn er virkur stjórnandi tækis."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Ekki hægt að fjarlægja vegna þess að þessi pakki er virkur tækisstjórnandi fyrir <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Ekki tókst að fjarlægja <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Ekki er hægt að fjarlægja virkt forrit tækjastjóra"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Ekki er hægt að fjarlægja virkt forrit tækjastjóra fyrir <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Þessa forrits er krafist hjá sumum notendum eða sniðum en var fjarlægt hjá öðrum"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Sniðið þitt krefst þessa forrits og ekki er hægt að fjarlægja það."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Stjórnandi tækisins krefst þessa forrits og ekki er hægt að fjarlægja það."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Hafa umsjón með stjórnendum tækis"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Stjórna forritum tækjastjóra"</string>
<string name="manage_users" msgid="3125018886835668847">"Stjórna notendum"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Ekki tókst að fjarlægja <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Vandamál kom upp við að vinna úr pakkanum."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Þessi uppfærsla krefst engra nýrra heimilda."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Viltu veita eftirfarandi heimildir? Aðgangur er veittur að:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Hafna"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Frekari upplýsingar"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Hafna samt"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> af <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
- <string name="permission_warning_template" msgid="7332275268559121742">"Leyfa &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; að <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"Leyfa forritinu &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; að <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> óvirkar"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"allar óvirkar"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"engin óvirk"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Leyfa"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Forrit"</string>
<string name="app_permissions" msgid="3146758905824597178">"Heimildir forrits"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Aðgerðir til að setja upp / fjarlægja eru ekki studdar í Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> hefur verið uppfært. Hverju viltu veita <xliff:g id="APP_NAME_1">%1$s</xliff:g> aðgang að?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Veldu hverju <xliff:g id="APP_NAME">%1$s</xliff:g> fær aðgang að"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> hefur verið uppfært. Veldu hverju forritið fær aðgang að."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Veldu hverju &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; fær aðgang að"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; hefur verið uppfært. Veldu hverju forritið fær aðgang að."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Hætta við"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Halda áfram"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nýjar heimildir"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Núgildandi heimildir"</string>
<string name="message_staging" msgid="6151794817691100003">"Setur upp forrit…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Óþekkt"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Til að tryggja öryggi þitt er ekki heimild í spjaldtölvunni þinni fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Til að tryggja öryggi þitt er ekki heimild í sjónvarpinu þínu fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Til að tryggja öryggi þitt er ekki heimild í símanum þínum fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Síminn þinn og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á símanum eða gagnatapi sem leiða kann af notkun þess."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Spjaldtölvan þín og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á spjaldtölvunni eða gagnatapi sem leiða kann af notkun þess."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Sjónvarpið þitt og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á sjónvarpinu eða gagnatapi sem leiða kann af notkun þess."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Áfram"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Stillingar"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Uppsetning/fjarlæging Wear forrita"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 78d2a68b..466f638c 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Annulla"</string>
<string name="unknown" msgid="4742479012767208045">"Sconosciuto"</string>
<string name="installing" msgid="8613631001631998372">"Installazione..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installazione di <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"App installata."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Vuoi installare questa applicazione? Avrà accesso a:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Vuoi installare questa applicazione? Non richiede alcun accesso speciale."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vuoi installare un aggiornamento di questa applicazione integrata? I dati correnti verranno conservati. Non occorrono accessi speciali."</string>
<string name="install_failed" msgid="6579998651498970899">"App non installata."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"È stata bloccata l\'installazione del pacchetto."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Il pacchetto è in conflitto con un pacchetto esistente che ha lo stesso nome."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Questa app non è compatibile con il tuo tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App non installata poiché il pacchetto è in conflitto con un pacchetto esistente."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App non installata poiché non compatibile con il tuo tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Questa app non è compatibile con la tua TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Questa app non è compatibile con il tuo telefono."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Il pacchetto potrebbe essere danneggiato."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App non installata poiché non compatibile con il tuo telefono."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App non installata poiché il pacchetto risulta non valido."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Impossibile installare <xliff:g id="APP_NAME">%1$s</xliff:g> sul tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Impossibile installare <xliff:g id="APP_NAME">%1$s</xliff:g> sulla tua TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Impossibile installare <xliff:g id="APP_NAME">%1$s</xliff:g> sul telefono."</string>
<string name="launch" msgid="4826921505917605463">"Apri"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Il tablet è impostato per bloccare l\'installazione di applicazioni ottenute da origini sconosciute."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"La TV è impostata per bloccare l\'installazione di app ottenute da origini sconosciute."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Il telefono è impostato per bloccare l\'installazione di app ottenute da origini sconosciute."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"L\'amministratore non consente l\'installazione di app ottenute da origini sconosciute."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"L\'amministratore non consente l\'installazione di app ottenute da fonti sconosciute"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Questo utente non può installare app sconosciute"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Impostazioni"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gestisci applicazioni"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Applicazione non trovata"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Impossibile trovare l\'applicazione nell\'elenco di applicazioni installate."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Non autorizzato"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"L\'utente corrente non è autorizzato a eseguire questa disinstallazione."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Errore"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Impossibile disinstallare l\'app."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Disinstalla applicazione"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Disinstalla aggiornamento"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> fa parte della seguente applicazione:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Disinstallare l\'app per l\'utente <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Sostituire questa app con la versione di fabbrica? Tutti i dati verranno rimossi."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Sostituire questa app con la versione di fabbrica? Tutti i dati verranno rimossi. Saranno interessati tutti gli utenti del dispositivo, inclusi quelli che hanno profili di lavoro."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Disinstallazioni attuali"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Disinstallazioni non riuscite"</string>
<string name="uninstalling" msgid="5556217435895938250">"Disinstallazione..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Disinstallazione di <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Disinstallazione completata."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"App <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> disinstallata"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Disinstallazione non riuscita."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Impossibile disinstallare: il pacchetto è un amministratore dispositivo attivo."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Impossibile disinstallare. Il pacchetto è amministr. dispos. attivo di utente <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Impossibile disinstallare <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Impossibile disinstallare l\'app di amministrazione del dispositivo attiva"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Impossibile disinstallare l\'app di amministrazione del dispositivo attiva per <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"L\'app è necessaria per alcuni utenti/profili ed è stata disinstallata per altri"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"L\'app è necessaria per il tuo profilo e non può essere disinstallata."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"App richiesta dall\'amministratore del dispositivo. Non può essere disinstallata."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gestisci amministratori dispositivo"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gestisci app di amministrazione del dispositivo"</string>
<string name="manage_users" msgid="3125018886835668847">"Gestisci utenti"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Impossibile disinstallare <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Errore durante l\'analisi del pacchetto."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Questo aggiornamento non richiede nuove autorizzazioni."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Vuoi concedere le autorizzazioni che seguono? Concederai l\'accesso a:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Nega"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Altre informazioni"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Nega comunque"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> di <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Consentire a &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; di <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> disattivate"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"tutte disattivate"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nessuna disattivata"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Consenti"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"App"</string>
<string name="app_permissions" msgid="3146758905824597178">"Autorizzazioni app"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Le azioni di installazione/disinstallazione non sono supportate su Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"L\'app <xliff:g id="APP_NAME_0">%1$s</xliff:g> è stata aggiornata. Consentire all\'app <xliff:g id="APP_NAME_1">%1$s</xliff:g> di accedere ai seguenti dati?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Scegli i dati a cui l\'app <xliff:g id="APP_NAME">%1$s</xliff:g> può accedere"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> è stata aggiornata. Scegli a quali dati può accedere."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Scegli i dati a cui l\'app <xliff:g id="APP_NAME">%1$s</xliff:g> può accedere"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"L\'app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; è stata aggiornata. Scegli i dati a cui può accedere."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Annulla"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continua"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nuove autorizzazioni"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Autorizzazioni correnti"</string>
<string name="message_staging" msgid="6151794817691100003">"App in preparazione…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Sconosciuto"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Per sicurezza, il tuo tablet non è autorizzato a installare app sconosciute da questa origine."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Per sicurezza, la tua TV non è autorizzata a installare app sconosciute da questa origine."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Per sicurezza, il tuo telefono non è autorizzato a installare app sconosciute da questa origine."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"I dati del telefono e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni al telefono o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"I dati del tablet e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni al tablet o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"I dati della TV e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni alla TV o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continua"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Impostazioni"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installazione/disinstallazione di app Wear"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 80d6992e..e19d6d3c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ביטול"</string>
<string name="unknown" msgid="4742479012767208045">"לא ידוע"</string>
<string name="installing" msgid="8613631001631998372">"מתקין..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"מתקין את <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"האם ברצונך להתקין עדכון עבור אפליקציה מובנית זו? הנתונים הקיימים שלך לא יאבדו. אין צורך בגישה מיוחדת."</string>
<string name="install_failed" msgid="6579998651498970899">"האפליקציה לא הותקנה."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"החבילה נחסמה להתקנה."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"החבילה מתנגשת עם חבילה קיימת בעלת אותו שם."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"האפליקציה הזו אינה תואמת לטאבלט שלך."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"האפליקציה לא הותקנה כי החבילה מתנגשת עם חבילה קיימת."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטאבלט."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"האפליקציה הזו אינה תואמת לטלוויזיה שלך."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"האפליקציה הזו אינה תואמת לטלפון שלך."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"נראה שהחבילה פגומה."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטלפון."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"האפליקציה לא הותקנה כי נראה שהחבילה לא תקפה."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"מנהל המערכת שלך לא מתיר התקנה של אפליקציות ממקורות לא ידועים"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"למשתמש זה אין הרשאה להתקין אפליקציות שאינן מוכרות"</string>
<string name="ok" msgid="3468756155452870475">"אישור"</string>
<string name="settings" msgid="6743583734099755409">"הגדרות"</string>
<string name="manage_applications" msgid="4033876279091996596">"נהל אפליקציות"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"לא מורשה"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"המשתמש הנוכחי אינו מורשה להסיר את ההתקנה הזו."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"שגיאה"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"לא ניתן היה להסיר את התקנת האפליקציה."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"האם ברצונך להסיר את התקנתה של אפליקציה זו עבור המשתמש <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"האם להחליף את האפליקציה הזאת בגירסת היצרן? כל הנתונים יוסרו."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"האם להחליף את האפליקציה הזאת בגירסת היצרן? כל הנתונים יוסרו. הפעולה תשפיע על כל משתמשי המכשיר, כולל משתמשים בעלי פרופיל עבודה."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"התקנות בתהליכי הסרה"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"הסרות התקנה שנכשלו"</string>
<string name="uninstalling" msgid="5556217435895938250">"מסיר התקנה..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"מסיר את ההתקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"הסרת ההתקנה הסתיימה."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"ההתקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> הוסרה"</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_failed_app" msgid="945277834056527022">"נכשלה הסרת ההתקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"לא ניתן להסיר את ההתקנה של אפליקציה פעילה של מנהל המכשיר"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"לא ניתן להסיר את ההתקנה של אפליקציה פעילה של מנהל המכשיר של <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"אפליקציה זו נדרשת לחלק מהמשתמשים או מהפרופילים והתקנתה הוסרה למשתמשים אחרים"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"האפליקציה הזו נחוצה לפרופיל שלך ולא ניתן להסיר את ההתקנה שלה."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"מנהל המכשיר שלך מחייב את קיומה של אפליקציה זו, ולא ניתן להסירה."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"נהל מנהלי מכשירים"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"אפליקציות למנהל המערכת של מכשיר מנוהל"</string>
<string name="manage_users" msgid="3125018886835668847">"ניהול משתמשים"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"לא ניתן להסיר את ההתקנה של <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"אירעה בעיה בניתוח החבילה."</string>
@@ -83,14 +91,18 @@
<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_deny" msgid="2176510645406614340">"דחה"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"לא, אין מצב"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"למידע נוסף"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"לדחות בכל מקרה"</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="7332275268559121742">"‏האם לאשר לאפליקציה &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; לבצע <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
- <string name="grant_dialog_button_allow" msgid="4616529495342337095">"התר"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"‏האם לאשר ל&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; לבצע <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> הרשאות מושבתות"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"כל ההרשאות מושבתות"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"אין הרשאות מושבתות"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"כן, זה בסדר"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"אפליקציות"</string>
<string name="app_permissions" msgid="3146758905824597178">"הרשאות לאפליקציות"</string>
- <string name="never_ask_again" msgid="1089938738199748687">"אל תשאל שוב"</string>
+ <string name="never_ask_again" msgid="1089938738199748687">"ראיתי פעם אחת, זה מספיק"</string>
<string name="no_permissions" msgid="3210542466245591574">"אין הרשאות"</string>
<string name="additional_permissions" msgid="6667573114240111763">"הרשאות נוספות"</string>
<plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
@@ -102,7 +114,7 @@
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"‏האפליקציה הזו עוצבה בשביל גרסה ישנה יותר של Android. דחיית ההרשאה עשויה לגרום לה לתפקד בצורה לקויה."</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="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>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"‏פעולות התקנה/הסרת התקנה אינן נתמכות ב-Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> עודכנה. לתת ל-<xliff:g id="APP_NAME_1">%1$s</xliff:g>‏ את הרשאות הגישה הבאות?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"בחר אילו הרשאות גישה ברצונך לתת ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> עודכנה. בחר אילו הרשאות גישה יהיו לאפליקציה הזו."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"‏בחר אילו הרשאות גישה ברצונך לתת ל &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; עודכנה. בחר אילו הרשאות גישה יהיו לאפליקציה זו."</string>
<string name="review_button_cancel" msgid="957906817733578877">"ביטול"</string>
<string name="review_button_continue" msgid="4809162078179371370">"המשך"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"הרשאות חדשות"</string>
<string name="current_permissions_category" msgid="998210994450606094">"הרשאות קיימות"</string>
<string name="message_staging" msgid="6151794817691100003">"מכין אפליקציה להתקנה…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"לא ידוע"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"לצורכי אבטחה, הטאבלט שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"לצורכי אבטחה, מכשיר הטלוויזיה שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"לצורכי אבטחה, הטלפון שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"נתוני הטלפון והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטלפון שלך בעקבות השימוש באפליקציה."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"נתוני הטאבלט והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטאבלט שלך בעקבות השימוש באפליקציה."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"נתוני הטלוויזיה והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטלוויזיה שלך בעקבות השימוש באפליקציה."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"המשך"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"הגדרות"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"‏מתקין/מסיר התקנה של אפליקציות Wear"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index dede3082..388e557f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"キャンセル"</string>
<string name="unknown" msgid="4742479012767208045">"不明"</string>
<string name="installing" msgid="8613631001631998372">"インストール中..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をインストールしています…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"この内蔵アプリにアップデートをインストールしますか?既存のデータが失われることはありません。特別なアクセス権も必要ありません。"</string>
<string name="install_failed" msgid="6579998651498970899">"アプリはインストールされていません。"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"パッケージのインストールはブロックされています。"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"パッケージが、名前が同じ既存のパッケージと競合しています。"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"このアプリはお使いのタブレットに対応していません。"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"パッケージが既存のパッケージと競合するため、アプリをインストールできませんでした。"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"お使いのタブレットに対応していないため、アプリをインストールできませんでした。"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"このアプリはお使いのテレビに対応していません。"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"このアプリはお使いのスマートフォンに対応していません。"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"パッケージが破損しているようです。"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"お使いのスマートフォンに対応していないため、アプリをインストールできませんでした。"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"パッケージが無効の可能性があるため、アプリをインストールできませんでした。"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"提供元不明のアプリをインストールすることは、管理者により禁止されています"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"このユーザーは不明なアプリをインストールできません"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"設定"</string>
<string name="manage_applications" msgid="4033876279091996596">"アプリを管理"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"アプリが見つかりません"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"インストール済みアプリのリストに、このアプリはありません。"</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"許可されていません"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"このアンインストール操作は現在のユーザーには許可されていません。"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"エラー"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"アプリをアンインストールできませんでした。"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g>さんのアプリをアンインストールしますか?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"このアプリを出荷時の状態に戻しますか?データがすべて削除されます。"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"このアプリを出荷時の状態に戻しますか?データがすべて削除されます。これは、仕事用プロファイルを設定しているユーザーも含めて、この端末を使用するすべてのユーザーが対象となります。"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"実行中のアンインストール"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"エラーになったアンインストール"</string>
<string name="uninstalling" msgid="5556217435895938250">"アンインストール中..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールしています…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"アンインストールが完了しました。"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールしました"</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_failed_app" msgid="945277834056527022">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールできませんでした。"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"有効な端末管理アプリをアンインストールできません"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> さんの有効な端末管理アプリをアンインストールできません"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"このアプリは一部のユーザーやプロファイルに必要なため、アンインストールできませんでした"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"このアプリはプロファイルに必要なため、アンインストールできません。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"このアプリは端末管理者が必要としているため、アンインストールできません。"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"デバイス管理者を管理"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"端末管理アプリを管理"</string>
<string name="manage_users" msgid="3125018886835668847">"ユーザーを管理"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>をアンインストールできませんでした。"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"パッケージの解析中に問題が発生しました。"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"このアップデートでは新たな許可は必要ありません。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"次の権限を許可してもよろしいですか?許可すると、次にアクセスされます:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"許可しない"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"詳細"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"許可しない"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に<xliff:g id="ACTION">%2$s</xliff:g>を許可しますか?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> 件無効"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"すべて無効"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"無効な権限なし"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"許可"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"アプリ"</string>
<string name="app_permissions" msgid="3146758905824597178">"アプリの権限"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ではインストールやアンインストールができません"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> が更新されました。<xliff:g id="APP_NAME_1">%1$s</xliff:g> に次の権限を許可しますか?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」に許可する権限の選択"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」が更新されました。このアプリに許可する権限を選択してください。"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」に許可する権限の選択"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」が更新されました。このアプリに許可する権限を選択してください。"</string>
<string name="review_button_cancel" msgid="957906817733578877">"キャンセル"</string>
<string name="review_button_continue" msgid="4809162078179371370">"続行"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"新しい権限"</string>
<string name="current_permissions_category" msgid="998210994450606094">"現在の権限"</string>
<string name="message_staging" msgid="6151794817691100003">"アプリを準備しています…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"不明"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"セキュリティ上の理由から、お使いのタブレットではこの提供元からの不明なアプリをインストールすることはできません。"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"セキュリティ上の理由から、お使いのテレビではこの提供元からの不明なアプリをインストールすることはできません。"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"セキュリティ上の理由から、お使いのスマートフォンではこの提供元からの不明なアプリをインストールすることはできません。"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"不明なアプリをインストールするとスマートフォンや個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性があるスマートフォンへの損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"不明なアプリをインストールするとタブレットや個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性があるタブレットへの損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"不明なアプリをインストールすると TV や個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性がある TV への損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"続行"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"設定"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear アプリのインストールとアンインストール"</string>
</resources>
diff --git a/res/values-ka-rGE-television/strings.xml b/res/values-ka-television/strings.xml
index b7d03b05..b7d03b05 100644
--- a/res/values-ka-rGE-television/strings.xml
+++ b/res/values-ka-television/strings.xml
diff --git a/res/values-ka-rGE-watch/strings.xml b/res/values-ka-watch/strings.xml
index 15749127..15749127 100644
--- a/res/values-ka-rGE-watch/strings.xml
+++ b/res/values-ka-watch/strings.xml
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka/strings.xml
index a0610773..9a4cb3b2 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"გაუქმება"</string>
<string name="unknown" msgid="4742479012767208045">"უცნობი"</string>
<string name="installing" msgid="8613631001631998372">"მიმდინარეობს დაყენება…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"მიმდინარეობს <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-ის ინსტალაცია…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"გსურთ განახლების დაყენება ამ ჩაშენებული აპლიკაციისთვის? არსებული მონაცემები არ დაიკარგება. ის არ საჭიროებს რაიმე განსაკუთრებულ წვდომას:"</string>
<string name="install_failed" msgid="6579998651498970899">"აპი არ არის დაყენებული."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ამ პაკეტის ინსტალაცია დაბლოკილია."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"პაკეტი კონფლიქტშია იგივე სახელის მქონე არსებულ პაკეტთან."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ეს აპი არ არის თავსებადი თქვენს ტაბლეტთან."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"აპი ვერ დაინსტალირდა, რადგან პაკეტი კონფლიქტშია არსებულ პაკეტთან."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"აპი ვერ დაინსტალირდა, რადგან ის არ არის თავსებადი თქვენს ტაბლეტთან."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ეს აპი არ არის თავსებადი თქვენს ტელევიზორთან."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ეს აპი არ არის თავსებადი თქვენს ტელეფონთან."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"როგორც ჩანს, ეს პაკეტი დაზიანებულია."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"აპი ვერ დაინსტალირდა, რადგან ის არ არის თავსებადი თქვენს ტელეფონთან."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"აპი ვერ დაინსტალირდა, რადგან პაკეტი, სავარაუდოდ, არასწორია."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"უცნობი წყაროებიდან ჩამოტვირთული აპების ინსტალაცია თქვენი ადმინისტრატორის მიერ ნებადართული არ არის"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ამ მომხმარებელს უცნობი აპების ინსტალაცია არ შეუძლია"</string>
<string name="ok" msgid="3468756155452870475">"კარგი"</string>
<string name="settings" msgid="6743583734099755409">"პარამეტრები"</string>
<string name="manage_applications" msgid="4033876279091996596">"აპების მართვა"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"დაუშვებელია"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"მიმდინარე მომხმარებელს არ აქვს დეინსტალაციის განხორციელების უფლება."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"შეცდომა"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"აპის დეინსტალაცია ვერ მოხერხდა."</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>
@@ -66,15 +69,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"გსურთ <xliff:g id="USERNAME">%1$s</xliff:g> მომხმარებლისათვის ამ აპის დეინსტალაცია?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"გსურთ ამ აპის ქარხნული ვერსიით ჩანაცვლება? მონაცემები მთლიანად ამოიშლება."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"გსურთ ამ აპის ქარხნული ვერსიით ჩანაცვლება? მონაცემები მთლიანად ამოიშლება. ეს მოქმედება გავლენას იქონიებს ამ მოწყობილობის ყველა მომხმარებელზე, მათ შორის, სამსახურის პროფილებით მოსარგებლეებზეც."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"გაშვებული დეინსტალაციები"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"შეუსრულებელი დეინსტალაციები"</string>
<string name="uninstalling" msgid="5556217435895938250">"დეინსტალაცია…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"მიმდინარეობს <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-ის დეინსტალაცია…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"დეინსტალაცია დასრულდა."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> დეინსტალირებულია"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-ის დეინსტალაცია ვერ მოხერხდა."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"მოწყობილობის ადმინისტრატორის აქტიური აპის დეინსტალაცია ვერ მოხერხდება"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g>-სთვის მოწყობილობის ადმინისტრატორის აქტიური აპის დეინსტალაცია ვერ მოხერხდება"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ამ აპს მომხმარებლების/პროფილების ნაწილი იყენებს. სხვებისთვის ის დეინსტალირებულია."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ეს აპი საჭიროა თქვენი პროფილისთვის. მისი დეინსტალაცია ვერ მოხერხდება."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ეს აპი საჭიროა თქვენი მოწყ. ადმინისტრატორისათვის და დეინსტალაცია ვერ გამოვა."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"მოწყობილობის ადმინისტრატორების მართვა"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"მოწყობილობის ადმინისტრატორების აპების მართვა"</string>
<string name="manage_users" msgid="3125018886835668847">"მომხმარებლების მართვა"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> -ის დეინსტალაცია ვერ მოხერხდა."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"პაკეტის ანალიზისას წარმოიშვა პრობლემა."</string>
@@ -85,9 +93,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ეს განახლება არ საჭიროებს ახალ ნებართვებს."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"გსურთ, მიანიჭოთ შემდეგი ნებართვები? წვდომა ექნება შემდეგზე:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"უარყოფა"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"დამატებითი ინფორმაცია"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"მაინც უარყოფა"</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="7332275268559121742">"გსურთ, დაუშვათ, რომ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;მ შეასრულოს <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"გსურთ, დაუშვათ, რომ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;-მ შეასრულოს <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"გათიშულია <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"გათიშულია ყველა"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"არაფერია გათიშული"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"დაშვება"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"აპები"</string>
<string name="app_permissions" msgid="3146758905824597178">"აპის უფლებები"</string>
@@ -100,7 +112,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"ეს აპი Android-ის ძველი ვერსიისთვის შეიქმნა. ნებართვის უარყოფამ შესაძლოა მისი არასათანადო ფუნქციონირება გამოიწვიოს."</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">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$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>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ინსტალაციის/დეინსტალაციის მოქმედებები არ არის მხარდაჭერილი Wear-ზე."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> განახლდა. გსურთ, <xliff:g id="APP_NAME_1">%1$s</xliff:g>-ს ჰქონდეს წვდომა შემდეგზე?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"აირჩიეთ, რაზე ჰქონდეს წვდომა <xliff:g id="APP_NAME">%1$s</xliff:g>-ს"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> განახლდა. აირჩიეთ, რაზე ჰქონდეს წვდომა ამ აპს."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"აირჩიეთ, რაზე ჰქონდეს წვდომა &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;-ს"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; განახლდა. აირჩიეთ, რაზე ჰქონდეს წვდომა ამ აპს."</string>
<string name="review_button_cancel" msgid="957906817733578877">"გაუქმება"</string>
<string name="review_button_continue" msgid="4809162078179371370">"გაგრძელება"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"ახალი ნებართვები"</string>
<string name="current_permissions_category" msgid="998210994450606094">"ამჟამინდელი ნებართვები"</string>
<string name="message_staging" msgid="6151794817691100003">"მიმდინარეობს აპის შუალედური შენახვა…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"უცნობი"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"თქვენივე უსაფრთხოებისთვის, ტაბლეტს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება არ აქვს."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"თქვენივე უსაფრთხოებისთვის, ტელევიზორს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება არ აქვს."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"თქვენივე უსაფრთხოებისთვის, ტელეფონს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება არ აქვს."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"თქვენი ტელეფონი და პირადი მონაცემები უცნობი აპების შემოტევების წინაშე მეტად დაუცველია. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტელეფონისთვის მიყენებულ ზიანსა და მონაცემების დაკარგვაზე."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"თქვენი ტელეფონი და პირადი მონაცემები უცნობი აპების შემოტევების წინაშე მეტად დაუცველია. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტაბლეტისთვის მიყენებულ ზიანსა და მონაცემების დაკარგვაზე."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"თქვენი ტელევიზორი და პირადი მონაცემები უცნობი აპების შემოტევების წინაშე მეტად დაუცველია. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტელევიზორისთვის მიყენებულ ზიანსა და მონაცემების დაკარგვაზე."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"გაგრძელება"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"პარამეტრები"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear აპების ინსტალაცია/დეინსტალაცია"</string>
</resources>
diff --git a/res/values-kk-rKZ-television/strings.xml b/res/values-kk-television/strings.xml
index 2d0ff437..2d0ff437 100644
--- a/res/values-kk-rKZ-television/strings.xml
+++ b/res/values-kk-television/strings.xml
diff --git a/res/values-kk-rKZ-watch/strings.xml b/res/values-kk-watch/strings.xml
index 8996bcbe..8996bcbe 100644
--- a/res/values-kk-rKZ-watch/strings.xml
+++ b/res/values-kk-watch/strings.xml
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk/strings.xml
index f7e31c24..a33b380b 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Бас тарту"</string>
<string name="unknown" msgid="4742479012767208045">"Белгісіз"</string>
<string name="installing" msgid="8613631001631998372">"Орнатуда…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> орнатылуда…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Бұл орнатылған қолданбаның жаңартылған нұсқасын орнатуды қалайсыз ба? Деректеріңіз жоғалмайды. Ол ерекше қол жетімділікті қажет етпейді."</string>
<string name="install_failed" msgid="6579998651498970899">"Қолданба орнатылмады."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Буманы орнатуға тыйым салынды."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Бума мен атауы бірдей бар бума арасында қайшылық бар."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Бұл қолданба планшетіңізбен үйлесімді емес."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Пакет түрінде орнатылмаған қолданба мен бұрыннан бар пакеттің арасында қайшылық туындайды."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Қолданба түрінде орнатылмаған қолданба, планшетіңізбен үйлесімді емес."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Бұл қолданба теледидарыңызбен үйлесімді емес."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Бұл қолданба телефоныңызбен үйлесімді емес."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Жинақ жарамсыз."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Қолданба түрінде орнатылмаған қолданба, телефоныңызбен үйлесімді емес."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Пакет түрінде орнатылмаған қолданба жарамсыз болып табылады."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Әкімші белгісіз көздерден алынған қолданбаларды орнатуға рұқсат етпейді"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Бұл пайдаланушы белгісіз қолданбаларды орната алмайды"</string>
<string name="ok" msgid="3468756155452870475">"Жарайды"</string>
<string name="settings" msgid="6743583734099755409">"Параметрлер"</string>
<string name="manage_applications" msgid="4033876279091996596">"Қолданбаларды басқару"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Рұқсат етілмеген"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Ағымдағы пайдаланушыға бұл жою әрекетіне рұқсат берілмеген."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Қате"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Қолданба жойылмады."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Пайдаланушы <xliff:g id="USERNAME">%1$s</xliff:g> үшін осы қолданбаны жою керек пе?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Осы қолданбаны зауыттық нұсқамен ауыстыру керек пе? Бүкіл деректер жойылады."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Осы қолданбаны зауыттық нұсқамен ауыстыру керек пе? Бүкіл деректер жойылады. Бұл осы құрылғының барлық пайдаланушыларына, соның ішінде жұмыс профильдері бар пайдаланушыларға әсер етеді."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Жұмыс істеп тұрған жою әрекеттері"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Сәтсіз жою әрекеттері"</string>
<string name="uninstalling" msgid="5556217435895938250">"Алып тастау орындалуда..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> жойылуда…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Алып тастау аяқталды."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> жойылды"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> жою сәтсіз аяқталды."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Белсенді құрылғының әкімші қолданбасын жою мүмкін емес"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> үшін белсенді құрылғының әкімші қолданбасын жою мүмкін емес"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Бұл қолданба кейбір пайдаланушылар немесе профильдер үшін қажет және басқалар үшін жойылды"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Бұл қолданба профиліңіз үшін қажет және оны жою мүмкін емес."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Әкімші осы қолданбаны талап етеді және оны жою мүмкін емес."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Құрылғы әкімшілерін басқару"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Құрылғы әкімшісі қолданбаларын басқару"</string>
<string name="manage_users" msgid="3125018886835668847">"Пайдаланушыларды басқару"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын алып тастау мүмкін емес."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Жинақты сараптау кезінде мәселе орын алды."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Бұл қолданба жаңа рұқсаттарды қажет етпейді."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Келесі нәрселерге рұқсат бересіз бе? Мыналар қол жетіміді болады:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Қабылдамау"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Қосымша ақпарат"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Бәрібір рұқсат бермеу"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; қолданбасына <xliff:g id="ACTION">%2$s</xliff:g> рұқсатын беру керек пе?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> рұқсат өшірілді"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"барлық рұқсаттар өшірілді"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"рұқсаттардың ешқайсысы өшірілмеді"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Рұқсат беру"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Қолданбалар"</string>
<string name="app_permissions" msgid="3146758905824597178">"Қолданба рұқсаттары"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear құрылғысында \"Орнату\"/\"Жою\" әрекеттері қолданылмайды."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> жаңартылды. <xliff:g id="APP_NAME_1">%1$s</xliff:g> келесілерге қатынасуға рұқсат ету керек пе?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> неге қатынасуға рұқсат етуді таңдау"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> жаңартылды. Осы қолданбаға неге қатынасуға рұқсат ету керек екенін таңдаңыз."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы қайда кіре алатынын таңдаңыз"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы жаңартылды. Бұл қолданбаның қайда кіре алатынын таңдаңыз."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Бас тарту"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Жалғастыру"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Жаңа рұқсаттар"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Ағымдағы рұқсаттар"</string>
<string name="message_staging" msgid="6151794817691100003">"Қолданба реттелуде…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Белгісіз"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Қауіпсіздікті сақтау үшін планшетке бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Қауіпсіздікті сақтау үшін теледидарға бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Қауіпсіздікті сақтау үшін телефонға бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Телефон және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі телефонға келетін залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Планшет және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі планшетке келетін залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Теледидар және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі теледидарға келетін қандай да бір залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Жалғастыру"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Параметрлер"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear қолданбасын орнату/жою"</string>
</resources>
diff --git a/res/values-km-rKH-television/strings.xml b/res/values-km-television/strings.xml
index 1797380d..1797380d 100644
--- a/res/values-km-rKH-television/strings.xml
+++ b/res/values-km-television/strings.xml
diff --git a/res/values-km-rKH-watch/strings.xml b/res/values-km-watch/strings.xml
index c5f49c54..c5f49c54 100644
--- a/res/values-km-rKH-watch/strings.xml
+++ b/res/values-km-watch/strings.xml
diff --git a/res/values-km-rKH/strings.xml b/res/values-km/strings.xml
index 4aedfddd..cbc4c7c1 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"បោះ​បង់​"</string>
<string name="unknown" msgid="4742479012767208045">"មិន​ស្គាល់"</string>
<string name="installing" msgid="8613631001631998372">"កំពុង​ដំឡើង..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"កំពុង​ដំឡើង <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"តើ​អ្នក​ចង់​ដំឡើង​បច្ចុប្បន្នភាព​កម្មវិធី​ដែល​ជាប់​ជា​មួយ? ​ទិន្នន័យ​ដែល​មាន​ស្រាប់​របស់​អ្នក​នឹង​មិន​បាត់បង់​ទេ។ វា​មិន​ទាមទារ​ការ​ចូល​ដំណើរការ​ពិសេស​ណាមួយ​ទេ។"</string>
<string name="install_failed" msgid="6579998651498970899">"មិន​បាន​ដំឡើង​កម្មវិធី។"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"កញ្ចប់នេះត្រូវបានរារាំងមិនឲ្យដំឡើង"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"កញ្ចប់នេះប្រឆាំងគ្នានឹងកញ្ចប់ដែលមានស្រាប់ដោយសារមានឈ្មោះដូចគ្នា"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"កម្មវិធីនេះមិនត្រូវគ្នាជាមួយថេប្លេតរបស់អ្នកទេ"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកញ្ចប់កម្មវិធីមិនត្រូវគ្នាជាមួយកញ្ចប់ដែលមានស្រាប់។"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកម្មវិធីមិនត្រូវគ្នាជាមួយថេប្លេតរបស់អ្នក។"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"កម្មវិធីនេះមិនត្រូវគ្នាជាមួយទូរទស្សន៍របស់អ្នកទេ"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"កម្មវិធីនេះមិនត្រូវគ្នាជាមួយទូរស័ព្ទរបស់អ្នកទេ"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"កញ្ចប់​បង្ហាញ​ថា​ខូច។"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកម្មវិធីមិនត្រូវគ្នាជាមួយទូរសព្ទរបស់អ្នក។"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកញ្ចប់គ្មានសុពលភាព។"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"អ្នក​គ្រប់គ្រង​របស់​អ្នក​មិន​អនុញ្ញាត​ឲ្យ​ដំឡើង​កម្មវិធី​ដែល​បាន​មក​ពី​ប្រភព​ដែលមិន​ស្គាល់ទេ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"កម្មវិធី​ដែល​មិនស្គាល់​មិនអាច​ដំឡើង​ដោយ​អ្នកប្រើប្រាស់​នេះ​បាន​ទេ"</string>
<string name="ok" msgid="3468756155452870475">"យល់​ព្រម​"</string>
<string name="settings" msgid="6743583734099755409">"ការ​កំណត់"</string>
<string name="manage_applications" msgid="4033876279091996596">"គ្រប់គ្រង​កម្មវិធី"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"មិន​បាន​អនុញ្ញាត"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"អ្នកប្រើបច្ចុប្បន្នមិនមានការអនុញ្ញាតឱ្យ​ធ្វើការលុបនេះទេ។"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"បញ្ហា"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"មិនអាចលុបកម្មវិធីនេះបានទេ។"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"តើ​អ្នក​ចង់​លុប​កម្មវិធី​នេះ​សម្រាប់​អ្នកប្រើ <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ជំនួសកម្មវិធីនេះដោយកំណែរោងចក្រឬ? ទិន្នន័យទាំងអស់នឹងត្រូវបានលុបចេញ។"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ជំនួយកម្មវិធីនេះដោយកំណែរោងចក្រឬ? ទិន្នន័យទាំងអស់នឹងត្រូវបានលុបចេញ។ វាប៉ះពាល់ដល់អ្នកប្រើឧបករណ៍នេះទាំងអស់ ដោយរាប់បញ្ចូលទាំងអ្នកប្រើដែលមានប្រវត្តិរូបការងារផងដែរ។"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"កំពុង​ដំណើរការ​ការលុប"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"មិន​អាច​ធ្វើការលុប​បានទេ"</string>
<string name="uninstalling" msgid="5556217435895938250">"កំពុង​លុប..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"កំពុងលុប <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"បាន​បញ្ចប់​ការ​លុប។"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"បានលុប <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"មិនអាចលុប <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> បាន។"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"មិនអាច​លុប​កម្មវិធី​អ្នកគ្រប់គ្រង​ឧបករណ៍​ដែល​បាន​ដំណើរការ​បានទេ"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"មិនអាច​លុប​កម្មវិធី​អ្នកគ្រប់គ្រង​ឧបករណ៍​សម្រាប់ <xliff:g id="USERNAME">%1$s</xliff:g> ដែល​បាន​ដំណើរការ​បាន​ទេ"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"កម្មវិធីនេះតម្រូវឲ្យមានសម្រាប់អ្នកប្រើ ឬប្រវត្តិរូបមួយចំនួន និងត្រូវបានលុបសម្រាប់អ្នកប្រើផ្សេងទៀត"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"កម្មវិធីនេះចាំបាច់សម្រាប់ប្រវតិ្តការងាររបស់អ្នក ហើយវាមិនអាចលុបបានទេ។"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"កម្មវិធីនេះត្រូវបានទាមទារដោយអ្នកគ្រប់គ្រងឧបករណ៍របស់អ្នក ហើយមិនអាចលុប​ចេញបាន​ទេ។"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"គ្រប់គ្រង​អ្នក​គ្រប់គ្រង​ឧបករណ៍"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"គ្រប់គ្រង​កម្មវិធី​អ្នកគ្រប់គ្រង​ឧបករណ៍"</string>
<string name="manage_users" msgid="3125018886835668847">"គ្រប់គ្រងអ្នកប្រើ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"មិន​អាច​លុប <xliff:g id="APP_NAME">%1$s</xliff:g> ។"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"មាន​បញ្ហា​ក្នុង​ការ​ញែក​​កញ្ចប់។"</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"បច្ចុប្បន្នភាព​នេះ​មិន​ទាមទារ​សិទ្ធិ​ថ្មី​ទេ។"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"តើ​អ្នក​ចង់​ផ្ដល់​សិទ្ធិ​ដូច​ខាងក្រោម? វា​នឹង​ចូល​ទៅ៖"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"បដិសេធ"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ព័ត៌មានបន្ថែម"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"បដិសេធទោះយ៉ាងណាក៏ដោយ"</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="7332275268559121742">"អនុញ្ញាតឲ្យ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"បានបិទ <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"បានបិទទាំងអស់"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"មិនបានបិទអ្វីទាំងអស់"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"អនុញ្ញាត"</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="1089938738199748687">"កុំសួរទៀត"</string>
<string name="no_permissions" msgid="3210542466245591574">"គ្មានសិទ្ធិអនុញ្ញាត"</string>
<string name="additional_permissions" msgid="6667573114240111763">"សិទ្ធិអនុញ្ញាតបន្ថែម"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"សកម្មភាពដំឡើង/លុបការដំឡើងមិនគាំទ្រនៅលើ Wear ទេ"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ត្រូវបានអាប់ដេតហើយ។ អនុញ្ញាតឲ្យ <xliff:g id="APP_NAME_1">%1$s</xliff:g> ចូលដំណើរការធាតុខាងក្រោមឬ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"ជ្រើសអ្វីដែលត្រូវអនុញ្ញាតឲ្យ <xliff:g id="APP_NAME">%1$s</xliff:g> ចូលដំណើរការ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ត្រូវបានអាប់ដេតហើយ។ ជ្រើសអ្វីដែលត្រូវអនុញ្ញាតឲ្យកម្មវិធីនេះចូលដំណើរការ។"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"ជ្រើសរើសអ្វីដែលត្រូវអនុញ្ញាតឲ្យ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ចូលដំណើរការ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ត្រូវបានអាប់ដេត។ ជ្រើសរើសអ្វីដែលត្រូវអនុញ្ញាតឲ្យកម្មវិធីនេះចូលដំណើរការ។"</string>
<string name="review_button_cancel" msgid="957906817733578877">"បោះបង់"</string>
<string name="review_button_continue" msgid="4809162078179371370">"បន្ត"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"សិទ្ធិអនុញ្ញាតថ្មី"</string>
<string name="current_permissions_category" msgid="998210994450606094">"សិទ្ធិអនុញ្ញាតបច្ចុប្បន្ន"</string>
<string name="message_staging" msgid="6151794817691100003">"កំពុងសាកល្បងកម្មវិធី…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"មិនស្គាល់"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ដើម្បីការពារសុវតិ្ថភាពរបស់អ្នក ថេប្លេតរបស់អ្នកមិនត្រូវបានអនុញ្ញាតឲ្យដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ដើម្បីការពារសុវតិ្ថភាពរបស់អ្នក ទូរទស្សន៍របស់អ្នកមិនត្រូវបានអនុញ្ញាតឲ្យដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ដើម្បីការពារសុវតិ្ថភាពរបស់អ្នក ទូរសព្ទរបស់អ្នកមិនត្រូវបានអនុញ្ញាតឲ្យដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"ទូរសព្ទ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតណាមួយចំពោះទូរសព្ទ ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីនោះ។"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"ថេប្លេត និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតណាមួយចំពោះថេប្លេត ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីនោះ។"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ទូរទស្សន៍ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតណាមួយចំពោះទូរទស្សន៍ ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីនោះ។"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"បន្ត"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ការ​កំណត់"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"ការដំឡើង/ការលុបកម្មវិធីឧបករណ៍​ពាក់​"</string>
</resources>
diff --git a/res/values-kn-rIN-television/strings.xml b/res/values-kn-television/strings.xml
index 335b06cc..2af5a4bc 100644
--- a/res/values-kn-rIN-television/strings.xml
+++ b/res/values-kn-television/strings.xml
@@ -16,7 +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">"ನೀವು ಇದನ್ನು ನಂತರದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‍‍ಗಳು &gt; ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು"</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>
diff --git a/res/values-kn-rIN-watch/strings.xml b/res/values-kn-watch/strings.xml
index 1a9a9939..1a9a9939 100644
--- a/res/values-kn-rIN-watch/strings.xml
+++ b/res/values-kn-watch/strings.xml
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn/strings.xml
index 7cd63d5d..c5f5d368 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ರದ್ದುಮಾಡಿ"</string>
<string name="unknown" msgid="4742479012767208045">"ಅಪರಿಚಿತ"</string>
<string name="installing" msgid="8613631001631998372">"ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"ನೀವು ಈ ಬಿಲ್ಟ್-ಇನ್-ಅಪ್ಲಿಕೇಶನ್‌ನ ಅಪ್‌ಡೇಟ್‌‌ ಆದ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪಿಸಿಕೊಳ್ಳಲು ಬಯಸುವಿರಾ? ಈಗಿರುವ ನಿಮ್ಮ ಡೇಟಾ ಕಳೆದು ಹೋಗುವುದಿಲ್ಲ. ಇದಕ್ಕೆ ಯಾವುದೇ ವಿಶೇಷ ಪ್ರವೇಶದ ಅಗತ್ಯವಿಲ್ಲ."</string>
<string name="install_failed" msgid="6579998651498970899">"ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ಸ್ಥಾಪಿಸುವಿಕೆಯಿಂದ ಪ್ಯಾಕೇಜ್‌ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ಅದೇ ಹೆಸರಿನ ಮೂಲಕ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್‌ನ ಜೊತೆಗೆ ಪ್ಯಾಕೇಜ್ ಸಂಘರ್ಷವಾಗುತ್ತದೆ."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‍ ಜೊತೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ಪ್ಯಾಕೇಜ್‌ನಂತೆ ಸ್ಥಾಪಿತವಾಗದಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್ ಜೊತೆಗೆ ಸಂಘರ್ಷವಾಗುತ್ತದೆ."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಸ್ಥಾಪಿತವಾಗದಿರುವ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಜೊತೆಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಟಿವಿ ಜೊತೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಫೋನ್‍ನೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತಿಲ್ಲ."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ಪ್ಯಾಕೇಜ್ ಹಾನಿಗೀಡಾಗಿರುವಂತೆ ತೋರುತ್ತಿದೆ."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಸ್ಥಾಪಿತವಾಗದಿರುವ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಫೋನ್ ಜೊತೆಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ಪ್ಯಾಕೇಜ್‌ನಂತೆ ಸ್ಥಾಪಿತವಾಗದಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಅಮಾನ್ಯವಾಗಿರುವಂತೆ ತೋರುತ್ತದೆ."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಪರಿಚಿತ ಮೂಲಗಳ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ಈ ಬಳಕೆದಾರರು ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="ok" msgid="3468756155452870475">"ಸರಿ"</string>
<string name="settings" msgid="6743583734099755409">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="manage_applications" msgid="4033876279091996596">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ಈ ಅಸ್ಥಾಪಿಸುವಿಕೆಯನ್ನು ಪ್ರಸ್ತುತ ಬಳಕೆದಾರರಿಗೆ ನಿರ್ವಹಿಸಲು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ದೋಷ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ಅಪ್ಲಿಕೇಶನ್ ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> ಬಳಕೆದಾರರಿಗೆ ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಬಯಸುವಿರಾ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಬದಲಿಗೆ ಫ್ಯಾಕ್ಟರಿ ಆವೃತ್ತಿಯನ್ನು ಬದಲಾಯಿಸುವುದೇ? ಎಲ್ಲಾ ಡೇಟಾ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಬದಲಿಗೆ ಫ್ಯಾಕ್ಟರಿ ಆವೃತ್ತಿಯನ್ನು ಬದಲಾಯಿಸುವುದೇ? ಎಲ್ಲಾ ಡೇಟಾ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ಕೆಲಸದ ಪ್ರೊಫೈಲ್‌ಗಳನ್ನು ಹೊಂದಿರುವವುಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಈ ಸಾಧನದ ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಇದು ಪರಿಣಾಮ ಬೀರುತ್ತದೆ."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"ಚಾಲನೆಯಲ್ಲಿರುವ ಅಸ್ಥಾಪನೆಗಳು"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ವಿಫಲಗೊಂಡ ಅಸ್ಥಾಪನೆಗಳು"</string>
<string name="uninstalling" msgid="5556217435895938250">"ಅಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ಅಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"ಅಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಿದೆ."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ಅಸ್ಥಾಪಿಸಲಾಗಿದೆ"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ಅಸ್ಥಾಪಿಸುವಿಕೆ ಯಶಸ್ವಿಯಾಗಲಿಲ್ಲ."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ಸಕ್ರಿಯ ಸಾಧನ ನಿರ್ವಹಣೆ ಅಪ್ಲಿಕೇಶನ್ ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> ಗಾಗಿ ಸಕ್ರಿಯ ಸಾಧನ ನಿರ್ವಹಣೆ ಅಪ್ಲಿಕೇಶನ್ ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ಕೆಲವು ಬಳಕೆದಾರರು ಅಥವಾ ಪ್ರೊಫೈಲ್‌ಗಳಿಗೆ ಈ ಅಪ್ಲಿಕೇಶನ್ ಅಗತ್ಯವಿರುತ್ತದೆ ಮತ್ತು ಇತರರಿಗೆ ಅಸ್ಥಾಪಿಸಲಾಗಿದೆ"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌‌ನ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಸಾಧನ ನಿರ್ವಾಹಕರಿಗೆ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ಸಾಧನದ ನಿರ್ವಾಹಕರನ್ನು ನಿರ್ವಹಿಸು"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ಸಾಧನದ ನಿರ್ವಹಣೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
<string name="manage_users" msgid="3125018886835668847">"ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಹಿಸಿ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"ಪ್ಯಾಕೇಜ್ ಪಾರ್ಸ್ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ ಕಂಡುಬಂದಿದೆ."</string>
@@ -83,11 +91,15 @@
<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_deny" msgid="2176510645406614340">"ನಿರಾಕರಿಸು"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ನಿರಾಕರಿಸಿ"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ಇನ್ನಷ್ಟು ಮಾಹಿತಿ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ಹೇಗಾದರೂ ನಿರಾಕರಿಸಿ"</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="7332275268559121742">"<xliff:g id="ACTION">%2$s</xliff:g> <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
- <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ಅನುಮತಿಸು"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"ಎಲ್ಲಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ಯಾವುದನ್ನೂ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ಅನುಮತಿಸಿ"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು"</string>
<string name="app_permissions" msgid="3146758905824597178">"ಅಪ್ಲಿಕೇಶನ್ ಅನುಮತಿಗಳು"</string>
<string name="never_ask_again" msgid="1089938738199748687">"ಮತ್ತೆ ಕೇಳಬೇಡಿ"</string>
@@ -101,7 +113,7 @@
<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="menu_hide_system" msgid="7595471742649432977">"ಸಿಸ್ಟಮ್ ಮರೆಮಾಡು"</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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ನಲ್ಲಿ ಸ್ಥಾಪಿಸುವಿಕೆ/ಅಸ್ಥಾಪಿಸುವಿಕೆ ಕ್ರಿಯೆಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಇದನ್ನು ಪ್ರವೇಶಿಸಲು <xliff:g id="APP_NAME_1">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸುವುದೇ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪ್ರವೇಶಿಸಲು ಯಾವುದನ್ನು ಅನುಮತಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ."</string>
<string name="review_button_cancel" msgid="957906817733578877">"ರದ್ದುಮಾಡಿ"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ಮುಂದುವರಿಸು"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"ಹೊಸ ಅನುಮತಿಗಳು"</string>
<string name="current_permissions_category" msgid="998210994450606094">"ಪ್ರಸ್ತುತ ಅನುಮತಿಗಳು"</string>
<string name="message_staging" msgid="6151794817691100003">"ಸ್ಥಾಪಿಸಲು ಸಿದ್ಧವಿರುವ ಅಪ್ಲಿಕೇಶನ್…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"ಅಪರಿಚಿತ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಈ ಮೂಲದಿಂದ ಬಂದಿರುವ ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳನ್ನು ನಿಮ್ಮ ಟಿವಿಯು ಸ್ಥಾಪಿಸದಂತೆ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಈ ಮೂಲದಿಂದ ಬಂದಿರುವ ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"ನಿಮ್ಮ ಫೋನ್ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ನಿಮ್ಮ ಟಿವಿ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಟಿವಿಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ಮುಂದುವರಿಸಿ"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"wear ಅಪ್ಲಿಕೇಶನ್‌ ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ/ಅಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 4e68fa26..374af357 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"취소"</string>
<string name="unknown" msgid="4742479012767208045">"알 수 없음"</string>
<string name="installing" msgid="8613631001631998372">"설치 중..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 설치 중…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"내장 애플리케이션 업데이트를 설치하시겠습니까? 기존의 데이터는 손실되지 않으며 특별한 액세스 권한이 필요하지 않습니다."</string>
<string name="install_failed" msgid="6579998651498970899">"앱이 설치되지 않았습니다."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"패키지 설치가 차단되었습니다."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"패키지가 이름이 같은 기존 패키지와 충돌합니다."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"앱이 사용 중인 태블릿과 호환되지 않습니다."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"패키지가 기존 패키지와 충돌하여 앱이 설치되지 않았습니다."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"앱이 태블릿과 호환되지 않아서 설치되지 않았습니다."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"앱이 사용 중인 TV와 호환되지 않습니다."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"앱이 사용 중인 스마트폰과 호환되지 않습니다."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"패키지가 손상된 것 같습니다."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"앱이 휴대전화와 호환되지 않아서 설치되지 않았습니다."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"패키지가 잘못되어 앱이 설치되지 않았습니다."</string>
<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>을(를) TV에 설치할 수 없습니다."</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_text" product="tablet" msgid="7504186369474734767">"보안을 위해 알 수 없는 출처에서 구매한 앱은 태블릿에 설치되지 않도록 설정되어 있습니다."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"보안상의 이유로 TV가 출처를 알 수 없는 앱 설치를 차단하도록 설정되어 있습니다."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"보안을 위해 알 수 없는 출처에서 구매한 앱은 휴대전화에 설치되지 않도록 설정되어 있습니다."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"관리자가 알 수 없는 출처의 앱 설치를 허용하지 않습니다."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"관리자가 알 수 없는 출처의 앱 설치를 허용하지 않습니다."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"이 사용자는 알 수 없는 앱을 설치할 수 없습니다."</string>
<string name="ok" msgid="3468756155452870475">"확인"</string>
<string name="settings" msgid="6743583734099755409">"설정"</string>
<string name="manage_applications" msgid="4033876279091996596">"앱 관리"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"허용되지 않음"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"현재 사용자는 이 제거를 수행할 수 없습니다."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"오류"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"앱을 제거할 수 없습니다."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g>님의 기기에 설치된 앱을 제거하시겠습니까?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"이 앱을 초기 버전으로 바꾸시겠습니까? 모든 데이터가 삭제됩니다."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"이 앱을 초기 버전으로 바꾸시겠습니까? 모든 데이터가 삭제되며 직장 프로필 사용자를 포함해 이 기기의 모든 사용자에게 영향을 미칩니다."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"실행 중인 제거 작업"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"실패한 제거 작업"</string>
<string name="uninstalling" msgid="5556217435895938250">"제거 중..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 제거 중…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"제거를 완료했습니다."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>을(를) 제거했습니다."</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>을(를) 제거하지 못했습니다."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"활성 상태의 기기 관리자 앱을 제거할 수 없습니다."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g>의 활성 상태의 기기 관리자 앱을 제거할 수 없습니다."</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"이 앱은 일부 사용자 또는 프로필에 필요하며 다른 사용자에 대해서는 제거되었습니다."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"이 앱은 프로필에 필요하므로 삭제할 수 없습니다."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"이 앱은 기기 관리자에게 필요하므로 제거할 수 없습니다."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"기기 관리자 관리"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"기기 관리자 앱 관리"</string>
<string name="manage_users" msgid="3125018886835668847">"사용자 관리"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱을 제거할 수 없습니다."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"패키지를 파싱하는 중 문제가 발생했습니다."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"이 업데이트에는 새로운 권한이 필요하지 않습니다."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"다음 권한을 부여하시겠습니까? 권한이 부여되면 다음에 액세스할 수 있습니다."</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"거부"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"추가 정보"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"거부"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;의 다음 작업을 허용하시겠습니까? <xliff:g id="ACTION">%2$s</xliff:g>"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g>개 중지됨"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"모두 중지됨"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"아무것도 중지되지 않음"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"허용"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"앱"</string>
<string name="app_permissions" msgid="3146758905824597178">"앱 권한"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear에서 지원하지 않는 설치/제거 작업입니다."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>이(가) 업데이트되었습니다. <xliff:g id="APP_NAME_1">%1$s</xliff:g>이(가) 다음에 액세스하도록 허용하시겠습니까?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 액세스하도록 허용할 항목을 선택하세요."</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g>이(가) 업데이트되었습니다. 이 앱에서 액세스하도록 허용할 항목을 선택하세요."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;에서 액세스하도록 허용할 항목을 선택하세요."</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;이(가) 업데이트되었습니다. 이 앱에서 액세스하도록 허용할 항목을 선택하세요."</string>
<string name="review_button_cancel" msgid="957906817733578877">"취소"</string>
<string name="review_button_continue" msgid="4809162078179371370">"계속"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"새로운 권한"</string>
<string name="current_permissions_category" msgid="998210994450606094">"기존 권한"</string>
<string name="message_staging" msgid="6151794817691100003">"앱 준비 중…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"알 수 없음"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"보안상의 이유로 이 소스에서 가져온 알 수 없는 앱을 태블릿에 설치할 수 없습니다."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"보안상의 이유로 이 소스에서 가져온 알 수 없는 앱을 TV에 설치할 수 없습니다."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"보안상의 이유로 이 소스에서 가져온 알 수 없는 앱을 휴대전화에 설치할 수 없습니다."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"휴대전화와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 휴대전화 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"태블릿과 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 태블릿 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 TV 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"계속"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"설정"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear 앱 설치/제거"</string>
</resources>
diff --git a/res/values-ky-rKG-television/strings.xml b/res/values-ky-television/strings.xml
index 20994ffb..20994ffb 100644
--- a/res/values-ky-rKG-television/strings.xml
+++ b/res/values-ky-television/strings.xml
diff --git a/res/values-ky-rKG-watch/strings.xml b/res/values-ky-watch/strings.xml
index aadb7c49..aadb7c49 100644
--- a/res/values-ky-rKG-watch/strings.xml
+++ b/res/values-ky-watch/strings.xml
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky/strings.xml
index b23ee7de..cac3cb58 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Жокко чыгаруу"</string>
<string name="unknown" msgid="4742479012767208045">"Белгисиз"</string>
<string name="installing" msgid="8613631001631998372">"Орнотулууда…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> орнотулууда…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Бул камтылган колдонмого жаңыртуу орнотоюн дегениңиз аныкпы? Сиздин сакталган берилиштериңиз өчүрүлбөйт. Ал эч бир атайын жетки уруксаттарын талап кылбайт."</string>
<string name="install_failed" msgid="6579998651498970899">"Колдонмо орнотулган жок."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Топтом орнотуудан бөгөттөлгөн."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Топтом аталышы окшош учурдагы топтомго карама-каршы келет."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Бул колдонмо планшетиңизге шайкеш эмес."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Башка топтом менен дал келбегендиктен колдонмо орнотулган жок."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Бул колдонмо планшетиңизге шайкеш эмес болгондуктан колдонмо орнотулган жок."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Бул колдонмо сыналгыңызга шайкеш келбейт."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Бул колдонмо телефонуңузга шайкеш эмес."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Топтом бузулган окшойт."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Бул колдонмо телефонуңузга шайкеш эмес болгондуктан колдонмо орнотулган жок."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Топтом катары орнотулбай калган колдонмо жараксыз окшойт."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Администраторуңуз белгисиз булактардан алынган колдонмолордун орнотулушуна жол бербейт"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Бул колдонуучу белгисиз колдонмолорду орното албайт"</string>
<string name="ok" msgid="3468756155452870475">"Жарайт"</string>
<string name="settings" msgid="6743583734099755409">"Жөндөөлөр"</string>
<string name="manage_applications" msgid="4033876279091996596">"Колдонмолорду башкаруу"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Тыюу салынган"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Учурдагы колдонуучу колдонмону чыгарып сала албайт."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Ката"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Колдонмону чыгарып салуу мүмкүн болбой жатат."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Бул колдонмону <xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусу үчүн орнотуудан чыгаргыңыз келеби?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Бул колдонмонун баштапкы версиясы орнотулсунбу? Бардык дайындар өчүп калат."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Бул колдонмонун баштапкы версиясы орнотулсунбу? Түзмөктөгү бардык профилдердин, ошондой эле жумушчу профилдин дайындары өчүп калат."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Чыгарылып салынууда"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Чыгарылып салынбай калгандар"</string>
<string name="uninstalling" msgid="5556217435895938250">"Чыгарылып салынууда…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> колдонмосу чыгарылууда…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Чечилип бүттү."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> колдонмосу чыгарылды"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> колдонмосун чыгарып салуу ишке ашкан жок."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Түзмөктү башкарган колдонмо иштеп жатканда аны чыгарып салууга болбойт"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусунун түзмөктү башкарган колдонмосу иштеп жатканда, аны чыгарып салууга болбойт"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Колдонмо айрым колдонуучулар же профилдерге керек."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Бул колдонмо профилиңизге керек жана аны чыгарып салуу мүмкүн эмес."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Бул колдонмо түзмөк администраторуңузга керектелет жана орнотуудан чыгаруу мүмкүн эмес."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Түзмөктүн башкаргычтарын тескөө"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Түзмөктү башкарган колдонмолорду көзөмөлдөө"</string>
<string name="manage_users" msgid="3125018886835668847">"Колдонуучуларды башкаруу"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун чечип салуу мүмкүн эмес."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Таңгакты окууда маселе пайда болду."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Бул жаңыртуу жаңы уруксаттарды талап кылбайт."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Кийинки уруксаттарды берейин дегениңиз аныкпы? Ал кийинкилерге жетки алат:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Жок"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Көбүрөөк маалымат"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Баш тартуу"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; колдонмосуна <xliff:g id="ACTION">%2$s</xliff:g> уруксат берилсинби?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> өчүрүлгөн"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"баары өчүрүлгөн"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"эч бири өчүрүлгөн жок"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Уруксат берүү"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Колдонмолор"</string>
<string name="app_permissions" msgid="3146758905824597178">"Колдонмо уруксаттары"</string>
@@ -99,11 +111,11 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"Бул колдонмо эски Android версиясы үчүн түзүлгөн. Уруксат берилбесе, ал туура эмес иштеп калышы мүмкүн."</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">%2$d</xliff:g> колдонмонун ичинен <xliff:g id="COUNT_0">%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="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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Тагынма"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Орнотуу/чыгарып салуу аракеттери Android Wear\'де колдоого алынбайт."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> жаңыртылды. <xliff:g id="APP_NAME_1">%1$s</xliff:g> төмөнкү аракеттерге уруксат берилсинби?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн уруксаттарды тандаңыз"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> жаңыртылды. Ал үчүн уруксаттарды тандаңыз."</string>
- <string name="review_button_cancel" msgid="957906817733578877">"Жокко чыгаруу"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; колдонмосу үчүн уруксаттарды тандаңыз"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; жаңыртылды. Ал үчүн уруксаттарды тандаңыз."</string>
+ <string name="review_button_cancel" msgid="957906817733578877">"Жок"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Улантуу"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Жаңы уруксаттар"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Учурдагы уруксаттар"</string>
<string name="message_staging" msgid="6151794817691100003">"Күтө туруңуз…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Белгисиз"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Коопсуздукту сактоо максатында, планшетиңизге бул булактан колдонмолорду орнотууга уруксат жок."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Коопсуздукту сактоо максатында, сыналгыңызга бул булактан колдонмолорду орнотууга уруксат жок."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Коопсуздукту сактоо максатында, телефонуңузга бул булактан колдонмолорду орнотууга уруксат жок."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Телефонуңуз жана жеке дайындарыңыз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам телефонуңузга кандайдыр бир зыян келтирилсе же дайындарыңызды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Планшетиңиз жана жеке дайындарыңыз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам планшетиңизге кандайдыр бир зыян келтирилсе же дайындарыңызды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV жана жеке дайындарыңыз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам TV\'ңизге кандайдыр бир зыян келтирилсе же дайындарыңызды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Улантуу"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Жөндөөлөр"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Тагынма колдонмолорду орнотуу/чыгаруу"</string>
</resources>
diff --git a/res/values-lo-rLA-television/strings.xml b/res/values-lo-television/strings.xml
index a6f4e49c..a6f4e49c 100644
--- a/res/values-lo-rLA-television/strings.xml
+++ b/res/values-lo-television/strings.xml
diff --git a/res/values-lo-rLA-watch/strings.xml b/res/values-lo-watch/strings.xml
index 4fae329c..4fae329c 100644
--- a/res/values-lo-rLA-watch/strings.xml
+++ b/res/values-lo-watch/strings.xml
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo/strings.xml
index 0c96c284..51d6d6e4 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ຍົກເລີກ"</string>
<string name="unknown" msgid="4742479012767208045">"ບໍ່ຮູ້ຈັກ"</string>
<string name="installing" msgid="8613631001631998372">"ກຳລັງຕິດຕັ້ງ…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"ກຳລັງຕິດຕັ້ງ <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"ທ່ານຕ້ອງການຕິດຕັ້ງອັບເດດໃສ່ແອັບພລິເຄຊັນທີ່ມີມານຳນີ້ບໍ່? ຂໍ້ມູນຂອງທ່ານທີ່ມີຢູ່ກ່ອນແລ້ວຈະຍັງຄົງຢູ່ຄືເກົ່າ. ມັນບໍ່ຕ້ອງການສິດເຂົ້າເຖິງພິເສດໃດໆເລີຍ."</string>
<string name="install_failed" msgid="6579998651498970899">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບຯເທື່ອ."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ແພັກ​ເກດ​ຖືກບ​ລັອກ​ບໍ່​ໃຫ້​ໄດ້​ຮັບ​ການ​ຕິດ​ຕັ້ງ"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ແພັກ​ເກດ​ມີ​ການ​ຂັດ​ກັນ​ກັບ​ແພັ​ກ​ເກດ​ທີ່​ມີ​ຢູ່​ແລ້ວ​ດ້ວຍ​ຊື່​ດຽວ​ກັນ."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ແອັບຯນີ້ບໍ່ສາມາດໃຊ້ໄດ້ກັບແທັບເລັດຂອງທ່ານ."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App not installed as package conflicts with an existing package."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App not installed as app isn\'t compatible with your tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ແອັບ​ນີ້​ບໍ່​ເຂົ້າ​ກັນ​ໄດ້​ກັບໂທລະພາບຂອງ​ທ່ານ."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ແອັບຯນີ້ບໍ່ສາມາດໃຊ້ກັບໂທລະສັບຂອງທ່ານໄດ້."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ແພັກເກດມີຄວາມເສຍຫາຍ."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App not installed as app isn\'t compatible with your phone."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App not installed as package appears to be invalid."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຕິດຕັ້ງແອັບທີ່ໄດ້ມາຈາກແຫຼ່ງທີ່ບໍ່ຮູ້ຈັກ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ຜູ້ໃຊ້ນີ້ບໍ່ສາມາດຕິດຕັ້ງແອັບທີ່ບໍ່ຮູ້ຈັກໄດ້"</string>
<string name="ok" msgid="3468756155452870475">"ຕົກລົງ"</string>
<string name="settings" msgid="6743583734099755409">"ການຕັ້ງຄ່າ"</string>
<string name="manage_applications" msgid="4033876279091996596">"ຈັດການແອັບຯ"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ບໍ່ອະນຸຍາດແລ້ວ"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ຜູ້ໃຊ້ປັດຈຸບັນບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ຖອນການຕິດຕັ້ງນີ້ໄດ້."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ຜິດພາດ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ບໍ່ສາມາດຖອນການຕິດຕັ້ງແອັບໄດ້."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"ທ່ານ​ຕ້ອງ​ການ​ຖອນ​ການ​ຕິດ​ຕັ້ງ​ແອັບຯ​ນີ້​ສຳ​ລັບ​ຜູ່​ໃຊ້ <xliff:g id="USERNAME">%1$s</xliff:g> ບໍ່?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ແທນທີ່ແອັບນີ້ດ້ວຍເວີຊັນທີ່ມາຈາກໂຮງງານບໍ? ຂໍ້ມູນທັງໝົດຈະຖືກລຶບອອກ."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ແທນທີ່ແອັບນີ້ດ້ວຍເວີຊັນທີ່ມາຈາກໂຮງງານບໍ? ຂໍ້ມູນທັງໝົດຈະຖືກລຶບອອກ ເຊິ່ງມີຜົນກັບຜູ້ໃຊ້ອຸປະກອນນີ້ທຸກຄົນ ຮວມທັງຄົນທີ່ມີໂປຣໄຟລ໌ບ່ອນເຮັດວຽກນຳ."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"ກຳລັງຖອນການຕິດຕັ້ງ"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ຖອນການຕິດຕັ້ງບໍ່ສຳເລັດ"</string>
<string name="uninstalling" msgid="5556217435895938250">"ກຳລັງຖອນການຕິດຕັ້ງ..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"ກຳລັງຖອນການຕິດຕັ້ງ <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"ຖອນການຕິດຕັ້ງສຳເລັດແລ້ວ."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"ຖອນການຕິດຕັ້ງ <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ແລ້ວ"</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_failed_app" msgid="945277834056527022">"ຖອນການຕິດຕັ້ງ <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ບໍ່ສຳເລັດ."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ບໍ່ສາມາດຖອນການຕິດຕັ້ງແອັບອຸປະກອນທີ່ເຮັດວຽກຢູ່ໄດ້"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"ບໍ່ສາມາດຖອນການຕິດຕັ້ງແອັບຜູ້ເບິ່ງແຍງລະບົບທີ່ເຮັດວຽກຢູ່ສຳລັບ <xliff:g id="USERNAME">%1$s</xliff:g> ໄດ້"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ແອັບນີ້ຈຳເປັນສຳລັບບາງຜູ້ໃຊ້ ຫຼື ບາງໂປຣໄຟລ໌ ແລະ ຖືກຖອນການຕິດຕັ້ງສຳລັບຄົນອື່ນແລ້ວ"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ແອັບນີ້ຈຳເປັນຕ້ອງໃຊ້ກັບໂປຣໄຟລ໌ຂອງທ່ານ ແລະ ບໍ່ສາມາດຖອນການຕິດຕັ້ງໄດ້."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"​ແອັບຯ​ນີ້​ຕ້ອງ​ໃຊ້​ໂດຍ​ຜູ່​ເບິ່ງ​ແຍງ​ລະ​ບົບ​ຂອງ​ທ່ານ ແລະ​ບໍ່​ສາ​ມາດ​ຖອນ​ການ​ຕິດ​ຕັ້ງ​ໄດ້."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ຈັດການຜູ້ເບິ່ງແຍງລະບົບອຸປະກອນ"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ຈັດການແອັບຜູ້ເບິ່ງແຍງອຸປະກອນ"</string>
<string name="manage_users" msgid="3125018886835668847">"ຈັດການຜູ້ໃຊ້"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ສາມາດຖອນອອກໄດ້."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"ເກີດບັນຫາໃນການວິເຄາະແພັກເກດ."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ອັບເດດນີ້ບໍ່ຕ້ອງການການອະນຸຍາດໃໝ່."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ທ່ານຕ້ອງການອະນຸມັດສິ່ງຕໍ່ໄປນີ້ຫຼືບໍ່? ມັນຈະສາມາດເຂົ້າເຖິງ:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ປະຕິເສດ"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ຂໍ້ມູນເພີ່ມເຕີມ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ຢືນຢັນປະຕິເສດ"</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="7332275268559121742">"ອະນຸຍາດໃຫ້ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ສາມາດ <xliff:g id="ACTION">%2$s</xliff:g> ບໍ?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"ປິດໄວ້ <xliff:g id="COUNT">%1$d</xliff:g> ສິດອະນຸຍາດແລ້ວ"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"ປິດໄວ້ທັງໝົດແລ້ວ"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ບໍ່ມີອັນໃດປິດການນຳໃຊ້ໄວ້"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"ອະນຸຍາດ"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ແອັບ"</string>
<string name="app_permissions" msgid="3146758905824597178">"ການ​ອະ​ນຸ​ຍາດ​ແອັບ"</string>
@@ -102,7 +114,7 @@
<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="menu_hide_system" msgid="7595471742649432977">"ເຊື່ອງ​ລະ​ບົບ"</string>
- <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ການອະນຸຍາດ"</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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ຕິດຕັ້ງ/ຖອນຕິດຕັ້ງ ຄຳສັ່ງທີ່ບໍ່ຮອງຮັບຢູ່ໃນ Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"ອັບເດດ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ​​ແລ້ວ. ​ອະນຸຍາດ​ໃຫ້ <xliff:g id="APP_NAME_1">%1$s</xliff:g> ​ເຂົ້າ​ເຖິງ​ສິ່ງ​ຕໍ່​ໄປ​ນີ້​ບໍ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"ເລືອກ​ສິ່ງ​ທີ່​ຈະ​ອະ​ນຸ​ຍາດ​ໃຫ້ <xliff:g id="APP_NAME">%1$s</xliff:g> ເຂົ້າ​ເຖິງ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"ອັບເດດ <xliff:g id="APP_NAME">%1$s</xliff:g> ​​ແລ້ວ. ​ເລືອກ​ສິ່ງ​ທີ່​ຈະ​ອະນຸຍາດ​ໃຫ້​ແອັບຯ​ນີ້​ເຂົ້າ​ເຖິງ."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"ເລືອກວ່າຈະອະນຸຍາດໃຫ້ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ເຂົ້າເຖິງຫຍັງໄດ້ແດ່"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"ອັບເດດ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ແລ້ວ. ກະລຸນາເລືອກວ່າຈະໃຫ້ແອັບນີ້ເຂົ້າເຖິງຫຍັງໄດ້ແດ່."</string>
<string name="review_button_cancel" msgid="957906817733578877">"​ຍົກ​ເລີກ"</string>
<string name="review_button_continue" msgid="4809162078179371370">"​ສືບ​ຕໍ່"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"ການ​ອະ​ນຸ​ຍາດ​ໃໝ່"</string>
<string name="current_permissions_category" msgid="998210994450606094">"ການ​ອະນຸຍາດ​ປັດຈຸ​ບັນ"</string>
<string name="message_staging" msgid="6151794817691100003">"ກຳລັງຮຽງແອັບ…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"ບໍ່ຮູ້ຈັກ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ແທັບເລັດຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ໂທລະທັດຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ໂທລະສັບຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"ໂທລະສັບ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"ແທັບເລັດ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ໂທລະທັດ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ດຳເນີນການຕໍ່"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ການຕັ້ງຄ່າ"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"ກຳລັງຕິດຕັ້ງ/ຖອດຖອນແອັບ Wear"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 2b7ee685..1f70db6e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Atšaukti"</string>
<string name="unknown" msgid="4742479012767208045">"Nežinomas"</string>
<string name="installing" msgid="8613631001631998372">"Diegiama..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Įdiegiama „<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>“…"</string>
<string name="install_done" msgid="3682715442154357097">"Programa įdiegta."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Ar norite įdiegti šią programą? Jai bus suteikta prieiga prie:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Ar norite įdiegti šią programą? Jai nereikalinga jokia speciali prieiga."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Ar norite įdiegti šios integruotos programos naujinį? Neprarasite esamų duomenų. Nereikia jokios specialios prieigos."</string>
<string name="install_failed" msgid="6579998651498970899">"Programa neįdiegta."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paketas užblokuotas ir negali būti įdiegtas."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paketas nesuderinamas su esamu paketu, kurio pavadinimas toks pats."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ši programa nesuderinama su jūsų planšetiniu kompiuteriu."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Programa neįdiegta, nes paketas nesuderinamas su esamu paketu."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Programa neįdiegta, nes ji nesuderinama su planšetiniu kompiuteriu."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ši programa nesuderinama su jūsų TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ši programa nesuderinama su jūsų telefonu."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paketas sugadintas."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Programa neįdiegta, nes ji nesuderinama su telefonu."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Programa neįdiegta, nes panašu, kad paketas netinkamas."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Jūsų planšetiniame kompiuteryje nepavyko įdiegti „<xliff:g id="APP_NAME">%1$s</xliff:g>“."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Nepavyko programos „<xliff:g id="APP_NAME">%1$s</xliff:g>“ įdiegti jūsų TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Jūsų telefone nepavyko įdiegti „<xliff:g id="APP_NAME">%1$s</xliff:g>“."</string>
<string name="launch" msgid="4826921505917605463">"Atidaryti"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Saugumo sumetimais planš. komp. nustatytas progr., įsigytų iš nežinomų šaltinių, diegimo blokavimas."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Saugos sumetimais TV blokuoja iš nežinomų šaltinių gautas programas."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Saugumo sumetimais telefone nustatytas programų, įsigytų iš nežinomų šaltinių, diegimo blokavimas."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Jūsų administratorius neleidžia diegti programų, gautų iš nežinomų šaltinių."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Jūsų administratorius neleidžia diegti programų, gautų iš nežinomų šaltinių"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Šis naudotojas negali diegti nežinomų programų"</string>
<string name="ok" msgid="3468756155452870475">"Gerai"</string>
<string name="settings" msgid="6743583734099755409">"Nustatymai"</string>
<string name="manage_applications" msgid="4033876279091996596">"Tvarkyti programas"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Gerai"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Programa nerasta"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Programa nerasta įdiegtų programų sąraše."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Neleidžiama"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Dabartiniam naudotojui neleidžiama atlikti šio pašalinimo veiksmo."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Klaida"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Nepavyko įdiegti programos."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Pašalinti programą"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Pašalinti naujinį"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"„<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g>“ yra šios programos dalis:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ar norite pašalinti šią naudotojo <xliff:g id="USERNAME">%1$s</xliff:g> programą?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Pakeisti šios programos versiją į gamyklinę? Visi duomenys bus pašalinti."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Pakeisti šios programos versiją į gamyklinę? Visi duomenys bus pašalinti. Tai paveiks visus šio įrenginio naudotojus, įskaitant turinčius darbo profilius."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Vykdomi įdiegimai"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Nepavykę įdiegimai"</string>
<string name="uninstalling" msgid="5556217435895938250">"Pašalinama..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Pašalinama „<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>“…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Pašalinimas baigtas."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Paketas „<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>“ pašalintas"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Nepavyko pašalinti."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Negalima pašalinti, nes šis paketas yra aktyvus įrenginio administratorius."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nepavyksta pašalinti, nes šis paketas yra aktyvus naudotojo <xliff:g id="USERNAME">%1$s</xliff:g> įreng. administr."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"„<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>“ pašalinimo veiksmas nesėkmingas."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Negalima pašalinti aktyvios įrenginio administravimo programos"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Negalima pašalinti aktyvios naudotojo <xliff:g id="USERNAME">%1$s</xliff:g> įrenginio administravimo programos"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ši programa reikalinga kai kuriems naudotojams ar kai kuriuose profiliuose ir buvo pašalinta kitur"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ši programa reikalinga jūsų profilyje ir jos negalima pašalinti."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ši programa reikalinga jūsų įrenginio administratoriui ir jos negalima pašalinti."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Valdyti įrenginio administratorius"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Tvarkyti įrenginio administravimo programas"</string>
<string name="manage_users" msgid="3125018886835668847">"Valdyti naudotojus"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Nepavyko pašalinti „<xliff:g id="APP_NAME">%1$s</xliff:g>“."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Analizuojant paketą iškilo problema."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Šiam naujiniui nereikalingi nauji leidimai."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ar norite suteikti šiuos leidimus? Bus suteikta prieiga prie:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Atmesti"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Daugiau informacijos"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Vis tiek atmesti"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> iš <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Leisti programai &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Išjungta leidimų: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"visi leidimai išjungti"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nė vienas leidimas neišjungtas"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Leisti"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programos"</string>
<string name="app_permissions" msgid="3146758905824597178">"Programos leidimai"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Diegimo / pašalinimo veiksmai nepalaikomi sistemoje „Wear“."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Programa „<xliff:g id="APP_NAME_0">%1$s</xliff:g>“ buvo atnaujinta. Leisti programai „<xliff:g id="APP_NAME_1">%1$s</xliff:g>“ pasiekti toliau nurodytus dalykus?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Pasirinkite, ką norite leisti programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pasiekti"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ buvo atnaujinta. Pasirinkite, ką norite leisti šiai programai pasiekti."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Pasirinkite, ką norite leisti programai &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; pasiekti"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Programa &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; buvo atnaujinta. Pasirinkite, ką norite leisti šiai programai pasiekti."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Atšaukti"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Tęsti"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nauji leidimai"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Dabartiniai leidimai"</string>
<string name="message_staging" msgid="6151794817691100003">"Programa pateikiama etapais…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nežinoma"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Saugos sumetimais planšetiniame kompiuteryje neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Saugos sumetimais TV neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Saugos sumetimais telefone neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonas ir asmeniniai duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą telefonui arba prarastus duomenis dėl šios programos naudojimo."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Planšetinis kompiuteris ir asmeniniai duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą planšetiniam kompiuteriui arba prarastus duomenis dėl šios programos naudojimo."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV ir asmeniniai duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą TV arba prarastus duomenis dėl šios programos naudojimo."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Tęsti"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Nustatymai"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Įdiegiamos / pašalinamos „Wear“ program."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 15da1a0c..e29f3f6e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Atcelt"</string>
<string name="unknown" msgid="4742479012767208045">"Nezināms"</string>
<string name="installing" msgid="8613631001631998372">"Notiek instalēšana..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Notiek pakotnes <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> instalēšana…"</string>
<string name="install_done" msgid="3682715442154357097">"Lietotne ir instalēta."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Vai vēlaties instalēt šo lietojumprogrammu? Tā iegūs piekļuvi:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Vai vēlaties instalēt šo lietojumprogrammu? Tai nav nepieciešamas īpašas piekļuves atļaujas."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vai vēlaties instalēt šīs iebūvētās lietojumprogrammas atjauninājumu? Esošie dati netiks zaudēti. Tam nav nepieciešama īpaša piekļuves atļauja."</string>
<string name="install_failed" msgid="6579998651498970899">"Lietotne nav instalēta."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Pakotnes instalēšana tika bloķēta."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakotne ir konfliktā ar esošo pakotni, jo to nosaukumi ir vienādi."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Šī lietotne nav saderīga ar jūsu planšetdatoru."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Lietotne netika instalēta, jo rodas pakotnes konflikts ar esošo pakotni."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Lietotne netika instalēta, jo tā nav saderīga ar jūsu planšetdatoru."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Šī lietotne nav saderīga ar jūsu televizoru."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Šī lietotne nav saderīga ar jūsu tālruni."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Šķiet, ka pakotne ir bojāta."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Lietotne netika instalēta, jo tā nav saderīga ar jūsu tālruni."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Lietotne netika instalēta, jo šķiet, ka pakotne nav derīga."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> nevarēja instalēt planšetdatorā."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> nevarēja instalēt jūsu televizorā."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> nevarēja instalēt tālrunī."</string>
<string name="launch" msgid="4826921505917605463">"Atvērt"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Drošības dēļ planšetdatorā tiek bloķēta to lietotņu instalēšana, kas iegūtas no nezināmiem avotiem."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Drošības nolūkos jūsu televizorā tiek bloķēta no nezināmiem avotiem iegūtu lietotņu instalēšana."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Drošības dēļ tālrunī tiek bloķēta to lietotņu instalēšana, kas iegūtas no nezināmiem avotiem."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Jūsu administrators neļauj instalēt lietotnes, kas iegūtas no nezināmiem avotiem."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Jūsu administrators neļauj instalēt lietotnes, kas iegūtas no nezināmiem avotiem."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Šis lietotājs nevar instalēt lietotnes, kas iegūtas no nezināmiem avotiem."</string>
<string name="ok" msgid="3468756155452870475">"Labi"</string>
<string name="settings" msgid="6743583734099755409">"Iestatījumi"</string>
<string name="manage_applications" msgid="4033876279091996596">"Pārvaldīt lietotnes"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Labi"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Lietotne nav atrasta"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Šī lietotne netika atrasta instalēto lietotņu sarakstā."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nav atļauts"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Pašreizējam lietotājam nav atļauts veikt atinstalēšanu."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Kļūda"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Nevarēja atinstalēt lietotni."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Atinstalēt lietotni"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Atinstalēt atjauninājumu"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> ir daļa no šādas lietotnes:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Vai vēlaties atinstalēt šo lietotni lietotājam <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Vai aizstāt šo lietotni ar rūpnīcas versiju? Visi dati tiks noņemti."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Vai aizstāt šo lietotni ar rūpnīcas versiju? Visi dati tiks noņemti. Tas ietekmēs visu šīs ierīces lietotāju (arī to lietotāju, kuriem ir darba profili) datus."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Pašlaik veiktie atinstalēšanas gadījumi"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neizdevušies atinstalēšanas gadījumi"</string>
<string name="uninstalling" msgid="5556217435895938250">"Notiek atinstalēšana..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Notiek lietotnes <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> atinstalēšana…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Atinstalēšana ir pabeigta."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Lietotne <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ir atinstalēta"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Atinstalēšana neizdevās."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nevar atinstalēt, jo ar šo pakotni tiek veikta ierīces administrēšana."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nevar atinstalēt, jo pakotne ietver aktīvu ierīces administratoru lietotājam <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Lietotnes <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> atinstalēšana nebija sekmīga."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Neizdevās atinstalēt aktīvas ierīces administratora lietotnes."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Neizdevās atinstalēt aktīvas ierīces administratora lietotni <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Šī lietotne ir nepieciešama dažiem lietotājiem vai profiliem un tika atinstalēta citiem"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Šī lietotne ir nepieciešama jūsu profilam, tāpēc to nevar atinstalēt."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ierīces administrators ir noteicis, ka lietotne ir obligāta un to nevar atinstalēt."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Pārvaldīt ierīces administratorus"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Pārvaldīt ierīces administratora lietotnes"</string>
<string name="manage_users" msgid="3125018886835668847">"Pārvaldīt lietotājus"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> nevarēja atinstalēt."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Parsējot pakotni, radās problēma."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Šim atjauninājumam nav nepieciešamas jaunas atļaujas."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Vai vēlaties piešķirt tālāk norādītās atļaujas? Tiks piešķirta šāda piekļuve:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Neatļaut"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Plašāka informācija"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Tomēr noraidīt"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>. no <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Vai atļaut lietotnei &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> atspējotas"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"visas atspējotas"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"neviena nav atspējota"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Atļaut"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Lietotnes"</string>
<string name="app_permissions" msgid="3146758905824597178">"Lietotnes atļaujas"</string>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ierīcē netiek atbalstīta instalēšana/atinstalēšana"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Lietotne <xliff:g id="APP_NAME_0">%1$s</xliff:g> ir atjaunināta. Vai atļaut lietotnei <xliff:g id="APP_NAME_1">%1$s</xliff:g> piekļūt tālāk norādītajiem vienumiem?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Izvēlieties, kādas piekļuves atļaujas piešķirt lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> ir atjaunināta. Izvēlieties, kādas piekļuves atļaujas tai piešķirt."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Izvēlieties, kādas piekļuves atļaujas piešķirt lietotnei &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Lietotne &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ir atjaunināta. Izvēlieties, kādas piekļuves atļaujas tai piešķirt."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Atcelt"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Turpināt"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Jaunas atļaujas"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Pašreizējās atļaujas"</string>
<string name="message_staging" msgid="6151794817691100003">"Lietotne tiek izstādīta…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nezināms"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Drošības nolūkos jūsu planšetdatorā nedrīkst instalēt no šī avota iegūtas nezināmas lietotnes."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Drošības nolūkos jūsu televizorā nedrīkst instalēt no šī avota iegūtas nezināmas lietotnes."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Drošības nolūkos jūsu tālrunī nedrīkst instalēt no šī avota iegūtas nezināmas lietotnes."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Jūsu tālruņa un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par tālruņa bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Jūsu planšetdatora un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par planšetdatora bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Jūsu televizora un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par televizora bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Turpināt"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Iestatījumi"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear lietotņu instalēšana/atinstalēšana"</string>
</resources>
diff --git a/res/values-mk-rMK-television/strings.xml b/res/values-mk-television/strings.xml
index bb3ea921..bb3ea921 100644
--- a/res/values-mk-rMK-television/strings.xml
+++ b/res/values-mk-television/strings.xml
diff --git a/res/values-mk-rMK-watch/strings.xml b/res/values-mk-watch/strings.xml
index 5906f56d..5906f56d 100644
--- a/res/values-mk-rMK-watch/strings.xml
+++ b/res/values-mk-watch/strings.xml
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk/strings.xml
index 82dafb27..0e27dc72 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Откажи"</string>
<string name="unknown" msgid="4742479012767208045">"Непознато"</string>
<string name="installing" msgid="8613631001631998372">"Се инсталира..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Се инсталира <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Дали сакате да инсталирате надградба на оваа вградена апликација? Вашите постоечки податоци нема да се изгубат. Таа не бара никаков посебен пристап."</string>
<string name="install_failed" msgid="6579998651498970899">"Апликацијата не е инсталирана."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Инсталирањето на пакетот е блокирано."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакетот се судира со веќе постоечки пакет со исто име."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Оваа апликација не е компатибилна со вашиот таблет."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Апликација што не е инсталирана како пакет е во конфликт со постоен пакет."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Апликација што не е инсталирана како апликација не е компатибилна со вашиот таблет."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Оваа апликација не е компатибилна со вашиот телевизор."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Оваа апликација не е компатибилна со вашиот телефон."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Се чини дека пакетот е оштетен."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Апликација што не е инсталирана како апликација не е компатибилна со вашиот телефон."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Апликација што не е инсталирана како пакет се чини дека е неважечка."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Вашиот администратор не дозволува инсталација на апликации добиени од непознати извори"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Корисников не може да инсталира непознати апликации"</string>
<string name="ok" msgid="3468756155452870475">"Во ред"</string>
<string name="settings" msgid="6743583734099755409">"Поставки"</string>
<string name="manage_applications" msgid="4033876279091996596">"Управувај со апликации"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Не е дозволено"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Тековниот корисник нема дозвола да ја изведе деинсталацијава."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Грешка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Не можеше да се деинсталира апликацијата."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Дали сакате да ја деинсталирате апликацијава за корисникот <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Сакате да ја замените оваа апликација со фабричката верзија? Сите податоци ќе се отстранат."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Сакате да ја замените оваа апликација со фабричката верзија? Сите податоци ќе се отстранат. Тоа важи за сите корисници на овој уред, вклучувајќи ги и тие со работни профили."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Деинсталации во тек"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Неуспешни деинсталации"</string>
<string name="uninstalling" msgid="5556217435895938250">"Се деинсталира..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Се деинсталира <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Деинсталирањето заврши."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> е деинсталиран"</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_failed_app" msgid="945277834056527022">"Деинсталирањето на <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> е неуспешно."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Не може да се деинсталира активна апликација на администраторот на уредот"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Не може да се деинсталира активна апликација на администраторот на уредот за <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Апликацијата е неопходна за некои корисници или профили, а за другите е деинсталирана"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Апликацијата е потребна за вашиот профил и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Апликацијата ја бара администраторот на вашиот уред и не може да се деинсталира."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Управувај со администратори на уредот"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Управувај со аплик. за администраторот на уредот"</string>
<string name="manage_users" msgid="3125018886835668847">"Управувај со корисници"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> не може да се деинсталира."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Настана проблем при разложување на пакетот."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ова ажурирање не бара нови дозволи."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Дали сакате да ги доделите следниве дозволи? Тоа ќе овозможи пристап кон:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Одбиј"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Повеќе информации"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Сепак одбиј"</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="7332275268559121742">"Дозволете &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; да <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Оневозможени се <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"сите се оневозможени"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ниедна не е оневозможена"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Овозможи"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апликации"</string>
<string name="app_permissions" msgid="3146758905824597178">"Дозволи за апликацијата"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Дејствата инсталирај/деинсталирај не се поддржани на Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> е ажурирана. Овозможете ѝ на <xliff:g id="APP_NAME_1">%1$s</xliff:g> пристап до следново?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Изберете што да ѝ се овозможи на <xliff:g id="APP_NAME">%1$s</xliff:g> за пристап"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> е ажурирана. Изберете што да ѝ се овозможи на оваа апликација за пристап."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Изберете што да ѝ се овозможи на &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; за пристап"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; е ажурирана. Изберете што да ѝ се овозможи на оваа апликација за пристап."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Откажи"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Продолжи"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Нови дозволи"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Тековни дозволи"</string>
<string name="message_staging" msgid="6151794817691100003">"Апликацијата се поставува…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Непознато"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"За ваша безбедност, таблетот нема дозвола за инсталирање непознати апликации од изворов."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"За ваша безбедност, телевизорот нема дозвола за инсталирање непознати апликации од изворов."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"За ваша безбедност, телефонот нема дозвола за инсталирање непознати апликации од изворов."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Телефонот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на телефонот или губењето податоци што може да произлезат од нејзиното користење."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Таблетот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на таблетот или губењето податоци што може да произлезат од нејзиното користење."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Телевизорот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на телевизорот или губењето податоци што може да произлезат од нејзиното користење."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Продолжи"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Поставки"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Се инсталираат/деинсталираат аплик. Wear"</string>
</resources>
diff --git a/res/values-ml-rIN-television/strings.xml b/res/values-ml-television/strings.xml
index 5ede01fe..5ede01fe 100644
--- a/res/values-ml-rIN-television/strings.xml
+++ b/res/values-ml-television/strings.xml
diff --git a/res/values-ml-rIN-watch/strings.xml b/res/values-ml-watch/strings.xml
index 13e38761..13e38761 100644
--- a/res/values-ml-rIN-watch/strings.xml
+++ b/res/values-ml-watch/strings.xml
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml/strings.xml
index 32de1064..47542fb8 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"റദ്ദാക്കുക"</string>
<string name="unknown" msgid="4742479012767208045">"അജ്ഞാതം"</string>
<string name="installing" msgid="8613631001631998372">"ഇൻസ്റ്റാൾ ചെയ്യുന്നു..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ഇൻസ്‌റ്റാൾ ചെയ്യുന്നു…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"ഈ അന്തർ നിർമ്മിത അപ്ലിക്കേഷന് ഒരു അപ്‌ഡേറ്റ് ഇൻസ്റ്റാളുചെയ്യണോ? നിങ്ങളുടെ നിലവിലെ ഡാറ്റ നഷ്‌ടപ്പെടില്ല. ഇതിന് പ്രത്യേക ആക്‌സസ്സൊന്നും ആവശ്യമില്ല."</string>
<string name="install_failed" msgid="6579998651498970899">"അപ്ലിക്കേഷൻ ഇൻസ്റ്റാളുചെയ്‌തില്ല."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ നിന്നും പാക്കേജിനെ തടഞ്ഞു."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ഇതേ പേരിൽ നിലവിലുള്ള ഒരു പാക്കേജുമായി ഈ പാക്കേജിന് വൈരുദ്ധ്യമുണ്ട്."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"നിങ്ങളുടെ ടാബ്‌ലെറ്റിന് ഈ ആപ്പ് അനുയോജ്യമല്ല."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"നിലവിലുള്ള ഒരു പാക്കേജുമായി പാക്കേജിന് പൊരുത്തക്കേടുള്ളതിനാൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തില്ല."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"നിങ്ങളുടെ ടാബ്‌ലെറ്റുമായി അനുയോജ്യത ഇല്ലാത്തതിനാൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തില്ല."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"നിങ്ങളുടെ ടിവിയ്‌ക്ക് ഈ ആപ്പ് അനുയോജ്യമല്ല."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"നിങ്ങളുടെ ഫോണിന് ഈ ആപ്പ് അനുയോജ്യമല്ല."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"പാക്കേജ് കേടായതായി തോന്നുന്നു."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"നിങ്ങളുടെ ഫോണുമായി അനുയോജ്യത ഇല്ലാത്തതിനാൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തില്ല."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"പാക്കേജ് അസാധുവായി കാണപ്പെടുന്നതിനാൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തില്ല."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"അജ്ഞാത ഉറവിടങ്ങളിൽ നിന്ന് സ്വന്തമാക്കിയ ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ അനുവദിക്കുന്നില്ല"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ഈ ഉപയോക്താവിന്, തിരിച്ചറിയാനാകാത്ത ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയില്ല"</string>
<string name="ok" msgid="3468756155452870475">"ശരി"</string>
<string name="settings" msgid="6743583734099755409">"ക്രമീകരണം"</string>
<string name="manage_applications" msgid="4033876279091996596">"അപ്ലിക്കേഷനുകൾ നിയന്ത്രിക്കുക"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"അനുവദിച്ചിട്ടില്ല"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ഈ അൺഇൻസ്റ്റലേഷൻ നിർവഹിക്കാൻ നിലവിലെ ഉപയോക്താവിനെ അനുവദിച്ചിട്ടില്ല."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"പിശക്"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ആപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിഞ്ഞില്ല."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> എന്ന ഉപയോക്താവിനായി ഈ അപ്ലിക്കേഷൻ അൺഇൻസ്റ്റാളുചെയ്യണോ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ഫാക്ടറി പതിപ്പ് ഉപയോഗിച്ച് ഈ ആപ്പ് മാറ്റിസ്ഥാപിക്കണോ? എല്ലാ ഡാറ്റയും നീക്കംചെയ്യപ്പെടും."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ഫാക്ടറി പതിപ്പ് ഉപയോഗിച്ച് ഈ ആപ്പ് മാറ്റിസ്ഥാപിക്കണോ? എല്ലാ ഡാറ്റയും നീക്കംചെയ്യപ്പെടും. ഔദ്യോഗിക പ്രൊഫൈലുകൾ ഉള്ളവർ ഉൾപ്പെടെ, ഈ ഉപകരണത്തിന്റെ എല്ലാ ഉപയോക്താക്കളെയും ഇത് ബാധിക്കുന്നു."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"അൺ ഇൻസ്‌റ്റാൾ ചെയ്‌തുകൊണ്ടിരിക്കുന്നവ"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"അൺ ഇൻസ്‌റ്റാൾ ചെയ്യാൻ കഴിയാഞ്ഞവ"</string>
<string name="uninstalling" msgid="5556217435895938250">"അൺഇൻസ്‌‌റ്റാൾ ചെയ്യുന്നു..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> അൺഇൻസ്റ്റാൾ ചെയ്യുന്നു…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"അൺഇൻസ്റ്റാളുചെയ്യൽ പൂർത്തിയായി."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> അൺഇൻസ്‌റ്റാൾ ചെയ്‌തു"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> അൺഇൻസ്റ്റാൾ ചെയ്യൽ പരാജയം."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"സജീവ ഉപകരണ അഡ്‌മിൻ ആപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയില്ല"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> എന്ന ഉപയോക്താവിന്റെ സജീവ ഉപകരണ അഡ്‌മിൻ ആപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയില്ല"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ചില ഉപയോക്താക്കൾക്കോ പ്രൊഫൈലുകൾക്കോ ഈ ആപ്പ് ആവശ്യമാണ്, മറ്റുള്ളവർക്ക് ഈ ആപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നു"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിന് ഈ ആപ്പ് ആവശ്യമുള്ളതിനാൽ അത് അൺ‌ഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"നിങ്ങളുടെ ഉപകരണ അഡ്മിനിസ്ട്രേറ്ററിന് ഈ അപ്ലിക്കേഷൻ ആവശ്യമുള്ളതിനാൽ ഇത് അൺഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ഉപകരണ അഡ്മിനിസ്ട്രേറ്റർമാരെ നിയന്ത്രിക്കുക"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ഉപകരണ അഡ്‌മിൻ ആപ്പുകളെ മാനേജുചെയ്യുക"</string>
<string name="manage_users" msgid="3125018886835668847">"ഉപയോക്താക്കളെ മാനേജുചെയ്യുക"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> അൺഇൻസ്റ്റാളുചെയ്യാനായില്ല."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"പാക്കേജ് പാഴ്‌സുചെയ്യുന്നതിൽ ഒരു പ്രശ്‌നമുണ്ടായിരുന്നു."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ഈ അപ്‌ഡേറ്റിന് പുതിയ അനുമതികളൊന്നും ആവശ്യമില്ല."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ഇനിപ്പറയുന്ന അനുമതികൾ അനുവദിക്കണോ? ഇതിന് ഇവയിലേക്ക് ആക്‌സസ്സ് ലഭിക്കും:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"നിരസിക്കുക"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"കൂടുതൽ‍ വിവരങ്ങള്‍"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"എന്തായാലും നിരസിക്കുക"</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="7332275268559121742">"<xliff:g id="ACTION">%2$s</xliff:g> &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ആപ്പിനെ അനുവദിക്കണോ?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"എല്ലാം പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ഒന്നും പ്രവർത്തനരഹിതമാക്കിയിട്ടില്ല"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"അനുവദിക്കുക"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ആപ്സ്"</string>
<string name="app_permissions" msgid="3146758905824597178">"ആപ്പ് അനുമതികൾ"</string>
@@ -99,7 +111,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"ഈ ആപ്പ് Android-ന്റെ പഴയ പതിപ്പിനായാണ് രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നത്. അനുമതി നിരസിക്കുന്നത് തുടർന്ന് ഉദ്ദേശിച്ചവിധം പ്രവർത്തിക്കാതിരിക്കാനിടയാക്കുന്നു."</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">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ഇൻസ്റ്റാളോ അൺഇൻസ്റ്റാളോ ചെയ്യുന്നതിന് Wear-ൽ പിന്തുണയില്ല"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> അപ്‌ഡേറ്റ് ചെയ്തു. ഇനിപ്പറയുന്നത് ആക്സസ് ചെയ്യാൻ <xliff:g id="APP_NAME_1">%1$s</xliff:g> ആപ്പിനെ അനുവദിക്കണോ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"എന്ത് ആക്സസ് ചെയ്യാനാണ് <xliff:g id="APP_NAME">%1$s</xliff:g> അപ്പിനെ അനുവദിക്കേണ്ടതെന്ന് തീരുമാനിക്കുക."</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> അപ്‌ഡേറ്റ് ചെയ്തു. എന്ത് ആക്സസ് ചെയ്യാനാണ് ഈ അപ്പിനെ അനുവദിക്കേണ്ടതെന്ന് തീരുമാനിക്കുക."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"എന്തൊക്കെ ആക്സസ്സ് ചെയ്യാനാണ് &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ആപ്പിനെ അനുവദിക്കേണ്ടതെന്ന് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; അപ്‌ഡേറ്റ് ചെയ്തിരിക്കുന്നു. എന്തൊക്കെ ആക്സസ്സ് ചെയ്യാനാണ് ഈ ആപ്പിനെ അനുവദിക്കേണ്ടതെന്ന് തിരഞ്ഞെടുക്കുക."</string>
<string name="review_button_cancel" msgid="957906817733578877">"റദ്ദാക്കുക"</string>
<string name="review_button_continue" msgid="4809162078179371370">"തുടരുക"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"പുതിയ അനുമതികൾ"</string>
<string name="current_permissions_category" msgid="998210994450606094">"നിലവിലെ അനുമതികൾ"</string>
<string name="message_staging" msgid="6151794817691100003">"ആപ്പ് തയ്യാറാക്കുന്നു…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"അജ്ഞാതം"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, തിരിച്ചറിയാനാകാത്ത ആപ്‌സ് ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങളുടെ ടാബ്‌ലെറ്റ് അനുവദിക്കപ്പെടില്ല."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, തിരിച്ചറിയാനാകാത്ത ആപ്‌സ് ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങളുടെ ടിവി അനുവദിക്കപ്പെടില്ല."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, തിരിച്ചറിയാനാകാത്ത ആപ്‌സ് ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങളുടെ ഫോൺ അനുവദിക്കപ്പെടില്ല."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"തിരിച്ചറിയാനാകാത്ത ആപ്പുകളാൽ നിങ്ങളുടെ ഫോണും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ഫോണിന് സംഭവിച്ചേക്കാവുന്ന എല്ലാ നാശനഷ്‌ടങ്ങൾക്കും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടങ്ങൾക്കും നിങ്ങൾക്കാണ് ഉത്തരവാദിത്തമെന്ന് നിങ്ങൾ അംഗീകരിക്കുന്നു."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"തിരിച്ചറിയാനാകാത്ത ആപ്പുകളാൽ നിങ്ങളുടെ ടാബ്‌ലെറ്റും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ടാബ്‌ലെറ്റിന് സംഭവിച്ചേക്കാവുന്ന എല്ലാ നാശനഷ്‌ടങ്ങൾക്കും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടങ്ങൾക്കും നിങ്ങൾക്കാണ് ഉത്തരവാദിത്തമെന്ന് നിങ്ങൾ അംഗീകരിക്കുന്നു."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"തിരിച്ചറിയാനാകാത്ത ആപ്പുകളാൽ നിങ്ങളുടെ ടിവിയും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ടിവിക്ക് സംഭവിച്ചേക്കാവുന്ന എല്ലാ നാശനഷ്‌ടങ്ങൾക്കും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടങ്ങൾക്കും നിങ്ങൾക്കാണ് ഉത്തരവാദിത്തമെന്ന് നിങ്ങൾ അംഗീകരിക്കുന്നു."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"തുടരുക"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ക്രമീകരണം"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear ആപ്പുകൾ ഇൻസ്‌റ്റാൾ/അൺ ഇൻസ്‌റ്റാൾ ചെയ്യൽ"</string>
</resources>
diff --git a/res/values-mn-rMN-television/strings.xml b/res/values-mn-television/strings.xml
index 7d9e5f10..39c899f9 100644
--- a/res/values-mn-rMN-television/strings.xml
+++ b/res/values-mn-television/strings.xml
@@ -19,7 +19,7 @@
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Taтгалзаад дахин бүү асуугаарай"</string>
<string name="grant_dialog_how_to_change" msgid="615414835189256888">"Та дараа үүнийг Toхиргоо &amp; Апп дотроос солих боломжтой"</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>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Системийн аппыг харуулах"</string>
<string name="app_permissions_decor_title" msgid="1461057434211920209">"Апп-н зөвшөөрөл"</string>
<string name="manage_permissions_decor_title" msgid="4823785025722958092">"Апп-н зөвшөөрөл"</string>
<string name="permission_apps_decor_title" msgid="3644363529649579576">"<xliff:g id="PERMISSION">%1$s</xliff:g> зөвшөөрөл"</string>
diff --git a/res/values-mn-rMN-watch/strings.xml b/res/values-mn-watch/strings.xml
index 946cd297..120c336f 100644
--- a/res/values-mn-rMN-watch/strings.xml
+++ b/res/values-mn-watch/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5828565432145544298">"Татгалзах, дахин бүү асуугаарай"</string>
<string name="current_permission_template" msgid="6691830243038105737">"<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="7042886929865431207">"Системийн апп-ыг харуулах"</string>
+ <string name="preference_show_system_apps" msgid="7042886929865431207">"Системийн аппыг харуулах"</string>
<string name="permission_summary_enforced_by_policy" msgid="9002523259681588936">"Өөрчлөх боломжгүй"</string>
<string name="generic_yes" msgid="3394094077553763689">"Тийм"</string>
<string name="generic_cancel" msgid="6384078447202012984">"Цуцлах"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn/strings.xml
index a6d7f48b..c61e5fff 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn/strings.xml
@@ -24,28 +24,27 @@
<string name="cancel" msgid="8360346460165114585">"Цуцлах"</string>
<string name="unknown" msgid="4742479012767208045">"Тодорхойгүй"</string>
<string name="installing" msgid="8613631001631998372">"Суулгаж байна…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-г суулгаж байна…"</string>
<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>
- <string name="install_confirm_question_update" msgid="4624159567361487964">"Та энэ аппликешны шинэчлэлтийг суулгах уу? Таны хуучин дата устах болно. Шинэчлэгдсэн аппликешн нь дараахад хандаж чадна:"</string>
- <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Та энэ үндсэн аппликешны шинэчлэлтийг суулгах уу? Таны хуучин дата устах болно. Шинэчлэгдсэн аппликешн нь дараахад хандаж чадна:"</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Та энэ аппликейшны шинэчлэлтийг суулгах уу? Таны хуучин дата устах болно. Шинэчлэгдсэн аппликейшн нь дараахад хандаж чадна:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Та энэ үндсэн аппликейшны шинэчлэлтийг суулгах уу? Таны хуучин дата устах болно. Шинэчлэгдсэн аппликейшн нь дараахад хандаж чадна:"</string>
<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_blocked" msgid="1606870930588770025">"Багц суулгахыг блоклосон байна."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Энэ багц нь урьд нь суулгасан багцтай ижил нэртэй учир суулгах боломжгүй."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Энэ апп нь таны таблеттэй нийцэхгүй."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Багц одоогийн багцтай тохирохгүй байгаа тул апп-г суулгаж чадсангүй."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Апп таны таблеттай тохирохгүй байгаа тул үүнийг суулгасангүй."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Энэ апп нь таны ТВ-д нийцэхгүй."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Энэ апп нь таны утастай нийцэхгүй."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Багц эвдэрсэн гэж гарч байна."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Апп таны утсанд тохирохгүй байгаа тул үүнийг суулгасангүй."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Багц хүчингүй тул апп-г суулгасангүй."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Таны админ тодорхойгүй сурвалжаас татсан апп суулгахыг зөвшөөрдөггүй"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Энэ хэрэглэгч тодорхойгүй апп суулгах боломжгүй байна"</string>
<string name="ok" msgid="3468756155452870475">"ОК"</string>
<string name="settings" msgid="6743583734099755409">"Тохиргоо"</string>
<string name="manage_applications" msgid="4033876279091996596">"Апп удирдах"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Зөвшөөрөөгүй"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Одоогийн хэрэглэгч үүнийг устгах боломжгүй."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Алдаа"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Апп-г устгаж чадсангүй."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Та энэ апп-г <xliff:g id="USERNAME">%1$s</xliff:g> хэрэглэгчийн хувьд устгах уу?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Энэ апп-г үйлдвэрээс ирсэн хувилбараар нь солих уу? Бүх өгөгдөл устах болно."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Энэ апп-г үйлдвэрээс ирсэн хувилбараар нь солих уу? Бүх өгөгдөл устах болно. Энэ нь ажлын профайлтай хэрэглэгч зэрэг энэ төхөөрөмжийн бүх хэрэглэгчдэд үйлчлэх болно."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Устгаж байна"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Устгаж чадсангүй"</string>
<string name="uninstalling" msgid="5556217435895938250">"Устгаж байна…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-г устгаж байна…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Устгаж дуусав."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-г устгасан"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-г устгаж чадсангүй."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Идэвхтэй төхөөрөмжийн админ аппыг устгах боломжгүй"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g>-д идэвхтэй төхөөрөмжийн админ аппыг устгах боломжгүй байна"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Энэ апп нь зарим хэрэглэгч эсвэл профайлд шаардлагатай учир үүнийг тэдгээрээс бусад хэрэглэгчдээс устгасан"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Энэ апп таны профайлд шаардлагатай бөгөөд устгах боломжгүй."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Энэ апп нь таны төхөөрөмжийн админд шаардлагатай бөгөөд устгах боломжгүй."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Төхөөрөмжийн админуудыг удирдах"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Төхөөрөмжийн админ аппыг удирдах"</string>
<string name="manage_users" msgid="3125018886835668847">"Хэрэгчлэгчдийг удирдах"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г устгаж чадсангүй."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Багцийг задлахад алдаа гарав."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Энэ шинэчлэл шинэ зөвшөөрөл шаардахгүй."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Та дараах зөвшөөрлийг олгох уу? Энэ нь дараахд хандах боломжтой:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Татгалзах"</string>
- <string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Ямар ч үед татгалзах"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Дэлгэрэнгүй мэдээлэл"</string>
+ <string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Хэдийд ч татгалзах"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;-г <xliff:g id="ACTION">%2$s</xliff:g>-г зөвшөөрөх үү?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g>-г цуцалсан"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"бүгдийг цуцалсан"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"алийг ч цуцлаагүй"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Зөвшөөрөх"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апп"</string>
<string name="app_permissions" msgid="3146758905824597178">"Апп зөвшөөрөл"</string>
@@ -99,7 +111,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"Энэхүү аппыг нь Android-ын хуучин хувилбарт зориулсан. Зөвшөөрлийг үгүйсгэх нь цаашид ажиллахгүй болгож болно."</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">%2$d</xliff:g>-аас <xliff:g id="COUNT_0">%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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Суулгах/Устгах үйлдлийг Wear дэмжээгүй."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>-г шинэчилсэн. <xliff:g id="APP_NAME_1">%1$s</xliff:g>-д дараахад хандахыг зөвшөөрөх үү?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> юунд хандаж болохыг сонгох"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г шинэчилсэн. Апп юунд хандаж болохыг сонгоорой."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;-н хандаж болох зүйлсийг сонгоно уу"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;-г шинэчиллээ. Энэ апп-н хандаж болох зүйлсийг сонгоно уу."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Цуцлах"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Үргэлжлүүлэх"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Шинэ зөвшөөрөл"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Одоогийн зөвшөөрөл"</string>
<string name="message_staging" msgid="6151794817691100003">"Апп-г байршуулж байна…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Тодорхойгүй"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Таны аюулгүй байдлыг хангахын тулд таны таблет энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Таны аюулгүй байдлыг хангахын тулд таны ТВ энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Таны аюулгүй байдлыг хангахын тулд таны утас энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Таны утас болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны утсанд гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Таны таблет болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны таблетад гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Таны ТВ болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны ТВ-д гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Үргэлжлүүлэх"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Тохиргоо"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Зүүсгэл аппыг суулгаж/устгаж байна"</string>
</resources>
diff --git a/res/values-mr-rIN-television/strings.xml b/res/values-mr-television/strings.xml
index 22c52a9e..22c52a9e 100644
--- a/res/values-mr-rIN-television/strings.xml
+++ b/res/values-mr-television/strings.xml
diff --git a/res/values-mr-rIN-watch/strings.xml b/res/values-mr-watch/strings.xml
index 09ed3bf0..09ed3bf0 100644
--- a/res/values-mr-rIN-watch/strings.xml
+++ b/res/values-mr-watch/strings.xml
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr/strings.xml
index 27b59614..ec37f040 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"रद्द करा"</string>
<string name="unknown" msgid="4742479012767208045">"अज्ञात"</string>
<string name="installing" msgid="8613631001631998372">"स्थापित करीत आहे..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> इन्‍स्टॉल करत आहे…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"आपण या अंगभूत अनुप्रयोगावर अद्यतन स्थापित करू इच्छिता? आपला विद्यमान डेटा गमावणार नाही. यास कोणत्याही विशेष प्रवेशाची आवश्यकता नसते."</string>
<string name="install_failed" msgid="6579998651498970899">"अॅप स्थापित झाला नाही."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"पॅकेेच स्थापित होण्यास अवरोधित केलेले होते."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"पॅकेजच्या समान नावाच्या विद्यमान पॅकेजशी संघर्ष होईल."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"हा अॅप आपल्या टॅब्लेटशी सुसंगत नाही."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"पॅकेजचा विद्यमान पॅकेजशी विरोध असल्याने अॅप स्थापित केला नाही."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"अॅप आपल्या टॅब्लेटशी सुसंगत नसल्याने अॅप स्थापित केला नाही."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"हा अॅप आपल्या टीव्हीशी सुसंगत नाही."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"हा अॅप आपल्या फोनशी सुसंगत नाही."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"पॅकेज कदाचित दूषित आहे."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"अॅप आपल्या फोनशी सुसंगत नसल्याने अॅप स्थापित केला नाही."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"पॅकेज अवैध असल्याचे दिसत असल्याने अॅप स्थापित केला नाही."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"अज्ञात स्रोतांकडून मिळवलेल्या अॅप्सच्या स्थापनेला आपला प्रशासक अनुमती देत नाही"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"या वापरकर्त्याद्वारे अज्ञात अ‍ॅप्स स्थापित केली जाऊ शकत नाहीत"</string>
<string name="ok" msgid="3468756155452870475">"ठीक"</string>
<string name="settings" msgid="6743583734099755409">"सेटिंग्ज"</string>
<string name="manage_applications" msgid="4033876279091996596">"अ‍ॅप्स व्यवस्थापित करा"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"अनुमती नाही"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"हे विस्थापित करण्याची वर्तमान वापरकर्त्यास अनुमती नाही."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"त्रुटी"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"अॅप विस्थापित करणे शक्य झाले नाही."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"आपण <xliff:g id="USERNAME">%1$s</xliff:g> वापरकर्त्यासाठी हा अ‍ॅप विस्‍थापित करु इच्‍छिता?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"फॅक्टरी आवृत्तीसह हा अॅप पुनर्स्थित करायचा? सर्व डेटा काढला जाईल."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"फॅक्टरी आवृत्तीसह हा अॅप पुनर्स्थित करायचा? सर्व डेटा काढला जाईल. हे कार्य प्रोफाईल असलेल्यांसह या डिव्हाइसच्या सर्व वापरकर्त्यांना प्रभावित करते."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"विस्थापित करणे चालू आहे"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"विस्थापित करणे अयशस्वी झाले"</string>
<string name="uninstalling" msgid="5556217435895938250">"विस्थापित करीत आहे…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> विस्थापित करीत आहे…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"विस्थापित करणे समाप्त."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> विस्थापित केले"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> विस्थापित करणे अयशस्वी झाले."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"सक्रिय डिव्हाइस प्रशासक अ‍ॅप विस्थापित करू शकत नाही"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> साठी सक्रिय डिव्हाइस प्रशासक अ‍ॅप विस्थापित करू शकत नाही"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"हा अॅप काही वापरकर्ते किंवा प्रोफाईलसाठी आवश्यक आहे आणि इतरांसाठी विस्थापित केला होता"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"आपल्या प्रोफाईलसाठी हा अ‍ॅप आवश्यक आहे आणि विस्थापित केला जाऊ शकत नाही."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"आपल्‍या डिव्‍हाइस प्रशासकाद्वारे हा अ‍ॅप आवश्यक आहे आणि तो विस्‍थापित केला जाऊ शकत नाही."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"डिव्‍हाइस प्रशासकांना व्‍यवस्‍थापित करा"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"डिव्हाइस प्रशासक अ‍ॅप्स व्यवस्थापित करा"</string>
<string name="manage_users" msgid="3125018886835668847">"वापरकर्त्यांना व्यवस्‍थापित करा"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> विस्थापित केला जाऊ शकला नाही."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"पॅकेज चे विश्लेषण करताना समस्या आली."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"या अद्यतनास कोणत्याही नवीन परवानग्यांची आवश्यकता नाही."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"आपण खालील परवानग्‍यांना मंजूरी देऊ इच्‍छिता? त्‍यांना यावर प्रवेश मिळेल:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"नकार द्या"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"अधिक माहिती"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"तरीही नकार द्या"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ला <xliff:g id="ACTION">%2$s</xliff:g> ची अनुमती द्यायची?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> अक्षम केल्या"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"सर्व अक्षम केल्या"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"कोणत्याही अक्षम केल्या नाहीत"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमती द्या"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"अॅप्स"</string>
<string name="app_permissions" msgid="3146758905824597178">"अॅप परवानग्या"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"स्थापित करा/विस्थापित करा क्रिया Wear वर समर्थित नाहीत."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> अद्यतनित केला गेला आहे. <xliff:g id="APP_NAME_1">%1$s</xliff:g> ला खालील गोष्‍टींमध्‍ये प्रवेश करण्‍यासाठी अनुमती द्यायची?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ला कशामध्‍ये प्रवेश करण्‍याची अनुमती द्यावी ते निवडा"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> अद्यतनित केला गेला आहे. या अॅपला कशामध्‍ये प्रवेश करण्‍याची अनुमती द्यावी ते निवडा."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ला कशामध्‍ये प्रवेश करण्‍याची अनुमती द्यावी ते निवडा"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; अद्यतनित केला गेला आहे. या अॅपला कशामध्‍ये प्रवेश करण्‍याची अनुमती द्यावी ते निवडा."</string>
<string name="review_button_cancel" msgid="957906817733578877">"रद्द करा"</string>
<string name="review_button_continue" msgid="4809162078179371370">"सुरू ठेवा"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"नवीन परवानग्या"</string>
<string name="current_permissions_category" msgid="998210994450606094">"वर्तमान परवानग्या"</string>
<string name="message_staging" msgid="6151794817691100003">"अॅप प्रारंभाच्या स्थितीत आहे..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"अज्ञात"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"आपल्या सुरक्षिततेसाठी, आपल्या टॅबलेटला या स्रोताकडील अज्ञात अ‍ॅप्स स्थापित करण्याची अनुमती नाही."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"आपल्या सुरक्षिततेसाठी, आपल्या टीव्हीला या स्रोताकडील अज्ञात अ‍ॅप्स स्थापित करण्याची अनुमती नाही."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"आपल्या सुरक्षिततेसाठी, आपल्या फोनला या स्रोताकडील अज्ञात अ‍ॅप्स स्थापित करण्याची अनुमती नाही."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"तुमचा फोन आणि वैयक्तिक डेटा अज्ञात अॅप्‍समुळे होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हा अॅप इन्‍स्‍टॉल करून, तुम्‍ही सहमती देता की तो वापरल्‍याने होणार्‍या तुमच्‍या फोनच्‍या कोणत्‍याही प्रकारच्‍या नुकसान किंवा डेटा हानीसाठी तुम्ही जबाबदार आहात."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"तुमचा टॅबलेट आणि वैयक्तिक डेटा अज्ञात अॅप्‍समुळे होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हा अॅप इन्‍स्‍टॉल करून, तुम्‍ही सहमती देता की तो वापरल्‍याने होणार्‍या तुमच्‍या टॅबलेटच्‍या कोणत्‍याही प्रकारच्‍या नुकसान किंवा डेटा हानीसाठी तुम्ही जबाबदार आहात."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"तुमचा टीव्‍ही आणि वैयक्तिक डेटा अज्ञात अॅप्‍समुळे होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हा अॅप इन्‍स्‍टॉल करून, तुम्ही सहमती देता की तो वापरल्‍याने होणार्‍या तुमच्‍या टीव्‍हीच्‍या कोणत्‍याही प्रकारच्‍या नुकसान किंवा डेटा हानीसाठी तुम्‍ही जबाबदार आहात."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"सुरू ठेवा"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"सेटिंग्ज"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"वेअर अ‍ॅप्स इन्‍स्टॉल/अनइन्‍स्टॉल करणे"</string>
</resources>
diff --git a/res/values-ms-rMY-television/strings.xml b/res/values-ms-television/strings.xml
index 989aba7b..989aba7b 100644
--- a/res/values-ms-rMY-television/strings.xml
+++ b/res/values-ms-television/strings.xml
diff --git a/res/values-ms-rMY-watch/strings.xml b/res/values-ms-watch/strings.xml
index dad185fa..dad185fa 100644
--- a/res/values-ms-rMY-watch/strings.xml
+++ b/res/values-ms-watch/strings.xml
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms/strings.xml
index e01b9112..a2c81b2a 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Batal"</string>
<string name="unknown" msgid="4742479012767208045">"Tidak diketahui"</string>
<string name="installing" msgid="8613631001631998372">"Memasang..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Memasang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikasi dipasang."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Adakah anda mahu memasang aplikasi ini? Aplikasi ini akan mendapat akses kepada:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Adakah anda mahu memasang aplikasi ini? Aplikasi ini tidak memerlukan sebarang akses khas."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Adakah anda mahu memasang kemas kini untuk aplikasi terbina dalam ini? Data sedia ada anda tidak akan hilang. Hal ini tidak memerlukan sebarang akses khas."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikasi tidak dipasang."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Pakej ini telah disekat daripada dipasang."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakej ini bercanggah dengan pakej yang sedia ada kerana mempunyai nama yang sama."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Apl ini tidak serasi dengan tablet anda."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Apl tidak dipasang kerana pakej bercanggah dengan pakej yang sedia ada."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Apl tidak dipasang kerana apl tidak serasi dengan tablet anda."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Apl ini tidak serasi dengan TV anda."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Apl ini tidak serasi dengan telefon anda."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pakej itu kelihatan seperti telah rosak."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Apl tidak dipasang kerana apl tidak serasi dengan telefon anda."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Apl tidak dipasang kerana pakej tidak sah."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasangkan pada tablet anda."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak boleh dipasang pada TV anda."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dipasangkan pada telefon anda."</string>
<string name="launch" msgid="4826921505917605463">"Buka"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Untuk keselamatan, tetapan tablet anda menyekat pemasangan apl dari sumber yang tidak diketahui."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Untuk keselamatan, TV anda ditetapkan untuk menyekat pemasangan apl dari sumber yang tidak dketahui."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Untuk keselamatan, tetapan telefon anda menyekat pemasangan apl dari sumber yang tidak diketahui."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Pentadbir anda tidak membenarkan pemasangan apl yang diperoleh dari sumber yang tidak diketahui."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Pentadbir anda tidak membenarkan pemasangan apl yang diperoleh daripada sumber yang tidak diketahui"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Apl yang tidak diketahui tidak boleh dipasang oleh pengguna ini"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Tetapan"</string>
<string name="manage_applications" msgid="4033876279091996596">"Urus aplikasi"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikasi tidak ditemui"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikasi tidak ditemui dalam senarai aplikasi yang dipasang."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Tidak dibenarkan"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Pengguna semasa tidak dibenarkan untuk melaksanakan penyahpasangan ini."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Ralat"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Apl tidak dapat dinyapasang."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Nyahpasang aplikasi"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Nyahpasang kemas kini"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> merupakan sebahagian daripada aplikasi berikut:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Adakah anda ingin menyahpasang apl ini untuk pengguna <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Gantikan apl ini dengan versi kilang? Semua data akan dialih keluar."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Gantikan apl ini dengan versi kilang? Semua data akan dialih keluar. Tindakan ini melibatkan semua pengguna peranti ini, termasuk mereka yang mempunyai profil kerja."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Penyahpasangan yang sedang berjalan"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Penyahpasangan yang gagal"</string>
<string name="uninstalling" msgid="5556217435895938250">"Menyahpasang..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Menyahpasang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Nyahpasang selesai."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> dinyahpasang"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Nyahpasang tidak berjaya."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Tidak boleh menyahpasang kerana pakej ini adalah pentadbir peranti yang aktif."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Tidak boleh menyahpasang kerana pakej ini adalah pentadbir peranti yang aktif untuk pengguna <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Tidak berjaya menyahpasang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Tidak dapat menyahpasang apl pentadbir peranti yang aktif"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Tidak dapat menyahpasang apl pentadbir peranti yang aktif untuk <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Apl ini diperlukan untuk sesetengah pengguna atau profil dan telah dinyahpasang untuk yang lain"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Apl ini diperlukan untuk profil anda dan tidak boleh dinyahpasang."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Apl ini diperlukan oleh pentadbir peranti anda dan tidak boleh dinyahpasang."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Urus pentadbir peranti"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Urus apl pentadbir peranti"</string>
<string name="manage_users" msgid="3125018886835668847">"Urus pengguna"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dinyahpasang."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Terdapat masalah menghuraikan pakej."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Kemas kini ini tidak memerlukan kebenaran baharu."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Adakah anda ingin memberikan kebenaran berikut? Apl akan mendapat akses ke:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Tolak"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Maklumat lanjut"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Tolak juga"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> daripada <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Benarkan &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> dilumpuhkan"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"semua dilumpuhkan"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"tiada apa-apa yang dilumpuhkan"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Benarkan"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apl"</string>
<string name="app_permissions" msgid="3146758905824597178">"Kebenaran apl"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Tindakan pasang/nyahpasang tidak disokong pada Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> telah dikemas kini. Benarkan <xliff:g id="APP_NAME_1">%1$s</xliff:g> mengakses perkara berikut?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Pilih perkara yang boleh diakses oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah dikemas kini. Pilih perkara yang boleh diakses oleh apl ini."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Pilih perkara yang boleh diakses oleh &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; telah dikemas kini. Pilih perkara yang boleh diakses oleh apl ini."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Batal"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Teruskan"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Kebenaran baharu"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Kebenaran semasa"</string>
<string name="message_staging" msgid="6151794817691100003">"Pemeringkatan apl…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Tidak diketahui"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Untuk keselamatan, tablet anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Untuk keselamatan, TV anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Untuk keselamatan, telefon anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefon dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada telefon anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tablet dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada tablet anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada TV anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Teruskan"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Tetapan"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Memasang/menyahpasang apl wear"</string>
</resources>
diff --git a/res/values-my-rMM-television/strings.xml b/res/values-my-television/strings.xml
index b802f593..b802f593 100644
--- a/res/values-my-rMM-television/strings.xml
+++ b/res/values-my-television/strings.xml
diff --git a/res/values-my-rMM-watch/strings.xml b/res/values-my-watch/strings.xml
index 21283c03..21283c03 100644
--- a/res/values-my-rMM-watch/strings.xml
+++ b/res/values-my-watch/strings.xml
diff --git a/res/values-my-rMM/strings.xml b/res/values-my/strings.xml
index 20221991..e64b9acd 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"မလုပ်တော့"</string>
<string name="unknown" msgid="4742479012767208045">"အကြောင်းအရာ မသိရှိ"</string>
<string name="installing" msgid="8613631001631998372">"ထည့်သွင်းနေပါသည်"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ကို ထည့်သွင်းနေသည်…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"အဆင့်သင့် ပါလာသော အပလီကေးရှင်းကို အပ်ဒိတ်လုပ်လိုပါသလား။ ရှိပြီးသား အချက်အလက်များကို ဆုံးရှုံးမည် မဟုတ်ပါ။ အထူးတလည် သုံးခွင့် မလိုအပ်ပါ"</string>
<string name="install_failed" msgid="6579998651498970899">"အက်ပ်မထည့်သွင်းရသေးပါ"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ပက်ကေ့ထည့်သွင်းခြင်းကို ပိတ်ဆို့ထားသည်။"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ပက်ကေ့သည် အမည်တူနေသည့် တည်ရှိနေပြီးသားပက်ကေ့ဖြင့် တိုက်နေသည်။"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ဤအပလီကေးရှင်းက သင့်တက်ဘလက်နဲ့ မသင့်တော်ပါ"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ပက်ကေ့ဂျ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် လက်ရှိပက်ကေ့ဂျ်နှင့် တိုက်နေသည်။"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"အက်ပ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် သင့်တက်ဘလက်နှင့် ကိုက်ညီမှုမရှိပါ။"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ဤ အက်ပ်သည် သင့်တီဗွီနှင့် တွဲဖက်သုံးမရပါ။"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ဤအပလီကေးရှင်းက သင့်ဖုန်းနဲ့ မသင့်တော်ပါ"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ဤpackageမှာ ဖျက်စီးသွားပါသည်။"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"အက်ပ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် သင့်ဖုန်းနှင့် ကိုက်ညီမှုမရှိပါ။"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ပက်ကေ့ဂျ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် မှန်ကန်မှုမရှိပုံပေါ်သည်။"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"သင်၏ စီမံခန့်ခွဲသူက ရင်းမြစ်မသိသော အက်ပ်များကို ထည့်သွင်းခွင့်မပြုပါ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"အရင်းအမြစ်မသိသော အက်ပ်များကို ဤအသုံးပြုသူက ထည့်သွင်းခွင့်မရှိပါ"</string>
<string name="ok" msgid="3468756155452870475">"အိုကေ"</string>
<string name="settings" msgid="6743583734099755409">"အပြင်အဆင်များ"</string>
<string name="manage_applications" msgid="4033876279091996596">"အပလီကေးရှင်းများအား ထိန်းသိမ်းခြင်း"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ခွင့်ပြုမထားပါ"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ဤဖယ်ရှားမှုပြုလုပ်ရန် လက်ရှိအသုံးပြုသူအား ခွင့်ပြုမထားပါ။"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"အမှားအယွင်း"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"အက်ပ်ကို ဖယ်ရှား၍မရနိုင်ပါ။"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"သင်သည် အသုံးပြုသူ <xliff:g id="USERNAME">%1$s</xliff:g> အတွက် ဒီအကောင့်ကို ဖြုတ်ပစ်လိုပါသလား?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ဤအက်ပ်ကို စက်ရုံထုတ်ဗားရှင်းဖြင့် အစားထိုးမလား။ ဒေတာများအားလုံးကို ဖယ်ရှားလိုက်ပါမည်။"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ဤအက်ပ်ကို စက်ရုံထုတ်ဗားရှင်းဖြင့် အစားထိုးမလား။ ဒေတာများအားလုံးကို ဖယ်ရှားလိုက်ပါမည်။ ၎င်းသည် အလုပ်ပရိုဖိုင်ဖြင့်သုံးသူများအပါအဝင် အသုံးပြုသူများအားလုံးကို အကျိုးသက်ရောက်စေပါလိမ့်မည်။"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"ပရိုဂရမ်ကို ဖယ်ရှားနေပါသည်"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ပရိုဂရမ်ကို ဖယ်ရှားခြင်းမအောင်မြင်ပါ"</string>
<string name="uninstalling" msgid="5556217435895938250">"ဖယ်ထုတ်သည်"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ကို ဖယ်ရှားနေပါသည်…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"ဖယ်ရှားခြင်း ပြီးပါပြီ"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ကို ဖယ်ရှားလိုက်ပါပြီ"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ကို ဖယ်ရှားခြင်း မအောင်မြင်ပါ။"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ဖွင့်ထားသော စက်ပစ္စည်းကို စီမံခန့်ခွဲရန်အက်ပ်အား ဖယ်ရှား၍မရပါ"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> အတွက် ဖွင့်ထားသော စက်ပစ္စည်းကို စီမံခန့်ခွဲရန် အက်ပ်အား ဖယ်ရှား၍မရပါ။"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"အချို့အသုံးပြုသူများ သို့မဟုတ် ပရိုဖိုင်များအတွက် ဤအက်ပ်ကို လိုအပ်သော်လည်း အချို့သူများအတွက် ဖြုတ်ထားပါသည်"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"သင့်ပရိုဖိုင်အတွက် ဤအက်ပ်ကိုလိုအပ်ပြီး ဖြုတ်၍မရပါ။"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ဒီအက်ပ်မှာ သင်၏ ကိရိယာ စီမံအုပ်ချုပ်သူက လိုအပ်သောကြောင့် ဖြုတ်၍ မရနိုင်ပါ။"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"စက်ပစ္စည်းထိန်းချုပ်မှုအား စီမံရန်"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"စက်ပစ္စည်းကို စီမံခန့်ခွဲရန် အက်ပ်များအား စီမံရန်"</string>
<string name="manage_users" msgid="3125018886835668847">"အသုံးပြုသူများအား စီမံခန့်ခွဲပါ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ဖယ်ရှားလို့ မရပါ"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"ဒေတာအချက်အလက်အစုအားဖတ်ရှုစဉ် ပြသနာ တစ်ခု ဖြစ်ပေါ်ပါသည်"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ဤအပ်ဒိတ်အတွက် ခွင့်ပြုချက်အသစ် မလိုအပ်ပါ"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"အောက်ပါ ခွင့်ပြုချက်များ ပေးလိုပါသလား။ ၎င်းတို့က သုံးခွင့်ပြုမှာကတော့၊"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ငြင်းပယ်သည်"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"အခြားအချက်အလက်များ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"မည်သို့ပင်ဖြစ်စေ ငြင်းပယ်ပါ"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ကို <xliff:g id="ACTION">%2$s</xliff:g> ရန်ခွင့်ပြုမလား။"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> ခု ပိတ်ထားသည်"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"အားလုံးပိတ်ထားသည်"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"တစ်ခုမျှ ပိတ်မထားပါ"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"ခွင့်ပြုသည်"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"အက်ပ်များ"</string>
<string name="app_permissions" msgid="3146758905824597178">"အက်ပ်ခွင့်ပြုချက်များ"</string>
@@ -99,11 +111,11 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"ဤအက်ပ် အား Android ၏ ဗားရှင်းဟောင်းအတွက် ပုံဆွဲရေးဆွဲထား၏။ ခွင့်ပြုချက်ပေးရန် ငြင်းဆိုပါက ရည်ရွယ်ထားသကဲ့သို့ ဆောင်ရွက်လိမ့်မည် မဟုတ်ပါ။"</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_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="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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android ဆောင်စရာ"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear ပေါ်တွင် ထည့်သွင်းခြင်း/ဖြုတ်ခြင်းများကို ပံ့ပိုးမထားပါ။"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ကို အပ်ဒိတ် လုပ်ခဲ့သည်။<xliff:g id="APP_NAME_1">%1$s</xliff:g> အား အောက်ဖေါ်ပြပါကို သုံးခွင့် ပြုရမလား။"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> အား သုံးခွင့် ပြုမှာကို ရွေးချယ်ပါ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို အပ်ဒိတ် လုပ်ခဲ့သည်။ ဤအက်ပ်အား သုံးခွင့် ပြုမှာကို ရွေးချယ်ပါ။"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&amp;It;b7gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&amp;It;/b&gt; က အသုံးပြုခွင့်ရမည့် အရာတို့ကို ရွေးပါ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&amp;It;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&amp;It;/b&gt; ကို အပ်ဒိတ်လုပ်ပြီးပါပြီ။ ဤအက်ပ်က အသုံးပြုခွင့်ရမည့်အရာတို့ကို ရွေးပါ။"</string>
<string name="review_button_cancel" msgid="957906817733578877">"မလုပ်တော့"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ဆက်လုပ်ရန်"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"ခွင့်ပြုချက် အသစ်များ"</string>
<string name="current_permissions_category" msgid="998210994450606094">"လက်ရှိ ခွင့်ပြုချက်များ"</string>
<string name="message_staging" msgid="6151794817691100003">"အက်ပ်ကို ပြင်ဆင်နေသည်…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"အမျိုးအမည်မသိ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏တက်ဘလက်တွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏တီဗီတွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏ဖုန်းတွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"သင်၏ဖုန်းနှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော ဖုန်းပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"သင်၏ တက်ဘလက်နှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော တက်ဘလက်ပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"သင်၏ TV နှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော TV ပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ဆက်လုပ်ရန်"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ဆက်တင်များ"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"wear အက်ပ်ကိုထည့်သွင်းခြင်း/ဖယ်ရှားခြင်း"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 9798e37e..311ef95d 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Avbryt"</string>
<string name="unknown" msgid="4742479012767208045">"Ukjent"</string>
<string name="installing" msgid="8613631001631998372">"Installerer…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Installerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="3682715442154357097">"Appen er installert."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Ønsker du å installere denne appen? Den får tilgang til følgende:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Ønsker du å installere denne appen? Den krever ingen spesiell tilgang."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vil du installere en oppdatering av denne innebygde appen? De eksisterende dataene dine går ikke tapt. Dette krever ingen spesiell tilgang."</string>
<string name="install_failed" msgid="6579998651498970899">"Appen ble ikke installert."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Pakken er blokkert fra å bli installert."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakken er i konflikt med en eksisterende pakke med samme navn."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Denne appen er ikke kompatibel med nettbrettet ditt."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Appen ble ikke installert fordi pakken er i konflikt med en eksisterende pakke."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Appen ble ikke installert fordi appen ikke er kompatibel med nettbrettet ditt."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Denne appen er ikke kompatibel med TV-en din."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Denne appen er ikke kompatibel med telefonen din."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pakken virker å være skadet."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Appen ble ikke installert fordi appen ikke er kompatibel med telefonen din."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Appen ble ikke installert fordi pakken ser ut til å være ugyldig."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på nettbrettet ditt."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på TV-en."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres på telefonen din."</string>
<string name="launch" msgid="4826921505917605463">"Åpne"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Av sikkerhetshensyn blokkerer nettbrettet ditt automatisk installasjon av apper fra ukjente kilder."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"TV-en din er blitt innstilt til å blokkere installasjon av apper som er hentet fra ukjente kilder, for å ivareta sikkerheten din."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Av sikkerhetshensyn blokkerer telefonen din automatisk installasjon av apper fra ukjente kilder."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratoren din tillater ikke installering av apper som er hentet fra ukjente kilder."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratoren din tillater ikke installering av apper som er hentet fra ukjente kilder"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ukjente apper kan ikke installeres av denne brukeren"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Innstillinger"</string>
<string name="manage_applications" msgid="4033876279091996596">"Administrer apper"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Appen ble ikke funnet"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Finner ikke appen i listen over installerte apper."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ikke tillatt"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Denne brukeren har ikke tillatelse til å utføre denne avinstalleringen."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Feil"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Kunne ikke avinstallere appen."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Avinstaller appen"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Avinstaller oppdateringen"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> er del av følgende app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ønsker du å avinstallere denne appen for brukeren <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Vil du erstatte denne appen med den opprinnelige versjonen? Alle dataene fjernes."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Vil du erstatte denne appen med den opprinnelige versjonen? Alle dataene fjernes. Dette påvirker alle som bruker denne enheten – også personer med jobbprofiler."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Avinstalleringer som er i gang"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mislykkede avinstalleringer"</string>
<string name="uninstalling" msgid="5556217435895938250">"Avinstallerer…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Avinstallerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Avinstalleringen er fullført."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Avinstallerte <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Avinstalleringen mislyktes."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Kan ikke avinstallere fordi denne pakken er en aktiv enhetsadministrator."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Kan ikke avinstallere fordi denne pakken er en aktiv enhetsadministrator for brukeren <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Kunne ikke avinstallere <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Kan ikke avinstallere den aktive appen for enhetsadministrator"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Kan ikke avinstallere den aktive appen for enhetsadministrator for <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Appen er nødvendig for noen brukere eller profiler, og den er avinstallert for andre"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Denne appen er nødvendig for profilen din og kan ikke avinstalleres."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Denne appen kreves av enhetsadministratoren din og kan ikke avinstalleres."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Administrer enhetsadministratorer"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Administrer apper for enhetsadministrator"</string>
<string name="manage_users" msgid="3125018886835668847">"Administrer brukere"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Det oppsto et problem med analysen av pakken."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Denne oppdateringen krever ingen nye tillatelser."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ønsker du å gi følgende tillatelser? Dette gir tilgang til:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Ikke tillat"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Finn ut mer"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Avvis likevel"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> av <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Vil du gi &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; tillatelse til å <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> er slått av"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"alt er slått av"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ingen er slått av"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Tillat"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apper"</string>
<string name="app_permissions" msgid="3146758905824597178">"Apptillatelser"</string>
@@ -102,7 +114,7 @@
<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="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>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>-tillatelser"</string>
<string name="no_apps" msgid="1965493419005012569">"Ingen apper"</string>
<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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Handlinger for å installere og avinstallere er ikke støttet på Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> er oppdatert. Vil du gi <xliff:g id="APP_NAME_1">%1$s</xliff:g> tilgang til følgende?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Velg hva du vil gi <xliff:g id="APP_NAME">%1$s</xliff:g> tilgang til"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> er oppdatert. Velg hva du vil gi denne appen tilgang til."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Velg hva du vil gi <xliff:g id="APP_NAME">%1$s</xliff:g> tilgang til"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"<xliff:g id="APP_NAME">%1$s</xliff:g> er oppdatert. Velg hva du vil gi denne appen tilgang til."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Avbryt"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Fortsett"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nye tillatelser"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Gjeldende tillatelser"</string>
<string name="message_staging" msgid="6151794817691100003">"Setter opp appen …"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Ukjent"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Nettbrettet ditt har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"TV-en din har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Telefonen din har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonen din og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på telefonen eller tap av data bruk av appen forårsaker."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Nettbrettet ditt og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på nettbrettet eller tap av data bruk av appen forårsaker."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV-en din og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på TV-en eller tap av data bruk av appen forårsaker."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Fortsett"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Innstillinger"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Installerer/avinstallerer wear-apper"</string>
</resources>
diff --git a/res/values-ne-rNP-television/strings.xml b/res/values-ne-television/strings.xml
index d6e908cf..d6e908cf 100644
--- a/res/values-ne-rNP-television/strings.xml
+++ b/res/values-ne-television/strings.xml
diff --git a/res/values-ne-rNP-watch/strings.xml b/res/values-ne-watch/strings.xml
index ffcc2f7f..ffcc2f7f 100644
--- a/res/values-ne-rNP-watch/strings.xml
+++ b/res/values-ne-watch/strings.xml
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne/strings.xml
index 1a56b00c..fd2649eb 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"रद्द गर्नुहोस्"</string>
<string name="unknown" msgid="4742479012767208045">"अज्ञात"</string>
<string name="installing" msgid="8613631001631998372">"स्थापित हुँदै…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> स्थापना गर्दै…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"के तपाईं यस जोडिएको अनुप्रयोगको एउटा अपडेटलाई स्थापित गर्न चाहनुहुन्छ? तपाईंको अहिलेको डेटा हराउने छैन। यसलाई कुनै विशेष पहुँचको आवश्यकता छैन।"</string>
<string name="install_failed" msgid="6579998651498970899">"अनुप्रयोग स्थापना भएन।"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"यो प्याकेज स्थापना हुनबाट अवरुद्ध भएको थियो।"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"यो प्याकेज उस्तै नाम भएको अवस्थित प्याकेजसँग जुधेको छ।"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"यो अनुप्रयोग तपाईँको ट्याब्लेटको लागि उपयुक्त छैन।"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"प्याकेजका रूपमा स्थापना नगरिएको अनुप्रयोग विद्यमान प्याकेजसँग मेल खाँदैन।"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"अनुप्रयोगका रूपमा स्थापना नगरिएको अनुप्रयोग तपाईंको ट्याब्लेटसँग मिल्दो छैन।"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"यो अनुप्रयोग तपाईँको TV को लागि उपयुक्त छैन।"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"यो अनुप्रयोग तपाईँको फोनको लागि उपयुक्त छैन।"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"प्याकेज बिग्रेको जस्तो देखिन्छ।"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"अनुप्रयोगका रूपमा स्थापना नगरिएको अनुप्रयोग तपाईंको फोनसँग मिल्दो छैन।"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"प्याकेजका रूपमा स्थापना नगरिएको अनुप्रयोग अमान्य जस्तो देखिन्छ।"</string>
<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">"तपाईँको TVमा<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_text" product="tablet" msgid="7504186369474734767">"सुरक्षाको लागि, तपाईँको ट्याब्लेटले अज्ञात स्रोतहरू बाट प्राप्त भएका अनुप्रयोगहरू स्थापित गर्न बन्देज सेट गर्यो।"</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"सुरक्षाको लागि, तपाईँको TVमा अज्ञात स्रोतबाट प्राप्त हुने अनुप्रयोगहरूको स्थापनालाई अवरोध गर्ने गरी सेट गरिएको छ।"</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"सुरक्षाको लागि तपाईँको फोनले अज्ञात स्रोतहरूबाट प्राप्त भएका अनुप्रयोगहरू स्थापित गर्न बन्देज सेट गर्यो।"</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"तपाईँको व्यवस्थापकले अज्ञात स्रोतबाट प्राप्त भएका अनुप्रयोगहरू स्थापना गर्न अनुमति दिनुहुन्न।"</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"तपाईंका प्रशासकले अज्ञात स्रोतहरूबाट प्राप्त अनुप्रयोगहरूलाई स्थापना गर्ने अनुमति दिनुहुन्न"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"यस प्रयोगकर्ताले अज्ञात अनुप्रयोगहरू स्थापना गर्न सक्नुहुन्न"</string>
<string name="ok" msgid="3468756155452870475">"ठीक छ"</string>
<string name="settings" msgid="6743583734099755409">"सेटिङहरू"</string>
<string name="manage_applications" msgid="4033876279091996596">"अनुप्रयोगहरूको व्यवस्थापन गर्नुहोस्"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"अनुमति छैन"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"हालको प्रयोगकर्तालाई यो स्थापना रद्द गर्ने कार्य गर्ने अनुमति छैन।"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"त्रुटि"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"अनुप्रयोगको स्थापना रद्द गर्न सकिएन।"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"के तपाईं प्रयोगकर्ता <xliff:g id="USERNAME">%1$s</xliff:g> को लागि यो अनुप्रयोग स्थापना रद्द गर्न चाहनुहुन्छ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"यस अनुप्रयोगलाई फ्याक्ट्रीको संस्करणले बदल्ने हो? सबै डेटा हटाइनेछ।"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"यस अनुप्रयोगलाई फ्याक्ट्रीको संस्करणले बदल्ने हो? सबै डेटा हटाइनेछ। यसले यस यन्त्रका कार्य प्रोफाइल भएका लगायत सबै प्रयोगकर्ताहरूमा असर पार्छ।"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"चलिरहेका स्थापना रद्द गर्ने कार्यहरू"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"असफल भएका स्थापना रद्द गर्ने कार्यहरू"</string>
<string name="uninstalling" msgid="5556217435895938250">"अस्थापना गर्दै..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> को स्थापना रद्द गर्दै…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"स्थापना रद्द गर्न सकियो।"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> को स्थापना रद्द गरियो"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> को स्थापना रद्द गर्ने कार्य असफल भयो।"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"यन्त्रको सक्रिय प्रशासकीय अनुप्रयोगको स्थापना रद्द गर्न मिल्दैन"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> को यन्त्रको सक्रिय प्रशासकीय अनुप्रयोगको स्थापना रद्द गर्न मिल्दैन"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"अन्य प्रयोगकर्ताहरूका लागि यस अनु्प्रयोगको स्थापना रद्द गरे पनि केही प्रयोगकर्ता वा प्रोफाइलहरूलाई यसको आवश्यकता पर्दछ"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"यो अनुप्रयोग तपाईँको प्रोफाइलका लागि आवश्यक छ र यसको स्थापनालाई रद्द गर्न सकिँदैन।"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"यो अनुप्रयोग तपाईँको उपकरण प्रशासकलाई आवश्यक छ र स्थापना रद्द गर्न सकिँदैन।"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"उपकरण प्रशासकहरूको प्रबन्ध गर्नुहोस्"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"यन्त्रका प्रशासकीय अनुप्रयोगहरूको व्यवस्थापन गर्नुहोस्"</string>
<string name="manage_users" msgid="3125018886835668847">"प्रयोगकर्ताहरूलाई व्यवस्थापन गर्नुहोस्"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> स्थापना रद्द गर्न सकिँदैन।"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"प्याकेजलाई पार्सिङ गर्दा एउटा समस्या आयो।"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"यस अपडेटलाई नयाँ अनुमति आवश्यक पर्दैन।"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"के तपाईं निम्न अनुमति प्रदान गर्न चाहनु हुन्छ? यसले पहुँच पाउने छ:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"अस्वीकार गर्नुहोस्"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"थप जानकारी"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"जे भए पनि अस्वीकार गर्नुहोस्"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई <xliff:g id="ACTION">%2$s</xliff:g> गर्न अनुमति दिने हो?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> अनुमतिहरूलाई असक्षम पारिएको छ"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"सबै अनुमतिहरूलाई असक्षम पारिएको छ"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"कुनै पनि अनुमतिलाई असक्षम पारिएको छैन"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमति दिनुहोस्"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"अनुप्रयोगहरू"</string>
<string name="app_permissions" msgid="3146758905824597178">"अनुप्रयोग अनुमतिहरू"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear मा स्थापना/स्थापना रद्द गर्ने कारबाहीहरू समर्थित छैनन्।"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> अद्यावधिक गरिएको छ। <xliff:g id="APP_NAME_1">%1$s</xliff:g> लाई निम्न वस्तु पहुँच गर्न अनुमति दिने हो?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई के पहुँच गर्न अनुमति दिने छनौट गर्नुहोस्"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> अद्यावधिक गरिएको छ। यस अनुप्रयोगलाई के पहुँच गर्न अनुमति दिने छान्‍नुहोस्।"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई के माथि पहुँच राख्न दिने भन्ने कुरा छनौट गर्नुहोस्"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; लाई अद्यावधिक गरिएको छ। यस अनुप्रयोगलाई के माथि पहुँच राख्न दिने भन्ने कुरा छनौट गर्नुहोस्।"</string>
<string name="review_button_cancel" msgid="957906817733578877">"रद्द गर्नुहोस्"</string>
<string name="review_button_continue" msgid="4809162078179371370">"जारी राख्नुहोस्"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"नयाँ अनुमतिहरू"</string>
<string name="current_permissions_category" msgid="998210994450606094">"वर्तमान अनुमतिहरू"</string>
<string name="message_staging" msgid="6151794817691100003">"अनुप्रयोगलाई तयार पार्दै…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"अज्ञात"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"तपाईंको सुरक्षाको लागि, तपाईंको ट्याब्लेटलाई यो स्रोतबाट प्राप्त हुने अज्ञात अनुप्रयोगहरू स्थापना गर्ने अनुमति छैन।"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"तपाईंको सुरक्षाको लागि, तपाईंको TV लाई यो स्रोतबाट प्राप्त हुने अज्ञात अनुप्रयोगहरू स्थापना गर्ने अनुमति छैन।"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"तपाईंको सुरक्षाको लागि, तपाईंको फोनलाई यो स्रोतबाट प्राप्त हुने अज्ञात अनुप्रयोगहरू स्थापना गर्ने अनुमति छैन।"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"तपाईंको फोन र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो अनुप्रयोग स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको फोनलाई हुनसक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुनुहुन्छ भन्ने कुरामा सहमत हुनुहुन्छ।"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"तपाईंको ट्याब्लेट र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो अनुप्रयोग स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको ट्याब्लेटलाई हुनसक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुनुहुन्छ भन्ने कुरामा सहमत हुनुहुन्छ।"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"तपाईंको TV र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो अनुप्रयोग स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको TV लाई हुनसक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुनुहुन्छ भन्ने कुरामा सहमत हुनुहुन्छ।"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"जारी राख्नुहोस्"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"सेटिङहरू"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"वेयर एपहरूको स्थापना/स्थापना रद्द गर्दै"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c58c4e7b..7d38be9d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Annuleren"</string>
<string name="unknown" msgid="4742479012767208045">"Onbekend"</string>
<string name="installing" msgid="8613631001631998372">"Installeren..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installeren…"</string>
<string name="install_done" msgid="3682715442154357097">"App geïnstalleerd."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Wil je deze app installeren? Deze krijgt toegang tot:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Wil je deze app installeren? Hiervoor is geen speciale toegang vereist."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Wil je een update voor deze ingebouwde app installeren? Je 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_blocked" msgid="1606870930588770025">"De installatie van het pakket is geblokkeerd."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Het pakket conflicteert met een bestaand pakket met dezelfde naam."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Deze app is niet compatibel met je tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"App die niet is geïnstalleerd als pakket conflicteert met een bestaand pakket."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"App die niet is geïnstalleerd als app is niet geschikt voor je tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Deze app is niet compatibel met je tv."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Deze app is niet compatibel met je telefoon."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Het pakket lijkt beschadigd."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"App die niet is geïnstalleerd als app is niet geschikt voor je telefoon."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"App die niet is geïnstalleerd als pakket lijkt ongeldig te zijn."</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="launch" msgid="4826921505917605463">"Openen"</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_admin_dlg_text" msgid="7488386758312008790">"Je beheerder staat de installatie van apps afkomstig van onbekende bronnen niet toe"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Onbekende apps kunnen niet worden geïnstalleerd door deze gebruiker"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Instellingen"</string>
<string name="manage_applications" msgid="4033876279091996596">"Apps beheren"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"App niet gevonden"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"De app is niet gevonden in de lijst met geïnstalleerde apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Niet toegestaan"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"De huidige gebruiker mag deze verwijdering niet uitvoeren."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Fout"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"App kan niet worden verwijderd."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"App verwijderen"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Update verwijderen"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> maakt deel uit van de volgende app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Wil je deze app verwijderen voor de gebruiker <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Deze app vervangen door de fabrieksversie? Alle gegevens worden verwijderd."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Deze app vervangen door de fabrieksversie? Alle gegevens worden verwijderd. Dit geldt voor alle gebruikers van het apparaat, dus ook voor gebruikers met een werkprofiel."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Actieve verwijderingen"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mislukte verwijderingen"</string>
<string name="uninstalling" msgid="5556217435895938250">"Verwijderen..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> verwijderen…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Verwijdering voltooid."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> verwijderd"</string>
<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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> kan niet worden verwijderd."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Kan actieve apparaatbeheer-app niet verwijderen"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Kan actieve apparaatbeheer-app niet verwijderen voor <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Deze app is vereist voor sommige gebruikers of profielen en is verwijderd voor andere"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Deze app is vereist voor je profiel 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="manage_device_administrators" msgid="891392489300312370">"Apparaatbeheerders beheren"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Apparaatbeheer-apps beheren"</string>
<string name="manage_users" msgid="3125018886835668847">"Gebruikers 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_text" msgid="7623286983621067011">"Er is een probleem opgetreden bij het parseren van het pakket."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Voor deze update zijn geen nieuwe machtigingen vereist."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Wil je de volgende machtigingen verlenen? Hiermee kan toegang worden verkregen tot:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Weigeren"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Meer informatie"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Toch weigeren"</string>
<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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; het volgende toestaan: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_warning_template" msgid="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; het volgende toestaan: <xliff:g id="ACTION">%2$s</xliff:g>."</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> uitgeschakeld"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"alle rechten uitgeschakeld"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"geen rechten uitgeschakeld"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Toestaan"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"App-machtigingen"</string>
@@ -100,7 +112,7 @@
<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="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="menu_show_system" msgid="6773743421743728921">"Systeem-apps weergeven"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Systeem 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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Acties voor installeren/verwijderen niet ondersteund op Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is geüpdatet. Wil je <xliff:g id="APP_NAME_1">%1$s</xliff:g> toegang geven tot het volgende?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Kiezen waartoe <xliff:g id="APP_NAME">%1$s</xliff:g> toegang krijgt"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> is geüpdatet. Kies waartoe je deze app toegang wilt geven."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Kiezen waartoe &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; toegang krijgt"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; is geüpdatet. Kies waartoe je deze app toegang wilt geven."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Annuleren"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Doorgaan"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nieuwe rechten"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Huidige rechten"</string>
<string name="message_staging" msgid="6151794817691100003">"App uitvoeren…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Onbekend"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Uit veiligheidsoverwegingen heeft je tablet geen toestemming om onbekende apps van deze bron te installeren."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Uit veiligheidsoverwegingen heeft je tv geen toestemming om onbekende apps van deze bron te installeren."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Uit veiligheidsoverwegingen heeft je telefoon geen toestemming om onbekende apps van deze bron te installeren."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Je telefoon en persoonlijke gegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je telefoon of gegevensverlies als gevolg van het gebruik van de app."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Je tablet en persoonlijke gegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je tablet of gegevensverlies als gevolg van het gebruik van de app."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Je tv en persoonlijke gegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je tv of gegevensverlies als gevolg van het gebruik van de app."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Doorgaan"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Instellingen"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear-apps installeren/verwijderen"</string>
</resources>
diff --git a/res/values-pa-rIN-television/strings.xml b/res/values-pa-television/strings.xml
index e43a77e0..e43a77e0 100644
--- a/res/values-pa-rIN-television/strings.xml
+++ b/res/values-pa-television/strings.xml
diff --git a/res/values-pa-rIN-watch/strings.xml b/res/values-pa-watch/strings.xml
index e0930212..e0930212 100644
--- a/res/values-pa-rIN-watch/strings.xml
+++ b/res/values-pa-watch/strings.xml
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa/strings.xml
index b7132ad3..e63fbc93 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ਰੱਦ ਕਰੋ"</string>
<string name="unknown" msgid="4742479012767208045">"ਅਗਿਆਤ"</string>
<string name="installing" msgid="8613631001631998372">"ਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ਨੂੰ ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"ਕੀ ਤੁਸੀਂ ਇਸ ਬਿਲਟ-ਇਨ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇੱਕ ਅਪਡੇਟ ਇੰਸਟੌਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਡੈਟਾ ਨਸ਼ਟ ਨਹੀਂ ਹੋਵੇਗਾ। ਇਸ ਲਈ ਕਿਸੇ ਖ਼ਾਸ ਪਹੁੰਚ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।"</string>
<string name="install_failed" msgid="6579998651498970899">"ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ।"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ਪੈਕੇਜ ਨੂੰ ਸਥਾਪਿਤ ਹੋਣ ਤੋਂ ਬਲੌਕ ਕੀਤਾ ਗਿਆ ਸੀ।"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ਪੈਕੇਜ ਦਾ ਇਸ ਦੇ ਨਾਮ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਇੱਕ ਮੌਜੂਦਾ ਪੈਕੇਜ ਨਾਲ ਅਪਵਾਦ ਹੈ।"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਟੈਬਲੇਟ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ਪੈਕੇਜ ਦੇ ਇੱਕ ਮੌਜੂਦਾ ਪੈਕੇਜ ਨਾਲ ਵਿਵਾਦ ਹੋਣ ਕਰਕੇ ਐਪ ਦੀ ਸਥਾਪਨਾ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"ਐਪ ਦੇ ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਦੇ ਅਨੁਰੂਪ ਨਾ ਹੋਣ ਕਰਕੇ ਐਪ ਦੀ ਸਥਾਪਨਾ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਟੀਵੀ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ਪੈਕੇਜ ਕਰਪਟ ਹੋ ਗਿਆ ਜਾਪਦਾ ਹੈ।"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"ਐਪ ਦੇ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੇ ਅਨੁਰੂਪ ਨਾ ਹੋਣ ਕਰਕੇ ਐਪ ਦੀ ਸਥਾਪਨਾ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ਪੈਕੇਜ ਦੇ ਅਵੈਧ ਪ੍ਰਤੀਤ ਹੋਣ ਕਰਕੇ ਐਪ ਦੀ ਸਥਾਪਨਾ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
<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> ਨੂੰ ਤੁਹਾਡੇ TV ਤੇ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</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_text" product="tablet" msgid="7504186369474734767">"ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੀ ਟੈਬਲੇਟ ਅਗਿਆਤ ਸਰੋਤਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਐਪਸ ਦੀ ਇੰਸਟੌਲੇਸ਼ਨ ਬਲੌਕ ਕਰਨ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਇਆ ਹੈ।"</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡਾ TV ਅਗਿਆਤ ਸਰੋਤਾਂ ਵੱਲੋਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਐਪਸ ਦੀ ਇੰਸਟੌਲੇਸ਼ਨ ਬਲੌਕ ਕਰਨ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਇਆ ਹੈ।"</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡਾ ਫੋਨ ਅਗਿਆਤ ਸਰੋਤਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਐਪਸ ਦੀ ਇੰਸਟੌਲੇਸ਼ਨ ਬਲੌਕ ਕਰਨ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੋਇਆ ਹੈ।"</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਅਗਿਆਤ ਸਰੋਤਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਦੀ ਸਥਾਪਨਾ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦਾ।"</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਅਗਿਆਤ ਸਰੋਤਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦਾ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ਇਸ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਅਗਿਆਤ ਐਪਾਂ ਨੂੰ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="ok" msgid="3468756155452870475">"ਠੀਕ"</string>
<string name="settings" msgid="6743583734099755409">"ਸੈਟਿੰਗਾਂ"</string>
<string name="manage_applications" msgid="4033876279091996596">"ਐਪਸ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ਇਜਾਜ਼ਤ ਨਹੀਂ"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ਮੌਜੂਦਾ ਵਰਤੋਂਕਾਰ ਨੂੰ ਇਹ ਅਣਸਥਾਪਨਾ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ।"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"ਗੜਬੜ"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ਐਪ ਅਣਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"ਕੀ ਤੁਸੀਂ ਉਪਭੋਗਤਾ <xliff:g id="USERNAME">%1$s</xliff:g> ਲਈ ਇਸ ਐਪ ਨੂੰ ਅਣਇੰਸਟੌਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ਕੀ ਇਸ ਐਪ ਨੂੰ ਫੈਕਟਰੀ ਸੰਸਕਰਣ ਨਾਲ ਬਦਲਣਾ ਹੈ? ਸਾਰਾ ਡੈਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ਕੀ ਇਸ ਐਪ ਨੂੰ ਫੈਕਟਰੀ ਸੰਸਕਰਣ ਨਾਲ ਬਦਲਣਾ ਹੈ? ਸਾਰਾ ਡੈਟਾ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਹ ਇਸ ਡੀਵਾਈਸ ਦੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰੇਗਾ, ਜਿਸ ਵਿੱਚ ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਵਾਲੇ ਵਰਤੋਂਕਾਰ ਵੀ ਸ਼ਾਮਲ ਹਨ।"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"ਚੱਲ ਰਹੀਆਂ ਅਣਸਥਾਪਨਾਵਾਂ"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ਅਸਫਲ ਅਣਸਥਾਪਨਾਵਾਂ"</string>
<string name="uninstalling" msgid="5556217435895938250">"ਅਣਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ਨੂੰ ਅਣਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"ਅਣਇੰਸਟੌਲ ਪੂਰਾ ਹੋਇਆ।"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ਨੂੰ ਅਣਸਥਾਪਤ ਕੀਤਾ"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ਨੂੰ ਅਣਸਥਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ।"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ਕਿਰਿਆਸ਼ੀਲ ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਅਣਸਥਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> ਲਈ ਕਿਰਿਆਸ਼ੀਲ ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਅਣਸਥਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ਇਹ ਐਪ ਕੁਝ ਵਰਤੋਂਕਾਰਾਂ ਜਾਂ ਪ੍ਰੋਫਾਈਲਾਂ ਲਈ ਲੋੜੀਂਦੀ ਹੈ ਅਤੇ ਹੋਰਾਂ ਲਈ ਅਣਸਥਾਪਤ ਕੀਤੀ ਗਈ ਸੀ"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ਇਹ ਐਪ ਤੁਹਾਡੀ ਪ੍ਰੋਫਾਈਲ ਲਈ ਲੋੜੀਂਦੀ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਅਣਸਥਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਲੁੜੀਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਕਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
<string name="manage_users" msgid="3125018886835668847">"ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"ਪੈਕੇਜ ਨੂੰ ਪਾਰਸ ਕਰਨ ਵਿੱਚ ਇੱਕ ਸਮੱਸਿਆ ਸੀ।"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ਇਸ ਅਪਡੇਟ ਲਈ ਕਿਸੇ ਨਵੀਆਂ ਅਨੁਮਤੀਆਂ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ਕੀ ਤੁਸੀਂ ਇਹ ਅਨੁਮਤੀਆਂ ਮਨਜ਼ੂਰ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? ਇਹ ਇਸ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੇਗਾ:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ਹੋਰ ਜਾਣਕਾਰੀ"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ਫੇਰ ਵੀ ਅਸਵੀਕਾਰ ਕਰੋ"</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="7332275268559121742">"ਕੀ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ <xliff:g id="ACTION">%2$s</xliff:g> ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"ਸਭ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ਕਿਸੇ ਨੂੰ ਵੀ ਅਯੋਗ ਨਹੀਂ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"ਆਗਿਆ ਦਿਓ"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ਐਪਾਂ"</string>
<string name="app_permissions" msgid="3146758905824597178">"ਐਪ ਅਨੁਮਤੀਆਂ"</string>
@@ -99,7 +111,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"ਇਹ ਐਪ Android ਦੇ ਕਿਸੇ ਪੁਰਾਣੇ ਸੰਸਕਰਣ ਲਈ ਬਣਾਈ ਗਈ ਸੀ। ਅਨੁਮਤੀ ਨੂੰ ਇਨਕਾਰ ਕਰਨਾ ਇਸਦੇ ਉਦੇਸ਼ਿਤ ਫੰਕਸ਼ਨ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰ ਸਕਦਾ ਹੈ।"</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">%2$d</xliff:g> ਵਿੱਚੋਂ <xliff:g id="COUNT_0">%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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ਵੀਅਰ \'ਤੇ ਸਥਾਪਤ/ਅਣਸਥਾਪਤ ਕਾਰਵਾਈਆਂ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ।"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਚੁੱਕਿਆ ਹੈ। ਕੀ <xliff:g id="APP_NAME_1">%1$s</xliff:g> ਨੂੰ ਅੱਗੇ ਦਿੱਤਿਆਂ ਗਿਆ \'ਤੇ ਪਹੁੰਚ ਦੀ ਮਨਜ਼ੂਰੀ ਦੇਣੀ ਹੈ?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"ਇਹ ਚੁਣੋ ਕਿ <xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਕਿਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਦੇਣੀ ਹੈ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਚੁੱਕਿਆ ਹੈ। ਇਹ ਚੁਣੋ ਕਿ ਇਸ ਐਪ ਨੂੰ ਕਿਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਦੇਣੀ ਹੈ।"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"ਇਹ ਚੁਣੋ ਕਿ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਕਿਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਚੁੱਕਿਆ ਹੈ। ਇਹ ਚੁਣੋ ਕਿ ਇਸ ਐਪ ਨੂੰ ਕਿਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ।"</string>
<string name="review_button_cancel" msgid="957906817733578877">"ਰੱਦ ਕਰੋ"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"ਨਵੀਆਂ ਇਜਾਜ਼ਤਾਂ"</string>
<string name="current_permissions_category" msgid="998210994450606094">"ਵਰਤਮਾਨ ਇਜਾਜ਼ਤਾਂ"</string>
<string name="message_staging" msgid="6151794817691100003">"ਐਪ ਨੂੰ ਪੜਾਅਬੱਧ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"ਅਗਿਆਤ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਟੀਵੀ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਤੇ ਨਿੱਜੀ ਡੈਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡੈਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਅਤੇ ਨਿੱਜੀ ਡੈਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡੈਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ਤੁਹਾਡਾ ਟੀਵੀ ਅਤੇ ਨਿੱਜੀ ਡੈਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਟੀਵੀ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡੈਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ਜਾਰੀ ਰੱਖੋ"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"ਵੀਅਰ ਐਪਾਂ ਨੂੰ ਸਥਾਪਤ/ਅਣਸਥਾਪਤ ਕਰਨਾ"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index cc7affcb..8c2be156 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Anuluj"</string>
<string name="unknown" msgid="4742479012767208045">"Nieznane"</string>
<string name="installing" msgid="8613631001631998372">"Instalowanie..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instaluję pakiet <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacja została zainstalowana."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Zainstalować tę aplikację? Będzie miała następujące uprawnienia:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Zainstalować tę aplikację? Nie ma specjalnych wymagań dotyczących dostępu."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Chcesz zaktualizować tę wbudowaną aplikację? Nie utracisz danych. Nie są wymagane specjalne uprawnienia dostępu."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacja nie została zainstalowana."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instalacja pakietu została zablokowana."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pakiet powoduje konflikt z istniejącym pakietem o tej samej nazwie."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Aplikacja jest niezgodna z Twoim tabletem."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacja nie została zainstalowana, bo powoduje konflikt z istniejącym pakietem."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacja nie została zainstalowana, bo jest niezgodna z Twoim tabletem."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Aplikacja jest niezgodna z Twoim telewizorem."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Aplikacja jest niezgodna z Twoim telefonem."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Ten pakiet wygląda na uszkodzony."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacja nie została zainstalowana, bo jest niezgodna z Twoim telefonem."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacja nie została zainstalowana, bo pakiet wygląda na nieprawidłowy."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Nie można zainstalować aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> na Twoim tablecie."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Nie udało się zainstalować <xliff:g id="APP_NAME">%1$s</xliff:g> na Twoim telewizorze."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Nie można zainstalować aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> na Twoim telefonie."</string>
<string name="launch" msgid="4826921505917605463">"Otwórz"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Dla bezpieczeństwa w tablecie zablokowano możliwość instalowania aplikacji z nieznanych źródeł."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Ustawienia telewizora nie pozwalają instalować aplikacji z nieznanych źródeł (dla bezpieczeństwa)."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Dla bezpieczeństwa w telefonie zablokowano możliwość instalowania aplikacji z nieznanych źródeł."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Twój administrator nie zezwala na instalowanie aplikacji pochodzących z nieznanych źródeł."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Twój administrator nie zezwala na instalowanie aplikacji pochodzących z nieznanych źródeł."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ten użytkownik nie może instalować nieznanych aplikacji"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Ustawienia"</string>
<string name="manage_applications" msgid="4033876279091996596">"Zarządzaj aplikacjami"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Nie znaleziono aplikacji"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikacji nie znaleziono na liście zainstalowanych programów."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Niedozwolone"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Bieżący użytkownik nie może tego odinstalować."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Błąd"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Nie można odinstalować aplikacji."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Odinstaluj aplikację"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Odinstaluj aktualizację"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> jest częścią następującej aplikacji:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Chcesz odinstalować tę aplikację dla użytkownika <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Przywrócić fabryczną wersję tej aplikacji? Wszystkie dane zostaną usunięte."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Przywrócić fabryczną wersję tej aplikacji? Wszystkie dane zostaną usunięte. Dotyczy to wszystkich użytkowników tego urządzenia, również tych korzystających z profilu do pracy."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Aktywne odinstalowania"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Nieudane odinstalowania"</string>
<string name="uninstalling" msgid="5556217435895938250">"Odinstalowywanie..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Odinstalowuję pakiet <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Odinstalowywanie zakończone"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Odinstalowano pakiet <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Nie udało się odinstalować."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nie można odinstalować pakietu, który jest aktywnym administratorem urządzenia."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nie można odinstalować. Ten pakiet jest aktywnym administratorem urządzenia dla: <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Nie udało się odinstalować pakietu <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Nie można odinstalować aktywnej aplikacji do administrowania urządzeniem"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nie można odinstalować aplikacji do administrowania urządzeniem aktywnej dla użytkownika <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Niektórzy użytkownicy i niektóre profile wymagają tej aplikacji, a w innych przypadkach została odinstalowana"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ta aplikacja jest potrzebna w Twoim profilu i nie można jej odinstalować."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Administrator urządzenia wymaga tej aplikacji i nie można jej odinstalować."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Zarządzaj administratorami urządzenia"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Zarządzaj aplikacjami do administrowania urządzeniem"</string>
<string name="manage_users" msgid="3125018886835668847">"Zarządzaj użytkownikami"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Nie można odinstalować aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Podczas analizowania pakietu wystąpił problem."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ta aktualizacja nie wymaga nowych uprawnień."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Chcesz przyznać te uprawnienia? Dają one dostęp do:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmów"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Więcej informacji"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Odmów mimo to"</string>
<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="7332275268559121742">"Zezwolić aplikacji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; na <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"wyłączone: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"wszystkie wyłączone"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"brak wyłączonych"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Zezwól"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacje"</string>
<string name="app_permissions" msgid="3146758905824597178">"Uprawnienia aplikacji"</string>
@@ -101,7 +113,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ta aplikacja jest na straszą wersję Androida. Jeśli odmówisz uprawnień, aplikacja może nie działać prawidłowo."</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">"Dostęp ma: <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$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>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear nie obsługuje instalowania ani odinstalowywania."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikacja <xliff:g id="APP_NAME_0">%1$s</xliff:g> została zaktualizowana. Zezwolić aplikacji <xliff:g id="APP_NAME_1">%1$s</xliff:g> na uzyskiwanie dostępu do tych elementów?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Wybierz, jakie uprawnienia dostępu ma mieć <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> została zaktualizowana. Wybierz dla niej uprawnienia dostępu."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Wybierz, jakie uprawnienia dostępu ma mieć &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikacja &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; została zaktualizowana. Wybierz dla niej uprawnienia dostępu."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Anuluj"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Dalej"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nowe uprawnienia"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktualne uprawnienia"</string>
<string name="message_staging" msgid="6151794817691100003">"Przygotowuję aplikację…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Nieznana"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Ze względów bezpieczeństwa na Twoim tablecie nie można instalować nieznanych aplikacji z tego źródła."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Ze względów bezpieczeństwa na Twoim telewizorze nie można instalować nieznanych aplikacji z tego źródła."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Ze względów bezpieczeństwa na Twoim telefonie nie można instalować nieznanych aplikacji z tego źródła."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Dane na telefonie i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie telefonu lub utratę danych w wyniku jej używania."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Dane na tablecie i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie tabletu lub utratę danych w wyniku jej używania."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Dane na telewizorze i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie telewizora lub utratę danych w wyniku jej używania."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Dalej"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ustawienia"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalowanie/odinstalowywanie aplikacji na Wear"</string>
</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index f4219321..efb732a9 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Desconhecido"</string>
<string name="installing" msgid="8613631001631998372">"Instalando..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</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>
@@ -33,19 +34,17 @@
<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_blocked" msgid="1606870930588770025">"A instalação do pacote foi bloqueada."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Já existe um pacote com esse mesmo nome."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Este aplicativo não é compatível com seu tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Como o app não é compatível com seu tablet, ele não foi instalado."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Este app não é compatível com sua TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Este aplicativo não é compatível com seu smartphone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que o pacote está corrompido."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Como o app não é compatível com seu smartphone, ele não foi instalado."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Como o pacote parece ser inválido, o app não foi instalado."</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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Seu administrador não permite a instalação de apps transferidos por download de fontes desconhecidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Apps desconhecidos não podem ser instalados por este usuário"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Configurações"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gerenciar apps"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Não permitido"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"O usuário atual não tem permissão para executar essa desinstalação."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erro"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Não foi possível desinstalar o app."</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>
@@ -65,15 +68,20 @@
<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="1394549691152728409">"Substituir este app pela versão de fábrica? Todos os dados serão removidos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Substituir este app pela versão de fábrica? Todos os dados serão removidos. Isso afeta todos os usuários deste dispositivo, incluindo aqueles com perfis de trabalho."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Executando desinstalações"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Falha nas desinstalações"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalando..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Desinstalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> desinstalado"</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 um administrador 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_failed_app" msgid="945277834056527022">"Falha na desinstalação de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Não é possível desinstalar o app para administrador ativo do dispositivo"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Não é possível desinstalar o app para administrador ativo do dispositivo de <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"O app é necessário para alguns usuários ou perfis e foi desinstalado para outros"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Este app é necessário para seu perfil 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="manage_device_administrators" msgid="118178632652346535">"Gerenciar apps para administrador do dispositivo"</string>
<string name="manage_users" msgid="3125018886835668847">"Gerenciar usuários"</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_text" msgid="7623286983621067011">"Ocorreu um problema ao analisar o pacote."</string>
@@ -84,9 +92,13 @@
<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_deny" msgid="2176510645406614340">"Negar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Mais informações"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Negar mesmo assim"</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="7332275268559121742">"Permitir que o app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> desativada(s)"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todas desativadas"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nenhuma desativada"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> foi atualizado. Permitir que o app <xliff:g id="APP_NAME_1">%1$s</xliff:g> acesse os itens a seguir?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Escolha o que o app <xliff:g id="APP_NAME">%1$s</xliff:g> terá permissão de acessar"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> foi atualizado. Escolha o que esse app terá permissão de acessar."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Escolha o que o app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; terá permissão de acessar"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"O app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; foi atualizado. Escolha o que esse app terá permissão de acessar."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Novas permissões"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permissões atuais"</string>
<string name="message_staging" msgid="6151794817691100003">"Promovendo app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconhecido"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Para sua segurança, seu tablet não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Para sua segurança, sua TV não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Para sua segurança, seu smartphone não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu smartphone ou pela perda de dados que possa resultar do uso desse app."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu tablet ou pela perda de dados que possa resultar do uso desse app."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Sua TV e seus dados pessoais estão mais vulneráveis a ataques por apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano à sua TV ou pela perda de dados que possa resultar do uso dese app."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Configurações"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalando/desinstalando apps do Wear"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1473ceb0..84174e85 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Desconhecido"</string>
<string name="installing" msgid="8613631001631998372">"A instalar..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"A instalar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplicação instalada."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Pretende instalar esta aplicação? Terá acesso a:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Pretende instalar esta aplicação? Não requer qualquer acesso especial."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Pretende instalar uma atualização para a aplicação integrada? Os dados existentes não serão perdidos. Não é necessário um acesso específico."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplicação não instalada."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Foi bloqueada a instalação do pacote."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"O pacote entra em conflito com um pacote existente com o mesmo nome."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Esta aplicação não é compatível com o seu tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"A aplicação não foi instalada porque o pacote entra em conflito com um pacote existente."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"A aplicação não foi instalada porque não é compatível com o seu tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Esta aplicação não é compatível com a sua TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Esta aplicação não é compatível com o seu telemóvel."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"O pacote parece estar danificado."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"A aplicação não foi instalada porque não é compatível com o seu telemóvel."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"A aplicação não foi instalada porque o pacote parece ser inválido."</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> no tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Não foi possível instalar o <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> no telemóvel."</string>
<string name="launch" msgid="4826921505917605463">"Abrir"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Por segurança, o tablet está definido para bloquear a inst. de aplicações obtidas de fontes desconhecidas."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por segurança, a TV está def. para bloquear a instal. de aplic. obtidas a partir de fontes desconh."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Por segurança, o telemóvel está definido para bloquear a inst. de aplicações obtidas de fontes desconhecidas."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"O administrador não permite a instalação de aplicações obtidas de origens desconhecidas."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"O administrador não permite a instalação de aplicações obtidas de fontes desconhecidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Este utilizador não pode instalar aplicações desconhecidas"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Definições"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gerir aplicações"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplicação não encontrada"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"A aplicação não foi encontrada na lista de aplicações instaladas."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Não autorizado"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"O utilizador atual não tem autorização para efetuar esta desinstalação."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erro"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Não foi possível desinstalar a aplicação."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar a aplicação"</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> faz parte da seguinte aplicação:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Pretende desinstalar esta aplicação para o utilizador <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Pretende substituir esta aplicação pela versão de fábrica? Todos os dados são removidos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Pretende substituir esta aplicação pela versão de fábrica? Todos os dados são removidos. Esta ação afeta todos os utilizadores deste dispositivo, incluindo os que têm perfis de trabalho."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Desinstalações em execução"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Desinstalações com falha"</string>
<string name="uninstalling" msgid="5556217435895938250">"A desinstalar..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"A desinstalar a aplicação <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"A aplicação <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> foi desinstalada"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstalação sem êxito."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Não é possível desinstalar porque este pacote é um admin. de aparelho ativo."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Não é poss. desinst. porque este pacote é um admin. de disp. ativos para o utiliz. <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Falha ao desinstalar a aplicação <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Não é possível desinstalar a aplicação de administração de dispositivos ativa"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Não é possível desinstalar a aplicação de administração de dispositivos ativa para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Esta aplicação é necessária para alguns utilizadores ou perfis e foi desinstalada para outros"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"O perfil necessita desta aplicação e não é possível desinstalá-la."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Esta aplic. é exigida pelo administrador do disp. e não pode ser desinstalada."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gerir administradores de aparelhos"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Gerir aplicações de administração de dispositivos"</string>
<string name="manage_users" msgid="3125018886835668847">"Gerir utilizadores"</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_text" msgid="7623286983621067011">"Ocorreu um problema ao analisar o pacote."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Esta atualização não requer novas permissões."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Pretende conceder as seguintes permissões? Permitirão acesso a:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Recusar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Mais informações"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Recusar mesmo assim"</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="7332275268559121742">"Pretende permitir à(ao) &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> desativadas"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todas desativadas"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nenhuma desativada"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicações"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permissões da aplicação"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"O <xliff:g id="APP_NAME_0">%1$s</xliff:g> foi atualizado. Permite que o <xliff:g id="APP_NAME_1">%1$s</xliff:g> aceda aos conteúdos seguintes?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Escolher a que conteúdos permite que o <xliff:g id="APP_NAME">%1$s</xliff:g> aceda"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"O <xliff:g id="APP_NAME">%1$s</xliff:g> foi atualizado. Escolha a que conteúdos permite que esta aplicação aceda."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Escolher a que conteúdos permite que o &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; aceda"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"O &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; foi atualizado. Escolha a que conteúdos permite que esta aplicação aceda."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Novas autorizações"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Autorizações atuais"</string>
<string name="message_staging" msgid="6151794817691100003">"A preparar a aplicação…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconhecido"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Para sua segurança, o tablet não está autorizado a instalar aplicações desconhecidas a partir desta fonte."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Para sua segurança, a TV não está autorizada a instalar aplicações desconhecidas a partir desta fonte."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Para sua segurança, o telemóvel não está autorizado a instalar aplicações desconhecidas a partir desta fonte."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"O seu telemóvel e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta aplicação, concorda que é responsável por quaisquer danos causados ao telemóvel ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"O seu tablet e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta aplicação, concorda que é responsável por quaisquer danos causados ao tablet ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"A sua TV e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta aplicação, concorda que é responsável por quaisquer danos causados à TV ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Definições"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalar/desinstalar aplicações Wear"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 63c38351..28e64546 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
<string name="unknown" msgid="4742479012767208045">"Desconhecido"</string>
<string name="installing" msgid="8613631001631998372">"Instalando..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</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>
@@ -33,19 +34,17 @@
<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_blocked" msgid="1606870930588770025">"A instalação do pacote foi bloqueada."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Já existe um pacote com esse mesmo nome."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Este aplicativo não é compatível com seu tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Como o app não é compatível com seu tablet, ele não foi instalado."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Este app não é compatível com sua TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Este aplicativo não é compatível com seu smartphone."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que o pacote está corrompido."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Como o app não é compatível com seu smartphone, ele não foi instalado."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Como o pacote parece ser inválido, o app não foi instalado."</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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Seu administrador não permite a instalação de apps transferidos por download de fontes desconhecidas"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Apps desconhecidos não podem ser instalados por este usuário"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Configurações"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gerenciar apps"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Não permitido"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"O usuário atual não tem permissão para executar essa desinstalação."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Erro"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Não foi possível desinstalar o app."</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>
@@ -65,15 +68,20 @@
<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="1394549691152728409">"Substituir este app pela versão de fábrica? Todos os dados serão removidos."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Substituir este app pela versão de fábrica? Todos os dados serão removidos. Isso afeta todos os usuários deste dispositivo, incluindo aqueles com perfis de trabalho."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Executando desinstalações"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Falha nas desinstalações"</string>
<string name="uninstalling" msgid="5556217435895938250">"Desinstalando..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Desinstalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> desinstalado"</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 um administrador 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_failed_app" msgid="945277834056527022">"Falha na desinstalação de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Não é possível desinstalar o app para administrador ativo do dispositivo"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Não é possível desinstalar o app para administrador ativo do dispositivo de <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"O app é necessário para alguns usuários ou perfis e foi desinstalado para outros"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Este app é necessário para seu perfil 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="manage_device_administrators" msgid="118178632652346535">"Gerenciar apps para administrador do dispositivo"</string>
<string name="manage_users" msgid="3125018886835668847">"Gerenciar usuários"</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_text" msgid="7623286983621067011">"Ocorreu um problema ao analisar o pacote."</string>
@@ -84,9 +92,13 @@
<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_deny" msgid="2176510645406614340">"Negar"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Mais informações"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Negar mesmo assim"</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="7332275268559121742">"Permitir que o app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> desativada(s)"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"todas desativadas"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nenhuma desativada"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> foi atualizado. Permitir que o app <xliff:g id="APP_NAME_1">%1$s</xliff:g> acesse os itens a seguir?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Escolha o que o app <xliff:g id="APP_NAME">%1$s</xliff:g> terá permissão de acessar"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> foi atualizado. Escolha o que esse app terá permissão de acessar."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Escolha o que o app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; terá permissão de acessar"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"O app &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; foi atualizado. Escolha o que esse app terá permissão de acessar."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Cancelar"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuar"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Novas permissões"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permissões atuais"</string>
<string name="message_staging" msgid="6151794817691100003">"Promovendo app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Desconhecido"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Para sua segurança, seu tablet não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Para sua segurança, sua TV não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Para sua segurança, seu smartphone não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu smartphone ou pela perda de dados que possa resultar do uso desse app."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu tablet ou pela perda de dados que possa resultar do uso desse app."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Sua TV e seus dados pessoais estão mais vulneráveis a ataques por apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano à sua TV ou pela perda de dados que possa resultar do uso dese app."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuar"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Configurações"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalando/desinstalando apps do Wear"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 95017dd0..184d1ed9 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -24,6 +24,7 @@
<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="installing_app" msgid="4097935682329028894">"Se instalează <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</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>
@@ -33,19 +34,17 @@
<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_blocked" msgid="1606870930588770025">"Instalarea pachetului a fost blocată."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Pachetul este în conflict cu un pachet existent cu același nume."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Această aplicație nu este compatibilă cu tableta dvs."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplicația nu a fost instalată deoarece pachetul intră în conflict cu un pachet existent."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplicația nu a fost instalată deoarece nu este compatibilă cu tableta dvs."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Această aplicație nu este compatibilă cu televizorul dvs."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Această aplicație nu este compatibilă cu telefonul dvs."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pachetul pare a fi deteriorat."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplicația nu a fost instalată deoarece nu este compatibilă cu telefonul dvs."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplicația nu a fost instalată deoarece se pare că pachetul este nevalid."</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>
<string name="launch" msgid="4826921505917605463">"Deschideți"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Pentru securitate, tableta blochează instalarea aplicațiilor obținute din surse necunoscute."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Pentru securitate, televizorul este setat să blocheze instalarea aplicațiilor din surse necunoscute."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Pentru securitate, telefonul blochează instalarea aplicațiilor obținute din surse necunoscute."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratorul nu permite instalarea aplicațiilor obținute din surse necunoscute."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratorul nu permite instalarea aplicațiilor obținute din surse necunoscute"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Aplicațiile necunoscute nu pot fi instalate de acest utilizator"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Setări"</string>
<string name="manage_applications" msgid="4033876279091996596">"Gestionați aplicații"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplicația nu a fost găsită"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplicația nu a fost găsită în lista de aplicații instalate."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nu are permisiune"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Utilizatorul actual nu are permisiune pentru a face această dezinstalare."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Eroare"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplicația nu a putut fi dezinstalată."</string>
<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>
@@ -65,15 +68,20 @@
<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="1394549691152728409">"Înlocuiți această aplicație cu versiunea din fabrică? Toate datele vor fi eliminate."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Înlocuiți această aplicație cu versiunea din fabrică? Toate datele vor fi eliminate. Această acțiune va afecta toți utilizatorii dispozitivului, inclusiv pe cei cu profiluri de serviciu."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Dezinstalări în curs"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Dezinstalări nereușite"</string>
<string name="uninstalling" msgid="5556217435895938250">"În curs de dezinstalare..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Se dezinstalează <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Dezinstalare finalizată."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> a fost dezinstalat"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Dezinstalare nefinalizată."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nu se poate dezinstala, acest pachet este un administrator de dispozitive activ."</string>
- <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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> nu a putut fi dezinstalată."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Nu se poate dezinstala aplicația activă de administrare a dispozitivului"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nu se poate dezinstala aplicația activă de administrare a dispozitivului pentru <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Aplicația este necesară unor utilizatori sau profiluri și a fost dezinstalată pentru alții"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Aplicația este necesară pentru profilul dvs. ș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="118178632652346535">"Gestionați aplicațiile de administrare dispozitiv"</string>
<string name="manage_users" msgid="3125018886835668847">"Gestionați utilizatorii"</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_text" msgid="7623286983621067011">"A apărut o problemă la analizarea pachetului."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Această actualizare nu necesită permisiuni noi."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Doriți să acordați următoarele permisiuni? Utilizatorul va avea acces la:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuzați"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Mai multe informații"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Nu permiteți oricum"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> din <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Permiteți &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; să <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> dezactivate"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"toate dezactivate"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"niciuna dezactivată"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permiteți"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicații"</string>
<string name="app_permissions" msgid="3146758905824597178">"Permisiuni pentru aplicație"</string>
@@ -100,7 +112,7 @@
</plurals>
<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="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> aplicații au această permisiune"</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> 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>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Acțiunile Instalați/Dezinstalați nu sunt acceptate pe Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplicația <xliff:g id="APP_NAME_0">%1$s</xliff:g> a fost actualizată. Permiteți aplicației <xliff:g id="APP_NAME_1">%1$s</xliff:g> să acceseze următoarele?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Alegeți ce va putea accesa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> a fost actualizată. Alegeți ce va putea accesa această aplicație."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Alegeți ce va putea accesa &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplicația &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; a fost actualizată. Alegeți ce va putea accesa această aplicație."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Anulați"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Continuați"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Permisiuni noi"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Permisiuni actuale"</string>
<string name="message_staging" msgid="6151794817691100003">"Se pregătește aplicația…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Necunoscut"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Din motive de securitate, tableta dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Din motive de securitate, televizorul dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Din motive de securitate, telefonul dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonul și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați aplicația, acceptați că sunteți singura persoană responsabilă pentru deteriorarea telefonului sau pentru pierderea datelor, care pot avea loc în urma utilizării acesteia."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tableta și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați aplicația, acceptați că sunteți singura persoană responsabilă pentru deteriorarea tabletei sau pentru pierderea datelor, care pot avea loc în urma utilizării acesteia."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Televizorul și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați această aplicație, acceptați că sunteți singura persoană responsabilă pentru deteriorarea televizorului sau pentru pierderea datelor, care pot avea loc în urma utilizării acesteia."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Continuați"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Setări"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Se (dez)instalează aplicațiile Wear"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ff1556e3..9ebab27b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Отмена"</string>
<string name="unknown" msgid="4742479012767208045">"Неизвестно"</string>
<string name="installing" msgid="8613631001631998372">"Установка..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Устанавливаем <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Установить обновление этого встроенного приложения? На текущих данных это никак не отразится. Специальных прав доступа не требуется."</string>
<string name="install_failed" msgid="6579998651498970899">"Приложение не установлено."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Установка пакета заблокирована."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакет с таким названием уже существует."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Приложение несовместимо с вашим планшетом."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Приложение не установлено, так как оно конфликтует с другим пакетом."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Приложение не установлено, так как оно несовместимо с вашим планшетом."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Приложение несовместимо с вашим телевизором."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Приложение несовместимо с вашим телефоном."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Похоже, пакет поврежден."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Приложение не установлено, так как оно несовместимо с вашим телефоном."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Приложение не установлено, так как его пакет недействителен (например, поврежден)."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Ваш администратор запретил устанавливать приложения из неизвестных источников"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Этот пользователь не может устанавливать неизвестные приложения"</string>
<string name="ok" msgid="3468756155452870475">"ОК"</string>
<string name="settings" msgid="6743583734099755409">"Настройки"</string>
<string name="manage_applications" msgid="4033876279091996596">"Управление приложениями"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Действие запрещено"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Этот пользователь не может удалить приложение."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Ошибка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Не удалось удалить приложение."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Удалить это приложение из профиля <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Установить исходную версию приложения? Все его данные будут удалены."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Установить исходную версию приложения? Его данные будут удалены из всех профилей устройства, в том числе рабочих."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Активные процессы удаления"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Ошибки удаления"</string>
<string name="uninstalling" msgid="5556217435895938250">"Удаление..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Удаление приложения \"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>\"…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Удаление завершено."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Приложение \"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>\" удалено"</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_failed_app" msgid="945277834056527022">"Не удалось удалить приложение \"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>\"."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Невозможно удалить активное приложение для администрирования устройства"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Невозможно удалить активное приложение для администрирования устройства в профиле <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Это приложение обязательно для некоторых пользователей или профилей."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Это приложение обязательно для вашего профиля. Его нельзя удалить."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Это приложение указано администратором как обязательное. Его нельзя удалить."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Настройки администрирования"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Настроить приложения для администрир. устройства"</string>
<string name="manage_users" msgid="3125018886835668847">"Управление пользователями"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Не удалось удалить приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Ошибка при синтаксическом анализе пакета."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Установка этого обновления не требует новых разрешений."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Предоставить следующие разрешения? Вот к чему будет получен доступ:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Отклонить"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Подробнее"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Все равно запретить"</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="7332275268559121742">"Разрешить приложению &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"отключено: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"все отключены"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"все включены"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Разрешить"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Приложения"</string>
<string name="app_permissions" msgid="3146758905824597178">"Разрешения приложений"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Установка и удаление не поддерживаются на Android Wear"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Приложение <xliff:g id="APP_NAME_0">%1$s</xliff:g> было обновлено. Разрешить приложению <xliff:g id="APP_NAME_1">%1$s</xliff:g> следующие действия?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Выберите разрешения для приложения <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> было обновлено. Выберите разрешения для него."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Выберите разрешения для приложения &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Приложение &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; обновлено. Выберите разрешения для него."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Отмена"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Далее"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Новые разрешения"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Имеющиеся разрешения"</string>
<string name="message_staging" msgid="6151794817691100003">"Подождите…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Неизвестное приложение"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"В целях безопасности ваш планшет блокирует установку приложений из неизвестных источников."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"В целях безопасности ваш телевизор блокирует установку приложений из неизвестных источников."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"В целях безопасности ваш телефон блокирует установку приложений из неизвестных источников."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Ваши личные данные и данные телефона более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы соглашаетесь с тем, что несете полную ответственность за любой ущерб, нанесенный телефону, и потерю данных, связанные с использованием этого приложения."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Ваши личные данные и данные планшета более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы соглашаетесь с тем, что несете полную ответственность за любой ущерб, нанесенный планшету, и потерю данных, связанные с использованием этого приложения."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Ваши личные данные и данные телевизора более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы соглашаетесь с тем, что несете полную ответственность за любой ущерб, нанесенный телевизору, и потерю данных, связанные с использованием этого приложения."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Продолжить"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Настройки"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Установка/удаление приложений для Android Wear"</string>
</resources>
diff --git a/res/values-si-rLK-television/strings.xml b/res/values-si-television/strings.xml
index 2ac8d8b3..2ac8d8b3 100644
--- a/res/values-si-rLK-television/strings.xml
+++ b/res/values-si-television/strings.xml
diff --git a/res/values-si-rLK-watch/strings.xml b/res/values-si-watch/strings.xml
index c5d9ae41..c5d9ae41 100644
--- a/res/values-si-rLK-watch/strings.xml
+++ b/res/values-si-watch/strings.xml
diff --git a/res/values-si-rLK/strings.xml b/res/values-si/strings.xml
index be7d78f1..5aefea86 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"අවලංගු කරන්න"</string>
<string name="unknown" msgid="4742479012767208045">"නොදනී"</string>
<string name="installing" msgid="8613631001631998372">"ස්ථාපනය කරමින්…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ස්ථාපනය කරමින්…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"පවතින මෙම යෙදුමට යාවත්කාලීනයක් ස්ථාපනය කිරීමට ඔබට අවශ්‍යද? ඔබගේ පවතින දත්ත නැති නොවේ. එයට විශේෂ ප්‍රවේශයක් අවශ්‍ය නොවේ."</string>
<string name="install_failed" msgid="6579998651498970899">"යෙදුම ස්ථාපනය කරේ නැත."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"මෙම පැකේජය ස්ථාපනය කිරීම අවහිර කරන ලදි."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"මෙම පැකේජය එම නම ඇති දැනට පවතින පැකේජය හා ගැටේ."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ඔබගේ ටැබ්ලටය සමග මෙම යෙදුම නොගැලපේ."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"පැකේජය දැනට පවතින පැකේජයක් සමග ගැටෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"යෙදුම ඔබේ ටැබ්ලට් පරිගණකය සමග නොගැළපෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"මෙම යෙදුම ඔබගේ රූපවාහිනිය හා නොගැළපේ."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"මෙම යෙදුම ඔබගේ දුරකථනයට නොගැළපේ."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"පැකේජය සදොස් වී ඇති බව පෙනෙයි."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"යෙදුම ඔබේ දුරකථනය සමග නොගැළපෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"පැකේජය වලංගු නොවන බවක් පෙනෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"නාඳුනන මූලයන් වෙතින් ලබාගත් යෙදුම් ස්ථාපනය කිරීමට ඔබගේ පරිපාලකයා ඉඩ නොදේ"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"මෙම පරිශීලකයා මඟින් නොදන්නා යෙදුම් ස්ථාපනය කළ නොහැක"</string>
<string name="ok" msgid="3468756155452870475">"හරි"</string>
<string name="settings" msgid="6743583734099755409">"සැකසීම්"</string>
<string name="manage_applications" msgid="4033876279091996596">"යෙදුම් කළමනාකරණය කරන්න"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ඉඩ නොදෙයි"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"වත්මන් පරිශීලකයාට මෙම අස්ථාපනය සිදු කිරීමට ඉඩ නොදේ."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"දෝෂය"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"යෙදුම අස්ථාපනය කළ නොහැකි විය."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> පරිශීලකයා සඳහා මෙම යෙදුම අස්ථාපනය කිරීමට ඔබට අවශ්‍යයද?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"මෙම යෙදුම කර්මාන්ත ශාලා අනුවාදයක් සමගින් ප්‍රතිස්ථාපනය කරන්නද? සියලු දත්ත ඉවත් කරනු ඇත."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"මෙම යෙදුම කර්මාන්ත ශාලා අනුවාදයක් සමගින් ප්‍රතිස්ථාපනය කරන්නද? සියලු දත්ත ඉවත් කරනු ඇත. මෙය කාර්යාල පැතිකඩවල් සහිත අය ඇතුළුව, මෙම උපාංගයෙහි සියලු පරිශීලකයන් වෙත බලපානු ඇත."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"අස්ථාපන ධාවනය කරමින්"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"අසාර්ථක වූ අස්ථාපන"</string>
<string name="uninstalling" msgid="5556217435895938250">"අස්ථාපනය කරමින්…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> අස්ථාපනය කරමින්…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"අස්ථාපනය අවසන්."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> අස්ථාපනය කරන ලදී"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> අස්ථාපනය කිරීම සාර්ථකයි."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ක්‍රියාකාරී උපාංගය පරිපාලක යෙදුම අස්ථාපනය කිරීමට නොහැක"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> සඳහා ක්‍රියාකාරී උපාංගය පරිපාලක යෙදුම අස්ථාපනය කිරීමට නොහැක"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"මෙම යෙදුම සමහර පරිශීලකයන්ට සහ පැතිකඩවල්වලට අවශ්‍ය අතර අනෙක් අයට අස්ථාපනය කරන ලදී"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"ඔබේ කාර්ය පැතිකඩ සඳහා මෙම යෙදුම අවශ්‍ය වන අතර අස්ථාපනය කළ නොහැකිය."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ඔබගේ උපාංගයේ පාලකයාට මෙම යෙදුම අවශ්‍ය වේ එම නිසා අස්ථාපනය කළ නොහැක."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"උපාංග පරිපාලකයන් කළමනාකරණය කරන්න"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"උපාංග පරිපාලක යෙදුම් කළමනාකරණය කිරීම"</string>
<string name="manage_users" msgid="3125018886835668847">"පරිශීලකයන් කළමනාකරණය කරන්න"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> අස්ථාපනය කල නොහැක."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"පැකේජය විග්‍රහ කිරීමේදී ගැටළුවක් ඇති විය."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"මෙම යාවත්කාලිනයට අලුත් අවසරයන් අවශ්‍ය නොවේ."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ඔබට පහත සඳහන් අවසර පිරිනැමීමට අවශ්‍ය ද? එය පහත සඳහා ප්‍රවේශය ලබා ගනියි:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ප්‍රතික්ෂේප කරන්න"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"වැඩිදුර තොරතුරු"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"කෙසේ වෙතත් ප්‍රතික්ෂේප කරන්න"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ට <xliff:g id="ACTION">%2$s</xliff:g> වෙත ඉඩ දෙන්නද?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> අබලයි"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"සියල්ල අබලයි"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"කිසිවක් අබල නැත"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"ඉඩ දෙන්න"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"යෙදුම්"</string>
<string name="app_permissions" msgid="3146758905824597178">"යෙදුම් අවසර"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear මත ස්ථාපන/අස්ථාපනය ක්‍රියා සහාය දක්වන්නේ නැත."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> යාවත්කාලීන කර ඇත. <xliff:g id="APP_NAME_1">%1$s</xliff:g> හට පහත ඒවාට පිවිසීමට ඉඩ දෙන්නද?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට පිවිසීමට ඉඩ දෙන දේ තෝරන්න"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> යාවත්කාලීන කර ඇත. මෙම යෙදුමට පිවිසීමට ඉඩ දෙන දේ තෝරන්න."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; හට පිවිසීමට ඉඩ දෙන දේ තෝරන්න"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; යාවත්කාලීන කර ඇත. මෙම යෙදුමට පිවිසීමට ඉඩ දෙන දේ තෝරන්න."</string>
<string name="review_button_cancel" msgid="957906817733578877">"අවලංගු කරන්න"</string>
<string name="review_button_continue" msgid="4809162078179371370">"දිගටම කර ගෙන යන්න"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"නව අවසර"</string>
<string name="current_permissions_category" msgid="998210994450606094">"වත්මන් අවසර"</string>
<string name="message_staging" msgid="6151794817691100003">"යෙදුම වේදිකාගත කරමින්..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"නොදනී"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"ආරක්ෂාව සඳහා, ඔබගේ ටැබ්ලටය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"ආරක්ෂාව සඳහා, ඔබගේ රූපවාහිනිය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"ආරක්ෂාව සඳහා, ඔබගේ දුරකථනය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"ඔබගේ දුරකථනය සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ දුරකථනය සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"ඔබගේ ටැබ්ලට් පරිගණකය සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ ටැබ්ලට් පරිගණකය සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ඔබගේ TV සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ TV සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"දිගටම කරගෙන යන්න"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"සැකසීම්"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear යෙදුම් ස්ථාපනය/අස්ථාපනය කරමින්"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 3cdd5d08..d62b80b1 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Zrušiť"</string>
<string name="unknown" msgid="4742479012767208045">"Neznáme"</string>
<string name="installing" msgid="8613631001631998372">"Inštaluje sa..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Inštaluje sa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikácia bola nainštalovaná."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Chcete nainštalovať túto aplikáciu? Získa nasledujúce povolenia:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Chcete nainštalovať túto aplikáciu? Nevyžaduje žiadny zvláštny prístup."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Chcete nainštalovať aktualizáciu tejto vstavanej aplikácie? Vaše údaje sa nestratia. Táto akcia nevyžaduje žiadny zvláštny prístup."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikácia nebola nainštalovaná."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Inštalácia balíka bola zablokovaná."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Tento balík je v konflikte s existujúcim balíkom s rovnakým názvom."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Táto aplikácia nie je kompatibilná s vaším tabletom."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikácia sa nenainštalovala, pretože balík koliduje s existujúcim balíkom."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikácia sa nenainštalovala, pretože nie je kompatibilná s vaším tabletom."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Táto aplikácia nie je kompatibilná s vaším televízorom."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Táto aplikácia nie je kompatibilná s vaším telefónom."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Zdá sa, že je balík poškodený."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikácia sa nenainštalovala, pretože nie je kompatibilná s vaším telefónom."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikácia sa nenainštalovala, pretože je balík zrejme neplatný."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> sa do vášho tabletu nepodarilo nainštalovať."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> sa nepodarilo nainštalovať na vašom televízore."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> sa do vášho telefónu nepodarilo nainštalovať."</string>
<string name="launch" msgid="4826921505917605463">"Otvoriť"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Tablet je z dôvodu zabezpečenia nastavený tak, aby blokoval inštalácie aplikácií z neznámych zdrojov."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Váš televízor blokuje z bezpečnostných dôvodov inštaláciu aplikácií získaných z neznámych zdrojov."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Telefón je z dôvodu zabezpečenia nastavený tak, aby blokoval inštalácie aplikácií z neznámych zdrojov."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Váš správca zakázal inštaláciu aplikácií z neznámych zdrojov."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Váš správca zakázal inštaláciu aplikácií z neznámych zdrojov"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Tento používateľ nemôže inštalovať neznáme aplikácie"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Nastavenia"</string>
<string name="manage_applications" msgid="4033876279091996596">"Spravovať aplikácie"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikácia sa nenašla"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikáciu sa nepodarilo nájsť v zozname nainštalovaných aplikácií."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nie je povolené"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Aktuálny používateľ nemá na odinštalovanie povolenie."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Chyba"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplikáciu nie je možné odinštalovať."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Odinštalovať aplikáciu"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Odinštalovať aktualizáciu"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"Aktivita <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> je súčasťou nasledujúcej aplikácie:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Chcete túto aplikáciu odinštalovať pre používateľa <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Nahradiť túto aplikáciu továrenskou verziou? Všetky údaje sa odstránia."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Nahradiť túto aplikáciu továrenskou verziou? Všetky údaje sa odstránia. Ovplyvní to všetkých používateľov tohto zariadenia vrátane tých s pracovnými profilmi."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Prebiehajúce odinštalácie"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neúspešné odinštalácie"</string>
<string name="uninstalling" msgid="5556217435895938250">"Prebieha odinštalovanie..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Prebieha odinštalovanie balíčka <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Odinštalovanie bolo dokončené."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Balíček <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> bol odinštalovaný"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Odinštalovanie bolo neúspešné."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nie je možné odinštalovať, pretože tento balík je aktívnym správcom zariadenia."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Balíček nie je možné odinštalovať, pretože je aktívnym správcom zariadenia pre používateľa <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Odinštalovanie balíčka <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sa nepodarilo."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktívna aplikácia na správu zariadenia sa nedá odinštalovať"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Aktívna aplikácia na správu zariadenia sa v prípade používateľa <xliff:g id="USERNAME">%1$s</xliff:g> nedá odinštalovať"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Táto aplikácia sa vyžaduje v prípade niektorých používateľov či profilov a v prípade iných zase bola odinštalovaná"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Táto aplikácia sa vyžaduje pre váš profil a nemôžete ju odinštalovať."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Túto aplikáciu vyžaduje správca vášho zariadenia a nie je ju možné odinštalovať."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Spravovať správcov zariadenia"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Spravovať aplikácie na ovládanie zariadenia"</string>
<string name="manage_users" msgid="3125018886835668847">"Spravovať používateľov"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> sa nepodarilo odinštalovať."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Pri analýze balíka sa vyskytol problém."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Táto aktualizácia nevyžaduje žiadne nové povolenia."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Chcete udeliť nasledujúce povolenia? Získate prístup k:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmietnuť"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Ďalšie informácie"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Zamietnuť"</string>
<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="7332275268559121742">"Povoliť aplikácii &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Počet zakázaných: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"všetky sú zakázané"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"žiadne nie sú zakázané"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Povoliť"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikácie"</string>
<string name="app_permissions" msgid="3146758905824597178">"Povolenia aplikácií"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Systém Wear nepodporuje akciu inštalácie/odinštalovania."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikácia <xliff:g id="APP_NAME_0">%1$s</xliff:g> bola aktualizovaná. Povoliť aplikácii <xliff:g id="APP_NAME_1">%1$s</xliff:g> prístup k nasledovnému?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Vyberte, k čomu môže pristupovať aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> bola aktualizovaná. Vyberte, k čomu môže pristupovať."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Vyberte, k čomu môže pristupovať aplikácia &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikácia &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; bola aktualizovaná. Vyberte, k čomu môže pristupovať."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Zrušiť"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Pokračovať"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nové povolenia"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Aktuálne povolenia"</string>
<string name="message_staging" msgid="6151794817691100003">"Aplikácia je zavádzaná po etapách…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Neznáma"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Váš tablet nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Váš televízor nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Váš telefón nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Váš telefón a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštalovaním tejto aplikácie súhlasíte, že zodpovedáte za akékoľvek poškodenie vášho telefónu či stratu údajov, ku ktorým môže dôjsť v dôsledku jej použitia."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Váš tablet a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštalovaním tejto aplikácie súhlasíte, že zodpovedáte za akékoľvek poškodenie vášho tabletu či stratu údajov, ku ktorým môže dôjsť v dôsledku jej použitia."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Váš televízor a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštalovaním tejto aplikácie súhlasíte, že zodpovedáte za akékoľvek poškodenie vášho televízora či stratu údajov, ku ktorým môže dôjsť v dôsledku jej použitia."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Pokračovať"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Nastavenia"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Inštalácia/odinštalácia aplikácií Wear"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index fcaab142..60f04d3f 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Prekliči"</string>
<string name="unknown" msgid="4742479012767208045">"Neznano"</string>
<string name="installing" msgid="8613631001631998372">"Nameščanje …"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Nameščanje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacija je nameščena."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Ali želite namestiti to aplikacijo? Imela bo dostop do:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Ali želite namestiti to aplikacijo? Poseben dostop ni potreben."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Ali želite namestiti posodobitev te vgrajene aplikacije? Obstoječi podatki ne bodo izgubljeni. Za namestitev ne potrebujete posebnega dostopa."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacija ni nameščena."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Namestitev paketa je bila blokirana."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket je v sporu z obstoječim paketom z enakim imenom."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ta aplikacija ni združljiva z vašim tabličnim računalnikom."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacija ni bila nameščena, ker je paket v navzkrižju z obstoječim paketom."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacija ni bila nameščena, ker ni združljiva s tabličnim računalnikom."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ta aplikacija ni združljiva z vašim televizorjem."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ta aplikacija ni združljiva z vašim telefonom."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Kaže, da je paket poškodovan."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacija ni bila nameščena, ker ni združljiva s telefonom."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacija ni bila nameščena, ker paket verjetno ni veljaven."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> ni bilo mogoče namestiti v tablični računalnik."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> ni bilo mogoče namestiti v vašem televizorju."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> ni bilo mogoče namestiti v telefon."</string>
<string name="launch" msgid="4826921505917605463">"Odpri"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Tablični računal. je zaradi varnosti nastavljen, da blokira namestitev aplikacij iz neznanih virov."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Vaš televizor je zaradi varnosti nastavljen tako, da blokira namestitev aplikacij iz neznanih virov."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Telefon je zaradi varnosti nastavljen tako, da blokira namestitev aplikacij iz neznanih virov."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Skrbnik ne dovoli nameščanja aplikacij iz neznanih virov."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Skrbnik ne dovoli nameščanja aplikacij iz neznanih virov."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Ta uporabnik nima dovoljenja za nameščanje neznanih aplikacij"</string>
<string name="ok" msgid="3468756155452870475">"V redu"</string>
<string name="settings" msgid="6743583734099755409">"Nastavitve"</string>
<string name="manage_applications" msgid="4033876279091996596">"Upravljaj aplikacije"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"V redu"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikacije ni bilo mogoče najti"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikacije ni bilo mogoče najti na seznamu nameščenih aplikacij."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ni dovoljeno"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Trenutni uporabnik nima dovoljenja za izvedbo te odstranitve."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Napaka"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplikacije ni bilo mogoče odstraniti."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Odstrani aplikacijo"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Odstrani posodobitev"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> je del te aplikacije:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ali želite to aplikacijo odstraniti za uporabnika <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Želite to aplikacijo nadomestiti s tovarniško različico? Odstranjeni bodo vsi podatki."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Želite to aplikacijo nadomestiti s tovarniško različico? Odstranjeni bodo vsi podatki. To vpliva na vse uporabnike te naprave, vključno s tistimi z delovnimi profili."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Odstranitve v teku"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Neuspele odstranitve"</string>
<string name="uninstalling" msgid="5556217435895938250">"Odstranjevanje ..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Odstranjevanje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Odstranitev je končana."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Aplikacija <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> je bila odstranjena"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Odstranitev ni uspela."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Odstranitev ni mogoča, ker je ta paket aktivni skrbnik naprave."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Tega paketa ni mogoče odstraniti, ker je aktivni skrbnik naprav za uporabnika <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Odstranjevanje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ni uspelo."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Aktivne skrbniške aplikacije naprave ni mogoče odstraniti"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Aktivne skrbniške aplikacije za uporabnika <xliff:g id="USERNAME">%1$s</xliff:g> ni mogoče odstraniti"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Aplikacija je obvezna za nekatere uporabnike/profile in je odstranjena za druge."</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ta aplikacija je potrebna za profil in je ni mogoče odstraniti."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"To aplikacijo zahteva skrbnik naprave in je ni mogoče odstraniti."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Upravljanje skrbnikov naprav"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Upravljanje skrbniških aplikacij naprave"</string>
<string name="manage_users" msgid="3125018886835668847">"Upravljanje uporabnikov"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> ni bilo mogoče odstraniti."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Težava pri razčlenjevanju paketa."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Za to posodobitev niso potrebna nova dovoljenja."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ali želite odobriti naslednja dovoljenja? S tem bo omogočen dostop do:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Zavrni"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Več informacij"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Vseeno 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="7332275268559121742">"Ali dovolite aplikaciji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; izvesti to dejanje: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"št. onemogočenih: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"vse onemogočeno"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"nič ni onemogočeno"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Dovoli"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
<string name="app_permissions" msgid="3146758905824597178">"Dovoljenja za aplikacije"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Dejanja namestitve in odstranitve v sistemu Android Wear niso podprta."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> je posodobljena. Dovolite aplikaciji <xliff:g id="APP_NAME_1">%1$s</xliff:g> dostop do tega?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Izberite, do česa dovolite aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> dostop"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je posodobljena. Izberite, do česa dovolite tej aplikaciji dostop."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Izberite, do česa aplikaciji &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; dovolite dostop"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Aplikacija &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; je posodobljena. Izberite, do česa tej aplikaciji dovolite dostop."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Prekliči"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Naprej"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nova dovoljenja"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Trenutna dovoljenja"</string>
<string name="message_staging" msgid="6151794817691100003">"Priprava aplikacije …"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Neznano"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Vaš tablični računalnik zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Vaš televizor zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Vaš telefon zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Neznane aplikacije lahko resno ogrozijo varnost telefona in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v telefonu, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Neznane aplikacije lahko resno ogrozijo varnost tabličnega računalnika in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v tabličnem računalniku, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Neznane aplikacije lahko resno ogrozijo varnost televizorja in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v televizorju, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Nadaljuj"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Nastavitve"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Nameščanje/odstranjev. aplikacij za Wear"</string>
</resources>
diff --git a/res/values-sq-rAL-television/strings.xml b/res/values-sq-television/strings.xml
index d66231cb..d66231cb 100644
--- a/res/values-sq-rAL-television/strings.xml
+++ b/res/values-sq-television/strings.xml
diff --git a/res/values-sq-rAL-watch/strings.xml b/res/values-sq-watch/strings.xml
index 772bb7aa..772bb7aa 100644
--- a/res/values-sq-rAL-watch/strings.xml
+++ b/res/values-sq-watch/strings.xml
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq/strings.xml
index 492cee6b..1d250705 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Anulo"</string>
<string name="unknown" msgid="4742479012767208045">"E panjohur"</string>
<string name="installing" msgid="8613631001631998372">"Po instalon…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Po instalon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplikacioni u instalua."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Dëshiron ta instalosh këtë aplikacion? Ai do të ketë qasje në:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Dëshiron ta instalosh këtë aplikacion? Nuk kërkon ndonjë qasje të veçantë."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Dëshiron të instalosh një përditësim të këtij aplikacioni ekzistues? Të dhënat e tua ekzistuese nuk do të humbasin. Aplikacioni nuk kërkon ndonjë qasje të veçantë."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplikacioni nuk u instalua."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Instalimi paketës u bllokua."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paketa është në konflikt me një paketë ekzistuese nga i njëjti emër."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ky aplikacion është i papërshtatshëm me tabletin tënd."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Aplikacioni nuk u instalua pasi paketa është në konflikt me një paketë ekzistuese."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Aplikacioni nuk u instalua pasi nuk është i përputhet me tabletin tënd."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ky aplikacion është i papërshtatshëm me televizorin tënd."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ky aplikacion është i papërshtatshëm me telefonin tënd."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paketa duket se është e dëmtuar."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Aplikacioni nuk u instalua pasi nuk përputhet me telefonin tënd."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Aplikacioni nuk u instalua pasi paketa duket se nuk është e vlefshme."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mund të instalohej në tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mund të instalohej në televizor."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mundi të instalohej në telefon."</string>
<string name="launch" msgid="4826921505917605463">"Hap"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Për arsye sigurie, tableti yt është caktuar t\'i bllokojë instalimet e aplikacioneve nga burime të panjohura."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Për arsye sigurie, televizori yt është caktuar t\'i bllokojë instalimet e aplikacioneve nga burime të panjohura."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Për arsye sigurie, telefoni yt është caktuar t\'i bllokojë instalimet e aplikacioneve nga burime të panjohura."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratori yt nuk lejon instalimin e aplikacioneve nga burime të panjohura."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratori nuk lejon instalimin e aplikacioneve nga burime të panjohura."</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Aplikacionet e panjohura nuk mund të instalohen nga ky përdorues"</string>
<string name="ok" msgid="3468756155452870475">"Në rregull"</string>
<string name="settings" msgid="6743583734099755409">"Cilësimet"</string>
<string name="manage_applications" msgid="4033876279091996596">"Menaxho aplikacionet"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Në rregull"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Aplikacioni nuk u gjet"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Aplikacioni nuk u gjet në listën e aplikacioneve të instaluara."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Nuk lejohet"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Përdoruesi aktual nuk lejohet të kryejë këtë çinstalim."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Gabim"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Aplikacioni nuk mund të instalohej."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Çinstalo aplikacionin"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Çinstalo përditësimin"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> është pjesë e aplikacionit të mëposhtëm:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Dëshiron ta çinstalosh këtë aplikacion për përdoruesin <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Të zëvendësohet ky aplikacion me versionin e fabrikës? Të gjitha të dhënat do të hiqen."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Të zëvendësohet ky aplikacion me versionin e fabrikës? Të gjitha të dhënat do të hiqen. Kjo ndikon te të gjithë përdoruesit e kësaj pajisjeje, duke përfshirë ata me profile të punës."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Çinstalimet në ekzekutim"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Çinstalimet e dështuara"</string>
<string name="uninstalling" msgid="5556217435895938250">"Po e çinstalon…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> po çinstalohet…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Çinstalimi përfundoi."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> u çinstalua"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Çinstalimi nuk pati sukses."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Nuk mund të çinstalohet sepse kjo paketë është administratore aktive e pajisjes."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Nuk mund të çinstalohet sepse kjo paketë është administratore aktive e pajisjes për përdoruesin <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Çinstalimi i <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> nuk u krye me sukses."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Nuk mund të çinstalohet aplikacioni aktiv i administratorit të pajisjes"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Nuk mund të çinstalohet aplikacioni aktiv i administratorit të pajisjes për <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ky aplikacion kërkohet për disa përdorues ose profile dhe është çinstaluar për të tjerët"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ky aplikacion nevojitet për profilin tënd dhe nuk mund të çinstalohet."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ky aplikacion kërkohet nga administratori i pajisjes dhe nuk mund të çinstalohet."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Menaxho administratorët e pajisjes"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Menaxho aplikacionet e administratorit të pajisjes"</string>
<string name="manage_users" msgid="3125018886835668847">"Menaxho përdoruesit"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mundi të çinstalohej."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Kishte një problem me analizimin e paketës."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ky përditësim nuk kërkon leje të reja."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Dëshiron të japësh lejet e mëposhtme? Do të ketë qasje në:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuzo"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Informacione të tjera"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Refuzo sidoqoftë"</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="7332275268559121742">"Të lejohet &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; që të <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> të çaktivizuara"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"të gjitha të çaktivizuara"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"asnjë e çaktivizuar"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Lejo"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacionet"</string>
<string name="app_permissions" msgid="3146758905824597178">"Lejet e aplikacionit"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Teknologjia \"Android\" që vishet"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Instalo/çinstalo veprimet që nuk mbështeten në teknologjinë që vishet."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> është përditësuar. Të lejohet qasja e <xliff:g id="APP_NAME_1">%1$s</xliff:g> në sa më poshtë?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Zgjidh se ku do të lejohet të ketë qasje <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> është përditësuar. Zgjidh se ku do të lejohet të ketë qasje ky aplikacion."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Zgjidh se ku do të lejohet të ketë qasje &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; është përditësuar. Zgjidh se ku do të lejohet të ketë qasje ky aplikacion."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Anulo"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Vazhdo"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Lejet e reja"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Lejet aktuale"</string>
<string name="message_staging" msgid="6151794817691100003">"Po vihet në përdorim aplikacioni..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"E panjohur"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Për sigurinë tënde, tableti yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Për sigurinë tënde, televizori yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Për sigurinë tënde, telefoni yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefoni dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj telefonit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tableti dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj tabletit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Televizori dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj televizorit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Vazhdo"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Cilësimet"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Instalimi/çinstalimi i aplikacioneve të \"Wear\""</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5c7c5fab..57180779 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Откажи"</string>
<string name="unknown" msgid="4742479012767208045">"Непознато"</string>
<string name="installing" msgid="8613631001631998372">"Инсталирање..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Инсталира се <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Да ли желите да инсталирате ажурирање ове уграђене апликације? Постојећи подаци неће бити изгубљени. Није потребан посебан приступ."</string>
<string name="install_failed" msgid="6579998651498970899">"Апликација није инсталирана."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Инсталирање пакета је блокирано."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакет је у сукобу са постојећим пакетом истог назива."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ова апликација није компатибилна са таблетом."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Апликација није инсталирана јер је пакет неусаглашен са постојећим пакетом."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Апликација није инсталирана јер није компатибилна са таблетом."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ова апликација није компатибилна са ТВ-ом."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ова апликација није компатибилна са телефоном."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Изгледа да је пакет оштећен."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Апликација није инсталирана јер није компатибилна са телефоном."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Апликација није инсталирана јер је пакет неважећи."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Администратор не дозвољава инсталирање апликација добијених из непознатих извора"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Овај корисник не може да инсталира непознате апликације"</string>
<string name="ok" msgid="3468756155452870475">"Потврди"</string>
<string name="settings" msgid="6743583734099755409">"Подешавања"</string>
<string name="manage_applications" msgid="4033876279091996596">"Управљање апликацијама"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Није дозвољено"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Актуелном кориснику није дозвољено да обави ово деинсталирање."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Грешка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Деинсталирање апликације није успело."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Желите ли да деинсталирате ову апликацију за корисника <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Желите ли да замените ову апликацију фабричком верзијом? Сви подаци ће бити уклоњени."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Желите ли да замените ову апликацију фабричком верзијом? Сви подаци ће бити уклоњени. Ово утиче на све кориснике овог уређаја, укључујући и оне са профилима за Work."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Активна деинсталирања"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Неуспела деинсталирања"</string>
<string name="uninstalling" msgid="5556217435895938250">"Деинсталирање..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> се деинсталира…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Деинсталирање је завршено."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Апликација <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> је деинсталирана"</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_failed_app" msgid="945277834056527022">"Деинсталирање апликације <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> није успело."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Не можете да деинсталирате апликацију за активног администратора уређаја"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Не можете да деинсталирате апликацију за активног администратора уређаја за <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ова апликација је потребна за неке кориснике или профиле, а деинсталирана је за друге"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ова апликација је потребна за ваш профил и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ова апликација је потребна администратору уређаја и не може да се деинсталира."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Управљај администраторима уређаја"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Управљај апликацијама за администраторе уређаја"</string>
<string name="manage_users" msgid="3125018886835668847">"Управљаj корисницима"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Није могуће деинсталирати апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Дошло је до проблема при рашчлањивању пакета."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ово ажурирање не захтева нове дозволе."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Да ли желите да одобрите следеће дозволе? Одобрићете приступ за:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Одбаци"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Више информација"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Ипак одбиј"</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="7332275268559121742">"Желите ли да дозволите да &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Онемогућених: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"све су онемогућене"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ниједна није онемогућена"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дозволи"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апликације"</string>
<string name="app_permissions" msgid="3146758905824597178">"Дозволе за апликације"</string>
@@ -119,12 +131,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Радње Инсталирај/Деинсталирај нису подржане у Wear-у."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Апликација <xliff:g id="APP_NAME_0">%1$s</xliff:g> је ажурирана. Желите ли да дозволите да <xliff:g id="APP_NAME_1">%1$s</xliff:g> приступа следећим ставкама?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Изаберите чему <xliff:g id="APP_NAME">%1$s</xliff:g> може да приступа"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је ажурирана. Изаберите чему апликација може да приступа."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Изаберите чему &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; може да приступа"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Апликација &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; је ажурирана. Изаберите чему ова апликација може да приступа."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Откажи"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Настави"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Нове дозволе"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Актуелне дозволе"</string>
<string name="message_staging" msgid="6151794817691100003">"Апликација се припрема…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Непознато"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Таблету из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Телевизору из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Телефону из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Телефон и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења телефона или губитак података до којих може да дође због њеног коришћења."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Таблет и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења таблета или губитак података до којих може да дође због њеног коришћења."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ТВ и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења ТВ-а или губитак података до којих може да дође због њеног коришћења."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Настави"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Подешавања"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Инсталирање/деинсталирање Wear апликација"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index a5dec787..3cd265d0 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Avbryt"</string>
<string name="unknown" msgid="4742479012767208045">"Okänd"</string>
<string name="installing" msgid="8613631001631998372">"Installerar…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installeras …"</string>
<string name="install_done" msgid="3682715442154357097">"Appen har installerats."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Vill du installera den här appen? Den får åtkomst till:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Vill du installera den här appen? Den kräver ingen särskild åtkomst."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Vill du installera en uppdatering av den inbyggda appen? Dina befintliga data försvinner inte. Ingen särskild åtkomst krävs."</string>
<string name="install_failed" msgid="6579998651498970899">"Appen har inte installerats."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paketet har blockerats för installation."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Det finns en konflikt mellan det här paketet och ett befintligt paket med samma namn."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Appen är inte kompatibel med din surfplatta."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Appen har inte installerats på grund av en konflikt mellan detta paket och ett befintligt paket."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Appen har inte installerats eftersom den inte är kompatibel med surfplattan."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Appen är inte kompatibel med din TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Appen är inte kompatibel med din mobil."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paketet verkar vara skadat."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Appen har inte installerats eftersom den inte är kompatibel med mobilen."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Appen har inte installerats eftersom paketet verkar vara ogiltigt."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Det gick inte att installera <xliff:g id="APP_NAME">%1$s</xliff:g> på surfplattan."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunde inte installeras på TV:n."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Det gick inte att installera <xliff:g id="APP_NAME">%1$s</xliff:g> på mobilen."</string>
<string name="launch" msgid="4826921505917605463">"Öppna"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Av säkerhetsskäl går det inte att installera appar från okända källor på din surfplatta."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"TV:n är av säkerhetsskäl inställd på att blockera installationer av appar från okända källor."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Av säkerhetsskäl går det inte att installera appar från okända källor på din mobil."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratören tillåter inte installation av appar från okända källor."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratören tillåter inte installation av appar från okända källor"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Denna användare får inte installera okända appar"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Inställningar"</string>
<string name="manage_applications" msgid="4033876279091996596">"Hantera appar"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Appen hittades inte"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Appen fanns inte i listan över installerade appar."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ingen behörighet"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Den aktuella användaren har inte behörighet att utföra avinstallationen."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Fel"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Det gick inte att installera appen."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Avinstallera appen"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Avinstallera uppdateringen"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> är en del av följande app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Vill du avinstallera appen för användaren <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Vill du ersätta den här appen med den version som var installerad när enheten var ny? All information tas bort."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Vill du ersätta den här appen med den version som var installerad när enheten var ny? All information tas bort. Detta påverkar alla som använder enheten, även dem med jobbprofiler."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Avinstallationer som pågår"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Avinstallationer som misslyckats"</string>
<string name="uninstalling" msgid="5556217435895938250">"Avinstallerar…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> avinstalleras …"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Avinstallationen har slutförts."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> har avinstallerats"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Det gick inte att avinstallera."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Det går inte att avinstallera eftersom paketet är en aktiv enhetsadministratör."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Paketet kan inte avinstalleras. Det används för att administrera enheten för <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Det gick inte att avinstallera <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Det går inte att avinstallera den aktiva appen för enhetsadministratör"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Det går inte att avinstallera den aktiva appen för enhetsadministratör för <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Den här appen är obligatorisk för vissa användare och profiler och har avinstallerats för andra"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Appen behövs i profilen och det går inte att avinstallera den"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Appen krävs av enhetsadministratören och kan därför inte avinstalleras."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Hantera enhetsadministratörer"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Hantera appar för enhetsadministratör"</string>
<string name="manage_users" msgid="3125018886835668847">"Hantera användare"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Det gick inte att avinstallera <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Ett problem uppstod när paketet analyserades."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Det krävs inga nya behörigheter för den här uppdateringen."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Vill du bevilja följande behörigheter? Då godkänner du åtkomst till:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Neka"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Mer information"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Neka ändå"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> av <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Tillåter du &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; att <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> har inaktiverats"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"alla har inaktiverats"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"inga har inaktiverats"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Tillåt"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Appar"</string>
<string name="app_permissions" msgid="3146758905824597178">"Appens behörigheter"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Åtgärder för att installera/avinstallera stöds inte på Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> har uppdaterats. Vill du ge <xliff:g id="APP_NAME_1">%1$s</xliff:g> åtkomst till följande?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Välj vad du vill ge <xliff:g id="APP_NAME">%1$s</xliff:g> åtkomst till"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> har uppdaterats. Välj vad du vill ge appen åtkomst till."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Välj vad du vill ge &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; åtkomst till"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; har uppdaterats. Välj vad du vill ge appen åtkomst till."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Avbryt"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Fortsätt"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Nya behörigheter"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Nuvarande behörighet"</string>
<string name="message_staging" msgid="6151794817691100003">"Provkör appen …"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Okänd"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Av säkerhetsskäl får okända appar från den här källan inte installeras av surfplattan."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Av säkerhetsskäl får okända appar från den här källan inte installeras av TV:n."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Av säkerhetsskäl får okända appar från den här källan inte installeras av mobilen."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Din mobil och personliga data är mer sårbara för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på mobilen och för dataförlust som kan uppstå vid användning av denna app."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Din surfplatta och personliga data är mer sårbara för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på surfplattan och för dataförlust som kan uppstå vid användning av denna app."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Din TV och personliga data är mer sårbara för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på TV:n och för dataförlust som kan uppstå vid användning av denna app."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Fortsätt"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Inställningar"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear-appar installeras/avinstalleras"</string>
</resources>
diff --git a/res/values-sw-television/strings.xml b/res/values-sw-television/strings.xml
index 5725add9..25fd6960 100644
--- a/res/values-sw-television/strings.xml
+++ b/res/values-sw-television/strings.xml
@@ -16,7 +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">"Kataa na usiulize tena"</string>
+ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Hapana 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>
diff --git a/res/values-sw-watch/strings.xml b/res/values-sw-watch/strings.xml
index accac4ed..30d68e54 100644
--- a/res/values-sw-watch/strings.xml
+++ b/res/values-sw-watch/strings.xml
@@ -16,7 +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="5828565432145544298">"Kataa, usiulize tena"</string>
+ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5828565432145544298">"Hapana, usiulize tena"</string>
<string name="current_permission_template" msgid="6691830243038105737">"<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="7042886929865431207">"Onyesha programu za mfumo"</string>
<string name="permission_summary_enforced_by_policy" msgid="9002523259681588936">"Haiwezi kubadilishwa"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 8e8630da..6e62283c 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Ghairi"</string>
<string name="unknown" msgid="4742479012767208045">"Haijulikani"</string>
<string name="installing" msgid="8613631001631998372">"inawekwa..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Inasakinisha <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Programu imewekwa."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Je, ungependa kuiweka programu hii? Itaweza:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Je, ungependa kuiweka programu hii? Haihitaji idhini ya kufikia kitu chochote."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Je, unataka kuweka sasisho la programu hii? Data yako iliyopo haitapotea. Haihitaji idhini yoyote maalum ya kufikia."</string>
<string name="install_failed" msgid="6579998651498970899">"Programu haikusakinishwa."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Kifurushi kimezuiwa kisisakinishwe."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Kifurushi kinakinzana na kifurushi kilichopo chenye jina linalofanana."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Programu hii haioani na kompyuta yako kibao."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Programu haikusakinishwa kwa sababu haiafikiani na kifurushi kingine kilichopo."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Programu haikusakinishwa kwa sababu haioani na kompyuta kibao yako."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Programu hii haioani na runinga yako."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Programu hii haioani na simu yako."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Inaonekana kifaa kimeharibika"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Programu haikusakinishwa kwa sababu haioani na simu yako."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Programu haikusakinishwa kwa sababu inaonekana kuwa kifurushi si sahihi."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> haikuweza kusakinishwa kwenye kompyuta yako kibao."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> haikuweza kusakinishwa kwenye runinga yako."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> haikuweza kusakinishwa kwenye simu yako."</string>
<string name="launch" msgid="4826921505917605463">"Fungua"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Kwa ajili ya usalama, kompyuta yako kibao imepangwa kuzuia usakinishaji wa programu zilizopatikana kutoka kwa vyanzo visivyojulikana."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Kwa usalama, runinga yako imesanidiwa izuie usakinishaji wa programu zinazopatikana kutoka vyanzo visivyojulikana."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Kwa ajili ya usalama, simu yako inaweza kuzuia uwekaji wa programu zinazotoka kwenye vyanzo visivyojulikana."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Msimamizi wako haruhusu usakinishaji wa programu zilizopatikana kutoka vyanzo visivyojulikana."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Msimamizi wako haruhusu usakinishaji wa programu zinazopatikana kutoka vyanzo visivyojulikana"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Mtumiaji huyu hana idhini ya kusakinisha programu ambazo hazijulikani"</string>
<string name="ok" msgid="3468756155452870475">"Sawa"</string>
<string name="settings" msgid="6743583734099755409">"Mipangilio"</string>
<string name="manage_applications" msgid="4033876279091996596">"Dhibiti programu"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Sawa"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Programu haikupatikana"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Programu haikupatikana katika orodha ya programu zilizosakinishwa."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Hairuhusiwi"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Mtumiaji wa sasa hana ruhusa ya kuondoa kipengee hiki."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Hitilafu"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Imeshindwa kuondoa programu."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Sanidua programu"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Sanidua kisasisho"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> ni sehemu ya programu ifuatayo:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Je, unataka kuondoa programu hii kwa mtumiaji <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Ungependa kubadilisha programu hii na toleo la kiwanda? Data yote itaondolewa."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Ungependa kubadilisha programu hii na toleo la kiwanda? Data yote itaondolewa. Hatua hii itaathiri watumiaji wote wa kifaa hiki, ikiwa ni pamoja na wale walio na wasifu za kazini."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Mara ambazo programu inaondolewa sasa"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mara ambazo programu haikuondolewa"</string>
<string name="uninstalling" msgid="5556217435895938250">"Inasanidua..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Inaondoa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Imesaniduliwa."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Imeondoa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Kusanidua hakukufaulu."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Furushi hili haliwezi kusaniduliwa kwa sababu ni kidhibiti kinachosimamia kifaa."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Haiwezi kuondoa kwa sababu kifurushi hiki ni kisimamizi cha kifaa kinachotumika kwa ajili ya mtumiaji <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Imeshindwa kuondoa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Imeshindwa kuondoa programu inayotumika ya msimamizi wa kifaa"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Imeshindwa kuondoa programu inayotumika ya msimamizi wa kifaa cha <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Baadhi ya wasifu au watumiaji wanahitaji programu, kwa hivyo haijaondolewa kwa wengine"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Programu hii inahitajika kwa wasifu wako kwa hivyo haiwezi kuondolewa."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Programu hii inahitajika na msimamizi wako wa kifaa na haiwezi kuondolewa."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Simamia vidhibiti vya kifaa"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Dhibiti programu za msimamizi wa kifaa"</string>
<string name="manage_users" msgid="3125018886835668847">"Dhibiti watumiaji"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> haingeweza kusaniduliwa."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Kulikuwa na tatizo la kuchanganua furushi."</string>
@@ -83,14 +91,18 @@
<string name="devicePerms" msgid="6733560207731294504">"Kufikia Kifaa"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Sasisho hili halihitaji vibali vipya."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Je, unataka kupeana idhini zifuatazo? Itakuwa na ufikiaji kwa:"</string>
- <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Kataa"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Hapana"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Maelezo zaidi"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"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="7332275268559121742">"Ungependa kuruhusu &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
- <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Ruhusu"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> zimezimwa"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"zimezimwa zote"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"hakuna zilizozimwa"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Ndiyo"</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="1089938738199748687">"Usiniulize tena"</string>
+ <string name="never_ask_again" msgid="1089938738199748687">"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">
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Huduma ya Android Wear haiwezi kutekeleza vitendo vya Kusakinisha au Kuondoa vipengee."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> imesasishwa. Ungependa kuruhusu <xliff:g id="APP_NAME_1">%1$s</xliff:g> ifikie vipengee vifuatavyo?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Chagua vipengee ambavyo unaruhusu <xliff:g id="APP_NAME">%1$s</xliff:g> ifikie"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> imesasishwa. Chagua vipengee unavyoruhusu programu hii ifikie."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Chagua vipengee ambavyo unaruhusu &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ifikie"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; imesasishwa. Chagua vipengee unavyoruhusu programu hii ifikie."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Ghairi"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Endelea"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Ruhusa mpya"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Ruhusa zilizopo"</string>
<string name="message_staging" msgid="6151794817691100003">"Inatayarisha programu..."</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Isiyojulikana"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Kwa sababu ya usalama wako, kompyuta yako kibao haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Kwa sababu ya usalama wako, TV yako haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Kwa sababu ya usalama wako, simu yako haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Data yako ya binafsi na ya simu yako inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibika kutokana na uharibifu wowote kwenye simu yako au kupotea kwa data kutokana na matumizi yake."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Data yako ya binafsi na ya kompyuta yako kibao inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibika kutokana na uharibifu wowote kwenye kompyuta yako kibao au kupotea kwa data kutokana na matumizi yake."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Data yako ya binafsi na ya televisheni yako inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibika kutokana na uharibifu wowote kwenye televisheni yako au kupotea kwa data kutokana na matumizi yake."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Endelea"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Mipangilio"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Inasakinisha/inaondoa programu za Android Wear"</string>
</resources>
diff --git a/res/values-ta-rIN-television/strings.xml b/res/values-ta-television/strings.xml
index 786bbe28..786bbe28 100644
--- a/res/values-ta-rIN-television/strings.xml
+++ b/res/values-ta-television/strings.xml
diff --git a/res/values-ta-rIN-watch/strings.xml b/res/values-ta-watch/strings.xml
index 23dab29d..23dab29d 100644
--- a/res/values-ta-rIN-watch/strings.xml
+++ b/res/values-ta-watch/strings.xml
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta/strings.xml
index eedbd18f..172f753c 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ரத்துசெய்"</string>
<string name="unknown" msgid="4742479012767208045">"அறியப்படாத"</string>
<string name="installing" msgid="8613631001631998372">"நிறுவுகிறது…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ஐ நிறுவுகிறது…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"உள்ளமைக்கப்பட்ட பயன்பாட்டில் புதுப்பிப்பை நிறுவ விரும்புகிறீர்களா? ஏற்கனவே உள்ள உங்கள் தரவை இழக்க மாட்டீர்கள். இதற்குத் தனிப்பட்ட அணுகல் எதுவும் தேவையில்லை."</string>
<string name="install_failed" msgid="6579998651498970899">"பயன்பாடு நிறுவப்படவில்லை."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"இந்தத் தொகுப்பு நிறுவுவதிலிருந்து தடுக்கப்பட்டது."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"இந்தத் தொகுப்பு அதே பெயரில் ஏற்கனவே உள்ள தொகுப்புடன் முரண்படுகிறது."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"உங்கள் டேப்லெட்டுடன் இந்தப் பயன்பாடு இணங்கவில்லை."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"தொகுப்பானது தற்போதுள்ள தொகுப்புடன் இணக்கமற்றதாக உள்ளதால், பயன்பாடு நிறுவப்படவில்லை."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"உங்கள் டேப்லெட்டுடன் இணக்கமற்றதாக உள்ளதால், பயன்பாடு நிறுவப்படவில்லை."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"உங்கள் டிவியுடன் இந்தப் பயன்பாடு இணங்கவில்லை."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"உங்கள் மொபைலுடன் இந்தப் பயன்பாடு இணங்கவில்லை."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"தொகுப்பு சிதைந்ததுபோல் தெரிகிறது."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"உங்கள் மொபைலுடன் இணக்கமற்றதாக உள்ளதால், பயன்பாடு நிறுவப்படவில்லை."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"தொகுப்பு தவறானது போல் உள்ளதால், பயன்பாடு நிறுவப்படவில்லை."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"அறியப்படாத மூலங்களிலிருந்து பெற்ற பயன்பாடுகளை நிறுவ, உங்கள் நிர்வாகி அனுமதிக்கவில்லை"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"அறியப்படாத பயன்பாடுகளை, இந்தப் பயனர் நிறுவ முடியாது"</string>
<string name="ok" msgid="3468756155452870475">"சரி"</string>
<string name="settings" msgid="6743583734099755409">"அமைப்பு"</string>
<string name="manage_applications" msgid="4033876279091996596">"பயன்பாடுகளை நிர்வகிக்கவும்"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"அனுமதிக்கப்படவில்லை"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"இதை நிறுவல் நீக்குவதற்கு, தற்போதைய பயனர் அனுமதிக்கப்படவில்லை."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"பிழை"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"பயன்பாட்டை நிறுவல் நீக்க முடியவில்லை."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> பயனருக்கான இந்தப் பயன்பாட்டை நிறுவல்நீக்க விரும்புகிறீர்களா?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ஆரம்பநிலைப் பதிப்பாக இந்தப் பயன்பாட்டை மாற்றியமைக்கவா? எல்லா தரவும் அகற்றப்படும்."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ஆரம்பநிலைப் பதிப்பாக இந்தப் பயன்பாட்டை மாற்றியமைக்கவா? எல்லா தரவும் அகற்றப்படும். பணிச் சுயவிவரங்களுடன் உள்ளவர்கள் உட்பட இந்தச் சாதனத்தின் எல்லா பயனர்களையும் இது பாதிக்கும்."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"இயக்கத்திலுள்ள நிறுவல் நீக்கங்கள்"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"தோல்வியடைந்த நிறுவல் நீக்கங்கள்"</string>
<string name="uninstalling" msgid="5556217435895938250">"நிறுவலை நீக்குகிறது…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ஐ நிறுவல் நீக்குகிறது…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"நிறுவல் நீக்குவது முடிந்தது."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> நிறுவல் நீக்கப்பட்டது"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ஐ நிறுவல் நீக்க முடியவில்லை."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"செயலில் உள்ள சாதன நிர்வாகிப் பயன்பாட்டை நிறுவல் நீக்க முடியாது"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g>க்கான செயலில் உள்ள சாதன நிர்வாகிப் பயன்பாட்டை நிறுவல் நீக்க முடியாது"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"இது சில பயனர்கள்/சுயவிவரங்களுக்குத் தேவைப்படுவதால், நிறுவல்நீக்க முடியாது, பிறருக்கு நிறுவல் நீக்கப்பட்டது"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"உங்கள் சுயவிவரத்திற்கு இந்தப் பயன்பாடு தேவைப்படுவதால், அதை நிறுவல்நீக்க முடியாது, பிறருக்கு நிறுவல் நீக்கப்பட்டது."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"சாதன நிர்வாகிக்கு இந்தப் பயன்பாடு தேவைப்படுவதால், நிறுவல்நீக்க முடியாது."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"சாதன நிர்வாகிகளை நிர்வகி"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"சாதன நிர்வாகிப் பயன்பாடுகளை நிர்வகி"</string>
<string name="manage_users" msgid="3125018886835668847">"பயனர்களை நிர்வகி"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> பயன்பாட்டை நிறுவல் நீக்க முடியாது."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"தொகுப்பைக் குறியீட்டு ஆய்வு செய்வதில் சிக்கல் ஏற்பட்டது."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"இந்தப் புதுப்பிப்பிற்குப் புதிய அனுமதிகள் எதுவும் தேவையில்லை."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"பின்வரும் அனுமதிகளை வழங்க விருப்பமா? அது இதற்கான அணுகலைப் பெறும்:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"நிராகரி"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"மேலும் தகவல்"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"பரவாயில்லை, நிராகரி"</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="7332275268559121742">"செயலைச் செய்ய <xliff:g id="ACTION">%2$s</xliff:g>, &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;ஐ அனுமதிக்கவா?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> முடக்கப்பட்டன"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"எல்லாம் முடக்கப்பட்டன"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"எதுவும் முடக்கப்படவில்லை"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"அனுமதி"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"பயன்பாடுகள்"</string>
<string name="app_permissions" msgid="3146758905824597178">"பயன்பாட்டு அனுமதிகள்"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear இல் நிறுவுதல்/நிறுவல் நீக்குதலுக்கு ஆதரவில்லை."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> புதுப்பிக்கப்பட்டது. பின்வருவனவற்றை அணுக <xliff:g id="APP_NAME_1">%1$s</xliff:g>ஐ அனுமதிக்கவா?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> என்ன அணுகலாம் என்பதைத் தேர்வுசெய்யவும்"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> புதுப்பிக்கப்பட்டது. இந்தப் பயன்பாடு என்ன அணுகலாம் என்பதைத் தேர்வுசெய்யவும்"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; எவற்றை அணுகலாம் என்பதைத் தேர்வுசெய்யவும்"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; புதுப்பிக்கப்பட்டது. இந்தப் பயன்பாடு எவற்றை அணுகலாம் என்பதைத் தேர்வுசெய்யவும்."</string>
<string name="review_button_cancel" msgid="957906817733578877">"ரத்துசெய்"</string>
<string name="review_button_continue" msgid="4809162078179371370">"தொடர்க"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"புதிய அனுமதிகள்"</string>
<string name="current_permissions_category" msgid="998210994450606094">"தற்போதைய அனுமதிகள்"</string>
<string name="message_staging" msgid="6151794817691100003">"பயன்பாடு தயாராகிறது…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"தெரியாதது"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து அறியப்படாத பயன்பாடுகளை உங்கள் டேப்லெட்டில் நிறுவ முடியாது."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து அறியப்படாத பயன்பாடுகளை உங்கள் டிவியில் நிறுவ முடியாது."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து அறியப்படாத பயன்பாடுகளை உங்கள் மொபைலில் நிறுவ முடியாது."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"அறியப்படாத பயன்பாடுகள், உங்கள் மொபைலையும் தனிப்பட்ட தரவையும் அதிகம் பாதிக்கக்கூடும். இந்தப் பயன்பாட்டை நிறுவுவதால், அவற்றைப் பயன்படுத்தும் போது உங்கள் மொபைலுக்கு ஏதேனும் சேதம் ஏற்பட்டாலோ அல்லது தரவை இழந்தாலோ, அதற்கு நீங்கள்தான் பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"அறியப்படாத பயன்பாடுகள், உங்கள் டேப்லெட்டையும் தனிப்பட்ட தரவையும் அதிகம் பாதிக்கக்கூடும். இந்தப் பயன்பாட்டை நிறுவுவதால், அவற்றைப் பயன்படுத்தும் போது உங்கள் டேப்லெட்டுக்கு ஏதேனும் சேதம் ஏற்பட்டாலோ அல்லது தரவை இழந்தாலோ, அதற்கு நீங்கள்தான் பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"அறியப்படாத பயன்பாடுகள், உங்கள் டிவியையும் தனிப்பட்ட தரவையும் அதிகம் பாதிக்கக்கூடும். இந்தப் பயன்பாட்டை நிறுவுவதால், அவற்றைப் பயன்படுத்தும் போது உங்கள் டிவிக்கு ஏதேனும் சேதம் ஏற்பட்டாலோ அல்லது தரவை இழந்தாலோ, அதற்கு நீங்கள்தான் பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"தொடர்க"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"அமைப்புகள்"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"வியர் ஆப்ஸை நிறுவுதல்/நிறுவல் நீக்குதல்"</string>
</resources>
diff --git a/res/values-te-rIN-television/strings.xml b/res/values-te-television/strings.xml
index 99dddd92..99dddd92 100644
--- a/res/values-te-rIN-television/strings.xml
+++ b/res/values-te-television/strings.xml
diff --git a/res/values-te-rIN-watch/strings.xml b/res/values-te-watch/strings.xml
index d97e9707..d97e9707 100644
--- a/res/values-te-rIN-watch/strings.xml
+++ b/res/values-te-watch/strings.xml
diff --git a/res/values-te-rIN/strings.xml b/res/values-te/strings.xml
index a0882dcf..e339a2ad 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"రద్దు చేయండి"</string>
<string name="unknown" msgid="4742479012767208045">"తెలియదు"</string>
<string name="installing" msgid="8613631001631998372">"ఇన్‌స్టాల్ చేస్తోంది…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ని ఇన్‌స్టాల్ చేస్తోంది…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"మీరు ఈ అంతర్నిర్మిత అనువర్తనానికి నవీకరణను ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా? మీ ప్రస్తుత డేటాను కోల్పోవడం సంభవించదు. దీనికి ఎటువంటి ప్రత్యేక ప్రాప్యత అవసరం లేదు."</string>
<string name="install_failed" msgid="6579998651498970899">"అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"ప్యాకేజీ ఇన్‌స్టాల్ కాకుండా బ్లాక్ చేయబడింది."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"ప్యాకేజీకి ఇప్పటికే అదే పేరుతో ఉన్న ప్యాకేజీతో వైరుధ్యం తలెత్తుతోంది."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"ఈ అనువర్తనం మీ టాబ్లెట్‌కు అనుకూలంగా లేదు."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ప్యాకేజీ ఇప్పటికే ఉన్న ప్యాకేజీకి వైరుధ్యంగా ఉన్నందున అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"అనువర్తనం మీ టాబ్లెట్‌కు అనుకూలంగా లేని కారణంగా ఇన్‌స్టాల్ చేయబడలేదు."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"ఈ అనువర్తనం మీ టీవీకి అనుకూలంగా లేదు."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"ఈ అనువర్తనం మీ ఫోన్‌కు అనుకూలంగా లేదు."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ప్యాకేజీ పాడయినట్లుగా కనిపిస్తోంది."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"అనువర్తనం మీ ఫోన్‌కు అనుకూలంగా లేని కారణంగా ఇన్‌స్టాల్ చేయబడలేదు."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ప్యాకేజీ చెల్లుబాటు కాని విధంగా ఉన్నందున అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"మీ నిర్వాహకులు తెలియని మూలాల నుండి పొందిన అనువర్తనాల ఇన్‌స్టాలేషన్‌ను అనుమతించరు"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"తెలియని అనువర్తనాలను ఈ వినియోగదారు ఇన్‌స్టాల్ చేయలేరు"</string>
<string name="ok" msgid="3468756155452870475">"సరే"</string>
<string name="settings" msgid="6743583734099755409">"సెట్టింగ్‌లు"</string>
<string name="manage_applications" msgid="4033876279091996596">"అనువర్తనాలను నిర్వహించండి"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"అనుమతించబడలేదు"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ప్రస్తుత వినియోగదారు ఈ అన్ఇన్‌స్టాలేషన్ చేసేందుకు అనుమతి లేదు."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"లోపం"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"అనువర్తనాన్ని అన్ఇన్‌స్టాల్ చేయడం సాధ్యపడదు."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"మీరు వినియోగదారు <xliff:g id="USERNAME">%1$s</xliff:g> కోసం ఈ అనువర్తనాన్ని అన్‌ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"ఈ అనువర్తనాన్ని ఫ్యాక్టరీ సంస్కరణతో భర్తీ చేయాలా? మొత్తం డేటా తీసివేయబడుతుంది."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"ఈ అనువర్తనాన్ని ఫ్యాక్టరీ సంస్కరణతో భర్తీ చేయాలా? మొత్తం డేటా తీసివేయబడుతుంది. దీని ప్రభావం కార్యాలయ ప్రొఫైల్‌లు కలిగి ఉన్నవారితో సహా ఈ పరికర వినియోగదారులందరిపై ఉంటుంది."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"అమల్లో ఉన్న అన్‌ఇన్‌స్టాల్‌లు"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"విఫలమైన అన్‌ఇన్‌స్టాల్‌లు"</string>
<string name="uninstalling" msgid="5556217435895938250">"అన్‌ఇన్‌స్టాల్ చేస్తోంది…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ని అన్ఇన్‌స్టాల్ చేస్తోంది…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"అన్‌ఇన్‌స్టాల్ చేయడం ముగిసింది."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"అన్ఇన్‌స్టాల్ చేసిన <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> అన్ఇన్‌స్టాల్ చేయడంలో విఫలమైంది."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"సక్రియ పరికర నిర్వాహక అనువర్తనాన్ని అన్ఇన్‌స్టాల్ చేయడం సాధ్యపడదు"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> కోసం సక్రియ పరికర నిర్వాహక అనువర్తనాన్ని అన్ఇన్‌స్టాల్ చేయడం సాధ్యపడదు"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"ఈ అనువర్తనం కొందరు వినియోగదారులకు లేదా కొన్ని ప్రొఫైల్‌లకు అవసరం, ఇతరులకు అన్‌ఇన్‌స్టాల్ చేయబడింది"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"మీ ప్రొఫైల్ కోసం ఈ అనువర్తనం అవసరం మరియు దీన్ని అన్ఇన్‌స్టాల్ చేయలేరు."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"మీ పరికర నిర్వాహకుడికి ఈ అనువర్తనం అవసరం, అందువల్ల దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం కుదరదు."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"పరికర నిర్వాహకులను నిర్వహించండి"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"పరికర నిర్వాహక అనువర్తనాలను నిర్వహించు"</string>
<string name="manage_users" msgid="3125018886835668847">"వినియోగదారులను నిర్వహించు"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"ప్యాకేజీని అన్వయించడంలో సమస్య ఏర్పడింది."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"ఈ నవీకరణకు కొత్త అనుమతులు అవసరం లేదు."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"మీరు క్రింది అనుమతులను మంజూరు చేయాలనుకుంటున్నారా? ఇది వీటికి ప్రాప్యత పొందుతుంది:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"తిరస్కరించు"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"మరింత సమాచారం"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ఏదేమైనా నిరాకరించు"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;ని <xliff:g id="ACTION">%2$s</xliff:g> అనుమతించాలా?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> నిలిపివేయబడ్డాయి"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"అన్నీ నిలిపివేయబడ్డాయి"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ఏవీ నిలిపివేయబడలేదు"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"అనుమతించు"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"అనువర్తనాలు"</string>
<string name="app_permissions" msgid="3146758905824597178">"అనువర్తన అనుమతులు"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android వేర్"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wearలో ఇన్‌స్టాల్/అన్ఇన్‌స్టాల్ చర్యలకు మద్దతు లేదు."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> నవీకరించబడింది. క్రింది వాటిని ప్రాప్యత చేయడానికి <xliff:g id="APP_NAME_1">%1$s</xliff:g>ని అనుమతించాలా?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ప్రాప్యత చేయడానికి వేటిని అనుమతించాలో ఎంచుకోండి"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> నవీకరించబడింది. ఈ అనువర్తనం ప్రాప్యత చేయడానికి వేటిని అనుమతించాలో ఎంచుకోండి."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ప్రాప్యత చేయడానికి అనుమతించాల్సిన వాటిని ఎంచుకోండి"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; నవీకరించబడింది. ఈ అనువర్తనం ప్రాప్యత చేయడానికి అనుమతించాల్సిన వాటిని ఎంచుకోండి."</string>
<string name="review_button_cancel" msgid="957906817733578877">"రద్దు చేయి"</string>
<string name="review_button_continue" msgid="4809162078179371370">"కొనసాగించు"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"కొత్త అనుమతులు"</string>
<string name="current_permissions_category" msgid="998210994450606094">"ప్రస్తుత అనుమతులు"</string>
<string name="message_staging" msgid="6151794817691100003">"అనువర్తనాన్ని అందిస్తోంది…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"తెలియదు"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"మీకు భద్రతను అందించడం కోసం, ఈ మూలం నుండి తెలియని అనువర్తనాలను ఇన్‌స్టాల్ చేయడానికి మీ టాబ్లెట్ అనుమతించబడదు."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"మీకు భద్రతను అందించడం కోసం, ఈ మూలం నుండి తెలియని అనువర్తనాలను ఇన్‌స్టాల్ చేయడానికి మీ TV అనుమతించబడదు."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"మీకు భద్రతను అందించడం కోసం, ఈ మూలం నుండి తెలియని అనువర్తనాలను ఇన్‌స్టాల్ చేయడానికి మీ ఫోన్ అనుమతించబడదు."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"మీ ఫోన్ మరియు వ్యక్తిగత డేటా తెలియని మూలాల్లోని అనువర్తనాల ద్వారా దాడికి గురి కావడానికి ఎక్కువ అవకాశం ఉంటుంది. ఈ అనువర్తనాన్ని ఇన్‌స్టాల్ చేయడం ద్వారా, ఈ అనువర్తనాన్ని ఉపయోగించడం వలన మీ ఫోన్‌కు సంభవించే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకి బాధ్యత వహించడానికి మీరు అంగీకరిస్తున్నారు."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"మీ టాబ్లెట్ మరియు వ్యక్తిగత డేటా తెలియని మూలాల్లోని అనువర్తనాల ద్వారా దాడికి గురి కావడానికి ఎక్కువ అవకాశం ఉంటుంది. ఈ అనువర్తనాన్ని ఇన్‌స్టాల్ చేయడం ద్వారా, ఈ అనువర్తనాన్ని ఉపయోగించడం ద్వారా మీ టాబ్లెట్‌కు సంభవించే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకి బాధ్యత వహించడానికి మీరు అంగీకరిస్తున్నారు."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"మీ TV మరియు వ్యక్తిగత డేటా తెలియని మూలాల్లోని అనువర్తనాల ద్వారా దాడికి గురి కావడానికి ఎక్కువ అవకాశం ఉంటుంది. ఈ అనువర్తనాన్ని ఇన్‌స్టాల్ చేయడం ద్వారా, ఈ అనువర్తనాన్ని ఉపయోగించడం ద్వారా మీ TVకి సంభవించే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకి బాధ్యత వహించడానికి మీరు అంగీకరిస్తున్నారు."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"కొనసాగించు"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"సెట్టింగ్‌లు"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"వేర్ ఆప్‌లను ఇన్‌స్టాల్/అన్‌ఇన్‌స్టాల్ చేస్తోంది"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a65415e7..831d4080 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"ยกเลิก"</string>
<string name="unknown" msgid="4742479012767208045">"ไม่ทราบ"</string>
<string name="installing" msgid="8613631001631998372">"กำลังติดตั้ง..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"กำลังติดตั้ง <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"คุณต้องการติดตั้งการอัปเดตไปยังแอปพลิเคชันในตัวนี้หรือไม่ ข้อมูลที่มีอยู่ของคุณจะไม่สูญหาย การอัปเดตนี้ไม่จำเป็นต้องใช้การเข้าถึงใดๆ เป็นพิเศษ"</string>
<string name="install_failed" msgid="6579998651498970899">"ไม่ได้ติดตั้งแอปพลิเคชัน"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"มีการบล็อกแพ็กเกจไม่ให้ติดตั้ง"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"แพ็กเกจขัดแย้งกับแพ็กเกจที่มีอยู่โดยมีชื่อเดียวกัน"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"แอปนี้ไม่สามารถใช้งานกับแท็บเล็ตของคุณ"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ไม่ได้ติดตั้งแอปเพราะแพ็กเกจขัดแย้งกับแพ็กเกจที่มีอยู่"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"ไม่ได้ติดตั้งแอปเพราะแอปใช้งานไม่ได้กับแท็บเล็ตของคุณ"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"แอปนี้ไม่สามารถใช้งานกับทีวีของคุณ"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"แอปนี้ไม่สามารถใช้งานกับโทรศัพท์ของคุณ"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"แพ็กเกจเกิดความเสียหาย"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"ไม่ได้ติดตั้งแอปเพราะแอปใช้งานไม่ได้กับโทรศัพท์ของคุณ"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ไม่ได้ติดตั้งแอปเพราะดูเหมือนว่าแพ็กเกจจะไม่ถูกต้อง"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"ผู้ดูแลระบบของคุณไม่อนุญาตให้ติดตั้งแอปที่ได้มาจากแหล่งที่มาที่ไม่รู้จัก"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"ผู้ใช้รายนี้ไม่สามารถติดตั้งแอปที่ไม่รู้จัก"</string>
<string name="ok" msgid="3468756155452870475">"ตกลง"</string>
<string name="settings" msgid="6743583734099755409">"การตั้งค่า"</string>
<string name="manage_applications" msgid="4033876279091996596">"จัดการแอปพลิเคชัน"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"ไม่ได้รับอนุญาต"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"ผู้ใช้ปัจจุบันไม่ได้รับอนุญาตให้ทำการถอนการติดตั้งนี้"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"พบข้อผิดพลาด"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ไม่สามารถถอนการติดตั้งแอป"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"คุณต้องการถอนการติดตั้งแอปนี้สำหรับผู้ใช้ <xliff:g id="USERNAME">%1$s</xliff:g> ไหม"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"แทนที่แอปนี้ด้วยเวอร์ชันเริ่มต้นไหม ระบบจะนำข้อมูลทั้งหมดออก"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"แทนที่แอปนี้ด้วยเวอร์ชันเริ่มต้นไหม ระบบจะนำข้อมูลทั้งหมดออก วิธีนี้ส่งผลต่อผู้ใช้ทุกคนที่ใช้อุปกรณ์เครื่องนี้ รวมทั้งผู้ที่มีโปรไฟล์งาน"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"กำลังเรียกใช้การถอนการติดตั้ง"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"การถอนการติดตั้งที่ล้มเหลว"</string>
<string name="uninstalling" msgid="5556217435895938250">"กำลังถอนการติดตั้ง..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"กำลังถอนการติดตั้ง <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"ถอนการติดตั้งเสร็จแล้ว"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"ถอนการติดตั้ง <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> แล้ว"</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_failed_app" msgid="945277834056527022">"การถอนการติดตั้ง <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ไม่สำเร็จ"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"ไม่สามารถถอนการติดตั้งแอปผู้ดูแลระบบอุปกรณ์ที่มีการใช้งาน"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"ไม่สามารถถอนการติดตั้งแอปผู้ดูแลระบบอุปกรณ์ที่มีการใช้งานสำหรับ <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"แอปนี้จำเป็นสำหรับผู้ใช้หรือโปรไฟล์บางส่วน และถอนการติดตั้งไปแล้วสำหรับส่วนอื่น"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"แอปนี้จำเป็นสำหรับโปรไฟล์ของคุณและไม่สามารถถอนการติดตั้งได้"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ผู้ดูแลระบบอุปกรณ์กำหนดให้ใช้แอปนี้ และไม่สามารถถอนการติดตั้งได้"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"จัดการโปรแกรมควบคุมอุปกรณ์"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"จัดการแอปผู้ดูแลระบบอุปกรณ์"</string>
<string name="manage_users" msgid="3125018886835668847">"จัดการผู้ใช้"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"ไม่สามารถถอดการติดตั้ง <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"พบปัญหาในการแยกวิเคราะห์แพ็กเกจ"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"การอัปเดตนี้ไม่จำเป็นต้องมีการอนุญาตใหม่"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"คุณต้องการให้อนุญาตรายการต่อไปนี้หรือไม่ ระบบจะให้สิทธิ์การเข้าถึงแก่"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"ปฏิเสธ"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"ข้อมูลเพิ่มเติม"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"ปฏิเสธอยู่ต่อไป"</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="7332275268559121742">"อนุญาตให้ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>ไหม"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"ปิดใช้ <xliff:g id="COUNT">%1$d</xliff:g> สิทธิ์"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"ปิดใช้สิทธิ์ทั้งหมด"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"ไม่มีการปิดใช้สิทธิ์"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"อนุญาต"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"แอป"</string>
<string name="app_permissions" msgid="3146758905824597178">"สิทธิ์ของแอป"</string>
@@ -106,7 +118,7 @@
<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="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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"ไม่สามารถติดตั้ง/ถอนการติดตั้งบน Wear"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"อัปเดต <xliff:g id="APP_NAME_0">%1$s</xliff:g> แล้ว อนุญาตให้ <xliff:g id="APP_NAME_1">%1$s</xliff:g> เข้าถึงข้อมูลต่อไปนี้ใช่ไหม"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"โปรดเลือกข้อมูลที่อนุญาตให้ <xliff:g id="APP_NAME">%1$s</xliff:g> เข้าถึง"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"อัปเดต <xliff:g id="APP_NAME">%1$s</xliff:g> แล้ว โปรดเลือกข้อมูลที่อนุญาตให้แอปนี้เข้าถึง"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"โปรดเลือกข้อมูลที่อนุญาตให้ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; เข้าถึง"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"อัปเดต &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; แล้ว โปรดเลือกข้อมูลที่อนุญาตให้แอปนี้เข้าถึง"</string>
<string name="review_button_cancel" msgid="957906817733578877">"ยกเลิก"</string>
<string name="review_button_continue" msgid="4809162078179371370">"ต่อไป"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"สิทธิ์ใหม่"</string>
<string name="current_permissions_category" msgid="998210994450606094">"สิทธิ์ปัจจุบัน"</string>
<string name="message_staging" msgid="6151794817691100003">"กำลังปรับสภาพแวดล้อมของแอป…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"ไม่ทราบ"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในแท็บเล็ต"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในทีวี"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในโทรศัพท์"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"โทรศัพท์และข้อมูลส่วนบุคคลของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้เป็นการยอมรับว่าคุณจะรับผิดชอบความเสียหายต่อเครื่องโทรศัพท์หรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"แท็บเล็ตและข้อมูลส่วนบุคคลของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้เป็นการยอมรับว่าคุณจะรับผิดชอบความเสียหายต่อเครื่องแท็บเล็ตหรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"ทีวีและข้อมูลส่วนบุคคลของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้เป็นการยอมรับว่าคุณจะรับผิดชอบความเสียหายต่อเครื่องทีวีหรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"ต่อไป"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"การตั้งค่า"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"กำลังติดตั้ง/ถอนการติดตั้งแอป Wear"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c13dba8e..d6628b14 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Kanselahin"</string>
<string name="unknown" msgid="4742479012767208045">"Hindi Kilala"</string>
<string name="installing" msgid="8613631001631998372">"Nag-i-install…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Ini-install ang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Na-install ang app."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Nais mo bang i-install ang application na ito? Magkakaroon ito ng access sa:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Nais mo bang i-install ang application na ito? Hindi ito nangangailangan ng anumang espesyal na access."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Nais mo bang mag-install ng update sa built-in na application na ito? Hindi mawawala ang iyong umiiral na data. Hindi ito nangangailangan ng anumang espesyal na access."</string>
<string name="install_failed" msgid="6579998651498970899">"Hindi na-install ang app."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Na-block ang pag-install sa package."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Nagkakaproblema ang package sa isang dati nang package na kapareho nito ng pangalan."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Hindi compatible ang app na ito sa iyong tablet."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Hindi na-install ang app dahil nagkakaproblema ang package sa isang dati nang package."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Hindi na-install ang app dahil hindi tugma ang app sa iyong tablet."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Hindi compatible ang app na ito sa iyong TV."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Hindi compatible ang app na ito sa iyong telepono."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Lumilitaw na corrupt ang package."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Hindi na-install ang app dahil hindi tugma ang app sa iyong telepono."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Hindi na-install ang app dahil lumalabas na di-wasto ang package."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Hindi ma-install ang <xliff:g id="APP_NAME">%1$s</xliff:g> sa iyong tablet."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay hindi ma-install sa iyong TV."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Hindi ma-install ang <xliff:g id="APP_NAME">%1$s</xliff:g> sa iyong telepono."</string>
<string name="launch" msgid="4826921505917605463">"Buksan"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Pra sa seguridad, nka-set ang tablet mong i-block ang pag-install ng apps mula sa di-klalang source."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Para sa seguridad, nakatakda ang iyong TV sa i-block ang pag-i-install ng mga app na nakuha mula sa mga hindi alam na pinagmulan."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Pra sa seguridd, naka-set ang phone mong i-block ang pag-install ng apps mula sa di-kilalang source."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Hindi pinapayagan ng iyong administrator ang pag-install ng mga app na nakuha mula sa mga hindi alam na pinagmulan."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Hindi pinapayagan ng iyong admin ang pag-install ng mga app na nakuha mula sa mga hindi kilalang pinagmulan"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Hindi maaaring mag-install ang user na ito ng mga hindi kilalang app"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Mga Setting"</string>
<string name="manage_applications" msgid="4033876279091996596">"Pamahalaan ang apps"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Hindi makita ang app"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Hindi makita ang app sa listahan ng naka-install na apps."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Hindi pinapayagan"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Hindi pinapayagan ang kasalukuyang user na gawin ang pag-uninstall na ito."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Error"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Hindi ma-uninstall ang app."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"I-uninstall ang app"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"I-uninstall ang update"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"Bahagi ang <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> ng sumusunod na app:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Gusto mo bang i-uninstall ang app na ito para sa user na si <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Gusto mo bang palitan ang app na ito ng factory na bersyon? Maaalis ang lahat ng data."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Gusto mo bang palitan ang app na ito ng factory na bersyon? Maaalis ang lahat ng data. Nakakaapekto ito sa lahat ng user ng device na ito, kasama ang mga may profile sa trabaho."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Mga nasa proseso ng pag-uninstall"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Mga hindi na-uninstall"</string>
<string name="uninstalling" msgid="5556217435895938250">"Ina-uninstall…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Ina-uninstall ang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Natapos ang pag-uninstall."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Na-uninstall ang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Di-matagumpay ang pag-uninstall."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Hindi ma-uninstall dahil aktibong administrator ng device ang package na ito."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Aktibong administrator ng device para sa user <xliff:g id="USERNAME">%1$s</xliff:g> itong package, hindi ma-uninstall."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Hindi na-uninstall ang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Hindi ma-uninstall ang aktibong app ng admin ng device"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Hindi ma-uninstall ang aktibong app ng admin ng device para kay <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ang app na ito ay kailangan ng ilang user o profile at na-uninstall na ito sa iba pa"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ang app na ito ay kailangan para sa iyong profile at hindi maaaring i-uninstall."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Kinakailangan app na ito ng administrator ng device mo at di maaari i-uninstall."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Pamahalaan ang mga administrator ng device"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Pamahalaan ang mga app ng admin ng device"</string>
<string name="manage_users" msgid="3125018886835668847">"Pamahalaan ang mga user"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Hindi ma-install ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Nagkaroon ng problema sa pag-parse sa package."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Walang kinakailangang mga bagong pagpapahintulot ang update na ito."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Gusto mo bang ibigay ang mga sumusunod na pahintulot? Magkakaroon ito ng access sa:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Tanggihan"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Higit pang impormasyon"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Tanggihan pa rin"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ng <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Payagan ang &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; na <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> ang naka-disable"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"naka-disable lahat"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"walang naka-disable"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Payagan"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Mga App"</string>
<string name="app_permissions" msgid="3146758905824597178">"Mga pahintulot sa app"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Ang mga pagkilos na I-install/I-uninstall ay hindi sinusuportahan sa Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Na-update na ang <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Papayagan ang <xliff:g id="APP_NAME_1">%1$s</xliff:g> na i-access ang sumusunod?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Piliin kung ano ang papayagang i-access ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Na-update na ang <xliff:g id="APP_NAME">%1$s</xliff:g>. Piliin kung ano ang papayagang i-access ng app na ito."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Piliin kung ano ang papayagang i-access ng &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Na-update na ang &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Piliin kung ano ang papayagang i-access ng app na ito."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Kanselahin"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Magpatuloy"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Mga bagong pahintulot"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Mga kasalukuyang pahintulot"</string>
<string name="message_staging" msgid="6151794817691100003">"Inihahanda ang app…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Hindi Alam"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Para sa iyong seguridad, hindi pinapayagan ang tablet mo na mag-install ng mga hindi alam na app mula sa pinagmulang ito."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Para sa iyong seguridad, hindi pinapayagan ang TV mo na mag-install ng mga hindi alam na app mula sa pinagmulang ito."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Para sa iyong seguridad, hindi pinapayagan ang telepono mo na mag-install ng mga hindi alam na app mula sa pinagmulang ito."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Mas nanganganib ang iyong telepono at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon ka na ikaw ang responsable sa anumang pinsala sa telepono mo o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Mas nanganganib ang iyong tablet at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon ka na ikaw ang responsable sa anumang pinsala sa tablet mo o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Mas nanganganib ang iyong TV at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon ka na ikaw ang responsable sa anumang pinsala sa TV mo o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Magpatuloy"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Mga Setting"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Ini-install/ina-uninstall ang wear apps"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 382d6015..92f42321 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"İptal"</string>
<string name="unknown" msgid="4742479012767208045">"Bilinmiyor"</string>
<string name="installing" msgid="8613631001631998372">"Yükleniyor…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> yükleniyor…"</string>
<string name="install_done" msgid="3682715442154357097">"Uygulama yüklendi."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Bu uygulamayı yüklemek istiyor musunuz? Uygulama şunlara erişebilecektir:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Bu uygulamayı yüklemek istiyor musunuz? Herhangi bir özel erişim gerektirmez."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Bu yerleşik uygulamaya ait bir güncellemeyi yüklemek istiyor musunuz? Mevcut verileriniz kaybolacaktır. Herhangi bir özel erişim gerektirmez."</string>
<string name="install_failed" msgid="6579998651498970899">"Uygulama yüklenmedi."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paketin yüklemesi engellendi."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Paket, aynı ada sahip başka bir paketle çakışıyor."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Bu uygulama tabletinizle uyumlu değil."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Paket, mevcut bir paketle çakıştığından uygulama yüklenemedi."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Tabletinizle uyumlu olmadığından uygulama yüklenemedi."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Bu uygulama TV\'niz ile uyumlu değil."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Bu uygulama telefonunuzla uyumlu değil."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paket bozuk görünüyor."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Telefonunuzla uyumlu olmadığından uygulama yüklenemedi."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Paket geçersiz göründüğünden uygulama yüklenemedi."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu tabletinize yüklenemedi."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> TV\'nize yüklenemedi."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu telefonunuza yüklenemedi."</string>
<string name="launch" msgid="4826921505917605463">"Aç"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Güvenlik amacıyla, tabletiniz bilinmeyen kaynaklardan alınan uygulamaların yüklenmesini engelleyecek şekilde ayarlandı."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Güvenlik amacıyla, TV\'niz bilinmeyen kaynaklardan alınan uygulamaların yüklenmesini engellemeye ayarlıdır."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Güvenlik amacıyla, telefonunuz bilinmeyen kaynaklardan alınan uygulamaların yüklenmesini engelleyecek şekilde ayarlandı."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Yöneticiniz, bilinmeyen kaynaklardan edinilen uygulamaların yüklenmesine izin vermiyor."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Yöneticiniz, bilinmeyen kaynaklardan edinilen uygulamaların yüklenmesine izin vermiyor"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Bilinmeyen uygulamalar bu kullanıcı tarafından yüklenemez"</string>
<string name="ok" msgid="3468756155452870475">"Tamam"</string>
<string name="settings" msgid="6743583734099755409">"Ayarlar"</string>
<string name="manage_applications" msgid="4033876279091996596">"Uygulamaları yönet"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"Tamam"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Uygulama bulunamadı"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Uygulama, yüklü uygulamalar listesinde bulunamadı."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"İzin verilmiyor"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Geçerli kullanıcının bu yüklemeyi kaldırma izni yok."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Hata"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Uygulamanın yüklemesi kaldırılamadı."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Uygulamayı kaldır"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Güncelleme kaldırılsın mı?"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g>, şu uygulamanın bir parçasıdır:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"<xliff:g id="USERNAME">%1$s</xliff:g> adlı kullanıcı için bu uygulamanın yüklemesini kaldırmak istiyor musunuz?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Bu uygulamayı fabrika sürümüyle değiştirmek istiyor musunuz? Tüm veriler silinecektir."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Bu uygulamayı fabrika sürümüyle değiştirmek istiyor musunuz? Tüm veriler silinecektir. Bu, çalışma profilleri olan kullanıcılar da dahil olmak üzere cihazı kullanan tüm kullanıcıları etkiler."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Devam eden yükleme kaldırma işlemleri"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Başarısız yükleme kaldırma işlemleri"</string>
<string name="uninstalling" msgid="5556217435895938250">"Kaldırılıyor…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> uygulamasının yüklemesi kaldırılıyor…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Kaldırma işlemi tamamlandı."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> uygulamasının yüklemesi kaldırıldı"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Yükleme kaldırılamadı."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Bu paket, etkin bir cihaz yöneticisi olduğundan yüklemesi kaldırılamıyor."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Bu paket <xliff:g id="USERNAME">%1$s</xliff:g> adlı kullanıcı için aktif bir cihaz yöneticisi olduğundan yüklemesi kaldırılamıyor."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> uygulamasının yüklemesi kaldırılamadı."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Etkin cihaz yönetimi uygulamasının yüklemesi kaldırılamıyor"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> adlı kullanıcı için etkin cihaz yönetimi uygulamasının yüklemesi kaldırılamıyor"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Bu uygulama bazı kullanıcılar veya profiller için gerekli ve diğerleri için uygulamanın yüklemesi kaldırıldı"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Profiliniz için bu uygulama gerekli ve yüklemesi kaldırılamaz."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Bu uygulama, cihazınızın yöneticisi için gereklidir ve yüklemesi kaldırılamaz."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Cihaz yöneticilerini yönet"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Cihaz yönetimi uygulamalarını yönet"</string>
<string name="manage_users" msgid="3125018886835668847">"Kullanıcıları yönetme"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kaldırılamadı."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Paketin ayrıştırılmasında bir sorun oluştu."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Bu güncelleme yeni izin gerektirmiyor."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Aşağıdaki izinleri vermek istiyor musunuz? Şunlara erişebilecektir:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Reddet"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Daha fazla bilgi"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Yine de reddet"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; uygulamasına <xliff:g id="ACTION">%2$s</xliff:g> izni verilsin mi?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> izin devre dışı"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"tümü devre dışı"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"hiçbiri devre dışı değil"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"İzin ver"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Uygulamalar"</string>
<string name="app_permissions" msgid="3146758905824597178">"Uygulama izinleri"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Yükleme/Yüklemeyi Kaldırma işlemleri Wear\'da desteklenmiyor."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> güncellendi. <xliff:g id="APP_NAME_1">%1$s</xliff:g> uygulamasının aşağıdakilere erişmesine izin verilsin mi?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasının nelere erişmesine izin verileceğini seçin"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> güncellendi. Bu uygulamanın nelere erişmesine izin verileceğini seçin."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; uygulamasının nelere erişmesine izin vereceğinizi seçin"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; güncellendi. Bu uygulamanın nelere erişmesine izin verileceğini seçin."</string>
<string name="review_button_cancel" msgid="957906817733578877">"İptal"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Devam"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Yeni izinler"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Geçerli izinler"</string>
<string name="message_staging" msgid="6151794817691100003">"Uygulama hazırlanıyor…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Bilinmiyor"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Güvenlik nedeniyle tabletinizin bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Güvenlik nedeniyle TV\'nizin bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Güvenlik nedeniyle telefonunuzun bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefonunuz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı telefonunuzda oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Tabletiniz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı tabletinizde oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV\'niz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı TV\'nizde oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Devam"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Ayarlar"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear uyg. yükleme/yüklemesini kaldırma"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 58e3e61c..e8afdb83 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Скасувати"</string>
<string name="unknown" msgid="4742479012767208045">"Невідомо"</string>
<string name="installing" msgid="8613631001631998372">"Встановлення…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Установлюється <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Хочете встановити оновлення для цієї вбудованої програми? Ваші наявні дані не зникнуть. Спеціальний доступ не потрібен."</string>
<string name="install_failed" msgid="6579998651498970899">"Додаток не встановлено."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Встановлення пакета заблоковано."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Пакет із таким ім’ям уже встановлено."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Цей додаток несумісний із вашим планшетом."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Додаток не встановлено, оскільки пакет конфліктує з наявним пакетом."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Додаток не встановлено, оскільки він несумісний із вашим планшетом."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Цей додаток несумісний із вашим телевізором."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Цей додаток несумісний із вашим телефоном."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Імовірно, пакет пошкоджено."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Додаток не встановлено, оскільки він несумісний із вашим телефоном."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Додаток не встановлено, оскільки пакет недійсний."</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Ваш адміністратор заборонив установлювати додатки з невідомих джерел"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Цей користувач не може встановлювати невідомі додатки"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Налаштування"</string>
<string name="manage_applications" msgid="4033876279091996596">"Керувати програмами"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Програму не знайдено"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Програму не знайдено в списку встановлених програм."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Заборонено"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Поточний користувач не може видалити цей додаток."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Помилка"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Не вдалося видалити додаток."</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Видалити цей додаток для користувача <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Відновити заводську версію цього додатка? Усі дані буде видалено."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Відновити заводську версію цього додатка? Усі дані буде видалено. Це вплине на всіх користувачів цього пристрою, зокрема на користувачів із робочими профілями."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Активні видалення"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Невиконані видалення"</string>
<string name="uninstalling" msgid="5556217435895938250">"Видалення..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Видалення додатка <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Видалення завершено."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Додаток <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> видалено"</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_failed_app" msgid="945277834056527022">"Не вдалося видалити додаток <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Не вдається видалити активний додаток адміністратора пристрою"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Не вдається видалити активний додаток адміністратора пристрою для користувача <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Цей додаток потрібен для деяких користувачів чи профілів, але його було видалено для інших"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Цей додаток потрібен для вашого профілю, тому його не можна видалити."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Цей додаток не можна видалити – не дозволяє адміністратор пристрою."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Керувати адміністраторами пристрою"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Керувати додатками адміністратора пристрою"</string>
<string name="manage_users" msgid="3125018886835668847">"Керувати користувачами"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Програму <xliff:g id="APP_NAME">%1$s</xliff:g> неможливо видалити."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Під час аналізу пакету виникла помилка."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Для цього оновлення не потрібні нові дозволи."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Надати перелічені нижче дозволи? Програма отримає доступ до:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Відхилити"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Докладніше"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Усе одно відмовити"</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="7332275268559121742">"Дозволити додатку &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> скасовано"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"усі скасовано"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"нічого не скасовано"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дозволити"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Додатки"</string>
<string name="app_permissions" msgid="3146758905824597178">"Дозволи додатків"</string>
@@ -120,12 +132,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Дії \"установити\" або \"видалити\" не підтримуються на пристроях Android Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> оновлено. Надати додатку <xliff:g id="APP_NAME_1">%1$s</xliff:g> вказані нижче дозволи?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Виберіть, до чого <xliff:g id="APP_NAME">%1$s</xliff:g> матиме доступ"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> оновлено. Виберіть, до чого цей додаток матиме доступ."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Виберіть, до чого &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; матиме доступ"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; оновлено. Виберіть, до чого цей додаток матиме доступ."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Скасувати"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Продовжити"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Нові дозволи"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Поточні дозволи"</string>
<string name="message_staging" msgid="6151794817691100003">"Підготовка додатка…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Невідомо"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"З міркувань безпеки на вашому планшеті заборонено встановлювати невідомі додатки з цього джерела."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"З міркувань безпеки на вашому телевізорі заборонено встановлювати невідомі додатки з цього джерела."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"З міркувань безпеки на вашому телефоні заборонено встановлювати невідомі додатки з цього джерела."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Ваш телефон і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження телефона чи втрату даних унаслідок використання додатка."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Ваш планшет і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження планшета чи втрату даних унаслідок використання додатка."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Ваш телевізор і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження телевізора чи втрату даних унаслідок використання додатка."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Продовжити"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Налаштування"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Встановлення або видалення додатків Wear"</string>
</resources>
diff --git a/res/values-ur-rPK-television/strings.xml b/res/values-ur-television/strings.xml
index 27089dd0..27089dd0 100644
--- a/res/values-ur-rPK-television/strings.xml
+++ b/res/values-ur-television/strings.xml
diff --git a/res/values-ur-rPK-watch/strings.xml b/res/values-ur-watch/strings.xml
index 197ac849..197ac849 100644
--- a/res/values-ur-rPK-watch/strings.xml
+++ b/res/values-ur-watch/strings.xml
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur/strings.xml
index ead5fa1d..dbc0d8d6 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"منسوخ کریں"</string>
<string name="unknown" msgid="4742479012767208045">"نامعلوم"</string>
<string name="installing" msgid="8613631001631998372">"انسٹال کیا جا رہا ہے…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> کو انسٹال کیا جا رہا ہے…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"کیا آپ پہلے سے شامل اس ایپلیکیشن میں ایک اپ ڈیٹ انسٹال کرنا چاہتے ہیں؟ آپ کا موجودہ ڈیٹا ضائع نہیں ہوگا۔ اس کو کوئی خاص رسائی درکار نہیں۔"</string>
<string name="install_failed" msgid="6579998651498970899">"ایپ انسٹال نہیں ہوئی۔"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"پیکج کو انسٹال ہونے سے روک دیا گیا۔"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"پیکج ایک جیسے نام کی وجہ سے کسی اور پیکج سے متصادم ہے۔"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"یہ ایپ آپ کے ٹیبلیٹ کے ساتھ مطابقت پذیر نہیں ہے۔"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"ایپ کو پیکج کے بطور انسٹال نہیں کیا گیا کیونکہ پیکج ایک موجودہ پیکیج سے متصادم ہے۔"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"ایپ انسٹال نہیں ہوئی کیونکہ ایپ آپ کے ٹیبلیٹ کے ساتھ مطابقت پذیر نہیں ہے۔"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"‏یہ ایپ آپ کے TV کے ساتھ مطابقت پذیر نہیں ہے۔"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"یہ ایپ آپ کے فون کے ساتھ مطابقت پذیر نہیں ہے۔"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"پیکیج خراب معلوم ہوتا ہے۔"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"ایپ انسٹال نہیں ہوئی کیونکہ ایپ آپ کے فون کے ساتھ مطابقت پذیر نہیں ہے۔"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"ایپ انسٹال نہیں ہوئی کیونکہ پیکیج غلط معلوم ہوتا ہے۔"</string>
<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> کو آپ کے TV پر انسٹال نہیں کیا جا سکا۔"</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_text" product="tablet" msgid="7504186369474734767">"سیکیورٹی کے مدنظر، آپ کا ٹیبلٹ نامعلوم مآخذ سے حاصل شدہ ایپس کی انسٹالیشن مسدود کرنے پر سیٹ ہے۔"</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"‏سیکیورٹی کیلئے، آپ کا TV نامعلوم مآخذ سے حاصل کردہ ایپس کا انسٹالیشن مسدود کرنے پر سیٹ ہے۔"</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"سیکیورٹی کے مدنظر، آپ کا فون نامعلوم مآخذ سے حاصل شدہ ایپس کی انسٹالیشن مسدود کرنے پر سیٹ ہے۔"</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"آپ کا منتظم نامعلوم ذرائع سے اخذ کردہ ایپس کو انسٹال کرنے کی اجازت نہیں دیتا ہے۔"</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"آپ کا منتظم نامعلوم ذرائع سے اخذ کردہ ایپس کو انسٹال کرنے کی اجازت نہیں دیتا ہے"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"اس صارف کے ذریعے نامعلوم ایپس کو انسٹال نہیں کیا جا سکتا"</string>
<string name="ok" msgid="3468756155452870475">"ٹھیک ہے"</string>
<string name="settings" msgid="6743583734099755409">"ترتیبات"</string>
<string name="manage_applications" msgid="4033876279091996596">"ایپس کا نظم کریں"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"اجازت نہیں ہے"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"موجودہ صارف کو اس ان انسٹالیشن کو سرانجام دینے کی اجازت نہیں ہے۔"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"خرابی"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"ایپ ان انسٹال نہیں ہو سکی۔"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"کیا آپ اس ایپ کو صارف <xliff:g id="USERNAME">%1$s</xliff:g> کیلئے اَن انسٹال کرنا چاہتے ہیں؟"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"اس ایپ کو فیکٹری ورژن سے تبدیل کریں؟ تمام ڈیٹا ہٹا دیا جائے گا۔"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"اس ایپ کو فیکٹری ورژن سے تبدیل کریں؟ تمام ڈیٹا ہٹا دیا جائے گا۔ اس سے اس آلہ کے تمام صارف متاثر ہوں گے بشمول ان کے جن کے پاس دفتری پروفائلز ہیں۔"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"چل رہے اَن انسٹالس"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"ناکام اَن انسٹالس"</string>
<string name="uninstalling" msgid="5556217435895938250">"اَن انسٹال ہو رہا ہے…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ان انسٹال ہو رہی ہے…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"اَن انسٹال پورا ہوگیا۔"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ان انسٹال ہو گیا"</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_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> کو ان انسٹال کرنا کامیاب نہیں ہوا۔"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"فعال آلہ کے منتظم کی ایپ اَن انسٹال نہیں کر سکتے"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"فعال آلہ کے منتظم کی ایپ <xliff:g id="USERNAME">%1$s</xliff:g> کیلئے اَن انسٹال نہیں کر سکتے"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"یہ ایپ کچھ صارفین اور پروفائلوں کیلئے درکار ہے اور دیگر کیلئے ان انسٹال ہو گئی"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"یہ ایپ آپ کے پروفائل کیلئے درکار ہے اور یہ ان انسٹال نہیں ہو سکتی۔"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"یہ ایپ آپ کے آلہ کے منتظم کو درکار ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"آلہ کے منتظمین کا نظم کریں"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"آلہ کے منتظم کی ایپس کا نظم کریں"</string>
<string name="manage_users" msgid="3125018886835668847">"صارفین کا نظم کریں"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو اَن انسٹال نہیں کیا جا سکا۔"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"پیکیج کو پارس کرنے میں ایک دشواری پیش آگئی۔"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"اس اپ ڈیٹ کو کوئی نئی اجازتیں درکار نہیں۔"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"کیا آپ مندرجہ ذیل اجازتیں دینا چاہتے ہیں؟ اس سے اس تک رسائی حاصل ہو جائے گی:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"مسترد کریں"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"مزید معلومات"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"بہرصورت انکار کریں"</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="7332275268559121742">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; کو <xliff:g id="ACTION">%2$s</xliff:g> کی اجازت دیں؟"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> غیر فعال ہو گئیں"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"تمام غیر فعال ہو گئیں"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"کچھ بھی غیر فعال نہیں ہوا"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"اجازت دیں"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ایپس"</string>
<string name="app_permissions" msgid="3146758905824597178">"ایپ کی اجازتیں"</string>
@@ -99,7 +111,7 @@
</plurals>
<string name="old_sdk_deny_warning" msgid="3872277112584842615">"‏یہ ایپ Android کے ایک پرانے ورژن کیلئے ڈیزائن کی گئی تھی۔ اجازت دینے سے انکار کرنے پر ممکن ہے کہ وہ مزید ٹھیک سے کام نہ کرے۔"</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_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="menu_hide_system" msgid="7595471742649432977">"سسٹم چھپائیں"</string>
<string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> اجازتیں"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"‏\'کاروائیاں انسٹال/ان انسٹال کریں\' Wear پر تعاون یافتہ نہیں ہے۔"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> اپ ڈیٹ ہو گئی ہے۔ <xliff:g id="APP_NAME_1">%1$s</xliff:g> کو مندرجہ ذیل تک رسائی کی اجازت دیں؟"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"انتخاب کریں کہ <xliff:g id="APP_NAME">%1$s</xliff:g> کو کس تک رسائی کی اجازت دینی ہے"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> اپ ڈیٹ ہو گئی ہے۔ انتخاب کریں کہ اس ایپ کو کس تک رسائی کی اجازت دینی ہے۔"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"‏انتخاب کریں کہ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; کو کس تک رسائی کی اجازت دینی ہے"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; اپ ڈیٹ ہو گئی ہے۔ انتخاب کریں کہ اس ایپ کو کس تک رسائی کی اجازت دینی ہے۔"</string>
<string name="review_button_cancel" msgid="957906817733578877">"منسوخ کریں"</string>
<string name="review_button_continue" msgid="4809162078179371370">"جاری رکھیں"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"نئی اجازتیں"</string>
<string name="current_permissions_category" msgid="998210994450606094">"موجودہ اجازتیں"</string>
<string name="message_staging" msgid="6151794817691100003">"ایپ کی مرحلہ بندی ہو رہی ہے…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"نامعلوم"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"آپ کی سیکیوریٹی کیلئے، آپ کے ٹیبلیٹ کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"‏آپ کی سیکیوریٹی کیلئے، آپ کے TV کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"آپ کی سیکیوریٹی کیلئے، آپ کے فون کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"آپ کے فون اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے فون کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کیلئے خود ذمہ دار ہیں۔"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"آپ کے ٹیبلیٹ اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے ٹیبلیٹ کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کیلئے خود ذمہ دار ہیں۔"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"‏آپ کے TV اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے TV کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کیلئے خود ذمہ دار ہیں۔"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"جاری رکھیں"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"ترتیبات"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"‏wear ایپس کا انسٹال/ان انسٹال کرنا"</string>
</resources>
diff --git a/res/values-uz-rUZ-television/strings.xml b/res/values-uz-television/strings.xml
index b86c57ff..b86c57ff 100644
--- a/res/values-uz-rUZ-television/strings.xml
+++ b/res/values-uz-television/strings.xml
diff --git a/res/values-uz-rUZ-watch/strings.xml b/res/values-uz-watch/strings.xml
index 83f8da7f..83f8da7f 100644
--- a/res/values-uz-rUZ-watch/strings.xml
+++ b/res/values-uz-watch/strings.xml
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz/strings.xml
index 75a08eea..594f94a4 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz/strings.xml
@@ -16,7 +16,7 @@
<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">"Ilova paketini o‘rnatish vositasi"</string>
+ <string name="app_name" msgid="2738748390251381682">"Paket o‘rnatish vositasi"</string>
<string name="next" msgid="3057143178373252333">"Keyingisi"</string>
<string name="install" msgid="5896438203900042068">"O‘rnatish"</string>
<string name="done" msgid="3889387558374211719">"Tayyor"</string>
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Bekor qilish"</string>
<string name="unknown" msgid="4742479012767208045">"Noma’lum"</string>
<string name="installing" msgid="8613631001631998372">"O‘rnatilmoqda…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> o‘rnatilmoqda…"</string>
<string name="install_done" msgid="3682715442154357097">"Ilova o‘rnatildi."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Bu ilovani o‘rnatmoqchimisiz? U quyidagi ruxsatlarga ega:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Bu ilovani o‘rnatmoqchimisiz? U hech qanday maxsus ruxsat talab qilmaydi."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Ushbu tizim ilovasiga yangilanish o‘rnatilsinmi? Mavjud ma’lumotlaringiz o‘chib ketmaydi. U hech qanday maxsus ruxsat talab qilmaydi."</string>
<string name="install_failed" msgid="6579998651498970899">"Ilova o‘rnatilmadi."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Paket o‘rnatilishga qarshi bloklangan."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Ushbu paket bir xil nomdagi mavjud paket bilan zid."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ushbu ilova planshetingizga mos kelmaydi."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Paket mavjud paket bilan zid kelganligi uchun ilovani o‘rnatib bo‘lmadi."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Ilova planshetingizga mos kelmaganligi uchun uni o‘rnatib bo‘lmadi."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Bu ilova televizoringiz bilan mos emas."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ushbu ilova telefoningizga mos kelmaydi."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Paket buzilganga o‘xshaydi."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Ilova telefoningizga mos kelmaganligi uchun uni o‘rnatib bo‘lmadi."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Paket yaroqsiz bo‘lganligi uchun ilovani o‘rnatib bo‘lmadi."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"<xliff:g id="APP_NAME">%1$s</xliff:g> planshetingizga o‘rnatilmadi."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasini televizoringizga o‘rnatib bo‘lmadi."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> telefoningizga o‘rnatilmadi."</string>
<string name="launch" msgid="4826921505917605463">"Ochish"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Xavfsizlik yuzasidan planshetingizga begona manbalardan olingan ilovalarni o‘rnatish taqiqlangan."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Xavfsizlik yuzasidan, televizoringizga begona manbalardan olingan ilovalarni o‘rnatish taqiqlangan."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Xavfsizlik yuzasidan telefoningizga begona manbalardan olingan ilovalarni o‘rnatish taqiqlangan."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Administratoringiz begona manbalardan olingan ilovalarni o‘rnatishga ruxsat bermagan."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Administratoringiz begona manbalardan olingan ilovalarni o‘rnatishga ruxsat bermagan"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Notanish ilovalarni bu foydalanuvchi tomonidan o‘rnatib bo‘lmaydi"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Sozlamalar"</string>
<string name="manage_applications" msgid="4033876279091996596">"Ilovalarni boshqarish"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Ilova topilmadi"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Ilova o‘rnatilgan ilovalar ro‘yxatidan topilmadi."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Ruxsat berilmagan"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Joriy foydalanuvchiga bu o‘chirishni amalga oshirishi uchun ruxsat berilmagan."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Xato"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Ilovani o‘chirib bo‘lmadi"</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Ilovani o‘chirish"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Yangilanishni o‘chirish"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> quyidagi ilovaning bir qismidir:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Haqiqatdan ham <xliff:g id="USERNAME">%1$s</xliff:g> foydalanuvchi uchun ushbu ilovani olib tashlamoqchimisiz?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Bu ilova boshlang‘ich versiyasi bilan almashtirilsinmi? Barcha ma’lumotlar o‘chirib tashlanadi."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Bu ilova boshlang‘ich versiyasi bilan almashtirilsinmi? Barcha ma’lumotlar o‘chirib tashlanadi. Bu qurilmaning barcha foydalanuvchilariga, jumladan, ularning ishchi profillariga ham ta’sir qiladi."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Davom etayotganlar"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Amalga oshmaganlar"</string>
<string name="uninstalling" msgid="5556217435895938250">"O‘chirilmoqda…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> o‘chirilmoqda…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"O‘chirib tashlandi."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> o‘chirib tashlandi"</string>
<string name="uninstall_failed" msgid="631122574306299512">"O‘chirish muvaffaqiyatsizlikka uchradi."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"O‘chirib bo‘lmadi, chunki ushbu paket faol qurilma administratoridir."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Bu paketni o‘chirib bo‘lmaydi, chunki u <xliff:g id="USERNAME">%1$s</xliff:g> u-n qurilma administratori hisoblanadi."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ilovasini o‘chirib bo‘lmadi."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Faol qurilma administratori ilovasini o‘chirib bo‘lmaydi"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"<xliff:g id="USERNAME">%1$s</xliff:g> profilida faol qurilma administratori ilovasini o‘chirib bo‘lmaydi"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Bu ilova ba’zi foydalanuvchi yoki profillar uchun zarur, boshqalar uchun esa o‘chirib tashlangan"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Bu ilova profilingiz uchun kerak va uni o‘chirib bo‘lmaydi."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ushbu ilova qurilmangiz ma\'muri tomonidan ishlatiladi, shuning uchun uni olib tashlab bo\'lmaydi."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Qurilma administratorlarini boshqarish"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Qurilma administratori ilovalarini boshqarish"</string>
<string name="manage_users" msgid="3125018886835668847">"Foydalanuvchilarni boshqarish"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> o‘chirilmadi."</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Paketni tahlil qilishda muammo yuz berdi."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Ushbu yangilanish hech qanday yangi ruxsatlarni talab qilmaydi."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Quyidagi ruxsatlar berilishiga rozimisiz? U quyidagilarga ruxsat beradi:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rad etish"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Qo‘shimcha ma’lumot"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Baribir rad etilsin"</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="7332275268559121742">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ilovasiga <xliff:g id="ACTION">%2$s</xliff:g> uchun ruxsat berilsinmi?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> tasi o‘chiq"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"hammasi o‘chiq"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"hech qaysi o‘chirilmagan"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Ruxsat berish"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Ilovalar"</string>
<string name="app_permissions" msgid="3146758905824597178">"Ilovalar uchun ruxsatlar"</string>
@@ -100,7 +112,7 @@
<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="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="menu_show_system" msgid="6773743421743728921">"Tizimga oid jarayonlarni ko‘rsatish"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Tizimga oid jarayonlar"</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>
<string name="no_apps" msgid="1965493419005012569">"Hech qanday ilova yo‘q"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear qurilmasi o‘rnatish/o‘chirish amallarini qo‘llab-quvvatlamaydi."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ilovasi yangilandi. <xliff:g id="APP_NAME_1">%1$s</xliff:g> ilovasiga quyidagi ruxsatnomalar taqdim etilsinmi?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga taqdim etiladigan ruxsatnomalarni tanlang"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi yangilandi. Bu ilovaga taqdim etiladigan ruxsatnomalarni tanlang."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; uchun beriladigan ruxsatlarni tanlang"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; yangilandi. Unga beriladigan ruxsatlarni tanlang."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Bekor qilish"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Davom etish"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Yangi ruxsatnomalar"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Joriy ruxsatnomalar"</string>
<string name="message_staging" msgid="6151794817691100003">"Kutib turing…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Noma’lum"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Xavfsizlik yuzasidan, planshetingizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Xavfsizlik yuzasidan, televizoringizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Xavfsizlik yuzasidan, telefoningizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Telefoningiz va shaxsiy ma‘lumotlaringiz notanish ilovalar xujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan telefoningizga yetkaziladigan shikast va ma‘lumotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Planshetingiz va shaxsiy ma‘lumotlaringiz notanish ilovalar xujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan planshetingizga yetkaziladigan shikast va ma‘lumotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV va shaxsiy ma‘lumotlaringiz notanish ilovalar xujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan televizoringizga yetkaziladigan shikast va ma‘lumotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Davom etish"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Sozlamalar"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Wear ilovalarini o‘rnatish/o‘chirish"</string>
</resources>
diff --git a/res/values-vi-television/strings.xml b/res/values-vi-television/strings.xml
index cc5bc4ee..574bde7f 100644
--- a/res/values-vi-television/strings.xml
+++ b/res/values-vi-television/strings.xml
@@ -20,8 +20,8 @@
<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 &gt; Ứ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>
- <string name="app_permissions_decor_title" msgid="1461057434211920209">"Quyền ứng dụng"</string>
- <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Quyền ứng dụng"</string>
+ <string name="app_permissions_decor_title" msgid="1461057434211920209">"Quyền của ứng dụng"</string>
+ <string name="manage_permissions_decor_title" msgid="4823785025722958092">"Quyền của ứng dụng"</string>
<string name="permission_apps_decor_title" msgid="3644363529649579576">"Quyền <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
<string name="additional_permissions_decor_title" msgid="7000432624396037882">"Quyền bổ sung"</string>
<string name="system_apps_decor_title" msgid="5292119639812561805">"Quyền <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f1a34e9a..2d168a44 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Hủy"</string>
<string name="unknown" msgid="4742479012767208045">"Không xác định"</string>
<string name="installing" msgid="8613631001631998372">"Đang cài đặt…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"Đang cài đặt <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"Ứng dụng đã được cài đặt."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Bạn có muốn cài đặt ứng dụng này không? Ứng dụng sẽ có quyền truy cập vào:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Bạn có muốn cài đặt ứng dụng này không? Ứng dụng này không yêu cầu bất kỳ quyền truy cập đặc biệt nào."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Bạn có muốn cài đặt bản cập nhật cho ứng dụng cài sẵn này không? Dữ liệu hiện có của bạn sẽ không bị mất. Việc cài đặt không yêu cầu quyền truy cập đặc biệt nào."</string>
<string name="install_failed" msgid="6579998651498970899">"Ứng dụng chưa được cài đặt."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Đã chặn cài đặt gói."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Gói xung đột với gói hiện có do cùng tên."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Ứng dụng này không tương thích với máy tính bảng của bạn."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Ứng dụng chưa được cài đặt dưới dạng gói xung đột với gói hiện có."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Ứng dụng chưa được cài đặt dưới dạng ứng dụng không tương thích với máy tính bảng của bạn."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Ứng dụng này không tương thích với TV của bạn."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Ứng dụng này không tương thích với điện thoại của bạn."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Gói dường như bị hỏng."</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Ứng dụng chưa được cài đặt dưới dạng ứng dụng không tương thích với điện thoại của bạn."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Ứng dụng chưa được cài đặt dưới dạng gói dường như không hợp lệ."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Không thể cài đặt <xliff:g id="APP_NAME">%1$s</xliff:g> trên máy tính bảng của bạn."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Không cài đặt được <xliff:g id="APP_NAME">%1$s</xliff:g> trên TV của bạn."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"Không thể cài đặt <xliff:g id="APP_NAME">%1$s</xliff:g> trên điện thoại này."</string>
<string name="launch" msgid="4826921505917605463">"Mở"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Để bảo mật, máy tính bảng của bạn được đặt để chặn cài đặt ứng dụng từ nguồn không xác định."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Để bảo mật, TV của bạn được đặt để chặn cài đặt ứng dụng từ nguồn không xác định."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Để bảo mật, điện thoại của bạn được đặt để chặn cài đặt ứng dụng từ nguồn không xác định."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Quản trị viên của bạn không cho phép cài đặt ứng dụng từ nguồn không xác định."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Quản trị viên của bạn không cho phép cài đặt ứng dụng từ nguồn không xác định"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Người dùng này không thể cài đặt ứng dụng không xác định"</string>
<string name="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Cài đặt"</string>
<string name="manage_applications" msgid="4033876279091996596">"Quản lý ứng dụng"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Không tìm thấy ứng dụng"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Không tìm thấy ứng dụng trong danh sách các ứng dụng đã cài đặt."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Không được phép"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Người dùng hiện tại không được phép thực hiện quá trình gỡ cài đặt này."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Lỗi"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Không thể gỡ cài đặt ứng dụng."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Gỡ cài đặt ứng dụng"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Gỡ cài đặt cập nhật"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> là một phần của ứng dụng sau:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Bạn có muốn gỡ cài đặt ứng dụng này cho người dùng <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Thay thế ứng dụng này bằng phiên bản gốc? Tất cả dữ liệu sẽ bị xóa."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Thay thế ứng dụng này bằng phiên bản gốc? Tất cả dữ liệu sẽ bị xóa. Điều này ảnh hưởng đến tất cả người dùng thiết bị này, bao gồm cả những người có hồ sơ công việc."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Gỡ cài đặt đang chạy"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Gỡ cài đặt không thành công"</string>
<string name="uninstalling" msgid="5556217435895938250">"Đang gỡ cài đặt..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Đang gỡ cài đặt <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Gỡ cài đặt đã hoàn tất."</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Đã gỡ cài đặt <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Gỡ cài đặt không thành công."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Không thể cài đặt vì gói này là ứng dụng quản trị thiết bị đang hoạt động."</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Không thể gỡ cài đặt do gói này là ứng dụng quản trị thiết bị đang hoạt động dành cho người dùng <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Gỡ cài đặt <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> không thành công."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Không thể gỡ cài đặt ứng dụng dành cho quản trị viên thiết bị đang hoạt động"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Không thể gỡ cài đặt ứng dụng dành cho quản trị viên thiết bị đang hoạt động cho <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Ứng dụng này bắt buộc với một số người dùng hoặc hồ sơ và được gỡ cài đặt cho người khác"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Ứng dụng này là cần thiết cho hồ sơ của bạn và không thể gỡ cài đặt."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ứng dụng này được quản trị viên thiết bị của bạn yêu cầu và không thể gỡ cài đặt."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Quản lý quản trị viên điện thoại"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Quản lý ứng dụng dành cho quản trị viên thiết bị"</string>
<string name="manage_users" msgid="3125018886835668847">"Quản lý người dùng"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Không thể gỡ cài đặt <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Đã xảy ra sự cố khi phân tích cú pháp gói."</string>
@@ -84,12 +92,16 @@
<string name="no_new_perms" msgid="6657813692169565975">"Bản cập nhật này không yêu cầu quyền mới."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Bạn có muốn cấp quyền sau không? Ứng dụng sẽ có quyền truy cập:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Từ chối"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Thông tin khác"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Vẫn từ chối"</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="7332275268559121742">"Cho phép &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"Đã vô hiệu hóa <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"tất cả quyền đều bị vô hiệu hóa"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"không có quyền nào bị vô hiệu hóa"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Cho phép"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Ứng dụng"</string>
- <string name="app_permissions" msgid="3146758905824597178">"Giấy phép ứng dụng"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Quyền của ứng dụng"</string>
<string name="never_ask_again" msgid="1089938738199748687">"Không 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>
@@ -102,7 +114,7 @@
<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="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>
+ <string name="permission_title" msgid="6495415273398916381">"Quyền <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
<string name="no_apps" msgid="1965493419005012569">"Không có ứng dụng"</string>
<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>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Không hỗ trợ tác vụ Cài đặt/Gỡ cài đặt trên Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"Đã cập nhật <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Cho phép <xliff:g id="APP_NAME_1">%1$s</xliff:g> truy cập những nội dung sau?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Chọn cho phép <xliff:g id="APP_NAME">%1$s</xliff:g> truy cập những gì"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"Đã cập nhật <xliff:g id="APP_NAME">%1$s</xliff:g>. Chọn cho phép ứng dụng này truy cập những gì."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Chọn cho phép &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; truy cập những gì"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"Đã cập nhật &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;. Chọn cho phép ứng dụng này truy cập những gì."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Hủy"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Tiếp tục"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Các quyền mới"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Các quyền hiện tại"</string>
<string name="message_staging" msgid="6151794817691100003">"Đang sắp xếp ứng dụng…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Không xác định"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Để bảo mật, máy tính bảng của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Để bảo mật, TV của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Để bảo mật, điện thoại của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Điện thoại và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với điện thoại của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Máy tính bảng và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với máy tính bảng của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"TV và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với TV của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Tiếp tục"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Cài đặt"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Cài đặt/gỡ cài đặt ứng dụng Wear"</string>
</resources>
diff --git a/res/values-watch/styles.xml b/res/values-watch/styles.xml
index 18fce93e..805d43d0 100644
--- a/res/values-watch/styles.xml
+++ b/res/values-watch/styles.xml
@@ -15,8 +15,6 @@
-->
<resources>
- <style name="Theme.DialogWhenLarge" parent="@android:style/Theme.DeviceDefault.NoActionBar"/>
-
<style name="BreadcrumbText" parent="@android:style/TextAppearance.Material.Body2"/>
<style name="TitleText" parent="@android:style/TextAppearance.Material.Subhead"/>
</resources>
diff --git a/res/values-watch/themes.xml b/res/values-watch/themes.xml
index a8186dd9..3adcfc54 100644
--- a/res/values-watch/themes.xml
+++ b/res/values-watch/themes.xml
@@ -16,6 +16,8 @@
-->
<resources>
+ <style name="DialogWhenLarge" parent="@android:style/Theme.DeviceDefault.NoActionBar"/>
+
<style name="Settings" parent="@android:style/Theme.DeviceDefault.NoActionBar" />
<style name="GrantPermissions" parent="@android:style/Theme.DeviceDefault.NoActionBar">
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f6aa8d35..b9023cc1 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"取消"</string>
<string name="unknown" msgid="4742479012767208045">"未知"</string>
<string name="installing" msgid="8613631001631998372">"正在安装..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"正在安装<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"是否要为这一内置应用安装更新?您现有的数据不会丢失,且安装过程无需任何特殊权限。"</string>
<string name="install_failed" msgid="6579998651498970899">"应用未安装。"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"系统禁止安装该软件包。"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"该软件包与具有同一名称的现有软件包存在冲突。"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"此应用与您的平板电脑不兼容。"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"应用未安装:软件包与现有软件包存在冲突。"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"应用未安装:应用与您的平板电脑不兼容。"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"此应用与您的电视不兼容。"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"此应用与您的手机不兼容。"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"该软件包似乎已损坏。"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"应用未安装:应用与您的手机不兼容。"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"应用未安装:软件包似乎无效。"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"您的管理员不允许安装来源不明的应用"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"该用户无法安装未知应用"</string>
<string name="ok" msgid="3468756155452870475">"确定"</string>
<string name="settings" msgid="6743583734099755409">"设置"</string>
<string name="manage_applications" msgid="4033876279091996596">"管理应用"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"不允许"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"当前用户无法执行这项卸载操作。"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"错误"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"无法卸载应用。"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"您要为用户<xliff:g id="USERNAME">%1$s</xliff:g>卸载此应用吗?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"要将此应用替换为出厂版本吗?这样会移除所有数据。"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"要将此应用替换为出厂版本吗?这样会移除所有数据,并会影响此设备的所有用户(包括已设置工作资料的用户)。"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"进行中的卸载操作"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"失败的卸载操作"</string>
<string name="uninstalling" msgid="5556217435895938250">"正在卸载..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"正在卸载<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"卸载完成。"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"已卸载<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</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_failed_app" msgid="945277834056527022">"卸载<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>失败。"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"无法卸载正在使用中的设备管理应用"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"无法为<xliff:g id="USERNAME">%1$s</xliff:g>卸载正在使用中的设备管理应用"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"这是部分用户或个人资料所需的应用;已为其他用户或个人资料卸载此应用"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"这是您的个人资料所需的应用,因此无法卸载。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"这是您的设备管理员要求必须安装的应用,因此无法卸载。"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"管理设备管理器"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"管理设备管理应用"</string>
<string name="manage_users" msgid="3125018886835668847">"管理用户"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"无法卸载“<xliff:g id="APP_NAME">%1$s</xliff:g>”。"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"解析软件包时出现问题。"</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"新版本不需要任何新的权限。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"要向该应用授予以下权限吗?"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒绝"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"详情"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"仍然拒绝"</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="7332275268559121742">"要允许&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;<xliff:g id="ACTION">%2$s</xliff:g>吗?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> 项已停用"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"全部已停用"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"均未停用"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"允许"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"应用"</string>
<string name="app_permissions" msgid="3146758905824597178">"应用权限"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear 不支持安装/卸载操作。"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>已更新。要向<xliff:g id="APP_NAME_1">%1$s</xliff:g>授予以下权限吗?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"请选择要向<xliff:g id="APP_NAME">%1$s</xliff:g>授予哪些权限"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g>已更新。请选择要向此应用授予哪些权限。"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"请选择要向&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;授予哪些权限"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;已更新。请选择要向此应用授予哪些权限。"</string>
<string name="review_button_cancel" msgid="957906817733578877">"取消"</string>
<string name="review_button_continue" msgid="4809162078179371370">"继续"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"新权限"</string>
<string name="current_permissions_category" msgid="998210994450606094">"当前权限"</string>
<string name="message_staging" msgid="6151794817691100003">"正在准备安装应用…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"未知"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"出于安全考虑,已禁止您的平板电脑安装来自此来源的未知应用。"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"出于安全考虑,已禁止您的电视安装来自此来源的未知应用。"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"出于安全考虑,已禁止您的手机安装来自此来源的未知应用。"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"来历不明的应用很可能会损害您的手机和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何手机损坏或数据丢失情况,您负有全部责任。"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"来历不明的应用很可能会损害您的平板电脑和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何平板电脑损坏或数据丢失情况,您负有全部责任。"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"来历不明的应用很可能会损害您的电视和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何电视损坏或数据丢失情况,您负有全部责任。"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"继续"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"设置"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"正在安装/卸载 Android Wear 应用"</string>
</resources>
diff --git a/res/values-zh-rHK-television/strings.xml b/res/values-zh-rHK-television/strings.xml
index 08bf24c9..52c3d300 100644
--- a/res/values-zh-rHK-television/strings.xml
+++ b/res/values-zh-rHK-television/strings.xml
@@ -16,7 +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">"您日後可以在 [設定] &gt; [應用程式] 中變更這項設定"</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>
diff --git a/res/values-zh-rHK-watch/strings.xml b/res/values-zh-rHK-watch/strings.xml
index 112cccdd..6d0226f8 100644
--- a/res/values-zh-rHK-watch/strings.xml
+++ b/res/values-zh-rHK-watch/strings.xml
@@ -16,7 +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="5828565432145544298">"拒絕,不要再詢問"</string>
+ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5828565432145544298">"拒絕,不要再問我"</string>
<string name="current_permission_template" msgid="6691830243038105737">"<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="7042886929865431207">"顯示系統應用程式"</string>
<string name="permission_summary_enforced_by_policy" msgid="9002523259681588936">"不可變更"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 9ca95a35..83bcd490 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"取消"</string>
<string name="unknown" msgid="4742479012767208045">"未知"</string>
<string name="installing" msgid="8613631001631998372">"正在安裝..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"正在安裝 <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<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>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"您要為這個內置應用程式安裝更新嗎?您不會遺失現有的資料,而應用程式無需任何特殊的存取權限。"</string>
<string name="install_failed" msgid="6579998651498970899">"未安裝應用程式。"</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"套件已遭封鎖,無法安裝。"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"此套件與現有的套件發生衝突,套件名稱相同。"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"此應用程式與您的平板電腦不相容。"</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"套件與現有的套件發生衝突,無法安裝應用程式。"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"應用程式與平板電腦不兼容,無法安裝應用程式。"</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"此應用程式與您的電視不相容。"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"此應用程式與您的手機不相容。"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"看來套件已毀損。"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"應用程式與手機不兼容,無法安裝應用程式。"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"套件好像無效,無法安裝應用程式。"</string>
<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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"您的管理員不允許安裝來自不明來源的應用程式"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"此使用者無法安裝不明的應用程式"</string>
<string name="ok" msgid="3468756155452870475">"確定"</string>
<string name="settings" msgid="6743583734099755409">"設定"</string>
<string name="manage_applications" msgid="4033876279091996596">"管理應用程式"</string>
@@ -57,6 +56,10 @@
<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="user_is_not_allowed_dlg_title" msgid="118128026847201582">"不允許"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"目前的使用者不允許執行這項解除安裝操作。"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"錯誤"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"應用程式無法解除安裝。"</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>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"您要為使用者 <xliff:g id="USERNAME">%1$s</xliff:g> 解除安裝這個應用程式嗎?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"要將此應用程式回復至原廠版本嗎?所有資料將會刪除。"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"要將此應用程式回復至原廠版本嗎?所有資料將會刪除,此裝置的所有使用者 (包括使用工作設定檔的使用者) 亦會受影響。"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"正在執行的解除安裝操作"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"失敗的解除安裝操作"</string>
<string name="uninstalling" msgid="5556217435895938250">"正在解除安裝..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"正在解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"完成解除安裝。"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"已解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」"</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_failed_app" msgid="945277834056527022">"解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」失敗。"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"無法解除安裝可用的裝置管理員應用程式"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"無法為<xliff:g id="USERNAME">%1$s</xliff:g>解除安裝可用的裝置管理員應用程式"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"這是部分使用者或設定檔所需的應用程式,其他使用者或設定檔已解除安裝此應用程式"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"這是您設定檔所需的應用程式,因此無法解除安裝。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"這是您的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"管理裝置管理員"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"管理裝置管理員應用程式"</string>
<string name="manage_users" msgid="3125018886835668847">"管理使用者"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"無法解除安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"剖析套件時發生問題。"</string>
@@ -84,13 +92,17 @@
<string name="no_new_perms" msgid="6657813692169565975">"這項更新不需新權限。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"您想授予下列權限嗎?應用程式將可獲得下列存取權:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒絕"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"更多資訊"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"一律拒絕"</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="7332275268559121742">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> 個權限已停用"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"所有權限已停用"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"沒有權限已停用"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"允許"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"應用程式"</string>
<string name="app_permissions" msgid="3146758905824597178">"應用程式權限"</string>
- <string name="never_ask_again" msgid="1089938738199748687">"不要再詢問"</string>
+ <string name="never_ask_again" msgid="1089938738199748687">"不要再問我"</string>
<string name="no_permissions" msgid="3210542466245591574">"沒有權限"</string>
<string name="additional_permissions" msgid="6667573114240111763">"其他權限"</string>
<plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear 不支援安裝/解除安裝操作。"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"已更新「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」。允許「<xliff:g id="APP_NAME_1">%1$s</xliff:g>」存取以下內容嗎?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"選擇允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取的內容"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"已更新「<xliff:g id="APP_NAME">%1$s</xliff:g>」。選擇允許此應用程式存取的內容。"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"選擇允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」存取的內容"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"已更新「<xliff:g id="APP_NAME">%1$s</xliff:g>」。選擇允許此應用程式存取的內容。"</string>
<string name="review_button_cancel" msgid="957906817733578877">"取消"</string>
<string name="review_button_continue" msgid="4809162078179371370">"繼續"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"新權限"</string>
<string name="current_permissions_category" msgid="998210994450606094">"目前權限"</string>
<string name="message_staging" msgid="6151794817691100003">"正在準備安裝應用程式…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"不明"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"為安全起見,您的平板電腦不得安裝此來源的不明應用程式。"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"為安全起見,您的電視不得安裝此來源的不明應用程式。"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"為安全起見,您的手機不得安裝此來源的不明應用程式。"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"來源不明的應用程式可能會侵害您的手機和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致手機損壞或資料遺失的責任。"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"來源不明的應用程式可能會侵害您的平板電腦和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致平板電腦損壞或資料遺失的責任。"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"來源不明的應用程式可能會侵害您的電視和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致電視損壞或資料遺失的責任。"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"繼續"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"設定"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"正在安裝/解除安裝 Wear 應用程式"</string>
</resources>
diff --git a/res/values-zh-rTW-television/strings.xml b/res/values-zh-rTW-television/strings.xml
index 432468c3..59266f9f 100644
--- a/res/values-zh-rTW-television/strings.xml
+++ b/res/values-zh-rTW-television/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"拒絕且不要再詢問"</string>
- <string name="grant_dialog_how_to_change" msgid="615414835189256888">"您日後可在 [設定] &gt; [應用程式] 中進行變更"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"你日後可在 [設定] &gt; [應用程式] 中進行變更"</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>
<string name="app_permissions_decor_title" msgid="1461057434211920209">"應用程式權限"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 521ff7fd..16d4e873 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -24,56 +24,64 @@
<string name="cancel" msgid="8360346460165114585">"取消"</string>
<string name="unknown" msgid="4742479012767208045">"不明"</string>
<string name="installing" msgid="8613631001631998372">"安裝中…"</string>
+ <string name="installing_app" msgid="4097935682329028894">"正在安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」…"</string>
<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>
- <string name="install_confirm_question_update" msgid="4624159567361487964">"您要為這個現有的應用程式安裝更新嗎?您的現有資料不會遺失,而更新後的應用程式將取得以下權限:"</string>
- <string name="install_confirm_question_update_system" msgid="1302330093676416336">"您要為這個內建的應用程式安裝更新嗎?您的現有資料不會遺失,而更新後的應用程式將取得以下權限:"</string>
- <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_confirm_question" msgid="7295206719219043890">"你要安裝這個應用程式嗎?應用程式將取得以下權限:"</string>
+ <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"你要安裝這個應用程式嗎?應用程式不需任何特殊權限。"</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"你要為這個現有的應用程式安裝更新嗎?你的現有資料不會遺失,而更新後的應用程式將取得以下權限:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"你要為這個內建的應用程式安裝更新嗎?你的現有資料不會遺失,而更新後的應用程式將取得以下權限:"</string>
+ <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_blocked" msgid="1606870930588770025">"這個套件已遭到封鎖,因此無法安裝。"</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"這個套件與同名的現有套件相衝突。"</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"這個應用程式與您的平板電腦不相容。"</string>
- <string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"這個應用程式與您的電視不相容。"</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"這個應用程式與您的手機不相容。"</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"套件已毀損。"</string>
- <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="install_failed_conflict" msgid="5336045235168070954">"應用程式套件與現有套件衝突,因此未能完成安裝。"</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"應用程式與你的平板電腦不相容,因此未能完成安裝。"</string>
+ <string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"這個應用程式與你的電視不相容。"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"應用程式與你的手機不相容,因此未能完成安裝。"</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"應用程式套件無效,因此未能完成安裝。"</string>
+ <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_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="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"你的管理員不允許安裝來源不明的應用程式"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"這位使用者無法安裝不明的應用程式"</string>
<string name="ok" msgid="3468756155452870475">"確定"</string>
<string name="settings" msgid="6743583734099755409">"設定"</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_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>
<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>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"找不到應用程式"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"在已安裝的應用程式清單中找不到這個應用程式。"</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"不允許此操作"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"目前的使用者無法執行這項解除安裝作業。"</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"發生錯誤"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"無法解除安裝應用程式。"</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>
- <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_application_text" msgid="6691975835951187030">"你要解除安裝這個應用程式嗎?"</string>
+ <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="1394549691152728409">"要將應用程式換成原廠版本嗎?這麼做會移除所有資料。"</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"要將應用程式換成原廠版本嗎?這麼做會移除所有資料。凡是這個裝置的使用者 (包括設置 Work 設定檔的使用者),皆會受到影響。"</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"執行中的解除安裝作業"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"失敗的解除安裝作業"</string>
<string name="uninstalling" msgid="5556217435895938250">"解除安裝中…"</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"正在解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"解除安裝完成。"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"已解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」"</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_failed_app" msgid="945277834056527022">"無法解除安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」。"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"無法解除安裝使用中的裝置管理員應用程式"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"無法為<xliff:g id="USERNAME">%1$s</xliff:g>解除安裝使用中的裝置管理員應用程式"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"部分使用者或設定檔需要使用這個應用程式;已為其他使用者解除安裝"</string>
- <string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"您的設定檔需要使用這個應用程式,因此無法解除安裝。"</string>
- <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"這是您的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"管理裝置管理員"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"你的設定檔需要使用這個應用程式,因此無法解除安裝。"</string>
+ <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"這是你的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"管理裝置管理員應用程式"</string>
<string name="manage_users" msgid="3125018886835668847">"管理使用者"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"無法解除安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"剖析套件時發生問題。"</string>
@@ -82,11 +90,15 @@
<string name="privacyPerms" msgid="1850527049572617">"隱私權"</string>
<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_confirm_question" msgid="4690289297029223742">"你要授予下列權限嗎?將會開放下列存取權:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒絕"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"瞭解詳情"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"直接拒絕"</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="7332275268559121742">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"已停用 <xliff:g id="COUNT">%1$d</xliff:g> 項權限"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"已停用所有權限"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"未停用任何權限"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"允許"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"應用程式"</string>
<string name="app_permissions" msgid="3146758905824597178">"應用程式權限"</string>
@@ -105,25 +117,34 @@
<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="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">"如要變更這項權限設定,您必須先依序前往 [設定] &gt; [應用程式],關閉裝置畫面重疊圖層"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"如要變更這項權限設定,你必須先依序前往 [設定] &gt; [應用程式],關閉裝置畫面重疊圖層"</string>
<string name="screen_overlay_button" msgid="4344544843349937743">"開啟設定"</string>
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Wear 不支援安裝及解除安裝操作。"</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」已更新,要將下列項目的存取權授予「<xliff:g id="APP_NAME_1">%1$s</xliff:g>」嗎?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"選擇要將哪些項目的存取權授予「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已更新,請選擇要將哪些項目的存取權授予這個應用程式。"</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"選擇要將哪些存取權限授予「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已更新。請選擇要將哪些存取權限授予這個應用程式。"</string>
<string name="review_button_cancel" msgid="957906817733578877">"取消"</string>
<string name="review_button_continue" msgid="4809162078179371370">"繼續"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"新權限"</string>
<string name="current_permissions_category" msgid="998210994450606094">"目前權限"</string>
<string name="message_staging" msgid="6151794817691100003">"正在啟動應用程式安裝程序…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"不明"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"為了安全起見,你的平板電腦禁止安裝這個來源提供的不明應用程式。"</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"為了安全起見,你的電視禁止安裝這個來源提供的不明應用程式。"</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"為了安全起見,你的手機禁止安裝這個來源提供的不明應用程式。"</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"來歷不明的應用程式可能會損害你的手機和個人資料。如因安裝及使用這個應用程式,導致你的手機受損或資料遺失,請自行負責。"</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"來歷不明的應用程式可能會損害你的平板電腦和個人資料。如因安裝及使用這個應用程式,導致你的平板電腦受損或資料遺失,請自行負責。"</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"來歷不明的應用程式可能會損害你的電視和個人資料。如因安裝及使用這個應用程式,導致你的電視受損或資料遺失,請自行負責。"</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"繼續"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"設定"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"安裝/解除安裝 Wear 應用程式"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index c6d96003..97e51163 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel" msgid="8360346460165114585">"Khansela"</string>
<string name="unknown" msgid="4742479012767208045">"Akwaziwa"</string>
<string name="installing" msgid="8613631001631998372">"Iyafaka..."</string>
+ <string name="installing_app" msgid="4097935682329028894">"Ifaka i-<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="3682715442154357097">"I-App ifakiwe."</string>
<string name="install_confirm_question" msgid="7295206719219043890">"Ngabe ufuna ukufaka lolu hlelo lokusebenza? Lizothola ukufinyelela ku:"</string>
<string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Ngabe ufuna ukufaka lolu hlelo lokusebenza? Alidingi ukufinyelela okukhethekile."</string>
@@ -33,19 +34,17 @@
<string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Ungabe ufuna ukukhipha isibuyekezo kulolu hlelo lokusebenza olakhelwe ngaphakathi? Idatha yakho ekhona ngeke ilahleke. Akudingi ukufinyelela okukhethekile."</string>
<string name="install_failed" msgid="6579998651498970899">"I-app ayifakiwe."</string>
<string name="install_failed_blocked" msgid="1606870930588770025">"Iphakheji livinjiwe kusukela ekufakweni."</string>
- <string name="install_failed_conflict" msgid="5349055145440204106">"Iphakheji ishayisana nephakheji ekhona enegama elifanayo."</string>
- <string name="install_failed_incompatible" product="tablet" msgid="119054044615117271">"Lolu hlelo lokusebenza aluhambisani nethebulethi yakho."</string>
+ <string name="install_failed_conflict" msgid="5336045235168070954">"Uhlelo lokusebenza alufakiwe njengoba ukuphakheja kushayisana nephakheji elikhona."</string>
+ <string name="install_failed_incompatible" product="tablet" msgid="6682387386242708974">"Uhlelo lokusebenza alufakiwe njengoba uhlelo lokusebenza lungahambisani nethebulethi yakho."</string>
<string name="install_failed_incompatible" product="tv" msgid="3553367270510072729">"Lolu hlelo lokusebenza aluhambisani ne-TV yakho."</string>
- <string name="install_failed_incompatible" product="default" msgid="6677057915876853610">"Lolu hlelo lokusebenza aluhambisani nefoni yakho."</string>
- <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Iphasela libonakala lonakalisiwe"</string>
+ <string name="install_failed_incompatible" product="default" msgid="7917996365659426872">"Uhlelo lokusebenza alufakiwe njengoba uhlelo lokusebenza lungahambisani nefoni yakho."</string>
+ <string name="install_failed_invalid_apk" msgid="269885385245534742">"Uhlelo lokusebenza alufakiwe njengoba iphakheji ibonakala ingavumelekile."</string>
<string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayikwazanga ukufakwa kuthebhulethi."</string>
<string name="install_failed_msg" product="tv" msgid="3990457938384021566">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayikwazanga ukufakwa ku-TV yakho."</string>
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayikwazanga ukufakwa efonini."</string>
<string name="launch" msgid="4826921505917605463">"Vula"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Ngokuphepha, ithebhulethi yakho isethelwe ukuvimbela ukufakwa kwezinhlelo zokusebenza ezitholwa emithonjeni engaziwa."</string>
- <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Ukuze kuvikelwe, i-TV yakho isethelwe ukuthi ivimbele ukufakwa kwezinhlelo zokusebenza ezithathwe kumithombo engaziwa."</string>
- <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Ngokuphepha, ifoni yakho isethelwe ukuvimbela ukufakwa kwezinhlelo zokusebenza ezitholwa emithonjeni engaziwa."</string>
- <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Umlawuli wakho akavumeli ukufakwa kwezinhlelo zokusebenza okutholwe kusukela kumithombo engaziwa."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="7488386758312008790">"Umlawuli wakho akavumeli ukufakwa kwezinhlelo zokusebenza ezitholwe kusukela kumithombo engaziwa"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="5785226253054083336">"Izinhlelo zokusebenza ezingaziwa azikwazi ukufakwa ilo msebenzisi"</string>
<string name="ok" msgid="3468756155452870475">"KULUNGILE"</string>
<string name="settings" msgid="6743583734099755409">"Izilungiselelo"</string>
<string name="manage_applications" msgid="4033876279091996596">"Phatha izinhlelo zokusebenza"</string>
@@ -57,6 +56,10 @@
<string name="dlg_ok" msgid="6944357727705699232">"KULUNGILE"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"I-App ayitholakalanga"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Uhlelo lokusebenza alutholakalanga ohlwini lwezinhlelo zokusebenza ezifakiwe."</string>
+ <string name="user_is_not_allowed_dlg_title" msgid="118128026847201582">"Akuvumelekile"</string>
+ <string name="user_is_not_allowed_dlg_text" msgid="739716827677987545">"Umsebenzisi wamanje akavunyelwe ukwenza lokhu kukhipha."</string>
+ <string name="generic_error_dlg_title" msgid="2684806600635296961">"Iphutha"</string>
+ <string name="generic_error_dlg_text" msgid="4288738047825333954">"Amafu ohlelo lokusebenza angakhishwa."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Khipha i-app"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Khipha isibuyekezo"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"I-<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> ingxenye yohlelo lokusebenza olulandelayo:"</string>
@@ -65,15 +68,20 @@
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Ingabe ufuna ukukhiphela lolu hlelo lokusebenza kumsebenzisi ongu-<xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
<string name="uninstall_update_text" msgid="1394549691152728409">"Shintshanisa lolu hlelo lokusebenza ngenguqulo yasekuqaleni? Yonke idatha izosuswa."</string>
<string name="uninstall_update_text_multiuser" msgid="2083665452990861991">"Shintshanisa lolu hlelo lokusebenza ngenguqulo yasekuqaleni? Yonke idatha izosuswa. Lokhu kuthinta bonke abasebenzisi bale divayisi, abafaka labo abanamaphrofayela wokusebenza."</string>
+ <string name="uninstalling_notification_channel" msgid="5698369661583525583">"Ukukhishwa okuqhubekayo"</string>
+ <string name="uninstall_failure_notification_channel" msgid="8224276726364132314">"Ukukhishwa okuhlulekile"</string>
<string name="uninstalling" msgid="5556217435895938250">"Iyakhipha..."</string>
+ <string name="uninstalling_app" msgid="2773617614877719294">"Ikhipha i-<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="uninstall_done" msgid="3792487853420281888">"Ukukhipha kuqedile"</string>
+ <string name="uninstall_done_app" msgid="775837862728680479">"Kukhishwe i-<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="uninstall_failed" msgid="631122574306299512">"Ukukhipha akuphumelelanga."</string>
- <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Ayikwazi ukukhupha: leliphasela liwumqondisi wedivayisi osebenzayo"</string>
- <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Ayikwazi ukukhipha ngoba le phakheji ingumlawuli osebenzayo wedivayisi womsebenzisi we-<xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_app" msgid="945277834056527022">"Ukukhipha i-<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> akuphumelele."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="2727361164694743362">"Ayikwazi ukukhipha uhlelo lokusebenza lomlawuli ledivayisi esebenzayo"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="2161462242935805756">"Ayikwazi ukukhipha uhlelo lokusebenza lomlawuli ledivayisi esebenzayo lika-<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="uninstall_all_blocked_profile_owner" msgid="3544933038594382346">"Lolu hlelo lokusebenza luyadingeka kwabanye abasebenzisi noma amaphrofayela futhi lukhishelwe abanye"</string>
<string name="uninstall_blocked_profile_owner" msgid="6912141045528994954">"Lolu hlelo lokusebenza ludingelwa iphrofayela yakho futhi alikwazi ukukhishwa."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Lolu hlelo lokusebenza ludingwa umlawuli wedivayisi yakho futhi alukwazi ukukhishwa."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Phatha amadivayisi abaqondisi"</string>
+ <string name="manage_device_administrators" msgid="118178632652346535">"Phatha izinhlelo zokusebenza zedivayisi yomlawuli"</string>
<string name="manage_users" msgid="3125018886835668847">"Phatha abasebenzisi"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayikwazanga ukukhishwa"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Kube nenkinga yokwehlukanisa iphakheji."</string>
@@ -84,9 +92,13 @@
<string name="no_new_perms" msgid="6657813692169565975">"Lesi sibuyekezo asidingi zimvume."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ufuna ukunikeza lezi zimvume ezilandelayo? Izothola ukufinyelela ku-:"</string>
<string name="grant_dialog_button_deny" msgid="2176510645406614340">"Phika"</string>
+ <string name="grant_dialog_button_more_info" msgid="2218220771432058426">"Olunye ulwazi"</string>
<string name="grant_dialog_button_deny_anyway" msgid="847960499284125250">"Yenqaba noma kunjalo"</string>
<string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> kokungu-<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
<string name="permission_warning_template" msgid="7332275268559121742">"Vumela i-&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ukuthi <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="permission_revoked_count" msgid="7386129423432613024">"<xliff:g id="COUNT">%1$d</xliff:g> kukhutshaziwe"</string>
+ <string name="permission_revoked_all" msgid="8595742638132863678">"konke kukhutshaziwe"</string>
+ <string name="permission_revoked_none" msgid="2059511550181271342">"Lutho olukhutshaziwe"</string>
<string name="grant_dialog_button_allow" msgid="4616529495342337095">"Vumela"</string>
<string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Izinhlelo zokusebenza"</string>
<string name="app_permissions" msgid="3146758905824597178">"Izimvume zohlelo lokusebenza"</string>
@@ -118,12 +130,21 @@
<string name="wear_not_allowed_dlg_title" msgid="8104666773577525713">"I-Android Wear"</string>
<string name="wear_not_allowed_dlg_text" msgid="1322352525843583064">"Izenzo zokufaka/ukukhipha azisekelwe ku-Wear."</string>
<string name="permission_review_warning_title_template_update" msgid="2569412700408535872">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ibuyekeziwe. Vumela i-<xliff:g id="APP_NAME_1">%1$s</xliff:g> ukufinyelela okulandelayo?"</string>
- <string name="permission_review_title_template_install" msgid="6535540493936469336">"Khetha ongakuvumela ukuthi kufinyelelwe yi-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="permission_review_title_template_update" msgid="2548815248828051885">"<xliff:g id="APP_NAME">%1$s</xliff:g> ibuyekeziwe. Khetha ongakuvumela ukuthi kufinyelelwe yilolu hlelo lokusebenza."</string>
+ <string name="permission_review_title_template_install" msgid="6819338441305295479">"Khetha ukuthi uzovumela ini ukuthi i-&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ifinyelele kuyo"</string>
+ <string name="permission_review_title_template_update" msgid="8632233603161669426">"I-&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ibuyekeziwe. Khetha ukuthi uzovumela ini ukuthi ifinyelelwe ilolu hlelo lokusebenza."</string>
<string name="review_button_cancel" msgid="957906817733578877">"Khansela"</string>
<string name="review_button_continue" msgid="4809162078179371370">"Qhubeka"</string>
<string name="new_permissions_category" msgid="3213523410139204183">"Izimvume ezintsha"</string>
<string name="current_permissions_category" msgid="998210994450606094">"Izimvume zamanje"</string>
<string name="message_staging" msgid="6151794817691100003">"Ifaka kusiteji uhlelo lokusebenza…"</string>
<string name="app_name_unknown" msgid="8931522764510159105">"Akwaziwa"</string>
+ <string name="untrusted_external_source_warning" product="tablet" msgid="1483151219938173935">"Ukuze uvikelwe, ithebulethi yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza ezingaziwa kusukela kulo mthombo."</string>
+ <string name="untrusted_external_source_warning" product="tv" msgid="5373768281884328560">"Ukuze uvikelwe, i-TV yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza ezingaziwa kusukela kulo mthombo."</string>
+ <string name="untrusted_external_source_warning" product="default" msgid="2223486836232706553">"Ukuze uvikelwe, ifoni yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza kusukela kulo mthombo."</string>
+ <string name="anonymous_source_warning" product="default" msgid="7700263729981815614">"Idatha yakho yefoni neyohlelo lwakho lokusebenza isengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala kufoni yakho noma ukulahlekelwa kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="8854462805499848630">"Ithebulethi yakho nedatha yomuntu siqu zisengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala kuthebulethi yakho noma ukulahleka kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="1291472686734385872">"Idatha yakho ye-TV neyomuntu siqu isengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala ku-TV yakho noma ukulahlekelwa kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
+ <string name="anonymous_source_continue" msgid="2094381167954332292">"Qhubeka"</string>
+ <string name="external_sources_settings" msgid="8601453744517291632">"Izilungiselelo"</string>
+ <string name="wear_app_channel" msgid="6200840123672949356">"Ifaka/ikhipha izinhlelo zokusebenza ze-wear"</string>
</resources>
diff --git a/res/values-watch/attrs.xml b/res/values/attrs.xml
index e220f4c8..e220f4c8 100644
--- a/res/values-watch/attrs.xml
+++ b/res/values/attrs.xml
diff --git a/res/values/colors.xml b/res/values/colors.xml
new file mode 100644
index 00000000..01a0c9a8
--- /dev/null
+++ b/res/values/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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="bigIconColor">#C8CCCE</color>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 8285c493..112723f4 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -37,6 +37,8 @@
<dimen name="lb_content_fragment_description_text_size">14sp</dimen>
<dimen name="lb_content_fragment_title_text_bottom_padding">4dp</dimen>
+ <dimen name="headerElevation">8dp</dimen>
+
<dimen name="wear_permission_review_pref_padding">8dp</dimen>
<dimen name="wear_permission_review_icon_size">24dp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 12ad5f12..9992a41f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -24,6 +24,7 @@
<string name="cancel">Cancel</string>
<string name="unknown">Unknown</string>
<string name="installing">Installing\u2026</string>
+ <string name="installing_app">Installing <xliff:g id="package_label">%1$s</xliff:g>\u2026</string>
<string name="install_done">App installed.</string>
<!-- Message for installing a new app that requires some permissions [CHAR LIMIT=NONE] -->
<string name="install_confirm_question">Do you want to install this application?
@@ -53,10 +54,10 @@
<string name="install_failed_blocked">The package was blocked from being installed.</string>
<!-- Reason displayed when installation fails because the package conflicts with
an existing application (e.g., incompatible certificates) [CHAR LIMIT=100] -->
- <string name="install_failed_conflict">The package conflicts with an existing package by the same name.</string>
+ <string name="install_failed_conflict">App not installed as package conflicts with an existing package.</string>
<!-- Reason displayed when installation fails because the package is incompatible with
the current tablet (e.g., missing native code for the current ABI, newer SDK, ...) [CHAR LIMIT=100] -->
- <string name="install_failed_incompatible" product="tablet">This app isn\'t
+ <string name="install_failed_incompatible" product="tablet">App not installed as app isn\'t
compatible with your tablet.</string>
<!-- Reason displayed when installation fails because the package is incompatible with
the current TV (e.g., missing native code for the current ABI, newer SDK, ...) [CHAR LIMIT=100] -->
@@ -64,11 +65,11 @@
compatible with your TV.</string>
<!-- Reason displayed when installation fails because the package is incompatible with
the current phone (e.g., missing native code for the current ABI, newer SDK, ...) [CHAR LIMIT=100] -->
- <string name="install_failed_incompatible" product="default">This app isn\'t
+ <string name="install_failed_incompatible" product="default">App not installed as app isn\'t
compatible with your phone.</string>
<!-- Reason displayed when installation fails because the installation package itself is invalid
in some way (e.g., corrupt) [CHAR LIMIT=100] -->
- <string name="install_failed_invalid_apk">The package appears to be corrupt.</string>
+ <string name="install_failed_invalid_apk">App not installed as package appears to be invalid.</string>
<!-- Message presented when an application could not be installed on the tablet for some reason. [CHAR LIMIT=100] -->
<string name="install_failed_msg" product="tablet"><xliff:g id="app_name">%1$s</xliff:g> couldn\'t be installed on your tablet.</string>
<!-- Message presented when an application could not be installed on the TV for some reason. [CHAR LIMIT=100] -->
@@ -76,14 +77,14 @@
<!-- Message presented when an application could not be installed on the phone for some reason. [CHAR LIMIT=100] -->
<string name="install_failed_msg" product="default"><xliff:g id="app_name">%1$s</xliff:g> couldn\'t be installed on your phone.</string>
<string name="launch">Open</string>
- <!-- Message presented in a dialog box when a package is requested to be installed, but the "Allow unknown applications" checkbox is not enabled. [CHAR LIMIT=100] -->
- <string name="unknown_apps_dlg_text" product="tablet">For security, your tablet is set to block installation of apps obtained from unknown sources.</string>
- <!-- Message presented in a dialog box when a package is requested to be installed, but the "Allow unknown applications" checkbox is not enabled. [CHAR LIMIT=100] -->
- <string name="unknown_apps_dlg_text" product="tv">For security, your TV is set to block installation of apps obtained from unknown sources.</string>
- <!-- Message presented in a dialog box when a package is requested to be installed, but the "Allow unknown applications" checkbox is not enabled. [CHAR LIMIT=100] -->
- <string name="unknown_apps_dlg_text" product="default">For security, your phone is set to block installation of apps obtained from unknown sources.</string>
+
<!-- Message presented in a dialog box when the device administrator restricts the installation of apps from unknown sources. [CHAR LIMIT=none] -->
- <string name="unknown_apps_admin_dlg_text">Your administrator doesn\'t allow installation of apps obtained from unknown sources.</string>
+ <string name="unknown_apps_admin_dlg_text">Your admin doesn\'t allow installation of apps
+ obtained from unknown sources</string>
+ <!-- Message presented in a dialog box when the user restriction set by the system restricts the installation of apps from unknown sources. [CHAR LIMIT=none] -->
+ <string name="unknown_apps_user_restriction_dlg_text">Unknown apps can\'t be installed by this
+ user</string>
+
<string name="ok">OK</string>
<string name="settings">Settings</string>
@@ -98,6 +99,10 @@
<string name="dlg_ok">OK</string>
<string name="app_not_found_dlg_title">App not found</string>
<string name="app_not_found_dlg_text"> The app wasn\'t found in the list of installed apps.</string>
+ <string name="user_is_not_allowed_dlg_title">Not allowed</string>
+ <string name="user_is_not_allowed_dlg_text">The current user is not allowed to perform this uninstallation.</string>
+ <string name="generic_error_dlg_title">Error</string>
+ <string name="generic_error_dlg_text">App could not be uninstalled.</string>
<string name="uninstall_application_title">Uninstall app</string>
<string name="uninstall_update_title">Uninstall update</string>
<string name="uninstall_activity_text"><xliff:g id="activity_name">%1$s</xliff:g> is part of the following app:</string>
@@ -107,17 +112,26 @@
<string name="uninstall_application_text_user">Do you want to uninstall this app for the user <xliff:g id="username">%1$s</xliff:g>?</string>
<string name="uninstall_update_text">Replace this app with the factory version? All data will be removed.</string>
<string name="uninstall_update_text_multiuser">Replace this app with the factory version? All data will be removed. This affects all users of this device, including those with work profiles.</string>
+
+ <!-- Label for the notification channel containing notifications for current uninstall operations [CHAR LIMIT=40] -->
+ <string name="uninstalling_notification_channel">Running uninstalls</string>
+ <!-- Label for the notification channel containing notifications for failed uninstall operations [CHAR LIMIT=40] -->
+ <string name="uninstall_failure_notification_channel">Failed uninstalls</string>
+
<string name="uninstalling">Uninstalling\u2026</string>
+ <string name="uninstalling_app">Uninstalling <xliff:g id="package_label">%1$s</xliff:g>\u2026</string>
<string name="uninstall_done">Uninstall finished.</string>
+ <string name="uninstall_done_app">Uninstalled <xliff:g id="package_label">%1$s</xliff:g></string>
<string name="uninstall_failed">Uninstall unsuccessful.</string>
+ <string name="uninstall_failed_app">Uninstalling <xliff:g id="package_label">%1$s</xliff:g> unsuccessful.</string>
<!-- String presented to the user when uninstalling a package failed because the target package
is a current device administrator [CHAR LIMIT=80] -->
- <string name="uninstall_failed_device_policy_manager">Can\'t uninstall because this package is an
- active device administrator.</string>
+ <string name="uninstall_failed_device_policy_manager">Can\'t uninstall active device admin
+ app</string>
<!-- String presented to the user when uninstalling a package failed because the target package
is a current device administrator for some user [CHAR LIMIT=100] -->
- <string name="uninstall_failed_device_policy_manager_of_user">Can\'t uninstall because this package is an
- active device administrator for the user <xliff:g id="username">%1$s</xliff:g>.</string>
+ <string name="uninstall_failed_device_policy_manager_of_user">Can\'t uninstall active device
+ admin app for <xliff:g id="username">%1$s</xliff:g></string>
<!-- String presented to the admin user when uninstalling a package for all users failed
because a profile owner has marked the target package as not able to be uninstalled
[CHAR LIMIT=120] -->
@@ -131,10 +145,10 @@
has marked the the target package as not able to be uninstalled [CHAR LIMIT=80] -->
<string name="uninstall_blocked_device_owner">This app is required
by your device administrator and can\'t be uninstalled.</string>
- <!-- String on a button that leads to the "device administrator" configuration setting where a
- user will be able to disable the device administrator in order to uninstall
+ <!-- String on a button that leads to the "device admin apps" configuration setting where a
+ user will be able to disable the device admin app in order to uninstall
it. [CHAR LIMIT=50] -->
- <string name="manage_device_administrators">Manage device administrators</string>
+ <string name="manage_device_administrators">Manage device admin apps</string>
<!-- String on a button that leads to the "Users" page in Settings where a
user will be able to remove the secondary user(s) in order to uninstall
the app. [CHAR LIMIT=50] -->
@@ -162,6 +176,9 @@
<!-- Title for the dialog button to deny a permission grant. -->
<string name="grant_dialog_button_deny">Deny</string>
+ <!-- Title for the dialog button to get more info about a permission. -->
+ <string name="grant_dialog_button_more_info">More info</string>
+
<!-- Title for the dialog button to deny a permission grant despite a warning of implications. -->
<string name="grant_dialog_button_deny_anyway">Deny anyway</string>
@@ -175,6 +192,15 @@
&lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> to
<xliff:g id="action" example="do something">%2$s</xliff:g>?</string>
+ <!-- Template for the message how many permissions are disabled. -->
+ <string name="permission_revoked_count"><xliff:g id="count" example="2">%1$d</xliff:g> disabled</string>
+
+ <!-- Message that all permissions are disabled. -->
+ <string name="permission_revoked_all">all disabled</string>
+
+ <!-- Message that no permissions are disabled. -->
+ <string name="permission_revoked_none">none disabled</string>
+
<!-- Permissions -->
<!-- Title for the dialog button to allow a permission grant. -->
@@ -280,11 +306,11 @@
<!-- Template for the screen title when app permissions are reviewed on install. -->
<string name="permission_review_title_template_install">Choose what to allow
- <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> to access</string>
+ &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> to access</string>
<!-- Template for the screen title when app permissions are reviewed on update. -->
<string name="permission_review_title_template_update">
- <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> has been updated.
+ &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> has been updated.
Choose what to allow this app to access.</string>
<!-- Title for the dialog button to cancel the detailed permission review. -->
@@ -308,4 +334,46 @@
<!-- Help URL, application permissions [DO NOT TRANSLATE] -->
<string name="help_app_permissions" translatable="false"></string>
+ <!-- Text to show in warning dialog on the tablet when the app source is not trusted [CHAR LIMIT=NONE] -->
+ <string name="untrusted_external_source_warning" product="tablet">For your security, your tablet is not allowed to install unknown apps from this source.</string>
+
+ <!-- Text to show in warning dialog on the tv when the app source is not trusted [CHAR LIMIT=NONE] -->
+ <string name="untrusted_external_source_warning" product="tv">For your security, your TV is not allowed to install unknown apps from this source.</string>
+
+ <!-- Text to show in warning dialog on the phone when the app source is not trusted [CHAR LIMIT=NONE] -->
+ <string name="untrusted_external_source_warning" product="default">For your security, your phone is not allowed to install unknown apps from this source.</string>
+
+ <!-- Text to show in warning dialog on the phone when the app source cannot be identified [CHAR LIMIT=NONE] -->
+ <string name="anonymous_source_warning" product="default">
+ Your phone and personal data are more vulnerable
+ to attack by unknown apps. By installing this app, you
+ agree that you are responsible for any damage to your
+ phone or loss of data that may result from its use.
+ </string>
+
+ <!-- Text to show in warning dialog on the tablet when the app source cannot be identified [CHAR LIMIT=NONE] -->
+ <string name="anonymous_source_warning" product="tablet">
+ Your tablet and personal data are more vulnerable
+ to attack by unknown apps. By installing this app, you
+ agree that you are responsible for any damage to your
+ tablet or loss of data that may result from its use.
+ </string>
+
+ <!-- Text to show in warning dialog on the tv when the app source cannot be identified [CHAR LIMIT=NONE] -->
+ <string name="anonymous_source_warning" product="tv">
+ Your TV and personal data are more vulnerable
+ to attack by unknown apps. By installing this app, you
+ agree that you are responsible for any damage to your
+ TV or loss of data that may result from its use.
+ </string>
+
+ <!-- Label for button to continue install of an app whose source cannot be identified [CHAR LIMIT=40] -->
+ <string name="anonymous_source_continue">Continue</string>
+
+ <!-- Label for button to open manage external sources settings [CHAR LIMIT=45] -->
+ <string name="external_sources_settings">Settings</string>
+
+ <!-- Label for the notification channel containing notifications for embedded app operations [CHAR LIMIT=40] -->
+ <string name="wear_app_channel">Installing/uninstalling wear apps</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index fba01589..f79f98fe 100755
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -16,13 +16,6 @@
<resources>
- <style name="Theme.DialogWhenLarge"
- parent="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar">
- <item name="android:textAppearanceMedium">@style/MediumText</item>
- <item name="android:textAppearanceSmall">@style/SmallText</item>
- <item name="android:titleTextStyle">@style/TitleText</item>
- </style>
-
<style name="MediumText"
parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">?android:attr/textColorPrimary</item>
@@ -39,15 +32,6 @@
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
- <style name="Theme.AlertDialogActivity"
- parent="@android:style/Theme.DeviceDefault.Light.Panel">
- <item name="android:backgroundDimEnabled">true</item>
- </style>
-
- <style name="Theme.Header.Settings"
- parent="@android:style/Theme.DeviceDefault.Settings">
- </style>
-
<style name="ActionBar" parent="@android:style/Widget.Material.ActionBar.Solid">
<item name="android:contentInsetStart">72dp</item>
</style>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index db4b744e..a88674aa 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -33,4 +33,25 @@
<item name="android:windowBackground">@android:color/transparent</item>
</style>
+ <style name="DialogWhenLarge"
+ parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
+ <item name="android:textAppearanceMedium">@style/MediumText</item>
+ <item name="android:textAppearanceSmall">@style/SmallText</item>
+ <item name="android:titleTextStyle">@style/TitleText</item>
+ </style>
+
+ <style name="DialogWhenLargeNoAnimation" parent="DialogWhenLarge">
+ <item name="android:windowAnimationStyle">@null</item>
+ </style>
+
+ <style name="AlertDialogActivity"
+ parent="@android:style/Theme.DeviceDefault.Light.Panel">
+ <item name="android:backgroundDimEnabled">true</item>
+ </style>
+
+ <style name="Header.Settings"
+ parent="@android:style/Theme.DeviceDefault.Settings">
+ </style>
+
+
</resources>
diff --git a/src/com/android/packageinstaller/DeviceUtils.java b/src/com/android/packageinstaller/DeviceUtils.java
index 8e2d57ea..b54cad6f 100644
--- a/src/com/android/packageinstaller/DeviceUtils.java
+++ b/src/com/android/packageinstaller/DeviceUtils.java
@@ -29,4 +29,8 @@ public class DeviceUtils {
public static boolean isWear(final Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
}
+
+ public static boolean isAuto(Context context) {
+ return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
+ }
}
diff --git a/src/com/android/packageinstaller/EventResultPersister.java b/src/com/android/packageinstaller/EventResultPersister.java
new file mode 100644
index 00000000..87607266
--- /dev/null
+++ b/src/com/android/packageinstaller/EventResultPersister.java
@@ -0,0 +1,353 @@
+/*
+ * Copyright (C) 2016 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.Intent;
+import android.content.pm.PackageInstaller;
+import android.os.AsyncTask;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.util.AtomicFile;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.Xml;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Persists results of events and calls back observers when a matching result arrives.
+ */
+class EventResultPersister {
+ private static final String LOG_TAG = EventResultPersister.class.getSimpleName();
+
+ /** Id passed to {@link #addObserver(int, EventResultObserver)} to generate new id */
+ static final int GENERATE_NEW_ID = Integer.MIN_VALUE;
+
+ /**
+ * The extra with the id to set in the intent delivered to
+ * {@link #onEventReceived(Context, Intent)}
+ */
+ static final String EXTRA_ID = "EventResultPersister.EXTRA_ID";
+
+ /** Persisted state of this object */
+ private final AtomicFile mResultsFile;
+
+ private final Object mLock = new Object();
+
+ /** Currently stored but not yet called back results (install id -> status, status message) */
+ private final SparseArray<EventResult> mResults = new SparseArray<>();
+
+ /** Currently registered, not called back observers (install id -> observer) */
+ private final SparseArray<EventResultObserver> mObservers = new SparseArray<>();
+
+ /** Always increasing counter for install event ids */
+ private int mCounter;
+
+ /** If a write that will persist the state is scheduled */
+ private boolean mIsPersistScheduled;
+
+ /** If the state was changed while the data was being persisted */
+ private boolean mIsPersistingStateValid;
+
+ /**
+ * @return a new event id.
+ */
+ public int getNewId() throws OutOfIdsException {
+ synchronized (mLock) {
+ if (mCounter == Integer.MAX_VALUE) {
+ throw new OutOfIdsException();
+ }
+
+ mCounter++;
+ writeState();
+
+ return mCounter - 1;
+ }
+ }
+
+ /** Call back when a result is received. Observer is removed when onResult it called. */
+ interface EventResultObserver {
+ void onResult(int status, int legacyStatus, @Nullable String message);
+ }
+
+ /**
+ * Progress parser to the next element.
+ *
+ * @param parser The parser to progress
+ */
+ private static void nextElement(@NonNull XmlPullParser parser)
+ throws XmlPullParserException, IOException {
+ int type;
+ do {
+ type = parser.next();
+ } while (type != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT);
+ }
+
+ /**
+ * Read an int attribute from the current element
+ *
+ * @param parser The parser to read from
+ * @param name The attribute name to read
+ *
+ * @return The value of the attribute
+ */
+ private static int readIntAttribute(@NonNull XmlPullParser parser, @NonNull String name) {
+ return Integer.parseInt(parser.getAttributeValue(null, name));
+ }
+
+ /**
+ * Read an String attribute from the current element
+ *
+ * @param parser The parser to read from
+ * @param name The attribute name to read
+ *
+ * @return The value of the attribute or null if the attribute is not set
+ */
+ private static String readStringAttribute(@NonNull XmlPullParser parser, @NonNull String name) {
+ return parser.getAttributeValue(null, name);
+ }
+
+ /**
+ * Read persisted state.
+ *
+ * @param resultFile The file the results are persisted in
+ */
+ EventResultPersister(@NonNull File resultFile) {
+ mResultsFile = new AtomicFile(resultFile);
+ mCounter = GENERATE_NEW_ID + 1;
+
+ try (FileInputStream stream = mResultsFile.openRead()) {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
+
+ nextElement(parser);
+ while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
+ String tagName = parser.getName();
+ if ("results".equals(tagName)) {
+ mCounter = readIntAttribute(parser, "counter");
+ } else if ("result".equals(tagName)) {
+ int id = readIntAttribute(parser, "id");
+ int status = readIntAttribute(parser, "status");
+ int legacyStatus = readIntAttribute(parser, "legacyStatus");
+ String statusMessage = readStringAttribute(parser, "statusMessage");
+
+ if (mResults.get(id) != null) {
+ throw new Exception("id " + id + " has two results");
+ }
+
+ mResults.put(id, new EventResult(status, legacyStatus, statusMessage));
+ } else {
+ throw new Exception("unexpected tag");
+ }
+
+ nextElement(parser);
+ }
+ } catch (Exception e) {
+ mResults.clear();
+ writeState();
+ }
+ }
+
+ /**
+ * Add a result. If the result is an pending user action, execute the pending user action
+ * directly and do not queue a result.
+ *
+ * @param context The context the event was received in
+ * @param intent The intent the activity received
+ */
+ void onEventReceived(@NonNull Context context, @NonNull Intent intent) {
+ int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, 0);
+
+ if (status == PackageInstaller.STATUS_PENDING_USER_ACTION) {
+ context.startActivity(intent.getParcelableExtra(Intent.EXTRA_INTENT));
+
+ return;
+ }
+
+ int id = intent.getIntExtra(EXTRA_ID, 0);
+ String statusMessage = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE);
+ int legacyStatus = intent.getIntExtra(PackageInstaller.EXTRA_LEGACY_STATUS, 0);
+
+ EventResultObserver observerToCall = null;
+ synchronized (mLock) {
+ int numObservers = mObservers.size();
+ for (int i = 0; i < numObservers; i++) {
+ if (mObservers.keyAt(i) == id) {
+ observerToCall = mObservers.valueAt(i);
+ mObservers.removeAt(i);
+
+ break;
+ }
+ }
+
+ if (observerToCall != null) {
+ observerToCall.onResult(status, legacyStatus, statusMessage);
+ } else {
+ mResults.put(id, new EventResult(status, legacyStatus, statusMessage));
+ writeState();
+ }
+ }
+ }
+
+ /**
+ * Persist current state. The persistence might be delayed.
+ */
+ private void writeState() {
+ synchronized (mLock) {
+ mIsPersistingStateValid = false;
+
+ if (!mIsPersistScheduled) {
+ mIsPersistScheduled = true;
+
+ AsyncTask.execute(() -> {
+ int counter;
+ SparseArray<EventResult> results;
+
+ while (true) {
+ // Take snapshot of state
+ synchronized (mLock) {
+ counter = mCounter;
+ results = mResults.clone();
+ mIsPersistingStateValid = true;
+ }
+
+ FileOutputStream stream = null;
+ try {
+ stream = mResultsFile.startWrite();
+ XmlSerializer serializer = Xml.newSerializer();
+ serializer.setOutput(stream, StandardCharsets.UTF_8.name());
+ serializer.startDocument(null, true);
+ serializer.setFeature(
+ "http://xmlpull.org/v1/doc/features.html#indent-output", true);
+ serializer.startTag(null, "results");
+ serializer.attribute(null, "counter", Integer.toString(counter));
+
+ int numResults = results.size();
+ for (int i = 0; i < numResults; i++) {
+ serializer.startTag(null, "result");
+ serializer.attribute(null, "id",
+ Integer.toString(results.keyAt(i)));
+ serializer.attribute(null, "status",
+ Integer.toString(results.valueAt(i).status));
+ serializer.attribute(null, "legacyStatus",
+ Integer.toString(results.valueAt(i).legacyStatus));
+ if (results.valueAt(i).message != null) {
+ serializer.attribute(null, "statusMessage",
+ results.valueAt(i).message);
+ }
+ serializer.endTag(null, "result");
+ }
+
+ serializer.endTag(null, "results");
+ serializer.endDocument();
+
+ mResultsFile.finishWrite(stream);
+ } catch (IOException e) {
+ if (stream != null) {
+ mResultsFile.failWrite(stream);
+ }
+
+ Log.e(LOG_TAG, "error writing results", e);
+ mResultsFile.delete();
+ }
+
+ // Check if there was changed state since we persisted. If so, we need to
+ // persist again.
+ synchronized (mLock) {
+ if (mIsPersistingStateValid) {
+ mIsPersistScheduled = false;
+ break;
+ }
+ }
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * Add an observer. If there is already an event for this id, call back inside of this call.
+ *
+ * @param id The id the observer is for or {@code GENERATE_NEW_ID} to generate a new one.
+ * @param observer The observer to call back.
+ *
+ * @return The id for this event
+ */
+ int addObserver(int id, @NonNull EventResultObserver observer)
+ throws OutOfIdsException {
+ synchronized (mLock) {
+ int resultIndex = -1;
+
+ if (id == GENERATE_NEW_ID) {
+ id = getNewId();
+ } else {
+ resultIndex = mResults.indexOfKey(id);
+ }
+
+ // Check if we can instantly call back
+ if (resultIndex >= 0) {
+ EventResult result = mResults.valueAt(resultIndex);
+
+ observer.onResult(result.status, result.legacyStatus, result.message);
+ mResults.removeAt(resultIndex);
+ writeState();
+ } else {
+ mObservers.put(id, observer);
+ }
+ }
+
+
+ return id;
+ }
+
+ /**
+ * Remove a observer.
+ *
+ * @param id The id the observer was added for
+ */
+ void removeObserver(int id) {
+ synchronized (mLock) {
+ mObservers.delete(id);
+ }
+ }
+
+ /**
+ * The status from an event.
+ */
+ private class EventResult {
+ public final int status;
+ public final int legacyStatus;
+ @Nullable public final String message;
+
+ private EventResult(int status, int legacyStatus, @Nullable String message) {
+ this.status = status;
+ this.legacyStatus = legacyStatus;
+ this.message = message;
+ }
+ }
+
+ class OutOfIdsException extends Exception {}
+}
diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java
deleted file mode 100755
index 49d91cf1..00000000
--- a/src/com/android/packageinstaller/InstallAppProgress.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
-**
-** Copyright 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.
-*/
-package com.android.packageinstaller;
-
-import static android.content.pm.PackageInstaller.SessionParams.UID_UNKNOWN;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.PendingIntent;
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageInstaller;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.PackageParser;
-import android.content.pm.PackageParser.PackageLite;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Message;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import com.android.packageinstaller.permission.utils.IoUtils;
-
-import com.android.internal.content.PackageHelper;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-
-/**
- * This activity corresponds to a download progress screen that is displayed
- * when the user tries
- * to install an application bundled as an apk file. The result of the application install
- * is indicated in the result code that gets set to the corresponding installation status
- * codes defined in PackageManager. If the package being installed already exists,
- * the existing package is replaced with the new one.
- */
-public class InstallAppProgress extends Activity implements View.OnClickListener, OnCancelListener {
- private final String TAG="InstallAppProgress";
- private static final String BROADCAST_ACTION =
- "com.android.packageinstaller.ACTION_INSTALL_COMMIT";
- private static final String BROADCAST_SENDER_PERMISSION =
- "android.permission.INSTALL_PACKAGES";
- private ApplicationInfo mAppInfo;
- private Uri mPackageURI;
- private ProgressBar mProgressBar;
- private View mOkPanel;
- private TextView mStatusTextView;
- private TextView mExplanationTextView;
- private Button mDoneButton;
- private Button mLaunchButton;
- private final int INSTALL_COMPLETE = 1;
- private Intent mLaunchIntent;
- private static final int DLG_OUT_OF_SPACE = 1;
- private CharSequence mLabel;
- private HandlerThread mInstallThread;
- private Handler mInstallHandler;
-
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case INSTALL_COMPLETE:
- if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
- Intent result = new Intent();
- result.putExtra(Intent.EXTRA_INSTALL_RESULT, msg.arg1);
- setResult(msg.arg1 == PackageInstaller.STATUS_SUCCESS
- ? Activity.RESULT_OK : Activity.RESULT_FIRST_USER,
- result);
- clearCachedApkIfNeededAndFinish();
- return;
- }
- // Update the status text
- mProgressBar.setVisibility(View.GONE);
- // Show the ok button
- int centerTextLabel;
- int centerExplanationLabel = -1;
- if (msg.arg1 == PackageInstaller.STATUS_SUCCESS) {
- mLaunchButton.setVisibility(View.VISIBLE);
- ((ImageView)findViewById(R.id.center_icon))
- .setImageDrawable(getDrawable(R.drawable.ic_done_92));
- centerTextLabel = R.string.install_done;
- // Enable or disable launch button
- mLaunchIntent = getPackageManager().getLaunchIntentForPackage(
- mAppInfo.packageName);
- boolean enabled = false;
- if(mLaunchIntent != null) {
- List<ResolveInfo> list = getPackageManager().
- queryIntentActivities(mLaunchIntent, 0);
- if (list != null && list.size() > 0) {
- enabled = true;
- }
- }
- if (enabled) {
- mLaunchButton.setOnClickListener(InstallAppProgress.this);
- } else {
- mLaunchButton.setEnabled(false);
- }
- } else if (msg.arg1 == PackageInstaller.STATUS_FAILURE_STORAGE){
- showDialogInner(DLG_OUT_OF_SPACE);
- return;
- } else {
- // Generic error handling for all other error codes.
- ((ImageView)findViewById(R.id.center_icon))
- .setImageDrawable(getDrawable(R.drawable.ic_report_problem_92));
- centerExplanationLabel = getExplanationFromErrorCode(msg.arg1);
- centerTextLabel = R.string.install_failed;
- mLaunchButton.setVisibility(View.GONE);
- }
- if (centerExplanationLabel != -1) {
- mExplanationTextView.setText(centerExplanationLabel);
- findViewById(R.id.center_view).setVisibility(View.GONE);
- ((TextView)findViewById(R.id.explanation_status)).setText(centerTextLabel);
- findViewById(R.id.explanation_view).setVisibility(View.VISIBLE);
- } else {
- ((TextView)findViewById(R.id.center_text)).setText(centerTextLabel);
- findViewById(R.id.center_view).setVisibility(View.VISIBLE);
- findViewById(R.id.explanation_view).setVisibility(View.GONE);
- }
- mDoneButton.setOnClickListener(InstallAppProgress.this);
- mOkPanel.setVisibility(View.VISIBLE);
- break;
- default:
- break;
- }
- }
- };
-
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final int statusCode = intent.getIntExtra(
- PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE);
- if (statusCode == PackageInstaller.STATUS_PENDING_USER_ACTION) {
- context.startActivity((Intent)intent.getParcelableExtra(Intent.EXTRA_INTENT));
- } else {
- onPackageInstalled(statusCode);
- }
- }
- };
-
- private int getExplanationFromErrorCode(int errCode) {
- Log.d(TAG, "Installation error code: " + errCode);
- switch (errCode) {
- case PackageInstaller.STATUS_FAILURE_BLOCKED:
- return R.string.install_failed_blocked;
- case PackageInstaller.STATUS_FAILURE_CONFLICT:
- return R.string.install_failed_conflict;
- case PackageInstaller.STATUS_FAILURE_INCOMPATIBLE:
- return R.string.install_failed_incompatible;
- case PackageInstaller.STATUS_FAILURE_INVALID:
- return R.string.install_failed_invalid_apk;
- default:
- return -1;
- }
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- Intent intent = getIntent();
- mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
- mPackageURI = intent.getData();
-
- final String scheme = mPackageURI.getScheme();
- if (scheme != null && !"file".equals(scheme) && !"package".equals(scheme)) {
- throw new IllegalArgumentException("unexpected scheme " + scheme);
- }
-
- mInstallThread = new HandlerThread("InstallThread");
- mInstallThread.start();
- mInstallHandler = new Handler(mInstallThread.getLooper());
-
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(BROADCAST_ACTION);
- registerReceiver(
- mBroadcastReceiver, intentFilter, BROADCAST_SENDER_PERMISSION, null /*scheduler*/);
-
- initView();
- }
-
- @Override
- public void onBackPressed() {
- clearCachedApkIfNeededAndFinish();
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public Dialog onCreateDialog(int id, Bundle bundle) {
- switch (id) {
- case DLG_OUT_OF_SPACE:
- String dlgText = getString(R.string.out_of_space_dlg_text, mLabel);
- return new AlertDialog.Builder(this)
- .setTitle(R.string.out_of_space_dlg_title)
- .setMessage(dlgText)
- .setPositiveButton(R.string.manage_applications, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- //launch manage applications
- Intent intent = new Intent("android.intent.action.MANAGE_PACKAGE_STORAGE");
- startActivity(intent);
- clearCachedApkIfNeededAndFinish();
- }
- })
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Log.i(TAG, "Canceling installation");
- clearCachedApkIfNeededAndFinish();
- }
- })
- .setOnCancelListener(this)
- .create();
- }
- return null;
- }
-
- @SuppressWarnings("deprecation")
- private void showDialogInner(int id) {
- removeDialog(id);
- showDialog(id);
- }
-
- void onPackageInstalled(int statusCode) {
- Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
- msg.arg1 = statusCode;
- mHandler.sendMessage(msg);
- }
-
- int getInstallFlags(String packageName) {
- PackageManager pm = getPackageManager();
- try {
- PackageInfo pi =
- pm.getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
- if (pi != null) {
- return PackageManager.INSTALL_REPLACE_EXISTING;
- }
- } catch (NameNotFoundException e) {
- }
- return 0;
- }
-
- private void doPackageStage(PackageManager pm, PackageInstaller.SessionParams params) {
- final PackageInstaller packageInstaller = pm.getPackageInstaller();
- PackageInstaller.Session session = null;
- try {
- final String packageLocation = mPackageURI.getPath();
- final File file = new File(packageLocation);
- final int sessionId = packageInstaller.createSession(params);
- final byte[] buffer = new byte[65536];
-
- session = packageInstaller.openSession(sessionId);
-
- final InputStream in = new FileInputStream(file);
- final long sizeBytes = file.length();
- final OutputStream out = session.openWrite("PackageInstaller", 0, sizeBytes);
- try {
- int c;
- while ((c = in.read(buffer)) != -1) {
- out.write(buffer, 0, c);
- if (sizeBytes > 0) {
- final float fraction = ((float) c / (float) sizeBytes);
- session.addProgress(fraction);
- }
- }
- session.fsync(out);
- } finally {
- IoUtils.closeQuietly(in);
- IoUtils.closeQuietly(out);
- }
-
- // Create a PendingIntent and use it to generate the IntentSender
- Intent broadcastIntent = new Intent(BROADCAST_ACTION);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(
- InstallAppProgress.this /*context*/,
- sessionId,
- broadcastIntent,
- PendingIntent.FLAG_UPDATE_CURRENT);
- session.commit(pendingIntent.getIntentSender());
- } catch (IOException e) {
- onPackageInstalled(PackageInstaller.STATUS_FAILURE);
- } finally {
- IoUtils.closeQuietly(session);
- }
- }
-
- void initView() {
- setContentView(R.layout.op_progress);
-
- final PackageUtil.AppSnippet as;
- final PackageManager pm = getPackageManager();
- final int installFlags = getInstallFlags(mAppInfo.packageName);
-
- if((installFlags & PackageManager.INSTALL_REPLACE_EXISTING )!= 0) {
- Log.w(TAG, "Replacing package:" + mAppInfo.packageName);
- }
- if ("package".equals(mPackageURI.getScheme())) {
- as = new PackageUtil.AppSnippet(pm.getApplicationLabel(mAppInfo),
- pm.getApplicationIcon(mAppInfo));
- } else {
- final File sourceFile = new File(mPackageURI.getPath());
- as = PackageUtil.getAppSnippet(this, mAppInfo, sourceFile);
- }
- mLabel = as.label;
- PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
- mStatusTextView = (TextView)findViewById(R.id.center_text);
- mExplanationTextView = (TextView) findViewById(R.id.explanation);
- mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
- mProgressBar.setIndeterminate(true);
- // Hide button till progress is being displayed
- mOkPanel = findViewById(R.id.buttons_panel);
- mDoneButton = (Button)findViewById(R.id.done_button);
- mLaunchButton = (Button)findViewById(R.id.launch_button);
- mOkPanel.setVisibility(View.INVISIBLE);
-
- if ("package".equals(mPackageURI.getScheme())) {
- try {
- pm.installExistingPackage(mAppInfo.packageName);
- onPackageInstalled(PackageInstaller.STATUS_SUCCESS);
- } catch (PackageManager.NameNotFoundException e) {
- onPackageInstalled(PackageInstaller.STATUS_FAILURE_INVALID);
- }
- } else {
- final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
- PackageInstaller.SessionParams.MODE_FULL_INSTALL);
- params.referrerUri = getIntent().getParcelableExtra(Intent.EXTRA_REFERRER);
- params.originatingUri = getIntent().getParcelableExtra(Intent.EXTRA_ORIGINATING_URI);
- params.originatingUid = getIntent().getIntExtra(Intent.EXTRA_ORIGINATING_UID,
- UID_UNKNOWN);
-
- File file = new File(mPackageURI.getPath());
- try {
- PackageLite pkg = PackageParser.parsePackageLite(file, 0);
- params.setAppPackageName(pkg.packageName);
- params.setInstallLocation(pkg.installLocation);
- params.setSize(
- PackageHelper.calculateInstalledSize(pkg, false, params.abiOverride));
- } catch (PackageParser.PackageParserException e) {
- Log.e(TAG, "Cannot parse package " + file + ". Assuming defaults.");
- Log.e(TAG, "Cannot calculate installed size " + file + ". Try only apk size.");
- params.setSize(file.length());
- } catch (IOException e) {
- Log.e(TAG, "Cannot calculate installed size " + file + ". Try only apk size.");
- params.setSize(file.length());
- }
-
- mInstallHandler.post(new Runnable() {
- @Override
- public void run() {
- doPackageStage(pm, params);
- }
- });
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- unregisterReceiver(mBroadcastReceiver);
- mInstallThread.getLooper().quitSafely();
- }
-
- public void onClick(View v) {
- if(v == mDoneButton) {
- if (mAppInfo.packageName != null) {
- Log.i(TAG, "Finished installing "+mAppInfo.packageName);
- }
- clearCachedApkIfNeededAndFinish();
- } else if(v == mLaunchButton) {
- try {
- startActivity(mLaunchIntent);
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "Could not start activity", e);
- }
- clearCachedApkIfNeededAndFinish();
- }
- }
-
- public void onCancel(DialogInterface dialog) {
- clearCachedApkIfNeededAndFinish();
- }
-
- private void clearCachedApkIfNeededAndFinish() {
- // If we are installing from a content:// the apk is copied in the cache
- // dir and passed in here. As we aren't started for a result because our
- // caller needs to be able to forward the result, here we make sure the
- // staging file in the cache dir is removed.
- if ("file".equals(mPackageURI.getScheme()) && mPackageURI.getPath() != null
- && mPackageURI.getPath().startsWith(getCacheDir().toString())) {
- File file = new File(mPackageURI.getPath());
- file.delete();
- }
- finish();
- }
-}
diff --git a/src/com/android/packageinstaller/InstallEventReceiver.java b/src/com/android/packageinstaller/InstallEventReceiver.java
new file mode 100644
index 00000000..5ddfdd34
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallEventReceiver.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2016 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.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.NonNull;
+
+/**
+ * Receives install events and perists them using a {@link EventResultPersister}.
+ */
+public class InstallEventReceiver extends BroadcastReceiver {
+ private static final Object sLock = new Object();
+ private static EventResultPersister sReceiver;
+
+ /**
+ * Get the event receiver persisting the results
+ *
+ * @return The event receiver.
+ */
+ @NonNull private static EventResultPersister getReceiver(@NonNull Context context) {
+ synchronized (sLock) {
+ if (sReceiver == null) {
+ sReceiver = new EventResultPersister(
+ TemporaryFileManager.getInstallStateFile(context));
+ }
+ }
+
+ return sReceiver;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ getReceiver(context).onEventReceived(context, intent);
+ }
+
+ /**
+ * Add an observer. If there is already an event for this id, call back inside of this call.
+ *
+ * @param context A context of the current app
+ * @param id The id the observer is for or {@code GENERATE_NEW_ID} to generate a new one.
+ * @param observer The observer to call back.
+ *
+ * @return The id for this event
+ */
+ static int addObserver(@NonNull Context context, int id,
+ @NonNull EventResultPersister.EventResultObserver observer)
+ throws EventResultPersister.OutOfIdsException {
+ return getReceiver(context).addObserver(id, observer);
+ }
+
+ /**
+ * Remove a observer.
+ *
+ * @param context A context of the current app
+ * @param id The id the observer was added for
+ */
+ static void removeObserver(@NonNull Context context, int id) {
+ getReceiver(context).removeObserver(id);
+ }
+}
diff --git a/src/com/android/packageinstaller/InstallFailed.java b/src/com/android/packageinstaller/InstallFailed.java
new file mode 100644
index 00000000..a972fb0b
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallFailed.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2016 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.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.widget.TextView;
+
+import java.io.File;
+
+/**
+ * Installation failed: Return status code to the caller or display failure UI to user
+ */
+public class InstallFailed extends Activity {
+ private static final String LOG_TAG = InstallFailed.class.getSimpleName();
+
+ /** Label of the app that failed to install */
+ private CharSequence mLabel;
+
+ /**
+ * Convert an package installer status code into the user friendly label.
+ *
+ * @param statusCode The status code from the package installer.
+ *
+ * @return The user friendly label for the status code
+ */
+ private int getExplanationFromErrorCode(int statusCode) {
+ Log.d(LOG_TAG, "Installation status code: " + statusCode);
+
+ switch (statusCode) {
+ case PackageInstaller.STATUS_FAILURE_BLOCKED:
+ return R.string.install_failed_blocked;
+ case PackageInstaller.STATUS_FAILURE_CONFLICT:
+ return R.string.install_failed_conflict;
+ case PackageInstaller.STATUS_FAILURE_INCOMPATIBLE:
+ return R.string.install_failed_incompatible;
+ case PackageInstaller.STATUS_FAILURE_INVALID:
+ return R.string.install_failed_invalid_apk;
+ default:
+ return R.string.install_failed;
+ }
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ int statusCode = getIntent().getIntExtra(PackageInstaller.EXTRA_STATUS,
+ PackageInstaller.STATUS_FAILURE);
+
+ if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
+ int legacyStatus = getIntent().getIntExtra(PackageInstaller.EXTRA_LEGACY_STATUS,
+ PackageManager.INSTALL_FAILED_INTERNAL_ERROR);
+
+ // Return result if requested
+ Intent result = new Intent();
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT, legacyStatus);
+ setResult(Activity.RESULT_FIRST_USER, result);
+ finish();
+ } else {
+ Intent intent = getIntent();
+ ApplicationInfo appInfo = intent
+ .getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ Uri packageURI = intent.getData();
+
+ setContentView(R.layout.install_failed);
+
+ // Set header icon and title
+ PackageUtil.AppSnippet as;
+ PackageManager pm = getPackageManager();
+
+ if ("package".equals(packageURI.getScheme())) {
+ as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
+ pm.getApplicationIcon(appInfo));
+ } else {
+ final File sourceFile = new File(packageURI.getPath());
+ as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
+ }
+
+ // Store label for dialog
+ mLabel = as.label;
+
+ PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
+
+ // Show out of space dialog if needed
+ if (statusCode == PackageInstaller.STATUS_FAILURE_STORAGE) {
+ (new OutOfSpaceDialog()).show(getFragmentManager(), "outofspace");
+ }
+
+ // Get status messages
+ ((TextView) findViewById(R.id.simple_status)).setText(
+ getExplanationFromErrorCode(statusCode));
+
+ // Set up "done" button
+ findViewById(R.id.done_button).setOnClickListener(view -> finish());
+ }
+ }
+
+ /**
+ * Dialog shown when we ran out of space during installation. This contains a link to the
+ * "manage applications" settings page.
+ */
+ public static class OutOfSpaceDialog extends DialogFragment {
+ private InstallFailed mActivity;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ mActivity = (InstallFailed) context;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(mActivity)
+ .setTitle(R.string.out_of_space_dlg_title)
+ .setMessage(getString(R.string.out_of_space_dlg_text, mActivity.mLabel))
+ .setPositiveButton(R.string.manage_applications, (dialog, which) -> {
+ // launch manage applications
+ Intent intent = new Intent("android.intent.action.MANAGE_PACKAGE_STORAGE");
+ startActivity(intent);
+ mActivity.finish();
+ })
+ .setNegativeButton(R.string.cancel, (dialog, which) -> mActivity.finish())
+ .create();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+
+ mActivity.finish();
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/InstallInstalling.java b/src/com/android/packageinstaller/InstallInstalling.java
new file mode 100755
index 00000000..9f23e001
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallInstalling.java
@@ -0,0 +1,409 @@
+/*
+ * Copyright (C) 2016 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 static android.content.pm.PackageInstaller.SessionParams.UID_UNKNOWN;
+
+import android.app.Activity;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageParser;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.ProgressBar;
+
+import com.android.internal.content.PackageHelper;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Send package to the package manager and handle results from package manager. Once the
+ * installation succeeds, start {@link InstallSuccess} or {@link InstallFailed}.
+ * <p>This has two phases: First send the data to the package manager, then wait until the package
+ * manager processed the result.</p>
+ */
+public class InstallInstalling extends Activity {
+ private static final String LOG_TAG = InstallInstalling.class.getSimpleName();
+
+ private static final String SESSION_ID = "com.android.packageinstaller.SESSION_ID";
+ private static final String INSTALL_ID = "com.android.packageinstaller.INSTALL_ID";
+
+ private static final String BROADCAST_ACTION =
+ "com.android.packageinstaller.ACTION_INSTALL_COMMIT";
+
+ /** Listens to changed to the session and updates progress bar */
+ private PackageInstaller.SessionCallback mSessionCallback;
+
+ /** Task that sends the package to the package installer */
+ private InstallingAsyncTask mInstallingTask;
+
+ /** Id of the session to install the package */
+ private int mSessionId;
+
+ /** Id of the install event we wait for */
+ private int mInstallId;
+
+ /** URI of package to install */
+ private Uri mPackageURI;
+
+ /** The button that can cancel this dialog */
+ private Button mCancelButton;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.install_installing);
+
+ ApplicationInfo appInfo = getIntent()
+ .getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ mPackageURI = getIntent().getData();
+
+ if ("package".equals(mPackageURI.getScheme())) {
+ try {
+ getPackageManager().installExistingPackage(appInfo.packageName);
+ launchSuccess();
+ } catch (PackageManager.NameNotFoundException e) {
+ launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
+ }
+ } else {
+ final File sourceFile = new File(mPackageURI.getPath());
+ PackageUtil.initSnippetForNewApp(this, PackageUtil.getAppSnippet(this, appInfo,
+ sourceFile), R.id.app_snippet);
+
+ if (savedInstanceState != null) {
+ mSessionId = savedInstanceState.getInt(SESSION_ID);
+ mInstallId = savedInstanceState.getInt(INSTALL_ID);
+
+ // Reregister for result; might instantly call back if result was delivered while
+ // activity was destroyed
+ try {
+ InstallEventReceiver.addObserver(this, mInstallId,
+ this::launchFinishBasedOnResult);
+ } catch (EventResultPersister.OutOfIdsException e) {
+ // Does not happen
+ }
+ } else {
+ PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
+ PackageInstaller.SessionParams.MODE_FULL_INSTALL);
+ params.referrerUri = getIntent().getParcelableExtra(Intent.EXTRA_REFERRER);
+ params.originatingUri = getIntent()
+ .getParcelableExtra(Intent.EXTRA_ORIGINATING_URI);
+ params.originatingUid = getIntent().getIntExtra(Intent.EXTRA_ORIGINATING_UID,
+ UID_UNKNOWN);
+
+ File file = new File(mPackageURI.getPath());
+ try {
+ PackageParser.PackageLite pkg = PackageParser.parsePackageLite(file, 0);
+ params.setAppPackageName(pkg.packageName);
+ params.setInstallLocation(pkg.installLocation);
+ params.setSize(
+ PackageHelper.calculateInstalledSize(pkg, false, params.abiOverride));
+ } catch (PackageParser.PackageParserException e) {
+ Log.e(LOG_TAG, "Cannot parse package " + file + ". Assuming defaults.");
+ Log.e(LOG_TAG,
+ "Cannot calculate installed size " + file + ". Try only apk size.");
+ params.setSize(file.length());
+ } catch (IOException e) {
+ Log.e(LOG_TAG,
+ "Cannot calculate installed size " + file + ". Try only apk size.");
+ params.setSize(file.length());
+ }
+
+ try {
+ mInstallId = InstallEventReceiver
+ .addObserver(this, EventResultPersister.GENERATE_NEW_ID,
+ this::launchFinishBasedOnResult);
+ } catch (EventResultPersister.OutOfIdsException e) {
+ launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
+ }
+
+ try {
+ mSessionId = getPackageManager().getPackageInstaller().createSession(params);
+ } catch (IOException e) {
+ launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
+ }
+ }
+
+ mCancelButton = (Button) findViewById(R.id.cancel_button);
+
+ mCancelButton.setOnClickListener(view -> {
+ if (mInstallingTask != null) {
+ mInstallingTask.cancel(true);
+ }
+
+ if (mSessionId > 0) {
+ getPackageManager().getPackageInstaller().abandonSession(mSessionId);
+ mSessionId = 0;
+ }
+
+ setResult(RESULT_CANCELED);
+ finish();
+ });
+
+ mSessionCallback = new InstallSessionCallback();
+ }
+ }
+
+ /**
+ * Launch the "success" version of the final package installer dialog
+ */
+ private void launchSuccess() {
+ Intent successIntent = new Intent(getIntent());
+ successIntent.setClass(this, InstallSuccess.class);
+ successIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+ startActivity(successIntent);
+ finish();
+ }
+
+ /**
+ * Launch the "failure" version of the final package installer dialog
+ *
+ * @param legacyStatus The status as used internally in the package manager.
+ * @param statusMessage The status description.
+ */
+ private void launchFailure(int legacyStatus, String statusMessage) {
+ Intent failureIntent = new Intent(getIntent());
+ failureIntent.setClass(this, InstallFailed.class);
+ failureIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ failureIntent.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, legacyStatus);
+ failureIntent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, statusMessage);
+
+ startActivity(failureIntent);
+ finish();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+
+ getPackageManager().getPackageInstaller().registerSessionCallback(mSessionCallback);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // This is the first onResume in a single life of the activity
+ if (mInstallingTask == null) {
+ PackageInstaller installer = getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionInfo sessionInfo = installer.getSessionInfo(mSessionId);
+
+ if (sessionInfo != null && !sessionInfo.isActive()) {
+ mInstallingTask = new InstallingAsyncTask();
+ mInstallingTask.execute();
+ } else {
+ // we will receive a broadcast when the install is finished
+ mCancelButton.setEnabled(false);
+ setFinishOnTouchOutside(false);
+ }
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putInt(SESSION_ID, mSessionId);
+ outState.putInt(INSTALL_ID, mInstallId);
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mCancelButton.isEnabled()) {
+ super.onBackPressed();
+ }
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+
+ getPackageManager().getPackageInstaller().unregisterSessionCallback(mSessionCallback);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mInstallingTask != null) {
+ mInstallingTask.cancel(true);
+ synchronized (mInstallingTask) {
+ while (!mInstallingTask.isDone) {
+ try {
+ mInstallingTask.wait();
+ } catch (InterruptedException e) {
+ Log.i(LOG_TAG, "Interrupted while waiting for installing task to cancel",
+ e);
+ }
+ }
+ }
+ }
+
+ InstallEventReceiver.removeObserver(this, mInstallId);
+
+ super.onDestroy();
+ }
+
+ /**
+ * Launch the appropriate finish activity (success or failed) for the installation result.
+ *
+ * @param statusCode The installation result.
+ * @param legacyStatus The installation as used internally in the package manager.
+ * @param statusMessage The detailed installation result.
+ */
+ private void launchFinishBasedOnResult(int statusCode, int legacyStatus, String statusMessage) {
+ if (statusCode == PackageInstaller.STATUS_SUCCESS) {
+ launchSuccess();
+ } else {
+ launchFailure(legacyStatus, statusMessage);
+ }
+ }
+
+
+ private class InstallSessionCallback extends PackageInstaller.SessionCallback {
+ @Override
+ public void onCreated(int sessionId) {
+ // empty
+ }
+
+ @Override
+ public void onBadgingChanged(int sessionId) {
+ // empty
+ }
+
+ @Override
+ public void onActiveChanged(int sessionId, boolean active) {
+ // empty
+ }
+
+ @Override
+ public void onProgressChanged(int sessionId, float progress) {
+ if (sessionId == mSessionId) {
+ ProgressBar progressBar = (ProgressBar)findViewById(R.id.progress_bar);
+ progressBar.setMax(Integer.MAX_VALUE);
+ progressBar.setProgress((int) (Integer.MAX_VALUE * progress));
+ }
+ }
+
+ @Override
+ public void onFinished(int sessionId, boolean success) {
+ // empty, finish is handled by InstallResultReceiver
+ }
+ }
+
+ /**
+ * Send the package to the package installer and then register a event result observer that
+ * will call {@link #launchFinishBasedOnResult(int, int, String)}
+ */
+ private final class InstallingAsyncTask extends AsyncTask<Void, Void,
+ PackageInstaller.Session> {
+ volatile boolean isDone;
+
+ @Override
+ protected PackageInstaller.Session doInBackground(Void... params) {
+ PackageInstaller.Session session;
+ try {
+ session = getPackageManager().getPackageInstaller().openSession(mSessionId);
+ } catch (IOException e) {
+ return null;
+ }
+
+ session.setStagingProgress(0);
+
+ try {
+ File file = new File(mPackageURI.getPath());
+
+ try (InputStream in = new FileInputStream(file)) {
+ long sizeBytes = file.length();
+ try (OutputStream out = session
+ .openWrite("PackageInstaller", 0, sizeBytes)) {
+ byte[] buffer = new byte[4096];
+ while (true) {
+ int numRead = in.read(buffer);
+
+ if (numRead == -1) {
+ session.fsync(out);
+ break;
+ }
+
+ if (isCancelled()) {
+ session.close();
+ break;
+ }
+
+ out.write(buffer, 0, numRead);
+ if (sizeBytes > 0) {
+ float fraction = ((float) numRead / (float) sizeBytes);
+ session.addProgress(fraction);
+ }
+ }
+ }
+ }
+
+ return session;
+ } catch (IOException | SecurityException e) {
+ Log.e(LOG_TAG, "Could not write package", e);
+
+ session.close();
+
+ return null;
+ } finally {
+ synchronized (this) {
+ isDone = true;
+ notifyAll();
+ }
+ }
+ }
+
+ @Override
+ protected void onPostExecute(PackageInstaller.Session session) {
+ if (session != null) {
+ Intent broadcastIntent = new Intent(BROADCAST_ACTION);
+ broadcastIntent.setPackage(
+ getPackageManager().getPermissionControllerPackageName());
+ broadcastIntent.putExtra(EventResultPersister.EXTRA_ID, mInstallId);
+
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(
+ InstallInstalling.this,
+ mInstallId,
+ broadcastIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ session.commit(pendingIntent.getIntentSender());
+ mCancelButton.setEnabled(false);
+ setFinishOnTouchOutside(false);
+ } else {
+ getPackageManager().getPackageInstaller().abandonSession(mSessionId);
+
+ if (!isCancelled()) {
+ launchFailure(PackageManager.INSTALL_FAILED_INVALID_APK, null);
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/InstallStaging.java b/src/com/android/packageinstaller/InstallStaging.java
new file mode 100644
index 00000000..bf0a3ade
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallStaging.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2016 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.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * If a package gets installed from an content URI this step loads the package and turns it into
+ * and installation from a file. Then it re-starts the installation as usual.
+ */
+public class InstallStaging extends Activity {
+ private static final String LOG_TAG = InstallStaging.class.getSimpleName();
+
+ private static final String STAGED_FILE = "STAGED_FILE";
+
+ /** Currently running task that loads the file from the content URI into a file */
+ private @Nullable StagingAsyncTask mStagingTask;
+
+ /** The file the package is in */
+ private @Nullable File mStagedFile;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.install_staging);
+
+ if (savedInstanceState != null) {
+ mStagedFile = new File(savedInstanceState.getString(STAGED_FILE));
+
+ if (!mStagedFile.exists()) {
+ mStagedFile = null;
+ }
+ }
+
+ findViewById(R.id.cancel_button).setOnClickListener(view -> {
+ if (mStagingTask != null) {
+ mStagingTask.cancel(true);
+ }
+ setResult(RESULT_CANCELED);
+ finish();
+ });
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ setResult(resultCode, data);
+
+ if (mStagedFile != null) {
+ mStagedFile.delete();
+ }
+
+ // This is executed before onResume but after the mStagingTask completed, hence no need
+ // to deal with the task.
+ finish();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // This is the first onResume in a single life of the activity
+ if (mStagingTask == null) {
+ // File does not exist, or became invalid
+ if (mStagedFile == null) {
+ // Create file delayed to be able to show error
+ try {
+ mStagedFile = TemporaryFileManager.getStagedFile(this);
+ } catch (IOException e) {
+ showError();
+ return;
+ }
+ }
+
+ mStagingTask = new StagingAsyncTask();
+ mStagingTask.execute(getIntent().getData());
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putString(STAGED_FILE, mStagedFile.getPath());
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mStagingTask != null) {
+ mStagingTask.cancel(true);
+ }
+
+ super.onDestroy();
+ }
+
+ /**
+ * Show an error message and set result as error.
+ */
+ private void showError() {
+ (new ErrorDialog()).showAllowingStateLoss(getFragmentManager(), "error");
+
+ Intent result = new Intent();
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT,
+ PackageManager.INSTALL_FAILED_INVALID_APK);
+ setResult(RESULT_FIRST_USER, result);
+ }
+
+ /**
+ * Dialog for errors while staging.
+ */
+ public static class ErrorDialog extends DialogFragment {
+ private Activity mActivity;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ mActivity = (Activity) context;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog alertDialog = new AlertDialog.Builder(mActivity)
+ .setMessage(R.string.Parse_error_dlg_text)
+ .setPositiveButton(R.string.ok,
+ (dialog, which) -> mActivity.finish())
+ .create();
+ alertDialog.setCanceledOnTouchOutside(false);
+
+ return alertDialog;
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+
+ mActivity.finish();
+ }
+ }
+
+ private final class StagingAsyncTask extends AsyncTask<Uri, Void, Boolean> {
+ @Override
+ protected Boolean doInBackground(Uri... params) {
+ if (params == null || params.length <= 0) {
+ return false;
+ }
+ Uri packageUri = params[0];
+ try (InputStream in = getContentResolver().openInputStream(packageUri)) {
+ // Despite the comments in ContentResolver#openInputStream the returned stream can
+ // be null.
+ if (in == null) {
+ return false;
+ }
+
+ try (OutputStream out = new FileOutputStream(mStagedFile)) {
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ while ((bytesRead = in.read(buffer)) >= 0) {
+ // Be nice and respond to a cancellation
+ if (isCancelled()) {
+ return false;
+ }
+ out.write(buffer, 0, bytesRead);
+ }
+ }
+ } catch (IOException | SecurityException e) {
+ Log.w(LOG_TAG, "Error staging apk from content URI", e);
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if (success) {
+ // Now start the installation again from a file
+ Intent installIntent = new Intent(getIntent());
+ installIntent.setClass(InstallStaging.this, PackageInstallerActivity.class);
+ installIntent.setData(Uri.fromFile(mStagedFile));
+ installIntent
+ .setFlags(installIntent.getFlags() & ~Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ installIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ startActivityForResult(installIntent, 0);
+ } else {
+ showError();
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/InstallStart.java b/src/com/android/packageinstaller/InstallStart.java
new file mode 100644
index 00000000..80691f28
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallStart.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2016 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.Manifest;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AppGlobals;
+import android.app.IActivityManager;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Select which activity is the first visible activity of the installation and forward the intent to
+ * it.
+ */
+public class InstallStart extends Activity {
+ private static final String LOG_TAG = InstallStart.class.getSimpleName();
+
+ private static final String SCHEME_CONTENT = "content";
+ private static final String DOWNLOADS_AUTHORITY = "downloads";
+ private IActivityManager mIActivityManager;
+ private IPackageManager mIPackageManager;
+ private boolean mAbortInstall = false;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mIPackageManager = AppGlobals.getPackageManager();
+ Intent intent = getIntent();
+ String callingPackage = getCallingPackage();
+
+ // If the activity was started via a PackageInstaller session, we retrieve the calling
+ // package from that session
+ int sessionId = intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1);
+ if (callingPackage == null && sessionId != -1) {
+ PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId);
+ callingPackage = (sessionInfo != null) ? sessionInfo.getInstallerPackageName() : null;
+ }
+
+ final ApplicationInfo sourceInfo = getSourceInfo(callingPackage);
+ final int originatingUid = getOriginatingUid(sourceInfo);
+ boolean isTrustedSource = false;
+ if (sourceInfo != null
+ && (sourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
+ isTrustedSource = intent.getBooleanExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, false);
+ }
+
+ if (!isTrustedSource && originatingUid != PackageInstaller.SessionParams.UID_UNKNOWN) {
+ final int targetSdkVersion = getMaxTargetSdkVersionForUid(originatingUid);
+ if (targetSdkVersion < 0) {
+ Log.w(LOG_TAG, "Cannot get target sdk version for uid " + originatingUid);
+ // Invalid originating uid supplied. Abort install.
+ mAbortInstall = true;
+ } else if (targetSdkVersion >= Build.VERSION_CODES.O && !declaresAppOpPermission(
+ originatingUid, Manifest.permission.REQUEST_INSTALL_PACKAGES)) {
+ Log.e(LOG_TAG, "Requesting uid " + originatingUid + " needs to declare permission "
+ + Manifest.permission.REQUEST_INSTALL_PACKAGES);
+ mAbortInstall = true;
+ }
+ }
+ if (mAbortInstall) {
+ setResult(RESULT_CANCELED);
+ finish();
+ return;
+ }
+
+ Intent nextActivity = new Intent(intent);
+ nextActivity.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+ // The the installation source as the nextActivity thinks this activity is the source, hence
+ // set the originating UID and sourceInfo explicitly
+ nextActivity.putExtra(PackageInstallerActivity.EXTRA_CALLING_PACKAGE, callingPackage);
+ nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINAL_SOURCE_INFO, sourceInfo);
+ nextActivity.putExtra(Intent.EXTRA_ORIGINATING_UID, originatingUid);
+
+ if (PackageInstaller.ACTION_CONFIRM_PERMISSIONS.equals(intent.getAction())) {
+ nextActivity.setClass(this, PackageInstallerActivity.class);
+ } else {
+ Uri packageUri = intent.getData();
+
+ if (packageUri == null) {
+ // if there's nothing to do, quietly slip into the ether
+ Intent result = new Intent();
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT,
+ PackageManager.INSTALL_FAILED_INVALID_URI);
+ setResult(RESULT_FIRST_USER, result);
+
+ nextActivity = null;
+ } else {
+ if (packageUri.getScheme().equals(SCHEME_CONTENT)) {
+ nextActivity.setClass(this, InstallStaging.class);
+ } else {
+ nextActivity.setClass(this, PackageInstallerActivity.class);
+ }
+ }
+ }
+
+ if (nextActivity != null) {
+ startActivity(nextActivity);
+ }
+ finish();
+ }
+
+ private boolean declaresAppOpPermission(int uid, String permission) {
+ try {
+ final String[] packages = mIPackageManager.getAppOpPermissionPackages(permission);
+ for (String packageName : packages) {
+ try {
+ if (uid == getPackageManager().getPackageUid(packageName, 0)) {
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ // Ignore and try the next package
+ }
+ }
+ } catch (RemoteException rexc) {
+ // If remote package manager cannot be reached, install will likely fail anyway.
+ }
+ return false;
+ }
+
+ private int getMaxTargetSdkVersionForUid(int uid) {
+ final String[] packages = getPackageManager().getPackagesForUid(uid);
+ int targetSdkVersion = -1;
+ if (packages != null) {
+ for (String packageName : packages) {
+ try {
+ ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, 0);
+ targetSdkVersion = Math.max(targetSdkVersion, info.targetSdkVersion);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Ignore and try the next package
+ }
+ }
+ }
+ return targetSdkVersion;
+ }
+
+ /**
+ * @return the ApplicationInfo for the installation source (the calling package), if available
+ */
+ private ApplicationInfo getSourceInfo(@Nullable String callingPackage) {
+ if (callingPackage != null) {
+ try {
+ return getPackageManager().getApplicationInfo(callingPackage, 0);
+ } catch (PackageManager.NameNotFoundException ex) {
+ // ignore
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the originating uid if possible, or
+ * {@link android.content.pm.PackageInstaller.SessionParams#UID_UNKNOWN} if not available
+ *
+ * @param sourceInfo The source of this installation
+ * @return The UID of the installation source or UID_UNKNOWN
+ */
+ private int getOriginatingUid(@Nullable ApplicationInfo sourceInfo) {
+ // The originating uid from the intent. We only trust/use this if it comes from either
+ // the document manager app or the downloads provider
+ final int uidFromIntent = getIntent().getIntExtra(Intent.EXTRA_ORIGINATING_UID,
+ PackageInstaller.SessionParams.UID_UNKNOWN);
+
+ final int callingUid;
+ if (sourceInfo != null) {
+ callingUid = sourceInfo.uid;
+ } else {
+ try {
+ callingUid = getIActivityManager()
+ .getLaunchedFromUid(getActivityToken());
+ } catch (RemoteException ex) {
+ // Cannot reach ActivityManager. Aborting install.
+ Log.e(LOG_TAG, "Could not determine the launching uid.");
+ mAbortInstall = true;
+ return PackageInstaller.SessionParams.UID_UNKNOWN;
+ }
+ }
+ try {
+ if (mIPackageManager.checkUidPermission(Manifest.permission.MANAGE_DOCUMENTS,
+ callingUid) == PackageManager.PERMISSION_GRANTED) {
+ return uidFromIntent;
+ }
+ } catch (RemoteException rexc) {
+ // Ignore. Should not happen.
+ }
+ if (isSystemDownloadsProvider(callingUid)) {
+ return uidFromIntent;
+ }
+ // We don't trust uid from the intent. Use the calling uid instead.
+ return callingUid;
+ }
+
+ private boolean isSystemDownloadsProvider(int uid) {
+ final String downloadProviderPackage = getPackageManager().resolveContentProvider(
+ DOWNLOADS_AUTHORITY, 0).getComponentName().getPackageName();
+ if (downloadProviderPackage == null) {
+ return false;
+ }
+ try {
+ ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(
+ downloadProviderPackage, 0);
+ return (applicationInfo.isSystemApp() && uid == applicationInfo.uid);
+ } catch (PackageManager.NameNotFoundException ex) {
+ return false;
+ }
+ }
+
+ private IActivityManager getIActivityManager() {
+ if (mIActivityManager == null) {
+ return ActivityManager.getService();
+ }
+ return mIActivityManager;
+ }
+
+ @VisibleForTesting
+ void injectIActivityManager(IActivityManager iActivityManager) {
+ mIActivityManager = iActivityManager;
+ }
+}
diff --git a/src/com/android/packageinstaller/InstallSuccess.java b/src/com/android/packageinstaller/InstallSuccess.java
new file mode 100644
index 00000000..ce3612ca
--- /dev/null
+++ b/src/com/android/packageinstaller/InstallSuccess.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2016 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.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.widget.Button;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Finish installation: Return status code to the caller or display "success" UI to user
+ */
+public class InstallSuccess extends Activity {
+ private static final String LOG_TAG = InstallSuccess.class.getSimpleName();
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
+ // Return result if requested
+ Intent result = new Intent();
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT, PackageManager.INSTALL_SUCCEEDED);
+ setResult(Activity.RESULT_OK, result);
+ finish();
+ } else {
+ Intent intent = getIntent();
+ ApplicationInfo appInfo =
+ intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ Uri packageURI = intent.getData();
+
+ setContentView(R.layout.install_success);
+
+ // Set header icon and title
+ PackageUtil.AppSnippet as;
+ PackageManager pm = getPackageManager();
+
+ if ("package".equals(packageURI.getScheme())) {
+ as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
+ pm.getApplicationIcon(appInfo));
+ } else {
+ File sourceFile = new File(packageURI.getPath());
+ as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
+ }
+
+ PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
+
+ // Set up "done" button
+ findViewById(R.id.done_button).setOnClickListener(view -> {
+ if (appInfo.packageName != null) {
+ Log.i(LOG_TAG, "Finished installing " + appInfo.packageName);
+ }
+ finish();
+ });
+
+ // Enable or disable "launch" button
+ Intent launchIntent = getPackageManager().getLaunchIntentForPackage(
+ appInfo.packageName);
+ boolean enabled = false;
+ if (launchIntent != null) {
+ List<ResolveInfo> list = getPackageManager().queryIntentActivities(launchIntent,
+ 0);
+ if (list != null && list.size() > 0) {
+ enabled = true;
+ }
+ }
+
+ Button launchButton = (Button)findViewById(R.id.launch_button);
+ if (enabled) {
+ launchButton.setOnClickListener(view -> {
+ try {
+ startActivity(launchIntent);
+ } catch (ActivityNotFoundException | SecurityException e) {
+ Log.e(LOG_TAG, "Could not start activity", e);
+ }
+ finish();
+ });
+ } else {
+ launchButton.setEnabled(false);
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index de685825..48f2f901 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -16,30 +16,35 @@
*/
package com.android.packageinstaller;
-import android.app.Activity;
-import android.app.ActivityManagerNative;
+import android.Manifest;
import android.app.AlertDialog;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentTransaction;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageParser;
import android.content.pm.PackageUserState;
-import android.content.pm.VerificationParams;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Process;
+import android.os.RemoteException;
import android.os.UserManager;
import android.provider.Settings;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
@@ -48,18 +53,14 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AppSecurityPermissions;
import android.widget.Button;
-import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;
-import com.android.packageinstaller.permission.utils.Utils;
+
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-/*
+/**
* This activity is launched when a new application is installed via side loading
* The package is first parsed and the user is notified of parse errors via a dialog.
* If the package is successfully parsed, the user is notified to turn on the install unknown
@@ -69,42 +70,47 @@ import java.io.OutputStream;
* Based on the user response the package is then installed by launching InstallAppConfirm
* sub activity. All state transitions are handled in this activity
*/
-public class PackageInstallerActivity extends Activity implements OnCancelListener, OnClickListener {
+public class PackageInstallerActivity extends OverlayTouchActivity implements OnClickListener {
private static final String TAG = "PackageInstaller";
- private static final int REQUEST_ENABLE_UNKNOWN_SOURCES = 1;
+ private static final int REQUEST_TRUST_EXTERNAL_SOURCE = 1;
private static final String SCHEME_FILE = "file";
- private static final String SCHEME_CONTENT = "content";
private static final String SCHEME_PACKAGE = "package";
+ static final String EXTRA_CALLING_PACKAGE = "EXTRA_CALLING_PACKAGE";
+ static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO";
+ private static final String ALLOW_UNKNOWN_SOURCES_KEY =
+ PackageInstallerActivity.class.getName() + "ALLOW_UNKNOWN_SOURCES_KEY";
+
private int mSessionId = -1;
private Uri mPackageURI;
private Uri mOriginatingURI;
private Uri mReferrerURI;
- private int mOriginatingUid = VerificationParams.NO_UID;
- private File mContentUriApkStagingFile;
-
- private AsyncTask<Uri, Void, File> mStagingAsynTask;
+ private int mOriginatingUid = PackageInstaller.SessionParams.UID_UNKNOWN;
+ private String mOriginatingPackage; // The package name corresponding to #mOriginatingUid
private boolean localLOGV = false;
PackageManager mPm;
+ IPackageManager mIpm;
+ AppOpsManager mAppOpsManager;
UserManager mUserManager;
PackageInstaller mInstaller;
PackageInfo mPkgInfo;
+ String mCallingPackage;
ApplicationInfo mSourceInfo;
// ApplicationInfo object primarily used for already existing applications
private ApplicationInfo mAppInfo = null;
- // View for install progress
- View mInstallConfirm;
// Buttons to indicate user acceptance
private Button mOk;
private Button mCancel;
CaffeinatedScrollView mScrollView = null;
private boolean mOkCanInstall = false;
+ private PackageUtil.AppSnippet mAppSnippet;
+
static final String PREFS_ALLOWED_SOURCES = "allowed_sources";
private static final String TAB_ID_ALL = "all";
@@ -112,20 +118,32 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
// Dialog identifiers used in showDialog
private static final int DLG_BASE = 0;
- private static final int DLG_UNKNOWN_SOURCES = DLG_BASE + 1;
private static final int DLG_PACKAGE_ERROR = DLG_BASE + 2;
private static final int DLG_OUT_OF_SPACE = DLG_BASE + 3;
private static final int DLG_INSTALL_ERROR = DLG_BASE + 4;
- private static final int DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES = DLG_BASE + 6;
+ private static final int DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER = DLG_BASE + 5;
+ private static final int DLG_ANONYMOUS_SOURCE = DLG_BASE + 6;
private static final int DLG_NOT_SUPPORTED_ON_WEAR = DLG_BASE + 7;
+ private static final int DLG_EXTERNAL_SOURCE_BLOCKED = DLG_BASE + 8;
+
+ // If unknown sources are temporary allowed
+ private boolean mAllowUnknownSources;
+
+ // Would the mOk button be enabled if this activity would be resumed
+ private boolean mEnableOk;
private void startInstallConfirm() {
+ // We might need to show permissions, load layout with permissions
+ if (mAppInfo != null) {
+ bindUi(R.layout.install_confirm_perm_update, true);
+ } else {
+ bindUi(R.layout.install_confirm_perm, true);
+ }
+
((TextView) findViewById(R.id.install_confirm_question))
.setText(R.string.install_confirm_question);
- findViewById(R.id.spacer).setVisibility(View.GONE);
TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.setup();
- tabHost.setVisibility(View.VISIBLE);
ViewPager viewPager = (ViewPager)findViewById(R.id.pager);
TabsAdapter adapter = new TabsAdapter(this, tabHost, viewPager);
// If the app supports runtime permissions the new permissions will
@@ -164,9 +182,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
}
adapter.addTab(tabHost.newTabSpec(TAB_ID_NEW).setIndicator(
getText(R.string.newPerms)), mScrollView);
- } else {
- findViewById(R.id.tabscontainer).setVisibility(View.GONE);
- findViewById(R.id.spacer).setVisibility(View.VISIBLE);
}
if (!supportsRuntimePermissions && N > 0) {
permVisible = true;
@@ -188,20 +203,18 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
? R.string.install_confirm_question_update_system_no_perms
: R.string.install_confirm_question_update_no_perms;
-
- findViewById(R.id.spacer).setVisibility(View.VISIBLE);
} else {
// This is a new application with no permissions.
msg = R.string.install_confirm_question_no_perms;
}
- tabHost.setVisibility(View.INVISIBLE);
+
+ // We do not need to show any permissions, load layout without permissions
+ bindUi(R.layout.install_confirm, true);
mScrollView = null;
}
if (msg != 0) {
((TextView)findViewById(R.id.install_confirm_question)).setText(msg);
}
- mInstallConfirm.setVisibility(View.VISIBLE);
- mOk.setEnabled(true);
if (mScrollView == null) {
// There is nothing to scroll view, so the ok button is immediately
// set to install.
@@ -218,147 +231,107 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
}
}
+ /**
+ * Replace any dialog shown by the dialog with the one for the given {@link #createDialog id}.
+ *
+ * @param id The dialog type to add
+ */
private void showDialogInner(int id) {
- // TODO better fix for this? Remove dialog so that it gets created again
- removeDialog(id);
- showDialog(id);
- }
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
- @Override
- public Dialog onCreateDialog(int id, Bundle bundle) {
- switch (id) {
- case DLG_UNKNOWN_SOURCES:
- return new AlertDialog.Builder(this)
- .setMessage(R.string.unknown_apps_dlg_text)
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Log.i(TAG, "Finishing off activity so that user can navigate to settings manually");
- finishAffinity();
- }})
- .setPositiveButton(R.string.settings, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Log.i(TAG, "Launching settings");
- launchSecuritySettings();
- }
- })
- .setOnCancelListener(this)
- .create();
- case DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES:
- return new AlertDialog.Builder(this)
- .setMessage(R.string.unknown_apps_admin_dlg_text)
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- finish();
- }
- })
- .setOnCancelListener(this)
- .create();
- case DLG_PACKAGE_ERROR :
- return new AlertDialog.Builder(this)
- .setMessage(R.string.Parse_error_dlg_text)
- .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- finish();
- }
- })
- .setOnCancelListener(this)
- .create();
- case DLG_OUT_OF_SPACE:
- // Guaranteed not to be null. will default to package name if not set by app
- CharSequence appTitle = mPm.getApplicationLabel(mPkgInfo.applicationInfo);
- String dlgText = getString(R.string.out_of_space_dlg_text,
- appTitle.toString());
- return new AlertDialog.Builder(this)
- .setMessage(dlgText)
- .setPositiveButton(R.string.manage_applications, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- //launch manage applications
- Intent intent = new Intent("android.intent.action.MANAGE_PACKAGE_STORAGE");
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- finish();
- }
- })
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Log.i(TAG, "Canceling installation");
- finish();
- }
- })
- .setOnCancelListener(this)
- .create();
- case DLG_INSTALL_ERROR :
- // Guaranteed not to be null. will default to package name if not set by app
- CharSequence appTitle1 = mPm.getApplicationLabel(mPkgInfo.applicationInfo);
- String dlgText1 = getString(R.string.install_failed_msg,
- appTitle1.toString());
- return new AlertDialog.Builder(this)
- .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- finish();
- }
- })
- .setMessage(dlgText1)
- .setOnCancelListener(this)
- .create();
- case DLG_NOT_SUPPORTED_ON_WEAR:
- return new AlertDialog.Builder(this)
- .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);
- clearCachedApkIfNeededAndFinish();
- }
- })
- .setOnCancelListener(this)
- .create();
- }
- return null;
+ Fragment currentDialog = getFragmentManager().findFragmentByTag("dialog");
+ if (currentDialog != null) {
+ transaction.remove(currentDialog);
+ }
+
+ Fragment newDialog = createDialog(id);
+
+ if (newDialog != null) {
+ transaction.add(newDialog, "dialog");
+ }
+
+ transaction.commitNowAllowingStateLoss();
}
- private void launchSecuritySettings() {
- Intent launchSettingsIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
- startActivityForResult(launchSettingsIntent, REQUEST_ENABLE_UNKNOWN_SOURCES);
+ /**
+ * Create a new dialog.
+ *
+ * @param id The id of the dialog (determines dialog type)
+ *
+ * @return The dialog
+ */
+ private DialogFragment createDialog(int id) {
+ switch (id) {
+ case DLG_PACKAGE_ERROR:
+ return SimpleErrorDialog.newInstance(R.string.Parse_error_dlg_text);
+ case DLG_OUT_OF_SPACE:
+ return OutOfSpaceDialog.newInstance(
+ mPm.getApplicationLabel(mPkgInfo.applicationInfo));
+ case DLG_INSTALL_ERROR:
+ return InstallErrorDialog.newInstance(
+ mPm.getApplicationLabel(mPkgInfo.applicationInfo));
+ case DLG_NOT_SUPPORTED_ON_WEAR:
+ return NotSupportedOnWearDialog.newInstance();
+ case DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER:
+ return SimpleErrorDialog.newInstance(
+ R.string.unknown_apps_user_restriction_dlg_text);
+ case DLG_EXTERNAL_SOURCE_BLOCKED:
+ return ExternalSourcesBlockedDialog.newInstance(mOriginatingPackage);
+ case DLG_ANONYMOUS_SOURCE:
+ return AnonymousSourceDialog.newInstance();
+ }
+ return null;
}
@Override
public void onActivityResult(int request, int result, Intent data) {
- // If the settings app approved the install we are good to go regardless
- // whether the untrusted sources setting is on. This allows partners to
- // implement a "allow untrusted source once" feature.
- if (request == REQUEST_ENABLE_UNKNOWN_SOURCES && result == RESULT_OK) {
- checkIfAllowedAndInitiateInstall(true);
+ // currently just a hook for partners to implement "allow once" feature
+ // TODO: Use this to resume install request when user has explicitly trusted the source
+ // by changing the settings
+ if (request == REQUEST_TRUST_EXTERNAL_SOURCE && result == RESULT_OK) {
+ mAllowUnknownSources = true;
+
+ Fragment currentDialog = getFragmentManager().findFragmentByTag("dialog");
+ if (currentDialog != null) {
+ getFragmentManager().beginTransaction().remove(currentDialog).commit();
+ }
+
+ initiateInstall();
} else {
- clearCachedApkIfNeededAndFinish();
+ finish();
}
}
- private boolean isInstallRequestFromUnknownSource(Intent intent) {
- String callerPackage = getCallingPackage();
- if (callerPackage != null && intent.getBooleanExtra(
- Intent.EXTRA_NOT_UNKNOWN_SOURCE, false)) {
- try {
- mSourceInfo = mPm.getApplicationInfo(callerPackage, 0);
- if (mSourceInfo != null) {
- if ((mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
- != 0) {
- // Privileged apps are not considered an unknown source.
- return false;
+ private String getPackageNameForUid(int sourceUid) {
+ String[] packagesForUid = mPm.getPackagesForUid(sourceUid);
+ if (packagesForUid == null) {
+ return null;
+ }
+ if (packagesForUid.length > 1) {
+ if (mCallingPackage != null) {
+ for (String packageName : packagesForUid) {
+ if (packageName.equals(mCallingPackage)) {
+ return packageName;
}
}
- } catch (NameNotFoundException e) {
}
+ Log.i(TAG, "Multiple packages found for source uid " + sourceUid);
}
-
- return true;
+ return packagesForUid[0];
}
- /**
- * @return whether unknown sources is enabled by user in Settings
- */
- private boolean isUnknownSourcesEnabled() {
- return Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.INSTALL_NON_MARKET_APPS, 0) > 0;
+ private boolean isInstallRequestFromUnknownSource(Intent intent) {
+ if (mCallingPackage != null && intent.getBooleanExtra(
+ Intent.EXTRA_NOT_UNKNOWN_SOURCE, false)) {
+ if (mSourceInfo != null) {
+ if ((mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
+ != 0) {
+ // Privileged apps can bypass unknown sources check if they want.
+ return false;
+ }
+ }
+ }
+ return true;
}
/**
@@ -384,7 +357,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
// apps, but this may include apps with just data, and if it is just
// data we still want to count it as "installed".
mAppInfo = mPm.getApplicationInfo(pkgName,
- PackageManager.GET_UNINSTALLED_PACKAGES);
+ PackageManager.MATCH_UNINSTALLED_PACKAGES);
if ((mAppInfo.flags&ApplicationInfo.FLAG_INSTALLED) == 0) {
mAppInfo = null;
}
@@ -406,12 +379,25 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ if (icicle != null) {
+ mAllowUnknownSources = icicle.getBoolean(ALLOW_UNKNOWN_SOURCES_KEY);
+ }
+
mPm = getPackageManager();
+ mIpm = AppGlobals.getPackageManager();
+ mAppOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
mInstaller = mPm.getPackageInstaller();
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
final Intent intent = getIntent();
- mOriginatingUid = getOriginatingUid(intent);
+
+ mCallingPackage = intent.getStringExtra(EXTRA_CALLING_PACKAGE);
+ mSourceInfo = intent.getParcelableExtra(EXTRA_ORIGINAL_SOURCE_INFO);
+ mOriginatingUid = intent.getIntExtra(Intent.EXTRA_ORIGINATING_UID,
+ PackageInstaller.SessionParams.UID_UNKNOWN);
+ mOriginatingPackage = (mOriginatingUid != PackageInstaller.SessionParams.UID_UNKNOWN)
+ ? getPackageNameForUid(mOriginatingUid) : null;
+
final Uri packageUri;
@@ -448,74 +434,118 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
return;
}
- //set view
- setContentView(R.layout.install_start);
- mInstallConfirm = findViewById(R.id.install_confirm_panel);
- mInstallConfirm.setVisibility(View.INVISIBLE);
- mOk = (Button)findViewById(R.id.ok_button);
- mCancel = (Button)findViewById(R.id.cancel_button);
- mOk.setOnClickListener(this);
- mCancel.setOnClickListener(this);
-
boolean wasSetUp = processPackageUri(packageUri);
if (!wasSetUp) {
return;
}
- checkIfAllowedAndInitiateInstall(false);
+ // load dummy layout with OK button disabled until we override this layout in
+ // startInstallConfirm
+ bindUi(R.layout.install_confirm, false);
+ checkIfAllowedAndInitiateInstall();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ if (mOk != null) {
+ mOk.setEnabled(mEnableOk);
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ if (mOk != null) {
+ // Don't allow the install button to be clicked as there might be overlays
+ mOk.setEnabled(false);
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putBoolean(ALLOW_UNKNOWN_SOURCES_KEY, mAllowUnknownSources);
+ }
+
+ private void bindUi(int layout, boolean enableOk) {
+ setContentView(layout);
+
+ mOk = (Button) findViewById(R.id.ok_button);
+ mCancel = (Button)findViewById(R.id.cancel_button);
+ mOk.setOnClickListener(this);
+ mCancel.setOnClickListener(this);
+
+ mEnableOk = enableOk;
+ mOk.setEnabled(enableOk);
+
+ PackageUtil.initSnippetForNewApp(this, mAppSnippet, R.id.app_snippet);
}
/**
* Check if it is allowed to install the package and initiate install if allowed. If not allowed
* show the appropriate dialog.
- *
- * @param ignoreUnknownSourcesSettings Ignore {@link #isUnknownSourcesEnabled()} and proceed
- * even if this would prevented installation.
*/
- private void checkIfAllowedAndInitiateInstall(boolean ignoreUnknownSourcesSettings) {
- // Block the install attempt on the Unknown Sources setting if necessary.
- final boolean requestFromUnknownSource = isInstallRequestFromUnknownSource(getIntent());
- if (!requestFromUnknownSource) {
+ private void checkIfAllowedAndInitiateInstall() {
+ if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent())) {
initiateInstall();
return;
}
-
- // If the admin prohibits it, or we're running in a managed profile, just show error
- // and exit. Otherwise show an option to take the user to Settings to change the setting.
- final boolean isManagedProfile = mUserManager.isManagedProfile();
+ // If the admin prohibits it, just show error and exit.
if (isUnknownSourcesDisallowed()) {
if ((mUserManager.getUserRestrictionSource(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES,
Process.myUserHandle()) & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) {
- if (ignoreUnknownSourcesSettings) {
- initiateInstall();
- } else {
- showDialogInner(DLG_UNKNOWN_SOURCES);
- }
+ // Someone set user restriction via UserManager#setUserRestriction. We don't want to
+ // break apps that might already be doing this
+ showDialogInner(DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER);
+ return;
} else {
startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS));
- clearCachedApkIfNeededAndFinish();
- }
- } else if (!isUnknownSourcesEnabled() && isManagedProfile) {
- showDialogInner(DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES);
- } else if (!isUnknownSourcesEnabled()) {
- if (ignoreUnknownSourcesSettings) {
- initiateInstall();
- } else {
- // Ask user to enable setting first
- showDialogInner(DLG_UNKNOWN_SOURCES);
+ finish();
}
} else {
- initiateInstall();
+ handleUnknownSources();
}
}
- @Override
- protected void onDestroy() {
- if (mStagingAsynTask != null) {
- mStagingAsynTask.cancel(true);
- mStagingAsynTask = null;
+ private void handleUnknownSources() {
+ if (mOriginatingPackage == null) {
+ Log.i(TAG, "No source found for package " + mPkgInfo.packageName);
+ showDialogInner(DLG_ANONYMOUS_SOURCE);
+ return;
+ }
+ int appOpMode = mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
+ mOriginatingUid, mOriginatingPackage);
+ switch (appOpMode) {
+ case AppOpsManager.MODE_DEFAULT:
+ try {
+ int result = mIpm.checkUidPermission(
+ Manifest.permission.REQUEST_INSTALL_PACKAGES, mOriginatingUid);
+ if (result == PackageManager.PERMISSION_GRANTED) {
+ initiateInstall();
+ break;
+ }
+ } catch (RemoteException exc) {
+ Log.e(TAG, "Unable to talk to package manager");
+ }
+ mAppOpsManager.setMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES, mOriginatingUid,
+ mOriginatingPackage, AppOpsManager.MODE_ERRORED);
+ // fall through
+ case AppOpsManager.MODE_ERRORED:
+ showDialogInner(DLG_EXTERNAL_SOURCE_BLOCKED);
+ break;
+ case AppOpsManager.MODE_ALLOWED:
+ initiateInstall();
+ break;
+ default:
+ Log.e(TAG, "Invalid app op mode " + appOpMode
+ + " for OP_REQUEST_INSTALL_PACKAGES found for uid " + mOriginatingUid);
+ finish();
+ break;
}
- super.onDestroy();
}
/**
@@ -529,14 +559,13 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
mPackageURI = packageUri;
final String scheme = packageUri.getScheme();
- final PackageUtil.AppSnippet as;
switch (scheme) {
case SCHEME_PACKAGE: {
try {
mPkgInfo = mPm.getPackageInfo(packageUri.getSchemeSpecificPart(),
PackageManager.GET_PERMISSIONS
- | PackageManager.GET_UNINSTALLED_PACKAGES);
+ | PackageManager.MATCH_UNINSTALLED_PACKAGES);
} catch (NameNotFoundException e) {
}
if (mPkgInfo == null) {
@@ -546,13 +575,13 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK);
return false;
}
- as = new PackageUtil.AppSnippet(mPm.getApplicationLabel(mPkgInfo.applicationInfo),
+ mAppSnippet = new PackageUtil.AppSnippet(mPm.getApplicationLabel(mPkgInfo.applicationInfo),
mPm.getApplicationIcon(mPkgInfo.applicationInfo));
} break;
case SCHEME_FILE: {
File sourceFile = new File(packageUri.getPath());
- PackageParser.Package parsed = PackageUtil.getPackageInfo(sourceFile);
+ PackageParser.Package parsed = PackageUtil.getPackageInfo(this, sourceFile);
// Check for parse errors
if (parsed == null) {
@@ -564,100 +593,20 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
mPkgInfo = PackageParser.generatePackageInfo(parsed, null,
PackageManager.GET_PERMISSIONS, 0, 0, null,
new PackageUserState());
- as = PackageUtil.getAppSnippet(this, mPkgInfo.applicationInfo, sourceFile);
+ mAppSnippet = PackageUtil.getAppSnippet(this, mPkgInfo.applicationInfo, sourceFile);
} break;
- case SCHEME_CONTENT: {
- mStagingAsynTask = new StagingAsyncTask();
- mStagingAsynTask.execute(packageUri);
- return false;
- }
-
default: {
Log.w(TAG, "Unsupported scheme " + scheme);
setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI);
- clearCachedApkIfNeededAndFinish();
+ finish();
return false;
}
}
- PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
-
return true;
}
- /** Get the ApplicationInfo for the calling package, if available */
- private ApplicationInfo getSourceInfo() {
- String callingPackage = getCallingPackage();
- if (callingPackage != null) {
- try {
- return mPm.getApplicationInfo(callingPackage, 0);
- } catch (NameNotFoundException ex) {
- // ignore
- }
- }
- return null;
- }
-
-
- /** Get the originating uid if possible, or VerificationParams.NO_UID if not available */
- private int getOriginatingUid(Intent intent) {
- // The originating uid from the intent. We only trust/use this if it comes from a
- // system application
- int uidFromIntent = intent.getIntExtra(Intent.EXTRA_ORIGINATING_UID,
- VerificationParams.NO_UID);
-
- // Get the source info from the calling package, if available. This will be the
- // definitive calling package, but it only works if the intent was started using
- // startActivityForResult,
- ApplicationInfo sourceInfo = getSourceInfo();
- if (sourceInfo != null) {
- if (uidFromIntent != VerificationParams.NO_UID &&
- (mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
- return uidFromIntent;
-
- }
- // We either didn't get a uid in the intent, or we don't trust it. Use the
- // uid of the calling package instead.
- return sourceInfo.uid;
- }
-
- // We couldn't get the specific calling package. Let's get the uid instead
- int callingUid;
- try {
- callingUid = ActivityManagerNative.getDefault()
- .getLaunchedFromUid(getActivityToken());
- } catch (android.os.RemoteException ex) {
- Log.w(TAG, "Could not determine the launching uid.");
- // nothing else we can do
- return VerificationParams.NO_UID;
- }
-
- // If we got a uid from the intent, we need to verify that the caller is a
- // privileged system package before we use it
- if (uidFromIntent != VerificationParams.NO_UID) {
- String[] callingPackages = mPm.getPackagesForUid(callingUid);
- if (callingPackages != null) {
- for (String packageName: callingPackages) {
- try {
- ApplicationInfo applicationInfo =
- mPm.getApplicationInfo(packageName, 0);
-
- if ((applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
- != 0) {
- return uidFromIntent;
- }
- } catch (NameNotFoundException ex) {
- // ignore it, and try the next package
- }
- }
- }
- }
- // We either didn't get a uid from the intent, or we don't trust it. Use the
- // calling uid instead.
- return callingUid;
- }
-
@Override
public void onBackPressed() {
if (mSessionId != -1) {
@@ -666,22 +615,19 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
super.onBackPressed();
}
- // Generic handling when pressing back key
- public void onCancel(DialogInterface dialog) {
- clearCachedApkIfNeededAndFinish();
- }
-
public void onClick(View v) {
if (v == mOk) {
- if (mOkCanInstall || mScrollView == null) {
- if (mSessionId != -1) {
- mInstaller.setPermissionsResult(mSessionId, true);
- clearCachedApkIfNeededAndFinish();
+ if (mOk.isEnabled()) {
+ if (mOkCanInstall || mScrollView == null) {
+ if (mSessionId != -1) {
+ mInstaller.setPermissionsResult(mSessionId, true);
+ finish();
+ } else {
+ startInstall();
+ }
} else {
- startInstall();
+ mScrollView.pageScroll(View.FOCUS_DOWN);
}
- } else {
- mScrollView.pageScroll(View.FOCUS_DOWN);
}
} else if (v == mCancel) {
// Cancel and finish
@@ -689,7 +635,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
if (mSessionId != -1) {
mInstaller.setPermissionsResult(mSessionId, false);
}
- clearCachedApkIfNeededAndFinish();
+ finish();
}
}
@@ -699,7 +645,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,
mPkgInfo.applicationInfo);
newIntent.setData(mPackageURI);
- newIntent.setClass(this, InstallAppProgress.class);
+ newIntent.setClass(this, InstallInstalling.class);
String installerPackageName = getIntent().getStringExtra(
Intent.EXTRA_INSTALLER_PACKAGE_NAME);
if (mOriginatingURI != null) {
@@ -708,7 +654,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
if (mReferrerURI != null) {
newIntent.putExtra(Intent.EXTRA_REFERRER, mReferrerURI);
}
- if (mOriginatingUid != VerificationParams.NO_UID) {
+ if (mOriginatingUid != PackageInstaller.SessionParams.UID_UNKNOWN) {
newIntent.putExtra(Intent.EXTRA_ORIGINATING_UID, mOriginatingUid);
}
if (installerPackageName != null) {
@@ -724,101 +670,182 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
finish();
}
- private void clearCachedApkIfNeededAndFinish() {
- if (mContentUriApkStagingFile != null) {
- mContentUriApkStagingFile.delete();
- mContentUriApkStagingFile = null;
+ /**
+ * A simple error dialog showing a message
+ */
+ public static class SimpleErrorDialog extends DialogFragment {
+ private static final String MESSAGE_KEY =
+ SimpleErrorDialog.class.getName() + "MESSAGE_KEY";
+
+ static SimpleErrorDialog newInstance(@StringRes int message) {
+ SimpleErrorDialog dialog = new SimpleErrorDialog();
+
+ Bundle args = new Bundle();
+ args.putInt(MESSAGE_KEY, message);
+ dialog.setArguments(args);
+
+ return dialog;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(getArguments().getInt(MESSAGE_KEY))
+ .setPositiveButton(R.string.ok, (dialog, which) -> getActivity().finish())
+ .create();
}
- finish();
}
- private final class StagingAsyncTask extends AsyncTask<Uri, Void, File> {
- private static final long SHOW_EMPTY_STATE_DELAY_MILLIS = 300;
-
- private final Runnable mEmptyStateRunnable = new Runnable() {
- @Override
- public void run() {
- ((TextView) findViewById(R.id.app_name)).setText(R.string.app_name_unknown);
- ((TextView) findViewById(R.id.install_confirm_question))
- .setText(R.string.message_staging);
- mInstallConfirm.setVisibility(View.VISIBLE);
- findViewById(android.R.id.tabhost).setVisibility(View.INVISIBLE);
- findViewById(R.id.spacer).setVisibility(View.VISIBLE);
- findViewById(R.id.ok_button).setEnabled(false);
- Drawable icon = getDrawable(R.drawable.ic_file_download);
- Utils.applyTint(PackageInstallerActivity.this,
- icon, android.R.attr.colorControlNormal);
- ((ImageView) findViewById(R.id.app_icon)).setImageDrawable(icon);
- }
- };
+ /**
+ * Dialog to show when the source of apk can not be identified
+ */
+ public static class AnonymousSourceDialog extends DialogFragment {
+ static AnonymousSourceDialog newInstance() {
+ return new AnonymousSourceDialog();
+ }
@Override
- protected void onPreExecute() {
- getWindow().getDecorView().postDelayed(mEmptyStateRunnable,
- SHOW_EMPTY_STATE_DELAY_MILLIS);
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(R.string.anonymous_source_warning)
+ .setPositiveButton(R.string.anonymous_source_continue,
+ ((dialog, which) -> ((PackageInstallerActivity) getActivity())
+ .initiateInstall()))
+ .setNegativeButton(R.string.cancel, ((dialog, which) -> getActivity().finish()))
+ .create();
+ }
+ }
+
+ /**
+ * An error dialog shown when the app is not supported on wear
+ */
+ public static class NotSupportedOnWearDialog extends SimpleErrorDialog {
+ static SimpleErrorDialog newInstance() {
+ return SimpleErrorDialog.newInstance(R.string.wear_not_allowed_dlg_text);
}
@Override
- protected File doInBackground(Uri... params) {
- if (params == null || params.length <= 0) {
- return null;
- }
- Uri packageUri = params[0];
- File sourceFile = null;
- try {
- sourceFile = File.createTempFile("package", ".apk", getCacheDir());
- try (
- InputStream in = getContentResolver().openInputStream(packageUri);
- OutputStream out = (in != null) ? new FileOutputStream(
- sourceFile) : null;
- ) {
- // Despite the comments in ContentResolver#openInputStream
- // the returned stream can be null.
- if (in == null) {
- return null;
- }
- byte[] buffer = new byte[4096];
- int bytesRead;
- while ((bytesRead = in.read(buffer)) >= 0) {
- // Be nice and respond to a cancellation
- if (isCancelled()) {
- return null;
- }
- out.write(buffer, 0, bytesRead);
- }
- }
- } catch (IOException ioe) {
- Log.w(TAG, "Error staging apk from content URI", ioe);
- if (sourceFile != null) {
- sourceFile.delete();
- }
- }
- return sourceFile;
+ public void onCancel(DialogInterface dialog) {
+ getActivity().setResult(RESULT_OK);
+ getActivity().finish();
+ }
+ }
+
+ /**
+ * An error dialog shown when the device is out of space
+ */
+ public static class OutOfSpaceDialog extends AppErrorDialog {
+ static AppErrorDialog newInstance(@NonNull CharSequence applicationLabel) {
+ OutOfSpaceDialog dialog = new OutOfSpaceDialog();
+ dialog.setArgument(applicationLabel);
+ return dialog;
}
@Override
- protected void onPostExecute(File file) {
- getWindow().getDecorView().removeCallbacks(mEmptyStateRunnable);
- if (isFinishing() || isDestroyed()) {
- return;
- }
- if (file == null) {
- showDialogInner(DLG_PACKAGE_ERROR);
- setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK);
- return;
- }
- mContentUriApkStagingFile = file;
- Uri fileUri = Uri.fromFile(file);
+ protected Dialog createDialog(@NonNull CharSequence argument) {
+ String dlgText = getString(R.string.out_of_space_dlg_text, argument);
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(dlgText)
+ .setPositiveButton(R.string.manage_applications, (dialog, which) -> {
+ // launch manage applications
+ Intent intent = new Intent("android.intent.action.MANAGE_PACKAGE_STORAGE");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ getActivity().finish();
+ })
+ .setNegativeButton(R.string.cancel, (dialog, which) -> getActivity().finish())
+ .create();
+ }
+ }
+
+ /**
+ * A generic install-error dialog
+ */
+ public static class InstallErrorDialog extends AppErrorDialog {
+ static AppErrorDialog newInstance(@NonNull CharSequence applicationLabel) {
+ InstallErrorDialog dialog = new InstallErrorDialog();
+ dialog.setArgument(applicationLabel);
+ return dialog;
+ }
+
+ @Override
+ protected Dialog createDialog(@NonNull CharSequence argument) {
+ return new AlertDialog.Builder(getActivity())
+ .setNeutralButton(R.string.ok, (dialog, which) -> getActivity().finish())
+ .setMessage(getString(R.string.install_failed_msg, argument))
+ .create();
+ }
+ }
- boolean wasSetUp = processPackageUri(fileUri);
- if (wasSetUp) {
- checkIfAllowedAndInitiateInstall(false);
+ /**
+ * An error dialog shown when external sources are not allowed
+ */
+ public static class ExternalSourcesBlockedDialog extends AppErrorDialog {
+ static AppErrorDialog newInstance(@NonNull String originationPkg) {
+ ExternalSourcesBlockedDialog dialog = new ExternalSourcesBlockedDialog();
+ dialog.setArgument(originationPkg);
+ return dialog;
+ }
+
+ @Override
+ protected Dialog createDialog(@NonNull CharSequence argument) {
+ try {
+ PackageManager pm = getActivity().getPackageManager();
+
+ ApplicationInfo sourceInfo = pm.getApplicationInfo(argument.toString(), 0);
+
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(pm.getApplicationLabel(sourceInfo))
+ .setIcon(pm.getApplicationIcon(sourceInfo))
+ .setMessage(R.string.untrusted_external_source_warning)
+ .setPositiveButton(R.string.external_sources_settings,
+ (dialog, which) -> {
+ Intent settingsIntent = new Intent();
+ settingsIntent.setAction(
+ Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
+ final Uri packageUri = Uri.parse("package:" + argument);
+ settingsIntent.setData(packageUri);
+ try {
+ getActivity().startActivityForResult(settingsIntent,
+ REQUEST_TRUST_EXTERNAL_SOURCE);
+ } catch (ActivityNotFoundException exc) {
+ Log.e(TAG, "Settings activity not found for action: "
+ + Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
+ }
+ })
+ .setNegativeButton(R.string.cancel,
+ (dialog, which) -> getActivity().finish())
+ .create();
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Did not find app info for " + argument);
+ getActivity().finish();
+ return null;
}
}
+ }
+
+ /**
+ * Superclass for all error dialogs. Stores a single CharSequence argument
+ */
+ public abstract static class AppErrorDialog extends DialogFragment {
+ private static final String ARGUMENT_KEY = AppErrorDialog.class.getName() + "ARGUMENT_KEY";
+
+ protected void setArgument(@NonNull CharSequence argument) {
+ Bundle args = new Bundle();
+ args.putCharSequence(ARGUMENT_KEY, argument);
+ setArguments(args);
+ }
+
+ protected abstract Dialog createDialog(@NonNull CharSequence argument);
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return createDialog(getArguments().getString(ARGUMENT_KEY));
+ }
@Override
- protected void onCancelled(File file) {
- getWindow().getDecorView().removeCallbacks(mEmptyStateRunnable);
+ public void onCancel(DialogInterface dialog) {
+ getActivity().finish();
}
- };
+ }
}
diff --git a/src/com/android/packageinstaller/PackageUtil.java b/src/com/android/packageinstaller/PackageUtil.java
index 330cbbce..0db09e88 100644
--- a/src/com/android/packageinstaller/PackageUtil.java
+++ b/src/com/android/packageinstaller/PackageUtil.java
@@ -18,27 +18,31 @@
package com.android.packageinstaller;
import android.app.Activity;
+import android.content.Context;
import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.content.pm.PackageParser.PackageParserException;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import android.os.UserHandle;
import java.io.File;
-import java.util.List;
/**
* This is a utility class for defining some utility methods and constants
* used in the package installer application.
*/
public class PackageUtil {
+ private static final String LOG_TAG = PackageUtil.class.getSimpleName();
+
public static final String PREFIX="com.android.packageinstaller.";
public static final String INTENT_ATTR_INSTALL_STATUS = PREFIX+"installStatus";
public static final String INTENT_ATTR_APPLICATION_INFO=PREFIX+"applicationInfo";
@@ -49,8 +53,9 @@ public class PackageUtil {
/**
* Utility method to get package information for a given {@link File}
*/
- public static PackageParser.Package getPackageInfo(File sourceFile) {
+ public static PackageParser.Package getPackageInfo(Context context, File sourceFile) {
final PackageParser parser = new PackageParser();
+ parser.setCallback(new PackageParser.CallbackImpl(context.getPackageManager()));
try {
return parser.parsePackage(sourceFile, 0);
} catch (PackageParserException e) {
@@ -74,7 +79,7 @@ public class PackageUtil {
* @param componentInfo ComponentInfo object whose resources are to be loaded
* @param snippetView the snippet view
*/
- public static View initSnippetForInstalledApp(Activity pContext,
+ public static View initSnippetForInstalledApp(Context pContext,
ApplicationInfo appInfo, View snippetView) {
return initSnippetForInstalledApp(pContext, appInfo, snippetView, null);
}
@@ -90,7 +95,7 @@ public class PackageUtil {
* @param snippetView the snippet view
* @param UserHandle user that the app si installed for.
*/
- public static View initSnippetForInstalledApp(Activity pContext,
+ public static View initSnippetForInstalledApp(Context pContext,
ApplicationInfo appInfo, View snippetView, UserHandle user) {
final PackageManager pm = pContext.getPackageManager();
Drawable icon = appInfo.loadIcon(pm);
@@ -110,34 +115,23 @@ public class PackageUtil {
* defined on it.
*
* @param pContext context of package that can load the resources
- * @param appInfo ApplicationInfo object of package whose resources are to be loaded
+ * @param as The resources to be loaded
* @param snippetId view id of app snippet view
*/
- public static View initSnippetForNewApp(Activity pContext, AppSnippet as,
- int snippetId) {
+ @NonNull public static View initSnippetForNewApp(@NonNull Activity pContext,
+ @NonNull AppSnippet as, int snippetId) {
View appSnippet = pContext.findViewById(snippetId);
- ((ImageView)appSnippet.findViewById(R.id.app_icon)).setImageDrawable(as.icon);
+ if (as.icon != null) {
+ ((ImageView) appSnippet.findViewById(R.id.app_icon)).setImageDrawable(as.icon);
+ }
((TextView)appSnippet.findViewById(R.id.app_name)).setText(as.label);
return appSnippet;
}
- public static boolean isPackageAlreadyInstalled(Activity context, String pkgName) {
- List<PackageInfo> installedList = context.getPackageManager().getInstalledPackages(
- PackageManager.GET_UNINSTALLED_PACKAGES);
- int installedListSize = installedList.size();
- for(int i = 0; i < installedListSize; i++) {
- PackageInfo tmp = installedList.get(i);
- if(pkgName.equalsIgnoreCase(tmp.packageName)) {
- return true;
- }
- }
- return false;
- }
-
static public class AppSnippet {
- CharSequence label;
- Drawable icon;
- public AppSnippet(CharSequence label, Drawable icon) {
+ @NonNull public CharSequence label;
+ @Nullable public Drawable icon;
+ public AppSnippet(@NonNull CharSequence label, @Nullable Drawable icon) {
this.label = label;
this.icon = icon;
}
@@ -148,7 +142,7 @@ public class PackageUtil {
*
* @param pContext context of package that can load the resources
* @param appInfo ApplicationInfo object of package whose resources are to be loaded
- * @param snippetId view id of app snippet view
+ * @param sourceFile File the package is in
*/
public static AppSnippet getAppSnippet(
Activity pContext, ApplicationInfo appInfo, File sourceFile) {
@@ -173,14 +167,18 @@ public class PackageUtil {
Drawable icon = null;
// Try to load the icon from the package's resources. If an app has not explicitly
// specified any resource, just use the default icon for now.
- if (appInfo.icon != 0) {
- try {
- icon = res.getDrawable(appInfo.icon);
- } catch (Resources.NotFoundException e) {
+ try {
+ if (appInfo.icon != 0) {
+ try {
+ icon = res.getDrawable(appInfo.icon);
+ } catch (Resources.NotFoundException e) {
+ }
}
- }
- if (icon == null) {
- icon = pContext.getPackageManager().getDefaultActivityIcon();
+ if (icon == null) {
+ icon = pContext.getPackageManager().getDefaultActivityIcon();
+ }
+ } catch (OutOfMemoryError e) {
+ Log.i(LOG_TAG, "Could not load app icon", e);
}
return new PackageUtil.AppSnippet(label, icon);
}
diff --git a/src/com/android/packageinstaller/TemporaryFileManager.java b/src/com/android/packageinstaller/TemporaryFileManager.java
new file mode 100644
index 00000000..45ac69cf
--- /dev/null
+++ b/src/com/android/packageinstaller/TemporaryFileManager.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 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.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.SystemClock;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Manages files of the package installer and resets state during boot.
+ */
+public class TemporaryFileManager extends BroadcastReceiver {
+ private static final String LOG_TAG = TemporaryFileManager.class.getSimpleName();
+
+ /**
+ * Create a new file to hold a staged file.
+ *
+ * @param context The context of the caller
+ *
+ * @return A new file
+ */
+ @NonNull
+ public static File getStagedFile(@NonNull Context context) throws IOException {
+ return File.createTempFile("package", ".apk", context.getNoBackupFilesDir());
+ }
+
+ /**
+ * Get the file used to store the results of installs.
+ *
+ * @param context The context of the caller
+ *
+ * @return the file used to store the results of installs
+ */
+ @NonNull
+ public static File getInstallStateFile(@NonNull Context context) {
+ return new File(context.getNoBackupFilesDir(), "install_results.xml");
+ }
+
+ /**
+ * Get the file used to store the results of uninstalls.
+ *
+ * @param context The context of the caller
+ *
+ * @return the file used to store the results of uninstalls
+ */
+ @NonNull
+ public static File getUninstallStateFile(@NonNull Context context) {
+ return new File(context.getNoBackupFilesDir(), "uninstall_results.xml");
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ long systemBootTime = System.currentTimeMillis() - SystemClock.elapsedRealtime();
+
+ File[] filesOnBoot = context.getNoBackupFilesDir().listFiles();
+
+ if (filesOnBoot == null) {
+ return;
+ }
+
+ for (int i = 0; i < filesOnBoot.length; i++) {
+ File fileOnBoot = filesOnBoot[i];
+
+ if (systemBootTime > fileOnBoot.lastModified()) {
+ boolean wasDeleted = fileOnBoot.delete();
+ if (!wasDeleted) {
+ Log.w(LOG_TAG, "Could not delete " + fileOnBoot.getName() + " onBoot");
+ }
+ } else {
+ Log.w(LOG_TAG, fileOnBoot.getName() + " was created before onBoot broadcast was "
+ + "received");
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/UninstallAppProgress.java b/src/com/android/packageinstaller/UninstallAppProgress.java
deleted file mode 100755
index 63a243b2..00000000
--- a/src/com/android/packageinstaller/UninstallAppProgress.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
-**
-** Copyright 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.
-*/
-package com.android.packageinstaller;
-
-import android.app.Activity;
-import android.app.admin.IDevicePolicyManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageDeleteObserver;
-import android.content.pm.IPackageDeleteObserver2;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageInstaller;
-import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
-import android.content.res.Configuration;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.util.List;
-
-/**
- * This activity corresponds to a download progress screen that is displayed
- * when an application is uninstalled. The result of the application uninstall
- * is indicated in the result code that gets set to 0 or 1. The application gets launched
- * by an intent with the intent's class name explicitly set to UninstallAppProgress and expects
- * the application object of the application to uninstall.
- */
-public class UninstallAppProgress extends Activity implements OnClickListener {
- private final String TAG="UninstallAppProgress";
-
- private ApplicationInfo mAppInfo;
- private boolean mAllUsers;
- private UserHandle mUser;
- private IBinder mCallback;
-
- private Button mOkButton;
- private Button mDeviceManagerButton;
- private Button mUsersButton;
- private volatile int mResultCode = -1;
-
- /**
- * If initView was called. We delay this call to not have to call it at all if the uninstall is
- * quick
- */
- private boolean mIsViewInitialized;
-
- /** Amount of time to wait until we show the UI */
- private static final int QUICK_INSTALL_DELAY_MILLIS = 500;
-
- private static final int UNINSTALL_COMPLETE = 1;
- private static final int UNINSTALL_IS_SLOW = 2;
-
- private boolean isProfileOfOrSame(UserManager userManager, int userId, int profileId) {
- if (userId == profileId) {
- return true;
- }
- UserInfo parentUser = userManager.getProfileParent(profileId);
- return parentUser != null && parentUser.id == userId;
- }
-
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- if (isFinishing() || isDestroyed()) {
- return;
- }
-
- switch (msg.what) {
- case UNINSTALL_IS_SLOW:
- initView();
- break;
- case UNINSTALL_COMPLETE:
- mHandler.removeMessages(UNINSTALL_IS_SLOW);
-
- if (msg.arg1 != PackageManager.DELETE_SUCCEEDED) {
- initView();
- }
-
- mResultCode = msg.arg1;
- final String packageName = (String) msg.obj;
-
- if (mCallback != null) {
- final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
- .asInterface(mCallback);
- try {
- observer.onPackageDeleted(mAppInfo.packageName, mResultCode,
- packageName);
- } catch (RemoteException ignored) {
- }
- finish();
- return;
- }
-
- if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
- Intent result = new Intent();
- result.putExtra(Intent.EXTRA_INSTALL_RESULT, mResultCode);
- setResult(mResultCode == PackageManager.DELETE_SUCCEEDED
- ? Activity.RESULT_OK : Activity.RESULT_FIRST_USER,
- result);
- finish();
- return;
- }
-
- // Update the status text
- final String statusText;
- switch (msg.arg1) {
- case PackageManager.DELETE_SUCCEEDED:
- statusText = getString(R.string.uninstall_done);
- // Show a Toast and finish the activity
- Context ctx = getBaseContext();
- Toast.makeText(ctx, statusText, Toast.LENGTH_LONG).show();
- setResultAndFinish(mResultCode);
- return;
- case PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER: {
- UserManager userManager =
- (UserManager) getSystemService(Context.USER_SERVICE);
- IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
- ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
- // Find out if the package is an active admin for some non-current user.
- int myUserId = UserHandle.myUserId();
- UserInfo otherBlockingUser = null;
- for (UserInfo user : userManager.getUsers()) {
- // We only catch the case when the user in question is neither the
- // current user nor its profile.
- if (isProfileOfOrSame(userManager, myUserId, user.id)) continue;
-
- try {
- if (dpm.packageHasActiveAdmins(packageName, user.id)) {
- otherBlockingUser = user;
- break;
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to talk to package manager", e);
- }
- }
- if (otherBlockingUser == null) {
- Log.d(TAG, "Uninstall failed because " + packageName
- + " is a device admin");
- mDeviceManagerButton.setVisibility(View.VISIBLE);
- statusText = getString(
- R.string.uninstall_failed_device_policy_manager);
- } else {
- Log.d(TAG, "Uninstall failed because " + packageName
- + " is a device admin of user " + otherBlockingUser);
- mDeviceManagerButton.setVisibility(View.GONE);
- statusText = String.format(
- getString(R.string.uninstall_failed_device_policy_manager_of_user),
- otherBlockingUser.name);
- }
- break;
- }
- case PackageManager.DELETE_FAILED_OWNER_BLOCKED: {
- UserManager userManager =
- (UserManager) getSystemService(Context.USER_SERVICE);
- IPackageManager packageManager = IPackageManager.Stub.asInterface(
- ServiceManager.getService("package"));
- List<UserInfo> users = userManager.getUsers();
- int blockingUserId = UserHandle.USER_NULL;
- for (int i = 0; i < users.size(); ++i) {
- final UserInfo user = users.get(i);
- try {
- if (packageManager.getBlockUninstallForUser(packageName,
- user.id)) {
- blockingUserId = user.id;
- break;
- }
- } catch (RemoteException e) {
- // Shouldn't happen.
- Log.e(TAG, "Failed to talk to package manager", e);
- }
- }
- int myUserId = UserHandle.myUserId();
- if (isProfileOfOrSame(userManager, myUserId, blockingUserId)) {
- mDeviceManagerButton.setVisibility(View.VISIBLE);
- } else {
- mDeviceManagerButton.setVisibility(View.GONE);
- mUsersButton.setVisibility(View.VISIBLE);
- }
- // TODO: b/25442806
- if (blockingUserId == UserHandle.USER_SYSTEM) {
- statusText = getString(R.string.uninstall_blocked_device_owner);
- } else if (blockingUserId == UserHandle.USER_NULL) {
- Log.d(TAG, "Uninstall failed for " + packageName + " with code "
- + msg.arg1 + " no blocking user");
- statusText = getString(R.string.uninstall_failed);
- } else {
- statusText = mAllUsers
- ? getString(R.string.uninstall_all_blocked_profile_owner) :
- getString(R.string.uninstall_blocked_profile_owner);
- }
- break;
- }
- default:
- Log.d(TAG, "Uninstall failed for " + packageName + " with code "
- + msg.arg1);
- statusText = getString(R.string.uninstall_failed);
- break;
- }
- findViewById(R.id.progress_view).setVisibility(View.GONE);
- findViewById(R.id.status_view).setVisibility(View.VISIBLE);
- ((TextView)findViewById(R.id.status_text)).setText(statusText);
- findViewById(R.id.ok_panel).setVisibility(View.VISIBLE);
- break;
- default:
- break;
- }
- }
- };
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- Intent intent = getIntent();
- mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
- mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
-
- // This currently does not support going through a onDestroy->onCreate cycle. Hence if that
- // happened, just fail the operation for mysterious reasons.
- if (icicle != null) {
- mResultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR;
-
- if (mCallback != null) {
- final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
- .asInterface(mCallback);
- try {
- observer.onPackageDeleted(mAppInfo.packageName, mResultCode, null);
- } catch (RemoteException ignored) {
- }
- finish();
- } else {
- setResultAndFinish(mResultCode);
- }
-
- return;
- }
-
- mAllUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
- if (mAllUsers && !UserManager.get(this).isAdminUser()) {
- throw new SecurityException("Only admin user can request uninstall for all users");
- }
- mUser = intent.getParcelableExtra(Intent.EXTRA_USER);
- if (mUser == null) {
- mUser = android.os.Process.myUserHandle();
- } else {
- UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
- List<UserHandle> profiles = userManager.getUserProfiles();
- if (!profiles.contains(mUser)) {
- throw new SecurityException("User " + android.os.Process.myUserHandle() + " can't "
- + "request uninstall for user " + mUser);
- }
- }
-
- PackageDeleteObserver observer = new PackageDeleteObserver();
-
- // Make window transparent until initView is called. In many cases we can avoid showing the
- // UI at all as the app is uninstalled very quickly. If we show the UI and instantly remove
- // it, it just looks like a flicker.
- getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
- getWindow().setStatusBarColor(Color.TRANSPARENT);
- getWindow().setNavigationBarColor(Color.TRANSPARENT);
-
- getPackageManager().deletePackageAsUser(mAppInfo.packageName, observer,
- mAllUsers ? PackageManager.DELETE_ALL_USERS : 0, mUser.getIdentifier());
-
- mHandler.sendMessageDelayed(mHandler.obtainMessage(UNINSTALL_IS_SLOW),
- QUICK_INSTALL_DELAY_MILLIS);
- }
-
- class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
- public void packageDeleted(String packageName, int returnCode) {
- Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);
- msg.arg1 = returnCode;
- msg.obj = packageName;
- mHandler.sendMessage(msg);
- }
- }
-
- void setResultAndFinish(int retCode) {
- setResult(retCode);
- finish();
- }
-
- public void initView() {
- if (mIsViewInitialized) {
- return;
- }
- mIsViewInitialized = true;
-
- // We set the window background to translucent in constructor, revert this
- TypedValue attribute = new TypedValue();
- getTheme().resolveAttribute(android.R.attr.windowBackground, attribute, true);
- if (attribute.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
- attribute.type <= TypedValue.TYPE_LAST_COLOR_INT) {
- getWindow().setBackgroundDrawable(new ColorDrawable(attribute.data));
- } else {
- getWindow().setBackgroundDrawable(getResources().getDrawable(attribute.resourceId,
- getTheme()));
- }
-
- getTheme().resolveAttribute(android.R.attr.navigationBarColor, attribute, true);
- getWindow().setNavigationBarColor(attribute.data);
-
- getTheme().resolveAttribute(android.R.attr.statusBarColor, attribute, true);
- getWindow().setStatusBarColor(attribute.data);
-
- boolean isUpdate = ((mAppInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
- setTitle(isUpdate ? R.string.uninstall_update_title : R.string.uninstall_application_title);
-
- setContentView(R.layout.uninstall_progress);
- // Initialize views
- View snippetView = findViewById(R.id.app_snippet);
- PackageUtil.initSnippetForInstalledApp(this, mAppInfo, snippetView);
- mDeviceManagerButton = (Button) findViewById(R.id.device_manager_button);
- mUsersButton = (Button) findViewById(R.id.users_button);
- mDeviceManagerButton.setVisibility(View.GONE);
- mDeviceManagerButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setClassName("com.android.settings",
- "com.android.settings.Settings$DeviceAdminSettingsActivity");
- intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- finish();
- }
- });
- mUsersButton.setVisibility(View.GONE);
- mUsersButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(Settings.ACTION_USER_SETTINGS);
- intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- finish();
- }
- });
- // Hide button till progress is being displayed
- mOkButton = (Button) findViewById(R.id.ok_button);
- mOkButton.setOnClickListener(this);
- }
-
- public void onClick(View v) {
- if(v == mOkButton) {
- Log.i(TAG, "Finished uninstalling pkg: " + mAppInfo.packageName);
- setResultAndFinish(mResultCode);
- }
- }
-
- @Override
- public boolean dispatchKeyEvent(KeyEvent ev) {
- if (ev.getKeyCode() == KeyEvent.KEYCODE_BACK) {
- if (mResultCode == -1) {
- // Ignore back key when installation is in progress
- return true;
- } else {
- // If installation is done, just set the result code
- setResult(mResultCode);
- }
- }
- return super.dispatchKeyEvent(ev);
- }
-}
diff --git a/src/com/android/packageinstaller/UninstallEventReceiver.java b/src/com/android/packageinstaller/UninstallEventReceiver.java
new file mode 100644
index 00000000..15d42f3d
--- /dev/null
+++ b/src/com/android/packageinstaller/UninstallEventReceiver.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2016 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.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.NonNull;
+
+/**
+ * Receives uninstall events and persists them using a {@link EventResultPersister}.
+ */
+public class UninstallEventReceiver extends BroadcastReceiver {
+ private static final Object sLock = new Object();
+ private static EventResultPersister sReceiver;
+
+ /**
+ * Get the event receiver persisting the results
+ *
+ * @return The event receiver.
+ */
+ @NonNull private static EventResultPersister getReceiver(@NonNull Context context) {
+ synchronized (sLock) {
+ if (sReceiver == null) {
+ sReceiver = new EventResultPersister(
+ TemporaryFileManager.getUninstallStateFile(context));
+ }
+ }
+
+ return sReceiver;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ getReceiver(context).onEventReceived(context, intent);
+ }
+
+ /**
+ * Add an observer. If there is already an event for this id, call back inside of this call.
+ *
+ * @param context A context of the current app
+ * @param id The id the observer is for or {@code GENERATE_NEW_ID} to generate a new one.
+ * @param observer The observer to call back.
+ *
+ * @return The id for this event
+ */
+ static int addObserver(@NonNull Context context, int id,
+ @NonNull EventResultPersister.EventResultObserver observer)
+ throws EventResultPersister.OutOfIdsException {
+ return getReceiver(context).addObserver(id, observer);
+ }
+
+ /**
+ * Remove a observer.
+ *
+ * @param context A context of the current app
+ * @param id The id the observer was added for
+ */
+ static void removeObserver(@NonNull Context context, int id) {
+ getReceiver(context).removeObserver(id);
+ }
+
+ /**
+ * @param context A context of the current app
+ *
+ * @return A new uninstall id
+ */
+ static int getNewId(@NonNull Context context) throws EventResultPersister.OutOfIdsException {
+ return getReceiver(context).getNewId();
+ }
+}
diff --git a/src/com/android/packageinstaller/UninstallFinish.java b/src/com/android/packageinstaller/UninstallFinish.java
new file mode 100644
index 00000000..40a6cc03
--- /dev/null
+++ b/src/com/android/packageinstaller/UninstallFinish.java
@@ -0,0 +1,263 @@
+/*
+ * Copyright (C) 2016 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.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.admin.IDevicePolicyManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.graphics.drawable.Icon;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.support.annotation.NonNull;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.util.List;
+
+/**
+ * Finish an uninstallation and show Toast on success or failure notification.
+ */
+public class UninstallFinish extends BroadcastReceiver {
+ private static final String LOG_TAG = UninstallFinish.class.getSimpleName();
+
+ private static final String UNINSTALL_FAILURE_CHANNEL = "uninstall failure";
+
+ static final String EXTRA_UNINSTALL_ID = "com.android.packageinstaller.extra.UNINSTALL_ID";
+ static final String EXTRA_APP_LABEL = "com.android.packageinstaller.extra.APP_LABEL";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int returnCode = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, 0);
+
+ if (returnCode == PackageInstaller.STATUS_PENDING_USER_ACTION) {
+ context.startActivity(intent.getParcelableExtra(Intent.EXTRA_INTENT));
+ return;
+ }
+
+ int uninstallId = intent.getIntExtra(EXTRA_UNINSTALL_ID, 0);
+ ApplicationInfo appInfo = intent.getParcelableExtra(
+ PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ String appLabel = intent.getStringExtra(EXTRA_APP_LABEL);
+ boolean allUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
+
+ NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
+ UserManager userManager = context.getSystemService(UserManager.class);
+
+ NotificationChannel uninstallFailureChannel = new NotificationChannel(
+ UNINSTALL_FAILURE_CHANNEL,
+ context.getString(R.string.uninstall_failure_notification_channel),
+ NotificationManager.IMPORTANCE_DEFAULT);
+ notificationManager.createNotificationChannel(uninstallFailureChannel);
+
+ Notification.Builder uninstallFailedNotification = new Notification.Builder(context,
+ UNINSTALL_FAILURE_CHANNEL);
+
+ switch (returnCode) {
+ case PackageInstaller.STATUS_SUCCESS:
+ notificationManager.cancel(uninstallId);
+
+ Toast.makeText(context, context.getString(R.string.uninstall_done_app, appLabel),
+ Toast.LENGTH_LONG).show();
+ return;
+ case PackageInstaller.STATUS_FAILURE_BLOCKED: {
+ int legacyStatus = intent.getIntExtra(PackageInstaller.EXTRA_LEGACY_STATUS, 0);
+
+ switch (legacyStatus) {
+ case PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER: {
+ IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
+ ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
+ // Find out if the package is an active admin for some non-current user.
+ int myUserId = UserHandle.myUserId();
+ UserInfo otherBlockingUser = null;
+ for (UserInfo user : userManager.getUsers()) {
+ // We only catch the case when the user in question is neither the
+ // current user nor its profile.
+ if (isProfileOfOrSame(userManager, myUserId, user.id)) {
+ continue;
+ }
+
+ try {
+ if (dpm.packageHasActiveAdmins(appInfo.packageName, user.id)) {
+ otherBlockingUser = user;
+ break;
+ }
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "Failed to talk to package manager", e);
+ }
+ }
+ if (otherBlockingUser == null) {
+ Log.d(LOG_TAG, "Uninstall failed because " + appInfo.packageName
+ + " is a device admin");
+
+ addDeviceManagerButton(context, uninstallFailedNotification);
+ setBigText(uninstallFailedNotification, context.getString(
+ R.string.uninstall_failed_device_policy_manager));
+ } else {
+ Log.d(LOG_TAG, "Uninstall failed because " + appInfo.packageName
+ + " is a device admin of user " + otherBlockingUser);
+
+ setBigText(uninstallFailedNotification, String.format(context.getString(
+ R.string.uninstall_failed_device_policy_manager_of_user),
+ otherBlockingUser.name));
+ }
+ break;
+ }
+ case PackageManager.DELETE_FAILED_OWNER_BLOCKED: {
+ IPackageManager packageManager = IPackageManager.Stub.asInterface(
+ ServiceManager.getService("package"));
+
+ List<UserInfo> users = userManager.getUsers();
+ int blockingUserId = UserHandle.USER_NULL;
+ for (int i = 0; i < users.size(); ++i) {
+ final UserInfo user = users.get(i);
+ try {
+ if (packageManager.getBlockUninstallForUser(appInfo.packageName,
+ user.id)) {
+ blockingUserId = user.id;
+ break;
+ }
+ } catch (RemoteException e) {
+ // Shouldn't happen.
+ Log.e(LOG_TAG, "Failed to talk to package manager", e);
+ }
+ }
+
+ int myUserId = UserHandle.myUserId();
+ if (isProfileOfOrSame(userManager, myUserId, blockingUserId)) {
+ addDeviceManagerButton(context, uninstallFailedNotification);
+ } else {
+ addManageUsersButton(context, uninstallFailedNotification);
+ }
+
+ if (blockingUserId == UserHandle.USER_NULL) {
+ Log.d(LOG_TAG,
+ "Uninstall failed for " + appInfo.packageName + " with code "
+ + returnCode + " no blocking user");
+ } else if (blockingUserId == UserHandle.USER_SYSTEM) {
+ setBigText(uninstallFailedNotification,
+ context.getString(R.string.uninstall_blocked_device_owner));
+ } else {
+ if (allUsers) {
+ setBigText(uninstallFailedNotification,
+ context.getString(
+ R.string.uninstall_all_blocked_profile_owner));
+ } else {
+ setBigText(uninstallFailedNotification, context.getString(
+ R.string.uninstall_blocked_profile_owner));
+ }
+ }
+ break;
+ }
+ default:
+ Log.d(LOG_TAG, "Uninstall blocked for " + appInfo.packageName
+ + " with legacy code " + legacyStatus);
+ } break;
+ }
+ default:
+ Log.d(LOG_TAG, "Uninstall failed for " + appInfo.packageName + " with code "
+ + returnCode);
+ break;
+ }
+
+ uninstallFailedNotification.setContentTitle(
+ context.getString(R.string.uninstall_failed_app, appLabel));
+ uninstallFailedNotification.setOngoing(false);
+ uninstallFailedNotification.setSmallIcon(R.drawable.ic_error);
+ notificationManager.notify(uninstallId, uninstallFailedNotification.build());
+ }
+
+ /**
+ * Is a profile part of a user?
+ *
+ * @param userManager The user manager
+ * @param userId The id of the user
+ * @param profileId The id of the profile
+ *
+ * @return If the profile is part of the user or the profile parent of the user
+ */
+ private boolean isProfileOfOrSame(@NonNull UserManager userManager, int userId, int profileId) {
+ if (userId == profileId) {
+ return true;
+ }
+
+ UserInfo parentUser = userManager.getProfileParent(profileId);
+ return parentUser != null && parentUser.id == userId;
+ }
+
+ /**
+ * Set big text for the notification.
+ *
+ * @param builder The builder of the notification
+ * @param text The text to set.
+ */
+ private void setBigText(@NonNull Notification.Builder builder,
+ @NonNull CharSequence text) {
+ builder.setStyle(new Notification.BigTextStyle().bigText(text));
+ }
+
+ /**
+ * Add a button to the notification that links to the user management.
+ *
+ * @param context The context the notification is created in
+ * @param builder The builder of the notification
+ */
+ private void addManageUsersButton(@NonNull Context context,
+ @NonNull Notification.Builder builder) {
+ Intent intent = new Intent(Settings.ACTION_USER_SETTINGS);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ builder.addAction((new Notification.Action.Builder(
+ Icon.createWithResource(context, R.drawable.ic_settings_multiuser),
+ context.getString(R.string.manage_users),
+ PendingIntent.getActivity(context, 0, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT))).build());
+ }
+
+ /**
+ * Add a button to the notification that links to the device policy management.
+ *
+ * @param context The context the notification is created in
+ * @param builder The builder of the notification
+ */
+ private void addDeviceManagerButton(@NonNull Context context,
+ @NonNull Notification.Builder builder) {
+ Intent intent = new Intent();
+ intent.setClassName("com.android.settings",
+ "com.android.settings.Settings$DeviceAdminSettingsActivity");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ builder.addAction((new Notification.Action.Builder(
+ Icon.createWithResource(context, R.drawable.ic_lock),
+ context.getString(R.string.manage_device_administrators),
+ PendingIntent.getActivity(context, 0, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT))).build());
+ }
+}
diff --git a/src/com/android/packageinstaller/UninstallUninstalling.java b/src/com/android/packageinstaller/UninstallUninstalling.java
new file mode 100644
index 00000000..14ab60db
--- /dev/null
+++ b/src/com/android/packageinstaller/UninstallUninstalling.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2016 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.app.Activity;
+import android.app.ActivityThread;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentTransaction;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageDeleteObserver2;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.content.pm.VersionedPackage;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.support.annotation.Nullable;
+import android.widget.Toast;
+
+/**
+ * Start an uninstallation, show a dialog while uninstalling and return result to the caller.
+ */
+public class UninstallUninstalling extends Activity implements
+ EventResultPersister.EventResultObserver {
+ private static final String UNINSTALL_ID = "com.android.packageinstaller.UNINSTALL_ID";
+ private static final String BROADCAST_ACTION =
+ "com.android.packageinstaller.ACTION_UNINSTALL_COMMIT";
+
+ static final String EXTRA_APP_LABEL = "com.android.packageinstaller.extra.APP_LABEL";
+
+ private int mUninstallId;
+ private ApplicationInfo mAppInfo;
+ private IBinder mCallback;
+ private boolean mReturnResult;
+ private String mLabel;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setFinishOnTouchOutside(false);
+
+ mAppInfo = getIntent().getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ mCallback = getIntent().getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
+ mReturnResult = getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false);
+ mLabel = getIntent().getStringExtra(EXTRA_APP_LABEL);
+
+ try {
+ if (savedInstanceState == null) {
+ boolean allUsers = getIntent().getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS,
+ false);
+ UserHandle user = getIntent().getParcelableExtra(Intent.EXTRA_USER);
+
+ // Show dialog, which is the whole UI
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ Fragment prev = getFragmentManager().findFragmentByTag("dialog");
+ if (prev != null) {
+ transaction.remove(prev);
+ }
+ DialogFragment dialog = new UninstallUninstallingFragment();
+ dialog.setCancelable(false);
+ dialog.show(transaction, "dialog");
+
+ mUninstallId = UninstallEventReceiver.addObserver(this,
+ EventResultPersister.GENERATE_NEW_ID, this);
+
+ Intent broadcastIntent = new Intent(BROADCAST_ACTION);
+ broadcastIntent.putExtra(EventResultPersister.EXTRA_ID, mUninstallId);
+ broadcastIntent.setPackage(getPackageName());
+
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, mUninstallId,
+ broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ try {
+ ActivityThread.getPackageManager().getPackageInstaller().uninstall(
+ new VersionedPackage(mAppInfo.packageName,
+ PackageManager.VERSION_CODE_HIGHEST),
+ getPackageName(), allUsers ? PackageManager.DELETE_ALL_USERS : 0,
+ pendingIntent.getIntentSender(), user.getIdentifier());
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ } else {
+ mUninstallId = savedInstanceState.getInt(UNINSTALL_ID);
+ UninstallEventReceiver.addObserver(this, mUninstallId, this);
+ }
+ } catch (EventResultPersister.OutOfIdsException e) {
+ onResult(PackageInstaller.STATUS_FAILURE, PackageManager.DELETE_FAILED_INTERNAL_ERROR,
+ null);
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putInt(UNINSTALL_ID, mUninstallId);
+ }
+
+ @Override
+ public void onBackPressed() {
+ // do nothing
+ }
+
+ @Override
+ public void onResult(int status, int legacyStatus, @Nullable String message) {
+ if (mCallback != null) {
+ // The caller will be informed about the result via a callback
+ final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
+ .asInterface(mCallback);
+ try {
+ observer.onPackageDeleted(mAppInfo.packageName, legacyStatus, message);
+ } catch (RemoteException ignored) {
+ }
+ return;
+ } else if (mReturnResult) {
+ // The caller will be informed about the result and might decide to display it
+ Intent result = new Intent();
+
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT, legacyStatus);
+ setResult(status == PackageInstaller.STATUS_SUCCESS ? Activity.RESULT_OK
+ : Activity.RESULT_FIRST_USER, result);
+ } else {
+ // This is the rare case that the caller did not ask for the result, but wanted to be
+ // notified via onActivityResult when the installation finishes
+ if (status != PackageInstaller.STATUS_SUCCESS) {
+ Toast.makeText(this, getString(R.string.uninstall_failed_app, mLabel),
+ Toast.LENGTH_LONG).show();
+ }
+ }
+ finish();
+ }
+
+ @Override
+ protected void onDestroy() {
+ UninstallEventReceiver.removeObserver(this, mUninstallId);
+
+ super.onDestroy();
+ }
+
+ /**
+ * Dialog that shows that the app is uninstalling.
+ */
+ public static class UninstallUninstallingFragment extends DialogFragment {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
+
+ dialogBuilder.setCancelable(false);
+ dialogBuilder.setMessage(getActivity().getString(R.string.uninstalling_app,
+ ((UninstallUninstalling) getActivity()).mLabel));
+
+ Dialog dialog = dialogBuilder.create();
+ dialog.setCanceledOnTouchOutside(false);
+
+ return dialog;
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/UninstallerActivity.java b/src/com/android/packageinstaller/UninstallerActivity.java
index ae1659f4..4340dd33 100755
--- a/src/com/android/packageinstaller/UninstallerActivity.java
+++ b/src/com/android/packageinstaller/UninstallerActivity.java
@@ -17,13 +17,16 @@
package com.android.packageinstaller;
import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
+import android.app.ActivityThread;
import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentTransaction;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.ComponentName;
-import android.content.DialogInterface;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
@@ -31,7 +34,8 @@ import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
+import android.content.pm.VersionedPackage;
+import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -39,124 +43,34 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
import android.util.Log;
+import com.android.packageinstaller.handheld.ErrorDialogFragment;
+import com.android.packageinstaller.handheld.UninstallAlertDialogFragment;
+import com.android.packageinstaller.television.ErrorFragment;
+import com.android.packageinstaller.television.UninstallAlertFragment;
+import com.android.packageinstaller.television.UninstallAppProgress;
+
+import java.util.List;
+
/*
* This activity presents UI to uninstall an application. Usually launched with intent
- * Intent.ACTION_UNINSTALL_PKG_COMMAND and attribute
+ * Intent.ACTION_UNINSTALL_PKG_COMMAND and attribute
* com.android.packageinstaller.PackageName set to the application package name
*/
public class UninstallerActivity extends Activity {
private static final String TAG = "UninstallerActivity";
- public static class UninstallAlertDialogFragment extends DialogFragment implements
- DialogInterface.OnClickListener {
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final PackageManager pm = getActivity().getPackageManager();
- final DialogInfo dialogInfo = ((UninstallerActivity) getActivity()).mDialogInfo;
- final CharSequence appLabel = dialogInfo.appInfo.loadLabel(pm);
-
- AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
- StringBuilder messageBuilder = new StringBuilder();
-
- // If the Activity label differs from the App label, then make sure the user
- // knows the Activity belongs to the App being uninstalled.
- if (dialogInfo.activityInfo != null) {
- final CharSequence activityLabel = dialogInfo.activityInfo.loadLabel(pm);
- if (!activityLabel.equals(appLabel)) {
- messageBuilder.append(
- getString(R.string.uninstall_activity_text, activityLabel));
- messageBuilder.append(" ").append(appLabel).append(".\n\n");
- }
- }
-
- final boolean isUpdate =
- ((dialogInfo.appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
- UserManager userManager = UserManager.get(getActivity());
- if (isUpdate) {
- if (isSingleUser(userManager)) {
- messageBuilder.append(getString(R.string.uninstall_update_text));
- } else {
- messageBuilder.append(getString(R.string.uninstall_update_text_multiuser));
- }
- } else {
- if (dialogInfo.allUsers && !isSingleUser(userManager)) {
- messageBuilder.append(getString(R.string.uninstall_application_text_all_users));
- } else if (!dialogInfo.user.equals(android.os.Process.myUserHandle())) {
- UserInfo userInfo = userManager.getUserInfo(dialogInfo.user.getIdentifier());
- messageBuilder.append(
- getString(R.string.uninstall_application_text_user, userInfo.name));
- } else {
- messageBuilder.append(getString(R.string.uninstall_application_text));
- }
- }
-
- dialogBuilder.setTitle(appLabel);
- dialogBuilder.setIcon(dialogInfo.appInfo.loadIcon(pm));
- dialogBuilder.setPositiveButton(android.R.string.ok, this);
- dialogBuilder.setNegativeButton(android.R.string.cancel, this);
- dialogBuilder.setMessage(messageBuilder.toString());
- return dialogBuilder.create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (which == Dialog.BUTTON_POSITIVE) {
- ((UninstallerActivity) getActivity()).startUninstallProgress();
- } else {
- ((UninstallerActivity) getActivity()).dispatchAborted();
- }
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
- if (isAdded()) {
- getActivity().finish();
- }
- }
-
- /**
- * Returns whether there is only one user on this device, not including
- * the system-only user.
- */
- private boolean isSingleUser(UserManager userManager) {
- final int userCount = userManager.getUserCount();
- return userCount == 1
- || (UserManager.isSplitSystemUser() && userCount == 2);
- }
- }
-
- public static class AppNotFoundDialogFragment extends DialogFragment {
+ private static final String UNINSTALLING_CHANNEL = "uninstalling";
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.app_not_found_dlg_title)
- .setMessage(R.string.app_not_found_dlg_text)
- .setNeutralButton(android.R.string.ok, null)
- .create();
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
- if (isAdded()) {
- ((UninstallerActivity) getActivity()).dispatchAborted();
- getActivity().setResult(Activity.RESULT_FIRST_USER);
- getActivity().finish();
- }
- }
- }
-
- static class DialogInfo {
- ApplicationInfo appInfo;
- ActivityInfo activityInfo;
- boolean allUsers;
- UserHandle user;
- IBinder callback;
+ public static class DialogInfo {
+ public ApplicationInfo appInfo;
+ public ActivityInfo activityInfo;
+ public boolean allUsers;
+ public UserHandle user;
+ public IBinder callback;
}
private String mPackageName;
@@ -187,17 +101,31 @@ public class UninstallerActivity extends Activity {
mDialogInfo = new DialogInfo();
+ mDialogInfo.allUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
+ if (mDialogInfo.allUsers && !UserManager.get(this).isAdminUser()) {
+ Log.e(TAG, "Only admin user can request uninstall for all users");
+ showUserIsNotAllowed();
+ return;
+ }
mDialogInfo.user = intent.getParcelableExtra(Intent.EXTRA_USER);
if (mDialogInfo.user == null) {
mDialogInfo.user = android.os.Process.myUserHandle();
+ } else {
+ UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
+ List<UserHandle> profiles = userManager.getUserProfiles();
+ if (!profiles.contains(mDialogInfo.user)) {
+ Log.e(TAG, "User " + android.os.Process.myUserHandle() + " can't request uninstall "
+ + "for user " + mDialogInfo.user);
+ showUserIsNotAllowed();
+ return;
+ }
}
- mDialogInfo.allUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
mDialogInfo.callback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
try {
mDialogInfo.appInfo = pm.getApplicationInfo(mPackageName,
- PackageManager.GET_UNINSTALLED_PACKAGES, mDialogInfo.user.getIdentifier());
+ PackageManager.MATCH_ANY_USER, mDialogInfo.user.getIdentifier());
} catch (RemoteException e) {
Log.e(TAG, "Unable to get packageName. Package manager is dead?");
}
@@ -224,38 +152,165 @@ public class UninstallerActivity extends Activity {
showConfirmationDialog();
}
+ public DialogInfo getDialogInfo() {
+ return mDialogInfo;
+ }
+
private void showConfirmationDialog() {
- showDialogFragment(new UninstallAlertDialogFragment());
+ if (isTv()) {
+ showContentFragment(new UninstallAlertFragment(), 0, 0);
+ } else {
+ showDialogFragment(new UninstallAlertDialogFragment(), 0, 0);
+ }
}
private void showAppNotFound() {
- showDialogFragment(new AppNotFoundDialogFragment());
+ if (isTv()) {
+ showContentFragment(new ErrorFragment(), R.string.app_not_found_dlg_title,
+ R.string.app_not_found_dlg_text);
+ } else {
+ showDialogFragment(new ErrorDialogFragment(), R.string.app_not_found_dlg_title,
+ R.string.app_not_found_dlg_text);
+ }
}
- private void showDialogFragment(DialogFragment fragment) {
+ private void showUserIsNotAllowed() {
+ if (isTv()) {
+ showContentFragment(new ErrorFragment(),
+ R.string.user_is_not_allowed_dlg_title, R.string.user_is_not_allowed_dlg_text);
+ } else {
+ showDialogFragment(new ErrorDialogFragment(), 0, R.string.user_is_not_allowed_dlg_text);
+ }
+ }
+
+ private void showGenericError() {
+ if (isTv()) {
+ showContentFragment(new ErrorFragment(),
+ R.string.generic_error_dlg_title, R.string.generic_error_dlg_text);
+ } else {
+ showDialogFragment(new ErrorDialogFragment(), 0, R.string.generic_error_dlg_text);
+ }
+ }
+
+ private boolean isTv() {
+ return (getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_MASK)
+ == Configuration.UI_MODE_TYPE_TELEVISION;
+ }
+
+ private void showContentFragment(@NonNull Fragment fragment, @StringRes int title,
+ @StringRes int text) {
+ Bundle args = new Bundle();
+ args.putInt(ErrorFragment.TITLE, title);
+ args.putInt(ErrorFragment.TEXT, text);
+ fragment.setArguments(args);
+
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, fragment)
+ .commit();
+ }
+
+ private void showDialogFragment(@NonNull DialogFragment fragment,
+ @StringRes int title, @StringRes int text) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
+
+ Bundle args = new Bundle();
+ if (title != 0) {
+ args.putInt(ErrorDialogFragment.TITLE, title);
+ }
+ args.putInt(ErrorDialogFragment.TEXT, text);
+
+ fragment.setArguments(args);
fragment.show(ft, "dialog");
}
- void startUninstallProgress() {
- Intent newIntent = new Intent(Intent.ACTION_VIEW);
- newIntent.putExtra(Intent.EXTRA_USER, mDialogInfo.user);
- newIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, mDialogInfo.allUsers);
- newIntent.putExtra(PackageInstaller.EXTRA_CALLBACK, mDialogInfo.callback);
- newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mDialogInfo.appInfo);
- if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
- newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
- newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ public void startUninstallProgress() {
+ boolean returnResult = getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false);
+ CharSequence label = mDialogInfo.appInfo.loadLabel(getPackageManager());
+
+ if (isTv()) {
+ Intent newIntent = new Intent(Intent.ACTION_VIEW);
+ newIntent.putExtra(Intent.EXTRA_USER, mDialogInfo.user);
+ newIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, mDialogInfo.allUsers);
+ newIntent.putExtra(PackageInstaller.EXTRA_CALLBACK, mDialogInfo.callback);
+ newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mDialogInfo.appInfo);
+
+ if (returnResult) {
+ newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
+ newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ }
+
+ newIntent.setClass(this, UninstallAppProgress.class);
+ startActivity(newIntent);
+ } else if (returnResult || mDialogInfo.callback != null || getCallingActivity() != null) {
+ Intent newIntent = new Intent(this, UninstallUninstalling.class);
+
+ newIntent.putExtra(Intent.EXTRA_USER, mDialogInfo.user);
+ newIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, mDialogInfo.allUsers);
+ newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mDialogInfo.appInfo);
+ newIntent.putExtra(UninstallUninstalling.EXTRA_APP_LABEL, label);
+ newIntent.putExtra(PackageInstaller.EXTRA_CALLBACK, mDialogInfo.callback);
+
+ if (returnResult) {
+ newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
+ }
+
+ if (returnResult || getCallingActivity() != null) {
+ newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ }
+
+ startActivity(newIntent);
+ } else {
+ int uninstallId;
+ try {
+ uninstallId = UninstallEventReceiver.getNewId(this);
+ } catch (EventResultPersister.OutOfIdsException e) {
+ showGenericError();
+ return;
+ }
+
+ Intent broadcastIntent = new Intent(this, UninstallFinish.class);
+
+ broadcastIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, mDialogInfo.allUsers);
+ broadcastIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mDialogInfo.appInfo);
+ broadcastIntent.putExtra(UninstallFinish.EXTRA_APP_LABEL, label);
+ broadcastIntent.putExtra(UninstallFinish.EXTRA_UNINSTALL_ID, uninstallId);
+
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uninstallId,
+ broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ NotificationManager notificationManager = getSystemService(NotificationManager.class);
+ NotificationChannel uninstallingChannel = new NotificationChannel(UNINSTALLING_CHANNEL,
+ getString(R.string.uninstalling_notification_channel),
+ NotificationManager.IMPORTANCE_MIN);
+ notificationManager.createNotificationChannel(uninstallingChannel);
+
+ Notification uninstallingNotification =
+ (new Notification.Builder(this, UNINSTALLING_CHANNEL))
+ .setSmallIcon(R.drawable.ic_remove).setProgress(0, 1, true)
+ .setContentTitle(getString(R.string.uninstalling_app, label)).setOngoing(true)
+ .build();
+
+ notificationManager.notify(uninstallId, uninstallingNotification);
+
+ try {
+ ActivityThread.getPackageManager().getPackageInstaller().uninstall(
+ new VersionedPackage(mDialogInfo.appInfo.packageName,
+ PackageManager.VERSION_CODE_HIGHEST),
+ getPackageName(), mDialogInfo.allUsers
+ ? PackageManager.DELETE_ALL_USERS : 0,
+ pendingIntent.getIntentSender(), mDialogInfo.user.getIdentifier());
+ } catch (Exception e) {
+ Log.e(TAG, "Cannot start uninstall", e);
+ showGenericError();
+ }
}
- newIntent.setClass(this, UninstallAppProgress.class);
- startActivity(newIntent);
}
- void dispatchAborted() {
+ public void dispatchAborted() {
if (mDialogInfo != null && mDialogInfo.callback != null) {
final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub.asInterface(
mDialogInfo.callback);
diff --git a/src/com/android/packageinstaller/handheld/ErrorDialogFragment.java b/src/com/android/packageinstaller/handheld/ErrorDialogFragment.java
new file mode 100644
index 00000000..4ec6a2d6
--- /dev/null
+++ b/src/com/android/packageinstaller/handheld/ErrorDialogFragment.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 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.handheld;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import com.android.packageinstaller.UninstallerActivity;
+
+public class ErrorDialogFragment extends DialogFragment {
+ public static final String TITLE = "com.android.packageinstaller.arg.title";
+ public static final String TEXT = "com.android.packageinstaller.arg.text";
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder b = new AlertDialog.Builder(getActivity())
+ .setMessage(getArguments().getInt(TEXT))
+ .setPositiveButton(android.R.string.ok, null);
+
+ if (getArguments().containsKey(TITLE)) {
+ b.setTitle(getArguments().getInt(TITLE));
+ }
+
+ return b.create();
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ if (isAdded()) {
+ if (getActivity() instanceof UninstallerActivity) {
+ ((UninstallerActivity) getActivity()).dispatchAborted();
+ }
+
+ getActivity().setResult(Activity.RESULT_FIRST_USER);
+ getActivity().finish();
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/handheld/UninstallAlertDialogFragment.java b/src/com/android/packageinstaller/handheld/UninstallAlertDialogFragment.java
new file mode 100644
index 00000000..417b75a2
--- /dev/null
+++ b/src/com/android/packageinstaller/handheld/UninstallAlertDialogFragment.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2016 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.handheld;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.Bundle;
+import android.os.UserManager;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.UninstallerActivity;
+
+public class UninstallAlertDialogFragment extends DialogFragment implements
+ DialogInterface.OnClickListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final PackageManager pm = getActivity().getPackageManager();
+ final UninstallerActivity.DialogInfo dialogInfo =
+ ((UninstallerActivity) getActivity()).getDialogInfo();
+ final CharSequence appLabel = dialogInfo.appInfo.loadLabel(pm);
+
+ AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
+ StringBuilder messageBuilder = new StringBuilder();
+
+ // If the Activity label differs from the App label, then make sure the user
+ // knows the Activity belongs to the App being uninstalled.
+ if (dialogInfo.activityInfo != null) {
+ final CharSequence activityLabel = dialogInfo.activityInfo.loadLabel(pm);
+ if (!activityLabel.equals(appLabel)) {
+ messageBuilder.append(
+ getString(R.string.uninstall_activity_text, activityLabel));
+ messageBuilder.append(" ").append(appLabel).append(".\n\n");
+ }
+ }
+
+ final boolean isUpdate =
+ ((dialogInfo.appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
+ UserManager userManager = UserManager.get(getActivity());
+ if (isUpdate) {
+ if (isSingleUser(userManager)) {
+ messageBuilder.append(getString(R.string.uninstall_update_text));
+ } else {
+ messageBuilder.append(getString(R.string.uninstall_update_text_multiuser));
+ }
+ } else {
+ if (dialogInfo.allUsers && !isSingleUser(userManager)) {
+ messageBuilder.append(getString(R.string.uninstall_application_text_all_users));
+ } else if (!dialogInfo.user.equals(android.os.Process.myUserHandle())) {
+ UserInfo userInfo = userManager.getUserInfo(dialogInfo.user.getIdentifier());
+ messageBuilder.append(
+ getString(R.string.uninstall_application_text_user, userInfo.name));
+ } else {
+ messageBuilder.append(getString(R.string.uninstall_application_text));
+ }
+ }
+
+ dialogBuilder.setTitle(appLabel);
+ dialogBuilder.setIcon(dialogInfo.appInfo.loadIcon(pm));
+ dialogBuilder.setPositiveButton(android.R.string.ok, this);
+ dialogBuilder.setNegativeButton(android.R.string.cancel, this);
+ dialogBuilder.setMessage(messageBuilder.toString());
+ return dialogBuilder.create();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == Dialog.BUTTON_POSITIVE) {
+ ((UninstallerActivity) getActivity()).startUninstallProgress();
+ } else {
+ ((UninstallerActivity) getActivity()).dispatchAborted();
+ }
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ if (isAdded()) {
+ getActivity().finish();
+ }
+ }
+
+ /**
+ * Returns whether there is only one user on this device, not including
+ * the system-only user.
+ */
+ private boolean isSingleUser(UserManager userManager) {
+ final int userCount = userManager.getUserCount();
+ return userCount == 1
+ || (UserManager.isSplitSystemUser() && userCount == 2);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
index 9706f823..baf4c5e6 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -57,6 +57,9 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
private final int mIconResId;
private final boolean mAppSupportsRuntimePermissions;
+ private final boolean mIsEphemeralApp;
+ private boolean mContainsEphemeralPermission;
+ private boolean mContainsPreRuntimePermission;
public static AppPermissionGroup create(Context context, PackageInfo packageInfo,
String permissionName) {
@@ -67,7 +70,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return null;
}
- if (permissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS
+ if ((permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS
|| (permissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0
|| (permissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0) {
return null;
@@ -133,7 +137,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
}
// Collect only runtime permissions.
- if (requestedPermissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS) {
+ if ((requestedPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS) {
continue;
}
@@ -158,7 +163,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
requestedPermission, packageInfo.packageName, userHandle);
Permission permission = new Permission(requestedPermission, granted,
- appOp, appOpAllowed, flags);
+ appOp, appOpAllowed, flags, requestedPermissionInfo.protectionLevel);
group.addPermission(permission);
}
@@ -191,6 +196,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
mPackageInfo = packageInfo;
mAppSupportsRuntimePermissions = packageInfo.applicationInfo
.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1;
+ mIsEphemeralApp = packageInfo.applicationInfo.isInstantApp();
mAppOps = context.getSystemService(AppOpsManager.class);
mActivityManager = context.getSystemService(ActivityManager.class);
mDeclaringPackage = declaringPackage;
@@ -210,6 +216,11 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return mAppSupportsRuntimePermissions;
}
+ public boolean isGrantingAllowed() {
+ return (!mIsEphemeralApp || mContainsEphemeralPermission)
+ && (mAppSupportsRuntimePermissions || mContainsPreRuntimePermission);
+ }
+
public boolean isReviewRequired() {
if (mAppSupportsRuntimePermissions) {
return false;
@@ -328,6 +339,11 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
continue;
}
+ if (!permission.isGrantingAllowed(mIsEphemeralApp, mAppSupportsRuntimePermissions)) {
+ // Skip unallowed permissions.
+ continue;
+ }
+
if (mAppSupportsRuntimePermissions) {
// Do not touch permissions fixed by the system.
if (permission.isSystemFixed()) {
@@ -638,5 +654,11 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
private void addPermission(Permission permission) {
mPermissions.put(permission.getName(), permission);
+ if (permission.isEphemeral()) {
+ mContainsEphemeralPermission = true;
+ }
+ if (!permission.isRuntimeOnly()) {
+ mContainsPreRuntimePermission = true;
+ }
}
}
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java
index 5c182d0c..3a45843e 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissions.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java
@@ -19,12 +19,7 @@ package com.android.packageinstaller.permission.model;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.os.Build;
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;
diff --git a/src/com/android/packageinstaller/permission/model/Permission.java b/src/com/android/packageinstaller/permission/model/Permission.java
index f9dc6e8e..b43458c4 100644
--- a/src/com/android/packageinstaller/permission/model/Permission.java
+++ b/src/com/android/packageinstaller/permission/model/Permission.java
@@ -17,6 +17,7 @@
package com.android.packageinstaller.permission.model;
import android.content.pm.PackageManager;
+import android.content.pm.PermissionInfo;
public final class Permission {
private final String mName;
@@ -25,14 +26,18 @@ public final class Permission {
private boolean mGranted;
private boolean mAppOpAllowed;
private int mFlags;
+ private boolean mIsEphemeral;
+ private boolean mIsRuntimeOnly;
public Permission(String name, boolean granted,
- String appOp, boolean appOpAllowed, int flags) {
+ String appOp, boolean appOpAllowed, int flags, int protectionLevel) {
mName = name;
mGranted = granted;
mAppOp = appOp;
mAppOpAllowed = appOpAllowed;
mFlags = flags;
+ mIsEphemeral = (protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0;
+ mIsRuntimeOnly = (protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0;
}
public String getName() {
@@ -130,4 +135,17 @@ public final class Permission {
public void setAppOpAllowed(boolean mAppOpAllowed) {
this.mAppOpAllowed = mAppOpAllowed;
}
-} \ No newline at end of file
+
+ public boolean isEphemeral() {
+ return mIsEphemeral;
+ }
+
+ public boolean isRuntimeOnly() {
+ return mIsRuntimeOnly;
+ }
+
+ public boolean isGrantingAllowed(boolean isEphemeralApp, boolean supportsRuntimePermissions) {
+ return (!isEphemeralApp || isEphemeral())
+ && (supportsRuntimePermissions || !isRuntimeOnly());
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
index cfa2cb55..87c49801 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionApps.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -24,7 +24,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
-import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
@@ -80,7 +79,16 @@ public class PermissionApps {
createMap(loadPermissionApps());
}
+ /**
+ * Start an async refresh and call back the registered call back once done.
+ *
+ * @param getUiInfo If the UI info should be updated
+ */
public void refresh(boolean getUiInfo) {
+ if (mCallback == null) {
+ throw new IllegalStateException("callback needs to be set");
+ }
+
if (!mRefreshing) {
mRefreshing = true;
mSkipUi = !getUiInfo;
@@ -88,6 +96,15 @@ public class PermissionApps {
}
}
+ /**
+ * Refresh the state and do not return until it finishes. Should not be called while an {@link
+ * #refresh async referesh} is in progress.
+ */
+ public void refreshSync() {
+ mSkipUi = true;
+ createMap(loadPermissionApps());
+ }
+
public int getGrantedCount(ArraySet<String> launcherPkgs) {
int count = 0;
for (PermissionApp app : mPermApps) {
@@ -178,8 +195,9 @@ public class PermissionApps {
continue;
}
- if (requestedPermissionInfo.protectionLevel
- != PermissionInfo.PROTECTION_DANGEROUS
+ if ((requestedPermissionInfo.protectionLevel
+ & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS
|| (requestedPermissionInfo.flags
& PermissionInfo.FLAG_INSTALLED) == 0
|| (requestedPermissionInfo.flags
@@ -268,7 +286,8 @@ public class PermissionApps {
} catch (PackageManager.NameNotFoundException e) {
try {
PermissionInfo permInfo = mPm.getPermissionInfo(mGroupName, 0);
- if (permInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS) {
+ if ((permInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS) {
Log.w(LOG_TAG, mGroupName + " is not a runtime permission");
return;
}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroup.java b/src/com/android/packageinstaller/permission/model/PermissionGroup.java
index 8a602b44..1724d362 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionGroup.java
@@ -23,13 +23,17 @@ public final class PermissionGroup implements Comparable<PermissionGroup> {
private final String mDeclaringPackage;
private final CharSequence mLabel;
private final Drawable mIcon;
+ private final int mTotal;
+ private final int mGranted;
- PermissionGroup(String name, String declaringPackage,
- CharSequence label, Drawable icon) {
+ PermissionGroup(String name, String declaringPackage, CharSequence label, Drawable icon,
+ int total, int granted) {
mDeclaringPackage = declaringPackage;
mName = name;
mLabel = label;
mIcon = icon;
+ mTotal = total;
+ mGranted = granted;
}
public String getName() {
@@ -48,6 +52,20 @@ public final class PermissionGroup implements Comparable<PermissionGroup> {
return mIcon;
}
+ /**
+ * @return The number of apps that might request permissions of this group
+ */
+ public int getTotal() {
+ return mTotal;
+ }
+
+ /**
+ * @return The number of apps that were granted permissions of this group
+ */
+ public int getGranted() {
+ return mGranted;
+ }
+
@Override
public int compareTo(PermissionGroup another) {
return mLabel.toString().compareTo(another.mLabel.toString());
@@ -77,11 +95,19 @@ public final class PermissionGroup implements Comparable<PermissionGroup> {
return false;
}
+ if (mTotal != other.mTotal) {
+ return false;
+ }
+
+ if (mGranted != other.mGranted) {
+ return false;
+ }
+
return true;
}
@Override
public int hashCode() {
- return mName != null ? mName.hashCode() : 0;
+ return mName != null ? mName.hashCode() + mTotal + mGranted : mTotal + mGranted;
}
}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroups.java b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
index 8ca69f24..0380a2ea 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionGroups.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
@@ -53,6 +53,7 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
mContext = context;
mLoaderManager = loaderManager;
mCallback = callback;
+ mLoaderManager.initLoader(0, null, this);
}
@Override
@@ -77,11 +78,6 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
mCallback.onPermissionGroupsChanged();
}
- public void refresh() {
- mLoaderManager.restartLoader(0, null, this);
- mLoaderManager.getLoader(0).forceLoad();
- }
-
public List<PermissionGroup> getGroups() {
return mGroups;
}
@@ -95,18 +91,33 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
return null;
}
- private static final class PermissionsLoader extends AsyncTaskLoader<List<PermissionGroup>> {
+ private static final class PermissionsLoader extends AsyncTaskLoader<List<PermissionGroup>>
+ implements PackageManager.OnPermissionsChangedListener {
public PermissionsLoader(Context context) {
super(context);
}
@Override
+ protected void onStartLoading() {
+ getContext().getPackageManager().addOnPermissionsChangeListener(this);
+ forceLoad();
+ }
+
+ @Override
+ protected void onStopLoading() {
+ getContext().getPackageManager().removeOnPermissionsChangeListener(this);
+ }
+
+ @Override
public List<PermissionGroup> loadInBackground() {
+ ArraySet<String> launcherPkgs = Utils.getLauncherPackages(getContext());
+ PermissionApps.PmCache pmCache = new PermissionApps.PmCache(
+ getContext().getPackageManager());
+
List<PermissionGroup> groups = new ArrayList<>();
Set<String> seenPermissions = new ArraySet<>();
-
PackageManager packageManager = getContext().getPackageManager();
List<PermissionGroupInfo> groupInfos = packageManager.getAllPermissionGroups(0);
@@ -129,7 +140,8 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
// Cache seen permissions and see if group has runtime permissions.
for (PermissionInfo groupPermission : groupPermissions) {
seenPermissions.add(groupPermission.name);
- if (groupPermission.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS
+ if ((groupPermission.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ == PermissionInfo.PROTECTION_DANGEROUS
&& (groupPermission.flags & PermissionInfo.FLAG_INSTALLED) != 0
&& (groupPermission.flags & PermissionInfo.FLAG_REMOVED) == 0) {
hasRuntimePermissions = true;
@@ -144,9 +156,14 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
CharSequence label = loadItemInfoLabel(groupInfo);
Drawable icon = loadItemInfoIcon(groupInfo);
+ PermissionApps permApps = new PermissionApps(getContext(), groupInfo.name, null,
+ pmCache);
+ permApps.refreshSync();
+
// Create the group and add to the list.
PermissionGroup group = new PermissionGroup(groupInfo.name,
- groupInfo.packageName, label, icon);
+ groupInfo.packageName, label, icon, permApps.getTotalCount(launcherPkgs),
+ permApps.getGrantedCount(launcherPkgs));
groups.add(group);
}
@@ -179,7 +196,8 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
}
// We care only about installed runtime permissions.
- if (permissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS
+ if ((permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS
|| (permissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0) {
continue;
}
@@ -192,9 +210,15 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
CharSequence label = loadItemInfoLabel(permissionInfo);
Drawable icon = loadItemInfoIcon(permissionInfo);
+ PermissionApps permApps = new PermissionApps(getContext(), permissionInfo.name,
+ null, pmCache);
+ permApps.refreshSync();
+
// Create the group and add to the list.
PermissionGroup group = new PermissionGroup(permissionInfo.name,
- permissionInfo.packageName, label, icon);
+ permissionInfo.packageName, label, icon,
+ permApps.getTotalCount(launcherPkgs),
+ permApps.getGrantedCount(launcherPkgs));
groups.add(group);
}
}
@@ -222,5 +246,10 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
}
return icon;
}
+
+ @Override
+ public void onPermissionsChanged(int uid) {
+ forceLoad();
+ }
}
}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
deleted file mode 100644
index a87976a6..00000000
--- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * 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.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;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-
-import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
-import com.android.packageinstaller.permission.utils.Utils;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * This class handles backwards compatibility for M. Don't remove
- * until we decide to drop M support altogether.
- */
-public class PermissionStatusReceiver extends BroadcastReceiver {
-
- /**
- * Broadcast action that requests current permission granted information. It will respond
- * to the request by sending a broadcast with action defined by
- * {@link #EXTRA_GET_PERMISSIONS_RESPONSE_INTENT}. The response will contain
- * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}, as well as
- * {@link #EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT}, with contents described below or
- * a null upon failure.
- *
- * <p>If {@link Intent#EXTRA_PACKAGE_NAME} is included then the number of permissions granted, the
- * number of permissions requested and the number of granted additional permissions
- * by that package will be calculated and included as the first
- * and second elements respectively of an int[] in the response as
- * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}. The response will also deliver the list
- * of localized permission group names that are granted in
- * {@link #EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT}.
- *
- * <p>If {@link #EXTRA_PACKAGE_NAME} is not included then the number of apps granted any runtime
- * permissions and the total number of apps requesting runtime permissions will be the first
- * and second elements respectively of an int[] in the response as
- * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}.
- *
- * @hide
- */
- public static final String ACTION_GET_PERMISSIONS_COUNT
- = "android.intent.action.GET_PERMISSIONS_COUNT";
-
- /**
- * Broadcast action that requests list of all apps that have runtime permissions. It will
- * respond to the request by sending a broadcast with action defined by
- * {@link #EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT}. The response will contain
- * {@link #EXTRA_GET_PERMISSIONS_APP_LIST_RESULT}, as well as
- * {@link #EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT}, with contents described below or
- * a null upon failure.
- *
- * <p>{@link #EXTRA_GET_PERMISSIONS_APP_LIST_RESULT} will contain a list of package names of
- * apps that have runtime permissions. {@link #EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT}
- * will contain the list of app labels corresponding ot the apps in the first list.
- *
- * @hide
- */
- public static final String ACTION_GET_PERMISSIONS_PACKAGES
- = "android.intent.action.GET_PERMISSIONS_PACKAGES";
-
- /**
- * Extra included in response to {@link #ACTION_GET_PERMISSIONS_COUNT}.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_COUNT_RESULT
- = "android.intent.extra.GET_PERMISSIONS_COUNT_RESULT";
-
- /**
- * List of CharSequence of localized permission group labels.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT
- = "android.intent.extra.GET_PERMISSIONS_GROUP_LIST_RESULT";
-
- /**
- * String list of apps that have one or more runtime permissions.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_APP_LIST_RESULT
- = "android.intent.extra.GET_PERMISSIONS_APP_LIST_RESULT";
-
- /**
- * String list of app labels for apps that have one or more runtime permissions.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT
- = "android.intent.extra.GET_PERMISSIONS_APP_LABEL_LIST_RESULT";
-
- /**
- * Boolean list describing if the app is a system app for apps that have one or more runtime
- * permissions.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT
- = "android.intent.extra.GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT";
-
- /**
- * Required extra to be sent with {@link #ACTION_GET_PERMISSIONS_COUNT} broadcasts.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_RESPONSE_INTENT
- = "android.intent.extra.GET_PERMISSIONS_RESONSE_INTENT";
-
- /**
- * Required extra to be sent with {@link #ACTION_GET_PERMISSIONS_PACKAGES} broadcasts.
- * @hide
- */
- public static final String EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT
- = "android.intent.extra.GET_PERMISSIONS_PACKAGES_RESONSE_INTENT";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (ACTION_GET_PERMISSIONS_COUNT.equals(intent.getAction())) {
- Intent responseIntent = new Intent(intent.getStringExtra(
- EXTRA_GET_PERMISSIONS_RESPONSE_INTENT));
- responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-
- int[] counts = new int[3];
- ArrayList<CharSequence> grantedGroups = new ArrayList<>();
- boolean succeeded = false;
-
- boolean isForPackage = intent.hasExtra(Intent.EXTRA_PACKAGE_NAME);
-
- 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(EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts);
-
- if (isForPackage) {
- responseIntent.putExtra(EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT,
- grantedGroups.toArray(new CharSequence[grantedGroups.size()]));
- }
- }
- context.sendBroadcast(responseIntent);
- } else if (ACTION_GET_PERMISSIONS_PACKAGES.equals(intent.getAction())) {
- Intent responseIntent = new Intent(intent.getStringExtra(
- EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT));
- responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-
- List<String> appsList = new ArrayList<>();
- List<CharSequence> appLabelsList = new ArrayList<>();
- List<Boolean> isSystemAppList = new ArrayList<>();
- if (getAppsWithRuntimePermissions(context, appsList, appLabelsList, isSystemAppList)) {
- responseIntent.putExtra(EXTRA_GET_PERMISSIONS_APP_LIST_RESULT,
- appsList.toArray(new String[appsList.size()]));
- responseIntent.putExtra(EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT,
- appLabelsList.toArray(new String[appLabelsList.size()]));
- responseIntent.putExtra(EXTRA_GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT,
- toPrimitiveBoolArray(isSystemAppList));
- }
- context.sendBroadcast(responseIntent);
- }
- }
-
- public boolean getPermissionsCount(Context context, String pkg, int[] counts,
- ArrayList<CharSequence> grantedGroups) {
- try {
- PackageInfo packageInfo =
- context.getPackageManager().getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);
- AppPermissions appPermissions =
- new AppPermissions(context, packageInfo, null, false, null);
- int grantedCount = 0;
- int totalCount = 0;
- int additionalCount = 0;
-
- for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
- if (Utils.shouldShowPermission(group, pkg)) {
- totalCount++;
- if (group.areRuntimePermissionsGranted()) {
- grantedCount++;
-
- if (Utils.OS_PKG.equals(group.getDeclaringPackage())) {
- grantedGroups.add(group.getLabel());
- } else {
- additionalCount++;
- }
- }
- }
- }
-
- // Sort
- Collator coll = Collator.getInstance();
- coll.setStrength(Collator.PRIMARY);
- Collections.sort(grantedGroups, coll);
-
- // Set results
- counts[0] = grantedCount;
- counts[1] = totalCount;
- counts[2] = additionalCount;
-
- return true;
- } catch (NameNotFoundException e) {
- return false;
- }
- }
-
- public boolean getAppsWithRuntimePermissions(Context context, List<String> appsList,
- List<CharSequence> appLabelsList, List<Boolean> isSystemAppList) {
- final List<ApplicationInfo> appInfos = Utils.getAllInstalledApplications(context);
- if (appInfos == null) {
- return false;
- }
- final int appInfosSize = appInfos.size();
- try {
- ArraySet<String> launcherPackages = Utils.getLauncherPackages(context);
- 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());
- isSystemAppList.add(Utils.isSystem(appPermissions, launcherPackages));
- }
- }
- } catch (NameNotFoundException e) {
- return false;
- }
-
- return true;
- }
-
- public boolean getAppsWithPermissionsCount(Context context, int[] counts) {
- ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context);
- // Indexed by uid.
- ArrayMap<String, Boolean> grantedApps = new ArrayMap<>();
- ArrayMap<String, Boolean> allApps = new ArrayMap<>();
- for (String group : Utils.MODERN_PERMISSION_GROUPS) {
- PermissionApps permissionApps = new PermissionApps(context,
- group, null);
- permissionApps.loadNowWithoutUi();
- for (PermissionApp app : permissionApps.getApps()) {
- String key = app.getKey();
- if (Utils.isSystem(app, launcherPkgs)) {
- // We default to not showing system apps, so hide them from count.
- continue;
- }
- if (app.areRuntimePermissionsGranted()) {
- grantedApps.put(key, true);
- }
- allApps.put(key, true);
- }
- }
- counts[0] = grantedApps.size();
- counts[1] = allApps.size();
- return true;
- }
-
- private boolean[] toPrimitiveBoolArray(final List<Boolean> list) {
- final int count = list.size();
- final boolean[] result = new boolean[count];
- for (int i = 0; i < count; ++i) {
- result[i] = list.get(i);
- }
-
- return result;
- }
-}
diff --git a/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java b/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java
index fbd4f10c..9c5fd464 100644
--- a/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java
+++ b/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java
@@ -63,45 +63,4 @@ public final class RuntimePermissionPresenterServiceImpl extends RuntimePermissi
return permissions;
}
-
- @Override
- public List<ApplicationInfo> onGetAppsUsingPermissions(boolean system) {
- final List<ApplicationInfo> appInfos = Utils.getAllInstalledApplications(this);
- if (appInfos == null || appInfos.isEmpty()) {
- return null;
- }
- List<ApplicationInfo> appsResult = new ArrayList<>();
- ArraySet<String> launcherPackages = Utils.getLauncherPackages(this);
- final int appInfosSize = appInfos.size();
- for (int i = 0; i < appInfosSize; i++) {
- ApplicationInfo appInfo = appInfos.get(i);
- final String packageName = appInfo.packageName;
- final PackageInfo packageInfo;
- try {
- packageInfo = getPackageManager().getPackageInfo(
- packageName, PackageManager.GET_PERMISSIONS);
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(LOG_TAG, "Error getting package info for:" + packageName, e);
- continue;
-
- }
- AppPermissions appPermissions = new AppPermissions(this,
- packageInfo, null, false, null);
- boolean shouldShow = false;
-
-
- for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
- if (Utils.shouldShowPermission(group, packageName)) {
- shouldShow = true;
- break;
- }
- }
- if (shouldShow) {
- if (Utils.isSystem(appPermissions, launcherPackages) == system) {
- appsResult.add(appInfo);
- }
- }
- }
- return appsResult;
- }
}
diff --git a/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java b/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java
index 59e54707..50af20ed 100644
--- a/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java
+++ b/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java
@@ -96,7 +96,7 @@ public class ButtonBarLayout extends LinearLayout {
private void setStacked(boolean stacked) {
setOrientation(stacked ? LinearLayout.VERTICAL : LinearLayout.HORIZONTAL);
- setGravity(stacked ? Gravity.RIGHT : Gravity.BOTTOM);
+ setGravity(stacked ? Gravity.END : Gravity.BOTTOM);
final View spacer = findViewById(R.id.spacer);
if (spacer != null) {
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index b1347295..e7a88783 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -24,11 +24,11 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PackageParser;
import android.content.pm.PermissionInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Icon;
-import android.hardware.camera2.utils.ArrayUtils;
import android.os.Build;
import android.os.Bundle;
import android.text.Html;
@@ -45,7 +45,10 @@ import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.Permission;
+import com.android.packageinstaller.permission.ui.auto.GrantPermissionsAutoViewHandler;
import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl;
+import com.android.packageinstaller.permission.utils.ArrayUtils;
+import com.android.packageinstaller.permission.utils.EventLogger;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import java.util.ArrayList;
@@ -73,16 +76,24 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
super.onCreate(icicle);
setFinishOnTouchOutside(false);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+
setTitle(R.string.permission_request_title);
if (DeviceUtils.isTelevision(this)) {
mViewHandler = new com.android.packageinstaller.permission.ui.television
- .GrantPermissionsViewHandlerImpl(this).setResultListener(this);
+ .GrantPermissionsViewHandlerImpl(this,
+ getCallingPackage()).setResultListener(this);
} else if (DeviceUtils.isWear(this)) {
mViewHandler = new GrantPermissionsWatchViewHandler(this).setResultListener(this);
+ } else if (DeviceUtils.isAuto(this)) {
+ mViewHandler = new GrantPermissionsAutoViewHandler(this, getCallingPackage())
+ .setResultListener(this);
} else {
mViewHandler = new com.android.packageinstaller.permission.ui.handheld
- .GrantPermissionsViewHandlerImpl(this).setResultListener(this);
+ .GrantPermissionsViewHandlerImpl(this, getCallingPackage())
+ .setResultListener(this);
}
mRequestedPermissions = getIntent().getStringArrayExtra(
@@ -142,30 +153,48 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
if (group == null) {
continue;
}
+ if (!group.isGrantingAllowed()) {
+ // Skip showing groups that we know cannot be granted.
+ continue;
+ }
// We allow the user to choose only non-fixed permissions. A permission
// is fixed either by device policy or the user denying with prejudice.
if (!group.isUserFixed() && !group.isPolicyFixed()) {
switch (permissionPolicy) {
case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
if (!group.areRuntimePermissionsGranted()) {
- group.grantRuntimePermissions(false);
+ group.grantRuntimePermissions(false, computeAffectedPermissions(
+ callingPackageInfo, requestedPermission));
}
group.setPolicyFixed();
} break;
case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: {
if (group.areRuntimePermissionsGranted()) {
- group.revokeRuntimePermissions(false);
+ group.revokeRuntimePermissions(false, computeAffectedPermissions(
+ callingPackageInfo, requestedPermission));
}
group.setPolicyFixed();
} break;
default: {
if (!group.areRuntimePermissionsGranted()) {
- mRequestGrantPermissionGroups.put(group.getName(),
- new GroupState(group));
+ GroupState state = mRequestGrantPermissionGroups.get(group.getName());
+ if (state == null) {
+ state = new GroupState(group);
+ mRequestGrantPermissionGroups.put(group.getName(), state);
+ }
+ String[] affectedPermissions = computeAffectedPermissions(
+ callingPackageInfo, requestedPermission);
+ if (affectedPermissions != null) {
+ for (String affectedPermission : affectedPermissions) {
+ state.affectedPermissions = ArrayUtils.appendString(
+ state.affectedPermissions, affectedPermission);
+ }
+ }
} else {
- group.grantRuntimePermissions(false);
+ group.grantRuntimePermissions(false, computeAffectedPermissions(
+ callingPackageInfo, requestedPermission));
updateGrantResults(group);
}
} break;
@@ -185,6 +214,14 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
if (!showNextPermissionGroupGrantRequest()) {
setResultAndFinish();
+ } else if (icicle == null) {
+ int numRequestedPermissions = mRequestedPermissions.length;
+ for (int permissionNum = 0; permissionNum < numRequestedPermissions; permissionNum++) {
+ String permission = mRequestedPermissions[permissionNum];
+
+ EventLogger.logPermissionRequested(this, permission,
+ mAppPermissions.getPackageInfo().packageName);
+ }
}
}
@@ -268,11 +305,23 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
GroupState groupState = mRequestGrantPermissionGroups.get(name);
if (groupState.mGroup != null) {
if (granted) {
- groupState.mGroup.grantRuntimePermissions(doNotAskAgain);
+ groupState.mGroup.grantRuntimePermissions(doNotAskAgain,
+ groupState.affectedPermissions);
groupState.mState = GroupState.STATE_ALLOWED;
} else {
- groupState.mGroup.revokeRuntimePermissions(doNotAskAgain);
+ groupState.mGroup.revokeRuntimePermissions(doNotAskAgain,
+ groupState.affectedPermissions);
groupState.mState = GroupState.STATE_DENIED;
+
+ int numRequestedPermissions = mRequestedPermissions.length;
+ for (int i = 0; i < numRequestedPermissions; i++) {
+ String permission = mRequestedPermissions[i];
+
+ if (groupState.mGroup.hasPermission(permission)) {
+ EventLogger.logPermissionDenied(this, permission,
+ mAppPermissions.getPackageInfo().packageName);
+ }
+ }
}
updateGrantResults(groupState.mGroup);
}
@@ -283,7 +332,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
private void updateGrantResults(AppPermissionGroup group) {
for (Permission permission : group.getPermissions()) {
- final int index = ArrayUtils.getArrayIndex(
+ final int index = ArrayUtils.indexOf(
mRequestedPermissions, permission.getName());
if (index >= 0) {
mGrantResults[index] = permission.isGranted() ? PackageManager.PERMISSION_GRANTED
@@ -335,6 +384,15 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
!= PermissionInfo.PROTECTION_DANGEROUS) {
return PERMISSION_DENIED;
}
+ if ((pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) == 0
+ && callingPackageInfo.applicationInfo.isInstantApp()) {
+ return PERMISSION_DENIED;
+ }
+ if ((pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0
+ && callingPackageInfo.applicationInfo.targetSdkVersion
+ < Build.VERSION_CODES.M) {
+ return PERMISSION_DENIED;
+ }
} catch (NameNotFoundException e) {
return PERMISSION_DENIED;
}
@@ -399,6 +457,31 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);
}
+ private static String[] computeAffectedPermissions(PackageInfo callingPkg,
+ String permission) {
+ // For <= N_MR1 apps all permissions are affected.
+ if (callingPkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.N_MR1) {
+ return null;
+ }
+
+ // For N_MR1+ apps only the requested permission is affected with addition
+ // to splits of this permission applicable to apps targeting N_MR1.
+ String[] permissions = new String[] {permission};
+ for (PackageParser.SplitPermissionInfo splitPerm : PackageParser.SPLIT_PERMISSIONS) {
+ if (splitPerm.targetSdk <= Build.VERSION_CODES.N_MR1
+ || callingPkg.applicationInfo.targetSdkVersion >= splitPerm.targetSdk
+ || !permission.equals(splitPerm.rootPerm)) {
+ continue;
+ }
+ for (int i = 0; i < splitPerm.newPerms.length; i++) {
+ final String newPerm = splitPerm.newPerms[i];
+ permissions = ArrayUtils.appendString(permissions, newPerm);
+ }
+ }
+
+ return permissions;
+ }
+
private static final class GroupState {
static final int STATE_UNKNOWN = 0;
static final int STATE_ALLOWED = 1;
@@ -406,6 +489,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
final AppPermissionGroup mGroup;
int mState = STATE_UNKNOWN;
+ String[] affectedPermissions;
GroupState(AppPermissionGroup group) {
mGroup = group;
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
index 38dbf8f5..2e0e555f 100644
--- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
@@ -21,12 +21,16 @@ 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;
+import com.android.packageinstaller.permission.ui.handheld.ManageStandardPermissionsFragment;
+import com.android.packageinstaller.permission.ui.wear.AppPermissionsFragmentWear;
public final class ManagePermissionsActivity extends OverlayTouchActivity {
private static final String LOG_TAG = "ManagePermissionsActivity";
+ public static final String EXTRA_ALL_PERMISSIONS =
+ "com.android.packageinstaller.extra.ALL_PERMISSIONS";
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -44,8 +48,7 @@ public final class ManagePermissionsActivity extends OverlayTouchActivity {
fragment = com.android.packageinstaller.permission.ui.television
.ManagePermissionsFragment.newInstance();
} else {
- fragment = com.android.packageinstaller.permission.ui.handheld
- .ManagePermissionsFragment.newInstance();
+ fragment = ManageStandardPermissionsFragment.newInstance();
}
} break;
@@ -62,8 +65,15 @@ public final class ManagePermissionsActivity extends OverlayTouchActivity {
fragment = com.android.packageinstaller.permission.ui.television
.AppPermissionsFragment.newInstance(packageName);
} else {
- fragment = com.android.packageinstaller.permission.ui.handheld
- .AppPermissionsFragment.newInstance(packageName);
+ final boolean allPermissions = getIntent().getBooleanExtra(
+ EXTRA_ALL_PERMISSIONS, false);
+ if (allPermissions) {
+ fragment = com.android.packageinstaller.permission.ui.handheld
+ .AllAppPermissionsFragment.newInstance(packageName);
+ } else {
+ fragment = com.android.packageinstaller.permission.ui.handheld
+ .AppPermissionsFragment.newInstance(packageName);
+ }
}
} break;
diff --git a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
index a7800ca5..5e1e146c 100644
--- a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
@@ -15,33 +15,14 @@
*/
package com.android.packageinstaller.permission.ui;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
import android.app.Activity;
-import android.app.AppOpsManager;
-import android.os.Binder;
-import android.os.IBinder;
+import android.os.Bundle;
public class OverlayTouchActivity extends Activity {
- private final IBinder mToken = new Binder();
-
- @Override
- protected void onResume() {
- super.onResume();
- setOverlayAllowed(false);
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- setOverlayAllowed(true);
- }
-
- private void setOverlayAllowed(boolean allowed) {
- AppOpsManager appOpsManager = getSystemService(AppOpsManager.class);
- if (appOpsManager != null) {
- appOpsManager.setUserRestriction(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
- !allowed, mToken);
- appOpsManager.setUserRestriction(AppOpsManager.OP_TOAST_WINDOW,
- !allowed, mToken);
- }
+ protected void onCreate(Bundle savedInstanceState) {
+ getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ super.onCreate(savedInstanceState);
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
index 84669da2..a8d0c512 100644
--- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
@@ -34,7 +34,9 @@ import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.preference.TwoStatePreference;
+import android.text.Html;
import android.text.SpannableString;
+import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.TypedValue;
@@ -67,7 +69,8 @@ public final class ReviewPermissionsActivity extends Activity
if (DeviceUtils.isWear(this)) {
Fragment fragment = ReviewPermissionsWearFragment.newInstance(packageInfo);
- getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, fragment).commit();
} else {
setContentView(R.layout.review_permissions);
if (getFragmentManager().findFragmentById(R.id.preferences_frame) == null) {
@@ -108,6 +111,7 @@ public final class ReviewPermissionsActivity extends Activity
private Button mContinueButton;
private Button mCancelButton;
+ private Button mMoreInfoButton;
private PreferenceCategory mNewPermissionsCategory;
@@ -188,6 +192,12 @@ public final class ReviewPermissionsActivity extends Activity
} else if (view == mCancelButton) {
executeCallback(false);
activity.setResult(Activity.RESULT_CANCELED);
+ } else if (view == mMoreInfoButton) {
+ Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
+ intent.putExtra(Intent.EXTRA_PACKAGE_NAME,
+ mAppPermissions.getPackageInfo().packageName);
+ intent.putExtra(ManagePermissionsActivity.EXTRA_ALL_PERMISSIONS, true);
+ getActivity().startActivity(intent);
}
activity.finish();
}
@@ -258,34 +268,29 @@ public final class ReviewPermissionsActivity extends Activity
iconView.setImageDrawable(icon);
// Set message
- String appLabel = mAppPermissions.getAppLabel().toString();
final int labelTemplateResId = isPackageUpdated()
? R.string.permission_review_title_template_update
: R.string.permission_review_title_template_install;
- SpannableString message = new SpannableString(getString(labelTemplateResId, appLabel));
+ Spanned message = Html.fromHtml(getString(labelTemplateResId,
+ mAppPermissions.getAppLabel()), 0);
+
// Set the permission message as the title so it can be announced.
- activity.setTitle(message);
+ activity.setTitle(message.toString());
// Color the app name.
- final int appLabelStart = message.toString().indexOf(appLabel, 0);
- final int appLabelLength = appLabel.length();
-
- TypedValue typedValue = new TypedValue();
- activity.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true);
- final int color = activity.getColor(typedValue.resourceId);
-
- message.setSpan(new ForegroundColorSpan(color), appLabelStart,
- appLabelStart + appLabelLength, 0);
TextView permissionsMessageView = (TextView) activity.findViewById(
R.id.permissions_message);
permissionsMessageView.setText(message);
-
mContinueButton = (Button) getActivity().findViewById(R.id.continue_button);
mContinueButton.setOnClickListener(this);
mCancelButton = (Button) getActivity().findViewById(R.id.cancel_button);
mCancelButton.setOnClickListener(this);
+
+ mMoreInfoButton = (Button) getActivity().findViewById(
+ R.id.permission_more_info_button);
+ mMoreInfoButton.setOnClickListener(this);
}
private void loadPreferences() {
diff --git a/src/com/android/packageinstaller/permission/ui/auto/GrantPermissionsAutoViewHandler.java b/src/com/android/packageinstaller/permission/ui/auto/GrantPermissionsAutoViewHandler.java
new file mode 100644
index 00000000..a127c10e
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/auto/GrantPermissionsAutoViewHandler.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 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.auto;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.WindowManager;
+import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl;
+
+/**
+ * A {@link com.android.packageinstaller.permission.ui.GrantPermissionsViewHandler} that is
+ * specific for the auto use-case. In this case, the permissions dialog needs to be larger to make
+ * clicking and reading safer in the car. Otherwise, the UI remains the same.
+ *
+ * <p>The reason this class extends {@link GrantPermissionsViewHandlerImpl} is so that it can
+ * change the window params to allow the dialog's width to be larger.
+ */
+public class GrantPermissionsAutoViewHandler extends GrantPermissionsViewHandlerImpl {
+ public GrantPermissionsAutoViewHandler(Activity activity, String appPackageName) {
+ super(activity, appPackageName);
+ }
+
+ /**
+ * Update the given {@link android.view.WindowManager.LayoutParams} to allow the dialog to take
+ * up the entirety of the width.
+ */
+ @Override
+ public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) {
+ outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
+ outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
index 0c249e55..36570a54 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
@@ -18,6 +18,7 @@ package com.android.packageinstaller.permission.ui.handheld;
import android.app.ActionBar;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -28,20 +29,27 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.provider.Settings;
+import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.MenuItem;
+import android.widget.Switch;
+
import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.Permission;
+import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.List;
public final class AllAppPermissionsFragment extends SettingsWithHeader {
@@ -49,10 +57,20 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
private static final String KEY_OTHER = "other_perms";
+ private static final String EXTRA_FILTER_GROUP =
+ "com.android.packageinstaller.extra.FILTER_GROUP";
+
+ private List<AppPermissionGroup> mGroups;
+
public static AllAppPermissionsFragment newInstance(String packageName) {
+ return newInstance(packageName, null);
+ }
+
+ public static AllAppPermissionsFragment newInstance(String packageName, String filterGroup) {
AllAppPermissionsFragment instance = new AllAppPermissionsFragment();
Bundle arguments = new Bundle();
arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ arguments.putString(EXTRA_FILTER_GROUP, filterGroup);
instance.setArguments(arguments);
return instance;
}
@@ -63,7 +81,12 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
setHasOptionsMenu(true);
final ActionBar ab = getActivity().getActionBar();
if (ab != null) {
- ab.setTitle(R.string.all_permissions);
+ // If we target a group make this look like app permissions.
+ if (getArguments().getString(EXTRA_FILTER_GROUP) == null) {
+ ab.setTitle(R.string.all_permissions);
+ } else {
+ ab.setTitle(R.string.app_permissions);
+ }
ab.setDisplayHomeAsUpEnabled(true);
}
}
@@ -94,6 +117,7 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
ArrayList<Preference> prefs = new ArrayList<>(); // Used for sorting.
prefs.add(otherGroup);
String pkg = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ String filterGroup = getArguments().getString(EXTRA_FILTER_GROUP);
otherGroup.removeAll();
PackageManager pm = getContext().getPackageManager();
@@ -101,7 +125,8 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);
ApplicationInfo appInfo = info.applicationInfo;
- final Drawable icon = appInfo.loadIcon(pm);
+ final Drawable icon =
+ IconDrawableFactory.newInstance(getContext()).getBadgedIcon(appInfo);
final CharSequence label = appInfo.loadLabel(pm);
Intent infoIntent = null;
if (!getActivity().getIntent().getBooleanExtra(
@@ -127,14 +152,41 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
continue;
}
- if (perm.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) {
- PermissionGroupInfo group = getGroup(perm.group, pm);
- PreferenceGroup pref =
- findOrCreate(group != null ? group : perm, pm, prefs);
- pref.addPreference(getPreference(perm, group, pm));
- } else if (perm.protectionLevel == PermissionInfo.PROTECTION_NORMAL) {
- PermissionGroupInfo group = getGroup(perm.group, pm);
- otherGroup.addPreference(getPreference(perm, group, pm));
+ if (appInfo.isInstantApp()
+ && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL)
+ == 0) {
+ continue;
+ }
+ if (appInfo.targetSdkVersion < Build.VERSION_CODES.M
+ && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY)
+ != 0) {
+ continue;
+ }
+
+ if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ == PermissionInfo.PROTECTION_DANGEROUS) {
+ PackageItemInfo group = getGroup(perm.group, pm);
+ if (group == null) {
+ group = perm;
+ }
+ // If we show a targeted group, then ignore everything else.
+ if (filterGroup != null && !group.name.equals(filterGroup)) {
+ continue;
+ }
+ PreferenceGroup pref = findOrCreate(group, pm, prefs);
+ pref.addPreference(getPreference(info, perm, group, pm));
+ } else if (filterGroup == null) {
+ if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ == PermissionInfo.PROTECTION_NORMAL) {
+ PermissionGroupInfo group = getGroup(perm.group, pm);
+ otherGroup.addPreference(getPreference(info,
+ perm, group, pm));
+ }
+ }
+
+ // If we show a targeted group, then don't show 'other' permissions.
+ if (filterGroup != null) {
+ getPreferenceScreen().removePreference(otherGroup);
}
}
}
@@ -184,9 +236,19 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
return pref;
}
- private Preference getPreference(PermissionInfo perm, PermissionGroupInfo group,
- PackageManager pm) {
- Preference pref = new Preference(getContext());
+ private Preference getPreference(PackageInfo packageInfo, PermissionInfo perm,
+ PackageItemInfo group, PackageManager pm) {
+ final Preference pref;
+
+ // We allow individual permission control for some permissions if review enabled
+ final boolean mutable = Utils.isPermissionIndividuallyControlled(getContext(), perm.name);
+ if (mutable) {
+ pref = new MyMultiTargetSwitchPreference(getContext(), perm.name,
+ getPermissionGroup(packageInfo, perm.name));
+ } else {
+ pref = new Preference(getContext());
+ }
+
Drawable icon = null;
if (perm.icon != 0) {
icon = perm.loadIcon(pm);
@@ -198,17 +260,97 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
pref.setIcon(Utils.applyTint(getContext(), icon, android.R.attr.colorControlNormal));
pref.setTitle(perm.loadLabel(pm));
final CharSequence desc = perm.loadDescription(pm);
- pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- new AlertDialog.Builder(getContext())
- .setMessage(desc)
- .setPositiveButton(android.R.string.ok, null)
- .show();
- return true;
- }
+
+ pref.setOnPreferenceClickListener((Preference preference) -> {
+ new AlertDialog.Builder(getContext())
+ .setMessage(desc)
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ return mutable;
});
return pref;
}
-} \ No newline at end of file
+
+ private AppPermissionGroup getPermissionGroup(PackageInfo packageInfo,
+ String permission) {
+ AppPermissionGroup appPermissionGroup = null;
+ if (mGroups != null) {
+ final int groupCount = mGroups.size();
+ for (int i = 0; i < groupCount; i++) {
+ AppPermissionGroup currentPermissionGroup = mGroups.get(i);
+ if (currentPermissionGroup.hasPermission(permission)) {
+ appPermissionGroup = currentPermissionGroup;
+ break;
+ }
+ }
+ }
+ if (appPermissionGroup == null) {
+ appPermissionGroup = AppPermissionGroup.create(
+ getContext(), packageInfo, permission);
+ if (mGroups == null) {
+ mGroups = new ArrayList<>();
+ }
+ mGroups.add(appPermissionGroup);
+ }
+ return appPermissionGroup;
+ }
+
+ private static final class MyMultiTargetSwitchPreference extends MultiTargetSwitchPreference {
+ MyMultiTargetSwitchPreference(Context context, String permission,
+ AppPermissionGroup appPermissionGroup) {
+ super(context);
+
+ setChecked(appPermissionGroup.areRuntimePermissionsGranted(
+ new String[] {permission}));
+
+ setSwitchOnClickListener(v -> {
+ Switch switchView = (Switch) v;
+ if (switchView.isChecked()) {
+ appPermissionGroup.grantRuntimePermissions(false,
+ new String[]{permission});
+ // We are granting a permission from a group but since this is an
+ // individual permission control other permissions in the group may
+ // be revoked, hence we need to mark them user fixed to prevent the
+ // app from requesting a non-granted permission and it being granted
+ // because another permission in the group is granted. This applies
+ // only to apps that support runtime permissions.
+ if (appPermissionGroup.doesSupportRuntimePermissions()) {
+ int grantedCount = 0;
+ String[] revokedPermissionsToFix = null;
+ final int permissionCount = appPermissionGroup.getPermissions().size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission current = appPermissionGroup.getPermissions().get(i);
+ if (!current.isGranted()) {
+ if (!current.isUserFixed()) {
+ revokedPermissionsToFix = ArrayUtils.appendString(
+ revokedPermissionsToFix, current.getName());
+ }
+ } else {
+ grantedCount++;
+ }
+ }
+ if (revokedPermissionsToFix != null) {
+ // If some permissions were not granted then they should be fixed.
+ appPermissionGroup.revokeRuntimePermissions(true,
+ revokedPermissionsToFix);
+ } else if (appPermissionGroup.getPermissions().size() == grantedCount) {
+ // If all permissions are granted then they should not be fixed.
+ appPermissionGroup.grantRuntimePermissions(false);
+ }
+ }
+ } else {
+ appPermissionGroup.revokeRuntimePermissions(true,
+ new String[]{permission});
+ // If we just revoked the last permission we need to clear
+ // the user fixed state as now the app should be able to
+ // request them at runtime if supported.
+ if (appPermissionGroup.doesSupportRuntimePermissions()
+ && !appPermissionGroup.areRuntimePermissionsGranted()) {
+ appPermissionGroup.revokeRuntimePermissions(false);
+ }
+ }
+ });
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
index c824325c..89869976 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -16,13 +16,14 @@
package com.android.packageinstaller.permission.ui.handheld;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -36,18 +37,19 @@ import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
+import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
+import android.widget.Switch;
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.model.Permission;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import com.android.packageinstaller.permission.utils.Utils;
@@ -57,8 +59,6 @@ import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
import java.util.List;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
public final class AppPermissionsFragment extends SettingsWithHeader
implements OnPreferenceChangeListener {
@@ -130,12 +130,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
case MENU_ALL_PERMS: {
- Fragment frag = AllAppPermissionsFragment.newInstance(
- getArguments().getString(Intent.EXTRA_PACKAGE_NAME));
- getFragmentManager().beginTransaction()
- .replace(android.R.id.content, frag)
- .addToBackStack("AllPerms")
- .commit();
+ showAllPermissions(null);
return true;
}
}
@@ -158,6 +153,16 @@ public final class AppPermissionsFragment extends SettingsWithHeader
getClass().getName());
}
+ private void showAllPermissions(String filterGroup) {
+ Fragment frag = AllAppPermissionsFragment.newInstance(
+ getArguments().getString(Intent.EXTRA_PACKAGE_NAME),
+ filterGroup);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, frag)
+ .addToBackStack("AllPerms")
+ .commit();
+ }
+
private static void bindUi(SettingsWithHeader fragment, PackageInfo packageInfo) {
Activity activity = fragment.getActivity();
PackageManager pm = activity.getPackageManager();
@@ -168,7 +173,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
.setData(Uri.fromParts("package", packageInfo.packageName, null));
}
- Drawable icon = appInfo.loadIcon(pm);
+ Drawable icon = IconDrawableFactory.newInstance(activity).getBadgedIcon(appInfo);
CharSequence label = appInfo.loadLabel(pm);
fragment.setHeader(icon, label, infoIntent);
@@ -208,13 +213,36 @@ public final class AppPermissionsFragment extends SettingsWithHeader
boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
RestrictedSwitchPreference preference = new RestrictedSwitchPreference(context);
- preference.setOnPreferenceChangeListener(this);
+ preference.setChecked(group.areRuntimePermissionsGranted());
+
+ // Some groups may be a double target - one to toggle and one to fine manage
+ if (Utils.areGroupPermissionsIndividuallyControlled(getContext(), group.getName())) {
+ preference.setOnPreferenceClickListener((pref) -> {
+ showAllPermissions(group.getName());
+ return false;
+ });
+
+ preference.setSwitchOnClickListener(v -> {
+ Switch switchView = (Switch) v;
+ onPreferenceChange(preference, switchView.isChecked());
+ updateSummaryForIndividuallyControlledPermissionGroup(
+ group, preference);
+ preference.setCheckedOverride(switchView.isChecked());
+ });
+
+ updateSummaryForIndividuallyControlledPermissionGroup(group, preference);
+ } else {
+ preference.setOnPreferenceChangeListener(this);
+ }
+
preference.setKey(group.getName());
Drawable icon = Utils.loadDrawable(context.getPackageManager(),
group.getIconPkg(), group.getIconResId());
preference.setIcon(Utils.applyTint(getContext(), icon,
android.R.attr.colorControlNormal));
preference.setTitle(group.getLabel());
+
+
if (group.isPolicyFixed()) {
EnforcedAdmin admin = RestrictedLockUtils.getProfileOrDeviceOwner(getContext(),
group.getUserId());
@@ -227,7 +255,6 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
}
preference.setPersistent(false);
- preference.setChecked(group.areRuntimePermissionsGranted());
if (isPlatform) {
screen.addPreference(preference);
@@ -286,16 +313,22 @@ public final class AppPermissionsFragment extends SettingsWithHeader
new AlertDialog.Builder(getContext())
.setMessage(grantedByDefault ? R.string.system_warning
: R.string.old_sdk_deny_warning)
- .setNegativeButton(R.string.cancel, null)
+ .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> {
+ if (preference instanceof MultiTargetSwitchPreference) {
+ ((MultiTargetSwitchPreference) preference).setCheckedOverride(true);
+ }
+ })
.setPositiveButton(R.string.grant_dialog_button_deny_anyway,
- new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- ((SwitchPreference) preference).setChecked(false);
- group.revokeRuntimePermissions(false);
- if (!grantedByDefault) {
- mHasConfirmedRevoke = true;
- }
+ (DialogInterface dialog, int which) -> {
+ ((SwitchPreference) preference).setChecked(false);
+ group.revokeRuntimePermissions(false);
+ if (Utils.areGroupPermissionsIndividuallyControlled(getContext(),
+ group.getName())) {
+ updateSummaryForIndividuallyControlledPermissionGroup(
+ group, preference);
+ }
+ if (!grantedByDefault) {
+ mHasConfirmedRevoke = true;
}
})
.show();
@@ -314,6 +347,32 @@ public final class AppPermissionsFragment extends SettingsWithHeader
logToggledGroups();
}
+ private void updateSummaryForIndividuallyControlledPermissionGroup(
+ AppPermissionGroup group, Preference preference) {
+ int revokedCount = 0;
+ List<Permission> permissions = group.getPermissions();
+ final int permissionCount = permissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = permissions.get(i);
+ if (group.doesSupportRuntimePermissions()
+ ? !permission.isGranted() : !permission.isAppOpAllowed()) {
+ revokedCount++;
+ }
+ }
+
+ final int resId;
+ if (revokedCount == 0) {
+ resId = R.string.permission_revoked_none;
+ } else if (revokedCount == permissionCount) {
+ resId = R.string.permission_revoked_all;
+ } else {
+ resId = R.string.permission_revoked_count;
+ }
+
+ String summary = getString(resId, revokedCount);
+ preference.setSummary(summary);
+ }
+
private void addToggledGroup(AppPermissionGroup group) {
if (mToggledGroups == null) {
mToggledGroups = new ArrayList<>();
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
index 6342826f..eec43b76 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
@@ -16,7 +16,8 @@
package com.android.packageinstaller.permission.ui.handheld;
-import android.content.Context;
+import android.app.Activity;
+import android.content.Intent;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -34,10 +35,11 @@ import android.widget.TextView;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.ui.ButtonBarLayout;
import com.android.packageinstaller.permission.ui.GrantPermissionsViewHandler;
+import com.android.packageinstaller.permission.ui.ManagePermissionsActivity;
import com.android.packageinstaller.permission.ui.ManualLayoutFrame;
-public final class GrantPermissionsViewHandlerImpl
- implements GrantPermissionsViewHandler, OnClickListener {
+public class GrantPermissionsViewHandlerImpl implements GrantPermissionsViewHandler,
+ OnClickListener {
public static final String ARG_GROUP_NAME = "ARG_GROUP_NAME";
public static final String ARG_GROUP_COUNT = "ARG_GROUP_COUNT";
@@ -51,7 +53,9 @@ public final class GrantPermissionsViewHandlerImpl
private static final long OUT_DURATION = 200;
private static final long IN_DURATION = 300;
- private final Context mContext;
+ private final Activity mActivity;
+ private final String mAppPackageName;
+ private final boolean mPermissionReviewRequired;
private ResultListener mResultListener;
@@ -68,6 +72,7 @@ public final class GrantPermissionsViewHandlerImpl
private TextView mMessageView;
private CheckBox mDoNotAskCheckbox;
private Button mAllowButton;
+ private Button mMoreInfoButton;
private ManualLayoutFrame mRootView;
@@ -77,8 +82,10 @@ public final class GrantPermissionsViewHandlerImpl
private ViewGroup mDialogContainer;
private ButtonBarLayout mButtonBar;
- public GrantPermissionsViewHandlerImpl(Context context) {
- mContext = context;
+ public GrantPermissionsViewHandlerImpl(Activity activity, String appPackageName) {
+ mActivity = activity;
+ mAppPackageName = appPackageName;
+ mPermissionReviewRequired = activity.getPackageManager().isPermissionReviewModeEnabled();
}
@Override
@@ -140,7 +147,7 @@ public final class GrantPermissionsViewHandlerImpl
private void animateOldContent(Runnable callback) {
// Fade out old description group and scale out the icon for it.
- Interpolator interpolator = AnimationUtils.loadInterpolator(mContext,
+ Interpolator interpolator = AnimationUtils.loadInterpolator(mActivity,
android.R.interpolator.fast_out_linear_in);
// Icon scale to zero
@@ -170,7 +177,7 @@ public final class GrantPermissionsViewHandlerImpl
}
private void attachNewContent(final Runnable callback) {
- mCurrentDesc = (ViewGroup) LayoutInflater.from(mContext).inflate(
+ mCurrentDesc = (ViewGroup) LayoutInflater.from(mActivity).inflate(
R.layout.permission_description, mDescContainer, false);
mDescContainer.removeAllViews();
mDescContainer.addView(mCurrentDesc);
@@ -200,7 +207,7 @@ public final class GrantPermissionsViewHandlerImpl
mDescContainer.animate()
.translationY(0)
.scaleY(1.0f)
- .setInterpolator(AnimationUtils.loadInterpolator(mContext,
+ .setInterpolator(AnimationUtils.loadInterpolator(mActivity,
android.R.interpolator.linear_out_slow_in))
.setDuration(IN_DURATION)
.withEndAction(callback)
@@ -224,7 +231,7 @@ public final class GrantPermissionsViewHandlerImpl
}
private void animateNewContent() {
- Interpolator interpolator = AnimationUtils.loadInterpolator(mContext,
+ Interpolator interpolator = AnimationUtils.loadInterpolator(mActivity,
android.R.interpolator.linear_out_slow_in);
// Description slide in
@@ -265,7 +272,7 @@ public final class GrantPermissionsViewHandlerImpl
@Override
public View createView() {
- mRootView = (ManualLayoutFrame) LayoutInflater.from(mContext)
+ mRootView = (ManualLayoutFrame) LayoutInflater.from(mActivity)
.inflate(R.layout.grant_permissions, null);
mButtonBar = (ButtonBarLayout) mRootView.findViewById(R.id.button_group);
mButtonBar.setAllowStacking(true);
@@ -273,13 +280,20 @@ public final class GrantPermissionsViewHandlerImpl
mIconView = (ImageView) mRootView.findViewById(R.id.permission_icon);
mCurrentGroupView = (TextView) mRootView.findViewById(R.id.current_page_text);
mDoNotAskCheckbox = (CheckBox) mRootView.findViewById(R.id.do_not_ask_checkbox);
+
mAllowButton = (Button) mRootView.findViewById(R.id.permission_allow_button);
+ mAllowButton.setOnClickListener(this);
+
+ if (mPermissionReviewRequired) {
+ mMoreInfoButton = (Button) mRootView.findViewById(R.id.permission_more_info_button);
+ mMoreInfoButton.setVisibility(View.VISIBLE);
+ mMoreInfoButton.setOnClickListener(this);
+ }
mDialogContainer = (ViewGroup) mRootView.findViewById(R.id.dialog_container);
mDescContainer = (ViewGroup) mRootView.findViewById(R.id.desc_container);
mCurrentDesc = (ViewGroup) mRootView.findViewById(R.id.perm_desc_root);
- mAllowButton.setOnClickListener(this);
mRootView.findViewById(R.id.permission_deny_button).setOnClickListener(this);
mDoNotAskCheckbox.setOnClickListener(this);
@@ -298,17 +312,17 @@ public final class GrantPermissionsViewHandlerImpl
}
private void updateDescription() {
- mIconView.setImageDrawable(mGroupIcon.loadDrawable(mContext));
+ mIconView.setImageDrawable(mGroupIcon.loadDrawable(mActivity));
mMessageView.setText(mGroupMessage);
}
private void updateGroup() {
if (mGroupCount > 1) {
mCurrentGroupView.setVisibility(View.VISIBLE);
- mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template,
+ mCurrentGroupView.setText(mActivity.getString(R.string.current_permission_template,
mGroupIndex + 1, mGroupCount));
} else {
- mCurrentGroupView.setVisibility(View.INVISIBLE);
+ mCurrentGroupView.setVisibility(View.GONE);
}
}
@@ -340,6 +354,12 @@ public final class GrantPermissionsViewHandlerImpl
mShowDonNotAsk && mDoNotAskCheckbox.isChecked());
}
break;
+ case R.id.permission_more_info_button:
+ Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
+ intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppPackageName);
+ intent.putExtra(ManagePermissionsActivity.EXTRA_ALL_PERMISSIONS, true);
+ mActivity.startActivity(intent);
+ break;
case R.id.do_not_ask_checkbox:
mAllowButton.setEnabled(!mDoNotAskCheckbox.isChecked());
break;
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
new file mode 100644
index 00000000..4f740e2c
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 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.handheld;
+
+import android.view.MenuItem;
+
+/**
+ * Fragment that allows the user to manage custom permissions.
+ */
+public class ManageCustomPermissionsFragment extends ManagePermissionsFragment {
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ getActivity().setTitle(com.android.packageinstaller.R.string.additional_permissions);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void updatePermissionsUi() {
+ updatePermissionsUi(false);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
index 238af36d..e50a1d89 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
@@ -16,23 +16,16 @@
package com.android.packageinstaller.permission.ui.handheld;
import android.app.ActionBar;
-import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.util.ArraySet;
import android.util.Log;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
+
import com.android.packageinstaller.R;
-import com.android.packageinstaller.permission.model.PermissionApps;
import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.model.PermissionGroups;
@@ -40,25 +33,20 @@ import com.android.packageinstaller.permission.utils.Utils;
import java.util.List;
-public final class ManagePermissionsFragment extends PermissionsFrameFragment
+/**
+ * Superclass for fragments allowing the user to manage permissions.
+ */
+abstract class ManagePermissionsFragment extends PermissionsFrameFragment
implements PermissionGroups.PermissionsGroupsChangeCallback,
Preference.OnPreferenceClickListener {
private static final String LOG_TAG = "ManagePermissionsFragment";
- private static final String OS_PKG = "android";
-
- private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
+ static final String OS_PKG = "android";
private ArraySet<String> mLauncherPkgs;
private PermissionGroups mPermissions;
- private PreferenceScreen mExtraScreen;
-
- public static ManagePermissionsFragment newInstance() {
- return new ManagePermissionsFragment();
- }
-
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -69,23 +57,7 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
ab.setDisplayHomeAsUpEnabled(true);
}
mLauncherPkgs = Utils.getLauncherPackages(getContext());
- mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mPermissions.refresh();
- updatePermissionsUi();
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- getActivity().finish();
- return true;
- }
- return super.onOptionsItemSelected(item);
+ mPermissions = new PermissionGroups(getContext(), getLoaderManager(), this);
}
@Override
@@ -108,27 +80,34 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
return true;
}
- @Override
- public void onPermissionGroupsChanged() {
- updatePermissionsUi();
+ /**
+ * @return the permissions
+ */
+ protected PermissionGroups getPermissions() {
+ return mPermissions;
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- bindPermissionUi(getActivity(), getView());
- }
-
- private static void bindPermissionUi(Context context, View rootView) {
- if (context == null || rootView == null) {
- return;
- }
+ public void onPermissionGroupsChanged() {
+ updatePermissionsUi();
}
- private void updatePermissionsUi() {
+ /**
+ * Update the preferences to show the new {@link #getPermissions() permissions}.
+ */
+ protected abstract void updatePermissionsUi();
+
+ /**
+ * Add preferences for all permissions of a type to the preference screen.
+ *
+ * @param addSystemPermissions If the permissions added should be system permissions or not
+ *
+ * @return The preference screen the permissions were added to
+ */
+ protected PreferenceScreen updatePermissionsUi(boolean addSystemPermissions) {
Context context = getActivity();
if (context == null) {
- return;
+ return null;
}
List<PermissionGroup> groups = mPermissions.getGroups();
@@ -136,6 +115,8 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
if (screen == null) {
screen = getPreferenceManager().createPreferenceScreen(getActivity());
setPreferenceScreen(screen);
+ } else {
+ screen.removeAll();
}
// Use this to speed up getting the info for all of the PermissionApps below.
@@ -144,107 +125,30 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
for (PermissionGroup group : groups) {
boolean isSystemPermission = group.getDeclaringPackage().equals(OS_PKG);
- Preference preference = findPreference(group.getName());
- if (preference == null && mExtraScreen != null) {
- preference = mExtraScreen.findPreference(group.getName());
- }
- if (preference == null) {
- preference = new Preference(context);
- preference.setOnPreferenceClickListener(this);
- preference.setKey(group.getName());
- preference.setIcon(Utils.applyTint(context, group.getIcon(),
- android.R.attr.colorControlNormal));
- preference.setTitle(group.getLabel());
- // Set blank summary so that no resizing/jumping happens when the summary is loaded.
- preference.setSummary(" ");
- preference.setPersistent(false);
- if (isSystemPermission) {
+ if (addSystemPermissions == isSystemPermission) {
+ Preference preference = findPreference(group.getName());
+
+ if (preference == null) {
+ preference = new Preference(context);
+ preference.setOnPreferenceClickListener(this);
+ preference.setKey(group.getName());
+ preference.setIcon(Utils.applyTint(context, group.getIcon(),
+ android.R.attr.colorControlNormal));
+ preference.setTitle(group.getLabel());
+ // Set blank summary so that no resizing/jumping happens when the summary is
+ // loaded.
+ preference.setSummary(" ");
+ preference.setPersistent(false);
screen.addPreference(preference);
- } else {
- if (mExtraScreen == null) {
- mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
- }
- mExtraScreen.addPreference(preference);
}
+ preference.setSummary(getString(R.string.app_permissions_group_summary,
+ group.getGranted(), group.getTotal()));
}
- final Preference finalPref = preference;
-
- new PermissionApps(getContext(), group.getName(), new PermissionApps.Callback() {
- @Override
- public void onPermissionsLoaded(PermissionApps permissionApps) {
- if (getActivity() == null) {
- return;
- }
- int granted = permissionApps.getGrantedCount(mLauncherPkgs);
- int total = permissionApps.getTotalCount(mLauncherPkgs);
- finalPref.setSummary(getString(R.string.app_permissions_group_summary,
- granted, total));
- }
- }, cache).refresh(false);
- }
-
- if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0
- && screen.findPreference(EXTRA_PREFS_KEY) == null) {
- Preference extraScreenPreference = new Preference(context);
- extraScreenPreference.setKey(EXTRA_PREFS_KEY);
- extraScreenPreference.setIcon(Utils.applyTint(context,
- R.drawable.ic_more_items,
- android.R.attr.colorControlNormal));
- extraScreenPreference.setTitle(R.string.additional_permissions);
- extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
- frag.setTargetFragment(ManagePermissionsFragment.this, 0);
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.replace(android.R.id.content, frag);
- ft.addToBackStack(null);
- ft.commit();
- return true;
- }
- });
- int count = mExtraScreen.getPreferenceCount();
- extraScreenPreference.setSummary(getResources().getQuantityString(
- R.plurals.additional_permissions_more, count, count));
- screen.addPreference(extraScreenPreference);
}
if (screen.getPreferenceCount() != 0) {
setLoading(false /* loading */, true /* animate */);
}
- }
-
- public static class AdditionalPermissionsFragment extends PermissionsFrameFragment {
- @Override
- public void onCreate(Bundle icicle) {
- setLoading(true /* loading */, false /* animate */);
- super.onCreate(icicle);
- getActivity().setTitle(R.string.additional_permissions);
- setHasOptionsMenu(true);
- setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen);
- setLoading(false /* loading */, true /* animate */);
- }
-
- @Override
- public void onDestroy() {
- getActivity().setTitle(R.string.app_permissions);
- super.onDestroy();
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- getFragmentManager().popBackStack();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- bindPermissionUi(getActivity(), getView());
- }
+ return screen;
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
new file mode 100644
index 00000000..075ab3ce
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2016 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.handheld;
+
+import android.app.FragmentTransaction;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.view.MenuItem;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.model.PermissionGroup;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.List;
+
+/**
+ * Fragment that allows the user to manage standard permissions.
+ */
+public final class ManageStandardPermissionsFragment extends ManagePermissionsFragment {
+ private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
+
+ /**
+ * @return A new fragment
+ */
+ public static ManageStandardPermissionsFragment newInstance() {
+ return new ManageStandardPermissionsFragment();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ getActivity().setTitle(com.android.packageinstaller.R.string.app_permissions);
+ }
+
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ getActivity().finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void updatePermissionsUi() {
+ PreferenceScreen screen = updatePermissionsUi(true);
+ if (screen == null) {
+ return;
+ }
+
+ // Check if we need an additional permissions preference
+ List<PermissionGroup> groups = getPermissions().getGroups();
+ int numExtraPermissions = 0;
+ for (PermissionGroup group : groups) {
+ if (!group.getDeclaringPackage().equals(ManagePermissionsFragment.OS_PKG)) {
+ numExtraPermissions++;
+ }
+ }
+
+ Preference additionalPermissionsPreference = screen.findPreference(EXTRA_PREFS_KEY);
+ if (numExtraPermissions == 0) {
+ if (additionalPermissionsPreference != null) {
+ screen.removePreference(additionalPermissionsPreference);
+ }
+ } else {
+ if (additionalPermissionsPreference == null) {
+ additionalPermissionsPreference = new Preference(getActivity());
+ additionalPermissionsPreference.setKey(EXTRA_PREFS_KEY);
+ additionalPermissionsPreference.setIcon(Utils.applyTint(getActivity(),
+ R.drawable.ic_more_items,
+ android.R.attr.colorControlNormal));
+ additionalPermissionsPreference.setTitle(R.string.additional_permissions);
+ additionalPermissionsPreference.setOnPreferenceClickListener(preference -> {
+ ManageCustomPermissionsFragment frag =
+ new ManageCustomPermissionsFragment();
+ frag.setTargetFragment(ManageStandardPermissionsFragment.this, 0);
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.replace(android.R.id.content, frag);
+ ft.addToBackStack(null);
+ ft.commit();
+ return true;
+ });
+
+ screen.addPreference(additionalPermissionsPreference);
+ }
+
+ additionalPermissionsPreference.setSummary(getResources().getQuantityString(
+ R.plurals.additional_permissions_more, numExtraPermissions,
+ numExtraPermissions));
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/MultiTargetSwitchPreference.java b/src/com/android/packageinstaller/permission/ui/handheld/MultiTargetSwitchPreference.java
new file mode 100644
index 00000000..61e4fb9f
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/MultiTargetSwitchPreference.java
@@ -0,0 +1,59 @@
+/*
+* Copyright (C) 2016 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.handheld;
+
+import android.content.Context;
+import android.preference.SwitchPreference;
+import android.view.View;
+import android.widget.Switch;
+
+class MultiTargetSwitchPreference extends SwitchPreference {
+ private View.OnClickListener mSwitchOnClickLister;
+
+ public MultiTargetSwitchPreference(Context context) {
+ super(context);
+ }
+
+ public void setCheckedOverride(boolean checked) {
+ super.setChecked(checked);
+ }
+
+ @Override
+ public void setChecked(boolean checked) {
+ // If double target behavior is enabled do nothing
+ if (mSwitchOnClickLister == null) {
+ super.setChecked(checked);
+ }
+ }
+
+ public void setSwitchOnClickListener(View.OnClickListener listener) {
+ mSwitchOnClickLister = listener;
+ }
+
+ @Override
+ protected void onBindView(View view) {
+ super.onBindView(view);
+ Switch switchView = (Switch) view.findViewById(
+ com.android.internal.R.id.switch_widget);
+ if (mSwitchOnClickLister != null) {
+ switchView.setOnClickListener(mSwitchOnClickLister);
+ final int padding = (int) ((view.getMeasuredHeight()
+ - switchView.getMeasuredHeight()) / 2 + 0.5f);
+ switchView.setPadding(padding, padding, 0, padding);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index 899c3c2c..f4dceb76 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -15,6 +15,8 @@
*/
package com.android.packageinstaller.permission.ui.handheld;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -34,6 +36,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
@@ -49,8 +52,6 @@ import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
import java.util.List;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
public final class PermissionAppsFragment extends PermissionsFrameFragment implements Callback,
Preference.OnPreferenceChangeListener {
@@ -58,6 +59,9 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
private static final int MENU_HIDE_SYSTEM = Menu.FIRST + 1;
private static final String KEY_SHOW_SYSTEM_PREFS = "_showSystem";
+ private static final String SHOW_SYSTEM_KEY = PermissionAppsFragment.class.getName()
+ + KEY_SHOW_SYSTEM_PREFS;
+
public static PermissionAppsFragment newInstance(String permissionName) {
return setPermissionName(new PermissionAppsFragment(), permissionName);
}
@@ -87,6 +91,11 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ if (savedInstanceState != null) {
+ mShowSystem = savedInstanceState.getBoolean(SHOW_SYSTEM_KEY);
+ }
+
setLoading(true /* loading */, false /* animate */);
setHasOptionsMenu(true);
final ActionBar ab = getActivity().getActionBar();
@@ -101,6 +110,13 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
}
@Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putBoolean(SHOW_SYSTEM_KEY, mShowSystem);
+ }
+
+ @Override
public void onResume() {
super.onResume();
mPermissionApps.refresh(true);
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java b/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java
index 44a7f471..a5dde173 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java
@@ -28,7 +28,7 @@ import com.android.settingslib.RestrictedLockUtils;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-public class RestrictedSwitchPreference extends SwitchPreference {
+public class RestrictedSwitchPreference extends MultiTargetSwitchPreference {
private final Context mContext;
private boolean mDisabledByAdmin;
private EnforcedAdmin mEnforcedAdmin;
diff --git a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
index 57342c25..a2b70058 100644
--- a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
@@ -156,12 +156,24 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
|| (perm.flags & PermissionInfo.FLAG_REMOVED) != 0) {
continue;
}
+ if (appInfo.isInstantApp()
+ && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) == 0) {
+ continue;
+ }
+ if (appInfo.targetSdkVersion < Build.VERSION_CODES.M
+ && (perm.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY)
+ != 0) {
+ continue;
+ }
+
PermissionGroupInfo group = getGroup(perm.group, pm);
- if (perm.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) {
+ if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ == PermissionInfo.PROTECTION_DANGEROUS) {
PreferenceGroup pref = findOrCreate(group != null ? group : perm, pm, prefs);
pref.addPreference(getPreference(perm, group));
- } else if (perm.protectionLevel == PermissionInfo.PROTECTION_NORMAL) {
+ } else if ((perm.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ == PermissionInfo.PROTECTION_NORMAL) {
PreferenceGroup otherGroup = getOtherGroup();
if (prefs.indexOf(otherGroup) < 0) {
prefs.add(otherGroup);
@@ -303,4 +315,4 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
}
return false;
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
index 3a2e06cf..3aa1635c 100644
--- a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
@@ -27,7 +27,6 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -38,14 +37,11 @@ import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceScreen;
import android.support.v7.preference.PreferenceViewHolder;
-import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
import android.widget.Toast;
import com.android.packageinstaller.R;
diff --git a/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java b/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java
index a2538821..3aacc89c 100644
--- a/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java
+++ b/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java
@@ -38,7 +38,7 @@ public final class GrantPermissionsViewHandlerImpl implements GrantPermissionsVi
private Button mSoftDenyButton;
private Button mHardDenyButton;
- public GrantPermissionsViewHandlerImpl(Context context) {
+ public GrantPermissionsViewHandlerImpl(Context context, String appPackageName) {
mContext = context;
}
diff --git a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
index 35f866de..7c5c5f48 100644
--- a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
@@ -15,13 +15,13 @@
*/
package com.android.packageinstaller.permission.ui.television;
-import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.support.annotation.Nullable;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceScreen;
@@ -31,7 +31,6 @@ import android.view.MenuItem;
import android.view.View;
import com.android.packageinstaller.R;
-import com.android.packageinstaller.permission.model.PermissionApps;
import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.model.PermissionGroups;
@@ -67,14 +66,7 @@ public final class ManagePermissionsFragment extends SettingsWithHeader
ab.setDisplayHomeAsUpEnabled(true);
}
mLauncherPkgs = Utils.getLauncherPackages(getContext());
- mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mPermissions.refresh();
- updatePermissionsUi();
+ mPermissions = new PermissionGroups(getContext(), getLoaderManager(), this);
}
@Override
@@ -163,20 +155,9 @@ public final class ManagePermissionsFragment extends SettingsWithHeader
mExtraScreen.addPreference(preference);
}
}
- final Preference finalPref = preference;
- new PermissionApps(getContext(), group.getName(), new PermissionApps.Callback() {
- @Override
- public void onPermissionsLoaded(PermissionApps permissionApps) {
- if (getActivity() == null) {
- return;
- }
- int granted = permissionApps.getGrantedCount(mLauncherPkgs);
- int total = permissionApps.getTotalCount(mLauncherPkgs);
- finalPref.setSummary(getString(R.string.app_permissions_group_summary,
- granted, total));
- }
- }, cache).refresh(false);
+ preference.setSummary(getString(R.string.app_permissions_group_summary,
+ group.getGranted(), group.getTotal()));
}
if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
index 7826c788..9a30cdac 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.packageinstaller.permission.ui.television;
-import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -36,8 +35,6 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import com.android.packageinstaller.DeviceUtils;
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
index 6119f98c..d0112d17 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
@@ -16,8 +16,8 @@
package com.android.packageinstaller.permission.ui.television;
-import android.annotation.Nullable;
import android.os.Bundle;
+import android.support.annotation.Nullable;
import android.support.v14.preference.PreferenceFragment;
import android.support.v17.leanback.widget.VerticalGridView;
import android.support.v7.preference.PreferenceScreen;
@@ -29,7 +29,7 @@ import android.view.animation.Animation;
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;
public abstract class PermissionsFrameFragment extends PreferenceFragment {
diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
index 08753b15..4e665dc5 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
@@ -42,9 +42,9 @@ import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.Permission;
+import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.Utils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
diff --git a/src/com/android/packageinstaller/permission/utils/EventLogger.java b/src/com/android/packageinstaller/permission/utils/EventLogger.java
new file mode 100644
index 00000000..4c919570
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/EventLogger.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2016 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.utils;
+
+import android.Manifest;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * For each permission there are four events. The events are in the order of
+ * #ALL_DANGEROUS_PERMISSIONS. The four events per permission are (in that order): "requested",
+ * "granted", "denied", and "revoked".
+ */
+public class EventLogger {
+ private static final String LOG_TAG = EventLogger.class.getSimpleName();
+
+ /** All dangerous permission names in the same order as the events in MetricsEvent */
+ private static final List<String> ALL_DANGEROUS_PERMISSIONS = Arrays.asList(
+ Manifest.permission.READ_CALENDAR,
+ Manifest.permission.WRITE_CALENDAR,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_CONTACTS,
+ Manifest.permission.WRITE_CONTACTS,
+ Manifest.permission.GET_ACCOUNTS,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.RECORD_AUDIO,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CALL_PHONE,
+ Manifest.permission.READ_CALL_LOG,
+ Manifest.permission.WRITE_CALL_LOG,
+ Manifest.permission.ADD_VOICEMAIL,
+ Manifest.permission.USE_SIP,
+ Manifest.permission.PROCESS_OUTGOING_CALLS,
+ Manifest.permission.READ_CELL_BROADCASTS,
+ Manifest.permission.BODY_SENSORS,
+ Manifest.permission.SEND_SMS,
+ Manifest.permission.RECEIVE_SMS,
+ Manifest.permission.READ_SMS,
+ Manifest.permission.RECEIVE_WAP_PUSH,
+ Manifest.permission.RECEIVE_MMS,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.READ_PHONE_NUMBERS,
+ Manifest.permission.ANSWER_PHONE_CALLS);
+
+ private static final List<String> ALL_APPOP_PERMISSIONS = Arrays.asList(
+ Manifest.permission.ACCESS_NOTIFICATIONS,
+ Manifest.permission.SYSTEM_ALERT_WINDOW,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.REQUEST_INSTALL_PACKAGES);
+
+ /**
+ * Get the first event id for the permission.
+ *
+ * <p>There are four events for each permission: <ul>
+ * <li>Request permission: first id + 0</li>
+ * <li>Grant permission: first id + 1</li>
+ * <li>Request for permission denied: first id + 2</li>
+ * <li>Revoke permission: first id + 3</li>
+ * </ul></p>
+ *
+ * @param name name of the permission
+ *
+ * @return The first event id for the permission
+ */
+ private static int getBaseEventId(@NonNull String name) {
+ int permIndex = ALL_DANGEROUS_PERMISSIONS.indexOf(name);
+
+ if (permIndex != -1) {
+ return MetricsEvent.ACTION_PERMISSION_REQUEST_READ_CALENDAR + permIndex * 4;
+ } else {
+ int appOpIndex = ALL_APPOP_PERMISSIONS.indexOf(name);
+
+ if (appOpIndex != -1) {
+ return MetricsEvent.ACTION_APPOP_REQUEST_ACCESS_NOTIFICATIONS + appOpIndex * 4;
+ } else {
+ if (AppOpsManager.permissionToOpCode(name) == AppOpsManager.OP_NONE
+ || "user".equals(SystemProperties.get("ro.build.type"))) {
+ Log.i(LOG_TAG, "Unknown permission " + name);
+
+ return MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN;
+ } else {
+ // Most likely #ALL_DANGEROUS_PERMISSIONS or #ALL_APPOP_PERMISSIONS needs to be
+ // updated.
+ //
+ // Also update
+ // - metrics_constants.proto
+ // and most likely:
+ // - PackageManagerService#ALL_DANGEROUS_PERMISSIONS
+ throw new IllegalStateException("Unknown permission " + name);
+ }
+ }
+ }
+ }
+
+ /**
+ * Log that a permission was requested.
+ *
+ * @param context Context of the caller
+ * @param name name of the permission
+ * @param packageName package permission if for
+ */
+ public static void logPermissionRequested(@NonNull Context context, @NonNull String name,
+ @NonNull String packageName) {
+ MetricsLogger.action(context, getBaseEventId(name), packageName);
+ }
+
+ /**
+ * Log that a permission request was denied.
+ *
+ * @param context Context of the caller
+ * @param name name of the permission
+ * @param packageName package permission if for
+ */
+ public static void logPermissionDenied(@NonNull Context context, @NonNull String name,
+ @NonNull String packageName) {
+ MetricsLogger.action(context, getBaseEventId(name) + 2, packageName);
+ }
+
+}
diff --git a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
index 8280ba36..9b7673a9 100644
--- a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
+++ b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
@@ -18,7 +18,9 @@ package com.android.packageinstaller.permission.utils;
import android.content.pm.PackageInfo;
import android.util.EventLog;
+
import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.Permission;
import java.util.List;
@@ -28,10 +30,10 @@ public final class SafetyNetLogger {
private static final int SNET_NET_EVENT_LOG_TAG = 0x534e4554;
// Log tag for the result of permissions request.
- private static final String PERMISSIONS_REQUESTED = "permissions_requested";
+ private static final String PERMISSIONS_REQUESTED = "individual_permissions_requested";
// Log tag for the result of permissions toggling.
- private static final String PERMISSIONS_TOGGLED = "permissions_toggled";
+ private static final String PERMISSIONS_TOGGLED = "individual_permissions_toggled";
private SafetyNetLogger() {
/* do nothing */
@@ -40,31 +42,45 @@ public final class SafetyNetLogger {
public static void logPermissionsRequested(PackageInfo packageInfo,
List<AppPermissionGroup> groups) {
EventLog.writeEvent(SNET_NET_EVENT_LOG_TAG, PERMISSIONS_REQUESTED,
- packageInfo.applicationInfo.uid, buildChangedGroupForPackageMessage(
+ packageInfo.applicationInfo.uid, buildChangedPermissionForPackageMessage(
packageInfo.packageName, groups));
}
public static void logPermissionsToggled(String packageName, List<AppPermissionGroup> groups) {
EventLog.writeEvent(SNET_NET_EVENT_LOG_TAG, PERMISSIONS_TOGGLED,
- android.os.Process.myUid(), buildChangedGroupForPackageMessage(
+ android.os.Process.myUid(), buildChangedPermissionForPackageMessage(
packageName, groups));
}
- private static String buildChangedGroupForPackageMessage(String packageName,
+ private static String buildChangedPermissionForPackageMessage(String packageName,
List<AppPermissionGroup> groups) {
StringBuilder builder = new StringBuilder();
builder.append(packageName).append(':');
- final int groupCount = groups.size();
- for (int i = 0; i < groupCount; i++) {
- AppPermissionGroup group = groups.get(i);
- if (i > 0) {
- builder.append(';');
+ int groupCount = groups.size();
+ for (int groupNum = 0; groupNum < groupCount; groupNum++) {
+ AppPermissionGroup group = groups.get(groupNum);
+
+ int permissionCount = group.getPermissions().size();
+ for (int permissionNum = 0; permissionNum < permissionCount; permissionNum++) {
+ Permission permission = group.getPermissions().get(permissionNum);
+
+ if (groupNum > 0 || permissionNum > 0) {
+ builder.append(';');
+ }
+
+ builder.append(permission.getName()).append('|');
+
+ if (group.doesSupportRuntimePermissions()) {
+ builder.append(permission.isGranted()).append('|');
+ } else {
+ builder.append(permission.isGranted() && (permission.getAppOp() == null
+ || permission.isAppOpAllowed())).append('|');
+ }
+
+ builder.append(permission.getFlags());
}
- builder.append(group.getName()).append('|');
- builder.append(group.areRuntimePermissionsGranted()).append('|');
- builder.append(group.getFlags());
}
return builder.toString();
diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java
index 051af885..3d64c85c 100644
--- a/src/com/android/packageinstaller/permission/utils/Utils.java
+++ b/src/com/android/packageinstaller/permission/utils/Utils.java
@@ -86,6 +86,10 @@ public final class Utils {
return false;
}
+ if (!group.isGrantingAllowed()) {
+ return false;
+ }
+
final boolean isPlatformPermission = group.getDeclaringPackage().equals(OS_PKG);
// Show legacy permissions only if the user chose that.
if (isPlatformPermission
@@ -154,4 +158,19 @@ public final class Utils {
|| Manifest.permission_group.PHONE.equals(group)
|| Manifest.permission_group.CONTACTS.equals(group);
}
+
+ public static boolean isPermissionIndividuallyControlled(Context context, String permission) {
+ if (!context.getPackageManager().isPermissionReviewModeEnabled()) {
+ return false;
+ }
+ return Manifest.permission.READ_CONTACTS.equals(permission)
+ || Manifest.permission.WRITE_CONTACTS.equals(permission)
+ || Manifest.permission.SEND_SMS.equals(permission)
+ || Manifest.permission.RECEIVE_SMS.equals(permission)
+ || Manifest.permission.READ_SMS.equals(permission)
+ || Manifest.permission.RECEIVE_MMS.equals(permission)
+ || Manifest.permission.CALL_PHONE.equals(permission)
+ || Manifest.permission.READ_CALL_LOG.equals(permission)
+ || Manifest.permission.WRITE_CALL_LOG.equals(permission);
+ }
}
diff --git a/src/com/android/packageinstaller/television/ErrorFragment.java b/src/com/android/packageinstaller/television/ErrorFragment.java
new file mode 100644
index 00000000..c7b61bbe
--- /dev/null
+++ b/src/com/android/packageinstaller/television/ErrorFragment.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2016 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.television;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v17.leanback.app.GuidedStepFragment;
+import android.support.v17.leanback.widget.GuidanceStylist;
+import android.support.v17.leanback.widget.GuidedAction;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.UninstallerActivity;
+
+import java.util.List;
+
+public class ErrorFragment extends GuidedStepFragment {
+ public static final String TITLE = "com.android.packageinstaller.arg.title";
+ public static final String TEXT = "com.android.packageinstaller.arg.text";
+
+ @Override
+ public int onProvideTheme() {
+ return R.style.Theme_Leanback_GuidedStep;
+ }
+
+ @Override
+ public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
+ return new GuidanceStylist.Guidance(
+ getString(getArguments().getInt(TITLE)),
+ getString(getArguments().getInt(TEXT)),
+ null,
+ null);
+ }
+
+ @Override
+ public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
+ actions.add(new GuidedAction.Builder(getContext())
+ .clickAction(GuidedAction.ACTION_ID_OK)
+ .build());
+ }
+
+ @Override
+ public void onGuidedActionClicked(GuidedAction action) {
+ if (isAdded()) {
+ if (getActivity() instanceof UninstallerActivity) {
+ ((UninstallerActivity) getActivity()).dispatchAborted();
+ }
+
+ getActivity().setResult(Activity.RESULT_FIRST_USER);
+ getActivity().finish();
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/television/UninstallAlertFragment.java b/src/com/android/packageinstaller/television/UninstallAlertFragment.java
new file mode 100644
index 00000000..c1281749
--- /dev/null
+++ b/src/com/android/packageinstaller/television/UninstallAlertFragment.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2016 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.television;
+
+import android.app.Activity;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.support.v17.leanback.app.GuidedStepFragment;
+import android.support.v17.leanback.widget.GuidanceStylist;
+import android.support.v17.leanback.widget.GuidedAction;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.UninstallerActivity;
+
+import java.util.List;
+
+public class UninstallAlertFragment extends GuidedStepFragment {
+ @Override
+ public int onProvideTheme() {
+ return R.style.Theme_Leanback_GuidedStep;
+ }
+
+ @Override
+ public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
+ final PackageManager pm = getActivity().getPackageManager();
+ final UninstallerActivity.DialogInfo dialogInfo =
+ ((UninstallerActivity) getActivity()).getDialogInfo();
+ final CharSequence appLabel = dialogInfo.appInfo.loadLabel(pm);
+
+ StringBuilder messageBuilder = new StringBuilder();
+
+ // If the Activity label differs from the App label, then make sure the user
+ // knows the Activity belongs to the App being uninstalled.
+ if (dialogInfo.activityInfo != null) {
+ final CharSequence activityLabel = dialogInfo.activityInfo.loadLabel(pm);
+ if (!activityLabel.equals(appLabel)) {
+ messageBuilder.append(
+ getString(R.string.uninstall_activity_text, activityLabel));
+ messageBuilder.append(" ").append(appLabel).append(".\n\n");
+ }
+ }
+
+ final boolean isUpdate =
+ ((dialogInfo.appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
+ UserManager userManager = UserManager.get(getActivity());
+ if (isUpdate) {
+ if (isSingleUser(userManager)) {
+ messageBuilder.append(getString(R.string.uninstall_update_text));
+ } else {
+ messageBuilder.append(getString(R.string.uninstall_update_text_multiuser));
+ }
+ } else {
+ if (dialogInfo.allUsers && !isSingleUser(userManager)) {
+ messageBuilder.append(getString(R.string.uninstall_application_text_all_users));
+ } else if (!dialogInfo.user.equals(android.os.Process.myUserHandle())) {
+ UserInfo userInfo = userManager.getUserInfo(dialogInfo.user.getIdentifier());
+ messageBuilder.append(
+ getString(R.string.uninstall_application_text_user, userInfo.name));
+ } else {
+ messageBuilder.append(getString(R.string.uninstall_application_text));
+ }
+ }
+
+ return new GuidanceStylist.Guidance(
+ appLabel.toString(),
+ messageBuilder.toString(),
+ null,
+ dialogInfo.appInfo.loadIcon(pm));
+ }
+
+ @Override
+ public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
+ actions.add(new GuidedAction.Builder(getContext())
+ .clickAction(GuidedAction.ACTION_ID_OK)
+ .build());
+ actions.add(new GuidedAction.Builder(getContext())
+ .clickAction(GuidedAction.ACTION_ID_CANCEL)
+ .build());
+ }
+
+ @Override
+ public void onGuidedActionClicked(GuidedAction action) {
+ if (isAdded()) {
+ if (action.getId() == GuidedAction.ACTION_ID_OK) {
+ ((UninstallerActivity) getActivity()).startUninstallProgress();
+ getActivity().finish();
+ } else {
+ ((UninstallerActivity) getActivity()).dispatchAborted();
+ getActivity().setResult(Activity.RESULT_FIRST_USER);
+ getActivity().finish();
+ }
+ }
+ }
+
+ /**
+ * Returns whether there is only one user on this device, not including
+ * the system-only user.
+ */
+ private boolean isSingleUser(UserManager userManager) {
+ final int userCount = userManager.getUserCount();
+ return userCount == 1
+ || (UserManager.isSplitSystemUser() && userCount == 2);
+ }
+}
diff --git a/src/com/android/packageinstaller/television/UninstallAppProgress.java b/src/com/android/packageinstaller/television/UninstallAppProgress.java
new file mode 100755
index 00000000..a4f217c4
--- /dev/null
+++ b/src/com/android/packageinstaller/television/UninstallAppProgress.java
@@ -0,0 +1,377 @@
+/*
+**
+** Copyright 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.
+*/
+package com.android.packageinstaller.television;
+
+import android.app.Activity;
+import android.app.admin.IDevicePolicyManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageDeleteObserver;
+import android.content.pm.IPackageDeleteObserver2;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.KeyEvent;
+import android.widget.Toast;
+
+import com.android.packageinstaller.PackageUtil;
+import com.android.packageinstaller.R;
+
+import java.lang.ref.WeakReference;
+import java.util.List;
+
+/**
+ * This activity corresponds to a download progress screen that is displayed
+ * when an application is uninstalled. The result of the application uninstall
+ * is indicated in the result code that gets set to 0 or 1. The application gets launched
+ * by an intent with the intent's class name explicitly set to UninstallAppProgress and expects
+ * the application object of the application to uninstall.
+ */
+public class UninstallAppProgress extends Activity {
+ private static final String TAG = "UninstallAppProgress";
+
+ private static final String FRAGMENT_TAG = "progress_fragment";
+
+ private ApplicationInfo mAppInfo;
+ private boolean mAllUsers;
+ private IBinder mCallback;
+
+ private volatile int mResultCode = -1;
+
+ /**
+ * If initView was called. We delay this call to not have to call it at all if the uninstall is
+ * quick
+ */
+ private boolean mIsViewInitialized;
+
+ /** Amount of time to wait until we show the UI */
+ private static final int QUICK_INSTALL_DELAY_MILLIS = 500;
+
+ private static final int UNINSTALL_COMPLETE = 1;
+ private static final int UNINSTALL_IS_SLOW = 2;
+
+ private Handler mHandler = new MessageHandler(this);
+
+ private static class MessageHandler extends Handler {
+ private final WeakReference<UninstallAppProgress> mActivity;
+
+ public MessageHandler(UninstallAppProgress activity) {
+ mActivity = new WeakReference<>(activity);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ UninstallAppProgress activity = mActivity.get();
+ if (activity != null) {
+ activity.handleMessage(msg);
+ }
+ }
+ }
+
+ private void handleMessage(Message msg) {
+ if (isFinishing() || isDestroyed()) {
+ return;
+ }
+
+ switch (msg.what) {
+ case UNINSTALL_IS_SLOW:
+ initView();
+ break;
+ case UNINSTALL_COMPLETE:
+ mHandler.removeMessages(UNINSTALL_IS_SLOW);
+
+ if (msg.arg1 != PackageManager.DELETE_SUCCEEDED) {
+ initView();
+ }
+
+ mResultCode = msg.arg1;
+ final String packageName = (String) msg.obj;
+
+ if (mCallback != null) {
+ final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
+ .asInterface(mCallback);
+ try {
+ observer.onPackageDeleted(mAppInfo.packageName, mResultCode,
+ packageName);
+ } catch (RemoteException ignored) {
+ }
+ finish();
+ return;
+ }
+
+ if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
+ Intent result = new Intent();
+ result.putExtra(Intent.EXTRA_INSTALL_RESULT, mResultCode);
+ setResult(mResultCode == PackageManager.DELETE_SUCCEEDED
+ ? Activity.RESULT_OK : Activity.RESULT_FIRST_USER,
+ result);
+ finish();
+ return;
+ }
+
+ // Update the status text
+ final String statusText;
+ switch (msg.arg1) {
+ case PackageManager.DELETE_SUCCEEDED:
+ statusText = getString(R.string.uninstall_done);
+ // Show a Toast and finish the activity
+ Context ctx = getBaseContext();
+ Toast.makeText(ctx, statusText, Toast.LENGTH_LONG).show();
+ setResultAndFinish();
+ return;
+ case PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER: {
+ UserManager userManager =
+ (UserManager) getSystemService(Context.USER_SERVICE);
+ IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
+ ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
+ // Find out if the package is an active admin for some non-current user.
+ int myUserId = UserHandle.myUserId();
+ UserInfo otherBlockingUser = null;
+ for (UserInfo user : userManager.getUsers()) {
+ // We only catch the case when the user in question is neither the
+ // current user nor its profile.
+ if (isProfileOfOrSame(userManager, myUserId, user.id)) continue;
+
+ try {
+ if (dpm.packageHasActiveAdmins(packageName, user.id)) {
+ otherBlockingUser = user;
+ break;
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to talk to package manager", e);
+ }
+ }
+ if (otherBlockingUser == null) {
+ Log.d(TAG, "Uninstall failed because " + packageName
+ + " is a device admin");
+ getProgressFragment().setDeviceManagerButtonVisible(true);
+ statusText = getString(
+ R.string.uninstall_failed_device_policy_manager);
+ } else {
+ Log.d(TAG, "Uninstall failed because " + packageName
+ + " is a device admin of user " + otherBlockingUser);
+ getProgressFragment().setDeviceManagerButtonVisible(false);
+ statusText = String.format(
+ getString(R.string.uninstall_failed_device_policy_manager_of_user),
+ otherBlockingUser.name);
+ }
+ break;
+ }
+ case PackageManager.DELETE_FAILED_OWNER_BLOCKED: {
+ UserManager userManager =
+ (UserManager) getSystemService(Context.USER_SERVICE);
+ IPackageManager packageManager = IPackageManager.Stub.asInterface(
+ ServiceManager.getService("package"));
+ List<UserInfo> users = userManager.getUsers();
+ int blockingUserId = UserHandle.USER_NULL;
+ for (int i = 0; i < users.size(); ++i) {
+ final UserInfo user = users.get(i);
+ try {
+ if (packageManager.getBlockUninstallForUser(packageName,
+ user.id)) {
+ blockingUserId = user.id;
+ break;
+ }
+ } catch (RemoteException e) {
+ // Shouldn't happen.
+ Log.e(TAG, "Failed to talk to package manager", e);
+ }
+ }
+ int myUserId = UserHandle.myUserId();
+ if (isProfileOfOrSame(userManager, myUserId, blockingUserId)) {
+ getProgressFragment().setDeviceManagerButtonVisible(true);
+ } else {
+ getProgressFragment().setDeviceManagerButtonVisible(false);
+ getProgressFragment().setUsersButtonVisible(true);
+ }
+ // TODO: b/25442806
+ if (blockingUserId == UserHandle.USER_SYSTEM) {
+ statusText = getString(R.string.uninstall_blocked_device_owner);
+ } else if (blockingUserId == UserHandle.USER_NULL) {
+ Log.d(TAG, "Uninstall failed for " + packageName + " with code "
+ + msg.arg1 + " no blocking user");
+ statusText = getString(R.string.uninstall_failed);
+ } else {
+ statusText = mAllUsers
+ ? getString(R.string.uninstall_all_blocked_profile_owner) :
+ getString(R.string.uninstall_blocked_profile_owner);
+ }
+ break;
+ }
+ default:
+ Log.d(TAG, "Uninstall failed for " + packageName + " with code "
+ + msg.arg1);
+ statusText = getString(R.string.uninstall_failed);
+ break;
+ }
+ getProgressFragment().showCompletion(statusText);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private boolean isProfileOfOrSame(UserManager userManager, int userId, int profileId) {
+ if (userId == profileId) {
+ return true;
+ }
+ UserInfo parentUser = userManager.getProfileParent(profileId);
+ return parentUser != null && parentUser.id == userId;
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ Intent intent = getIntent();
+ mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
+ mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
+
+ // This currently does not support going through a onDestroy->onCreate cycle. Hence if that
+ // happened, just fail the operation for mysterious reasons.
+ if (icicle != null) {
+ mResultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR;
+
+ if (mCallback != null) {
+ final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
+ .asInterface(mCallback);
+ try {
+ observer.onPackageDeleted(mAppInfo.packageName, mResultCode, null);
+ } catch (RemoteException ignored) {
+ }
+ finish();
+ } else {
+ setResultAndFinish();
+ }
+
+ return;
+ }
+
+ mAllUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
+ UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER);
+ if (user == null) {
+ user = android.os.Process.myUserHandle();
+ }
+
+ PackageDeleteObserver observer = new PackageDeleteObserver();
+
+ // Make window transparent until initView is called. In many cases we can avoid showing the
+ // UI at all as the app is uninstalled very quickly. If we show the UI and instantly remove
+ // it, it just looks like a flicker.
+ getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ getWindow().setStatusBarColor(Color.TRANSPARENT);
+ getWindow().setNavigationBarColor(Color.TRANSPARENT);
+
+ try {
+ getPackageManager().deletePackageAsUser(mAppInfo.packageName, observer,
+ mAllUsers ? PackageManager.DELETE_ALL_USERS : 0, user.getIdentifier());
+ } catch (IllegalArgumentException e) {
+ // Couldn't find the package, no need to call uninstall.
+ Log.w(TAG, "Could not find package, not deleting " + mAppInfo.packageName, e);
+ }
+
+ mHandler.sendMessageDelayed(mHandler.obtainMessage(UNINSTALL_IS_SLOW),
+ QUICK_INSTALL_DELAY_MILLIS);
+ }
+
+ public ApplicationInfo getAppInfo() {
+ return mAppInfo;
+ }
+
+ private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
+ public void packageDeleted(String packageName, int returnCode) {
+ Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);
+ msg.arg1 = returnCode;
+ msg.obj = packageName;
+ mHandler.sendMessage(msg);
+ }
+ }
+
+ public void setResultAndFinish() {
+ setResult(mResultCode);
+ finish();
+ }
+
+ private void initView() {
+ if (mIsViewInitialized) {
+ return;
+ }
+ mIsViewInitialized = true;
+
+ // We set the window background to translucent in constructor, revert this
+ TypedValue attribute = new TypedValue();
+ getTheme().resolveAttribute(android.R.attr.windowBackground, attribute, true);
+ if (attribute.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
+ attribute.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+ getWindow().setBackgroundDrawable(new ColorDrawable(attribute.data));
+ } else {
+ getWindow().setBackgroundDrawable(getResources().getDrawable(attribute.resourceId,
+ getTheme()));
+ }
+
+ getTheme().resolveAttribute(android.R.attr.navigationBarColor, attribute, true);
+ getWindow().setNavigationBarColor(attribute.data);
+
+ getTheme().resolveAttribute(android.R.attr.statusBarColor, attribute, true);
+ getWindow().setStatusBarColor(attribute.data);
+
+ boolean isUpdate = ((mAppInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
+ setTitle(isUpdate ? R.string.uninstall_update_title : R.string.uninstall_application_title);
+
+ getFragmentManager().beginTransaction()
+ .add(android.R.id.content, new UninstallAppProgressFragment(), FRAGMENT_TAG)
+ .commitNowAllowingStateLoss();
+ }
+
+ @Override
+ public boolean dispatchKeyEvent(KeyEvent ev) {
+ if (ev.getKeyCode() == KeyEvent.KEYCODE_BACK) {
+ if (mResultCode == -1) {
+ // Ignore back key when installation is in progress
+ return true;
+ } else {
+ // If installation is done, just set the result code
+ setResult(mResultCode);
+ }
+ }
+ return super.dispatchKeyEvent(ev);
+ }
+
+ private ProgressFragment getProgressFragment() {
+ return (ProgressFragment) getFragmentManager().findFragmentByTag(FRAGMENT_TAG);
+ }
+
+ public interface ProgressFragment {
+ void setUsersButtonVisible(boolean visible);
+ void setDeviceManagerButtonVisible(boolean visible);
+ void showCompletion(CharSequence statusText);
+ }
+}
diff --git a/src/com/android/packageinstaller/television/UninstallAppProgressFragment.java b/src/com/android/packageinstaller/television/UninstallAppProgressFragment.java
new file mode 100644
index 00000000..772bb3dd
--- /dev/null
+++ b/src/com/android/packageinstaller/television/UninstallAppProgressFragment.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2016 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.television;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.android.packageinstaller.PackageUtil;
+import com.android.packageinstaller.R;
+
+public class UninstallAppProgressFragment extends Fragment implements View.OnClickListener,
+ UninstallAppProgress.ProgressFragment {
+ private static final String TAG = "UninstallAppProgressF"; // full class name is too long
+
+ private Button mOkButton;
+ private Button mDeviceManagerButton;
+ private Button mUsersButton;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ Bundle savedInstanceState) {
+ final View root = inflater.inflate(R.layout.uninstall_progress, container, false);
+ // Initialize views
+ View snippetView = root.findViewById(R.id.app_snippet);
+ PackageUtil.initSnippetForInstalledApp(getContext(),
+ ((UninstallAppProgress)getActivity()).getAppInfo(), snippetView);
+ mDeviceManagerButton = (Button) root.findViewById(R.id.device_manager_button);
+ mUsersButton = (Button) root.findViewById(R.id.users_button);
+ mDeviceManagerButton.setVisibility(View.GONE);
+ mDeviceManagerButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent();
+ intent.setClassName("com.android.settings",
+ "com.android.settings.Settings$DeviceAdminSettingsActivity");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ getActivity().finish();
+ }
+ });
+ mUsersButton.setVisibility(View.GONE);
+ mUsersButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(Settings.ACTION_USER_SETTINGS);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ getActivity().finish();
+ }
+ });
+ // Hide button till progress is being displayed
+ mOkButton = (Button) root.findViewById(R.id.ok_button);
+ mOkButton.setOnClickListener(this);
+
+ return root;
+ }
+
+ public void onClick(View v) {
+ final UninstallAppProgress activity = (UninstallAppProgress) getActivity();
+ if(v == mOkButton && activity != null) {
+ Log.i(TAG, "Finished uninstalling pkg: " +
+ activity.getAppInfo().packageName);
+ activity.setResultAndFinish();
+ }
+ }
+
+ @Override
+ public void setUsersButtonVisible(boolean visible) {
+ mUsersButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public void setDeviceManagerButtonVisible(boolean visible) {
+ mDeviceManagerButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public void showCompletion(CharSequence statusText) {
+ final View root = getView();
+ root.findViewById(R.id.progress_view).setVisibility(View.GONE);
+ root.findViewById(R.id.status_view).setVisibility(View.VISIBLE);
+ ((TextView) root.findViewById(R.id.status_text)).setText(statusText);
+ root.findViewById(R.id.ok_panel).setVisibility(View.VISIBLE);
+ }
+}
diff --git a/src/com/android/packageinstaller/wear/PackageInstallerImpl.java b/src/com/android/packageinstaller/wear/PackageInstallerImpl.java
index 3dee7817..bf4b03c5 100644
--- a/src/com/android/packageinstaller/wear/PackageInstallerImpl.java
+++ b/src/com/android/packageinstaller/wear/PackageInstallerImpl.java
@@ -149,7 +149,8 @@ public class PackageInstallerImpl {
cancelSession(sessionInfo.getSessionId(), packageName);
}
} catch (Exception e) {
- Log.e(TAG, "Unexpected exception while installing " + packageName);
+ Log.e(TAG, "Unexpected exception while installing: " + packageName + ": "
+ + e.getMessage());
callback.installFailed(InstallerConstants.ERROR_INSTALL_SESSION_EXCEPTION,
"Unexpected exception while installing " + packageName);
}
@@ -321,4 +322,4 @@ public class PackageInstallerImpl {
}
return errorCode;
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
index 7d5e0a6f..6435b76a 100644
--- a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
+++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java
@@ -16,8 +16,10 @@
package com.android.packageinstaller.wear;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
import android.app.Service;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.FeatureInfo;
@@ -26,9 +28,6 @@ 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;
@@ -40,20 +39,19 @@ import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.Process;
-import android.text.TextUtils;
+import android.util.ArrayMap;
import android.util.Log;
+import android.util.Pair;
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.PackageUtil;
+import com.android.packageinstaller.R;
-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.Map;
import java.util.Set;
/**
@@ -84,22 +82,14 @@ import java.util.Set;
public class WearPackageInstallerService extends Service {
private static final String TAG = "WearPkgInstallerService";
- 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 WEAR_APPS_CHANNEL = "wear_app_install_uninstall";
private final int START_INSTALL = 1;
private final int START_UNINSTALL = 2;
+ private int mInstallNotificationId = 1;
+ private final Map<String, Integer> mNotifIdMap = new ArrayMap<>();
+
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
@@ -117,7 +107,7 @@ public class WearPackageInstallerService extends Service {
}
}
private ServiceHandler mServiceHandler;
-
+ private NotificationChannel mNotificationChannel;
private static volatile PowerManager.WakeLock lockStatic = null;
@Override
@@ -139,11 +129,13 @@ public class WearPackageInstallerService extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
if (!DeviceUtils.isWear(this)) {
Log.w(TAG, "Not running on wearable.");
+ finishService(null, startId);
return START_NOT_STICKY;
}
if (intent == null) {
Log.w(TAG, "Got null intent.");
+ finishService(null, startId);
return START_NOT_STICKY;
}
@@ -154,11 +146,13 @@ public class WearPackageInstallerService extends Service {
Uri packageUri = intent.getData();
if (packageUri == null) {
Log.e(TAG, "No package URI in intent");
+ finishService(null, startId);
return START_NOT_STICKY;
}
final String packageName = WearPackageUtil.getSanitizedPackageName(packageUri);
if (packageName == null) {
Log.e(TAG, "Invalid package name in URI (expected package:<pkgName>): " + packageUri);
+ finishService(null, startId);
return START_NOT_STICKY;
}
@@ -173,15 +167,24 @@ public class WearPackageInstallerService extends Service {
}
WearPackageArgs.setStartId(intentBundle, startId);
WearPackageArgs.setPackageName(intentBundle, packageName);
+ String notifTitle;
if (Intent.ACTION_INSTALL_PACKAGE.equals(intent.getAction())) {
Message msg = mServiceHandler.obtainMessage(START_INSTALL);
msg.setData(intentBundle);
mServiceHandler.sendMessage(msg);
+ notifTitle = getString(R.string.installing);
} else if (Intent.ACTION_UNINSTALL_PACKAGE.equals(intent.getAction())) {
Message msg = mServiceHandler.obtainMessage(START_UNINSTALL);
msg.setData(intentBundle);
mServiceHandler.sendMessage(msg);
+ notifTitle = getString(R.string.uninstalling);
+ } else {
+ Log.e(TAG, "Unknown action : " + intent.getAction());
+ finishService(null, startId);
+ return START_NOT_STICKY;
}
+ Pair<Integer, Notification> notifPair = buildNotification(packageName, notifTitle);
+ startForeground(notifPair.first, notifPair.second);
return START_NOT_STICKY;
}
@@ -214,15 +217,15 @@ public class WearPackageInstallerService extends Service {
PackageInfo existingPkgInfo = null;
try {
existingPkgInfo = pm.getPackageInfo(packageName,
- PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_PERMISSIONS);
- if(existingPkgInfo != null) {
+ PackageManager.MATCH_ANY_USER | PackageManager.GET_PERMISSIONS);
+ 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 ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Replacing package:" + packageName);
}
@@ -241,7 +244,7 @@ public class WearPackageInstallerService extends Service {
Log.e(TAG, "Could not create a temp file from FD for " + packageName);
return;
}
- PackageParser.Package pkg = PackageUtil.getPackageInfo(tempFile);
+ PackageParser.Package pkg = PackageUtil.getPackageInfo(this, tempFile);
if (pkg == null) {
Log.e(TAG, "Could not parse apk information for " + packageName);
return;
@@ -253,6 +256,9 @@ public class WearPackageInstallerService extends Service {
return;
}
+ getLabelAndUpdateNotification(packageName,
+ getString(R.string.installing_app, pkg.applicationInfo.loadLabel(pm)));
+
List<String> wearablePerms = pkg.requestedPermissions;
// Log if the installed pkg has a higher version number.
@@ -357,14 +363,14 @@ public class WearPackageInstallerService extends Service {
PowerManager.WakeLock lock = getLock(this.getApplicationContext());
final PackageManager pm = getPackageManager();
try {
- // Result ignored.
- pm.getPackageInfo(packageName, 0);
+ PackageInfo pkgInfo = pm.getPackageInfo(packageName, 0);
+ getLabelAndUpdateNotification(packageName,
+ getString(R.string.uninstalling_app, pkgInfo.applicationInfo.loadLabel(pm)));
// Found package, send uninstall request.
pm.deletePackage(packageName, new PackageDeleteObserver(lock, startId),
PackageManager.DELETE_ALL_USERS);
- startPermsServiceForUninstall(packageName);
Log.i(TAG, "Sent delete request for " + packageName);
} catch (IllegalArgumentException | PackageManager.NameNotFoundException e) {
// Couldn't find the package, no need to call uninstall.
@@ -376,74 +382,50 @@ public class WearPackageInstallerService extends Service {
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
+ // Assumption: We are running on Android O.
+ // If the Phone App is targeting M, all permissions may not have been granted to the phone
+ // app. If the Wear App is then not targeting M, there may be permissions that are not
+ // granted on the Phone app (by the user) right now and we cannot just grant it for the Wear
+ // app.
+ if (pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.M) {
// 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) {
+ if (!doesWearHaveUngrantedPerms(pkg.packageName, permUri, wearablePermissions)) {
// 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);
+ // Log an error if Wear is targeting < 23 and phone is targeting >= 23.
+ if (companionSdkVersion == 0 || companionSdkVersion >= Build.VERSION_CODES.M) {
+ Log.e(TAG, "MNC: Wear app's targetSdkVersion should be at least 23, if "
+ + "phone app is targeting at least 23, will continue.");
}
- // 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.
+ *
+ * @return true if the Wear App has any perms that have not been granted yet on the phone side.
+ * @return true if there is any error cases.
*/
- private List<String> getWearPermsNotGrantedOnPhone(String packageName, Uri permUri,
+ private boolean doesWearHaveUngrantedPerms(String packageName, Uri permUri,
List<String> wearablePermissions) {
if (permUri == null) {
Log.e(TAG, "Permission URI is null");
- return null;
+ // Pretend there is an ungranted permission to avoid installing for error cases.
+ return true;
}
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;
+ // Pretend there is an ungranted permission to avoid installing for error cases.
+ return true;
}
Set<String> grantedPerms = new HashSet<>();
@@ -465,10 +447,10 @@ public class WearPackageInstallerService extends Service {
}
permCursor.close();
- ArrayList<String> unavailableWearablePerms = new ArrayList<>();
+ boolean hasUngrantedPerm = false;
for (String wearablePerm : wearablePermissions) {
if (!grantedPerms.contains(wearablePerm)) {
- unavailableWearablePerms.add(wearablePerm);
+ hasUngrantedPerm = true;
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.
@@ -480,11 +462,11 @@ public class WearPackageInstallerService extends Service {
}
}
}
- return unavailableWearablePerms;
+ return hasUngrantedPerm;
}
private void finishService(PowerManager.WakeLock lock, int startId) {
- if (lock.isHeld()) {
+ if (lock != null && lock.isHeld()) {
lock.release();
}
stopSelf(startId);
@@ -501,86 +483,6 @@ public class WearPackageInstallerService extends Service {
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 PackageInstallListener implements PackageInstallerImpl.InstallListener {
private Context mContext;
private PowerManager.WakeLock mWakeLock;
@@ -618,7 +520,6 @@ public class WearPackageInstallerService extends Service {
public void installFailed(int errorCode, String errorDesc) {
Log.e(TAG, "Package install failed " + mApplicationPackageName
+ ", errorCode " + errorCode);
- WearPackageUtil.removeFromPermStore(mContext, mApplicationPackageName);
finishService(mWakeLock, mStartId);
}
}
@@ -645,4 +546,33 @@ public class WearPackageInstallerService extends Service {
}
}
}
+
+ private synchronized Pair<Integer, Notification> buildNotification(final String packageName,
+ final String title) {
+ int notifId;
+ if (mNotifIdMap.containsKey(packageName)) {
+ notifId = mNotifIdMap.get(packageName);
+ } else {
+ notifId = mInstallNotificationId++;
+ mNotifIdMap.put(packageName, notifId);
+ }
+
+ if (mNotificationChannel == null) {
+ mNotificationChannel = new NotificationChannel(WEAR_APPS_CHANNEL,
+ getString(R.string.wear_app_channel), NotificationManager.IMPORTANCE_MIN);
+ NotificationManager notificationManager = getSystemService(NotificationManager.class);
+ notificationManager.createNotificationChannel(mNotificationChannel);
+ }
+ return new Pair<>(notifId, new Notification.Builder(this, WEAR_APPS_CHANNEL)
+ .setSmallIcon(R.drawable.ic_file_download)
+ .setContentTitle(title)
+ .build());
+ }
+
+ private void getLabelAndUpdateNotification(String packageName, String title) {
+ // Update notification since we have a label now.
+ NotificationManager notificationManager = getSystemService(NotificationManager.class);
+ Pair<Integer, Notification> notifPair = buildNotification(packageName, title);
+ notificationManager.notify(notifPair.first, notifPair.second);
+ }
}
diff --git a/src/com/android/packageinstaller/wear/WearPackageUtil.java b/src/com/android/packageinstaller/wear/WearPackageUtil.java
index e340d627..bc740ab1 100644
--- a/src/com/android/packageinstaller/wear/WearPackageUtil.java
+++ b/src/com/android/packageinstaller/wear/WearPackageUtil.java
@@ -16,10 +16,7 @@
package com.android.packageinstaller.wear;
-import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageParser;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.system.ErrnoException;
@@ -34,7 +31,6 @@ 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";
@@ -42,12 +38,6 @@ public class WearPackageUtil {
private static final String COMPRESSION_LZMA = "lzma";
private static final String COMPRESSION_XZ = "xz";
- private static final String SHOW_PERMS_SERVICE_PKG_NAME = "com.google.android.wearable.app";
- private static final String SHOW_PERMS_SERVICE_CLASS_NAME =
- "com.google.android.clockwork.packagemanager.ShowPermsService";
- private static final String EXTRA_PACKAGE_NAME
- = "com.google.android.clockwork.EXTRA_PACKAGE_NAME";
-
public static File getTemporaryFile(Context context, String packageName) {
try {
File newFileDir = new File(context.getFilesDir(), "tmp");
@@ -129,42 +119,6 @@ public class WearPackageUtil {
}
}
- 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;
- }
-
- public static void removeFromPermStore(Context context, String wearablePackageName) {
- Intent newIntent = new Intent()
- .setComponent(new ComponentName(
- SHOW_PERMS_SERVICE_PKG_NAME, SHOW_PERMS_SERVICE_CLASS_NAME))
- .setAction(Intent.ACTION_UNINSTALL_PACKAGE);
- newIntent.putExtra(EXTRA_PACKAGE_NAME, wearablePackageName);
- Log.i(TAG, "Sending removeFromPermStore to ShowPermsService " + newIntent
- + " for " + wearablePackageName);
- context.startService(newIntent);
- }
-
/**
* @return com.google.com from expected formats like
* Uri: package:com.google.com, package:/com.google.com, package://com.google.com
diff --git a/tests/Android.mk b/tests/Android.mk
new file mode 100644
index 00000000..df917b9d
--- /dev/null
+++ b/tests/Android.mk
@@ -0,0 +1,41 @@
+#############################################
+# PackageInstaller Robolectric test target. #
+#############################################
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+# Include the testing libraries (JUnit4 + Robolectric libs).
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ platform-system-robolectric
+
+LOCAL_JAVA_LIBRARIES := \
+ junit \
+ platform-robolectric-prebuilt \
+ telephony-common
+
+LOCAL_INSTRUMENTATION_FOR := PackageInstaller
+LOCAL_MODULE := PackageInstallerRoboTests
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+#############################################################
+# PackageInstaller runner target to run the previous target. #
+#############################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := RunPackageInstallerRoboTests
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ PackageInstallerRoboTests
+
+LOCAL_TEST_PACKAGE := PackageInstaller
+
+LOCAL_ROBOTEST_FAILURE_FATAL := true
+
+include prebuilts/misc/common/robolectric/run_robotests.mk
diff --git a/tests/src/com/android/packageinstaller/permission/utils/EventLoggerTest.java b/tests/src/com/android/packageinstaller/permission/utils/EventLoggerTest.java
new file mode 100644
index 00000000..5f7afd57
--- /dev/null
+++ b/tests/src/com/android/packageinstaller/permission/utils/EventLoggerTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2016 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.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.Manifest;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.packageinstaller.shadows.ShadowMetricsLogger;
+import com.android.packageinstaller.shadows.ShadowSystemProperties;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/**
+ * Tests {@link com.android.packageinstaller.permission.utils.EventLogger}
+ */
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = "packages/apps/PackageInstaller/AndroidManifest.xml",
+ shadows = {ShadowMetricsLogger.class, ShadowSystemProperties.class},
+ sdk = 23)
+public class EventLoggerTest {
+ @Before
+ public void setUp() {
+ ShadowSystemProperties.setUserBuild(true);
+ ShadowMetricsLogger.clearLogs();
+ }
+
+ @Test
+ public void testValidRequested() {
+ EventLogger.logPermissionRequested(null, Manifest.permission.READ_CALENDAR,
+ "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_READ_CALENDAR,
+ "testPackage")));
+ }
+
+ @Test
+ public void testValidAppOpRequested() {
+ EventLogger.logPermissionRequested(null, Manifest.permission.SYSTEM_ALERT_WINDOW,
+ "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_APPOP_REQUEST_SYSTEM_ALERT_WINDOW,
+ "testPackage")));
+ }
+
+ @Test
+ public void testValidDenied() {
+ EventLogger.logPermissionDenied(null, Manifest.permission.READ_CALENDAR, "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_READ_CALENDAR + 2,
+ "testPackage")));
+ }
+
+ @Test
+ public void testInvalidRequestedEngBuild() throws Throwable {
+ ShadowSystemProperties.setUserBuild(false);
+ EventLogger.logPermissionRequested(null, "invalid", "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN,
+ "testPackage")));
+ }
+
+ @Test
+ public void testInvalidDeniedEngBuild() throws Throwable {
+ ShadowSystemProperties.setUserBuild(false);
+ EventLogger.logPermissionRequested(null, "invalid", "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN,
+ "testPackage")));
+ }
+
+ @Test
+ public void testInvalidRequestedUserBuild() throws Throwable {
+ EventLogger.logPermissionRequested(null, "invalid", "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN,
+ "testPackage")));
+ }
+
+ @Test
+ public void testInvalidDeniedUserBuild() throws Throwable {
+ EventLogger.logPermissionDenied(null, "invalid", "testPackage");
+
+ assertEquals(1, ShadowMetricsLogger.getLogs().size());
+ assertTrue(ShadowMetricsLogger.getLogs().contains(
+ new ShadowMetricsLogger.Log(null,
+ MetricsProto.MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN + 2,
+ "testPackage")));
+ }
+}
diff --git a/tests/src/com/android/packageinstaller/shadows/ShadowMetricsLogger.java b/tests/src/com/android/packageinstaller/shadows/ShadowMetricsLogger.java
new file mode 100644
index 00000000..39507df0
--- /dev/null
+++ b/tests/src/com/android/packageinstaller/shadows/ShadowMetricsLogger.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 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.shadows;
+
+import android.content.Context;
+
+import com.android.internal.logging.MetricsLogger;
+
+import libcore.util.Objects;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.ArrayList;
+
+/**
+ * MetricsLogger that just adds logs to a list
+ */
+@Implements(MetricsLogger.class)
+public class ShadowMetricsLogger {
+ /** Collected logs */
+ private static ArrayList<Log> sLogs = new ArrayList<>();
+
+ /**
+ * Clear all previously collected logs
+ */
+ public static void clearLogs() {
+ sLogs.clear();
+ }
+
+ /**
+ * @return All logs collected since the last {@link #clearLogs()}.
+ */
+ public static ArrayList<Log> getLogs() {
+ return sLogs;
+ }
+
+ @Implementation
+ public static void action(Context context, int category, String pkg) {
+ sLogs.add(new Log(context, category, pkg));
+ }
+
+ public static class Log {
+ public final Context context;
+ public final int category;
+ public final String pkg;
+
+ public Log(Context context, int category, String pkg) {
+ this.context = context;
+ this.category = category;
+ this.pkg = pkg;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null || !(obj instanceof Log)) {
+ return false;
+ } else {
+ Log otherLog = (Log) obj;
+
+ return Objects.equal(otherLog.context, context) && otherLog.category == category
+ && Objects.equal(otherLog.pkg, pkg);
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return ((context == null) ? 0 : context.hashCode()) + category + ((pkg == null) ? 0
+ : pkg.hashCode());
+ }
+ }
+}
diff --git a/tests/src/com/android/packageinstaller/shadows/ShadowPackageInstaller.java b/tests/src/com/android/packageinstaller/shadows/ShadowPackageInstaller.java
new file mode 100644
index 00000000..6c2043ab
--- /dev/null
+++ b/tests/src/com/android/packageinstaller/shadows/ShadowPackageInstaller.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 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.shadows;
+
+import android.content.pm.PackageInstaller;
+import android.util.SparseArray;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/** Robolectric shadow for testing {@link PackageInstaller} objects. */
+@Implements(PackageInstaller.class)
+public class ShadowPackageInstaller {
+ private static SparseArray<PackageInstaller.SessionInfo> sSessions = new SparseArray<>();
+
+ public static void putSessionInfo(PackageInstaller.SessionInfo info) {
+ sSessions.put(info.sessionId, info);
+ }
+
+ @Implementation
+ public PackageInstaller.SessionInfo getSessionInfo(int sessionId) {
+ return sSessions.get(sessionId);
+ }
+}
diff --git a/tests/src/com/android/packageinstaller/shadows/ShadowSystemProperties.java b/tests/src/com/android/packageinstaller/shadows/ShadowSystemProperties.java
new file mode 100644
index 00000000..eb2841c2
--- /dev/null
+++ b/tests/src/com/android/packageinstaller/shadows/ShadowSystemProperties.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2016 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.shadows;
+
+import android.os.SystemProperties;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * SystemProperties with configurable build type
+ */
+@Implements(SystemProperties.class)
+public class ShadowSystemProperties extends org.robolectric.shadows.ShadowSystemProperties {
+ /** If the build type is 'user' */
+ private static boolean sIsUserBuild = false;
+
+ /**
+ * Set the build type to user of eng.
+ *
+ * @param isUserBuild if the build type should be user
+ */
+ public static void setUserBuild(boolean isUserBuild) {
+ sIsUserBuild = isUserBuild;
+ }
+
+ @Implementation
+ public static String get(String key) {
+ if ("ro.build.type".equals(key)) {
+ if (sIsUserBuild) {
+ return "user";
+ } else {
+ return "eng";
+ }
+ } else {
+ return org.robolectric.shadows.ShadowSystemProperties.get(key);
+ }
+ }
+}