summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk23
-rw-r--r--AndroidManifest.xml42
-rw-r--r--proguard.flags3
-rw-r--r--res/anim/snackbar_enter.xml28
-rw-r--r--res/anim/snackbar_exit.xml27
-rw-r--r--[-rwxr-xr-x]res/drawable-television/grant_permissions_action_item.xml (renamed from res/values/colors.xml)15
-rw-r--r--res/drawable-television/grant_permissions_action_item_background.xml21
-rw-r--r--res/drawable-television/grant_permissions_action_item_shape.xml28
-rw-r--r--res/drawable/ic_dialog_alert_material.xml25
-rw-r--r--res/drawable/ic_info.xml28
-rw-r--r--res/drawable/ic_lock.xml31
-rw-r--r--res/drawable/ic_more_items.xml29
-rw-r--r--res/drawable/ic_perm_device_info.xml24
-rw-r--r--res/drawable/ic_toc.xml24
-rw-r--r--res/layout-television/grant_permissions.xml91
-rw-r--r--res/layout-television/permissions_frame.xml113
-rw-r--r--res/layout/app_details.xml10
-rw-r--r--res/layout/grant_permissions.xml109
-rw-r--r--res/layout/header.xml53
-rw-r--r--res/layout/install_confirm.xml3
-rw-r--r--res/layout/install_start.xml2
-rw-r--r--res/layout/loading_container.xml36
-rw-r--r--res/layout/permission_description.xml43
-rw-r--r--res/layout/permissions_frame.xml40
-rw-r--r--res/layout/permissions_list.xml26
-rw-r--r--res/layout/preference_category_material.xml35
-rw-r--r--res/layout/preference_permissions.xml80
-rw-r--r--res/layout/preference_permissions_switch.xml80
-rw-r--r--res/layout/uninstall_confirm.xml3
-rw-r--r--res/values-af-television/strings.xml23
-rw-r--r--res/values-af/strings.xml34
-rw-r--r--res/values-am-television/strings.xml23
-rw-r--r--res/values-am/strings.xml34
-rw-r--r--res/values-ar-television/strings.xml23
-rw-r--r--res/values-ar/strings.xml42
-rw-r--r--res/values-az-rAZ-television/strings.xml23
-rw-r--r--res/values-az-rAZ/strings.xml39
-rw-r--r--res/values-bg-television/strings.xml23
-rw-r--r--res/values-bg/strings.xml34
-rw-r--r--res/values-bn-rBD-television/strings.xml23
-rw-r--r--res/values-bn-rBD/strings.xml34
-rw-r--r--res/values-ca-television/strings.xml23
-rw-r--r--res/values-ca/strings.xml40
-rw-r--r--res/values-cs-television/strings.xml23
-rw-r--r--res/values-cs/strings.xml36
-rw-r--r--res/values-da-television/strings.xml23
-rw-r--r--res/values-da/strings.xml34
-rw-r--r--res/values-de-television/strings.xml23
-rw-r--r--res/values-de/strings.xml34
-rw-r--r--res/values-el-television/strings.xml23
-rw-r--r--res/values-el/strings.xml34
-rw-r--r--res/values-en-rAU-television/strings.xml23
-rw-r--r--res/values-en-rAU/strings.xml121
-rw-r--r--res/values-en-rGB-television/strings.xml23
-rw-r--r--res/values-en-rGB/strings.xml34
-rw-r--r--res/values-en-rIN-television/strings.xml23
-rw-r--r--res/values-en-rIN/strings.xml34
-rw-r--r--res/values-es-rUS-television/strings.xml23
-rw-r--r--res/values-es-rUS/strings.xml34
-rw-r--r--res/values-es-television/strings.xml23
-rw-r--r--res/values-es/strings.xml38
-rw-r--r--res/values-et-rEE-television/strings.xml23
-rw-r--r--res/values-et-rEE/strings.xml34
-rw-r--r--res/values-eu-rES-television/strings.xml23
-rw-r--r--res/values-eu-rES/strings.xml34
-rw-r--r--res/values-fa-television/strings.xml23
-rw-r--r--res/values-fa/strings.xml40
-rw-r--r--res/values-fi-television/strings.xml23
-rw-r--r--res/values-fi/strings.xml36
-rw-r--r--res/values-fr-rCA-television/strings.xml23
-rw-r--r--res/values-fr-rCA/strings.xml34
-rw-r--r--res/values-fr-television/strings.xml23
-rw-r--r--res/values-fr/strings.xml36
-rw-r--r--res/values-gl-rES-television/strings.xml23
-rw-r--r--res/values-gl-rES/strings.xml34
-rw-r--r--res/values-gu-rIN-television/strings.xml23
-rw-r--r--res/values-gu-rIN/strings.xml121
-rw-r--r--res/values-hi-television/strings.xml23
-rw-r--r--res/values-hi/strings.xml36
-rw-r--r--res/values-hr-television/strings.xml23
-rw-r--r--res/values-hr/strings.xml37
-rw-r--r--res/values-hu-television/strings.xml23
-rw-r--r--res/values-hu/strings.xml34
-rw-r--r--res/values-hy-rAM-television/strings.xml23
-rw-r--r--res/values-hy-rAM/strings.xml34
-rw-r--r--res/values-in-television/strings.xml23
-rw-r--r--res/values-in/strings.xml34
-rw-r--r--res/values-is-rIS-television/strings.xml23
-rw-r--r--res/values-is-rIS/strings.xml34
-rw-r--r--res/values-it-television/strings.xml23
-rw-r--r--res/values-it/strings.xml38
-rw-r--r--res/values-iw-television/strings.xml23
-rw-r--r--res/values-iw/strings.xml40
-rw-r--r--res/values-ja-television/strings.xml23
-rw-r--r--res/values-ja/strings.xml34
-rw-r--r--res/values-ka-rGE-television/strings.xml23
-rw-r--r--res/values-ka-rGE/strings.xml34
-rw-r--r--res/values-kk-rKZ-television/strings.xml23
-rw-r--r--res/values-kk-rKZ/strings.xml38
-rw-r--r--res/values-km-rKH-television/strings.xml23
-rw-r--r--res/values-km-rKH/strings.xml34
-rw-r--r--res/values-kn-rIN-television/strings.xml23
-rw-r--r--res/values-kn-rIN/strings.xml42
-rw-r--r--res/values-ko-television/strings.xml23
-rw-r--r--res/values-ko/strings.xml34
-rw-r--r--res/values-ky-rKG-television/strings.xml23
-rw-r--r--res/values-ky-rKG/strings.xml88
-rw-r--r--res/values-lo-rLA-television/strings.xml23
-rw-r--r--res/values-lo-rLA/strings.xml34
-rw-r--r--res/values-lt-television/strings.xml23
-rw-r--r--res/values-lt/strings.xml36
-rw-r--r--res/values-lv-television/strings.xml23
-rw-r--r--res/values-lv/strings.xml35
-rw-r--r--res/values-mk-rMK-television/strings.xml23
-rw-r--r--res/values-mk-rMK/strings.xml34
-rw-r--r--res/values-ml-rIN-television/strings.xml23
-rw-r--r--res/values-ml-rIN/strings.xml34
-rw-r--r--res/values-mn-rMN-television/strings.xml23
-rw-r--r--res/values-mn-rMN/strings.xml34
-rw-r--r--res/values-mr-rIN-television/strings.xml23
-rw-r--r--res/values-mr-rIN/strings.xml34
-rw-r--r--res/values-ms-rMY-television/strings.xml23
-rw-r--r--res/values-ms-rMY/strings.xml34
-rw-r--r--res/values-my-rMM-television/strings.xml23
-rw-r--r--res/values-my-rMM/strings.xml34
-rw-r--r--res/values-nb-television/strings.xml23
-rw-r--r--res/values-nb/strings.xml38
-rw-r--r--res/values-ne-rNP-television/strings.xml23
-rw-r--r--res/values-ne-rNP/strings.xml34
-rw-r--r--res/values-nl-television/strings.xml23
-rw-r--r--res/values-nl/strings.xml34
-rw-r--r--res/values-pa-rIN-television/strings.xml23
-rw-r--r--res/values-pa-rIN/strings.xml121
-rw-r--r--res/values-pl-television/strings.xml23
-rw-r--r--res/values-pl/strings.xml36
-rw-r--r--res/values-pt-rBR-television/strings.xml23
-rw-r--r--res/values-pt-rBR/strings.xml121
-rw-r--r--res/values-pt-rPT-television/strings.xml23
-rw-r--r--res/values-pt-rPT/strings.xml34
-rw-r--r--res/values-pt-television/strings.xml23
-rw-r--r--res/values-pt/strings.xml34
-rw-r--r--res/values-ro-television/strings.xml23
-rw-r--r--res/values-ro/strings.xml93
-rw-r--r--res/values-ru-television/strings.xml23
-rw-r--r--res/values-ru/strings.xml36
-rw-r--r--res/values-si-rLK-television/strings.xml23
-rw-r--r--res/values-si-rLK/strings.xml34
-rw-r--r--res/values-sk-television/strings.xml23
-rw-r--r--res/values-sk/strings.xml36
-rw-r--r--res/values-sl-television/strings.xml23
-rw-r--r--res/values-sl/strings.xml36
-rw-r--r--res/values-sq-rAL-television/strings.xml23
-rw-r--r--res/values-sq-rAL/strings.xml121
-rw-r--r--res/values-sr-television/strings.xml23
-rw-r--r--res/values-sr/strings.xml37
-rw-r--r--res/values-sv-television/strings.xml23
-rw-r--r--res/values-sv/strings.xml34
-rw-r--r--res/values-sw-television/strings.xml23
-rw-r--r--res/values-sw/strings.xml34
-rw-r--r--res/values-ta-rIN-television/strings.xml23
-rw-r--r--res/values-ta-rIN/strings.xml34
-rw-r--r--res/values-te-rIN-television/strings.xml23
-rw-r--r--res/values-te-rIN/strings.xml34
-rw-r--r--res/values-television/colors.xml37
-rw-r--r--res/values-television/dimens.xml43
-rw-r--r--res/values-television/strings.xml31
-rw-r--r--res/values-television/styles.xml37
-rw-r--r--res/values-television/themes.xml67
-rw-r--r--res/values-th-television/strings.xml23
-rw-r--r--res/values-th/strings.xml34
-rw-r--r--res/values-tl-television/strings.xml23
-rw-r--r--res/values-tl/strings.xml34
-rw-r--r--res/values-tr-television/strings.xml23
-rw-r--r--res/values-tr/strings.xml34
-rw-r--r--res/values-uk-television/strings.xml23
-rw-r--r--res/values-uk/strings.xml38
-rw-r--r--res/values-ur-rPK-television/strings.xml23
-rw-r--r--res/values-ur-rPK/strings.xml34
-rw-r--r--res/values-uz-rUZ-television/strings.xml23
-rw-r--r--res/values-uz-rUZ/strings.xml34
-rw-r--r--res/values-vi-television/strings.xml23
-rw-r--r--res/values-vi/strings.xml36
-rw-r--r--res/values-zh-rCN-television/strings.xml23
-rw-r--r--res/values-zh-rCN/strings.xml34
-rw-r--r--res/values-zh-rHK-television/strings.xml23
-rw-r--r--res/values-zh-rHK/strings.xml34
-rw-r--r--res/values-zh-rTW-television/strings.xml23
-rw-r--r--res/values-zh-rTW/strings.xml34
-rw-r--r--res/values-zu-television/strings.xml23
-rw-r--r--res/values-zu/strings.xml34
-rw-r--r--res/values/dimens.xml40
-rw-r--r--res/values/strings.xml110
-rwxr-xr-xres/values/styles.xml20
-rw-r--r--res/values/themes.xml28
-rw-r--r--res/xml/all_permissions.xml24
-rw-r--r--src/com/android/packageinstaller/GrantActivity.java229
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java166
-rwxr-xr-xsrc/com/android/packageinstaller/UninstallAppProgress.java67
-rwxr-xr-xsrc/com/android/packageinstaller/UninstallerActivity.java13
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java597
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissions.java173
-rw-r--r--src/com/android/packageinstaller/permission/model/Permission.java126
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java414
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionGroup.java87
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionGroups.java225
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java133
-rw-r--r--src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java117
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java376
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java89
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java91
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java75
-rw-r--r--src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java49
-rw-r--r--src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java63
-rw-r--r--src/com/android/packageinstaller/permission/ui/PreferenceImageView.java69
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java214
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java404
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java462
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java268
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java427
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionsFrameFragment.java121
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java84
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java217
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java404
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java131
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java267
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java434
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java203
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java85
-rw-r--r--src/com/android/packageinstaller/permission/utils/LocationUtils.java72
-rw-r--r--src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java72
-rw-r--r--src/com/android/packageinstaller/permission/utils/Utils.java140
231 files changed, 13202 insertions, 551 deletions
diff --git a/Android.mk b/Android.mk
index 60f31b93..5a53086e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,10 +4,29 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := \
- $(call all-subdir-java-files) \
+ $(call all-java-files-under, src) \
src/com/android/packageinstaller/EventLogTags.logtags
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
+LOCAL_STATIC_JAVA_LIBRARIES += \
+ android-support-v4 \
+ 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
+
+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
+
+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_PACKAGE_NAME := PackageInstaller
LOCAL_CERTIFICATE := platform
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e8cb213c..30859021 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,19 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.packageinstaller">
+ package="com.android.packageinstaller" coreApp="true">
<original-package android:name="com.android.packageinstaller" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.GRANT_REVOKE_PERMISSIONS" />
+ <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
+ <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.READ_INSTALL_SESSIONS" />
+ <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
+ <uses-permission android:name="android.permission.KILL_UID" />
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
<application android:label="@string/app_name"
@@ -63,15 +66,40 @@
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="false" />
- <activity android:name=".GrantActivity"
+ <activity android:name=".permission.ui.GrantPermissionsActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
- android:theme="@android:style/Theme.DeviceDefault.Dialog.NoActionBar">
+ android:theme="@style/GrantPermissions">
<intent-filter android:priority="1">
- <action android:name="android.content.pm.action.REQUEST_PERMISSION" />
+ <action android:name="android.content.pm.action.REQUEST_PERMISSIONS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
+ <activity android:name=".permission.ui.ManagePermissionsActivity"
+ android:configChanges="orientation|keyboardHidden|screenSize"
+ android:excludeFromRecents="true"
+ android:label="@string/app_permissions"
+ android:theme="@style/Settings"
+ android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS">
+ <intent-filter android:priority="1">
+ <action android:name="android.intent.action.MANAGE_PERMISSIONS" />
+ <action android:name="android.intent.action.MANAGE_APP_PERMISSIONS" />
+ <action android:name="android.intent.action.MANAGE_PERMISSION_APPS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name=".permission.ui.OverlayWarningDialog"
+ 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" />
+ </intent-filter>
+ </receiver>
</application>
-</manifest>
+
+</manifest>
diff --git a/proguard.flags b/proguard.flags
index f0a0f473..115958fa 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -2,4 +2,7 @@
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
+-keep class android.support.v7.preference.Preference* {
+ *;
+}
-dontwarn android.support.v4.**
diff --git a/res/anim/snackbar_enter.xml b/res/anim/snackbar_enter.xml
new file mode 100644
index 00000000..96bf4d25
--- /dev/null
+++ b/res/anim/snackbar_enter.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shareInterpolator="false">
+ <translate android:fromYDelta="100%" android:toYDelta="0"
+ android:interpolator="@android:interpolator/decelerate_quint"
+ android:duration="250"/>
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:interpolator="@android:interpolator/decelerate_quint"
+ android:duration="250" />
+</set>
diff --git a/res/anim/snackbar_exit.xml b/res/anim/snackbar_exit.xml
new file mode 100644
index 00000000..9aee1778
--- /dev/null
+++ b/res/anim/snackbar_exit.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shareInterpolator="false">
+ <translate android:fromYDelta="0" android:toYDelta="100%"
+ android:interpolator="@android:interpolator/accelerate_quint"
+ android:duration="250"/>
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:interpolator="@android:interpolator/accelerate_quint"
+ android:duration="250"/>
+</set>
diff --git a/res/values/colors.xml b/res/drawable-television/grant_permissions_action_item.xml
index 6a18b2eb..96bf582c 100755..100644
--- a/res/values/colors.xml
+++ b/res/drawable-television/grant_permissions_action_item.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<resources>
- <color name="shadow">#cc222222</color>
- <color name="transparent">#00000000</color>
-</resources>
-
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/grant_permissions_white_text_alpha_100">
+ <item android:drawable="@drawable/grant_permissions_action_item_background" />
+</ripple>
diff --git a/res/drawable-television/grant_permissions_action_item_background.xml b/res/drawable-television/grant_permissions_action_item_background.xml
new file mode 100644
index 00000000..86d6b1f4
--- /dev/null
+++ b/res/drawable-television/grant_permissions_action_item_background.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true" android:drawable="@drawable/grant_permissions_action_item_shape" />
+ <item android:state_focused="true" android:drawable="@drawable/grant_permissions_action_item_shape" />
+ <!-- no default background is specified, making the button transparent when not active -->
+</selector>
diff --git a/res/drawable-television/grant_permissions_action_item_shape.xml b/res/drawable-television/grant_permissions_action_item_shape.xml
new file mode 100644
index 00000000..08cd3455
--- /dev/null
+++ b/res/drawable-television/grant_permissions_action_item_shape.xml
@@ -0,0 +1,28 @@
+<?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.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetRight="1dp"
+ android:insetBottom="1dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="2dp" />
+ <solid android:color="@color/grant_permissions_focus_highlight" />
+ <padding android:left="8dp"
+ android:top="4dp"
+ android:right="8dp"
+ android:bottom="4dp" />
+ </shape>
+</inset>
diff --git a/res/drawable/ic_dialog_alert_material.xml b/res/drawable/ic_dialog_alert_material.xml
new file mode 100644
index 00000000..8bd2e0ba
--- /dev/null
+++ b/res/drawable/ic_dialog_alert_material.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2014 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"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:pathData="M1,21l22,0L12,2L1,21zM13,18l-2,0l0,-2l2,0L13,18zM13,14l-2,0l0,-4l2,0L13,14z"
+ android:fillColor="@android:color/white"/>
+</vector>
diff --git a/res/drawable/ic_info.xml b/res/drawable/ic_info.xml
new file mode 100644
index 00000000..029ff1b5
--- /dev/null
+++ b/res/drawable/ic_info.xml
@@ -0,0 +1,28 @@
+<!--
+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.
+-->
+<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="?attr/colorControlNormal">
+ <path
+ android:pathData="M0 0h24v24H0z"
+ android:fillColor="#00000000"/>
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M11.0,17.0l2.0,0.0l0.0,-6.0l-2.0,0.0l0.0,6.0zm1.0,-15.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0zm0.0,18.0c-4.41,0.0 -8.0,-3.59 -8.0,-8.0s3.59,-8.0 8.0,-8.0 8.0,3.59 8.0,8.0 -3.59,8.0 -8.0,8.0zM11.0,9.0l2.0,0.0L13.0,7.0l-2.0,0.0l0.0,2.0z"/>
+</vector>
diff --git a/res/drawable/ic_lock.xml b/res/drawable/ic_lock.xml
new file mode 100644
index 00000000..396bd988
--- /dev/null
+++ b/res/drawable/ic_lock.xml
@@ -0,0 +1,31 @@
+<?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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+ <path
+ android:pathData="M0 0h48v48H0z" />
+ <path
+ android:fillColor="#000000"
+ android:pathData="M36 16h-2v-4c0-5.52-4.48-10-10-10S14 6.48 14 12v4h-2c-2.21 0-4 1.79-4 4v20c0
+2.21 1.79 4 4 4h24c2.21 0 4-1.79 4-4V20c0-2.21-1.79-4-4-4zM24 34c-2.21
+0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm6.2-18H17.8v-4c0-3.42 2.78-6.2
+6.2-6.2 3.42 0 6.2 2.78 6.2 6.2v4z" />
+</vector>
diff --git a/res/drawable/ic_more_items.xml b/res/drawable/ic_more_items.xml
new file mode 100644
index 00000000..5fdcdcef
--- /dev/null
+++ b/res/drawable/ic_more_items.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+ <path
+ android:fillColor="#000000"
+ android:pathData="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7
+7v2h14V7H7z" />
+ <path
+ android:pathData="M0 0h24v24H0z" />
+</vector> \ No newline at end of file
diff --git a/res/drawable/ic_perm_device_info.xml b/res/drawable/ic_perm_device_info.xml
new file mode 100644
index 00000000..ef91c746
--- /dev/null
+++ b/res/drawable/ic_perm_device_info.xml
@@ -0,0 +1,24 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M26.0,14.0l-4.0,0.0l0.0,4.0l4.0,0.0l0.0,-4.0zm0.0,8.0l-4.0,0.0l0.0,12.0l4.0,0.0L26.0,22.0zm8.0,-19.98L14.0,2.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,36.0c0.0,2.21 1.79,4.0 4.0,4.0l20.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L38.0,6.0c0.0,-2.21 -1.79,-3.98 -4.0,-3.98zM34.0,38.0L14.0,38.0L14.0,10.0l20.0,0.0l0.0,28.0z"/>
+</vector>
diff --git a/res/drawable/ic_toc.xml b/res/drawable/ic_toc.xml
new file mode 100644
index 00000000..66c476be
--- /dev/null
+++ b/res/drawable/ic_toc.xml
@@ -0,0 +1,24 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M6.0,18.0l28.0,0.0l0.0,-4.0L6.0,14.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,22.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,30.0l0.0,4.0zm32.0,0.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0zm0.0,-20.0l0.0,4.0l4.0,0.0l0.0,-4.0l-4.0,0.0zm0.0,12.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0z"/>
+</vector>
diff --git a/res/layout-television/grant_permissions.xml b/res/layout-television/grant_permissions.xml
new file mode 100644
index 00000000..44583bfb
--- /dev/null
+++ b/res/layout-television/grant_permissions.xml
@@ -0,0 +1,91 @@
+<?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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:paddingLeft="@dimen/action_dialog_padding_left"
+ android:paddingRight="@dimen/action_dialog_padding_right"
+ android:paddingTop="@dimen/action_dialog_padding_top"
+ android:paddingBottom="@dimen/action_dialog_padding_bottom"
+ android:background="@color/grant_permissions_background_color">
+
+ <ImageView
+ android:id="@+id/permission_icon"
+ android:tint="@color/grant_permissions_app_color"
+ android:layout_width="@dimen/grant_permissions_app_icon_size"
+ android:layout_height="@dimen/grant_permissions_app_icon_size"
+ android:layout_marginTop="@dimen/grant_permissions_app_icon_margin_top"/>
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginLeft="@dimen/action_dialog_content_margin_left"
+ android:layout_marginRight="@dimen/action_dialog_content_margin_right">
+ <TextView
+ android:id="@+id/current_page_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/grant_permissions_app_breadcrumb_margin_bottom"
+ android:textAppearance="@style/GrantPermissions.BreadcrumbText" />
+
+ <TextView
+ android:id="@+id/permission_message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/grant_permissions_app_title_margin_bottom"
+ android:textAppearance="@style/GrantPermissions.TitleText"/>
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_marginBottom="@dimen/grant_permissions_app_details_margin_bottom"
+ android:layout_weight="1"
+ android:text="@string/grant_dialog_how_to_change"
+ android:textAppearance="@style/GrantPermissions.BodyText" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="@dimen/action_dialog_actions_width"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/action_dialog_actions_margin_left"
+ android:layout_marginTop="@dimen/action_dialog_actions_margin_top">
+ <Button
+ android:id="@+id/permission_allow_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/grant_dialog_button_allow"
+ style="@style/GrantPermissions.ActionItem" />
+
+ <Button
+ android:id="@+id/permission_deny_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/grant_dialog_button_deny"
+ style="@style/GrantPermissions.ActionItem" />
+
+ <Button
+ android:id="@+id/permission_deny_dont_ask_again_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/grant_dialog_button_deny_dont_ask_again"
+ style="@style/GrantPermissions.ActionItem" />
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout-television/permissions_frame.xml b/res/layout-television/permissions_frame.xml
new file mode 100644
index 00000000..da0b2555
--- /dev/null
+++ b/res/layout-television/permissions_frame.xml
@@ -0,0 +1,113 @@
+<?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
+ -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:filterTouchesWhenObscured="true">
+
+ <FrameLayout
+ android:layout_width="@dimen/lb_action_section_width"
+ android:layout_height="match_parent"
+ android:layout_alignParentEnd="true"
+ android:background="@color/lb_action_fragment_background">
+
+ <FrameLayout
+ android:id="@+id/prefs_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:id="@+id/no_permissions"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/no_permissions"
+ android:gravity="center"
+ android:textAppearance="@android:style/TextAppearance.Large"
+ />
+
+ </FrameLayout>
+
+ </FrameLayout>
+
+ <RelativeLayout
+ android:layout_width="@dimen/lb_content_section_width"
+ android:layout_height="match_parent"
+ android:layout_alignParentStart="true"
+ android:background="@color/lb_dialog_activity_background"
+ android:paddingStart="@dimen/lb_content_fragment_start_padding"
+ android:paddingEnd="@dimen/lb_content_fragment_delimiter_padding" >
+
+ <ImageView
+ android:id="@+id/lb_icon"
+ android:layout_width="@dimen/lb_content_fragment_icon_width"
+ android:layout_height="@dimen/lb_content_fragment_icon_width"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_marginStart="@dimen/lb_content_fragment_delimiter_padding"
+ android:maxHeight="@dimen/lb_content_fragment_max_icon_height"
+ android:minHeight="@dimen/lb_content_fragment_icon_width"
+ android:scaleType="fitCenter"
+ tools:ignore="ContentDescription" />
+
+ <TextView
+ android:id="@+id/lb_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_centerVertical="true"
+ android:layout_toStartOf="@id/lb_icon"
+ android:ellipsize="end"
+ android:fontFamily="sans-serif-light"
+ android:gravity="end"
+ android:maxLines="2"
+ android:paddingBottom="@dimen/lb_content_fragment_title_text_bottom_padding"
+ android:paddingTop="@dimen/lb_content_fragment_title_text_top_padding"
+ android:textColor="@color/lb_content_title_text_color"
+ android:textSize="@dimen/lb_content_fragment_title_text_size"/>
+
+ <TextView
+ android:id="@+id/lb_breadcrumb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_above="@id/lb_title"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_toStartOf="@id/lb_icon"
+ android:ellipsize="end"
+ android:fontFamily="sans-serif-condensed"
+ android:singleLine="true"
+ android:textColor="@color/lb_content_breadcrumb_text_color"
+ android:textSize="@dimen/lb_content_fragment_breadcrumb_text_size" />
+
+ <TextView
+ android:id="@+id/lb_description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_below="@id/lb_title"
+ android:layout_toStartOf="@id/lb_icon"
+ android:ellipsize="end"
+ android:fontFamily="sans-serif"
+ android:gravity="end"
+ android:maxLines="6"
+ android:textColor="@color/lb_content_description_text_color"
+ android:textSize="@dimen/lb_content_fragment_description_text_size"
+ android:lineSpacingExtra="3dp"/>
+ </RelativeLayout>
+
+</RelativeLayout>
diff --git a/res/layout/app_details.xml b/res/layout/app_details.xml
index 0e2cd071..8f7d2cff 100644
--- a/res/layout/app_details.xml
+++ b/res/layout/app_details.xml
@@ -4,9 +4,9 @@
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.
@@ -32,7 +32,7 @@ installation screens
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_marginStart="8dip"
- android:background="@color/transparent"
+ android:background="@android:color/transparent"
android:layout_alignParentStart="true"
android:gravity="start"
android:scaleType="centerCrop"/>
@@ -42,8 +42,6 @@ installation screens
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorPrimary"
- android:shadowColor="@color/shadow"
- android:shadowRadius="2"
android:layout_toEndOf="@id/app_icon"
android:singleLine="true"
android:layout_centerInParent="true"
@@ -63,6 +61,6 @@ installation screens
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
-
+
</RelativeLayout>
diff --git a/res/layout/grant_permissions.xml b/res/layout/grant_permissions.xml
new file mode 100644
index 00000000..463f0ccd
--- /dev/null
+++ b/res/layout/grant_permissions.xml
@@ -0,0 +1,109 @@
+<?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.
+-->
+
+<com.android.packageinstaller.permission.ui.ManualLayoutFrame
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent" >
+
+ <LinearLayout
+ android:id="@+id/dialog_container"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:paddingTop="24dip"
+ android:paddingBottom="8dip"
+ android:paddingStart="22dip"
+ android:paddingEnd="16dip"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:id="@+id/desc_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <include
+ layout="@layout/permission_description" />
+ </FrameLayout>
+
+ <CheckBox
+ android:id="@+id/do_not_ask_checkbox"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dip"
+ android:text="@string/never_ask_again"
+ style="?android:attr/textAppearanceSmall"
+ android:visibility="gone">
+ </CheckBox>
+
+ <com.android.packageinstaller.permission.ui.ButtonBarLayout
+ android:id="@+id/button_group"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:paddingStart="2dip"
+ android:paddingTop="16dip">
+
+ <TextView
+ android:id="@+id/current_page_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="start|bottom"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
+ android:paddingEnd="12dp"
+ android:singleLine="true"
+ style="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:visibility="invisible">
+ </TextView>
+
+ <Space
+ android:id="@*android:id/spacer"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:visibility="invisible" >
+ </Space>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="end"
+ android:orientation="horizontal" >
+
+ <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:layout_marginStart="8dip"
+ android:text="@string/grant_dialog_button_allow" >
+ </Button>
+
+ </LinearLayout>
+
+ </com.android.packageinstaller.permission.ui.ButtonBarLayout>
+
+ </LinearLayout>
+
+</com.android.packageinstaller.permission.ui.ManualLayoutFrame>
diff --git a/res/layout/header.xml b/res/layout/header.xml
new file mode 100644
index 00000000..f158e442
--- /dev/null
+++ b/res/layout/header.xml
@@ -0,0 +1,53 @@
+<!--
+ 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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:background="?android:attr/colorPrimary"
+ android:gravity="center_vertical" >
+
+ <ImageView android:id="@+id/icon"
+ android:layout_width="@dimen/header_subsettings_margin_start"
+ android:layout_height="40dp"
+ android:gravity="end"
+ android:layout_centerVertical="true" />
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginStart="@dimen/header_subsettings_margin_start"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_centerVertical="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="?android:attr/textColorPrimaryInverse"
+ android:textAlignment="viewStart" />
+
+ <ImageView
+ android:id="@+id/info"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="@dimen/header_subsettings_margin_end"
+ android:layout_centerVertical="true"
+ android:minHeight="0dp"
+ android:minWidth="0dp"
+ android:scaleType="center"
+ android:src="@drawable/ic_info"
+ style="?android:attr/borderlessButtonStyle" />
+
+</RelativeLayout>
diff --git a/res/layout/install_confirm.xml b/res/layout/install_confirm.xml
index 86ea1652..72d5e377 100644
--- a/res/layout/install_confirm.xml
+++ b/res/layout/install_confirm.xml
@@ -31,9 +31,10 @@
android:id="@+id/install_confirm_question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
android:text="@string/install_confirm_question"
android:textAppearance="?android:attr/textAppearanceMedium"
- style="@style/padded"
android:paddingTop="4dip" />
<ImageView
diff --git a/res/layout/install_start.xml b/res/layout/install_start.xml
index 5e0f9579..9acf1992 100644
--- a/res/layout/install_start.xml
+++ b/res/layout/install_start.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
diff --git a/res/layout/loading_container.xml b/res/layout/loading_container.xml
new file mode 100644
index 00000000..5a165dee
--- /dev/null
+++ b/res/layout/loading_container.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/loading_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone"
+ android:gravity="center">
+
+ <ProgressBar style="?android:attr/progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/loading"
+ android:paddingTop="4dip"
+ android:singleLine="true" />
+
+</LinearLayout>
diff --git a/res/layout/permission_description.xml b/res/layout/permission_description.xml
new file mode 100644
index 00000000..2a00e9bf
--- /dev/null
+++ b/res/layout/permission_description.xml
@@ -0,0 +1,43 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/perm_desc_root"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/permission_icon"
+ android:layout_width="36dip"
+ android:layout_height="36dip"
+ android:layout_marginTop="3dp"
+ android:tint="?android:attr/colorAccent"
+ android:scaleType="fitCenter" >
+ </ImageView>
+
+ <TextView
+ android:id="@+id/permission_message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/permission_icon"
+ android:layout_marginTop="3dp"
+ android:paddingStart="16dip"
+ android:paddingEnd="8dip"
+ style="?android:attr/textAppearanceMedium">
+ </TextView>
+
+</LinearLayout>
diff --git a/res/layout/permissions_frame.xml b/res/layout/permissions_frame.xml
new file mode 100644
index 00000000..156af57e
--- /dev/null
+++ b/res/layout/permissions_frame.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/prefs_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:id="@+id/no_permissions"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/no_permissions"
+ android:gravity="center"
+ style="?android:attr/textAppearanceLarge">
+ </TextView>
+
+ </FrameLayout>
+
+ <include layout="@layout/loading_container" />
+
+</FrameLayout>
diff --git a/res/layout/permissions_list.xml b/res/layout/permissions_list.xml
index ee906995..5e3ae0f5 100644
--- a/res/layout/permissions_list.xml
+++ b/res/layout/permissions_list.xml
@@ -22,32 +22,10 @@ This is the structure for the list of all permissions.
android:id="@+id/scrollview"
android:fillViewport="true">
<LinearLayout
+ android:id="@+id/permission_list"
android:orientation="vertical"
android:layout_width="match_parent"
+ android:paddingEnd="4dp"
android:layout_height="wrap_content">
- <LinearLayout android:id="@+id/privacylist"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="4dp">
- <TextView
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_marginStart="16dp"
- android:layout_marginEnd="16dp"
- android:text="@string/privacyPerms" />
- </LinearLayout>
- <LinearLayout android:id="@+id/devicelist"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="4dp">
- <TextView
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_marginStart="16dp"
- android:layout_marginEnd="16dp"
- android:text="@string/devicePerms" />
- </LinearLayout>
</LinearLayout>
</com.android.packageinstaller.CaffeinatedScrollView>
diff --git a/res/layout/preference_category_material.xml b/res/layout/preference_category_material.xml
new file mode 100644
index 00000000..c60fd12b
--- /dev/null
+++ b/res/layout/preference_category_material.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Based on frameworks/base/core/res/res/layout/preference_category_material.xml
+ but has a ViewGroup at the root to make the support lib happy.-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+android:id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dip"
+ android:textAppearance="@android:style/TextAppearance.Material.Body2"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:textColor="?android:attr/colorAccent"
+ android:paddingTop="16dip" />
+
+</LinearLayout>
diff --git a/res/layout/preference_permissions.xml b/res/layout/preference_permissions.xml
new file mode 100644
index 00000000..631d56bd
--- /dev/null
+++ b/res/layout/preference_permissions.xml
@@ -0,0 +1,80 @@
+<?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.
+-->
+
+<!-- Based off frameworks/base/core/res/res/layout/preference_material.xml
+ except that this has the negative margin on the image removed
+ and has a set icon size (and some padding to realign). -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/selectableItemBackground"
+ android:focusable="true"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@*android:id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="start|center_vertical"
+ android:orientation="horizontal"
+ android:paddingEnd="20dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp">
+ <com.android.packageinstaller.permission.ui.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp">
+
+ <TextView android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:ellipsize="marquee" />
+
+ <TextView android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="10" />
+
+ </RelativeLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="end|center_vertical"
+ android:paddingStart="16dp"
+ android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/res/layout/preference_permissions_switch.xml b/res/layout/preference_permissions_switch.xml
new file mode 100644
index 00000000..78d2a4ef
--- /dev/null
+++ b/res/layout/preference_permissions_switch.xml
@@ -0,0 +1,80 @@
+<?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.
+-->
+
+<!-- Based off frameworks/base/core/res/res/layout/preference_material.xml
+ except that this has the negative margin on the image removed
+ and has a set icon size (and some padding to align). -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/selectableItemBackground"
+ android:focusable="true"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@*android:id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="start|center_vertical"
+ android:orientation="horizontal"
+ android:paddingEnd="20dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp">
+ <com.android.packageinstaller.permission.ui.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="36dp"
+ android:layout_height="36dp"
+ android:scaleType="fitCenter" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp">
+
+ <TextView android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:ellipsize="marquee" />
+
+ <TextView android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="10" />
+
+ </RelativeLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="end|center_vertical"
+ android:paddingStart="16dp"
+ android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/res/layout/uninstall_confirm.xml b/res/layout/uninstall_confirm.xml
index f604023f..78270f60 100644
--- a/res/layout/uninstall_confirm.xml
+++ b/res/layout/uninstall_confirm.xml
@@ -40,9 +40,10 @@
android:id="@+id/activity_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
android:textColor="?android:attr/textColorSecondary"
android:textAppearance="?android:attr/textAppearanceMedium"
- style="@style/padded"
android:visibility="gone" />
<!-- The snippet (title & icon) about the application being uninstalled. -->
diff --git a/res/values-af-television/strings.xml b/res/values-af-television/strings.xml
new file mode 100644
index 00000000..9b4b6238
--- /dev/null
+++ b/res/values-af-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Weier en moenie weer vra nie"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Jy kan dit later verander in Instellings &gt; Programme"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Wys stelselprogramme"</string>
+</resources>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index b0887f78..d814aa9c 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Deïnstallering klaar."</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_blocked_profile_owner" msgid="5006234166226562439">"Hierdie program is nodig vir jou <xliff:g id="USERNAME">%1$s</xliff:g>-profiel en kan nie gedeïnstalleer word nie."</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_blocked_profile_owner" msgid="5397102354360532069">"Hierdie program is nodig vir jou werkprofiel 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie deïnstalleer word nie."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Toesteltoegang"</string>
<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_allow" msgid="4616529495342337095">"Laat toe"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Weier"</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="5209102765005869454">"Laat <xliff:g id="APP_NAME">%1$s</xliff:g> toe om te <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programme"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Programtoestemmings"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Moet nooit weer vra nie"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Geen toestemmings nie"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Bykomende toestemmings"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Nog <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Nog <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Hierdie program is vir \'n ouer weergawe van Android ontwerp. As toestemming geweier word, kan dit veroorsaak dat dit nie meer soos beplan funksioneer nie."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"voer \'n onbekende handeling uit"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> uit <xliff:g id="COUNT_1">%2$d</xliff:g> programme toegelaat"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Wys stelsel"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Versteek stelsel"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>-toestemmings"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Geen programme nie"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Ligginginstellings"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is \'n verskaffer van liggingdienste vir hierdie toestel. Liggingtoegang kan vanuit ligginginstellings verander word."</string>
+ <string name="system_warning" msgid="7103819124542305179">"As jy hierdie toestemming weier, sal basiese kenmerke van jou toestel dalk nie meer soos bedoel werk nie."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Afgedwing deur beleid"</string>
+ <string name="loading" msgid="7811651799620593731">"Laai tans …"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alle toestemmings"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Ander programvermoëns"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Toestemmingsversoek"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Skermoorlegger bespeur"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Om hierdie toestemminginstelling te verander, moet jy eers die skermoorlegger by Instellings &gt; Programme afskakel"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Maak instellings oop"</string>
</resources>
diff --git a/res/values-am-television/strings.xml b/res/values-am-television/strings.xml
new file mode 100644
index 00000000..5beefbce
--- /dev/null
+++ b/res/values-am-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"ይሄንን በኋላ ላይ በቅንብሮችና መተግበሪያዎች ውስጥ ሊቀይሩት ይችላሉ"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"የስርዓት መተግበሪያዎችን አሳይ"</string>
+</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 2b1ada1c..de1f8538 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ይህ መተግበሪያ ለ<xliff:g id="USERNAME">%1$s</xliff:g> መገለጫዎ የሚያስፈልግና ሊራገፍ የማይችል ነው።"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ይህ ጥቅል የተጠቃሚ <xliff:g id="USERNAME">%1$s</xliff:g> ገቢር መሣሪያ አስተዳዳሪ ስለሆነ ማራገፍ አይቻልም።"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ይህ መተግበሪያ ለስራ መገለጫዎ የሚያስፈልግ ሲሆን ሊራገፍ አይችልም።"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ይህ መተግበሪያ በመሣሪያዎ አስተዳዳሪ የሚፈለግ እና ሊራገፍ የማይችል ነው።"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"የመሣሪያ አስተዳዳሪዎችን አደራጅ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>ማራገፍ አልተቻለም"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"የመሳሪያ መዳረሻ"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ይህ ዝማኔ ምንም አዲስ ፈቃድ አያስፈልገውም።"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"የሚከተሉት ፍቃዶችን መስጠት ይፈልጋሉ? የእነዚህ መዳረሻዎችን ይሰጣል፦"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ፍቀድ"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ከልክል"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ከ<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g> እንዲያደርግ ይፈቀድለት?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"መተግበሪያዎች"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"የመተግበሪያ ፈቃዶች"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ሁለተኛ እንዳትጠይቅ"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ምንም ፍቃዶች የሉም"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"ተጨማሪ ፈቃዶች"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ተጨማሪ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ተጨማሪ</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"ስርዓትን ደብቅ"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ፍቃዶች"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ምንም መተግበሪያዎች የሉም"</string>
+ <string name="location_settings" msgid="1774875730854491297">"የአካባቢ ቅንብሮች"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> የዚህ መሳሪያ አካባቢ አገልግሎቶች አቅራቢ ነው። የአካባቢ መዳረሻ ከአካባቢ ቅንብሮች ሊሻሻል ይችላል።"</string>
+ <string name="system_warning" msgid="7103819124542305179">"ይህን ፍቃድ ከከለከሉ የመሳሪያዎ መሰረታዊ ባህሪያት ከዚህ በኋላ እንደተፈለገው ላይሰሩ ይችላሉ።"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"በመመሪያ ተፈጻሚ የሆነ"</string>
+ <string name="loading" msgid="7811651799620593731">"በመጫን ላይ…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ሁሉም ፍቃዶች"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ሌሎች የመተግበሪያ ችሎታዎች"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"የፍቃድ ጥያቄ"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"የማያ ገጽ ተደራቢ ተገኝቷል"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ይህን የፍቃድ ቅንብር ለመቀየር መጀመሪያ የማያ ገጽ ተደራቢውን ከቅንብሮች &gt; መተግበሪያዎች ማጥፋት አለብዎ"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ቅንብሮችን ክፈት"</string>
</resources>
diff --git a/res/values-ar-television/strings.xml b/res/values-ar-television/strings.xml
new file mode 100644
index 00000000..98a9d8fa
--- /dev/null
+++ b/res/values-ar-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"عرض تطبيقات النظام"</string>
+</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c509774d..a4e761a7 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -63,7 +63,7 @@
<string name="dlg_ok" msgid="6944357727705699232">"موافق"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"لم يتم العثور على التطبيق"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"لم يتم العثور على التطبيق في قائمة التطبيقات المثبتة."</string>
- <string name="uninstall_application_title" msgid="1860074100811653963">"إزالة التطبيق"</string>
+ <string name="uninstall_application_title" msgid="1860074100811653963">"إلغاء تثبيت التطبيق"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"إزالة التحديث"</string>
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> هو جزء من التطبيق التالي:"</string>
<string name="uninstall_application_text" msgid="6691975835951187030">"هل تريد إزالة هذا التطبيق؟"</string>
@@ -72,9 +72,10 @@
<string name="uninstall_update_text" msgid="2056387942084605027">"هل تريد استبدال هذا التطبيق بإصدار المصنع؟"</string>
<string name="uninstalling" msgid="5556217435895938250">"جارٍ الإزالة..."</string>
<string name="uninstall_done" msgid="3792487853420281888">"انتهت الإزالة."</string>
- <string name="uninstall_failed" msgid="631122574306299512">"أخفقت الإزالة."</string>
+ <string name="uninstall_failed" msgid="631122574306299512">"أخفق إلغاء التثبيت."</string>
<string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"تتعذر الإزالة نظرًا لأن هذه الحزمة تمثل مشرفًا نشطًا للجهاز."</string>
- <string name="uninstall_blocked_profile_owner" msgid="5006234166226562439">"هذا التطبيق مطلوب لملفك الشخصي في <xliff:g id="USERNAME">%1$s</xliff:g> ولا يمكن إزالته."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"لا يمكن الإزالة لأن هذه الحزمة تعد مشرف جهاز نشطًا للمستخدم <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"هذا التطبيق مطلوب لملفك الشخصي للعمل ولا يمكن إزالته."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"مشرف الجهاز يحتاج إلى هذا التطبيق ولا يمكن إزالته."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"إدارة مشرفي الجهاز"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"تعذرت إزالة <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,39 @@
<string name="devicePerms" msgid="6733560207731294504">"الدخول إلى الجهاز"</string>
<string name="no_new_perms" msgid="6657813692169565975">"لا يتطلب هذا التحديث أي أذونات جديدة."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"هل ترغب في منح الأذونات التالية؟ علمًا بأنها تتيح الدخول إلى:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"سماح"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"رفض"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> من <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"هل تريد السماح لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> بإجراء <xliff:g id="ACTION">%2$s</xliff:g>؟"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"التطبيقات"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"أذونات التطبيق"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"عدم السؤال مرة أخرى"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ليست هناك أذونات"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"أذونات إضافية"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g>لا أذونات أخرى</item>
+ <item quantity="two">إذنان آخران (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> أذونات أخرى</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> إذنًا آخر</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> من الأذونات الأخرى</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>إذن واحد آخر</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"إخفاء النظام"</string>
+ <string name="permission_title" msgid="6495415273398916381">"أذونات <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ليس هناك أي تطبيقات"</string>
+ <string name="location_settings" msgid="1774875730854491297">"إعدادات الموقع"</string>
+ <string name="location_warning" msgid="8778701356292735971">"يعد <xliff:g id="APP_NAME">%1$s</xliff:g> أحد مقدمي خدمات الموقع لهذا الجهاز. يمكن تعديل إمكانية الوصول إلى الموقع من إعدادات الموقع."</string>
+ <string name="system_warning" msgid="7103819124542305179">"إذا رفضت هذا الإذن، ربما لا تعمل ميزات أساسية في جهازك على النحو المنشود."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"فرضته إحدى السياسات"</string>
+ <string name="loading" msgid="7811651799620593731">"جارٍ التحميل..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"كل الأذونات"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"إمكانات التطبيق الأخرى"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"طلب الإذن"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"تم اكتشاف طبقة متراكبة للشاشة"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"لتغيير إعداد هذا الإذن، يتعين عليك أولاً تعطيل الطبقة المتراكبة للشاشة من الإعدادات &gt; التطبيقات"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"فتح الإعدادات"</string>
</resources>
diff --git a/res/values-az-rAZ-television/strings.xml b/res/values-az-rAZ-television/strings.xml
new file mode 100644
index 00000000..09bd6a9d
--- /dev/null
+++ b/res/values-az-rAZ-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Rədd edin və daha soruşmayın"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bunu sonra Ayarlar vəTətbiqlər bölməsindən dəyişə bilərsiniz"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Sistem tətbiqlərini göstərin"</string>
+</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index da15fb67..87b09b92 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -36,16 +36,20 @@
<string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Ziddiyyətli imzaya malik eyni adlı cari paket artıq quraşdırılıb."</string>
<string name="install_failed_older_sdk" msgid="7947925824732917665">"Bu paket yalnız yeni Android versiyasında işləyir."</string>
<string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Bu tətbiq planşetinizə uyğun deyil."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Bu proqram TV-nizlə uyğun gəlmir."</string>
<string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Bu tətbiq telefonunuza uyğun deyil."</string>
<string name="install_failed_file_not_found" msgid="1958430133396322619">"Göstərilən paket quraşdırılma tamamlanmadan silindi."</string>
<string name="install_failed_verify_failed" msgid="5567372439890440205">"Paket yoxlamanı keçə bilmədi və quraşdırılmadı."</string>
<string name="install_failed_verify_timeout" msgid="7083090219270140373">"Paketi yoxlayarkən uzun fasilə oldu. Quraşdırmanı daha sonra bir daha yoxlayın."</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_title" msgid="2855558586206583032">"Quraşdırılma blok edilib"</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="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Ayarlar"</string>
<string name="allow_source_dlg_title" msgid="7568985073502399415">"Tətbiqlər üçün yeni mənbə"</string>
@@ -64,11 +68,15 @@
<string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> bu tətbiqin hissəsidir:"</string>
<string name="uninstall_application_text" msgid="6691975835951187030">"Bu tətbiqi aradan qaldırmaq istəyirsiniz mi?"</string>
<string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Bu tətbiqi "<b>"bütün"</b>" istifadəçilər üçün silmək istəyirsiz? Tətbiq və onun datası cihazdakı "<b>"bütün"</b>" istifadəçilər üçün silinəcək."</string>
+ <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="2056387942084605027">"Bu tətbiqi zavod versiyası ilə dəyişdirmək istəyirsiniz?"</string>
<string name="uninstalling" msgid="5556217435895938250">"Silinir..."</string>
<string name="uninstall_done" msgid="3792487853420281888">"Sistemdən silmə tamamlandı."</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_blocked_profile_owner" msgid="5397102354360532069">"Bu app iş profil üçün tələb olunur və silindi 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="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_title" msgid="6079580916889596257">"Təhlil xətası"</string>
@@ -79,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Qurğu icazəsi"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Bu güncəlləmə heç bir yeni izn tələb etmir."</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_allow" msgid="4616529495342337095">"İcazə verin"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rədd edin"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> icazədən <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ədəd"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə <xliff:g id="ACTION">%2$s</xliff:g> üçün icazə verin?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Tətbiqlər"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Tətbiq icazələri"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Bir daha soruşma"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"İcazə yoxdur"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Əlavə icazələr"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">daha <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">daha <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Bu tətbiq köhnə Android versiyası üçün nəzərdə tutulub. İcazəni rədd etmək onun lazımi şəkildə işləməməsinə səbəb ola bilər."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"naməlum əməliyyat etmək"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> tətbiqdən <xliff:g id="COUNT_0">%1$d</xliff:g> ədədinə icazə var"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Sistemi göstərin"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Sistemi gizlədin"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> icazələr"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Tətbiq yoxdur"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Məkan Ayarları"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu cihaz üçün məkan xidmətləri təminatçısıdır. Məkana giriş məkan ayarlarından dəyişdirilə bilər."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Bu icazəni rədd etsəniz, cihazınızın əsas funksiyaları lazımi qaydada işləməyə bilər."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Siyasət tərəfindən tətbiq olunur"</string>
+ <string name="loading" msgid="7811651799620593731">"Yüklənir…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Bütün icazələr"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Digər tətbiq imkanları"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"İcazə sorğusu"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran örtüyü aşkarlandı"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Bu icazə ayarını dəyişdirmək üçün əvvəldə Ayarlar və Tətbiqlər bölməsindən ekran örtüyünü söndürməlisiniz"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ayarları açın"</string>
</resources>
diff --git a/res/values-bg-television/strings.xml b/res/values-bg-television/strings.xml
new file mode 100644
index 00000000..c69acb23
--- /dev/null
+++ b/res/values-bg-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Показване на системните приложения"</string>
+</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ff8871b7..4260da34 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Приложението е необходимо за потр. ви профил <xliff:g id="USERNAME">%1$s</xliff:g> и не може да се деинсталира."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Не може да се деинст., защото пакетът е акт. мениджър на у-ва за потребителя <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Приложението е нужно за служебния ви потр. профил и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Приложението се изисква от администратора на у-вото и не може да се деинсталира."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Управление на администраторите на устройства"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> не можа да се деинсталира."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Достъп до у-вото"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Тази актуализация не изисква нови разрешения."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Искате ли да предоставите следните разрешения? Така ще се получи достъп до:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Разрешаване"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Отказване"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> от <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Ще разрешите ли на <xliff:g id="APP_NAME">%1$s</xliff:g> да <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Приложения"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Разрешения за приложения"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Никога вече да не се извежда запитване"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Няма разрешения"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Допълнителни разрешения"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Още <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Още <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Скриване на системните"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Разрешения за <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Няма приложения"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Настройки за местоположението"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> е доставчик на услуги за местоположението за това устройство. Достъпът до местоположението може да бъде променен от съответните настройки."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ако откажете това разрешение, основни функции на устройството ви може да спрат да работят както трябва."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Наложено чрез правило"</string>
+ <string name="loading" msgid="7811651799620593731">"Зарежда се…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Всички разрешения"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Други възможности на приложението"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Заявка за разрешение"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Открито е екранно наслагване"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"За да промените настройката за това разрешение, трябва първо да изключите екранното наслагване от „Настройки“ &gt; „Приложения“"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Отваряне на настройките"</string>
</resources>
diff --git a/res/values-bn-rBD-television/strings.xml b/res/values-bn-rBD-television/strings.xml
new file mode 100644
index 00000000..47b3e0ac
--- /dev/null
+++ b/res/values-bn-rBD-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"সিস্টেম অ্যাপ্লিকেশানগুলি দেখান"</string>
+</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 2c9e178f..59a03fc8 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"আপনার <xliff:g id="USERNAME">%1$s</xliff:g> প্রোফাইলের জন্য এই অ্যাপ্লিকেশানটি প্রয়োজন এবং এটি আনইনস্টল করা যাবে না।"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"এই প্যাকেজটি আনইনস্টল করা যাবে না কারণ, এটি হল <xliff:g id="USERNAME">%1$s</xliff:g> এর একটি সক্রিয় ডিভাইস প্রশাসক৷"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"আপনার প্রোফাইলের জন্য এই অ্যাপ্লিকেশানটি প্রয়োজন এবং এটি আনইনস্টল করা যাবে না৷"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"আপনার ডিভাইস প্রশাসকের চাহিদা অনুযায়ী এই অ্যাপ্লিকেশানটি আবশ্যক এবং এটি আনইনস্টল করা যাবে না।"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"ডিভাইস প্রশাসকদের পরিচালনা করুন"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> আনইনস্টল করা যায়নি৷"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"ডিভাইসের অ্যাক্সেস"</string>
<string name="no_new_perms" msgid="6657813692169565975">"এই আপডেটের জন্য কোনো নতুন অনুমতির প্রয়োজন নেই৷"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"আপনি কি নিম্নলিখিত অনুমতিগুলি প্রদান করতে চান? এটি এতে অ্যাক্সেস করার সুযোগ পাবে:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"মঞ্জুরি দিন"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"প্রত্যাখ্যান করুন"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> এর <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>কে <xliff:g id="ACTION">%2$s</xliff:g> করার মঞ্জুরি দেবেন?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"অ্যাপ্লিকেশানগুলি"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"অ্যাপ্লিকেশানের অনুমতি"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"পরে কখনই জিজ্ঞাসাই করবেন না"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"কোনো অনুমতি নেই"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"অতিরিক্ত অনুমতিগুলি"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">আরো <xliff:g id="COUNT_1">%1$d</xliff:g>টি</item>
+ <item quantity="other">আরো <xliff:g id="COUNT_1">%1$d</xliff:g>টি</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"সিস্টেম দেখান"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"সিস্টেম লুকান"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> অনুমতিগুলি"</string>
+ <string name="no_apps" msgid="1965493419005012569">"কোনো অ্যাপ্লিকেশান নেই"</string>
+ <string name="location_settings" msgid="1774875730854491297">"অবস্থান সেটিংস"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> এই ডিভাইসের জন্য একটি অবস্থান পরিষেবাগুলি প্রদান করে। অবস্থান সেটিংস থেকে অবস্থানের অ্যাক্সেস পরিবর্তন করা যায়।"</string>
+ <string name="system_warning" msgid="7103819124542305179">"আপনি যদি এই অনুমতিটি অস্বীকার করেন, তবে আপনার ডিভাইসের প্রাথমিক বৈশিষ্ট্যগুলিকে যে কাজের উদ্দেশ্যে তৈরি করা হয়েছিল সেগুলি নাও করতে পারে৷"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"নীতি দ্বারা প্রয়োগ করা হয়েছে"</string>
+ <string name="loading" msgid="7811651799620593731">"লোড হচ্ছে..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"সমস্ত অনুমতি"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"অন্যান্য অ্যাপ্লিকেশান ক্ষমতা"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"অনুমতির অনুরোধ"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"স্ক্রীন আচ্ছাদন সনাক্ত করা হয়েছে"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"এই অনুমতি সেটিংস পরিবর্তন করতে, আপনাকে প্রথমে সেটিংস &gt; এ গিয়ে অ্যাপ্লিকেশানগুলি থেকে স্ক্রীন ওভারলে বন্ধ করতে হবে"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"সেটিংস খুলুন"</string>
</resources>
diff --git a/res/values-ca-television/strings.xml b/res/values-ca-television/strings.xml
new file mode 100644
index 00000000..a49c608a
--- /dev/null
+++ b/res/values-ca-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Denega i no m\'ho tornis a preguntar"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Pots canviar-ho més endavant a Configuració &gt; Aplicacions"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostra les aplicacions del sistema"</string>
+</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 5cc7c593..d4961ee4 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -25,10 +25,10 @@
<string name="unknown" msgid="4742479012767208045">"Desconegut"</string>
<string name="installing" msgid="8613631001631998372">"S\'està instal·lant..."</string>
<string name="install_done" msgid="3682715442154357097">"Aplicació instal·lada."</string>
- <string name="install_confirm_question" msgid="7295206719219043890">"Vols instal·lar aquesta aplicació? Tindrà accés a:"</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>
- <string name="install_confirm_question_update" msgid="4624159567361487964">"Vols instal·lar una actualització per a aquesta aplicació? No es perdran les teves dades existents. L\'aplicació actualitzada tindrà accés a:"</string>
- <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Vols instal·lar una actualització d\'aquesta aplicació integrada? No es perdran les teves dades. L\'aplicació actualitzada tindrà accés a:"</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Vols instal·lar una actualització per a aquesta aplicació? No es perdran les teves dades existents. L\'aplicació actualitzada tindrà els permisos següents:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Vols instal·lar una actualització d\'aquesta aplicació integrada? No es perdran les teves dades. L\'aplicació actualitzada tindrà els permisos següents:"</string>
<string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Vols instal·lar una actualització a aquesta aplicació existent? Les dades existents no es perdran. No cal cap tipus d\'accés especial."</string>
<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>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstal·lació finalitzada."</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_blocked_profile_owner" msgid="5006234166226562439">"El perfil de l\'usuari <xliff:g id="USERNAME">%1$s</xliff:g> necessita l\'aplicació i no la pots desinstal·lar."</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_blocked_profile_owner" msgid="5397102354360532069">"Aquesta aplicació es necessita per al perfil de Work 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> no s\'ha pogut desinstal·lar."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Accés al dispositiu"</string>
<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_allow" msgid="4616529495342337095">"Permet"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denega"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Permetre que <xliff:g id="APP_NAME">%1$s</xliff:g> pugui <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacions"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisos de l\'aplicació"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"No el tornis a demanar"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sense permisos"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Més permisos"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> més</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> més</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aquesta aplicació es va dissenyar per a una versió anterior d\'Android. És possible que no funcioni com està previst si li denegues el permís."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"dur a terme una acció desconeguda"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicacions permeses"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostra el sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Amaga el sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Cap aplicació"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Configuració d\'ubicació"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> és un proveïdor de serveis d\'ubicació per a aquest dispositiu. L\'accés a la ubicació es pot modificar des de la configuració d\'ubicació."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Si no acceptes aquest permís, hi ha funcions bàsiques del dispositiu que poden deixar de funcionar com esperes."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicat en funció de la política"</string>
+ <string name="loading" msgid="7811651799620593731">"S\'està carregant..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Tots els permisos"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Altres competències de l\'aplicació"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Sol·licitud de permís"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"S\'ha detectat una superposició de pantalla"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Per canviar la configuració de permisos, cal que desactivis la superposició de pantalla des de Configuració &gt; Aplicacions"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Obre Configuració"</string>
</resources>
diff --git a/res/values-cs-television/strings.xml b/res/values-cs-television/strings.xml
new file mode 100644
index 00000000..5d1b2a26
--- /dev/null
+++ b/res/values-cs-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Odmítnout a již se neptat"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Svoji volbu můžete později změnit v nabídce Nastavení &gt; Aplikace."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Zobrazit systémové aplikace"</string>
+</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 8f9d4487..84db63a6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Odinstalace byla dokončena."</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_blocked_profile_owner" msgid="5006234166226562439">"Tato aplikace je pro váš profil <xliff:g id="USERNAME">%1$s</xliff:g> požadována a nelze ji odinstalovat."</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_blocked_profile_owner" msgid="5397102354360532069">"Tato aplikace je pro váš pracovní 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="uninstall_failed_msg" msgid="8969754702803951175">"Aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> nelze odinstalovat."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Přístup k zařízení"</string>
<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_allow" msgid="4616529495342337095">"Povolit"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmí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="5209102765005869454">"Povolit aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikace"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Oprávnění aplikací"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Již se znovu neptat"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Žádná oprávnění"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Další oprávnění"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="few">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Ještě <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Ještě <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Tato aplikace byla vytvořena pro starší verzi platformy Android. Pokud oprávnění neudělíte, může přestat fungovat podle původního záměru."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"provést neznámou akci"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povoleno u <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$d</xliff:g> aplikací"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Zobrazit systémové aplikace"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Skrýt systémové aplikace"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> – oprávnění"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Žádné aplikace"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Nastavení polohy"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Služby určování polohy v tomto zařízení poskytuje aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>. Přístup k poloze lze upravit v nastavení polohy."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Pokud toto oprávnění zamítnete, základní funkce zařízení nemusejí fungovat správně."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Vynuceno zásadami"</string>
+ <string name="loading" msgid="7811651799620593731">"Načítání…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Všechna oprávnění"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Ostatní oprávnění aplikace"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Žádost o oprávnění"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Byla zjištěna překryvná vrstva obrazovky"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Chcete-li změnit nastavení tohoto oprávnění, v Nastavení &gt; Aplikace je třeba nejprve vypnout překryvnou vrstvu obrazovky"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Otevřít nastavení"</string>
</resources>
diff --git a/res/values-da-television/strings.xml b/res/values-da-television/strings.xml
new file mode 100644
index 00000000..63b9de88
--- /dev/null
+++ b/res/values-da-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Afvis, og spørg ikke igen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan ændre dette på et senere tidspunkt i Indstillinger og apps"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Vis systemapps"</string>
+</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2d11e465..90f0e8a0 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Afinstallationen er afsluttet."</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_blocked_profile_owner" msgid="5006234166226562439">"Denne app er nødvendig for din profil <xliff:g id="USERNAME">%1$s</xliff:g> og kan ikke afinstalleres."</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_blocked_profile_owner" msgid="5397102354360532069">"Denne app er nødvendig for din arbejdsprofil 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke afinstalleres."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Adgang til enheden"</string>
<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_allow" msgid="4616529495342337095">"Tillad"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Afvis"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ud af <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Vil du give <xliff:g id="APP_NAME">%1$s</xliff:g> tilladelse til at <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Apptilladelser"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Spørg ikke igen"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Ingen tilladelser"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Flere tilladelser"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> mere</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mere</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Denne app er udviklet til en ældre version af Android. Hvis du ikke giver den tilladelse, vil den muligvis ikke længere virke efter hensigten."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"udføre en ukendt handling"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> ud af <xliff:g id="COUNT_1">%2$d</xliff:g> apps har tilladelse"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Vis systemapps"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Skjul systemapps"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> tilladelser"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ingen apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Placeringsindstillinger"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> udbyder placeringstjenester for denne enhed. Adgangen til din placering kan ændres i Placeringsindstillinger."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Hvis du afviser denne tilladelse, vil grundlæggende funktioner på din enhed muligvis ikke længere fungere efter hensigten."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Håndhæves af politik"</string>
+ <string name="loading" msgid="7811651799620593731">"Indlæser…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alle tilladelser"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Andre app-egenskaber"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Anmodning om tilladelse"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Der er registreret skærmoverlejring"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Hvis du vil ændre denne indstilling for tilladelser, skal du først slå skærmoverlejringen fra i Indstillinger &gt; Apps"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Åbn indstillingerne"</string>
</resources>
diff --git a/res/values-de-television/strings.xml b/res/values-de-television/strings.xml
new file mode 100644
index 00000000..cf52f8ca
--- /dev/null
+++ b/res/values-de-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Ablehnen und nicht mehr fragen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Sie können dies später unter \"Einstellungen &gt; Apps\" ändern."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"System-Apps anzeigen"</string>
+</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 8fad9693..76776b60 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Deinstallation abgeschlossen"</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_blocked_profile_owner" msgid="5006234166226562439">"Diese App wird für Ihr <xliff:g id="USERNAME">%1$s</xliff:g>-Profil benötigt und kann nicht deinstalliert werden."</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_blocked_profile_owner" msgid="5397102354360532069">"Die App wird für Ihr Arbeitsprofil 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> konnte nicht deinstalliert werden."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Gerätezugriff"</string>
<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öchten Sie die folgenden Berechtigungen gewähren? Diese ermöglichen den Zugriff auf Folgendes:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Zulassen"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Verweigern"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> von <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ermöglichen, <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App-Berechtigungen"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Nicht mehr fragen"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Keine Berechtigungen"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Zusätzliche Berechtigungen"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Noch <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Noch <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Diese App wurde für eine ältere Version von Android konzipiert. Wenn Sie keine Berechtigung erteilen, funktioniert die App möglicherweise nicht mehr ordnungsgemäß."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"Unbekannte Aktion durchführen"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> von <xliff:g id="COUNT_1">%2$d</xliff:g> Apps sind berechtigt."</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"System anzeigen"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"System ausblenden"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Berechtigungen für <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Keine Apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Standorteinstellungen"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ist ein Anbieter von Standortdiensten für dieses Gerät. Die Berechtigungen für den Zugriff auf Ihren Standort können Sie in den Standorteinstellungen ändern."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Wenn Sie diese Berechtigung deaktivieren, funktionieren grundlegende Funktionen Ihres Geräts möglicherweise nicht mehr ordnungsgemäß."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Von Richtlinien durchgesetzt"</string>
+ <string name="loading" msgid="7811651799620593731">"Wird geladen…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alle Berechtigungen"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Andere App-Funktionen"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Berechtigungsanfrage"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Display-Overlay erkannt"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Um diese Berechtigungseinstellung zu ändern, müssen Sie zunächst das Display-Overlay über \"Einstellungen\" &gt; \"Apps\" deaktivieren."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Einstellungen öffnen"</string>
</resources>
diff --git a/res/values-el-television/strings.xml b/res/values-el-television/strings.xml
new file mode 100644
index 00000000..d50b1bd3
--- /dev/null
+++ b/res/values-el-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Εμφάνιση εφαρμογών συστήματος"</string>
+</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ecd0bc05..c549a166 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Η εφαρμογή απαιτείται για το προφίλ σας <xliff:g id="USERNAME">%1$s</xliff:g> και δεν είναι δυνατή η απεγκτατάσταση."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Αδύνατη απεγκατάσταση, επειδή το πακέτο αποτελεί ενεργό διαχειριστή συσκευής για <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Αυτή η εφαρμογή απαιτείται για το προφίλ εργασίας και δεν είναι δυνατή η απεγκατάστασή της."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Η εφαρμογή απαιτείται από το διαχειριστή και δεν είναι δυνατή η απεγκατάσταση."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Διαχείριση διαχειριστών συσκευής"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Δεν ήταν δυνατή η κατάργηση της εγκατάστασης της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Πρόσβαση συσκευής"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Αυτή η ενημέρωση δεν απαιτεί νέες άδειες."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Θέλετε να εκχωρήσετε τα ακόλουθα δικαιώματα; Συνεπάγεται πρόσβαση σε:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Να επιτραπεί"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Απόρριψη"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> από <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> να <xliff:g id="ACTION">%2$s</xliff:g>;"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Εφαρμογές"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Δικαιώματα εφ/γών"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Να μην γίνει ποτέ ξανά ερώτηση"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Χωρίς δικαιώματα"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Πρόσθετα δικαιώματα"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Ακόμα <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Ακόμα <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Απόκρυψη συστήματος"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Δικαιώματα <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Δεν υπάρχουν εφαρμογές"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Ρυθμίσεις τοποθεσίας"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> είναι ο πάροχος των υπηρεσιών τοποθεσίας για τη συγκεκριμένη συσκευή. Μπορείτε να τροποποιήσετε την πρόσβαση τοποθεσίας από τις ρυθμίσεις τοποθεσίας."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Εάν αρνηθείτε να παραχωρήσετε αυτήν την άδεια, η λειτουργία ορισμένων βασικών δυνατοτήτων ενδέχεται να μην είναι η αναμενόμενη."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Επιβάλλεται από την πολιτική"</string>
+ <string name="loading" msgid="7811651799620593731">"Γίνεται φόρτωση…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Όλα τα δικαιώματα"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Άλλες δυνατότητες εφαρμογής"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Αίτημα άδειας"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Εντοπίστηκε επικάλυψη οθόνης"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Για να αλλάξετε αυτή τη ρύθμιση άδειας, θα πρέπει πρώτα να απενεργοποιήσετε την επικάλυψη οθόνης από τις Ρυθμίσεις &gt; Εφαρμογές"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Άνοιγμα ρυθμίσεων"</string>
</resources>
diff --git a/res/values-en-rAU-television/strings.xml b/res/values-en-rAU-television/strings.xml
new file mode 100644
index 00000000..c081905a
--- /dev/null
+++ b/res/values-en-rAU-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Deny and don\'t ask again"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings &gt; Apps"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string>
+</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
new file mode 100644
index 00000000..3986d336
--- /dev/null
+++ b/res/values-en-rAU/strings.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name" msgid="2738748390251381682">"Package installer"</string>
+ <string name="next" msgid="3057143178373252333">"Next"</string>
+ <string name="install" msgid="5896438203900042068">"Install"</string>
+ <string name="done" msgid="3889387558374211719">"Done"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"Allow this app to:"</string>
+ <string name="cancel" msgid="8360346460165114585">"Cancel"</string>
+ <string name="unknown" msgid="4742479012767208045">"Unknown"</string>
+ <string name="installing" msgid="8613631001631998372">"Installing…"</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>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Do you want to install an update to this existing application? Your existing data will not be lost. The updated application will get access to:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Do you want to install an update to this built-in application? Your existing data will not be lost. The updated application will get access to:"</string>
+ <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Do you want to install an update to this existing application? Your existing data will not be lost. It does not require any special access."</string>
+ <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_invalid_apk" msgid="1287935707565682604">"The package appears to be corrupt."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"An existing package by the same name with a conflicting signature is already installed."</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"The package only works on newer versions of Android."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"This app isn\'t compatible with your tablet."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"This app isn\'t compatible with your TV."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"This app isn\'t compatible with your phone."</string>
+ <string name="install_failed_file_not_found" msgid="1958430133396322619">"The package specified was deleted before installation could be completed."</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"The package did not pass verification and cannot be installed."</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"A timeout occurred while trying to verify this package. Try to install it again later."</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_title" msgid="2855558586206583032">"Install blocked"</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="ok" msgid="3468756155452870475">"OK"</string>
+ <string name="settings" msgid="6743583734099755409">"Settings"</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"New source for apps"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to install other apps.\n\nAllow this now and in the future?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"Manage apps"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Replace app?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"The app that you\'re installing will replace another app.\n\nAll your previous user data will be saved."</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"This is a system app.\n\nAll your previous user data will be saved."</string>
+ <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Out of space"</string>
+ <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be installed. Free up some space and try again."</string>
+ <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="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>
+ <string name="uninstall_application_text" msgid="6691975835951187030">"Do you want to uninstall this app?"</string>
+ <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Do you want to uninstall this app for "<b>"all"</b>" users? The application and its data will be removed from "<b>"all"</b>" users on the device."</string>
+ <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="2056387942084605027">"Do you want to replace this app with the factory version?"</string>
+ <string name="uninstalling" msgid="5556217435895938250">"Uninstalling…"</string>
+ <string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</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_blocked_profile_owner" msgid="5397102354360532069">"This app is needed for your work 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Parse error"</string>
+ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"There was a problem while parsing the package."</string>
+ <string name="newPerms" msgid="6039428254474104210">"New"</string>
+ <string name="allPerms" msgid="1024385515840703981">"All"</string>
+ <string name="privacyPerms" msgid="1850527049572617">"Privacy"</string>
+ <string name="devicePerms" msgid="6733560207731294504">"Device Access"</string>
+ <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_allow" msgid="4616529495342337095">"Allow"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</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="5209102765005869454">"Allow <xliff:g id="APP_NAME">%1$s</xliff:g> to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string>
+ <string name="no_apps" msgid="1965493419005012569">"No apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string>
+ <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string>
+ <string name="loading" msgid="7811651799620593731">"Loading…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings &gt; Apps"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string>
+</resources>
diff --git a/res/values-en-rGB-television/strings.xml b/res/values-en-rGB-television/strings.xml
new file mode 100644
index 00000000..c081905a
--- /dev/null
+++ b/res/values-en-rGB-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Deny and don\'t ask again"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings &gt; Apps"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string>
+</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 40734d56..3986d336 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</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_blocked_profile_owner" msgid="5006234166226562439">"This app is needed for your <xliff:g id="USERNAME">%1$s</xliff:g> profile and can\'t be uninstalled."</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_blocked_profile_owner" msgid="5397102354360532069">"This app is needed for your work 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Device Access"</string>
<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_allow" msgid="4616529495342337095">"Allow"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</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="5209102765005869454">"Allow <xliff:g id="APP_NAME">%1$s</xliff:g> to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string>
+ <string name="no_apps" msgid="1965493419005012569">"No apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string>
+ <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string>
+ <string name="loading" msgid="7811651799620593731">"Loading…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings &gt; Apps"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string>
</resources>
diff --git a/res/values-en-rIN-television/strings.xml b/res/values-en-rIN-television/strings.xml
new file mode 100644
index 00000000..c081905a
--- /dev/null
+++ b/res/values-en-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Deny and don\'t ask again"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"You can change this later in Settings &gt; Apps"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Show system apps"</string>
+</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 40734d56..3986d336 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Uninstall finished"</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_blocked_profile_owner" msgid="5006234166226562439">"This app is needed for your <xliff:g id="USERNAME">%1$s</xliff:g> profile and can\'t be uninstalled."</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_blocked_profile_owner" msgid="5397102354360532069">"This app is needed for your work 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> couldn\'t be uninstalled."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Device Access"</string>
<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_allow" msgid="4616529495342337095">"Allow"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Deny"</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="5209102765005869454">"Allow <xliff:g id="APP_NAME">%1$s</xliff:g> to <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App permissions"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Never ask again"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"No permissions"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Additional permissions"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> more</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> more</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"perform an unknown action"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> of <xliff:g id="COUNT_1">%2$d</xliff:g> apps allowed"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Show system"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Hide system"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> permissions"</string>
+ <string name="no_apps" msgid="1965493419005012569">"No apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Location Settings"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings."</string>
+ <string name="system_warning" msgid="7103819124542305179">"If you deny this permission, basic features of your device may no longer function as intended."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enforced by policy"</string>
+ <string name="loading" msgid="7811651799620593731">"Loading…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"All permissions"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Other app capabilities"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Permission request"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Screen overlay detected"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"To change this permission setting, you first have to turn off the screen overlay from Settings &gt; Apps"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Open settings"</string>
</resources>
diff --git a/res/values-es-rUS-television/strings.xml b/res/values-es-rUS-television/strings.xml
new file mode 100644
index 00000000..04aed2a0
--- /dev/null
+++ b/res/values-es-rUS-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Denegar el permiso y no volver a preguntar"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puedes cambiar esta opción más tarde en Configuración &gt; Aplicaciones"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicaciones del sistema"</string>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 354a7c7a..d65fa542 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"La desinstalación finalizó."</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_blocked_profile_owner" msgid="5006234166226562439">"El perfil de <xliff:g id="USERNAME">%1$s</xliff:g> necesita esta aplicación y no se puede desinstalar."</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_blocked_profile_owner" msgid="5397102354360532069">"El perfil de trabajo necesita esta aplicación, y no se puede 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="uninstall_failed_msg" msgid="8969754702803951175">"No se pudo desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<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 permisos indicados a continuación? Esto dará acceso a:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rechazar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"¿Permitir a <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicaciones"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicaciones"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"No volver a preguntar"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sin permisos"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionales"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> más</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> más</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación se diseñó para una versión de Android anterior. Si deniegas el permiso, es posible que deje de funcionar de la forma prevista."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"realizar una acción desconocida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"El permiso se otorgó a <xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicaciones."</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ninguna aplicación"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Configuración de la ubicación"</string>
+ <string name="location_warning" msgid="8778701356292735971">"La aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> provee servicios de ubicación a este dispositivo. El acceso a la ubicación puede modificarse desde la configuración de la ubicación."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Si no concedes este permiso, es posible que algunas funciones básicas del dispositivo dejen de funcionar correctamente."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Se aplica en función de la política"</string>
+ <string name="loading" msgid="7811651799620593731">"Cargando…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todos los permisos"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Otras funciones de la aplicación"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitud de permiso"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Se detectó una superposición de pantalla"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar esta configuración de permisos, primero debes desactivar la superposición de pantalla en Configuración &gt; Aplicaciones"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configuración"</string>
</resources>
diff --git a/res/values-es-television/strings.xml b/res/values-es-television/strings.xml
new file mode 100644
index 00000000..27074063
--- /dev/null
+++ b/res/values-es-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Denegar y no volver a preguntar"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puedes cambiar esta opción más tarde en Ajustes &gt; Aplicaciones"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicaciones del sistema"</string>
+</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 6198d1c5..04270e4b 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -25,7 +25,7 @@
<string name="unknown" msgid="4742479012767208045">"Desconocida"</string>
<string name="installing" msgid="8613631001631998372">"Instalando…"</string>
<string name="install_done" msgid="3682715442154357097">"Aplicación instalada"</string>
- <string name="install_confirm_question" msgid="7295206719219043890">"¿Quieres instalar esta aplicación? Podrá acceder a:"</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>
<string name="install_confirm_question_update" msgid="4624159567361487964">"¿Quieres instalar una actualización de la aplicación? Tus datos no se perderán. La aplicación actualizada podrá acceder a:"</string>
<string name="install_confirm_question_update_system" msgid="1302330093676416336">"¿Quieres instalar una actualización de esta aplicación integrada? Tus datos no se perderán. La aplicación actualizada podrá acceder a:"</string>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalación completada"</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_blocked_profile_owner" msgid="5006234166226562439">"Esta aplicación es necesaria para el perfil de <xliff:g id="USERNAME">%1$s</xliff:g> y no se puede desinstalar."</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_blocked_profile_owner" msgid="5397102354360532069">"Esta aplicación es necesaria para tu perfil de trabajo 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="uninstall_failed_msg" msgid="8969754702803951175">"No se ha podido desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -83,7 +84,38 @@
<string name="newPerms" msgid="6039428254474104210">"Nuevo"</string>
<string name="allPerms" msgid="1024385515840703981">"Todos"</string>
<string name="privacyPerms" msgid="1850527049572617">"Privacidad"</string>
- <string name="devicePerms" msgid="6733560207731294504">"Acceso dispositivo"</string>
+ <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_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rechazar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"¿Permitir que <xliff:g id="APP_NAME">%1$s</xliff:g> pueda <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicaciones"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicaciones"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"No volver a preguntar"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sin permisos"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionales"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> más</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> más</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación está diseñada para una versión anterior de Android. Si se le deniega el permiso, puede dejar de funcionar de la forma prevista."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"realizar una acción desconocida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicaciones permitidas"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar aplicaciones del sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar aplicaciones del sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permisos: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"No hay aplicaciones"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Ajustes de ubicación"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> es un proveedor de servicios de ubicación de este dispositivo. El acceso a la ubicación se puede modificar en los ajustes de ubicación."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Si deniegas este permiso, es posible que algunas funciones básicas de tu dispositivo dejen de funcionar correctamente."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicado por política"</string>
+ <string name="loading" msgid="7811651799620593731">"Cargando..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todos los permisos"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Otras funciones de la aplicación"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitud de permiso"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Superposición de pantalla detectada"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar la configuración de este permiso, desactiva la superposición de pantalla en Ajustes &gt; Aplicaciones"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir ajustes"</string>
</resources>
diff --git a/res/values-et-rEE-television/strings.xml b/res/values-et-rEE-television/strings.xml
new file mode 100644
index 00000000..8a66c249
--- /dev/null
+++ b/res/values-et-rEE-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Keela ja ära enam küsi"</string>
+ <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>
+</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index e77987e5..24d65be0 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstallimine on lõpetatud."</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_blocked_profile_owner" msgid="5006234166226562439">"Seda rakendust on vaja kasutaja <xliff:g id="USERNAME">%1$s</xliff:g> profiili jaoks ja seda ei saa desinstallida."</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_blocked_profile_owner" msgid="5397102354360532069">"Seda rakendust on vaja teie töö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="uninstall_failed_msg" msgid="8969754702803951175">"Rakendust <xliff:g id="APP_NAME">%1$s</xliff:g> ei saanud desinstallida."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Seadme juurdepääs"</string>
<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_allow" msgid="4616529495342337095">"Lubamine"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Keelamine"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>-st"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Kas lubada rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g> toiming <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Rakendused"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Rakenduse load"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ära enam küsi"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Lube ei ole"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Täiendavad load"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Veel <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Veel <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Rakendus on mõeldud Androidi vanemale versioonile. Kui keeldute loa andmisest, ei pruugi see ootuspäraselt töötada."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"tundmatu toiming"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> rakendust <xliff:g id="COUNT_1">%2$d</xliff:g>-st on lubatud"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Süsteemi kuvamine"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Süsteemi peitmine"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Üksuse <xliff:g id="PERMISSION">%1$s</xliff:g> load"</string>
+ <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>
+ <string name="system_warning" msgid="7103819124542305179">"Kui keelate loa, ei pruugi seadme põhifunktsioonid enam ootuspäraselt töötada."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Eeskirjadega jõustatud"</string>
+ <string name="loading" msgid="7811651799620593731">"Laadimine ..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Kõik load"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Rakenduse muud funktsioonid"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Loa taotlus"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Tuvastati ekraani ülekate"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Selle loa seade muutmiseks peate esmalt välja lülitama ekraani ülekatte menüüs Seaded &gt; Rakendused"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ava seaded"</string>
</resources>
diff --git a/res/values-eu-rES-television/strings.xml b/res/values-eu-rES-television/strings.xml
new file mode 100644
index 00000000..8442ad7a
--- /dev/null
+++ b/res/values-eu-rES-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Baztertu eta ez galdetu berriro"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Hori geroago alda dezakezu Ezarpenak &gt; Aplikazioak atalean"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Erakutsi sistema-aplikazioak"</string>
+</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index ebb968b2..491d863f 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalatu da."</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_blocked_profile_owner" msgid="5006234166226562439">"Aplikazioa <xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearen profilerako behar da eta ezin da desinstalatu."</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_blocked_profile_owner" msgid="5397102354360532069">"Aplikazioa laneko profilerako behar da 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="uninstall_failed_msg" msgid="8969754702803951175">"Ezin izan da <xliff:g id="APP_NAME">%1$s</xliff:g> desinstalatu."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Gailurako sarbidea"</string>
<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_allow" msgid="4616529495342337095">"Baimendu"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Eragotzi"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari \"<xliff:g id="ACTION">%2$s</xliff:g>\" ekintza egitea baimendu nahi diozu?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikazioak"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Aplikaziorako baimenak"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ez galdetu berriro"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Ez dago baimenik"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Baimen gehigarriak"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> gehiago</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> gehiago</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aplikazio hau Android-en bertsio zaharrago baterako diseinatuta dago. Baimena ukatzen baduzu, agian aurrerantzean ez du behar bezain ondo funtzionatuko."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"Gauzatu ekintza ezezagunak"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> aplikaziok dute baimena"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Erakutsi sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ezkutatu sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> erabiltzeko baimenak"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ez dago aplikaziorik"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Kokapen-ezarpenak"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> gailu honen kokapen-zerbitzuen hornitzailea da. Kokapenerako sarbidea kokapen-ezarpenetatik alda daiteke."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Baimena ematen ez baduzu, baliteke gailuaren oinarrizko eginbide batzuek behar bezala ez funtzionatzea."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Gidalerroen bidez aplikatzen da"</string>
+ <string name="loading" msgid="7811651799620593731">"Kargatzen…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Baimen guztiak"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Aplikazioaren beste gaitasun batzuk"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Baimen-eskaera"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Pantailaren gainjartzea detektatu da"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Baimen-ezarpen hau aldatzeko, pantailaren gainjartzea desaktibatu behar duzu Ezarpenak &gt; Aplikazioak atalean"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ireki ezarpenak"</string>
</resources>
diff --git a/res/values-fa-television/strings.xml b/res/values-fa-television/strings.xml
new file mode 100644
index 00000000..a98545dc
--- /dev/null
+++ b/res/values-fa-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"نمایش‌ برنامه‌های سیستم"</string>
+</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index a799dd35..b14cc917 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -20,7 +20,7 @@
<string name="next" msgid="3057143178373252333">"بعدی"</string>
<string name="install" msgid="5896438203900042068">"نصب"</string>
<string name="done" msgid="3889387558374211719">"انجام شد"</string>
- <string name="security_settings_desc" msgid="2706691034244052604">"به این برنامه اجازه داده شود که:"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"این برنامه مجاز است که:"</string>
<string name="cancel" msgid="8360346460165114585">"لغو"</string>
<string name="unknown" msgid="4742479012767208045">"ناشناس"</string>
<string name="installing" msgid="8613631001631998372">"در حال نصب…"</string>
@@ -46,9 +46,9 @@
<string name="install_failed_msg" product="default" msgid="8554909560982962052">"<xliff:g id="APP_NAME">%1$s</xliff:g> در تلفن شما نصب نشد."</string>
<string name="launch" msgid="4826921505917605463">"باز کردن"</string>
<string name="unknown_apps_dlg_title" msgid="2855558586206583032">"نصب مسدود شد"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"به دلایل امنیتی، رایانهٔ لوحی شما طوری تنظیم شده است که نصب برنامه‌های دریافت شده از منابع ناشناخته را مسدود کند."</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_dlg_text" product="default" msgid="133213135679009316">"برای امنیت، تلقنتان تنظیم شده تا نصب برنامه‌های دریافت شده از منابع ناشناس را مسدود کند."</string>
<string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"سرپرست شما اجازه نمی‌دهد برنامه‌های دریافت شده از منابع ناشناس نصب شوند."</string>
<string name="ok" msgid="3468756155452870475">"تأیید"</string>
<string name="settings" msgid="6743583734099755409">"تنظیمات"</string>
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"این برنامه برای نمایه <xliff:g id="USERNAME">%1$s</xliff:g> شما مورد نیاز است و نمی‌تواند حذف نصب شود."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"حذف نصب ممکن نیست چون این بسته یک سرپرست دستگاه فعال برای کاربر <xliff:g id="USERNAME">%1$s</xliff:g> است."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"این برنامه برای نمایه کاری شما لازم است و نمی‌توان آن را حذف نصب کرد."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"سرپرست دستگاه شما این برنامه را لازم کرده است و نمی‌تواند حذف نصب شود."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"مدیریت سرپرستان دستگاه"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> حذف نصب نشد."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"دسترسی به دستگاه"</string>
<string name="no_new_perms" msgid="6657813692169565975">"این به‌روزرسانی به مجوز جدیدی نیاز ندارد."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"آیا می‌خواهید مجوزهای زیر را اعطا کنید؟ این مجوزها دسترسی به این موارد را بوجود می‌آورند:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"مجاز است"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"اجازه ندارد"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> از <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"به <xliff:g id="APP_NAME">%1$s</xliff:g> برای <xliff:g id="ACTION">%2$s</xliff:g> اجازه می‌دهید؟"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"برنامه‌ها"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"مجوزهای برنامه"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"دیگر هرگز سؤال نشود"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"مجوزی موجود نیست"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"مجوزهای بیشتر"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> مورد دیگر</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> مورد دیگر</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"پنهان کردن سیستم"</string>
+ <string name="permission_title" msgid="6495415273398916381">"مجوزهای <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"برنامه‌ای موجود نیست"</string>
+ <string name="location_settings" msgid="1774875730854491297">"تنظیمات مکان"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> یکی از ارائه‌دهندگان سرویس‌های مکان برای این دستگاه است. با رفتن به تنظیمات مکان می‌توانید دسترسی به موقعیت مکانی را تغییر دهید."</string>
+ <string name="system_warning" msgid="7103819124542305179">"اگر این اجازه را رد کنید، ممکن است قابلیت‌های اصلی دستگاهتان دیگر عملکرد موردانتظار را نداشته باشند."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"اجرا توسط خط‌مشی"</string>
+ <string name="loading" msgid="7811651799620593731">"درحال بارگیری…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"همه مجوزها"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"سایر قابلیت‌های برنامه"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"درخواست مجوز"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"هم‌پوشانی صفحه شناسایی شد"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"‏برای تغییر این تنظیم مجوز، ابتدا باید هم‌پوشانی صفحه را از «تنظیمات &gt; برنامه‌ها» خاموش کنید"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"باز کردن تنظیمات"</string>
</resources>
diff --git a/res/values-fi-television/strings.xml b/res/values-fi-television/strings.xml
new file mode 100644
index 00000000..c17ae794
--- /dev/null
+++ b/res/values-fi-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Hylkää äläkä kysy uudelleen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Voit muuttaa tätä myöhemmin valitsemalla Asetukset &gt; Sovellukset."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Näytä järjestelmäsovellukset"</string>
+</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d9d335dc..4c69ed96 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -46,7 +46,7 @@
<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_title" msgid="2855558586206583032">"Asennus estetty"</string>
- <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Turv.syistä tablet-laite on asetettu estämään tuntemattomista lähteistä hankittujen sovell. asennus."</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>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Poisto valmis."</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_blocked_profile_owner" msgid="5006234166226562439">"Käyttäjäprofiili <xliff:g id="USERNAME">%1$s</xliff:g> tarvitsee tätä sovellusta eikä sitä voi poistaa."</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_blocked_profile_owner" msgid="5397102354360532069">"Työ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="uninstall_failed_msg" msgid="8969754702803951175">"Sovelluksen <xliff:g id="APP_NAME">%1$s</xliff:g> poistaminen epäonnistui"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Laitteen käyttö"</string>
<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_allow" msgid="4616529495342337095">"Salli"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Estä"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Sovellukset"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Sovelluksen käyttöoikeudet"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Älä kysy enää koskaan"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Ei käyttöoikeuksia"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Lisäkäyttöoikeudet"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lisää</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lisää</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Tämä sovellus on suunniteltu vanhemmalle Android-versiolle. Se ei välttämättä toimi oikein, jos käyttöoikeuksia ei sallita."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"suorita tuntematon toiminto"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sallitut sovellukset: <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Näytä järjestelmä"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Piilota järjestelmä"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Kohteen <xliff:g id="PERMISSION">%1$s</xliff:g> käyttöluvat"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ei sovelluksia"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Sijaintiasetukset"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> on tämän laitteen sijaintipalveluiden tarjoaja. Sijainnin käyttöoikeutta voi muokata sijaintiasetuksissa."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Jos peruutat tämän käyttöoikeuden, laitteesi perustoiminnot eivät välttämättä enää toimi oikein."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Käytännön vahvistama"</string>
+ <string name="loading" msgid="7811651799620593731">"Ladataan…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Kaikki käyttöoikeudet"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Muut sovellusluvat"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Lupapyyntö"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Näytön peittokuva havaittiin"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ennen kuin voit muokata tätä käyttöoikeusasetusta, sinun täytyy poistaa näytön peittokuva käytöstä Asetukset-valikon Sovellukset-kohdasta."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Avaa Asetukset"</string>
</resources>
diff --git a/res/values-fr-rCA-television/strings.xml b/res/values-fr-rCA-television/strings.xml
new file mode 100644
index 00000000..31293c9f
--- /dev/null
+++ b/res/values-fr-rCA-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Refuser et ne plus demander"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vous pourrez modifier ce choix plus tard dans le menu Paramètres &gt; Applications"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Afficher les applications système"</string>
+</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 3d2b5c55..02096724 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Désinstallation terminé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_blocked_profile_owner" msgid="5006234166226562439">"Impossible de désinstaller l\'application : nécessaire pour votre profil « <xliff:g id="USERNAME">%1$s</xliff:g> »."</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_blocked_profile_owner" msgid="5397102354360532069">"Impossible de désinstaller l\'appli, car nécessaire pour profil professionnel."</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="uninstall_failed_msg" msgid="8969754702803951175">"Impossible de désinstaller <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Accès à l\'appareil"</string>
<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_allow" msgid="4616529495342337095">"Autoriser"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à effectuer l\'action suivante : <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Autorisations de l\'application"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ne plus demander"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Aucune autorisation"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Autorisations supplémentaires"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> autre</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> autres</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Cette application a été conçue pour une version antérieure d\'Android. Si vous n\'accordez pas l\'autorisation, il se peut qu\'elle ne fonctionne plus correctement."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"effectuer une action inconnue"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Afficher le système"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Masquer le système"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> autorisations"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Aucune application"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Paramètres de localisation"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> est un fournisseur de services de localisation pour cet appareil. L\'accès à la position peut être modifié dans le menu des paramètres de localisation."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Si vous rejetez cette autorisation, il est possible que cela touche certaines fonctionnalités de base de votre appareil."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Activé conformément à la politique"</string>
+ <string name="loading" msgid="7811651799620593731">"Chargement en cours…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Toutes les autorisations"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Autres autorisations de l\'application"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Demande d\'autorisation"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"La superposition d\'écran a été détectée"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Pour modifier ce paramètre d\'autorisation, vous devez tout d\'abord désactiver la superposition d\'écran en accédant à Paramètres &gt; Applications."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ouvrir les paramètres"</string>
</resources>
diff --git a/res/values-fr-television/strings.xml b/res/values-fr-television/strings.xml
new file mode 100644
index 00000000..68c673c1
--- /dev/null
+++ b/res/values-fr-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Refuser et ne plus demander"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vous pourrez modifier ce paramètre plus tard sous Paramètres &gt; Applications."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Afficher les applications système"</string>
+</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 3bb7f9b8..bd1f9440 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -25,7 +25,7 @@
<string name="unknown" msgid="4742479012767208045">"Inconnu"</string>
<string name="installing" msgid="8613631001631998372">"Installation..."</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" 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>
<string name="install_confirm_question_update" msgid="4624159567361487964">"Voulez-vous installer une mise à jour pour cette application ? Vos données existantes seront conservées. L\'application mise à jour pourra :"</string>
<string name="install_confirm_question_update_system" msgid="1302330093676416336">"Voulez-vous installer une mise à jour pour cette application intégrée ? Vos données existantes seront conservées. L\'application mise à jour pourra :"</string>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Désinstallation terminé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_blocked_profile_owner" msgid="5006234166226562439">"Impossible de désinstaller appli, car elle est nécessaire pour votre profil \"<xliff:g id="USERNAME">%1$s</xliff:g>\"."</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_blocked_profile_owner" msgid="5397102354360532069">"Impossible de désinstaller appli, car nécessaire pour profil professionnel."</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="uninstall_failed_msg" msgid="8969754702803951175">"Impossible de désinstaller <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Accès à l\'appareil"</string>
<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_allow" msgid="4616529495342337095">"Autoriser"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuser"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> sur <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à <xliff:g id="ACTION">%2$s</xliff:g> ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Applications"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Autoris. des applis"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ne plus jamais demander"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Aucune autorisation"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Autorisations supplémentaires"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> autre</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> autres</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Cette application a été conçue pour une ancienne version d\'Android. Si vous désactivez les autorisations, l\'application risque de ne plus fonctionner comme prévu."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"effectuer une action inconnue"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> application(s) autorisée(s) sur <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Afficher les processus système"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Masquer les processus système"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Autorisations d\'accès aux données \"<xliff:g id="PERMISSION">%1$s</xliff:g>\""</string>
+ <string name="no_apps" msgid="1965493419005012569">"Aucune application"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Paramètres de géolocalisation"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Les services de localisation pour cet appareil sont fournis via <xliff:g id="APP_NAME">%1$s</xliff:g>. Vous pouvez modifier l\'accès aux données de localisation dans les paramètres de localisation."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Si vous rejetez cette autorisation, il est possible que cela affecte certaines fonctionnalités de base de votre appareil."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Activé conformément aux règles"</string>
+ <string name="loading" msgid="7811651799620593731">"Chargement en cours…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Toutes les autorisations"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Autres autorisations de l\'application"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Demande d\'autorisation"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Superposition d\'écran détectée"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Pour modifier ce paramètre d\'autorisation, vous devez tout d\'abord désactiver la superposition d\'écran en accédant à Paramètres &gt; Applications."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ouvrir les paramètres"</string>
</resources>
diff --git a/res/values-gl-rES-television/strings.xml b/res/values-gl-rES-television/strings.xml
new file mode 100644
index 00000000..3d80f96c
--- /dev/null
+++ b/res/values-gl-rES-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Denegar e non volver preguntar"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Podes cambiar esta opción máis tarde en Configuración e aplicacións"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicacións do sistema"</string>
+</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 1c2d1b4d..26068420 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalación finalizada"</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_blocked_profile_owner" msgid="5006234166226562439">"O teu perfil <xliff:g id="USERNAME">%1$s</xliff:g> necesita esta aplicación e non se pode desinstalar."</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_blocked_profile_owner" msgid="5397102354360532069">"O teu perfil de traballo 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="uninstall_failed_msg" msgid="8969754702803951175">"Non se puido desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Acceso dispositivo"</string>
<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_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Denegar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Queres permitir a <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicacións"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisos de aplicacións"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Non volver preguntar"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sen permisos"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permisos adicionais"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> permisos máis</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> permiso máis</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicación deseñouse para unha versión anterior de Android. Denegar o permiso pode provocar que non funcione como está previsto."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"realiza unha acción descoñecida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicacións con permiso"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permisos de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ningunha aplicación"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Configuración da localización"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é un fornecedor de servizos de localización para este dispositivo. O acceso de localización pode modificarse desde a configuración de localización."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Se denegas este permiso, é posible que as funcións básicas do teu dispositivo deixen de funcionar segundo o previsto."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicado pola política"</string>
+ <string name="loading" msgid="7811651799620593731">"Cargando…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todos os permisos"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Outras funcionalidades da aplicación"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitude de permiso"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Detectouse a superposición da pantalla"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para cambiar a configuración deste permiso, primeiro tes que desactivar a superposición da pantalla en Configuración &gt; Aplicacións"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configuración"</string>
</resources>
diff --git a/res/values-gu-rIN-television/strings.xml b/res/values-gu-rIN-television/strings.xml
new file mode 100644
index 00000000..cd0dd3c6
--- /dev/null
+++ b/res/values-gu-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"સિસ્ટમ એપ્લિકેશનો બતાવો"</string>
+</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
new file mode 100644
index 00000000..a1547bec
--- /dev/null
+++ b/res/values-gu-rIN/strings.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name" msgid="2738748390251381682">"પૅકેજ ઇન્સ્ટોલર"</string>
+ <string name="next" msgid="3057143178373252333">"આગલું"</string>
+ <string name="install" msgid="5896438203900042068">"ઇન્સ્ટોલ કરો"</string>
+ <string name="done" msgid="3889387558374211719">"થઈ ગયું"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"આ એપ્લિકેશનને આની મંજૂરી આપો:"</string>
+ <string name="cancel" msgid="8360346460165114585">"રદ કરો"</string>
+ <string name="unknown" msgid="4742479012767208045">"અજાણ્યું"</string>
+ <string name="installing" msgid="8613631001631998372">"ઇન્સ્ટોલ કરી રહ્યું છે…"</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_failed" msgid="6579998651498970899">"એપ્લિકેશન ઇન્સ્ટોલ કરેલ નથી."</string>
+ <string name="install_failed_invalid_apk" msgid="1287935707565682604">"પૅકેજ દૂષિત થયેલો દેખાય છે."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"વિરોધાભાસી સહી સાથેનું સમાન નામવાળું અસ્તિત્વમાંનું પૅકેજે પહેલાંથી ઇન્સ્ટોલ કરેલ છે."</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"પૅકેજ ફક્ત Android ના નવા સંસ્કરણો પર જ કાર્ય કરે છે."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"આ એપ્લિકેશન તમારા ટેબ્લેટ સાથે સુસંગત નથી."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"આ એપ્લિકેશન તમારા ટીવી સાથે સુસંગત નથી."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"આ એપ્લિકેશન તમારા ફોન સાથે સુસંગત નથી."</string>
+ <string name="install_failed_file_not_found" msgid="1958430133396322619">"ઉલ્લેખિત પૅકેજ ઇન્સ્ટોલેશન પૂર્ણ થાય તે પહેલાં જ કાઢી નખાયું હતું."</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"પૅકેજ એ ચકાસણી પસાર કરી નથી અને ઇન્સ્ટોલ કરી શકાશે નહીં."</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"આ પૅકેજને ચકાસવાનો પ્રયાસ કરતી વખતે સમયસમાપ્તિ થઈ. તેને પછીથી ફરી ઇન્સ્ટોલ કરવાનો પ્રયાસ કરો."</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_title" msgid="2855558586206583032">"ઇન્સ્ટોલ અવરોધિત કર્યો"</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="settings" msgid="6743583734099755409">"સેટિંગ્સ"</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"એપ્લિકેશનો માટે નવો સ્રોત"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> અન્ય એપ્લિકેશનો ઇન્સ્ટોલ કરવા માંગે છે.\n\nઆને હમણાં અને ભવિષ્યમાં મંજૂરી આપીએ?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"એપ્લિકેશન્સનું સંચાલન કરો"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"એપ્લિકેશન બદલીએ?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"તમે ઇન્સ્ટોલ કરી રહ્યાં છો તે એપ્લિકેશન બીજી એપ્લિકેશનનું સ્થાન લેશે.\n\nતમારો અગાઉનો તમામ ડેટા સાચવવામાં આવશે."</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"આ એક સિસ્ટમ એપ્લિકેશન છે. \n\n તમારો પહેલાંનો બધો વપરાશકર્તા ડેટા સાચવવામાં આવશે."</string>
+ <string name="out_of_space_dlg_title" msgid="7843674437613797326">"જગ્યાની બહાર"</string>
+ <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="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_update_text" msgid="2056387942084605027">"શું તમે આ એપ્લિકેશનને ફેક્ટરી સંસ્કરણ સાથે બદલવા માંગો છો?"</string>
+ <string name="uninstalling" msgid="5556217435895938250">"અનઇન્સ્ટોલ કરી રહ્યું છે..."</string>
+ <string name="uninstall_done" msgid="3792487853420281888">"અનઇન્સ્ટોલ કરો સમાપ્ત થયું."</string>
+ <string name="uninstall_failed" msgid="631122574306299512">"અનઇન્સ્ટોલ કરવું અસફળ રહ્યું."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"અનઇન્સ્ટોલ કરી શકાતું નથી કારણ કે આ પૅકેજ એક સક્રિય ઉપકરણ વ્યવસ્થાપક છે."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"અનઇન્સ્ટોલ કરી શકાતું નથી કારણ કે આ પૅકેજ વપરાશકર્તા <xliff:g id="USERNAME">%1$s</xliff:g> માટે એક સક્રિય ઉપકરણ વ્યવસ્થાપક છે."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"તમારી કાર્ય પ્રોફાઇલ માટે આ એપ્લિકેશન જરૂરી છે અને અનઇન્સ્ટોલ કરી શકાતી નથી."</string>
+ <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"આ એપ્લિકેશન તમારા ઉપકરણ વ્યવસ્થાપક માટે આવશ્યક છે અને તે અનઇન્સ્ટોલ કરી શકાતી નથી."</string>
+ <string name="manage_device_administrators" msgid="891392489300312370">"ઉપકરણ વ્યવસ્થાપકોને સંચાલિત કરો"</string>
+ <string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> અનઇન્સ્ટોલ કરી શકાઈ નથી."</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"વિશ્લેષણ ભૂલ"</string>
+ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"પૅકેજનું વિશ્લેષણ કરવામાં એક સમસ્યા આવી હતી."</string>
+ <string name="newPerms" msgid="6039428254474104210">"નવું"</string>
+ <string name="allPerms" msgid="1024385515840703981">"તમામ"</string>
+ <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_dialog_button_allow" msgid="4616529495342337095">"મંજૂરી આપો"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"નકારો"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> માંથી <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને <xliff:g id="ACTION">%2$s</xliff:g> ની મંજૂરી આપીએ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"એપ્લિકેશનો"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"એપ્લિકેશન પરવાનગીઓ"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ફરી ક્યારેય પૂછશો નહીં"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"કોઈ પરવાનગીઓ નથી"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"વધારાની પરવાનગીઓ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> વધુ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> વધુ</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"સિસ્ટમ બતાવો"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"સિસ્ટમ છુપાવો"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> પરવાનગીઓ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"કોઇ એપ્લિકેશનો નથી"</string>
+ <string name="location_settings" msgid="1774875730854491297">"સ્થાન સેટિંગ્સ"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> એ આ ઉપકરણ માટે સ્થાન સેવાઓના પ્રદાતા છે. સ્થાન સેટિંગ્સમાંથી સ્થાન ઍક્સેસ સંશોધિત કરી શકાય છે."</string>
+ <string name="system_warning" msgid="7103819124542305179">"જો તમે આ પરવાનગી નકારો છો, તો તમારા ઉપકરણની મૂળભૂત સુવિધાઓ અપેક્ષા પ્રમાણે કાર્ય કરી શકશે નહીં."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"નીતિ દ્વારા લાગુ"</string>
+ <string name="loading" msgid="7811651799620593731">"લોડ કરી રહ્યું છે..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"બધી પરવાનગીઓ"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"અન્ય એપ્લિકેશન ક્ષમતાઓ"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"પરવાનગીની વિનંતી"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"સ્ક્રીન ઓવરલે મળ્યું"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"આ પરવાનગી સેટિંગ બદલવા માટે, તમારે પહેલા સેટિંગ્સ &gt; Apps માંથી સ્ક્રીન ઓવરલે બંધ કરવું પડશે"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"સેટિંગ્સ ખોલો"</string>
+</resources>
diff --git a/res/values-hi-television/strings.xml b/res/values-hi-television/strings.xml
new file mode 100644
index 00000000..42010e11
--- /dev/null
+++ b/res/values-hi-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"सिस्टम ऐप्स दिखाएं"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 72cb834a..0ca0ab17 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -21,7 +21,7 @@
<string name="install" msgid="5896438203900042068">"इंस्‍टॉल करें"</string>
<string name="done" msgid="3889387558374211719">"पूर्ण"</string>
<string name="security_settings_desc" msgid="2706691034244052604">"इस ऐप्स को यह करने दें:"</string>
- <string name="cancel" msgid="8360346460165114585">"रहने दें"</string>
+ <string name="cancel" msgid="8360346460165114585">"अभी नहीं"</string>
<string name="unknown" msgid="4742479012767208045">"अज्ञात"</string>
<string name="installing" msgid="8613631001631998372">"इंस्‍टॉल कर रहा है…"</string>
<string name="install_done" msgid="3682715442154357097">"ऐप्स इंस्‍टॉल हो गया."</string>
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"यह ऐप्स आपकी <xliff:g id="USERNAME">%1$s</xliff:g> प्रोफ़ाइल के लिए आवश्यक है और इसे अनइंस्टॉल नहीं किया जा सकता."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"अनइंस्टॉल संभव नहीं क्योंकि यह पैकेज <xliff:g id="USERNAME">%1$s</xliff:g> का सक्रिय डिवाइस नियंत्रक है."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"आपकी कार्य प्रोफ़ाइल के लिए यह ऐप आवश्‍यक है और इसे अनइंस्‍टॉल नहीं किया जा सकता."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"आपके डिवाइस व्यवस्थापक के लिए यह ऐप्स जरूरी है व इसे अनइंस्टॉल नहीं किया जा सकता."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"डिवाइस व्‍यवस्‍थापकों को प्रबंधित करें"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> को अनइंस्‍टॉल नहीं किया जा सका."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"डिवाइस पहुंच"</string>
<string name="no_new_perms" msgid="6657813692169565975">"इस नई जानकारी के लिए अनुमति की आवश्‍यकता नहीं है."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"क्या आप निम्नलिखित के लिए अनुमति देना चाहते हैं ? इसे इन पर एक्सेस प्राप्त होगी:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमति दें"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"अस्वीकार करें"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> में से <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> को <xliff:g id="ACTION">%2$s</xliff:g> की अनुमति दें?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ऐप्स"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ऐप अनुमतियां"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"फिर कभी ना पूछें"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"कोई अनुमति नहीं"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त अनुमतियां"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> और</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> और</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"सिस्टम दिखाएं"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"सिस्टम छिपाएं"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> अनुमतियां"</string>
+ <string name="no_apps" msgid="1965493419005012569">"कोई ऐप्स नहीं"</string>
+ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिंग"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> इस डिवाइस के लिए स्‍थान सेवाएं उपलब्‍ध कराने वाला प्रदाता है. स्‍थान ऐक्‍सेस को स्‍थान सेटिंग से बदला जा सकता है."</string>
+ <string name="system_warning" msgid="7103819124542305179">"यदि आप इस अनुमति को अस्वीकार करते हैं, तो हो सकता है कि आपके डिवाइस की मूलभूत सुविधाएं लक्षित कार्य ना कर पाएं."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"नीति द्वारा लागू"</string>
+ <string name="loading" msgid="7811651799620593731">"लोड हो रहा है…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"सभी अनुमतियां"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"अन्‍य ऐप कार्यक्षमताएं"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"अनुमति का अनुरोध"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रीन ओवरले को पहचाना गया"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"इस अनुमति सेटिंग को बदलने के लिए, आपको पहले सेटिंग &gt; ऐप्स से स्क्रीन ओवरले को बंद करना होगा"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिंग खोलें"</string>
</resources>
diff --git a/res/values-hr-television/strings.xml b/res/values-hr-television/strings.xml
new file mode 100644
index 00000000..151afe81
--- /dev/null
+++ b/res/values-hr-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Odbij i više ne pitaj"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"To možete kasnije promijenili 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 aplikacije sustava"</string>
+</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 9bc7dbdb..4ecb271f 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -25,7 +25,7 @@
<string name="unknown" msgid="4742479012767208045">"Nepoznato"</string>
<string name="installing" msgid="8613631001631998372">"Instaliranje..."</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 dobiti pristup sljedećem:"</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>
<string name="install_confirm_question_update" msgid="4624159567361487964">"Želite li instalirati ažuriranje postojeće aplikacije? Vaši postojeći podaci neće biti izgubljeni. Ažurirana aplikacija dobit će pristup sljedećem:"</string>
<string name="install_confirm_question_update_system" msgid="1302330093676416336">"Želite li instalirati ažuriranje za ovu ugrađenu aplikaciju? Vaši postojeći podaci neće biti izgubljeni. Ažurirana aplikacija dobit će pristup sljedećem:"</string>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Deinstalacija je završena."</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_blocked_profile_owner" msgid="5006234166226562439">"Ta je aplikacija neophodna za profil <xliff:g id="USERNAME">%1$s</xliff:g> i nije ju moguće deinstalirati."</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_blocked_profile_owner" msgid="5397102354360532069">"Ta je aplikacija potrebna za vaš poslovni 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="uninstall_failed_msg" msgid="8969754702803951175">"Aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> nije moguće instalirati."</string>
@@ -86,4 +87,36 @@
<string name="devicePerms" msgid="6733560207731294504">"Pristup uređaja"</string>
<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_allow" msgid="4616529495342337095">"Dopusti"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odbij"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> od <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Želite li dopustiti aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> izvršavanje radnje <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Dopuštenja aplikacije"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Nikad više ne traži"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nema dopuštenja"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Dodatna dopuštenja"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Još <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ova je aplikacija napravljena za stariju verziju Androida. Ako ne dobije dopuštenje, možda više neće funkcionirati kako treba."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"izvršiti nepoznatu radnju"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Broj aplikacija s dopuštenjem: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Prikaži sustav"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Sakrij sustav"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Dopuštenja – <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nema aplikacija"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Postavke lokacije"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> pruža usluge lokacije za ovaj uređaj. Pristup lokaciji može se izmijeniti u postavkama lokacije."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ako ne odobrite ovo dopuštenje, osnovne značajke vašeg uređaja možda više neće funkcionirati pravilno."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Provoditi se na temelju pravila"</string>
+ <string name="loading" msgid="7811651799620593731">"Učitavanje…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Sva dopuštenja"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Ostale mogućnosti aplikacije"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Zahtijevanje dopuštenja"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Otkriveno je preklapanje na zaslonu"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Da biste promijenili tu postavku dopuštenja, prvo morate isključiti preklapanje na zaslonu u Postavkama &gt; Aplikacije"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Otvori postavke"</string>
</resources>
diff --git a/res/values-hu-television/strings.xml b/res/values-hu-television/strings.xml
new file mode 100644
index 00000000..cb780971
--- /dev/null
+++ b/res/values-hu-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Megtagadás, és ne jelenjen meg többé"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ezt később módosíthatja a Beállítások &gt; Alkalmazások pontnál"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Rendszeralkalmazások megjelenítése"</string>
+</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index b344bf02..9c8b1db2 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Az eltávolítás 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_blocked_profile_owner" msgid="5006234166226562439">"Ez az alkalmazás szükséges <xliff:g id="USERNAME">%1$s</xliff:g> profiljához, és nem távolítható el."</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_blocked_profile_owner" msgid="5397102354360532069">"Ez az alkalmazás szükséges munkaprofiljához, és 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="uninstall_failed_msg" msgid="8969754702803951175">"Nem sikerült a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> eltávolítása"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Eszközhozzáférés"</string>
<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_allow" msgid="4616529495342337095">"Engedélyezés"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Elutasítás"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>/<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Felhatalmazza a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> szolgáltatást a következőre: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Alkalmazások"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Alkalmazásengedélyek"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ne kérdezzen rá többet"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nincs engedély"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"További engedélyek"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> további</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> további</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ez az alkalmazás az Android egy korábbi verziójához készült. Az engedély megtagadása esetén előfordulhat, hogy a továbbiakban nem fog megfelelően működni."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"végrehajt egy ismeretlen műveletet"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g>/<xliff:g id="COUNT_0">%1$d</xliff:g> alkalmazás engedélyezve"</string>
+ <string name="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="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>
+ <string name="system_warning" msgid="7103819124542305179">"Ha ezt nem engedélyezi, akkor előfordulhat, hogy az eszköz egyes alapfunkciói nem megfelelően fognak működni."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Irányelv által kényszerítve"</string>
+ <string name="loading" msgid="7811651799620593731">"Betöltés…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Az összes engedély"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Egyéb alkalmazáslehetőségek"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Engedélykérés"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Képernyőfedvény észlelve"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ennek az engedélynek a módosításához először ki kell kapcsolnia a képernyőfedvényt a Beállítások &gt; Alkalmazások menüben"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Beállítások megnyitása"</string>
</resources>
diff --git a/res/values-hy-rAM-television/strings.xml b/res/values-hy-rAM-television/strings.xml
new file mode 100644
index 00000000..b23a74d8
--- /dev/null
+++ b/res/values-hy-rAM-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Կարող եք փոխել սա ավելի ուշ Կարգավորումներում և Հավելվածներում"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Ցուցադրել համակարգի հավելվածները"</string>
+</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index e114e82b..b4b4fde3 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Այս ծրագիրն անհրաժեշտ է ձեր <xliff:g id="USERNAME">%1$s</xliff:g> պրոֆիլի համար և չի կարող հեռացվել:"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Հնարավոր չէ ապատեղադրել, քանի որ այս փաթեթը ակտիվ սարքի ադմինիստրատոր է <xliff:g id="USERNAME">%1$s</xliff:g> օգտվողի համար:"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Այս հավելվածը հարկավոր է ձեր աշխատանքային պրոֆիլի համար: Չեք կարող հեռացնել այն:"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ծրագիրը ձեր սարքի ադմինիստրատորի կողմից նշվել է որպես պարտադիր և չի կարող հեռացվել:"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Կառավարել սարքի ադմինիստրատորներին"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը չհաջողվեց ապատեղադրել:"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Սարքի մատչում"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Այս թարմացումը պահանջում է, որ նոր թույլտվություններ չտրվեն:"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Ցանկանու՞մ եք շնորհել հետևյալ թույլտվությունները: Այն կստանա մատչում`"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Թույլատրել"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Մերժել"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>-ը <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>-ից"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Թույլատրե՞լ <xliff:g id="APP_NAME">%1$s</xliff:g>-ին <xliff:g id="ACTION">%2$s</xliff:g>:"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Հավելվածներ"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Հավելվածների թույլտվությունները"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Այլևս երբեք չհարցնել"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Թույլտվություններ չկան"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Լրացուցիչ թույլտվություններ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Եվս <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Եվս <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Թաքցնել համակարգայինները"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> թույլտվություններ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Հավելվածներ չկան"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Տեղադրության կարգավորումներ"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Այս սարքի տեղադրության ծառայությունները տրամադրում է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը: Տեղադրության ցուցադրման կարգավորումները կարող եք փոխել տեղադրության կարգավորումներից:"</string>
+ <string name="system_warning" msgid="7103819124542305179">"Եթե չտրամադրեք այս թույլտվությունը, ձեր սարքի հիմնական գործառույթները հնարավոր է սխալ աշխատեն:"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Սահմանված է կանոններով"</string>
+ <string name="loading" msgid="7811651799620593731">"Բեռնում…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Բոլոր թույլտվությունները"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Այլ հավելվածների հնարավորությունները"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Թույլտվության հարցում"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Հայտնաբերվել է էկրանի վերադրում"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Այս թույլտվության կարգավորումները փոխելու համար նախ անհրաժեշտ է անջատել էկրանի վերադրումը՝ անցնելով Կարգավորումներ &gt; Հավելվածներ"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Բացել կարգավորումները"</string>
</resources>
diff --git a/res/values-in-television/strings.xml b/res/values-in-television/strings.xml
new file mode 100644
index 00000000..9ab3b192
--- /dev/null
+++ b/res/values-in-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Tolak dan jangan tanya lagi"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Anda dapat mengubah ini nanti di Setelan &gt; Aplikasi"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Tampilkan aplikasi sistem"</string>
+</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index f3f897cf..589f2954 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Pencopotan pemasangan selesai."</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_blocked_profile_owner" msgid="5006234166226562439">"Aplikasi diperlukan untuk profil <xliff:g id="USERNAME">%1$s</xliff:g> Anda dan pemasangannya tidak bisa dicopot."</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_blocked_profile_owner" msgid="5397102354360532069">"Aplikasi ini diperlukan untuk profil kerja &amp; pemasangannya tidak bisa dicopot."</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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dicopot pemasangannya."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Akses Perangkat"</string>
<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_allow" msgid="4616529495342337095">"Izinkan"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"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="5209102765005869454">"Izinkan <xliff:g id="APP_NAME">%1$s</xliff:g> untuk <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikasi"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Izin aplikasi"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Jangan tanya lagi"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Tidak ada izin"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Izin tambahan"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lainnya</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lainnya</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Aplikasi ini dirancang untuk versi lama Android. Menolak izin dapat menyebabkan aplikasi tidak berfungsi lagi sesuai harapan."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"melakukan tindakan yang tidak dikenal"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> dari <xliff:g id="COUNT_1">%2$d</xliff:g> aplikasi diizinkan"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Tampilkan sistem"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Sembunyikan sistem"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izin"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Tidak ada aplikasi"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Setelan Lokasi"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> adalah penyedia layanan lokasi untuk perangkat ini. Akses lokasi dapat diubah dari setelan lokasi."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Jika Anda menolak izin ini, fitur dasar perangkat mungkin tidak berfungsi lagi sesuai harapan."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Diterapkan menurut kebijakan"</string>
+ <string name="loading" msgid="7811651799620593731">"Memuat…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Semua izin"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Kemampuan aplikasi lainnya"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Permintaan izin"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Hamparan layar terdeteksi"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Untuk mengubah setelan izin ini, terlebih dahulu Anda harus menonaktifkan hamparan layar dari Setelan &gt; Aplikasi"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Buka setelan"</string>
</resources>
diff --git a/res/values-is-rIS-television/strings.xml b/res/values-is-rIS-television/strings.xml
new file mode 100644
index 00000000..5e780185
--- /dev/null
+++ b/res/values-is-rIS-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Hafna og ekki spyrja aftur"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Þú getur breytt þessu seinna undir Stillingar og forrit"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Sýna kerfisforrit"</string>
+</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 4bb610c2..41d176df 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Forritið hefur verið fjarlægt."</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_blocked_profile_owner" msgid="5006234166226562439">"Sniðið þitt, <xliff:g id="USERNAME">%1$s</xliff:g>, krefst þessa forrits og ekki er hægt að fjarlægja það."</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_blocked_profile_owner" msgid="5397102354360532069">"Vinnusnið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="uninstall_failed_msg" msgid="8969754702803951175">"Ekki tókst að fjarlægja <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Tækisaðgangur"</string>
<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_allow" msgid="4616529495342337095">"Leyfa"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Hafna"</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="5209102765005869454">"Leyfa <xliff:g id="APP_NAME">%1$s</xliff:g> að <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Forrit"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Heimildir forrits"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ekki spyrja aftur"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Engar heimildir"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Viðbótarheimildir"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> í viðbót</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> í viðbót</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Þetta forrit var hannað fyrir eldri útgáfu af Android. Ef því er ekki veitt heimild er hugsanlegt að það virki ekki rétt."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"framkvæma óþekkta aðgerð"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> forrit af <xliff:g id="COUNT_1">%2$d</xliff:g> leyfð"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Sýna kerfisforrit"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Fela kerfisforrit"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> heimildir"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Engin forrit"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Staðsetningarstillingar"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> býður upp á staðsetningarþjónustu fyrir þetta tæki. Hægt er að breyta aðgangi að staðsetningu í stillingum staðsetningar."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ef þú veitir ekki þessa heimild getur verið að grunneiginleikar tækisins virki ekki lengur sem skyldi."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Stjórnað af reglu"</string>
+ <string name="loading" msgid="7811651799620593731">"Hleður…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Allar heimildir"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Aðrir forritseiginleikar"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Beiðni um heimild"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Skjáyfirlögn greindist"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Til að breyta þessari heimildarstillingu þarftu fyrst að slökkva á skjáyfirlögn undir Stillingar &gt; Forrit"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Opna stillingar"</string>
</resources>
diff --git a/res/values-it-television/strings.xml b/res/values-it-television/strings.xml
new file mode 100644
index 00000000..8ccd29c5
--- /dev/null
+++ b/res/values-it-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Nega e non chiedermelo più"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puoi modificare questa scelta in seguito in Impostazioni &gt; App"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostra app di sistema"</string>
+</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 12684285..68543309 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -24,14 +24,14 @@
<string name="cancel" msgid="8360346460165114585">"Annulla"</string>
<string name="unknown" msgid="4742479012767208045">"Sconosciuto"</string>
<string name="installing" msgid="8613631001631998372">"Installazione..."</string>
- <string name="install_done" msgid="3682715442154357097">"Applicazione installata."</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>
<string name="install_confirm_question_update" msgid="4624159567361487964">"Vuoi installare un aggiornamento per questa applicazione esistente? I tuoi dati esistenti non andranno persi. L\'applicazione aggiornata avrà accesso a:"</string>
<string name="install_confirm_question_update_system" msgid="1302330093676416336">"Vuoi installare un aggiornamento per questa applicazione integrata? I tuoi dati esistenti non andranno persi. L\'applicazione aggiornata avrà accesso a:"</string>
<string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Vuoi installare un aggiornamento di questa applicazione esistente? I dati correnti verranno conservati. Non occorrono accessi speciali."</string>
<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">"Applicazione non installata."</string>
+ <string name="install_failed" msgid="6579998651498970899">"App non installata."</string>
<string name="install_failed_invalid_apk" msgid="1287935707565682604">"Il pacchetto potrebbe essere danneggiato."</string>
<string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"È già installato un pacchetto con lo stesso nome e con una firma in conflitto."</string>
<string name="install_failed_older_sdk" msgid="7947925824732917665">"Il pacchetto funziona soltanto su versioni più recenti di Android."</string>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Disinstallazione completata."</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_blocked_profile_owner" msgid="5006234166226562439">"Questa app è necessaria per il tuo profilo <xliff:g id="USERNAME">%1$s</xliff:g> e non può essere disinstallata."</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_blocked_profile_owner" msgid="5397102354360532069">"Questa app è necessaria per il tuo profilo di lavoro 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="uninstall_failed_msg" msgid="8969754702803951175">"Impossibile disinstallare <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Accesso dispositivo"</string>
<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_allow" msgid="4616529495342337095">"Consenti"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Nega"</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="5209102765005869454">"Consentire a <xliff:g id="APP_NAME">%1$s</xliff:g> di <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"App"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Autorizzazioni app"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Non chiedere più"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nessuna autorizzazione"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Altre autorizzazioni"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Altre <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> altra</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Questa app è stata sviluppata per una versione precedente di Android. Se l\'autorizzazione viene negata, l\'app potrebbe non funzionare più come previsto."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"esegue un\'azione sconosciuta"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Sono consentite <xliff:g id="COUNT_0">%1$d</xliff:g> app su <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostra app di sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Nascondi app di sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Autorizzazioni <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nessuna app"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Impostazioni posizione"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> è un fornitore di servizi di localizzazione per questo dispositivo. È possibile modificare l\'accesso alla posizione dalle impostazioni sulla posizione."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Se neghi questa autorizzazione, le funzionalità di base del dispositivo potrebbero non funzionare più come previsto."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Applicata in base alle norme"</string>
+ <string name="loading" msgid="7811651799620593731">"Caricamento…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Tutte le autorizzazioni"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Altre funzionalità dell\'app"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Richiesta di autorizzazione"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Overlay schermo rilevato"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Per modificare questa impostazione di autorizzazione, devi innanzitutto disattivare l\'overlay schermo da Impostazioni &gt; App"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Apri impostazioni"</string>
</resources>
diff --git a/res/values-iw-television/strings.xml b/res/values-iw-television/strings.xml
new file mode 100644
index 00000000..102e8dd7
--- /dev/null
+++ b/res/values-iw-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"הצג אפליקציות מערכת"</string>
+</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 05fe938a..e2f1057b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -66,15 +66,16 @@
<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" 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="2056387942084605027">"האם אתה רוצה להחליף אפליקציה זו בגרסת היצרן?"</string>
+ <string name="uninstall_update_text" msgid="2056387942084605027">"האם ברצונך להחליף אפליקציה זו בגרסת היצרן?"</string>
<string name="uninstalling" msgid="5556217435895938250">"מסיר התקנה..."</string>
<string name="uninstall_done" msgid="3792487853420281888">"הסרת ההתקנה הסתיימה."</string>
<string name="uninstall_failed" msgid="631122574306299512">"הסרת התקנה נכשלה."</string>
<string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"לא ניתן להסיר את ההתקנה מפני שחבילה זו היא מנהל מכשיר פעיל."</string>
- <string name="uninstall_blocked_profile_owner" msgid="5006234166226562439">"אפליקציה זו נדרשת עבור פרופיל <xliff:g id="USERNAME">%1$s</xliff:g> שלך ולא ניתן להסירה."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"לא ניתן להסיר את ההתקנה מפני שהחבילה הזו מוגדרת כעת לניהול המכשיר עבור המשתמש <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"האפליקציה הזו נחוצה לפרופיל העבודה שלך ולא ניתן להסיר את ההתקנה שלה."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"מנהל המכשיר שלך מחייב את קיומה של אפליקציה זו, ולא ניתן להסירה."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"נהל מנהלי מכשירים"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"לא ניתן להסיר את ההתקנה של <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"גישה למכשיר"</string>
<string name="no_new_perms" msgid="6657813692169565975">"עדכון זה לא דורש הרשאות חדשות."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"האם ברצונך להעניק את ההרשאות הבאות? תוענק גישה אל:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"התר"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"דחה"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> מתוך <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"האם להתיר ל-<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"אפליקציות"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"הרשאות לאפליקציות"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"לעולם אל תבקש שוב"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"אין הרשאות"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"הרשאות נוספות"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="two">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">עוד <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">עוד <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"הסתר מערכת"</string>
+ <string name="permission_title" msgid="6495415273398916381">"הרשאות <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"אין אפליקציות"</string>
+ <string name="location_settings" msgid="1774875730854491297">"הגדרות מיקום"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> הוא ספק של שירותי מיקום בשביל המכשיר הזה. אפשר לשנות את גישת המיקום בהגדרות המיקום."</string>
+ <string name="system_warning" msgid="7103819124542305179">"אם תדחה את ההרשאה הזו, ייתכן שתכונות בסיסיות במכשיר לא יפעלו כצפוי."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"נאכף באמצעות מדיניות"</string>
+ <string name="loading" msgid="7811651799620593731">"טוען..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"כל ההרשאות"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"הרשאות אחרות של האפליקציה"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"בקשת הרשאה"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"זוהתה שכבת על במסך"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"‏כדי לשנות את הגדרת ההרשאה הזו, ראשית עליך לכבות את שכבת העל במסך ב\'הגדרות\' &gt; \'אפליקציות\'"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"פתח הגדרות"</string>
</resources>
diff --git a/res/values-ja-television/strings.xml b/res/values-ja-television/strings.xml
new file mode 100644
index 00000000..304f322b
--- /dev/null
+++ b/res/values-ja-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"システムアプリの表示"</string>
+</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ce59ab20..f5f294e9 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"このアプリは<xliff:g id="USERNAME">%1$s</xliff:g>さんのプロフィールに必要なため、アンインストールできません。"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"このパッケージは、現在<xliff:g id="USERNAME">%1$s</xliff:g>さんの端末を管理しているため、アンインストールできません。"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"このアプリは仕事用プロファイルに必要なため、アンインストールできません。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"このアプリは端末管理者が必要としているため、アンインストールできません。"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"デバイス管理者を管理"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>をアンインストールできませんでした。"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"端末アクセス"</string>
<string name="no_new_perms" msgid="6657813692169565975">"このアップデートでは新たな許可は必要ありません。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"次の権限を許可してもよろしいですか?許可すると、次にアクセスされます:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"許可"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"許可しない"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>に<xliff:g id="ACTION">%2$s</xliff:g>を許可しますか?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"アプリ"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"アプリの権限"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"今後は確認しない"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"権限がありません"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"その他の権限"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">他<xliff:g id="COUNT_1">%1$d</xliff:g>件</item>
+ <item quantity="one">他<xliff:g id="COUNT_0">%1$d</xliff:g>件</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"システムを表示しない"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>の権限"</string>
+ <string name="no_apps" msgid="1965493419005012569">"アプリなし"</string>
+ <string name="location_settings" msgid="1774875730854491297">"位置情報の設定"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>はこの端末の位置情報サービスのプロバイダです。位置情報アクセスは位置情報の設定から変更できます。"</string>
+ <string name="system_warning" msgid="7103819124542305179">"この権限を許可しないと、お使いの端末の基本的な機能が意図されたとおりに動作しなくなる可能性があります。"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ポリシーにより適用"</string>
+ <string name="loading" msgid="7811651799620593731">"読み込んでいます…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"すべての権限"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"その他のアプリ機能"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"権限のリクエスト"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"画面オーバーレイを検出"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"この権限設定を変更するには、まず[設定]&gt;[アプリ]から画面オーバーレイをOFFにします"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"設定を開く"</string>
</resources>
diff --git a/res/values-ka-rGE-television/strings.xml b/res/values-ka-rGE-television/strings.xml
new file mode 100644
index 00000000..6d6f8063
--- /dev/null
+++ b/res/values-ka-rGE-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"სისტემის აპების ჩვენება"</string>
+</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 5fc078dc..41ce43b3 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -75,7 +75,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ეს აპი საჭიროა თქვენი <xliff:g id="USERNAME">%1$s</xliff:g> პროფილისათვის და მისი დეინსტალაცია ვერ მოხერხდება."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"დეინსტალაცია ვერ ხორციელდება, რადგან ეს პაკეტი არის აქტიური მოწყობილობის ადმინისტრატორის მომხმარებლისათვის <xliff:g id="USERNAME">%1$s</xliff:g> ."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ეს აპი საჭიროა თქვენი სამუშაო პროფილისთვის და მისი დეინსტალაცია ვერ მოხდება."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ეს აპი საჭიროა თქვენი მოწყ. ადმინისტრატორისათვის და დეინსტალაცია ვერ გამოვა."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"მოწყობილობის ადმინისტრატორების მართვა"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> -ის დეინსტალაცია ვერ მოხერხდა."</string>
@@ -87,4 +88,35 @@
<string name="devicePerms" msgid="6733560207731294504">"მოწყობილობის წვდომა"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ეს განახლება არ საჭიროებს ახალ ნებართვებს."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"გსურთ, მიანიჭოთ შემდეგი ნებართვები? წვდომა ექნება შემდეგზე:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"დაშვება"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"უარყოფა"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> სულ <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>-დან"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"აძლევთ ნებას აპს <xliff:g id="APP_NAME">%1$s</xliff:g> შეასრულოს <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"აპები"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"აპის უფლებები"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"აღარასოდეს შემეკითხოს"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ნებართვები არ არის"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"დამატებითი ნებართვები"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> კიდევ</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> კიდევ</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"სისტემური პროცესების დამალვა"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>-ის ნებართვები"</string>
+ <string name="no_apps" msgid="1965493419005012569">"აპები არ არის"</string>
+ <string name="location_settings" msgid="1774875730854491297">"მდებარეობის პარამეტრები"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> არის მდებარეობის სერვისების მომწოდებელი ამ მოწყობილობისთვის. მდებარეობაზე წვდომის შეცვლა შესაძლებელია მდებარეობის პარამეტრებიდან."</string>
+ <string name="system_warning" msgid="7103819124542305179">"ამ ნებართვის უარყოფის შემთხვევაში, თქვენი მოწყობილობის ძირითადმა ფუნქციებმა შესაძლოა სათანადოდ აღარ იმუშაოს."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"შეესაბამება წესს"</string>
+ <string name="loading" msgid="7811651799620593731">"იტვირთება..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ყველა ნებართვა"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"აპის სხვა შესაძლებლობები"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"ნებართვის მოთხოვნა"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"ეკრანის გადაფარვა გამოვლინდა"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ამ ნებართვის პარამეტრის შესაცვლელად, ჯერ უნდა გამორთოთ ეკრანის გადაფარვა პარამეტრებიდან &gt; აპებიდან"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"პარამეტრების გახსნა"</string>
</resources>
diff --git a/res/values-kk-rKZ-television/strings.xml b/res/values-kk-rKZ-television/strings.xml
new file mode 100644
index 00000000..6dc02cbe
--- /dev/null
+++ b/res/values-kk-rKZ-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Мұны кейінірек \"Параметрлер\" және \"Қолданбалар\" ішінен өзгертуге болады"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Жүйелік қолданбаларды көрсету"</string>
+</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 5acaf6a0..8fe10ee4 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -16,10 +16,10 @@
<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>
+ <string name="done" msgid="3889387558374211719">"Дайын"</string>
<string name="security_settings_desc" msgid="2706691034244052604">"Бұл қолданбаға келесі нәрселереге рұқсат беріңіз:"</string>
<string name="cancel" msgid="8360346460165114585">"Бас тарту"</string>
<string name="unknown" msgid="4742479012767208045">"Белгісіз"</string>
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Бұл қолданба <xliff:g id="USERNAME">%1$s</xliff:g> профиліңіз үшін қажет және оны жою мүмкін емес."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Жою мүмкін емес, өйткені бұл бума <xliff:g id="USERNAME">%1$s</xliff:g> пайдаланушысының белсенді құрылғы әкімшісі болып табылады."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Бұл қолданба жұмыс профиліңіз үшін қажет және оны жою мүмкін емес."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Әкімші осы қолданбаны талап етеді және оны жою мүмкін емес."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Құрылғы әкімшілерін басқару"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын алып тастау мүмкін емес."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Құралға кіру"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Бұл қолданба жаңа рұқсаттарды қажет етпейді."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Келесі нәрселерге рұқсат бересіз бе? Мыналар қол жетіміді болады:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Рұқсат беру"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Қабылдамау"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>/<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына <xliff:g id="ACTION">%2$s</xliff:g> рұқсатын бересіз бе?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Қолданбалар"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Қолданба рұқсаттары"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Қайтадан сұрамау"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Рұқсат жоқ"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Қосымша рұқсаттар"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Тағы <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Тағы <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Жүйені жасыру"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> рұқсаттары"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Қолданбалар жоқ"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Орынды анықтау параметрлері"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> — осы құрылғыға орынды анықтау қызметтерін көрсететін қолданба. Орынды пайдалану мүмкіндігін орынды анықтау параметрлерінде өзгертуге болады."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Бұл рұқсатты бермесеңіз, құрылғының негізгі функциялары енді көзделгендей жұмыс істемеуі мүмкін."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Саясат арқылы қолданылған"</string>
+ <string name="loading" msgid="7811651799620593731">"Жүктелуде…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Барлық рұқсаттар"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Басқа қолданба мүмкіндіктері"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Рұқсат сұрау"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Экранды қабаттастыру анықталды"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Бұл рұқсат параметрін өзгерту үшін алдымен «Параметрлер» &gt; «Қолданбалар» тармағында экранды қабаттастыруды өшіру керек"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Параметрлерді ашу"</string>
</resources>
diff --git a/res/values-km-rKH-television/strings.xml b/res/values-km-rKH-television/strings.xml
new file mode 100644
index 00000000..a4e80094
--- /dev/null
+++ b/res/values-km-rKH-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"បង្ហាញកម្មវិធីប្រព័ន្ធ"</string>
+</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 9f44545c..6396a99e 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"កម្មវិធី​នេះ​​​ចាំបាច់​សម្រាប់​ប្រវត្តិរូប <xliff:g id="USERNAME">%1$s</xliff:g> របស់​អ្នក ហើយ​មិន​អាច​លុប​បាន​ទេ។"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"មិនអាចលុបការដំឡើងទេ ពីព្រោះកញ្ចប់នេះគឺជាកម្មវិធីគ្រប់គ្រងឧបករណ៍សកម្មសម្រាប់អ្នកប្រើ <xliff:g id="USERNAME">%1$s</xliff:g>។"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"កម្មវិធីនេះចាំបាច់សម្រាប់ប្រវតិ្តការងាររបស់អ្នក ហើយវាមិនអាចលុបការដំឡើងបានទេ។"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"កម្មវិធីនេះត្រូវបានទាមទារដោយអ្នកគ្រប់គ្រងឧបករណ៍របស់អ្នក ហើយមិនអាចលុប​ចេញបាន​ទេ។"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"គ្រប់គ្រង​អ្នក​គ្រប់គ្រង​ឧបករណ៍"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"មិន​អាច​លុប <xliff:g id="APP_NAME">%1$s</xliff:g> ។"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"ការ​ចូល​ដំណើរការ​ឧបករណ៍"</string>
<string name="no_new_perms" msgid="6657813692169565975">"បច្ចុប្បន្នភាព​នេះ​មិន​ទាមទារ​សិទ្ធិ​ថ្មី​ទេ។"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"តើ​អ្នក​ចង់​ផ្ដល់​សិទ្ធិ​ដូច​ខាងក្រោម? វា​នឹង​ចូល​ទៅ៖"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"អនុញ្ញាត"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"បដិសេធ"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> នៃ <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"អនុញ្ញាតឲ្យ <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"កម្មវិធី"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"សិទ្ធិ​កម្មវិធី"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"កុំសួរទៀត"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"គ្មានសិទ្ធិអនុញ្ញាត"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"សិទ្ធិអនុញ្ញាតបន្ថែម"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ទៀត</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ទៀត</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"លាក់ប្រព័ន្ធ"</string>
+ <string name="permission_title" msgid="6495415273398916381">"សិទ្ធិអនុញ្ញាត <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"គ្មានកម្មវិធី"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ការកំណត់ទីតាំង"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> គឺជាអ្នកផ្តល់សេវាកម្មទីតាំងសម្រាប់ឧបករណ៍នេះ។ ការចូលដំណើរការទីតាំងអាចកែសម្រួលបានចេញពីការកំណត់ទីតាំង។"</string>
+ <string name="system_warning" msgid="7103819124542305179">"ប្រសិនបើអ្នកបដិសេធសិទ្ធិអនុញ្ញាតនេះ លក្ខណៈពិសេសគោលនៃឧបករណ៍របស់អ្នកអាចមិនដំណើរការដូចដែលអ្នកចង់បានតទៅទៀតទេ។"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"អនុវត្តតាមគោលការណ៍"</string>
+ <string name="loading" msgid="7811651799620593731">"កំពុងដំណើរការ..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"សិទ្ធិអនុញ្ញាតទាំងអស់"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"សមត្ថភាពកម្មវិធីផ្សេងទៀត"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"សំណើសុំសិទ្ធិអនុញ្ញាត"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"បានរកឃើញអេក្រង់ត្រួតគ្នា"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ដើម្បីប្តូរការកំណត់សិទ្ធិអនុញ្ញាតនេះ ជាដំបូងអ្នកត្រូវបិទអេក្រង់ត្រួតគ្នានៅក្នុង ការកំណត់ &gt; កម្មវិធី"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"បើកការកំណត់"</string>
</resources>
diff --git a/res/values-kn-rIN-television/strings.xml b/res/values-kn-rIN-television/strings.xml
new file mode 100644
index 00000000..5244bdc5
--- /dev/null
+++ b/res/values-kn-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"ಸಿಸ್ಟಂ ಅಪ್ಲಿಕೇಶನ್‌‌ಗಳನ್ನು ತೋರಿಸು"</string>
+</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index c3849577..4efccb8b 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -27,10 +27,10 @@
<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_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_invalid_apk" msgid="1287935707565682604">"ಪ್ಯಾಕೇಜ್ ಹಾನಿಗೀಡಾಗಿರುವಂತೆ ತೋರುತ್ತಿದೆ."</string>
<string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"ಸಂಘರ್ಷನೀಯ ಸಹಿಯನ್ನು ಹೊಂದಿರುವ ಮತ್ತದೇ ಹೆಸರಿನ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಈಗಾಗಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ."</string>
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ನಿಮ್ಮ <xliff:g id="USERNAME">%1$s</xliff:g> ಪ್ರೊಫೈಲ್‌‌ನ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ಈ ಪ್ಯಾಕೇಜ್ <xliff:g id="USERNAME">%1$s</xliff:g> ಬಳಕೆದಾರರಿಗೆ ಸಕ್ರಿಯವಾದ ಸಾಧನ ನಿರ್ವಾಹಕವಾಗಿರುವ ಕಾರಣ ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್‌‌ನ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಸಾಧನ ನಿರ್ವಾಹಕರಿಗೆ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"ಸಾಧನದ ನಿರ್ವಾಹಕರನ್ನು ನಿರ್ವಹಿಸು"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"ಸಾಧನ ಪ್ರವೇಶ"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ಈ ನವೀಕರಣಕ್ಕೆ ಯಾವುದೇ ಹೊಸ ಅನುಮತಿಗಳ ಅಗತ್ಯವಿಲ್ಲ."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ನೀವು ಕೆಳಗಿನ ಅನುಮತಿಗಳನ್ನು ನೀಡ ಬಯಸುತ್ತೀರಾ? ಇದು ಇಲ್ಲಿ ಪ್ರವೇಶ ಪಡೆದುಕೊಳ್ಳಬಹುದು:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ಅನುಮತಿಸು"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ನಿರಾಕರಿಸು"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> ರಲ್ಲಿ <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್‌ಗೆ <xliff:g id="ACTION">%2$s</xliff:g> ಅನುಮತಿಸುವುದೇ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ಅಪ್ಲಿಕೇಶನ್ ಅನುಮತಿಗಳು"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ಎಂದಿಗೂ ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡಿ"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ಯಾವುದೇ ಅನುಮತಿಗಳಿಲ್ಲ"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳು"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಇನ್ನಷ್ಟು</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಇನ್ನಷ್ಟು</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"ಸಿಸ್ಟಂ ತೋರಿಸು"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"ಸಿಸ್ಟಮ್ ಮರೆಮಾಡು"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ಅನುಮತಿಗಳು"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಇಲ್ಲ"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಈ ಸಾಧನಕ್ಕೆ ಸ್ಥಳ ಸೇವೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಸ್ಥಳ ಪ್ರವೇಶವನ್ನು ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
+ <string name="system_warning" msgid="7103819124542305179">"ನೀವು ಈ ಅನುಮತಿಯನ್ನು ನಿರಾಕರಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ ನಿಮ್ಮ ಸಾಧನದ ಮೂಲ ವೈಶಿಷ್ಟ್ಯಗಳು ಉದ್ದೇಶಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ನೀತಿಯ ಮೂಲಕ ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="loading" msgid="7811651799620593731">"ಲೋಡ್ ಆಗುತ್ತಿದೆ..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ಎಲ್ಲ ಅನುಮತಿಗಳು"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ಇತರ ಅಪ್ಲಿಕೇಶನ್ ಸಾಮರ್ಥ್ಯಗಳು"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"ಅನುಮತಿ ವಿನಂತಿ"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"ಪರದೆ ಆವರಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗಿದೆ"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ಈ ಅನುಮತಿ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು, ನೀವು ಮೊದಲು ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಂದ ಪರದೆ ಆವರಿಸಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಆಫ್ ಮಾಡಬೇಕು"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ಸೆಟ್ಟಿಂಗ್‍ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
</resources>
diff --git a/res/values-ko-television/strings.xml b/res/values-ko-television/strings.xml
new file mode 100644
index 00000000..cc85a89a
--- /dev/null
+++ b/res/values-ko-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>개 중 <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"시스템 앱 보기"</string>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 44afa9a3..d9939193 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"이 앱은 <xliff:g id="USERNAME">%1$s</xliff:g>님의 프로필에 필요하므로 제거할 수 없습니다."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"이 패키지는 <xliff:g id="USERNAME">%1$s</xliff:g>님이 사용 중인 기기 관리자이기 때문에 제거할 수 없습니다."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"이 앱은 직장 프로필에 필요하므로 삭제할 수 없습니다."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"이 앱은 기기 관리자에게 필요하므로 제거할 수 없습니다."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"기기 관리자 관리"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱을 제거할 수 없습니다."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"기기 액세스"</string>
<string name="no_new_perms" msgid="6657813692169565975">"이 업데이트에는 새로운 권한이 필요하지 않습니다."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"다음 권한을 부여하시겠습니까? 권한이 부여되면 다음에 액세스할 수 있습니다."</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"허용"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"거부"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 <xliff:g id="ACTION">%2$s</xliff:g> 작업 수행을 허용하시겠습니까?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"앱"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"앱 권한"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"다시 묻지 않기"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"권한이 없음"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"추가 권한"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>개 더보기</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>개 더보기</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"시스템 숨기기"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> 권한"</string>
+ <string name="no_apps" msgid="1965493419005012569">"앱 없음"</string>
+ <string name="location_settings" msgid="1774875730854491297">"위치 설정"</string>
+ <string name="location_warning" msgid="8778701356292735971">"이 기기의 위치 서비스 제공업체는 <xliff:g id="APP_NAME">%1$s</xliff:g>입니다. 위치 정보 액세스는 위치 설정에서 수정할 수 있습니다."</string>
+ <string name="system_warning" msgid="7103819124542305179">"이 권한을 거부하는 경우 기기의 기본 기능이 제대로 작동하지 않을 수 있습니다."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"정책에 의해 시행됨"</string>
+ <string name="loading" msgid="7811651799620593731">"로드 중..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"모든 권한"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"다른 앱 기능"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"권한 요청"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"화면 오버레이 감지됨"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"이 권한 설정을 변경하려면 먼저 설정 &gt; 앱에서 화면 오버레이를 사용하지 않도록 설정해야 합니다."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"설정 열기"</string>
</resources>
diff --git a/res/values-ky-rKG-television/strings.xml b/res/values-ky-rKG-television/strings.xml
new file mode 100644
index 00000000..8ff2a828
--- /dev/null
+++ b/res/values-ky-rKG-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Тутум колдонмолорун көрсөтүү"</string>
+</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 9f49d144..93852547 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -16,20 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for app_name (2738748390251381682) -->
- <skip />
+ <string name="app_name" msgid="2738748390251381682">"Топтом орноткуч"</string>
<string name="next" msgid="3057143178373252333">"Кийинки"</string>
- <!-- no translation found for install (5896438203900042068) -->
- <skip />
- <!-- no translation found for done (3889387558374211719) -->
- <skip />
+ <string name="install" msgid="5896438203900042068">"Орнотуу"</string>
+ <string name="done" msgid="3889387558374211719">"Даяр"</string>
<string name="security_settings_desc" msgid="2706691034244052604">"Бул колдонмого кийинки уруксаттар берилсин:"</string>
- <!-- no translation found for cancel (8360346460165114585) -->
- <skip />
- <!-- no translation found for unknown (4742479012767208045) -->
- <skip />
- <!-- no translation found for installing (8613631001631998372) -->
- <skip />
+ <string name="cancel" msgid="8360346460165114585">"Жокко чыгаруу"</string>
+ <string name="unknown" msgid="4742479012767208045">"Белгисиз"</string>
+ <string name="installing" msgid="8613631001631998372">"Орнотулууда…"</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>
@@ -38,12 +32,9 @@
<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>
- <!-- no translation found for install_failed_invalid_apk (1287935707565682604) -->
- <skip />
- <!-- no translation found for install_failed_inconsistent_certificates (1517751954440692054) -->
- <skip />
- <!-- no translation found for install_failed_older_sdk (7947925824732917665) -->
- <skip />
+ <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Топтом бузулган окшойт."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Аталышы окшош, бирок колтамгасы дал келбеген топтом мурунтан эле орнотулган."</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"Топтом жаңыраак Android версияларында гана иштейт."</string>
<string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Бул колдонмо планшетиңизге шайкеш эмес."</string>
<string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Бул колдонмо сыналгыңызга шайкеш келбейт."</string>
<string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Бул колдонмо телефонуңузга шайкеш эмес."</string>
@@ -53,29 +44,23 @@
<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>
- <!-- no translation found for launch (4826921505917605463) -->
- <skip />
- <!-- no translation found for unknown_apps_dlg_title (2855558586206583032) -->
- <skip />
+ <string name="launch" msgid="4826921505917605463">"Ачуу"</string>
+ <string name="unknown_apps_dlg_title" msgid="2855558586206583032">"Орнотуу бөгөттөлгөн"</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>
- <!-- no translation found for ok (3468756155452870475) -->
- <skip />
- <!-- no translation found for settings (6743583734099755409) -->
- <skip />
+ <string name="ok" msgid="3468756155452870475">"Жарайт"</string>
+ <string name="settings" msgid="6743583734099755409">"Жөндөөлөр"</string>
<string name="allow_source_dlg_title" msgid="7568985073502399415">"Колдонмолордун жаңы булагы"</string>
<string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> башка колдонмо орноткусу келет.\n\nАзыр жана кийин буга уруксат берилсинби?"</string>
<string name="manage_applications" msgid="4033876279091996596">"Колдонмолорду башкаруу"</string>
<string name="dlg_app_replacement_title" msgid="1232230739563820951">"Колдонмо алмаштырылсынбы?"</string>
<string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Сиз орнотуп жаткан колдонмо башка колдонмону жок кылат.\n\nМурунку колдонуучу берилиштериңиздин бардыгы сакталат."</string>
<string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Бул системалык колдонмо.\n\nМурунку колдонуучу берилиштериңиздин бардыгы сакталат."</string>
- <!-- no translation found for out_of_space_dlg_title (7843674437613797326) -->
- <skip />
+ <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>
- <!-- no translation found for dlg_ok (6944357727705699232) -->
- <skip />
+ <string name="dlg_ok" msgid="6944357727705699232">"Жарайт"</string>
<string name="app_not_found_dlg_title" msgid="2692335460569505484">"Колдонмо табылган жок"</string>
<string name="app_not_found_dlg_text" msgid="6107465056055095930">"Колдонмо орнотулган колдонмолор тизмегинен табылган жок."</string>
<string name="uninstall_application_title" msgid="1860074100811653963">"Колдонмону чечип салуу"</string>
@@ -85,18 +70,16 @@
<string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Бул колдонмо "<b>"бардык"</b>" колдонуучулардан алынып салынсынбы? Бул колдонмо жана анын берилиштери бул түзмөктүн "<b>"бардык"</b>" колдонуучуларынан алынат."</string>
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Бул колдонмону <xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусу үчүн орнотуудан чыгаргыңыз келеби?"</string>
<string name="uninstall_update_text" msgid="2056387942084605027">"Бул колдонмону абалкы орнотулган версиясы менен алмаштырасызбы?"</string>
- <!-- no translation found for uninstalling (5556217435895938250) -->
- <skip />
+ <string name="uninstalling" msgid="5556217435895938250">"Чыгарылып салынууда…"</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_blocked_profile_owner" msgid="5006234166226562439">"Бул түзмөк <xliff:g id="USERNAME">%1$s</xliff:g> профилиңизге керек жана орнотуудан чыгаруу мүмкүн эмес."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Орнотуудан чыгара албайт, анткени бул таңгак <xliff:g id="USERNAME">%1$s</xliff:g> колдонуучусунун активдүү түзмөк администратору."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Бул колдонмо жумуш профилиңизге талап кылынат жана аны орнотуудан чыгаруу мүмкүн эмес."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Бул колдонмо түзмөк администраторуңузга керектелет жана орнотуудан чыгаруу мүмкүн эмес."</string>
- <!-- no translation found for manage_device_administrators (891392489300312370) -->
- <skip />
+ <string name="manage_device_administrators" msgid="891392489300312370">"Түзмөктүн администраторлорун башкаруу"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосун чечип салуу мүмкүн эмес."</string>
- <!-- no translation found for Parse_error_dlg_title (6079580916889596257) -->
- <skip />
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Талдоо катасы"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Таңгакты окууда маселе пайда болду."</string>
<string name="newPerms" msgid="6039428254474104210">"Жаңы"</string>
<string name="allPerms" msgid="1024385515840703981">"Бардыгы"</string>
@@ -104,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Жетүү уруксаттары"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Бул жаңыртуу жаңы уруксаттарды талап кылбайт."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Кийинки уруксаттарды берейин дегениңиз аныкпы? Ал кийинкилерге жетки алат:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Уруксат берүү"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Жок"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> ичинен <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн <xliff:g id="ACTION">%2$s</xliff:g> уруксатпы?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Колдонмолор"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Колдонмо уруксаттары"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Экинчи сураба"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Уруксаттар жок"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Кошумча уруксаттар"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Дагы <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Дагы <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"Тутумду көрсөтүү"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Тутумду жашыруу"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> уруксат"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Эч бир колдонмо жок"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Жайгашкан жерди анктоо жөндлрү"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> - бул түзмөктөгү жайгашкан жерди аныктоо кызматынын камсыздоочусу. Жайгашкан жерди көрүү мүмкүнчүлүгүн жайгашкан жерди аныктоо жөндөөлөрүнөн өзгөртсө болот."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Эгер бул уруксатты четке каксаңыз, түзмөгүңүздүн негизги функциялары талаптагыдай иштебей калышы мүмкүн."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Саясат тарабынан күчүнө киргизилген"</string>
+ <string name="loading" msgid="7811651799620593731">"Жүктөлүүдө…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Бардык уруксаттар"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Колдонмонун башка жөндөмдөрү"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Уруксат суроо"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Экран кабатталышы аныкталды"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Бул уруксаттын жөндөөсүн өзгөртүү үчүн, адегенде Жөндөөлөр &gt; Колдонмолордон экрандын кабатталышын өчүрүңүз"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Жөндөөлөрдү ачуу"</string>
</resources>
diff --git a/res/values-lo-rLA-television/strings.xml b/res/values-lo-rLA-television/strings.xml
new file mode 100644
index 00000000..a49a8f2b
--- /dev/null
+++ b/res/values-lo-rLA-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"ສະ​ແດງ​ແອັບ​ລະ​ບົບ"</string>
+</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 3a81920b..4e0203be 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ແອັບຯ​ນີ້​ຕ້ອງ​ໃຊ້​ໂດຍ​ໂປຣ​ໄຟລ໌ <xliff:g id="USERNAME">%1$s</xliff:g> ຂອງ​ທ່ານ​ແລະ​ບໍ່​ສາ​ມາດ​ຖອນ​ການ​ຕິດ​ຕັ້ງ​ໄດ້."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ບໍ່​ສາ​ມາດ​ຖອນ​ຕິດ​ຕັ້ງ​ໄດ້ ເພາະ​ວ່າ​ແພັກ​ເກດ​ນີ້​ແມ່ນ​ຜູ້​ຄວບ​ຄຸມ​ອຸ​ປະ​ກອນ​ທີ່​ເປີດ​ຢູ່​ສຳ​ລັບ​ຜູ້​ໃຊ້ <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ແອັບຯ​ນີ້​ຕ້ອງ​ໃຊ້​ໂດຍ​ໂປຣ​ໄຟລ໌ວຽກຂອງ​ທ່ານ ​ແລະ​ບໍ່​ສາ​ມາດ​ຖອນ​ການ​ຕິດ​ຕັ້ງ​ໄດ້."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"​ແອັບຯ​ນີ້​ຕ້ອງ​ໃຊ້​ໂດຍ​ຜູ່​ເບິ່ງ​ແຍງ​ລະ​ບົບ​ຂອງ​ທ່ານ ແລະ​ບໍ່​ສາ​ມາດ​ຖອນ​ການ​ຕິດ​ຕັ້ງ​ໄດ້."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"ຈັດການຜູ່ເບິ່ງແຍງລະບົບອຸປະກອນ"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ສາມາດຖອນອອກໄດ້."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"ການເຂົ້າເຖິງອຸປະກອນ"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ອັບເດດນີ້ບໍ່ຕ້ອງການການອະນຸຍາດໃໝ່."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ທ່ານຕ້ອງການອະນຸມັດສິ່ງຕໍ່ໄປນີ້ຫຼືບໍ່? ມັນຈະສາມາດເຂົ້າເຖິງ:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ອະນຸຍາດ"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ປະຕິເສດ"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> ໃນ <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"ອະ​ນຸ​ຍາດ​ໃຫ້ <xliff:g id="APP_NAME">%1$s</xliff:g>ເພື່ອ​ <xliff:g id="ACTION">%2$s</xliff:g> ບໍ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ແອັບ"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ການ​ອະ​ນຸ​ຍາດ​ແອັບ"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ຢ່າ​ຖາມ​ອີກ"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"​ບໍ່​ມີການ​ອະ​ນຸ​ຍາດ​"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"ການ​ອະ​ນຸ​ຍາດ​​ເພີ່ມ​ເຕີມ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ເພີ່ມ​ເຕີມ</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ເພີ່ມ​ເຕີມ</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"ເຊື່ອງ​ລະ​ບົບ"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ການອະນຸຍາດ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ບໍ່ມີແອັບ"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ການຕັ້ງຄ່າ​ທີ່​ຕັ້ງ"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ແມ່ນ​ຜູ້​ໃຫ້​ບໍ​ລິ​ການ​ເລື່ອງ​ການ​ບໍ​ລິ​ການ​ທີ່​ຕັ້ງ​ສຳ​ລັບ​ອຸ​ປະ​ກອນ​ນີ້. ການ​ເຂົ້າ​ເຖິງ​ທີ່​ຕັ້ງ​ແມ່ນ​ສາ​ມາດ​ດັດ​ແປງ​ໄດ້​ຈາກ​ການ​ຕັ້ງ​ຄ່າ​ທີ່​ຕັ້ງ."</string>
+ <string name="system_warning" msgid="7103819124542305179">"ຖ້າ​ທ່ານ​ປະ​ຕິ​ເສດ​ການ​ອະ​ນຸ​ຍາດ​ນີ້, ຄຸນສົມບັດໃຊ້ງານ​ພື້ນ​ຖານ​ຂອງ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ອາດ​ຈະ​ບໍ່​ເຮັດ​ໜ້າ​ທີ່​ຕາມທີ່ກຳນົດໄວ້."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ບັງ​ຄັບ​ໃຊ້​ຕາມ​ນະ​ໂຍ​ບາຍ​ແລ້ວ"</string>
+ <string name="loading" msgid="7811651799620593731">"ກຳລັງ​ໂຫລດ..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ທຸກ​ການ​ອະ​ນຸ​ຍາດ"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ຄວາມ​​ສາ​ມາດ​​ອື່ນຂອງແອັບ"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"ການຮ້ອງຂໍການອະນຸຍາດ"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"ກວດ​ພົບ​ການ​ວາງ​ຊ້ອນ​ໜ້າ​ຈໍ​ແລ້ວ"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ເພື່ອ​ປ່ຽນ​ແປງ​ການ​ຕັ້ງ​ຄ່າ​ການ​ອະ​ນຸ​ຍາດ​ນີ້, ກ່ອນ​ອື່ນ​ໝົດ​ທ່ານ​ຕ້ອງ​ປິດ​ການ​ວາງ​ຊ້ອນ​ໜ້າ​ຈໍ​ຈາກ​ແອັບ​ການ​ຕັ້ງ​ຄ່າ"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ເປີດການຕັ້ງຄ່າ"</string>
</resources>
diff --git a/res/values-lt-television/strings.xml b/res/values-lt-television/strings.xml
new file mode 100644
index 00000000..a1c02a16
--- /dev/null
+++ b/res/values-lt-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Atmesti ir daugiau neklausti"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Tai vėliau galėsite pakeisti skiltyje „Nustatymai &gt; Programos“"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Rodyti sistemos programas"</string>
+</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a5e47a51..964ed070 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Pašalinimas baigtas."</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_blocked_profile_owner" msgid="5006234166226562439">"Ši programa reikalinga jūsų <xliff:g id="USERNAME">%1$s</xliff:g> profiliui ir jos negalima pašalinti."</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_blocked_profile_owner" msgid="5397102354360532069">"Šios programos reikia darbo profiliui; 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="uninstall_failed_msg" msgid="8969754702803951175">"Nepavyko pašalinti „<xliff:g id="APP_NAME">%1$s</xliff:g>“."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Prieiga prie įreng."</string>
<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_allow" msgid="4616529495342337095">"Leisti"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"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="5209102765005869454">"Leisti <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programos"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Programos leidimai"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Daugiau niekada neklausti"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nėra jokių leidimų"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Papildomi leidimai"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Dar <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ši programa skirta senesnės versijos „Android“. Uždraudus leidimą ji gali nebeveikti kaip numatyta."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"atlieka nežinomą veiksmą"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Leidžiama programų: <xliff:g id="COUNT_0">%1$d</xliff:g> iš <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Rodyti sistemą"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Slėpti sistemą"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Leidimai: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nėra jokių programų"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Vietovės nustatymai"</string>
+ <string name="location_warning" msgid="8778701356292735971">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ yra šio įrenginio vietovės paslaugų teikėjas. Vietovės pasiekiamumą galima keisti vietovės nustatymuose."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Jei uždrausite šį leidimą, pagrindinės įrenginio funkcijos gali nebeveikti, kaip numatyta."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Reikalaujama pagal politikos nuostatas"</string>
+ <string name="loading" msgid="7811651799620593731">"Įkeliama..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Visi leidimai"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Kitos programos galimybės"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Leidimo užklausa"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Aptikta ekrano perdanga"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Jei norite pakeisti šį leidimo nustatymą, pirmiausia turite išjungti ekrano perdangą skiltyje „Nustatymai &gt; Programos“"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Atidaryti nustatymus"</string>
</resources>
diff --git a/res/values-lv-television/strings.xml b/res/values-lv-television/strings.xml
new file mode 100644
index 00000000..d42eebe4
--- /dev/null
+++ b/res/values-lv-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Noraidīt un vairs nejautāt"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Vēlāk varat veikt izmaiņas sadaļā Iestatījumi &gt; Lietotnes."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>. no <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Rādīt sistēmas lietotnes"</string>
+</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index dd0c3340..27b71cd0 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Atinstalēšana ir pabeigta."</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_blocked_profile_owner" msgid="5006234166226562439">"Šī lietotne ir nepieciešama jūsu <xliff:g id="USERNAME">%1$s</xliff:g> profilam, un to nevar atinstalēt."</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_blocked_profile_owner" msgid="5397102354360532069">"Šī lietotne ir nepieciešama jūsu darba 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="uninstall_failed_msg" msgid="8969754702803951175">"Lietotni <xliff:g id="APP_NAME">%1$s</xliff:g> nevarēja atinstalēt."</string>
@@ -86,4 +87,36 @@
<string name="devicePerms" msgid="6733560207731294504">"Piekļuve ierīcei"</string>
<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_allow" msgid="4616529495342337095">"Atļaut"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Neatļaut"</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="5209102765005869454">"Vai atļaut lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Lietotnes"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Lietotnes atļaujas"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Vairs nejautāt"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nav atļauju"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Papildu atļaujas"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="zero">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Vēl <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Šī lietotne ir paredzēta vecākai Android versijai. Ja noraidīsiet atļauju, iespējams, netiks nodrošināta paredzētā lietotnes darbība."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"veikt nezināmu darbību"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Atļautas <xliff:g id="COUNT_0">%1$d</xliff:g> lietotnes no <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Rādīt sistēmas lietotnes"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Slēpt sistēmas lietotnes"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Lietotnes <xliff:g id="PERMISSION">%1$s</xliff:g> atļaujas"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nav lietotņu"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Atrašanās vietas iestatījumi"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> nodrošina šai ierīcei atrašanās vietu pakalpojumus. Piekļuves iestatījumus atrašanās vietas datiem var mainīt atrašanās vietas iestatījumos."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ja nepiešķirsiet šo atļauju, ierīces pamatfunkcijas, iespējams, vairs nedarbosies, kā paredzēts."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Īstenota saskaņā ar politiku"</string>
+ <string name="loading" msgid="7811651799620593731">"Notiek ielāde..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Visas atļaujas"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Citas lietotnes atļaujas"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Atļaujas pieprasījums"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Konstatēts ekrāna pārklājums"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Lai mainītu šo atļaujas iestatījumu, vispirms sadaļā “Iestatījumi un lietotnes” izslēdziet ekrāna pārklājumu."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Atvērt iestatījumus"</string>
</resources>
diff --git a/res/values-mk-rMK-television/strings.xml b/res/values-mk-rMK-television/strings.xml
new file mode 100644
index 00000000..74425713
--- /dev/null
+++ b/res/values-mk-rMK-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Прикажи ги системските апликации"</string>
+</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 0dbfabac..8cc487b2 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Апликацијата е потребна за вашиот профил <xliff:g id="USERNAME">%1$s</xliff:g> и не може да се деинсталира."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Не може да се деинсталира бидејќи пакетот е активен администратор на уред за корисникот <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Оваа апликација е потребна за вашиот работен профил и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Апликацијата ја бара администраторот на вашиот уред и не може да се деинсталира."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Управувај со администратори на уредот"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> не може да се деинсталира."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Пристап кон уредот"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Ова ажурирање не бара нови дозволи."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Дали сакате да ги доделите следниве дозволи? Тоа ќе овозможи пристап кон:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Овозможи"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Одбиј"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> од <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Дозволете <xliff:g id="APP_NAME">%1$s</xliff:g> да <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апликации"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Дозволи за апликацијата"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Никогаш не прашувај повторно"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Нема дозволи"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Дополнителни дозволи"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Уште <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Уште <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Сокриј систем"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> дозволи"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Нема апликации"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Поставки за локација"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> е давател на услуги според локација за овој уред. Пристапот до локацијата може да се смени од Поставките за локација."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ако ја одбиете оваа дозвола, основните функции на вашиот уред можеби веќе нема да функционираат како што треба."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Наложено од политиката"</string>
+ <string name="loading" msgid="7811651799620593731">"Се вчитува..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Сите дозволи"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Други можности на апликацијата"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Барање дозвола"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Откривме преклопување на екранот"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"За да ја измените оваа поставка за дозвола, прво мора да го исклучите преклопувањето на екранот од Поставки &gt; Апликации"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Отвори поставки"</string>
</resources>
diff --git a/res/values-ml-rIN-television/strings.xml b/res/values-ml-rIN-television/strings.xml
new file mode 100644
index 00000000..284fe16d
--- /dev/null
+++ b/res/values-ml-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"പിന്നീട് നിങ്ങൾക്കിത് ക്രമീകരണവും ആപ്സും എന്നതിൽ മാറ്റാനാകും"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"സിസ്റ്റം ആപ്‌സ് കാണിക്കുക"</string>
+</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index c1ff71ae..db085841 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"നിങ്ങളുടെ <xliff:g id="USERNAME">%1$s</xliff:g> പ്രൊഫൈലിന് ഈ അപ്ലിക്കേഷൻ ആവശ്യമുള്ളതിനാൽ ഇത് അൺഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"<xliff:g id="USERNAME">%1$s</xliff:g> എന്ന ഉപയോക്താവിനുള്ള ഒരു സജീവ ഉപകരണ അഡ്‌മിനിസ്‌ട്രേറ്ററായതിനാൽ ഈ പാക്കേജ് അൺഇൻസ്‌റ്റാളുചെയ്യാനാകില്ല."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിന് ഈ അപ്ലിക്കേഷൻ ആവശ്യമുള്ളതിനാൽ അത് അൺ‌ഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"നിങ്ങളുടെ ഉപകരണ അഡ്മിനിസ്ട്രേറ്ററിന് ഈ അപ്ലിക്കേഷൻ ആവശ്യമുള്ളതിനാൽ ഇത് അൺഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"ഉപകരണ അഡ്മിനിസ്ട്രേറ്റർമാരെ നിയന്ത്രിക്കുക"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> അൺഇൻസ്റ്റാളുചെയ്യാനായില്ല."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"ഉപകരണ ആക്‌സസ്സ്"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ഈ അപ്‌ഡേറ്റിന് പുതിയ അനുമതികളൊന്നും ആവശ്യമില്ല."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ഇനിപ്പറയുന്ന അനുമതികൾ അനുവദിക്കണോ? ഇതിന് ഇവയിലേക്ക് ആക്‌സസ്സ് ലഭിക്കും:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"അനുവദിക്കുക"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"നിരസിക്കുക"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനെ <xliff:g id="ACTION">%2$s</xliff:g> എന്നതിന് അനുവദിക്കണോ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ആപ്സ്"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ആപ്പ് അനുമതികൾ"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"വീണ്ടും ചോദിക്കരുത്"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"അനുമതികൾ ഇല്ല"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"അധിക അനുമതികൾ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> എണ്ണം കൂടി</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> എണ്ണം കൂടി</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"സിസ്റ്റം മറയ്‌ക്കുക"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> അനുമതികൾ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ആപ്സ് ഒന്നുമില്ല"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ലൊക്കേഷൻ ക്രമീകരണം"</string>
+ <string name="location_warning" msgid="8778701356292735971">"ഈ ഉപകരണത്തിനായുള്ള ലൊക്കേഷൻ സേവനങ്ങളുടെ ദാതാവ് <xliff:g id="APP_NAME">%1$s</xliff:g> ആണ്. ലൊക്കേഷൻ ക്രമീകരണത്തിൽ നിന്ന് ലൊക്കേഷൻ ആക്സസ് പരിഷ്കരിക്കാവുന്നതാണ്."</string>
+ <string name="system_warning" msgid="7103819124542305179">"നിങ്ങൾ ഈ അനുമതി നിഷേധിക്കുന്നുവെങ്കിൽ, നിങ്ങളുടെ ഉപകരണത്തിന്റെ അടിസ്ഥാന ഫീച്ചറുകൾ ഉദ്ദേശിച്ചത് പോലെ തുടർന്ന് പ്രവർത്തിച്ചേക്കില്ല."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"നയം മുഖേനെ നടപ്പിലാക്കിയത്"</string>
+ <string name="loading" msgid="7811651799620593731">"ലോഡുചെയ്യുന്നു..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"എല്ലാ അനുമതികളും"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"മറ്റ് ആപ്പ് ശേഷികൾ"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"അനുമതി അഭ്യർത്ഥന"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"സ്ക്രീൻ ഓവർലേ കണ്ടെത്തി"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ഈ അനുമതി ക്രമീകരണം മാറ്റുന്നതിന്, ക്രമീകരണം &gt; ആപ്സ് എന്നതിൽ നിന്ന് നിങ്ങളാദ്യം സ്ക്രീൻ ഓവർലേ ഓഫാക്കേണ്ടതാണ്"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ക്രമീകരണം തുറക്കുക"</string>
</resources>
diff --git a/res/values-mn-rMN-television/strings.xml b/res/values-mn-rMN-television/strings.xml
new file mode 100644
index 00000000..f97debf8
--- /dev/null
+++ b/res/values-mn-rMN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"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>
+</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 2e2236f7..3bce33e9 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Энэ апп таны <xliff:g id="USERNAME">%1$s</xliff:g> профайлд шаардлагатай бөгөөд устгах боломжгүй."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Энэ багц бол <xliff:g id="USERNAME">%1$s</xliff:g> хэрэглэгчийн хувьд төхөөрөмжийн идэвхтэй администратор нь учраас устгах боломжгүй байна."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Энэ апп таны профайлд шаардлагатай бөгөөд устгах боломжгүй."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Энэ апп нь таны төхөөрөмжийн админд шаардлагатай бөгөөд устгах боломжгүй."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Төхөөрөмжийн админуудыг удирдах"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г устгаж чадсангүй."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Төхөөрөмжид хандах"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Энэ шинэчлэл шинэ зөвшөөрөл шаардахгүй."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Та дараах зөвшөөрлийг олгох уу? Энэ нь дараахд хандах боломжтой:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Зөвшөөрөх"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Татгалзах"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>-ийн <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д <xliff:g id="ACTION">%2$s</xliff:g>-ийг зөвшөөрөх үү?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апп"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Апп зөвшөөрөл"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Дахиад хэзээ ч битгий асуу"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Зөвшөөрөлгүй байна"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Нэмэлт зөвшөөрөл"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> бусад</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> бусад</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"Системийг харуулах"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Системийг нуух"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> зөвшөөрөл"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Апп байхгүй"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Байршлын тохиргоо"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь энэ төхөөрөмжийн байршлын үйлчилгээ үзүүлэгч юм. Байршилд хандалтыг байршлын тохиргоо хэсгээс өөрчилж болно."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Хэрэв та энэ зөвшөөрөлд татгалзсан тохиолдолд таны төхөөрөмжийн үндсэн функц нь алдаатай ажиллаж магадгүй."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Бодлогын дагуу хэрэгжсэн"</string>
+ <string name="loading" msgid="7811651799620593731">"Ачаалж байна..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Бүх зөвшөөрөл"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Бусад апп-ын боломж"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Зөвшөөрлийн хүсэлт"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Дэлгэцийн давхарга илрүүллээ"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Зөвшөөрлийн тохиргоог өөрчлөхийн тулд, эхлээд Тохиргоо ба Апп хэсгээс дэлгэцийн давхаргыг унтраана уу."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Тохиргоог нээх"</string>
</resources>
diff --git a/res/values-mr-rIN-television/strings.xml b/res/values-mr-rIN-television/strings.xml
new file mode 100644
index 00000000..a4b37b02
--- /dev/null
+++ b/res/values-mr-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"आपण हे नंतर सेटिंग्ज आणि अॅप्स मध्ये बदलू शकता"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"सिस्टीम अॅप्स दर्शवा"</string>
+</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 32f9cead..b4a3049f 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"आपल्‍या <xliff:g id="USERNAME">%1$s</xliff:g> प्रोफाईलसाठी हा अ‍ॅप आवश्‍यक आहे आणि विस्‍थापित केला जाऊ शकत नाही."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"हे पॅकेज <xliff:g id="USERNAME">%1$s</xliff:g> वापरकर्त्यासाठी सक्रिय डिव्‍हाइस प्रशासक असल्‍याने विस्‍थापित करू शकत नाही."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"आपल्‍या कार्य प्रोफाईलसाठी हा अ‍ॅप आवश्‍यक आहे आणि विस्थापित केला जाऊ शकत नाही."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"आपल्‍या डिव्‍हाइस प्रशासकाद्वारे हा अ‍ॅप आवश्यक आहे आणि तो विस्‍थापित केला जाऊ शकत नाही."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"डिव्‍हाइस प्रशासकांना व्‍यवस्‍थापित करा"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> विस्थापित केला जाऊ शकला नाही."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"डिव्हाइस प्रवेश"</string>
<string name="no_new_perms" msgid="6657813692169565975">"या अद्यतनास कोणत्याही नवीन परवानग्यांची आवश्यकता नाही."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"आपण खालील परवानग्‍यांना मंजूरी देऊ इच्‍छिता? त्‍यांना यावर प्रवेश मिळेल:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमती द्या"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"नकार द्या"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> पैकी <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ला <xliff:g id="ACTION">%2$s</xliff:g> करण्‍याची अनुमती द्यायची?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"अॅप्स"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"अॅप परवानग्या"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"पुन्हा कधीही विचारू नका"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"परवानग्या नाहीत"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त परवानग्या"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">आणखी <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">आणखी <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"सिस्टम दर्शवा"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"सिस्‍टीम लपवा"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> परवानग्या"</string>
+ <string name="no_apps" msgid="1965493419005012569">"कोणतेही अॅप्स नाहीत"</string>
+ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिंग्ज"</string>
+ <string name="location_warning" msgid="8778701356292735971">"या डिव्‍हाइससाठी <xliff:g id="APP_NAME">%1$s</xliff:g> स्थान सेवांचा प्रदाता आहे. स्थान प्रवेश स्थान सेटिंग्ज वरून सुधारित केला जाऊ शकतो."</string>
+ <string name="system_warning" msgid="7103819124542305179">"आपण ही परवानगी नाकारल्यास, आपल्‍या डिव्‍हाइसची मुलभूत वैशिष्ट्ये अपेक्षित असल्याप्रमाणे कदाचित कार्य करू शकणार नाहीत."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"धोरणाद्वारे सक्ती केली"</string>
+ <string name="loading" msgid="7811651799620593731">"लोड करत आहे..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"सर्व परवानग्या"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"अन्य अॅप क्षमता"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"परवानगीची विनंती"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रीन आच्छादन आढळले"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"हे परवानगी सेटिंग बदलण्‍यासाठी, आपल्‍याला सेटिंग्ज &gt; Apps मधून स्क्रीन आच्छादन बंद करावे लागेल"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिंग्ज उघडा"</string>
</resources>
diff --git a/res/values-ms-rMY-television/strings.xml b/res/values-ms-rMY-television/strings.xml
new file mode 100644
index 00000000..0ea0cde4
--- /dev/null
+++ b/res/values-ms-rMY-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Tolak dan jangan tanya lagi"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Anda boleh menukar ini nanti dalam Tetapan &gt; Apl"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Tunjukkan apl sistem"</string>
+</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 81f6ef71..1dbe2a5c 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Nyahpasang selesai."</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_blocked_profile_owner" msgid="5006234166226562439">"Apl ini diperlukan untuk profil <xliff:g id="USERNAME">%1$s</xliff:g> anda dan tidak boleh dinyahpasang."</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_blocked_profile_owner" msgid="5397102354360532069">"Apl ini diperlukan untuk profil kerja 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dapat dinyahpasang."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Akses Peranti"</string>
<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_allow" msgid="4616529495342337095">"Benarkan"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Tolak"</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="5209102765005869454">"Benarkan <xliff:g id="APP_NAME">%1$s</xliff:g> untuk <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apl"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Kebenaran apl"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Jangan tanya lagi"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Tiada kebenaran"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Kebenaran tambahan"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lagi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> lagi</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Apl ini direka bentuk untuk versi Android yang lebih lama. Tindakan menafikan kebenaran boleh menyebabkannya tidak berfungsi seperti yang dimaksudkan lagi."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"laksanakan tindakan yang tidak diketahui"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> daripada <xliff:g id="COUNT_1">%2$d</xliff:g> apl dibenarkan"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Tunjukkan sistem"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Sembunyikan sistem"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Kebenaran <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Tiada apl"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Tetapan Lokasi"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ialah pembekal perkhidmatan lokasi untuk peranti ini. Akses lokasi boleh diubah suai daripada tetapan lokasi."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Jika anda tolak kebenaran ini, ciri asas peranti anda mungkin tidak berfungsi seperti yang dimaksudkan lagi."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Dikuatkuasakan oleh dasar"</string>
+ <string name="loading" msgid="7811651799620593731">"Memuatkan…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Semua kebenaran"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Keupayaan apl yang lain"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Permintaan kebenaran"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Tindanan skrin dikesan"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Untuk menukar tetapan kebenaran ini, anda perlu mematikan tindanan skrin daripada Tetapan &gt; Apl terlebih dahulu"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Buka tetapan"</string>
</resources>
diff --git a/res/values-my-rMM-television/strings.xml b/res/values-my-rMM-television/strings.xml
new file mode 100644
index 00000000..a950b7ea
--- /dev/null
+++ b/res/values-my-rMM-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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; App များတွင် ပြင်နိုင်၏"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"စနစ်အပ်ဖ်များ ပြသရန်"</string>
+</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index aeea5f08..d804fc49 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ဒီappမှာ သင်၏ <xliff:g id="USERNAME">%1$s</xliff:g> ပရိုဖိုင် အတွက် လိုအပ်သောကြောင့် ဖြုတ်၍ မရနိုင်ပါ။"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ဒီအထုပ်မှာ အသုံးပြုသူ<xliff:g id="USERNAME">%1$s</xliff:g>အတွက် လုပ်ကိုင်နေသည့် စီမံအုပ်ချုပ်သူဖြစ်၍ ဖြုတ်မရနိုင်ပါ။"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ဤအပ်ဖ်သည် သင့်အလုပ်ကိုယ်ရေးအချက်အလက်အတွက်လိုအပ်ပြီး ဖြုတ်၍မရနိုင်ပါ။"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ဒီappမှာ သင်၏ ကိရိယာ စီမံအုပ်ချုပ်သူက လိုအပ်သောကြောင့် ဖြုတ်၍ မရနိုင်ပါ။"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"စက်ပစ္စည်းထိန်းချုပ်မှုအား စီမံရန်"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ဖယ်ရှားလို့ မရပါ"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"စက်ပစ္စည်း အသုံးပြုခွင့်"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ဒီအဆင့်မြှင့်ခြင်းဟာ ခွင့်ပြုချက်သစ်တွေ မလိုအပ်ပါ"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"အောက်ပါ ခွင့်ပြုချက်များ ပေးလိုပါသလား။ ၎င်းတို့က သုံးခွင့်ပြုမှာကတော့၊"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ခွင့်ပြုသည်"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ငြင်းပယ်သည်"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> အား <xliff:g id="ACTION">%2$s</xliff:g> လုပ်ခွင့်ပြုသလား?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Appများ"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App ခွင့်ပြုချက်များ"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ထပ်မမေးရန်"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ခွင့်ပြုချက်မရှိ"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"ထပ်တိုး ခွင့်ပြုချက်များ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"> နောက်ထပ် <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one"> နောက်ထပ် <xliff:g id="COUNT_0">%1$d</xliff:g> </item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ဤapp အား 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> app များ ခွင့်ပြုခဲ့၏"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"စနစ်ကိုပြသရန်"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"စနစ်ကို ဖျောက်မည်"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ခွင့်ပြုချက်များ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"အပ်ဖ်များမရှိ"</string>
+ <string name="location_settings" msgid="1774875730854491297">"တည်နေရာ ဆက်တင်များ"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် ဤစက်ပစ္စည်းအတွက် တည်နေရာ ဝန်ဆောင်မှုများ ထုတ်ပေးသူဖြစ်သည်။ တည်နေရာ အသုံးပြုမှုကို တည်နေရာချိန်ညှိမှုများတွင် ပြုပြင်နိုင်သည်။"</string>
+ <string name="system_warning" msgid="7103819124542305179">"ဤခွင့်ပြုချက်အား သင် ငြင်းဆိုပါက၊ သင့်စက်ကိရိယာ၏ အခြေခံလုပ်ဆောင်ချက်များသည် ရည်ရွယ်ထားသကဲ့သို့ အလုပ်လုပ်မည် မဟုတ်ပါ။"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"မူဝါဒအားဖြင့်ပြဌာန်းရန်"</string>
+ <string name="loading" msgid="7811651799620593731">"တင်နေ…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ခွင့်ပြုချက်များ အားလုံး"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"အခြားအပ်ဖ်၏ စွမ်းရည်များ"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"ခွင့်ပြုချက် တောင်းခံမှု"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"မျက်နှာပြင် ထပ်ပေးမှုကို ရှာတွေ့ခဲ့"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ဒီခွင့်ပြုချက် ဆက်တင်ကို ပြောင်းရန်၊ သင်ဟာ ဦးစွာ ဆက်တင်များ &gt; Appများ ထဲတွင် မျက်နှာပြင် ထပ်ပေးမှုကို ပိတ်လိုက်ရန် လိုမယ်"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ဆက်တင်းများ ဖွင့်ရန်"</string>
</resources>
diff --git a/res/values-nb-television/strings.xml b/res/values-nb-television/strings.xml
new file mode 100644
index 00000000..df32fa97
--- /dev/null
+++ b/res/values-nb-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Avvis, og ikke spør igjen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan endre dette senere i Innstillinger &gt; Apper"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Vis systemapper"</string>
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f653fe17..7d72c921 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -27,8 +27,8 @@
<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>
- <string name="install_confirm_question_update" msgid="4624159567361487964">"Ønsker du å installere en oppdatering for denne eksisterende appen? Du mister ingen eksisterende data. Den oppdaterte appen får tilgangen spesifisert under."</string>
- <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Ønsker du å installere en oppdatering for denne innebygde appen? Du mister ingen eksisterende data. Den oppdaterte appen får tilgangen spesifisert under."</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Ønsker du å installere en oppdatering for denne eksisterende appen? Du mister ingen eksisterende data. Den oppdaterte appen får tilgangen spesifisert nedenfor."</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Ønsker du å installere en oppdatering for denne innebygde appen? Du mister ingen eksisterende data. Den oppdaterte appen får tilgangen spesifisert nedenfor."</string>
<string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Vil du installere en oppdatering av denne eksisterende appen? De eksisterende dataene dine går ikke tapt. Dette krever ingen spesiell tilgang."</string>
<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>
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Avinstalleringen er fullført."</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_blocked_profile_owner" msgid="5006234166226562439">"Denne appen er nødvendig for <xliff:g id="USERNAME">%1$s</xliff:g>-profilen din og kan ikke avinstalleres."</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_blocked_profile_owner" msgid="5397102354360532069">"Denne appen er nødvendig for Work-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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kunne ikke installeres."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Enhetstilgang"</string>
<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_allow" msgid="4616529495342337095">"Tillat"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Ikke tillat"</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="5209102765005869454">"Vil du tillate <xliff:g id="APP_NAME">%1$s</xliff:g> å <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apper"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Apptillatelser"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Spør aldri igjen"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Ingen tillatelser"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Flere tillatelser"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> til</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> til</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Denne appen er designet for en eldre versjon av Android. Hvis du nekter å gi tillatelse, kan det føre til at den ikke lenger fungerer etter hensikten."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"utfør en ukjent handling"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> av <xliff:g id="COUNT_1">%2$d</xliff:g> apper er tillatt"</string>
+ <string name="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="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>
+ <string name="system_warning" msgid="7103819124542305179">"Hvis du ikke gir denne tillatelsen, kan grunnleggende funksjoner på enheten slutte å fungere som de skal."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Påkrevd ifølge retningslinjene"</string>
+ <string name="loading" msgid="7811651799620593731">"Laster inn …"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alle tillatelser"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Andre appfunksjoner"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Forespørsel om tillatelse"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Skjermoverlegg oppdaget"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"For å endre denne tillatelsesinnstilingen må du først slå av skjermoverlegget fra Innstillinger &gt; Apper"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Åpne innstillingene"</string>
</resources>
diff --git a/res/values-ne-rNP-television/strings.xml b/res/values-ne-rNP-television/strings.xml
new file mode 100644
index 00000000..f6c9f6b5
--- /dev/null
+++ b/res/values-ne-rNP-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"प्रणाली अनुप्रयोगहरू देखाउनुहोस्"</string>
+</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 9da83a2c..4a3c6708 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"यो अनुप्रयोग आफ्नो <xliff:g id="USERNAME">%1$s</xliff:g> प्रोफाइलको लागि आवश्यक छ र स्थापना रद्द गर्न सकिँदैन।"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"रद्द गर्न सकिदैन किनभने प्रयोगकर्ता <xliff:g id="USERNAME">%1$s</xliff:g> को लागि यो प्याकेज सक्रिय यन्त्र प्रशासक हो।"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"यो अनुप्रयोग तपाईँको कार्य प्रोफाइलको लागि आवश्यक छ र यसको स्थापना रद्द गर्न सकिँदैन।"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"यो अनुप्रयोग तपाईँको उपकरण प्रशासकलाई आवश्यक छ र स्थापना रद्द गर्न सकिँदैन।"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"उपकरण प्रशासकहरूको प्रबन्ध गर्नुहोस्"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> स्थापना रद्द गर्न सकिँदैन।"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"उपकरण पहुँच"</string>
<string name="no_new_perms" msgid="6657813692169565975">"यस अपडेटलाई नयाँ अनुमति आवश्यक पर्दैन।"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"के तपाईं निम्न अनुमति प्रदान गर्न चाहनु हुन्छ? यसले पहुँच पाउने छ:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"अनुमति दिनुहोस्"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"अस्वीकार गर्नुहोस्"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> को <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई <xliff:g id="ACTION">%2$s</xliff:g> गर्न अनुमति दिने हो?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"अनुप्रयोगहरू"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"अनुप्रयोग अनुमतिहरू"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"फेरि कहिल्यै नसोध्नुहोस्"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"कुनै अनुमतिहरू छैनन्"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"अतिरिक्त अनुमतिहरू"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> थप</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> थप</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"प्रणाली देखाउनुहोस्"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"प्रणाली लुकाउनुहोस्"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> अनुमतिहरु"</string>
+ <string name="no_apps" msgid="1965493419005012569">"कुनै अनुप्रयोगहरू छैनन्।"</string>
+ <string name="location_settings" msgid="1774875730854491297">"स्थान सेटिङहरू"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> यो यन्त्रका लागि स्थान सेवाहरूको एउटा प्रदायक हो। स्थान पहुँच स्थान सेटिङहरूबाट परिमार्जन गर्न सकिन्छ।"</string>
+ <string name="system_warning" msgid="7103819124542305179">"तपाईँले यो अनुमति अस्वीकार गर्नुभयो भने तपाईँको यन्त्रका मूल विशेषताहरू अब चाहेअनुसार कार्य नगर्न सक्छ।"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"नीतिद्वारा लागू गरियो"</string>
+ <string name="loading" msgid="7811651799620593731">"लोड हुँदैछ..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"सबै अनुमतिहरू"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"अन्य अनुप्रयोग क्षमताहरू"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"अनुमति अनुरोध"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"स्क्रिन ओभरले पत्ता लाग्यो"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"यो अनुमति सेटिङ परिवर्तन गर्न, तपाईँले पहिला सेटिङ अनुप्रयोगबाट स्क्रिन ओभरले बन्द गर्नु पर्दछ।"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"सेटिङहरू खोल्नुहोस्"</string>
</resources>
diff --git a/res/values-nl-television/strings.xml b/res/values-nl-television/strings.xml
new file mode 100644
index 00000000..671d58e3
--- /dev/null
+++ b/res/values-nl-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Weigeren en niet meer vragen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"U kunt dit later wijzigen in \'Instellingen\' &gt; \'Apps\'"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Systeem-apps weergeven"</string>
+</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 1d3c9fa1..8cbe725f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Verwijdering voltooid."</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_blocked_profile_owner" msgid="5006234166226562439">"Deze app is vereist voor uw profiel <xliff:g id="USERNAME">%1$s</xliff:g> en kan niet worden verwijderd."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Kan dit pakket niet verwijderen omdat het een actieve apparaatbeheerder is voor de gebruiker <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Deze app is vereist voor uw werkprofiel en kan niet worden verwijderd."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Deze app is vereist door uw apparaatbeheerder en kan niet worden verwijderd."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Apparaatbeheerders beheren"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kan niet worden verwijderd."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Apparaattoegang"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Voor deze update zijn geen nieuwe machtigingen vereist."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Wilt u de volgende machtigingen verlenen? Hiermee kan toegang worden verkregen tot:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Toestaan"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Afwijzen"</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="5209102765005869454">"Toestaan dat <xliff:g id="APP_NAME">%1$s</xliff:g> het volgende doet: <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"App-rechten"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Niet meer vragen"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Geen rechten"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Aanvullende rechten"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Nog <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Nog <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Systeem-apps verbergen"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> rechten"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Geen apps"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Locatie-instellingen"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> is een leverancier van locatieservices voor dit apparaat. Locatietoegang kan worden aangepast via de locatie-instellingen."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Als u deze toestemming weigert, functioneren basisfuncties van uw apparaat mogelijk niet meer zoals bedoeld."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Afgedwongen door beleid"</string>
+ <string name="loading" msgid="7811651799620593731">"Laden…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alle rechten"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Andere app-mogelijkheden"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Toestemmingsverzoek"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Schermoverlay gedetecteerd"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Als u deze instelling voor rechten wilt wijzigen, moet u eerst de schermoverlay uitschakelen via \'Instellingen\' &gt; \'Apps\'"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Instellingen openen"</string>
</resources>
diff --git a/res/values-pa-rIN-television/strings.xml b/res/values-pa-rIN-television/strings.xml
new file mode 100644
index 00000000..cebc66fe
--- /dev/null
+++ b/res/values-pa-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"ਸਿਸਟਮ ਐਪਸ ਦਿਖਾਓ"</string>
+</resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
new file mode 100644
index 00000000..772258fb
--- /dev/null
+++ b/res/values-pa-rIN/strings.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name" msgid="2738748390251381682">"ਪੈਕੇਜ ਇੰਸਟੌਲਰ"</string>
+ <string name="next" msgid="3057143178373252333">"ਅਗਲਾ"</string>
+ <string name="install" msgid="5896438203900042068">"ਇੰਸਟੌਲ ਕਰੋ"</string>
+ <string name="done" msgid="3889387558374211719">"ਹੋ ਗਿਆ"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"ਇਸ ਐਪ ਨੂੰ ਇਹ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ:"</string>
+ <string name="cancel" msgid="8360346460165114585">"ਰੱਦ ਕਰੋ"</string>
+ <string name="unknown" msgid="4742479012767208045">"ਅਗਿਆਤ"</string>
+ <string name="installing" msgid="8613631001631998372">"ਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</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_failed" msgid="6579998651498970899">"ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ।"</string>
+ <string name="install_failed_invalid_apk" msgid="1287935707565682604">"ਪੈਕੇਜ ਕਰਪਟ ਹੋ ਗਿਆ ਜਾਪਦਾ ਹੈ।"</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"ਇੱਕ ਵਿਪਰੀਤ ਹਸਤਾਖਰ ਨਾਲ ਸਮਾਨ ਨਾਮ ਵਾਲਾ ਇੱਕ ਮੌਜੂਦਾ ਪੈਕੇਜ ਪਹਿਲਾਂ ਹੀ ਇੰਸਟੌਲ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"ਪੈਕੇਜ Android ਦੇ ਕੇਵਲ ਨਵੇਂ ਵਰਜਨਾਂ ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ।"</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"ਇਹ ਐਪ ਤੁਹਾਡੀ ਟੈਬਲੇਟ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"ਇਹ ਐਪ ਤੁਹਾਡੇ TV ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫੋਨ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ।"</string>
+ <string name="install_failed_file_not_found" msgid="1958430133396322619">"ਨਿਰਦਿਸ਼ਟ ਕੀਤਾ ਪੈਕੇਜ ਇੰਸਟੌਲੇਸ਼ਨ ਪੂਰੀ ਕੀਤੀ ਜਾ ਸਕਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਸੀ।"</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"ਪੈਕੇਜ ਨੇ ਜਾਂਚ ਪਾਸ ਨਹੀਂ ਕੀਤੀ ਅਤੇ ਇਸਨੂੰ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"ਇਸ ਪੈਕੇਜ ਦੀ ਜਾਂਚ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ ਕਰਨ ਵੇਲੇ ਇੱਕ ਟਾਈਮਆਊਟ ਵਾਪਰਿਆ। ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਇੰਸਟੌਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</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_title" msgid="2855558586206583032">"ਇੰਸਟੌਲ ਬਲੌਕ ਕੀਤੀ"</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="ok" msgid="3468756155452870475">"ਠੀਕ"</string>
+ <string name="settings" msgid="6743583734099755409">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"ਐਪਸ ਲਈ ਨਵਾਂ ਸ੍ਰੋਤ"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਹੋਰ ਐਪਸ ਇੰਸਟੌਲ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ।\n\nਕੀ ਇਸਨੂੰ ਹੁਣ ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"ਐਪਸ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"ਕੀ ਐਪ ਬਦਲਣਾ ਹੈ?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"ਜੋ ਐਪ ਤੁਸੀਂ ਇੰਸਟੌਲ ਕਰ ਰਹੇ ਹੋ, ਉਹ ਦੂਜੇ ਐਪ ਨਾਲ ਬਦਲ ਜਾਏਗਾ।\n\nਤੁਹਾਡਾ ਪਿਛਲਾ ਸਾਰਾ ਉਪਭੋਗਤਾ ਡਾਟਾ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾਏਗਾ।"</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"ਇਹ ਇੱਕ ਸਿਸਟਮ ਐਪ ਹੈ।\n\nਤੁਹਾਡਾ ਸਾਰਾ ਪਿਛਲਾ ਉਪਭੋਗਤਾ ਡਾਟਾ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾਏਗਾ।"</string>
+ <string name="out_of_space_dlg_title" msgid="7843674437613797326">"ਖਾਲੀ ਸਪੇਸ"</string>
+ <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="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_update_text" msgid="2056387942084605027">"ਕੀ ਤੁਸੀਂ ਫੈਕਟਰੀ ਵਰਜਨ ਵਾਲੇ ਇਸ ਐਪ ਨੂੰ ਬਦਲਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
+ <string name="uninstalling" msgid="5556217435895938250">"ਅਣਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <string name="uninstall_done" msgid="3792487853420281888">"ਅਣਇੰਸਟੌਲ ਪੂਰਾ ਹੋਇਆ।"</string>
+ <string name="uninstall_failed" msgid="631122574306299512">"ਅਣਇੰਸਟੌਲ ਅਸਫਲ।"</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕਰ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਪੈਕੇਜ ਇੱਕ ਸਕਿਰਿਆ ਡਿਵਾਈਸ ਪ੍ਰਬੰਧਕ ਹੈ।"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕਰ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਪੈਕੇਜ ਉਪਭੋਗਤਾ <xliff:g id="USERNAME">%1$s</xliff:g> ਲਈ ਇੱਕ ਸਕਿਰਿਆ ਡਿਵਾਈਸ ਪ੍ਰਬੰਧਕ ਹੈ।"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ਇਹ ਐਪ ਤੁਹਾਡੀ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਲਈ ਲੋੜੀਂਦੀ ਹੈ ਅਤੇ ਇਸਦੀ ਸਥਾਪਨਾ ਰੱਦ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।"</string>
+ <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਲੁੜੀਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
+ <string name="manage_device_administrators" msgid="891392489300312370">"ਡਿਵਾਈਸ ਪ੍ਰਬੰਧਕਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
+ <string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"ਪਾਰਸ ਅਸ਼ੁੱਧੀ"</string>
+ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"ਪੈਕੇਜ ਨੂੰ ਪਾਰਸ ਕਰਨ ਵਿੱਚ ਇੱਕ ਸਮੱਸਿਆ ਸੀ।"</string>
+ <string name="newPerms" msgid="6039428254474104210">"ਨਵਾਂ"</string>
+ <string name="allPerms" msgid="1024385515840703981">"ਸਭ"</string>
+ <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_dialog_button_allow" msgid="4616529495342337095">"ਆਗਿਆ ਦਿਓ"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> ਦਾ <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ <xliff:g id="ACTION">%2$s</xliff:g> ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ਐਪਸ"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ਐਪ ਅਨੁਮਤੀਆਂ"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ਦੁਬਾਰਾ ਕਦੇ ਨਾ ਪੁੱਛਣਾ"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ਕੋਈ ਅਨੁਮਤੀਆਂ ਨਹੀਂ ਹਨ"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"ਅਤਿਰਿਕਤ ਅਨੁਮਤੀਆਂ"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਹੋਰ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਹੋਰ</item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"ਸਿਸਟਮ ਦਿਖਾਓ"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"ਸਿਸਟਮ ਲੁਕਾਓ"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> ਅਨੁਮਤੀਆਂ"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ਕੋਈ ਐਪਸ ਨਹੀਂ"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ਸਥਿਤੀ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਇਸ ਡਿਵਾਈਸ ਲਈ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾਵਾਂ ਦਾ ਇੱਕ ਪ੍ਰਦਾਤਾ ਹੈ। ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਪਹੁੰਚ ਨੂੰ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੈਟਿੰਗਾਂ ਤੋਂ ਸੰਸ਼ੋਧਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"</string>
+ <string name="system_warning" msgid="7103819124542305179">"ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਅਨੁਮਤੀ ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀਆਂ ਮੂੂਲ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਮੁਤਾਬਕ ਕੰਮ ਨਹੀਂ ਵੀ ਕਰ ਸਕਦੀਆਂ।"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ਨੀਤੀ ਮੁਤਾਬਕ ਲਾਗੂ ਕੀਤਾ"</string>
+ <string name="loading" msgid="7811651799620593731">"ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"ਸਾਰੀਆਂ ਅਨੁਮਤੀਆਂ"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ਹੋਰ ਐਪ ਸਮਰੱਥਤਾਵਾਂ"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"ਅਨੁਮਤੀ ਬੇਨਤੀ"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"ਸਕਰੀਨ ਓਵਰਲੇਅ ਲੱਭ ਗਿਆ"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ਇਸ ਇਜ਼ਾਜਤ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ; ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਸੈਟਿੰਗਜ਼ ਅਤੇ ਐਪਸ ਤੋਂ ਸਕ੍ਰੀਨ ਓਵਰਲੇਅ ਬੰਦ ਕਰਨਾ ਪਵੇਗਾ"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ਸੈਟਿੰਗਜ਼ ਖੋਲ੍ਹੋ"</string>
+</resources>
diff --git a/res/values-pl-television/strings.xml b/res/values-pl-television/strings.xml
new file mode 100644
index 00000000..035832fc
--- /dev/null
+++ b/res/values-pl-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Odmów i nie pytaj ponownie"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Możesz to później zmienić, wybierając Ustawienia &gt; Aplikacje"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Pokaż aplikacje systemowe"</string>
+</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b0844179..d6929bd8 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Odinstalowywanie zakończone"</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_blocked_profile_owner" msgid="5006234166226562439">"Ta aplikacja jest potrzebna w profilu <xliff:g id="USERNAME">%1$s</xliff:g> i nie można jej odinstalować."</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_blocked_profile_owner" msgid="5397102354360532069">"Ta aplikacja jest potrzebna w profilu do pracy 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="uninstall_failed_msg" msgid="8969754702803951175">"Nie można odinstalować aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Dostęp do urządzenia"</string>
<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_allow" msgid="4616529495342337095">"Zezwól"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmów"</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="5209102765005869454">"Zezwolić aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> na <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacje"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Uprawnienia aplikacji"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Nie pytaj ponownie"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Brak uprawnień"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Dodatkowe uprawnienia"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="few">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Jeszcze <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Jeszcze <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ta aplikacja jest przeznaczona na straszą wersję Androida. Odmówienie uprawnień może spowodować, że przestanie ona działać w zamierzony sposób."</string>
+ <string name="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="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>
+ <string name="no_apps" msgid="1965493419005012569">"Brak aplikacji"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Ustawienia lokalizacji"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> jest dostawcą usług lokalizacyjnych dla tego urządzenia. Dostęp do danych lokalizacji można zmienić w ustawieniach lokalizacji."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Jeśli odmówisz tych uprawnień, podstawowe funkcje urządzenia mogą nie działać prawidłowo."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Narzucone przez zasady"</string>
+ <string name="loading" msgid="7811651799620593731">"Ładuję…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Wszystkie uprawnienia"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Inne funkcje aplikacji"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Prośba o pozwolenie"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Wykryto nakładkę ekranową"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Aby zmodyfikować te uprawnienia, musisz najpierw wyłączyć nakładkę ekranową, klikając Ustawienia &gt; Aplikacje"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Otwórz ustawienia"</string>
</resources>
diff --git a/res/values-pt-rBR-television/strings.xml b/res/values-pt-rBR-television/strings.xml
new file mode 100644
index 00000000..4c29ba52
--- /dev/null
+++ b/res/values-pt-rBR-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Negar e não perguntar novamente"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"É possível alterar isso mais tarde em \"Config.\" &gt; \"Apps\""</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar apps do sistema"</string>
+</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
new file mode 100644
index 00000000..76be7fc3
--- /dev/null
+++ b/res/values-pt-rBR/strings.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name" msgid="2738748390251381682">"Instalador do pacote"</string>
+ <string name="next" msgid="3057143178373252333">"Próximo"</string>
+ <string name="install" msgid="5896438203900042068">"Instalar"</string>
+ <string name="done" msgid="3889387558374211719">"Concluído"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"Permitir que este app:"</string>
+ <string name="cancel" msgid="8360346460165114585">"Cancelar"</string>
+ <string name="unknown" msgid="4742479012767208045">"Desconhecido"</string>
+ <string name="installing" msgid="8613631001631998372">"Instalando..."</string>
+ <string name="install_done" msgid="3682715442154357097">"App instalado."</string>
+ <string name="install_confirm_question" msgid="7295206719219043890">"Deseja instalar este app? Ele terá acesso a:"</string>
+ <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Deseja instalar este app? Não requer acesso especial."</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Deseja instalar uma atualização para este app? Os dados existentes não serão perdidos. O app atualizado terá acesso a:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Deseja instalar uma atualização para este app integrado? Os dados existentes não serão perdidos. O app atualizado terá acesso a:"</string>
+ <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Deseja instalar uma atualização para este app existente? Seus dados existentes não serão perdidos. A atualização não requer qualquer acesso especial."</string>
+ <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Deseja instalar uma atualização para este app integrado? Seus dados existentes não serão perdidos. A atualização não requer qualquer acesso especial."</string>
+ <string name="install_failed" msgid="6579998651498970899">"O app não foi instalado."</string>
+ <string name="install_failed_invalid_apk" msgid="1287935707565682604">"Parece que o pacote está corrompido."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Um pacote existente com o mesmo nome e uma assinatura conflitante já foi instalado."</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"O pacote funciona somente em versões mais recentes do Android."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Este app não é compatível com seu tablet."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Este app não é compatível com sua TV."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Este app não é compatível com seu telefone."</string>
+ <string name="install_failed_file_not_found" msgid="1958430133396322619">"O pacote especificado foi excluído antes da instalação ser concluída."</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"O pacote não passou pela verificação e não pôde ser instalado."</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"O tempo limite foi atingido ao tentar verificar este pacote. Tente instalá-lo novamente mais tarde."</string>
+ <string name="install_failed_msg" product="tablet" msgid="8368835262605608787">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> em seu tablet."</string>
+ <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> na sua TV."</string>
+ <string name="install_failed_msg" product="default" msgid="8554909560982962052">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g> em seu telefone."</string>
+ <string name="launch" msgid="4826921505917605463">"Abrir"</string>
+ <string name="unknown_apps_dlg_title" msgid="2855558586206583032">"Instalação bloqueada"</string>
+ <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Por segurança, o tablet está config. p/ bloquear a instalação de aplicat. de fontes desconhecidas."</string>
+ <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"Por segurança, sua TV está configurada para bloquear a instalação de apps de fontes desconhecidas."</string>
+ <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"Por segurança, o telefone está config. p/ bloquear a instalação de aplicat. de fontes desconhecidas."</string>
+ <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"Seu administrador não permite a instalação de apps baixados de fontes desconhecidas."</string>
+ <string name="ok" msgid="3468756155452870475">"OK"</string>
+ <string name="settings" msgid="6743583734099755409">"Configurações"</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"Nova fonte para apps"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> deseja instalar outros apps.\n\nPermitir isso agora e no futuro?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"Gerenciar apps"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Substituir app?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"O app que você está instalando substituirá outro app.\n\nTodos os seus dados de usuário anteriores serão salvos."</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Este é um app do sistema.\n\nTodos os seus dados de usuário anteriores serão salvos."</string>
+ <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Sem espaço"</string>
+ <string name="out_of_space_dlg_text" msgid="4774775404294282216">"Não foi possível instalar <xliff:g id="APP_NAME">%1$s</xliff:g>. Libere um pouco de espaço e tente novamente."</string>
+ <string name="dlg_ok" msgid="6944357727705699232">"OK"</string>
+ <string name="app_not_found_dlg_title" msgid="2692335460569505484">"App não encontrado"</string>
+ <string name="app_not_found_dlg_text" msgid="6107465056055095930">"O app não foi encontrado na lista de apps instalados."</string>
+ <string name="uninstall_application_title" msgid="1860074100811653963">"Desinstalar app"</string>
+ <string name="uninstall_update_title" msgid="4146940097553335390">"Desinstalar atualização"</string>
+ <string name="uninstall_activity_text" msgid="6680688689803932550">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> é parte do seguinte app:"</string>
+ <string name="uninstall_application_text" msgid="6691975835951187030">"Deseja desinstalar este app?"</string>
+ <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Deseja desinstalar este app para "<b>"todos"</b>" os usuários? O app e seus dados serão removidos para "<b>"todos"</b>" os usuários do dispositivo."</string>
+ <string name="uninstall_application_text_user" msgid="8766882355635485733">"Deseja desinstalar este app para o usuário <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
+ <string name="uninstall_update_text" msgid="2056387942084605027">"Deseja substituir este app pela versão de fábrica?"</string>
+ <string name="uninstalling" msgid="5556217435895938250">"Desinstalando..."</string>
+ <string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string>
+ <string name="uninstall_failed" msgid="631122574306299512">"Desinstalação malsucedida."</string>
+ <string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Não é possível desinstalar, pois este pacote é um admin. de dispositivos ativo."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Não é possível desinstalar este pacote porque ele é um administrador de dispositivo ativo para o usuário <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Este app é necessário para seu perfil de trabalho e não pode ser desinstalado."</string>
+ <string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"O app é exigido pelo administrador do dispositivo e não pode ser desinstalado."</string>
+ <string name="manage_device_administrators" msgid="891392489300312370">"Gerenciar os administradores do dispositivo"</string>
+ <string name="uninstall_failed_msg" msgid="8969754702803951175">"Não foi possível desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Erro de análise"</string>
+ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"Ocorreu um problema ao analisar o pacote."</string>
+ <string name="newPerms" msgid="6039428254474104210">"Novas"</string>
+ <string name="allPerms" msgid="1024385515840703981">"Todas"</string>
+ <string name="privacyPerms" msgid="1850527049572617">"Privacidade"</string>
+ <string name="devicePerms" msgid="6733560207731294504">"Acesso ao dispositivo"</string>
+ <string name="no_new_perms" msgid="6657813692169565975">"Esta atualização não requer novas permissões."</string>
+ <string name="grant_confirm_question" msgid="4690289297029223742">"Deseja conceder as permissões a seguir? Será concedido acesso para:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Negar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Permitir que o <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Não perguntar novamente"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sem permissão"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permissões adicionais"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Este app foi projetado para uma versão anterior do Android. Negar a permissão pode fazer com que ele deixe de funcionar conforme esperado."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> apps permitidos"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permissões para <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nenhum app"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Configurações de localização"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é um provedor de serviços de localização para este dispositivo. O acesso local pode ser modificado nas configurações de localização."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Se você negar essa permissão, recursos básicos do seu dispositivo poderão não funcionar mais como deveriam."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicável por política"</string>
+ <string name="loading" msgid="7811651799620593731">"Carregando…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todas as permissões"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Outros recursos do app"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitação de permissão"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de tela detectada"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar a configuração dessa permissão, você deve primeiro desativar a sobreposição de tela em \"Config.\" &gt; \"Apps\""</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configurações"</string>
+</resources>
diff --git a/res/values-pt-rPT-television/strings.xml b/res/values-pt-rPT-television/strings.xml
new file mode 100644
index 00000000..306e0661
--- /dev/null
+++ b/res/values-pt-rPT-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Recusar e não perguntar novamente"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Pode depois alterar esta definição mais tarde em Definições &gt; Aplicações"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar aplicações do sistema"</string>
+</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index dbaf23c5..f38aac62 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</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_blocked_profile_owner" msgid="5006234166226562439">"Esta aplicação é necessária para o seu perfil <xliff:g id="USERNAME">%1$s</xliff:g> e não pode ser desinstalada."</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_blocked_profile_owner" msgid="5397102354360532069">"O perfil de trabalho 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="uninstall_failed_msg" msgid="8969754702803951175">"Não foi possível desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Acesso ao Dispositivo"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Esta atualização não requer novas permissões."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Pretende conceder as seguintes permissões? Permitirão acesso a:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Recusar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Pretende permitir que o <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicações"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permissões da aplicação"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Nunca perguntar novamente"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sem autorizações"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Autorizações adicionais"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Mais <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Esta aplicação foi concebida para uma versão mais antiga do Android. Negar autorização pode fazer com que deixe de funcionar como pretendido."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicações autorizadas"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Autorizações de <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Sem aplicações"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Definições de localização"</string>
+ <string name="location_warning" msgid="8778701356292735971">"O <xliff:g id="APP_NAME">%1$s</xliff:g> é um fornecedor de serviços de localização para este dispositivo. É possível modificar o acesso à localização a partir das definições de localização."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Se negar esta autorização, as funcionalidades básicas do seu dispositivo podem deixar de funcionar corretamente."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Imposta pela política"</string>
+ <string name="loading" msgid="7811651799620593731">"A carregar…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todas as autorizações"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Outras capacidades de aplicações"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Pedido de autorização"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de ecrã detetada"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar esta definição de autorização, primeiro tem de desativar a sobreposição do ecrã em Definições &gt; Aplicações"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir definições"</string>
</resources>
diff --git a/res/values-pt-television/strings.xml b/res/values-pt-television/strings.xml
new file mode 100644
index 00000000..4c29ba52
--- /dev/null
+++ b/res/values-pt-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="grant_dialog_button_deny_dont_ask_again" msgid="5694574989758145558">"Negar e não perguntar novamente"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"É possível alterar isso mais tarde em \"Config.\" &gt; \"Apps\""</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Mostrar apps do sistema"</string>
+</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2f2c7f9f..76be7fc3 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Desinstalação concluída."</string>
<string name="uninstall_failed" msgid="631122574306299512">"Desinstalação malsucedida."</string>
<string name="uninstall_failed_device_policy_manager" msgid="3493789239037852035">"Não é possível desinstalar, pois este pacote é um admin. de dispositivos ativo."</string>
- <string name="uninstall_blocked_profile_owner" msgid="5006234166226562439">"O app é necessário para seu perfil <xliff:g id="USERNAME">%1$s</xliff:g> e não pode ser desinstalado."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Não é possível desinstalar este pacote porque ele é um administrador de dispositivo ativo para o usuário <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Este app é necessário para seu perfil de trabalho e não pode ser desinstalado."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"O app é exigido pelo administrador do dispositivo e não pode ser desinstalado."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Gerenciar os administradores do dispositivo"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Não foi possível desinstalar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Acesso ao dispositivo"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Esta atualização não requer novas permissões."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Deseja conceder as permissões a seguir? Será concedido acesso para:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Permitir"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Negar"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> de <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Permitir que o <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Apps"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permissões do app"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Não perguntar novamente"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Sem permissão"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permissões adicionais"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Mais <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Este app foi projetado para uma versão anterior do Android. Negar a permissão pode fazer com que ele deixe de funcionar conforme esperado."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"executar uma ação desconhecida"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> apps permitidos"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ocultar sistema"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permissões para <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nenhum app"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Configurações de localização"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> é um provedor de serviços de localização para este dispositivo. O acesso local pode ser modificado nas configurações de localização."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Se você negar essa permissão, recursos básicos do seu dispositivo poderão não funcionar mais como deveriam."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicável por política"</string>
+ <string name="loading" msgid="7811651799620593731">"Carregando…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Todas as permissões"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Outros recursos do app"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitação de permissão"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Sobreposição de tela detectada"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Para alterar a configuração dessa permissão, você deve primeiro desativar a sobreposição de tela em \"Config.\" &gt; \"Apps\""</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Abrir configurações"</string>
</resources>
diff --git a/res/values-ro-television/strings.xml b/res/values-ro-television/strings.xml
new file mode 100644
index 00000000..67514279
--- /dev/null
+++ b/res/values-ro-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Respingeți și nu se mai întreabă"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Puteți modifica permisiunile ulterior din Setări &gt; Aplicații"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Afișează aplicațiile de sistem"</string>
+</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index dacc7b33..338d93bb 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -20,63 +20,64 @@
<string name="next" msgid="3057143178373252333">"Înainte"</string>
<string name="install" msgid="5896438203900042068">"Instalaţi"</string>
<string name="done" msgid="3889387558374211719">"Terminat"</string>
- <string name="security_settings_desc" msgid="2706691034244052604">"Permiteţi acestei aplicaţii să:"</string>
- <string name="cancel" msgid="8360346460165114585">"Anulaţi"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"Permiteţi acestei aplicații să:"</string>
+ <string name="cancel" msgid="8360346460165114585">"Anulați"</string>
<string name="unknown" msgid="4742479012767208045">"Necunoscut"</string>
<string name="installing" msgid="8613631001631998372">"În curs de instalare..."</string>
<string name="install_done" msgid="3682715442154357097">"Aplicaţie instalată."</string>
- <string name="install_confirm_question" msgid="7295206719219043890">"Doriţi să instalaţi această aplicaţie? Aceasta va avea acces la:"</string>
- <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Doriţi să instalaţi această aplicaţie? Aplicaţia nu solicită un acces special."</string>
- <string name="install_confirm_question_update" msgid="4624159567361487964">"Doriţi să instalaţi o actualizare pentru această aplicaţie existentă? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string>
- <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Doriţi să instalaţi o actualizare pentru această aplicaţie încorporată? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string>
- <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Doriţi să instalaţi o actualizare pentru această aplicaţie existentă? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string>
- <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Doriţi să instalaţi o actualizare pentru această aplicaţie încorporată? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string>
+ <string name="install_confirm_question" msgid="7295206719219043890">"Doriţi să instalaţi această aplicație? Aceasta va avea acces la:"</string>
+ <string name="install_confirm_question_no_perms" msgid="5918305641302873520">"Doriţi să instalaţi această aplicație? Aplicaţia nu solicită un acces special."</string>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Doriţi să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Doriţi să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Aplicaţia actualizată va avea acces la:"</string>
+ <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"Doriţi să instalaţi o actualizare pentru această aplicație existentă? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string>
+ <string name="install_confirm_question_update_system_no_perms" msgid="7676593512694724374">"Doriţi să instalaţi o actualizare pentru această aplicație încorporată? Datele existente nu vor fi pierdute. Actualizarea nu are nevoie de acces special."</string>
<string name="install_failed" msgid="6579998651498970899">"Aplicaţia nu este instalată."</string>
<string name="install_failed_invalid_apk" msgid="1287935707565682604">"Pachetul pare a fi deteriorat."</string>
- <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Un pachet cu acelaşi nume şi cu o semnătură conflictuală este deja instalat."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Un pachet cu același nume și cu o semnătură conflictuală este deja instalat."</string>
<string name="install_failed_older_sdk" msgid="7947925824732917665">"Pachetul funcţionează numai pe versiunile Android mai recente."</string>
- <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Această aplicaţie nu este compatibilă cu tableta dvs."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Această aplicație nu este compatibilă cu tableta dvs."</string>
<string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Aplicația nu este compatibilă cu televizorul."</string>
- <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Această aplicaţie nu este compatibilă cu telefonul dvs."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Această aplicație nu este compatibilă cu telefonul dvs."</string>
<string name="install_failed_file_not_found" msgid="1958430133396322619">"Pachetul specificat a fost şters înainte ca instalarea să poată fi finalizată."</string>
- <string name="install_failed_verify_failed" msgid="5567372439890440205">"Pachetul nu a trecut de verificare şi nu pot fi instalat."</string>
- <string name="install_failed_verify_timeout" msgid="7083090219270140373">"La verificarea pachetului timpul limită a expirat. Încercaţi să instalaţi din nou ulterior."</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"Pachetul nu a trecut de verificare și nu pot fi instalat."</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"La verificarea pachetului timpul limită a expirat. Încercați să instalaţi din nou ulterior."</string>
<string name="install_failed_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_title" msgid="2855558586206583032">"Instalare blocată"</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="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_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="ok" msgid="3468756155452870475">"OK"</string>
<string name="settings" msgid="6743583734099755409">"Setări"</string>
- <string name="allow_source_dlg_title" msgid="7568985073502399415">"Sursă nouă pentru aplicaţii"</string>
- <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> doreşte să instaleze alte aplicaţii.\n\nPermiteţi acest lucru acum şi pe viitor?"</string>
- <string name="manage_applications" msgid="4033876279091996596">"Gestionaţi aplicaţii"</string>
- <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Înlocuiţi aplicaţia?"</string>
- <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Aplicaţia pe care o instalaţi va înlocui o altă aplicaţie.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string>
- <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Aceasta este o aplicaţie de sistem.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"Sursă nouă pentru aplicații"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> doreşte să instaleze alte aplicații.\n\nPermiteţi acest lucru acum și pe viitor?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"Gestionați aplicații"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Înlocuiţi aplicația?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Aplicaţia pe care o instalaţi va înlocui o altă aplicație.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Aceasta este o aplicație de sistem.\n \nToate datele dvs. anterioare de utilizator vor fi salvate."</string>
<string name="out_of_space_dlg_title" msgid="7843674437613797326">"Spaţiu de stocare insuficient"</string>
- <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată. Eliberaţi spaţiu şi încercaţi din nou."</string>
+ <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată. Eliberaţi spaţiu și încercaţi din nou."</string>
<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="uninstall_application_title" msgid="1860074100811653963">"Dezinstalaţi aplicaţia"</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="uninstall_application_title" msgid="1860074100811653963">"Dezinstalaţi aplicația"</string>
<string name="uninstall_update_title" msgid="4146940097553335390">"Dezinstalaţi actualizarea"</string>
- <string name="uninstall_activity_text" msgid="6680688689803932550">" <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> face parte din următoarea aplicaţie:"</string>
- <string name="uninstall_application_text" msgid="6691975835951187030">"Doriţi să dezinstalaţi această aplicaţie?"</string>
- <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Doriţi să dezinstalaţi această aplicaţie pentru "<b>"toţi"</b>" utilizatorii? Aplicaţia şi datele acesteia vor fi eliminate de la "<b>"toţi"</b>" utilizatorii de pe acest dispozitiv."</string>
+ <string name="uninstall_activity_text" msgid="6680688689803932550">" <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> face parte din următoarea aplicație:"</string>
+ <string name="uninstall_application_text" msgid="6691975835951187030">"Doriţi să dezinstalaţi această aplicație?"</string>
+ <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Doriţi să dezinstalaţi această aplicație pentru "<b>"toţi"</b>" utilizatorii? Aplicaţia și datele acesteia vor fi eliminate de la "<b>"toţi"</b>" utilizatorii de pe acest dispozitiv."</string>
<string name="uninstall_application_text_user" msgid="8766882355635485733">"Dezinstalați această aplicație pentru utilizatorul <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
- <string name="uninstall_update_text" msgid="2056387942084605027">"Doriţi să înlocuiţi această aplicaţie cu versiunea din fabrică?"</string>
+ <string name="uninstall_update_text" msgid="2056387942084605027">"Doriţi să înlocuiţi această aplicație cu versiunea din fabrică?"</string>
<string name="uninstalling" msgid="5556217435895938250">"În curs de dezinstalare..."</string>
<string name="uninstall_done" msgid="3792487853420281888">"Dezinstalare finalizată."</string>
<string name="uninstall_failed" msgid="631122574306299512">"Dezinstalare nefinalizată."</string>
<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_blocked_profile_owner" msgid="5006234166226562439">"Aplicație necesară pentru profilul dvs. <xliff:g id="USERNAME">%1$s</xliff:g>. Nu poate fi dezinstalată."</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_blocked_profile_owner" msgid="5397102354360532069">"Aplicația este necesară pentru profilul de serviciu și nu poate fi dezinstalată."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Aplicație necesară administratorului dispozitivului. Nu poate fi dezinstalată."</string>
- <string name="manage_device_administrators" msgid="891392489300312370">"Gestionaţi administratori de dispozitive"</string>
+ <string name="manage_device_administrators" msgid="891392489300312370">"Gestionați administratori de dispozitive"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi dezinstalată."</string>
<string name="Parse_error_dlg_title" msgid="6079580916889596257">"Erori de analizare"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"A apărut o problemă la analizarea pachetului."</string>
@@ -86,4 +87,36 @@
<string name="devicePerms" msgid="6733560207731294504">"Acces la dispozitiv"</string>
<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_allow" msgid="4616529495342337095">"Permiteți"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuzați"</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="5209102765005869454">"Permiteți ca <xliff:g id="APP_NAME">%1$s</xliff:g> să <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplicații"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Permisiuni pentru aplicație"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Nu mai întreba niciodată"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Fără permisiuni"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Permisiuni suplimentare"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="few">Încă <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Încă <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Încă <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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> (de) aplicații au această permisiune"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Afișați aplicațiile de sistem"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ascundeți aplicațiile de sistem"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Permisiuni pentru <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Nicio aplicație"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Setări privind locația"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> este un furnizor de servicii de localizare pentru acest dispozitiv. Accesul la locație poate fi modificat din setările privind locația."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Dacă refuzați această permisiune, este posibil ca funcțiile de bază ale dispozitivului să nu mai funcționează corespunzător."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Aplicată conform politicii"</string>
+ <string name="loading" msgid="7811651799620593731">"Se încarcă..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Toate permisiunile"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Alte funcții ale aplicației"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Solicitare de permisiune"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"S-a detectat suprapunerea pe ecran"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ca să schimbați această setare pentru permisiuni, mai întâi trebuie să dezactivați suprapunerea pe ecran din Setări &gt; Aplicații"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Deschideți setările"</string>
</resources>
diff --git a/res/values-ru-television/strings.xml b/res/values-ru-television/strings.xml
new file mode 100644
index 00000000..ef77002f
--- /dev/null
+++ b/res/values-ru-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Чтобы изменить разрешения, откройте \"Настройки\" и выберите \"Приложения\"."</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Показать системные приложения"</string>
+</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 755ca615..21ae1fe6 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Это приложение необходимо для вашего профиля <xliff:g id="USERNAME">%1$s</xliff:g>. Его нельзя удалить."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Невозможно удалить этот пакет: он выбран для администрирования устройства в аккаунте <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Это приложение необходимо для работы и потому не может быть удалено."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Это приложение указано администратором как обязательное. Его нельзя удалить."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Настройки администрирования"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Не удалось удалить приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Доступ к устройству"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Установка этого обновления не требует новых разрешений."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Предоставить следующие разрешения? Вот к чему будет получен доступ:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Разрешить"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Отклонить"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> из <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Разрешить приложению \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Приложения"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Разрешения приложений"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Больше не запрашивать"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Разрешения не требуются"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Ещё разрешения"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Ещё <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Скрыть системные процессы"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Разрешения (<xliff:g id="PERMISSION">%1$s</xliff:g>)"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Нет приложений"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Настройки геоданных"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> является поставщиком услуг геолокации для этого устройства. Вы можете изменить параметры доступа в настройках геоданных."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Если вы не предоставите это разрешение, основные функции устройства могут работать неправильно."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"В соответствии с политикой"</string>
+ <string name="loading" msgid="7811651799620593731">"Загрузка…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Все разрешения"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Что ещё может приложение"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Запрос разрешений"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Обнаружены наложения"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Чтобы предоставить или отменить разрешение, сначала отключите наложения. Для этого нажмите \"Настройки &gt; Приложения\"."</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Открыть настройки"</string>
</resources>
diff --git a/res/values-si-rLK-television/strings.xml b/res/values-si-rLK-television/strings.xml
new file mode 100644
index 00000000..9f058ed2
--- /dev/null
+++ b/res/values-si-rLK-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"පද්ධති යෙදුම් පෙන්වන්න"</string>
+</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 5666300a..33df7e86 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ඔබගේ <xliff:g id="USERNAME">%1$s</xliff:g> පැතිකඩ සඳහා මෙම යෙදුම අවශ්‍ය වේ එම නිසා අස්ථාපනය කළ නොහැක."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"පැකේජය <xliff:g id="USERNAME">%1$s</xliff:g> පරිශීලකයා හට සක්‍රිය උපාංග කලමනාකරුවෙකු වන නිසා, මෙය ස්ථාපිත කිරීම ඉවත් කළ නොහැක."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"ඔබේ කාර්ය පැතිකඩ සඳහා මෙම යෙදුම අවශ්‍ය වන අතර අස්ථාපනය කළ නොහැකිය."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ඔබගේ උපාංගයේ පාලකයාට මෙම යෙදුම අවශ්‍ය වේ එම නිසා අස්ථාපනය කළ නොහැක."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"උපාංග පරිපාලකයන් කළමනාකරණය කරන්න"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> අස්ථාපනය කල නොහැක."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"උපාංගය ප්‍රවේශය"</string>
<string name="no_new_perms" msgid="6657813692169565975">"මෙම යාවත්කාලිනයට අලුත් අවසරයන් අවශ්‍ය නොවේ."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"ඔබට පහත සඳහන් අවසර පිරිනැමීමට අවශ්‍ය ද? එය පහත සඳහා ප්‍රවේශය ලබා ගනියි:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"ඉඩ දෙන්න"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ප්‍රතික්ෂේප කරන්න"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> න් <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට <xliff:g id="ACTION">%2$s</xliff:g> ට ඉඩ දෙන්නද?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"යෙදුම්"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"යෙදුම් අවසර"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"නැවත කිසිදා නොඅසන්න"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"අවසර නොමැත"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"අතිරේක අවසර"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">.තව <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">.තව <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"පද්ධතිය පෙන්වන්න"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"පද්ධතිය සඟවන්න"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> අවසර"</string>
+ <string name="no_apps" msgid="1965493419005012569">"යෙදුම් නොමැත"</string>
+ <string name="location_settings" msgid="1774875730854491297">"ස්ථාන සැකසීම්"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> මෙම උපාංගය සඳහා ස්ථාන සේවාවන් සපයන්නෙකු වේ. ස්ථාන ප්‍රවේශය ස්ථාන සැකසීම් වෙතින් වෙනස් කළ හැක."</string>
+ <string name="system_warning" msgid="7103819124542305179">"ඔබ මෙම අවසරය ප්‍රතික්ෂේප කරන්නේ නම්, සමහර යෙදුම් බලාපොරොත්තු පරිදි ක්‍රියා නොකරනු ඇත."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"ප්‍රතිපත්තිය මඟින් බලාත්මක කරයි"</string>
+ <string name="loading" msgid="7811651799620593731">"පූරණය කරමින්…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"සියලු අවසර"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"වෙනත් යෙදුම් හැකියාවන්"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"අවසර ඉල්ලීම"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"තිර උඩැතිරියක් අනාවරණය කරන ලදි"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"මෙම අවසර සැකසීම වෙනස් කිරීම සඳහා, ඔබට මුලින්ම සැකසීම් &gt; යෙදුම් වෙතින් තිර උඩැතිරිය අක්‍රිය කර යුතුයි"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"සැකසීම් විවෘත කරන්න"</string>
</resources>
diff --git a/res/values-sk-television/strings.xml b/res/values-sk-television/strings.xml
new file mode 100644
index 00000000..7326f155
--- /dev/null
+++ b/res/values-sk-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Zamietnuť a nabudúce sa nepýtať"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Neskôr to môžete zmeniť v časti Nastavenia &gt; Aplikácie"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Zobraziť systémové aplikácie"</string>
+</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index ab61ac72..93f55792 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Odinštalovanie bolo dokončené."</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_blocked_profile_owner" msgid="5006234166226562439">"Táto aplikácia sa vyžaduje pre váš profil <xliff:g id="USERNAME">%1$s</xliff:g> a nie je ju možné odinštalovať."</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_blocked_profile_owner" msgid="5397102354360532069">"Táto aplikácia sa vyžaduje pre váš pracovný 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="uninstall_failed_msg" msgid="8969754702803951175">"Aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> sa nepodarilo odinštalovať."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Prístup k zariadeniu"</string>
<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_allow" msgid="4616529495342337095">"Povoliť"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Odmietnuť"</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="5209102765005869454">"Povoliť aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikácie"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Povolenia aplikácií"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Túto otázku už nezobrazovať"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Žiadne povolenia"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Ďalšie povolenia"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalšie</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalšieho</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ďalších</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ďalšie</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Táto aplikácia bola navrhnutá pre staršiu verziu systému Android. Odmietnutie povolenia môže spôsobiť, že nebude optimálne fungovať."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"umožňuje vykonať neznámu akciu"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Povolené: <xliff:g id="COUNT_0">%1$d</xliff:g> z <xliff:g id="COUNT_1">%2$d</xliff:g> aplikácií"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Zobraziť systémové aplikácie"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Skryť systémové aplikácie"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Povolenia <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Žiadne aplikácie"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Nastavenia polohy"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je poskytovateľ služieb určovania polohy tohto zariadenia. Prístup k polohe môžete upraviť v nastaveniach polohy."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ak toto povolenie zamietnete, základné funkcie vášho zariadenia nemusia pracovať podľa očakávaní."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Vynútené pravidlom"</string>
+ <string name="loading" msgid="7811651799620593731">"Načítava sa…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Všetky povolenia"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Ďalšie možnosti aplikácie"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Žiadosť o povolenie"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Bolo zistené prekrytie obrazovky"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ak chcete zmeniť nastavenie tohto povolenia, musíte najprv v časti Nastavenia &gt; Aplikácie vypnúť prekrytie obrazovky"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Otvoriť nastavenia"</string>
</resources>
diff --git a/res/values-sl-television/strings.xml b/res/values-sl-television/strings.xml
new file mode 100644
index 00000000..d5ca8680
--- /dev/null
+++ b/res/values-sl-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Zavrni in ne sprašuj več"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"To lahko pozneje spremenite v »Nastavitve &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">"Prikaz sistemskih aplikacij"</string>
+</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index c4edfff7..9133f769 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Odstranitev je končana."</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_blocked_profile_owner" msgid="5006234166226562439">"Ta aplikacija je potrebna za profil <xliff:g id="USERNAME">%1$s</xliff:g> in je ni mogoče odstraniti."</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_blocked_profile_owner" msgid="5397102354360532069">"Ta aplikacija je potrebna za delovni 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="uninstall_failed_msg" msgid="8969754702803951175">"Aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> ni bilo mogoče odstraniti."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Dostop do naprave"</string>
<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_allow" msgid="4616529495342337095">"Dovoli"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Zavrni"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> od <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Dovolite aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacije"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Dovoljenja za aplikacije"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ne vprašaj nikoli več"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Ni dovoljenj"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Dodatna dovoljenja"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="two">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Še <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ta aplikacija je bila zasnovana za starejšo različico sistema Android. Če dovoljenje zavrnete, lahko preneha delovati, kot bi morala."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"izvedba neznanega dejanja"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Dovoljene aplikacije: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Prikaz sistemskih aplikacij"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Skrivanje sistemskih aplikacij"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Dovoljenja za: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Ni aplikacij"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Nastavitve lokacije"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> je ponudnik lokacijskih storitev za to napravo. Dostop do lokacije je mogoče spremeniti v nastavitvah lokacije."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Če zavrnete to dovoljenje, osnovne funkcije naprave morda ne bodo več delovale, kot bi morale."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Uveljavlja pravilnik"</string>
+ <string name="loading" msgid="7811651799620593731">"Nalaganje …"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Vsa dovoljenja"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Druge zmožnosti aplikacije"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Zahteva za dovoljenje"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Zaznano prekrivanje zaslona"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Če želite spremeniti nastavitev tega dovoljenja, morate najprej izklopiti prekrivanje zaslona v »Nastavitve &gt; Aplikacije«"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Odpri nastavitve"</string>
</resources>
diff --git a/res/values-sq-rAL-television/strings.xml b/res/values-sq-rAL-television/strings.xml
new file mode 100644
index 00000000..68122461
--- /dev/null
+++ b/res/values-sq-rAL-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Refuzo dhe mos pyet përsëri"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Këtë mund ta ndryshosh më vonë te Cilësimet &gt; Aplikacionet"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Shfaq aplikacionet e sistemit"</string>
+</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
new file mode 100644
index 00000000..647ecd1d
--- /dev/null
+++ b/res/values-sq-rAL/strings.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name" msgid="2738748390251381682">"Instaluesi i paketës"</string>
+ <string name="next" msgid="3057143178373252333">"Përpara"</string>
+ <string name="install" msgid="5896438203900042068">"Instalo"</string>
+ <string name="done" msgid="3889387558374211719">"U krye!"</string>
+ <string name="security_settings_desc" msgid="2706691034244052604">"Lejoje këtë aplikacion të:"</string>
+ <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="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>
+ <string name="install_confirm_question_update" msgid="4624159567361487964">"Dëshiron të instalosh një përditësim në këtë aplikacion ekzistues? Të dhënat e tua ekzistuese nuk do të humbin. Aplikacioni i përditësuar do të ketë qasje në:"</string>
+ <string name="install_confirm_question_update_system" msgid="1302330093676416336">"Dëshiron të instalosh një përditësim në këtë aplikacion të integruar? Të dhënat e tua ekzistuese nuk do të humbin. Aplikacioni i përditësuar do të ketë qasje në:"</string>
+ <string name="install_confirm_question_update_no_perms" msgid="4885928136844618944">"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_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_invalid_apk" msgid="1287935707565682604">"Paketa duket se është e dëmtuar."</string>
+ <string name="install_failed_inconsistent_certificates" msgid="1517751954440692054">"Një paketë ekzistuese që mban të njëjtin emër me një nënshkrim kontradiktor, është instaluar tashmë."</string>
+ <string name="install_failed_older_sdk" msgid="7947925824732917665">"Paketa punon vetëm në versionet më të reja \"android\"."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tablet" msgid="7098684468842750800">"Ky aplikacion është i papërshtatshëm me tabletin tënd."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="tv" msgid="1309625657882930450">"Ky aplikacion është i papërshtatshëm me televizorin tënd."</string>
+ <string name="install_failed_cpu_abi_incompatible" product="default" msgid="4433316303249711331">"Ky aplikacion është i papërshtatshëm me telefonin tënd."</string>
+ <string name="install_failed_file_not_found" msgid="1958430133396322619">"Paketa e specifikuar u fshi para se instalimi të përfundonte."</string>
+ <string name="install_failed_verify_failed" msgid="5567372439890440205">"Paketa nuk e kaloi verifikimin dhe nuk mund të instalohet."</string>
+ <string name="install_failed_verify_timeout" msgid="7083090219270140373">"Koha e verifikimit të paketës skadoi. Provo ta instalosh sërish."</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_title" msgid="2855558586206583032">"Instalimi u bllokua"</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="ok" msgid="3468756155452870475">"Në rregull"</string>
+ <string name="settings" msgid="6743583734099755409">"Cilësimet"</string>
+ <string name="allow_source_dlg_title" msgid="7568985073502399415">"Burim i ri për aplikacione"</string>
+ <string name="allow_source_dlg_text" msgid="3927580956764099076">"<xliff:g id="APP_NAME">%1$s</xliff:g> dëshiron të instalojë aplikacione të tjera.\n\nDo e lejosh tani dhe në të ardhmen?"</string>
+ <string name="manage_applications" msgid="4033876279091996596">"Menaxho aplikacionet"</string>
+ <string name="dlg_app_replacement_title" msgid="1232230739563820951">"Të zëvendësohet aplikacioni?"</string>
+ <string name="dlg_app_replacement_statement" msgid="2992911899989907492">"Aplikacioni që po instalon do të zëvendësojë një aplikacion tjetër.\n\nTë gjitha të dhënat e përdoruesit të mëparshëm do të ruhen."</string>
+ <string name="dlg_sys_app_replacement_statement" msgid="1900046590819605929">"Ky është aplikacion sistemi.\n\nTë gjitha të dhënat e tua të mëparshme si përdorues, do të ruhen."</string>
+ <string name="out_of_space_dlg_title" msgid="7843674437613797326">"Nuk ka hapësirë"</string>
+ <string name="out_of_space_dlg_text" msgid="4774775404294282216">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mund të instalohej. Liro pak hapësirë dhe provo përsëri."</string>
+ <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="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>
+ <string name="uninstall_application_text" msgid="6691975835951187030">"Dëshiron ta çinstalosh këtë aplikacion?"</string>
+ <string name="uninstall_application_text_all_users" msgid="5574704453233525222">"Dëshiron ta çinstalosh këtë aplikacion për "<b>"të gjithë"</b>" përdoruesit? Aplikacioni dhe të dhënat e tij do të hiqen nga "<b>"të gjithë"</b>" përdoruesit e pajisjes."</string>
+ <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="2056387942084605027">"Dëshiron ta zëvendësosh këtë aplikacion me versionin e fabrikës?"</string>
+ <string name="uninstalling" msgid="5556217435895938250">"Po e çinstalon…"</string>
+ <string name="uninstall_done" msgid="3792487853420281888">"Çinstalimi përfundoi."</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_blocked_profile_owner" msgid="5397102354360532069">"Ky aplikacion nevojitet për profilin tënd të punës 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mundi të çinstalohej."</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Gabim analize"</string>
+ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"Kishte një problem me analizimin e paketës."</string>
+ <string name="newPerms" msgid="6039428254474104210">"E re"</string>
+ <string name="allPerms" msgid="1024385515840703981">"Të gjitha"</string>
+ <string name="privacyPerms" msgid="1850527049572617">"Privatësia"</string>
+ <string name="devicePerms" msgid="6733560207731294504">"Qasja në pajisje"</string>
+ <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_allow" msgid="4616529495342337095">"Lejo"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Refuzo"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> nga <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Të lejohet apl. \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" të realizojë veprimin \"<xliff:g id="ACTION">%2$s</xliff:g>\"?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Aplikacionet"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Lejet e aplikacionit"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Mos pyet më asnjëherë"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Nuk ka leje"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Lejet shtesë"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> të tjera</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> të tjera</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ky aplikacion është projektuar për një version më të vjetër të Android. Refuzimi i lejeve mund të shkaktojë që ai të mos funksionojë më siç duhet."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"kryej një veprim të panjohur"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> aplikacione nga <xliff:g id="COUNT_1">%2$d</xliff:g> të tilla u lejuan"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Shfaq sistemin"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Fshih sistemin"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Lejet për <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Asnjë aplikacion"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Cilësimet e vendndodhjeve"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> është një ofrues i shërbimeve të vendndodhjes për këtë pajisje. Qasja e vendndodhjes mund të modifikohet nga cilësimet e vendndodhjes."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Nëse e refuzon këtë leje, funksionet bazë të pajisjes tënde mund të mos funksionojnë më siç pritet."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Zbatuar nga politika"</string>
+ <string name="loading" msgid="7811651799620593731">"Po ngarkon..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Të gjitha lejet"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Kapacitete të tjera të aplikacionit"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Kërkesa e lejes"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Mbivendosja e ekranit u zbulua"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Për të ndryshuar këtë cilësim të lejes, në fillim duhet të çaktivizosh mbivendosjen e ekranit nga Cilësimet &gt; Aplikacionet"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Hap cilësimet"</string>
+</resources>
diff --git a/res/values-sr-television/strings.xml b/res/values-sr-television/strings.xml
new file mode 100644
index 00000000..01d4b9f1
--- /dev/null
+++ b/res/values-sr-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Прикажи системске апликације"</string>
+</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index c0b3acb0..0d1af776 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -74,11 +74,12 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Ова апликација је потребна за профил <xliff:g id="USERNAME">%1$s</xliff:g> и не може да се деинсталира."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Није могуће деинст. јер је пакет активни администратор уређаја за корисника <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Ова апликација је потребна за профил за Work и не може да се деинсталира."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Ова апликација је потребна администратору уређаја и не може да се деинсталира."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Управљај администраторима уређаја"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Није могуће деинсталирати апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Грешка приликом рашчлањивања"</string>
+ <string name="Parse_error_dlg_title" msgid="6079580916889596257">"Грешка при рашчлањивању"</string>
<string name="Parse_error_dlg_text" msgid="7623286983621067011">"Дошло је до проблема при рашчлањивању пакета."</string>
<string name="newPerms" msgid="6039428254474104210">"Ново"</string>
<string name="allPerms" msgid="1024385515840703981">"Све"</string>
@@ -86,4 +87,36 @@
<string name="devicePerms" msgid="6733560207731294504">"Приступ уређају"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Ово ажурирање не захтева нове дозволе."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Да ли желите да одобрите следеће дозволе? Одобрићете приступ за:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дозволи"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Одбиј"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>. од <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Желите ли да дозволите да услуга <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Апликације"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Дозволе за апликације"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Никада више не тражи"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Нема дозвола"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Додатне дозволе"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">још <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">још <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">још <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Сакриј системске"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Дозволе за апликацију <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Нема апликација"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Подешавања локације"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> пружа услуге локације за овај уређај. Приступ локацији можете да измените у подешавањима локације."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Ако одбијете ову дозволу, основне функције уређаја можда неће више функционисати исправно."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Примењује се у складу са смерницама"</string>
+ <string name="loading" msgid="7811651799620593731">"Учитава се…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Све дозволе"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Остале могућности апликације"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Захтев за дозволу"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Откривен је елемент који прекрива садржај екрана"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Да бисте променили подешавање ове дозволе, прво треба да искључите елемент који прекрива садржај екрана у одељку Подешавања &gt; Апликације"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Отвори подешавања"</string>
</resources>
diff --git a/res/values-sv-television/strings.xml b/res/values-sv-television/strings.xml
new file mode 100644
index 00000000..178a011c
--- /dev/null
+++ b/res/values-sv-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Neka och fråga inte igen"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Du kan ändra detta senare i Inställningar &gt; Appar"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Visa systemappar"</string>
+</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 53117bb0..86c19317 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Avinstallationen har slutförts."</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_blocked_profile_owner" msgid="5006234166226562439">"Appen behövs i profilen för <xliff:g id="USERNAME">%1$s</xliff:g> och kan inte avinstalleras."</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_blocked_profile_owner" msgid="5397102354360532069">"Appen behövs för jobbprofilen 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="uninstall_failed_msg" msgid="8969754702803951175">"Det gick inte att avinstallera <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Enhetsåtkomst"</string>
<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_allow" msgid="4616529495342337095">"Tillåt"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Neka"</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="5209102765005869454">"Vill du tillåta <xliff:g id="APP_NAME">%1$s</xliff:g> att <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Appar"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Appens behörigheter"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Fråga aldrig igen"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Inga behörigheter"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Ytterligare behörigheter"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> till</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> till</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Den här appen utformades för en äldre version av Android. Om du nekar appen behörighet kan det hända att den inte längre fungerar som den ska."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"utför en okänd åtgärd"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> av <xliff:g id="COUNT_1">%2$d</xliff:g> appar tillåts"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Visa systemet"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Dölj systemet"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> behörigheter"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Inga appar"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Platsinställningar"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> är en platstjänstleverantör för enheten. Platsåtkomsten kan redigeras i platsinställningarna."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Om du nekar appen behörighet kan det hända att grundläggande funktioner på enheten inte fungerar som de ska."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Enligt policyn"</string>
+ <string name="loading" msgid="7811651799620593731">"Läser in …"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Alla behörigheter"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Andra appbehörigheter"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Begäran om behörighet"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Skärmöverlagring har upptäckts"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Innan du kan ändra den här behörighetsinställningen måste du inaktivera skärmöverlagring under Inställningar &gt; Appar"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Öppna inställningarna"</string>
</resources>
diff --git a/res/values-sw-television/strings.xml b/res/values-sw-television/strings.xml
new file mode 100644
index 00000000..fb169fc0
--- /dev/null
+++ b/res/values-sw-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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_how_to_change" msgid="615414835189256888">"Unaweza kubadilisha hatua hii baadaye kwenye Mipangilio na Programu"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Onyesha programu za mfumo"</string>
+</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index fa534401..eb9c1474 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Imesaniduliwa."</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_blocked_profile_owner" msgid="5006234166226562439">"Programu hii inahitajika kwa ajili ya wasifu wako <xliff:g id="USERNAME">%1$s</xliff:g> na haiwezi kuondolewa."</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_blocked_profile_owner" msgid="5397102354360532069">"Programu hii inahitajika kwa wasifu wako wa kazi 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> haingeweza kusaniduliwa."</string>
@@ -86,4 +87,35 @@
<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_allow" msgid="4616529495342337095">"Ruhusu"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Kataa"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> kati ya <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Je, ungependa kuruhusu <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Programu"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Ruhusa za programu"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Usiulize tena"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Hakuna ruhusa"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Ruhusa za ziada"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> zaidi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> zaidi</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Programu hii iliundwa kwa ajili ya toleo la zamani la Android. Kuinyima ruhusa kunaweza kusababisha iache kutenda kazi kama ilivyokusudiwa."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"kutekeleza kitendo kisichojulikana"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Inaruhusu programu <xliff:g id="COUNT_0">%1$d</xliff:g> kati ya <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Onyesha mfumo"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Ficha mfumo"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Ruhusa <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Hakuna programu"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Mipangilio ya Mahali"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> hutoa huduma za mahali kwenye kifaa hiki. Idhini ya kufikia mahali inaweza kurekebishwa katika mipangilio ya mahali."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Usipokubali ruhusa hii, huenda vipengele vya msingi vya kifaa chako havitafanya kazi kama ilivyokusudiwa."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Hutekelezwa na sera"</string>
+ <string name="loading" msgid="7811651799620593731">"Inapakia…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Ruhusa zote"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Uwezo mwingine wa programu"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Ombi la idhini"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Imetambua tangazo lililowekelewa juu ya skrini"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ili kubadilisha mpangilio huu wa ruhusa, ni lazima kwanza uzime tangazo lililowekelewa juu ya skrini kwenye Mipangilio na Programu"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Fungua mipangilio"</string>
</resources>
diff --git a/res/values-ta-rIN-television/strings.xml b/res/values-ta-rIN-television/strings.xml
new file mode 100644
index 00000000..31973a5f
--- /dev/null
+++ b/res/values-ta-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"முறைமைப் பயன்பாடுகளைக் காட்டு"</string>
+</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 071f4507..6c16c03d 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"உங்கள் <xliff:g id="USERNAME">%1$s</xliff:g> சுயவிவரத்திற்கு இந்தப் பயன்பாடு தேவைப்படுவதால், நிறுவல்நீக்க முடியாது."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"இந்தத் தொகுப்பு <xliff:g id="USERNAME">%1$s</xliff:g> பயனருக்கான செயலில் உள்ள சாதன நிர்வாகியாக இருப்பதால், நிறுவல் நீக்க முடியாது."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"உங்கள் பணி சுயவிவரத்திற்கு இந்தப் பயன்பாடு தேவைப்படுவதால், அதை நிறுவல்நீக்க முடியாது."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"சாதன நிர்வாகிக்கு இந்தப் பயன்பாடு தேவைப்படுவதால், நிறுவல்நீக்க முடியாது."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"சாதன நிர்வாகிகளை நிர்வகி"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> பயன்பாட்டை நிறுவல் நீக்க முடியாது."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"சாதன அணுகல்"</string>
<string name="no_new_perms" msgid="6657813692169565975">"இந்தப் புதுப்பிப்பிற்குப் புதிய அனுமதிகள் எதுவும் தேவையில்லை."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"பின்வரும் அனுமதிகளை வழங்க விருப்பமா? அது இதற்கான அணுகலைப் பெறும்:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"அனுமதி"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"நிராகரி"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> செயலுக்கு <xliff:g id="APP_NAME">%1$s</xliff:g>-ஐ அனுமதிக்கவா?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"பயன்பாடுகள்"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"பயன்பாட்டு அனுமதிகள்"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"மீண்டும் கேட்காதே"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"அனுமதிகள் இல்லை"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"கூடுதல் அனுமதிகள்"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">மேலும் <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">மேலும் <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"முறைமையை மறை"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> அனுமதிகள்"</string>
+ <string name="no_apps" msgid="1965493419005012569">"பயன்பாடுகள் இல்லை"</string>
+ <string name="location_settings" msgid="1774875730854491297">"இருப்பிட அமைப்புகள்"</string>
+ <string name="location_warning" msgid="8778701356292735971">"இந்தச் சாதனத்திற்கான இருப்பிடச் சேவைகளின் வழங்குநர் <xliff:g id="APP_NAME">%1$s</xliff:g> ஆகும். இருப்பிட அமைப்புகளிலிருந்து இருப்பிட அணுகலை மாற்றலாம்."</string>
+ <string name="system_warning" msgid="7103819124542305179">"இந்த அனுமதியை நிராகரித்தால், உங்கள் சாதனத்தின் அடிப்படை அம்சங்கள் சரியாகச் செயல்படாமல் போகலாம்."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"கொள்கையின் படி செயல்படுத்தப்பட்டது"</string>
+ <string name="loading" msgid="7811651799620593731">"ஏற்றுகிறது..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"எல்லா அனுமதிகளும்"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"பயன்பாட்டின் பிற திறன்கள்"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"அனுமதி கோரிக்கை"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"திரையின் மேலே செயல்படும் பயன்பாடுகள் கண்டறியப்பட்டன"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"இந்த அனுமதியை மாற்ற, அமைப்புகள் &gt; பயன்பாடுகள் என்பதற்குச் சென்று, திரையின் மேலே செயல்படும் பயன்பாடுகளை முதலில் முடக்கவும்"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"அமைப்புகளைத் திற"</string>
</resources>
diff --git a/res/values-te-rIN-television/strings.xml b/res/values-te-rIN-television/strings.xml
new file mode 100644
index 00000000..5fc27106
--- /dev/null
+++ b/res/values-te-rIN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"సిస్టమ్ అనువర్తనాలను చూపు"</string>
+</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 12c15073..de29a0be 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"మీ <xliff:g id="USERNAME">%1$s</xliff:g> ప్రొఫైల్ కోసం ఈ అనువర్తనం అవసరం, అందువల్ల దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం కుదరదు."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ఈ ప్యాకేజీ <xliff:g id="USERNAME">%1$s</xliff:g> వినియోగదారుకి సక్రియ పరికర నిర్వాహికి అయినందున దీన్ని అన్ఇ. చేయలేరు."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"మీ కార్యాలయ ప్రొఫైల్ కోసం ఈ అనువర్తనం అవసరం, కనుక దీన్ని అన్ఇన్‌స్టాల్ చేయలేరు."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"మీ పరికర నిర్వాహకుడికి ఈ అనువర్తనం అవసరం, అందువల్ల దీన్ని అన్‌ఇన్‌స్టాల్ చేయడం కుదరదు."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"పరికర నిర్వాహకులను నిర్వహించండి"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g>ని అన్‌ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"పరికరం ప్రాప్యత"</string>
<string name="no_new_perms" msgid="6657813692169565975">"ఈ నవీకరణకు కొత్త అనుమతులు అవసరం లేదు."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"మీరు క్రింది అనుమతులను మంజూరు చేయాలనుకుంటున్నారా? ఇది వీటికి ప్రాప్యత పొందుతుంది:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"అనుమతించు"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"తిరస్కరించు"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>లో <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="ACTION">%2$s</xliff:g> <xliff:g id="APP_NAME">%1$s</xliff:g>ని అనుమతించాలా?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"అనువర్తనాలు"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"అనువర్తన అనుమతులు"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"మళ్లీ ఎప్పుడూ అడగవద్దు"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"అనుమతులు లేవు"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"అదనపు అనుమతులు"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">మరో <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">మరో <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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="menu_show_system" msgid="6773743421743728921">"సిస్టమ్‌ను చూపు"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"సిస్టమ్‌ను దాచు"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> అనుమతులు"</string>
+ <string name="no_apps" msgid="1965493419005012569">"అనువర్తనాలు లేవు"</string>
+ <string name="location_settings" msgid="1774875730854491297">"స్థాన సెట్టింగ్‌లు"</string>
+ <string name="location_warning" msgid="8778701356292735971">"ఈ పరికరం కోసం స్థాన సేవల ప్రదాత <xliff:g id="APP_NAME">%1$s</xliff:g>. స్థాన సెట్టింగ్‌ల నుండి స్థాన ప్రాప్యతను సవరించవచ్చు."</string>
+ <string name="system_warning" msgid="7103819124542305179">"మీరు ఈ అనుమతిని నిరాకరిస్తే, మీ పరికర ప్రాథమిక లక్షణాలు ఇకపై ఉద్దేశించిన రీతిలో పని చేయకపోవచ్చు."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"విధానం ద్వారా అమలు చేయబడింది"</string>
+ <string name="loading" msgid="7811651799620593731">"లోడ్ అవుతోంది..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"అన్ని అనుమతులు"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ఇతర అనువర్తన సామర్థ్యాలు"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"అనుమతి అభ్యర్థన"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"స్క్రీన్ అతివ్యాప్తి గుర్తించబడింది"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ఈ అనుమతి సెట్టింగ్‌ను మార్చడానికి, మీరు ముందుగా సెట్టింగ్‌లు &gt; అనువర్తనాల నుండి స్క్రీన్ అతివ్యాప్తిని ఆఫ్ చేయాలి"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"సెట్టింగ్‌లను తెరువు"</string>
</resources>
diff --git a/res/values-television/colors.xml b/res/values-television/colors.xml
new file mode 100644
index 00000000..08209600
--- /dev/null
+++ b/res/values-television/colors.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+ <color name="lb_content_title_text_color">#FFF1F1F1</color>
+ <color name="lb_content_breadcrumb_text_color">#88F1F1F1</color>
+ <color name="lb_content_description_text_color">#88F1F1F1</color>
+ <color name="lb_action_fragment_background">#FF111111</color>
+ <color name="lb_dialog_activity_background">#77000000</color>
+
+ <color name="grant_permissions_background_color">#ff263238</color>
+ <color name="grant_permissions_app_color">@color/grant_permissions_white_text_alpha_100</color>
+ <color name="grant_permissions_progress_color">@color/grant_permissions_white_text_alpha_100</color>
+ <color name="grant_permissions_title_color">@color/grant_permissions_white_text_alpha_70</color>
+ <color name="grant_permissions_body_color">@color/grant_permissions_white_text_alpha_70</color>
+ <color name="grant_permissions_button_color">@color/grant_permissions_white_text_alpha_100</color>
+ <color name="grant_permissions_focus_highlight">#26eeeeee</color>
+
+ <color name="grant_permissions_white_text_alpha_100">@color/off_white</color>
+ <color name="grant_permissions_white_text_alpha_70">#b2eeeeee</color>
+
+ <color name="off_white">#ffeeeeee</color>
+</resources>
diff --git a/res/values-television/dimens.xml b/res/values-television/dimens.xml
new file mode 100644
index 00000000..03038386
--- /dev/null
+++ b/res/values-television/dimens.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <dimen name="grant_permissions_app_icon_size">64dp</dimen>
+ <dimen name="grant_permissions_app_icon_margin_top">19dp</dimen>
+
+ <dimen name="grant_permissions_app_breadcrumb_margin_bottom">3dp</dimen>
+ <dimen name="grant_permissions_app_title_margin_bottom">18dp</dimen>
+ <dimen name="grant_permissions_app_details_margin_bottom">8dp</dimen>
+
+ <dimen name="action_dialog_z">16dp</dimen>
+ <dimen name="action_dialog_padding_left">52dp</dimen>
+ <dimen name="action_dialog_padding_right">40dp</dimen>
+ <dimen name="action_dialog_padding_top">41dp</dimen>
+ <dimen name="action_dialog_padding_bottom">27dp</dimen>
+
+ <dimen name="action_dialog_content_margin_left">24dp</dimen>
+ <dimen name="action_dialog_content_margin_right">32dp</dimen>
+
+ <dimen name="action_dialog_actions_width">304dp</dimen>
+ <dimen name="action_dialog_actions_margin_left">24dp</dimen>
+ <dimen name="action_dialog_actions_margin_top">18dp</dimen>
+
+ <dimen name="action_dialog_button_padding_left">16dp</dimen>
+ <dimen name="action_dialog_button_padding_right">16dp</dimen>
+ <dimen name="action_dialog_button_padding_top">14dp</dimen>
+ <dimen name="action_dialog_button_padding_bottom">15dp</dimen>
+ <dimen name="action_dialog_button_min_height">48dp</dimen>
+</resources>
diff --git a/res/values-television/strings.xml b/res/values-television/strings.xml
new file mode 100644
index 00000000..f1d17469
--- /dev/null
+++ b/res/values-television/strings.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for the dialog button to deny a permission grant and never ask the user again. -->
+ <string name="grant_dialog_button_deny_dont_ask_again">Deny and don\'t ask again</string>
+
+ <!-- Instructional text telling the user how to change permission grants later. -->
+ <string name="grant_dialog_how_to_change">You can change this later in Settings > Apps</string>
+
+ <!-- Template for the current permission from the total number of permissions. -->
+ <string name="current_permission_template">
+ <xliff:g id="current_permission_index" example="1">%1$s</xliff:g> /
+ <xliff:g id="permission_count" example="2">%2$s</xliff:g></string>
+
+ <!-- Preference row title for showing system apps. -->
+ <string name="preference_show_system_apps">Show system apps</string>
+</resources>
diff --git a/res/values-television/styles.xml b/res/values-television/styles.xml
new file mode 100644
index 00000000..5f712f7d
--- /dev/null
+++ b/res/values-television/styles.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+ <style name="PreferenceThemeOverlay.v14.Permissions">
+ <item name="preferenceStyle">@style/Preference.Permissions</item>
+ <item name="preferenceCategoryStyle">@style/Preference.Category.Permissions</item>
+ <item name="switchPreferenceStyle">@style/Preference.SwitchPreference.Permissions</item>
+ </style>
+
+ <style name="Preference.Permissions">
+ <item name="layout">@layout/preference_permissions</item>
+ </style>
+
+ <style name="Preference.Category.Permissions">
+ <item name="layout">@layout/preference_category_material</item>
+ </style>
+
+ <style name="Preference.SwitchPreference.Permissions">
+ <item name="layout">@layout/preference_permissions_switch</item>
+ </style>
+
+</resources>
diff --git a/res/values-television/themes.xml b/res/values-television/themes.xml
new file mode 100644
index 00000000..f6946f68
--- /dev/null
+++ b/res/values-television/themes.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources>
+ <style name="Settings" parent="Theme.Leanback">
+ <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Permissions</item>
+ </style>
+
+ <style name="GrantPermissions" parent="Theme.Leanback">
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:windowAnimationStyle">@style/Animation.Snackbar</item>
+ <item name="android:windowElevation">@dimen/action_dialog_z</item>
+ </style>
+
+ <style name="GrantPermissions.BreadcrumbText">
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">@color/grant_permissions_progress_color</item>
+ </style>
+
+ <style name="GrantPermissions.TitleText">
+ <item name="android:fontFamily">sans-serif-light</item>
+ <item name="android:textSize">24sp</item>
+ <item name="android:textColor">@color/grant_permissions_title_color</item>
+ <item name="android:lineSpacingMultiplier">1.221</item>
+ </style>
+
+ <style name="GrantPermissions.BodyText">
+ <item name="android:fontFamily">sans-serif</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">@color/grant_permissions_body_color</item>
+ <item name="android:lineSpacingMultiplier">1.465</item>
+ </style>
+
+ <style name="GrantPermissions.ActionItem">
+ <item name="android:gravity">left|center_vertical</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">@color/grant_permissions_button_color</item>
+ <item name="android:lineSpacingMultiplier">1</item>
+ <item name="android:background">@drawable/grant_permissions_action_item</item>
+ <item name="android:paddingLeft">@dimen/action_dialog_button_padding_left</item>
+ <item name="android:paddingRight">@dimen/action_dialog_button_padding_right</item>
+ <item name="android:paddingTop">@dimen/action_dialog_button_padding_top</item>
+ <item name="android:paddingBottom">@dimen/action_dialog_button_padding_bottom</item>
+ <item name="android:minHeight">@dimen/action_dialog_button_min_height</item>
+ </style>
+
+ <style name="Animation.Snackbar" parent="@android:style/Animation">
+ <item name="android:windowEnterAnimation">@anim/snackbar_enter</item>
+ <item name="android:windowExitAnimation">@anim/snackbar_exit</item>
+ </style>
+</resources>
diff --git a/res/values-th-television/strings.xml b/res/values-th-television/strings.xml
new file mode 100644
index 00000000..eba9c53e
--- /dev/null
+++ b/res/values-th-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"แสดงแอประบบ"</string>
+</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index e06d23c4..7058a652 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"ต้องใช้แอปนี้สำหรับโปรไฟล์ <xliff:g id="USERNAME">%1$s</xliff:g> ของคุณและไม่สามารถถอนการติดตั้งได้"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"ไม่สามารถถอนการติดตั้ง เนื่องจากปัจจุบันแพ็กเกจนี้ดูแลระบบอุปกรณ์สำหรับผู้ใช้ <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"จำเป็นต้องใช้แอปนี้สำหรับโปรไฟล์งานและไม่สามารถถอนการติดตั้งได้"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"ผู้ดูแลระบบอุปกรณ์กำหนดให้ใช้แอปนี้ และไม่สามารถถอนการติดตั้งได้"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"จัดการโปรแกรมควบคุมอุปกรณ์"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"ไม่สามารถถอดการติดตั้ง <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"การเข้าถึงอุปกรณ์"</string>
<string name="no_new_perms" msgid="6657813692169565975">"การอัปเดตนี้ไม่จำเป็นต้องมีการอนุญาตใหม่"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"คุณต้องการให้อนุญาตรายการต่อไปนี้หรือไม่ ระบบจะให้สิทธิ์การเข้าถึงแก่"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"อนุญาต"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"ปฏิเสธ"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> จาก <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> รายการ"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"อนุญาตให้ <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g> ไหม"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"แอป"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"สิทธิ์ของแอป"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"ไม่ต้องถามอีก"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"ไม่มีสิทธิ์"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"สิทธิ์เพิ่มเติม"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">อีก <xliff:g id="COUNT_1">%1$d</xliff:g> รายการ</item>
+ <item quantity="one">อีก <xliff:g id="COUNT_0">%1$d</xliff:g> รายการ</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"ซ่อนระบบ"</string>
+ <string name="permission_title" msgid="6495415273398916381">"สิทธิ์ในการใช้<xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"ไม่มีแอป"</string>
+ <string name="location_settings" msgid="1774875730854491297">"การตั้งค่าตำแหน่ง"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> เป็นผู้ให้บริการตำแหน่งสำหรับอุปกรณ์นี้ คุณสามารถแก้ไขสิทธิ์เข้าถึงตำแหน่งได้จากการตั้งค่าตำแหน่ง"</string>
+ <string name="system_warning" msgid="7103819124542305179">"หากคุณปฏิเสธสิทธิ์นี้ คุณลักษณะพื้นฐานของอุปกรณ์อาจไม่ทำงานตามที่ควรจะเป็นอีกต่อไป"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"บังคับใช้โดยนโยบาย"</string>
+ <string name="loading" msgid="7811651799620593731">"กำลังโหลด…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"สิทธิ์ทั้งหมด"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"ความสามารถอื่นๆ ของแอป"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"คำขอสิทธิ์"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"ตรวจพบการวางซ้อนหน้าจอ"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"ในการเปลี่ยนแปลงการตั้งค่าสิทธิ์นี้ ก่อนอื่น คุณต้องปิดการวางซ้อนหน้าจอที่การตั้งค่า &gt; แอป"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"เปิดการตั้งค่า"</string>
</resources>
diff --git a/res/values-tl-television/strings.xml b/res/values-tl-television/strings.xml
new file mode 100644
index 00000000..074886db
--- /dev/null
+++ b/res/values-tl-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Tanggihan at huwag nang tatanunging muli"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Mababago mo ito sa ibang pagkakataon sa Mga Setting &gt; Mga App"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Ipakita ang mga app ng system"</string>
+</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index df2b08d9..eb7dbc99 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Natapos ang pag-uninstall."</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_blocked_profile_owner" msgid="5006234166226562439">"Kinakailangan ang app na ito para sa <xliff:g id="USERNAME">%1$s</xliff:g> profile mo at hindi maaaring i-uninstall."</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_blocked_profile_owner" msgid="5397102354360532069">"Kinakailangan ang app na ito sa iyong profile sa trabaho at hindi maaaring i-install."</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="uninstall_failed_msg" msgid="8969754702803951175">"Hindi ma-install ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Access sa Device"</string>
<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_allow" msgid="4616529495342337095">"Payagan"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Tanggihan"</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="5209102765005869454">"Payagan ang <xliff:g id="APP_NAME">%1$s</xliff:g> na <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Mga App"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Mga pahintulot sa app"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Huwag kailanman itanong muli"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Walang mga pahintulot"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Mga karagdagang pahintulot"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> pa</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pa</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ang app na ito ay idinisenyo para sa mas lumang bersyon ng Android. Kapag tinanggihan ang pahintulot, maaaring hindi na ito gumana ayon sa inaasahan."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"gumawa ng hindi kilalang pagkilos"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Pinapayagan ang <xliff:g id="COUNT_0">%1$d</xliff:g> sa <xliff:g id="COUNT_1">%2$d</xliff:g> (na) app"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Ipakita ang system"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Itago ang system"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Mga pahintulot sa <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Walang mga app"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Mga Setting ng Lokasyon"</string>
+ <string name="location_warning" msgid="8778701356292735971">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay isang provider ng mga serbisyo sa lokasyon para sa device na ito. Mababago ang access sa lokasyon mula sa mga setting ng lokasyon."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Kung tatanggihan mo ang pahintulot na ito, maaaring hindi na gumana ang mga pangunahing feature ng iyong device gaya ng inaasahan."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Ipinapatupad sa pamamagitan ng patakaran"</string>
+ <string name="loading" msgid="7811651799620593731">"Naglo-load..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Lahat ng pahintulot"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Iba pang mga kakayahan ng app"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Kahilingan sa pagpapahintulot"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Natukoy ang overlay ng screen"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Upang baguhin ang setting ng pahintulot na ito, kailangan mo munang i-off ang overlay ng screen mula sa Mga Setting &gt; Mga App"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Buksan ang mga setting"</string>
</resources>
diff --git a/res/values-tr-television/strings.xml b/res/values-tr-television/strings.xml
new file mode 100644
index 00000000..ab51750e
--- /dev/null
+++ b/res/values-tr-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Reddet ve bir daha sorma"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bu ayarı daha sonra Ayarlar &gt; Uygulamalar\'dan değiştirebilirsiniz"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Sistem uygulamalarını göster"</string>
+</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 43c4e7e4..6b5437b8 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Kaldırma işlemi tamamlandı."</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_blocked_profile_owner" msgid="5006234166226562439">"Bu uygulama, <xliff:g id="USERNAME">%1$s</xliff:g> profiliniz için gereklidir ve yüklemesi kaldırılamaz."</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_blocked_profile_owner" msgid="5397102354360532069">"Çalışma 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> kaldırılamadı."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Cihaz Erişimi"</string>
<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_allow" msgid="4616529495342337095">"İzin ver"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"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="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasına <xliff:g id="ACTION">%2$s</xliff:g> izni verilsin mi?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Uygulamalar"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Uygulama izinleri"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Bir daha sorma"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"İzin yok"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Ek izinler"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tane daha</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tane daha</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Bu uygulama, Android\'in daha eski bir sürümü için tasarlandı. İznin reddedilmesi, uygulamanın bundan sonra amaçlandığı gibi çalışmamasına neden olabilir."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"bilinmeyen bir işlem gerçekleştirme"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> uygulamaya izin veriliyor"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Sistemi göster"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Sistemi gizle"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izinleri"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Uygulama yok"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Konum Ayarları"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>, bu cihaz için konum hizmetlerinin bir sağlayıcısıdır. Konum erişimi, konum ayarlarından değiştirilebilir."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Bu izni reddederseniz cihazınızın temel özellikleri artık beklendiği gibi çalışmayabilir."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Politika tarafından zorunlu tutuldu"</string>
+ <string name="loading" msgid="7811651799620593731">"Yükleniyor..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Tüm izinler"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Diğer uygulama özellikleri"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"İzin isteği"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran yer paylaşımı tespit edildi"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Bu izin ayarını değiştirmek için ilk olarak Ayarlar &gt; Uygulamalar\'dan ekran yer paylaşımını kapatmanız gerekir"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Ayarları aç"</string>
</resources>
diff --git a/res/values-uk-television/strings.xml b/res/values-uk-television/strings.xml
new file mode 100644
index 00000000..1db8e422
--- /dev/null
+++ b/res/values-uk-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> з <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Показати системні додатки"</string>
+</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 2702bdec..1450c9d6 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -44,7 +44,7 @@
<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="launch" msgid="4826921505917605463">"Відкрити"</string>
<string name="unknown_apps_dlg_title" msgid="2855558586206583032">"Встановл. заблок."</string>
<string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"Задля безпеки на вашому планшеті заблоковане встановлення додатків із невідомих джерел."</string>
<string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"З міркувань безпеки налаштування телевізора блокують встановлення додатків із невідомих джерел."</string>
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"Цей додаток не можна видалити – він потрібен для профілю користувача <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"Не вдається видалити, оскільки цей пакет керує пристроєм користувача <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"Цей додаток не можна видалити – він потрібен для вашого робочого профілю."</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"Цей додаток не можна видалити – не дозволяє адміністратор пристрою."</string>
<string name="manage_device_administrators" msgid="891392489300312370">"Керувати адміністраторами пристрою"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"Програму <xliff:g id="APP_NAME">%1$s</xliff:g> неможливо видалити."</string>
@@ -86,4 +87,37 @@
<string name="devicePerms" msgid="6733560207731294504">"Доступ до пристрою"</string>
<string name="no_new_perms" msgid="6657813692169565975">"Для цього оновлення не потрібні нові дозволи."</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"Надати перелічені нижче дозволи? Програма отримає доступ до:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"Дозволити"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Відхилити"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> з <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"Дозволити додатку <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Додатки"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Дозволи додатків"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Більше не запитувати"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Немає дозволів"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Додаткові дозволи"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="few">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="many">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Ще <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"Сховати системні додатки"</string>
+ <string name="permission_title" msgid="6495415273398916381">"Дозволи: <xliff:g id="PERMISSION">%1$s</xliff:g>"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Немає додатків"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Налаштування геоданих"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> є постачальником служб локації для цього пристрою. Доступом до місцезнаходження можна керувати в налаштуваннях геоданих."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Якщо скасувати цей дозвіл, основні функції вашого пристрою можуть працювати неналежним чином."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Застосовується правилом"</string>
+ <string name="loading" msgid="7811651799620593731">"Завантаження…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Усі дозволи"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Інші дозволи додатка"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Запит на дозвіл"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Виявлено накладання на екрані"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Щоб змінити налаштування цього дозволу, спершу вимкніть накладання на екрані в меню \"Налаштування\" &gt; \"Додатки\""</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Відкрити налаштування"</string>
</resources>
diff --git a/res/values-ur-rPK-television/strings.xml b/res/values-ur-rPK-television/strings.xml
new file mode 100644
index 00000000..234ef31a
--- /dev/null
+++ b/res/values-ur-rPK-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"سسٹم ایپس دکھائیں"</string>
+</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index f43aee5e..6e3f17e9 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"یہ ایپ آپ کے <xliff:g id="USERNAME">%1$s</xliff:g> پروفائل کیلئے درکار ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"اَن انسٹال نہیں کیا جا سکتا کیونکہ یہ پیکیج صارف <xliff:g id="USERNAME">%1$s</xliff:g> کیلئے فعال آلہ کا منتظم ہے۔"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"یہ ایپ آپ کے دفتری پروفائل کیلئے درکار ہے اور اسے اَن انسٹال نہیں کیا جا سکتا۔"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"یہ ایپ آپ کے آلہ کے منتظم کو درکار ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"آلہ کے منتظمین کا نظم کریں"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو اَن انسٹال نہیں کیا جا سکا۔"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"آلہ کی رسائی"</string>
<string name="no_new_perms" msgid="6657813692169565975">"اس اپ ڈیٹ کو کوئی نئی اجازتیں درکار نہیں۔"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"کیا آپ مندرجہ ذیل اجازتیں دینا چاہتے ہیں؟ اس سے اس تک رسائی حاصل ہو جائے گی:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"اجازت دیں"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"مسترد کریں"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> از <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو <xliff:g id="ACTION">%2$s</xliff:g> کی اجازت دیں؟"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"ایپس"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"ایپ کی اجازتیں"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"دوبارہ کبھی نہ پوچھیں"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"کوئی اجازتیں نہیں ہیں"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"اضافی اجازتیں"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> مزید</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> مزید</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"سسٹم چھپائیں"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> اجازتیں"</string>
+ <string name="no_apps" msgid="1965493419005012569">"کوئی ایپس نہیں ہیں"</string>
+ <string name="location_settings" msgid="1774875730854491297">"مقام کی ترتیبات"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> اس آلہ کیلئے مقام کی سروسز کا فراہم کنندہ ہے۔ مقام کی رسائی میں مقام کی ترتیبات سے ترمیم کی جا سکتی ہے۔"</string>
+ <string name="system_warning" msgid="7103819124542305179">"اگرآپ اس اجازت کو مسترد کرتے ہیں تو شاید آپ کے آلہ کی بنیادی خصوصیات ٹھیک سے کام نہ کریں۔"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"پالیسی کی طرف سے نافذ کردہ"</string>
+ <string name="loading" msgid="7811651799620593731">"لوڈ ہورہا ہے…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"تمام اجازاتیں"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"دوسری ایپ اہلیتیں"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"اجازت کی درخواست"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"اسکرین اورلے کا پتہ چلا ہے"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"‏اس اجازت کی ترتیب کو تبدیل کرنے کیلئے آپ کو پہلے ترتیبات &gt; Apps سے سکرین اورلے آف کرنا ہوگا"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"ترتیبات کھولیں"</string>
</resources>
diff --git a/res/values-uz-rUZ-television/strings.xml b/res/values-uz-rUZ-television/strings.xml
new file mode 100644
index 00000000..faf8c269
--- /dev/null
+++ b/res/values-uz-rUZ-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Rad etilsin va boshqa so‘ralmasin"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Siz buni keyinroq Sozlamalar &gt; Ilovalar bo‘limi orqali ham o‘zgartirishingiz mumkin"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Tizim ilovalarini ko‘rsatish"</string>
+</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 8d7c42e0..cebee29a 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"O‘chirish yakunlandi."</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_blocked_profile_owner" msgid="5006234166226562439">"Bu ilova sizning <xliff:g id="USERNAME">%1$s</xliff:g> profilingiz uchun kerak va uni olib tashlab bo\'lmaydi."</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_blocked_profile_owner" msgid="5397102354360532069">"Bu ilova ishchi 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="uninstall_failed_msg" msgid="8969754702803951175">"<xliff:g id="APP_NAME">%1$s</xliff:g> o‘chirilmadi."</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Qurilmalardan foydalanish"</string>
<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_allow" msgid="4616529495342337095">"Ruxsat berish"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Rad etish"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga <xliff:g id="ACTION">%2$s</xliff:g> uchun ruxsat berilsinmi?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Ilovalar"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Ilovalar uchun ruxsatlar"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Boshqa so‘ralmasin"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Hech qanday ruxsat talab qilinmaydi"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Qo‘shimcha ruxsatlar"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">Yana <xliff:g id="COUNT_1">%1$d</xliff:g> ta</item>
+ <item quantity="one">Yana <xliff:g id="COUNT_0">%1$d</xliff:g> ta</item>
+ </plurals>
+ <string name="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_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>
+ <string name="location_settings" msgid="1774875730854491297">"Joylashuv sozlamalari"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> bu qurilma uchun joylashuvni aniqlash xizmatini taqdim etuvchi ilova hisoblanadi. Joylashuv ma’lumotlariga kirish vakolatini joylashuv sozlamalaridan o‘zgartirish mumkin."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Agar bu ruxsatni rad qilsangiz, qurilmangizning asosiy funksiyalari bundan buyon kutilganidek ishlamasligi mumkin."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Qoidaga muvofiq"</string>
+ <string name="loading" msgid="7811651799620593731">"Yuklanmoqda…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Barcha ruxsatnomalar"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Ilovaning boshqa imkoniyatlari"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Ruxsatnoma so‘rovi"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Ekran ustidan ochiladigan ilova aniqlandi"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Bu ruxsatnoma parametrini o‘zgartirish uchun avval Sozlamalar &gt; Ilovalar bo‘limidan ekran ustidan ochilish funksiyasini o‘chirib qo‘ying"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Sozlamalarni ochish"</string>
</resources>
diff --git a/res/values-vi-television/strings.xml b/res/values-vi-television/strings.xml
new file mode 100644
index 00000000..fd7282c7
--- /dev/null
+++ b/res/values-vi-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Từ chối và không hỏi lại"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Bạn có thể thay đổi cài đặt này sau trong Cài đặt &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>
+</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 266797da..69bc823b 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -73,8 +73,9 @@
<string name="uninstalling" msgid="5556217435895938250">"Đang gỡ cài đặt..."</string>
<string name="uninstall_done" msgid="3792487853420281888">"Gỡ cài đặt đã hoàn tất."</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à của quản trị viên thiết bị đang hoạt động."</string>
- <string name="uninstall_blocked_profile_owner" msgid="5006234166226562439">"Ứng dụng này là cần thiết cho tiểu sử <xliff:g id="USERNAME">%1$s</xliff:g> của bạn và không thể gỡ cài đặt."</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_blocked_profile_owner" msgid="5397102354360532069">"Ứng dụng này là cần thiết cho hồ sơ Android Work 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="uninstall_failed_msg" msgid="8969754702803951175">"Không thể gỡ cài đặt <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Truy cập thiết bị"</string>
<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_allow" msgid="4616529495342337095">"Cho phép"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"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="5209102765005869454">"Cho phép <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Ứng dụng"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Giấy phép ứng dụng"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Không bao giờ hỏi lại"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Không có quyền"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Quyền khác"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> quyền khác</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> quyền khác</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Ứng dụng này được thiết kế cho các phiên bản Android cũ hơn. Từ chối quyền có thể làm cho ứng dụng không còn hoạt động như mong muốn."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"thực hiện hành động không xác định"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"Đã cho phép <xliff:g id="COUNT_0">%1$d</xliff:g> trong số <xliff:g id="COUNT_1">%2$d</xliff:g> ứng dụng"</string>
+ <string name="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="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>
+ <string name="system_warning" msgid="7103819124542305179">"Nếu bạn từ chối quyền này, các tính năng cơ bản trên thiết bị của bạn có thể không còn hoạt động như dự kiến."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Được thực thi bằng chính sách"</string>
+ <string name="loading" msgid="7811651799620593731">"Đang tải…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Tất cả các quyền"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Các khả năng khác của ứng dụng"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Yêu cầu quyền"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Đã phát hiện lớp phủ màn hình"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Để thay đổi cài đặt quyền này, trước tiên bạn phải tắt lớp phủ màn hình từ Cài đặt &gt; Ứng dụng"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Mở cài đặt"</string>
</resources>
diff --git a/res/values-zh-rCN-television/strings.xml b/res/values-zh-rCN-television/strings.xml
new file mode 100644
index 00000000..be3cdce7
--- /dev/null
+++ b/res/values-zh-rCN-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"显示系统应用"</string>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f71af885..5c1479d1 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"这是您的<xliff:g id="USERNAME">%1$s</xliff:g>个人资料所需的应用,因此无法卸载。"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"无法卸载此软件包,因为它是用户 <xliff:g id="USERNAME">%1$s</xliff:g> 当前使用的设备管理软件包。"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"这是您的工作资料所需的应用,因此无法卸载。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"这是您的设备管理员要求必须安装的应用,因此无法卸载。"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"管理设备管理器"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"无法卸载“<xliff:g id="APP_NAME">%1$s</xliff:g>”。"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"设备相关权限"</string>
<string name="no_new_perms" msgid="6657813692169565975">"新版本不需要任何新的权限。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"要向该应用授予以下权限吗?"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"允许"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒绝"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"第 <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> 项权限(共 <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> 项)"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"要允许<xliff:g id="APP_NAME">%1$s</xliff:g><xliff:g id="ACTION">%2$s</xliff:g>吗?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"应用"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"应用权限"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"不再询问"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"没有权限"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"其他权限"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">另外 <xliff:g id="COUNT_1">%1$d</xliff:g> 项</item>
+ <item quantity="one">另外 <xliff:g id="COUNT_0">%1$d</xliff:g> 项</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"隐藏系统应用"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>权限"</string>
+ <string name="no_apps" msgid="1965493419005012569">"没有应用"</string>
+ <string name="location_settings" msgid="1774875730854491297">"位置信息设置"</string>
+ <string name="location_warning" msgid="8778701356292735971">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”是此设备的一个位置信息服务提供程序。您可以在位置信息设置中修改位置信息使用权。"</string>
+ <string name="system_warning" msgid="7103819124542305179">"如果您拒绝此权限,您设备的基本功能可能会无法正常使用。"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"依据政策强制执行"</string>
+ <string name="loading" msgid="7811651799620593731">"正在加载…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"所有权限"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"其他应用功能"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"权限请求"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"检测到屏幕叠加层"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"要更改此权限设置,您必须首先在“设置”&gt;“应用”中关闭屏幕叠加层"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"打开设置"</string>
</resources>
diff --git a/res/values-zh-rHK-television/strings.xml b/res/values-zh-rHK-television/strings.xml
new file mode 100644
index 00000000..cc6a84df
--- /dev/null
+++ b/res/values-zh-rHK-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"顯示系統應用程式"</string>
+</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a49da2b6..947ba084 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"這是使用者 <xliff:g id="USERNAME">%1$s</xliff:g> 的個人檔案所需的應用程式,因此無法解除安裝。"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"無法解除安裝,因為這個套件是使用者「<xliff:g id="USERNAME">%1$s</xliff:g>」目前使用的裝置管理員。"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"這是您的公司檔案所需的應用程式,因此無法解除安裝。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"這是您的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"管理裝置管理員"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"無法解除安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"裝置存取權"</string>
<string name="no_new_perms" msgid="6657813692169565975">"這項更新不需新權限。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"您想授予下列權限嗎?應用程式將可獲得下列存取權:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"允許"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒絕"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"第 <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g> 個 (共 <xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> 個)"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"允許 <xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"應用程式"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"應用程式權限"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"不再要求輸入"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"沒有權限"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"其他權限"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">還有 <xliff:g id="COUNT_1">%1$d</xliff:g> 個</item>
+ <item quantity="one">還有 <xliff:g id="COUNT_0">%1$d</xliff:g> 個</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"隱藏系統"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>權限"</string>
+ <string name="no_apps" msgid="1965493419005012569">"沒有應用程式"</string>
+ <string name="location_settings" msgid="1774875730854491297">"位置設定"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g>為此裝置提供位置資訊服務。您可以在位置設定中更改位置存取權。"</string>
+ <string name="system_warning" msgid="7103819124542305179">"如果您拒絕這個權限,您的裝置的基本功能可能無法正常運作。"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"由政策強制執行"</string>
+ <string name="loading" msgid="7811651799620593731">"正在載入…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"所有權限"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"其他應用程式功能"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"權限要求"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"已偵測到螢幕重疊功能"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"如要變更此權限設定,請先前往 [設定] &gt; [應用程式],以關閉螢幕重疊功能"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"開啟設定"</string>
</resources>
diff --git a/res/values-zh-rTW-television/strings.xml b/res/values-zh-rTW-television/strings.xml
new file mode 100644
index 00000000..aa860102
--- /dev/null
+++ b/res/values-zh-rTW-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"顯示系統應用程式"</string>
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index e4045eff..6c9cadb7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -74,7 +74,8 @@
<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_blocked_profile_owner" msgid="5006234166226562439">"這是使用者 <xliff:g id="USERNAME">%1$s</xliff:g> 的個人資料所需的應用程式,因此無法解除安裝。"</string>
+ <string name="uninstall_failed_device_policy_manager_of_user" msgid="4466062391552204291">"這個套件是<xliff:g id="USERNAME">%1$s</xliff:g>目前使用中的裝置權限管理工具,因此無法解除安裝。"</string>
+ <string name="uninstall_blocked_profile_owner" msgid="5397102354360532069">"這是 Work 設定檔所需的應用程式,因此無法解除安裝。"</string>
<string name="uninstall_blocked_device_owner" msgid="7074175526413453063">"這是您的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
<string name="manage_device_administrators" msgid="891392489300312370">"管理裝置管理員"</string>
<string name="uninstall_failed_msg" msgid="8969754702803951175">"無法解除安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"裝置存取權"</string>
<string name="no_new_perms" msgid="6657813692169565975">"這項更新不需新權限。"</string>
<string name="grant_confirm_question" msgid="4690289297029223742">"您要授予下列權限嗎?將會開放下列存取權:"</string>
+ <string name="grant_dialog_button_allow" msgid="4616529495342337095">"允許"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"拒絕"</string>
+ <string name="current_permission_template" msgid="6378304249516652817">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g>/<xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="permission_warning_template" msgid="5209102765005869454">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<xliff:g id="ACTION">%2$s</xliff:g>嗎?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"應用程式"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"應用程式權限"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"不要再詢問我"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"沒有權限"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"其他權限"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="other">還有 <xliff:g id="COUNT_1">%1$d</xliff:g> 項</item>
+ <item quantity="one">還有 <xliff:g id="COUNT_0">%1$d</xliff:g> 項</item>
+ </plurals>
+ <string name="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_hide_system" msgid="7595471742649432977">"隱藏系統"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g>權限"</string>
+ <string name="no_apps" msgid="1965493419005012569">"沒有應用程式"</string>
+ <string name="location_settings" msgid="1774875730854491297">"位置資訊設定"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> 是這台裝置的定位服務供應商。您可以在位置資訊設定中修改位置資訊存取權。"</string>
+ <string name="system_warning" msgid="7103819124542305179">"如果您拒絕這項權限,裝置的基本功能可能無法正常運作。"</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"依據政策規定執行"</string>
+ <string name="loading" msgid="7811651799620593731">"載入中…"</string>
+ <string name="all_permissions" msgid="5156669007784613042">"所有權限"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"其他應用程式功能"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"權限要求"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"偵測到畫面重疊圖層"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"如要變更這項權限設定,您必須先依序前往 [設定] &gt; [應用程式],關閉裝置畫面重疊圖層"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"開啟設定"</string>
</resources>
diff --git a/res/values-zu-television/strings.xml b/res/values-zu-television/strings.xml
new file mode 100644
index 00000000..0d9cbeab
--- /dev/null
+++ b/res/values-zu-television/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources 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">"Yenqaba futhi ungasabuzi"</string>
+ <string name="grant_dialog_how_to_change" msgid="615414835189256888">"Ungashintsha lokhu kamuva kuzilungiselelo &gt; izinhlelo zokusebenza"</string>
+ <string name="current_permission_template" msgid="4793247012451594523">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string>
+ <string name="preference_show_system_apps" msgid="7330308025768596149">"Bonisa izinhlelo zokusebenza zesistimu"</string>
+</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 0b3ba04d..f0524bab 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -74,7 +74,8 @@
<string name="uninstall_done" msgid="3792487853420281888">"Ukukhipha kuqedile"</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_blocked_profile_owner" msgid="5006234166226562439">"Lolu hlelo lokusebenza luyadingeka kuphrofayela yakho ye-<xliff:g id="USERNAME">%1$s</xliff:g> futhi alikwazi ukukhishwa."</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_blocked_profile_owner" msgid="5397102354360532069">"Lolu hlelo lokusebenza ludingelwa iphrofayela yakho yokusebenza 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="uninstall_failed_msg" msgid="8969754702803951175">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayikwazanga ukukhishwa"</string>
@@ -86,4 +87,35 @@
<string name="devicePerms" msgid="6733560207731294504">"Ukufinyelela kwedivayisi"</string>
<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_allow" msgid="4616529495342337095">"Vumela"</string>
+ <string name="grant_dialog_button_deny" msgid="2176510645406614340">"Phika"</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="5209102765005869454">"Vumela i-<xliff:g id="APP_NAME">%1$s</xliff:g> ukuthi <xliff:g id="ACTION">%2$s</xliff:g>?"</string>
+ <string name="app_permissions_breadcrumb" msgid="3390836200791539264">"Izinhlelo zokusebenza"</string>
+ <string name="app_permissions" msgid="3146758905824597178">"Izimvume zohlelo lokusebenza"</string>
+ <string name="never_ask_again" msgid="3798895821072102967">"Ungaphinde ubuze"</string>
+ <string name="no_permissions" msgid="3210542466245591574">"Akukho zimvume"</string>
+ <string name="additional_permissions" msgid="6667573114240111763">"Izimvume ezingeziwe"</string>
+ <plurals name="additional_permissions_more" formatted="false" msgid="945127158155064388">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> okuningi</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> okuningi</item>
+ </plurals>
+ <string name="old_sdk_deny_warning" msgid="3872277112584842615">"Lolu hlelo lokusebenza ludizayinelwe inguqulo endala ye-Android. Ukwala imvume kungalibangela ukuthi lingasasebenzi njengoba kuhlosiwe."</string>
+ <string name="default_permission_description" msgid="4992892207044156668">"Yenza isenzo esingaziwa"</string>
+ <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_0">%1$d</xliff:g> kuzinhlelo zokusebenza ezingu-<xliff:g id="COUNT_1">%2$d</xliff:g> ezivunyelwe"</string>
+ <string name="menu_show_system" msgid="6773743421743728921">"Bonisa isistimu"</string>
+ <string name="menu_hide_system" msgid="7595471742649432977">"Fihla isistimu"</string>
+ <string name="permission_title" msgid="6495415273398916381">"<xliff:g id="PERMISSION">%1$s</xliff:g> izimvume"</string>
+ <string name="no_apps" msgid="1965493419005012569">"Azikho izinhlelo zokusebenza"</string>
+ <string name="location_settings" msgid="1774875730854491297">"Izilungiselelo Zendawo"</string>
+ <string name="location_warning" msgid="8778701356292735971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ingumhlinzeki wamasevisi wendawo kule divayisi. Ukufinyelela kwendawo kungashintshwa kusuka kuzilungiselelo zendawo."</string>
+ <string name="system_warning" msgid="7103819124542305179">"Uma unqabela le mvume, izici eziyisisekelo zedivayisi yakho zingahle zingasasebenzi njengoba zihlosiwe."</string>
+ <string name="permission_summary_enforced_by_policy" msgid="3418617316188986205">"Isetshenziswe yinqubomgomo"</string>
+ <string name="loading" msgid="7811651799620593731">"Iyalayisha..."</string>
+ <string name="all_permissions" msgid="5156669007784613042">"Zonke izimvume"</string>
+ <string name="other_permissions" msgid="2016192512386091933">"Amanye amakhono wohlelo lokusebenza"</string>
+ <string name="permission_request_title" msgid="1204446718549121199">"Isicelo semvume"</string>
+ <string name="screen_overlay_title" msgid="3021729846864038529">"Kutholwe imbondela yesikrini"</string>
+ <string name="screen_overlay_message" msgid="2141944461571677331">"Ukuze uguqule lesi silungiselelo semvume, kuzomele uqale uvale imbondela yesikrini kusukela ku-Izilungiselelo &gt; Izinhlelo zokusebenza"</string>
+ <string name="screen_overlay_button" msgid="4344544843349937743">"Vula izilungiselelo"</string>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
new file mode 100644
index 00000000..05845021
--- /dev/null
+++ b/res/values/dimens.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <!-- Header sub settings margin start / end -->
+ <dimen name="header_subsettings_margin_start">72dp</dimen>
+ <dimen name="header_subsettings_margin_end">16dp</dimen>
+
+ <!-- Header margin start / end -->
+ <dimen name="header_margin_start">16dp</dimen>
+ <dimen name="header_margin_end">16dp</dimen>
+
+ <dimen name="lb_action_section_width">384dp</dimen>
+
+ <dimen name="lb_content_section_width">576dp</dimen>
+ <dimen name="lb_content_fragment_start_padding">48dp</dimen>
+ <dimen name="lb_content_fragment_delimiter_padding">16dp</dimen>
+ <dimen name="lb_content_fragment_max_icon_height">280dp</dimen>
+ <dimen name="lb_content_fragment_title_text_top_padding">2dp</dimen>
+ <dimen name="lb_content_fragment_title_text_size">36sp</dimen>
+ <dimen name="lb_content_fragment_icon_width">140dp</dimen>
+
+ <dimen name="lb_content_fragment_breadcrumb_text_size">18sp</dimen>
+ <dimen name="lb_content_fragment_description_text_size">14sp</dimen>
+ <dimen name="lb_content_fragment_title_text_bottom_padding">4dp</dimen>
+
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 27d68ddf..d79ba63d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -133,10 +133,14 @@
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 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 presented to the user when uninstalling a package failed because a profile owner
has marked the the target package as not able to be uninstalled [CHAR LIMIT=80] -->
<string name="uninstall_blocked_profile_owner">This app is needed for
- your <xliff:g id="username">%1$s</xliff:g> profile and can\'t be uninstalled.</string>
+ your work profile and can\'t be uninstalled.</string>
<!-- String presented to the user when uninstalling a package failed because a device owner
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
@@ -166,4 +170,108 @@
<string name="grant_confirm_question">Do you want to grant the following permissions?
It will get access to:</string>
+
+ <!-- Title for the dialog button to allow a permission grant. -->
+ <string name="grant_dialog_button_allow">Allow</string>
+
+ <!-- Title for the dialog button to deny a permission grant. -->
+ <string name="grant_dialog_button_deny">Deny</string>
+
+ <!-- Template for the current permission from the total number of permissions. -->
+ <string name="current_permission_template">
+ <xliff:g id="current_permission_index" example="1">%1$s</xliff:g> of
+ <xliff:g id="permission_count" example="2">%2$s</xliff:g></string>
+
+ <!-- Template for the warning message when an app requests a permission. -->
+ <string name="permission_warning_template">Allow
+ <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> to
+ <xliff:g id="action" example="do something">%2$s</xliff:g>?</string>
+
+ <!-- Permissions -->
+
+ <!-- Title of an application permission, listed so the user can choose whether they want
+ to allow the application to do this. -->
+ <string name="permlab_togglePermissions" translatable="false">toggle permissions</string>
+ <!-- Description of an application permission, listed so the user can choose whether
+ they want to allow the application to do this. -->
+ <string name="permdesc_togglePermissions" translatable="false">Allows the holder to launch
+ the UI for toggling app permissions. Should never be needed for normal apps.</string>
+
+ <!-- Breadcrumb for page of managing application permissions [CHAR LIMIT=50] -->
+ <string name="app_permissions_breadcrumb">Apps</string>
+
+ <!-- Title for page of managing application permissions -->
+ <string name="app_permissions">App permissions</string>
+ <!-- Checkbox that allows user to not be questioned about this permission
+ request again -->
+ <string name="never_ask_again">Never ask again</string>
+
+ <!-- Label when app requests no permissions -->
+ <string name="no_permissions">No permissions</string>
+
+ <!-- Label for button that leads to more permissions [CHAR LIMIT=40] -->
+ <string name="additional_permissions">Additional permissions</string>
+
+ <!-- Description of how many more permissions to view on next page [CHAR LIMIT=30] -->
+ <plurals name="additional_permissions_more">
+ <item quantity="one"><xliff:g id="count" example="1">%1$d</xliff:g> more</item>
+ <item quantity="other"><xliff:g id="count" example="2">%1$d</xliff:g> more</item>
+ </plurals>
+
+ <!-- Warning for turning off permissions on older apps -->
+ <string name="old_sdk_deny_warning">This app was designed for an older version of Android. Denying permission may cause it to no longer function as intended.</string>
+
+ <!-- The default description of a permission, i.e. what it does. [CHAR LIMIT=40] -->
+ <string name="default_permission_description">perform an unknown action</string>
+
+ <!-- Summary of number of apps currently granted a single permission [CHAR LIMIT=45] -->
+ <string name="app_permissions_group_summary"><xliff:g id="count" example="10">%1$d</xliff:g> of <xliff:g id="count" example="10">%2$d</xliff:g> apps allowed</string>
+
+ <!-- [CHAR LIMIT=NONE] Menu for manage permissions to control whether system apps are shown -->
+ <string name="menu_show_system">Show system</string>
+ <!-- [CHAR LIMIT=NONE] Menu for manage permissions to control whether system apps are hidden -->
+ <string name="menu_hide_system">Hide system</string>
+
+ <!-- [CHAR LIMIT=30] Title for page managing what apps have a permission granted -->
+ <string name="permission_title"><xliff:g id="permission" example="Camera">%1$s</xliff:g> permissions</string>
+
+ <!-- [CHAR LIMIT=NONE] Label when no apps requesting this permission -->
+ <string name="no_apps">No apps</string>
+
+ <!-- [CHAR LIMIT=30] Title of button that leads to location settings -->
+ <string name="location_settings">Location Settings</string>
+
+ <!-- [CHAR LIMIT=NONE] Warning about how this app cannot have location permission disabled -->
+ <string name="location_warning"><xliff:g id="app_name" example="Package Installer">%1$s</xliff:g> is a provider of location services for this device. Location access can be modified from location settings.</string>
+
+ <!-- [CHAR LIMIT=NONE] Warning message when turning off permission for system apps -->
+ <string name="system_warning">If you deny this permission, basic features of your device may no longer function as intended.</string>
+
+ <!-- [CHAR LIMIT=NONE] Summary of a permission switch when it's enforced by policy -->
+ <string name="permission_summary_enforced_by_policy">Enforced by policy</string>
+
+ <!-- Text displayed until loading is done -->
+ <string name="loading">Loading\u2026</string>
+
+ <!-- [CHAR LIMIT=45] Title of all permissions settings -->
+ <string name="all_permissions">All permissions</string>
+ <!-- [CHAR LIMIT=45] Group of permissions granted to app automatically when installed. -->
+ <string name="other_permissions">Other app capabilities</string>
+
+ <!-- Title of the permission dialog for accessibility purposes- spoken to the user. [CHAR LIMIT=none] -->
+ <string name="permission_request_title">Permission request</string>
+
+ <!-- Title for the dialog that warns the user they need to turn off screen overlays
+ before permissions can be changed. [CHAR LIMIT=NONE] -->
+ <string name="screen_overlay_title">Screen overlay detected</string>
+
+ <!-- Message for the dialog that warns the user they need to turn off screen overlays
+ before permissions can be changed. The "Settings > Apps" conveys to the user to
+ go to Settings and click on apps, this may need updates in RTL languages. [CHAR LIMIT=NONE] -->
+ <string name="screen_overlay_message">To change this permission setting, you first have to turn off the screen overlay from Settings \u003e Apps</string>
+
+ <!-- Button for the dialog that warns the user they need to turn off screen overlays
+ before permissions can be changed. [CHAR LIMIT=NONE] -->
+ <string name="screen_overlay_button">Open settings</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index b5d8d480..7f6a4693 100755
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -15,12 +15,22 @@
-->
<resources>
- <style name="padded">
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
+
+ <style name="Theme.DialogWhenLarge"
+ parent="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar">
</style>
- <style name="Theme.DialogWhenLarge" parent="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar"/>
- <style name="Theme.AlertDialogActivity" parent="@android:style/Theme.DeviceDefault.Light.Panel">
+
+ <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>
+
</resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
new file mode 100644
index 00000000..026c77fa
--- /dev/null
+++ b/res/values/themes.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources>
+
+ <style name="Settings"
+ parent="@android:style/Theme.DeviceDefault.Settings">
+ </style>
+
+ <style name="GrantPermissions"
+ parent="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar">
+ </style>
+
+</resources>
diff --git a/res/xml/all_permissions.xml b/res/xml/all_permissions.xml
new file mode 100644
index 00000000..06e929fe
--- /dev/null
+++ b/res/xml/all_permissions.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/all_permissions">
+
+ <PreferenceCategory
+ android:key="other_perms"
+ android:title="@string/other_permissions" />
+
+</PreferenceScreen>
diff --git a/src/com/android/packageinstaller/GrantActivity.java b/src/com/android/packageinstaller/GrantActivity.java
deleted file mode 100644
index a3f7f5c9..00000000
--- a/src/com/android/packageinstaller/GrantActivity.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-** Copyright 2013, 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.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.PermissionInfo;
-import android.os.Bundle;
-import android.support.v4.view.ViewPager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.AppSecurityPermissions;
-import android.widget.Button;
-import android.widget.TabHost;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/*
- * The activity which is responsible for asking the user to grant permissions
- * to applications.
- */
-public class GrantActivity extends Activity implements OnClickListener {
- private Button mOk;
- private Button mCancel;
- private PackageManager mPm;
- private String mRequestingPackage;
- private String[] requested_permissions;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- mPm = getPackageManager();
- mRequestingPackage = this.getCallingPackage();
-
- requested_permissions = getRequestedPermissions();
- if (requested_permissions.length == 0) {
- // The grant request was empty. Return success
- setResult(RESULT_OK);
- finish();
- return;
- }
-
- PackageInfo pkgInfo = getUpdatedPackageInfo();
- AppSecurityPermissions perms = new AppSecurityPermissions(this, pkgInfo);
- if (perms.getPermissionCount(AppSecurityPermissions.WHICH_NEW) == 0) {
- // The updated permissions dialog said there are no new permissions.
- // This should never occur if requested_permissions.length > 0,
- // but we check for it anyway, just in case.
- setResult(RESULT_OK);
- finish();
- return;
- }
-
- setContentView(R.layout.install_start);
- ((TextView)findViewById(R.id.install_confirm_question)).setText(R.string.grant_confirm_question);
- PackageUtil.AppSnippet as = new PackageUtil.AppSnippet(mPm.getApplicationLabel(pkgInfo.applicationInfo),
- mPm.getApplicationIcon(pkgInfo.applicationInfo));
- PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
- mOk = (Button)findViewById(R.id.ok_button);
- mOk.setText(R.string.ok);
- mCancel = (Button)findViewById(R.id.cancel_button);
- mOk.setOnClickListener(this);
- mCancel.setOnClickListener(this);
-
- TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
- tabHost.setup();
- ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
- TabsAdapter adapter = new TabsAdapter(this, tabHost, viewPager);
-
- View newTab = perms.getPermissionsView(AppSecurityPermissions.WHICH_NEW);
- View allTab = getPermissionList(perms);
-
- adapter.addTab(tabHost.newTabSpec("new").setIndicator(
- getText(R.string.newPerms)), newTab);
- adapter.addTab(tabHost.newTabSpec("all").setIndicator(
- getText(R.string.allPerms)), allTab);
- }
-
- /**
- * Returns a PackageInfo object representing the results of adding all the permissions
- * in {@code requested_permissions} to {@code mRequestingPackage}. This is the package
- * permissions the user will have if they accept the grant request.
- */
- private PackageInfo getUpdatedPackageInfo() {
- try {
- PackageInfo pkgInfo = mPm.getPackageInfo(mRequestingPackage, PackageManager.GET_PERMISSIONS);
- for (int i = 0; i < pkgInfo.requestedPermissions.length; i++) {
- for (String requested_permission : requested_permissions) {
- if (requested_permission.equals(pkgInfo.requestedPermissions[i])) {
- pkgInfo.requestedPermissionsFlags[i] |= PackageInfo.REQUESTED_PERMISSION_GRANTED;
- }
- }
- }
-
- return pkgInfo;
- } catch (NameNotFoundException e) {
- throw new RuntimeException(e); // will never occur
- }
- }
-
- private View getPermissionList(AppSecurityPermissions perms) {
- LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View root = inflater.inflate(R.layout.permissions_list, null);
- View personalPermissions = perms.getPermissionsView(AppSecurityPermissions.WHICH_PERSONAL);
- View devicePermissions = perms.getPermissionsView(AppSecurityPermissions.WHICH_DEVICE);
-
- ((ViewGroup)root.findViewById(R.id.privacylist)).addView(personalPermissions);
- ((ViewGroup)root.findViewById(R.id.devicelist)).addView(devicePermissions);
-
- return root;
- }
-
- /**
- * Return an array of permissions requested by the caller, filtered to exclude
- * irrelevant or otherwise malicious permission requests from untrusted callers.
- */
- private String[] getRequestedPermissions() {
- String[] permissions = getIntent()
- .getStringArrayExtra(PackageManager.EXTRA_REQUEST_PERMISSION_PERMISSION_LIST);
- if (permissions == null) {
- return new String[0];
- }
- permissions = keepNormalDangerousPermissions(permissions);
- permissions = keepRequestingPackagePermissions(permissions);
- return permissions;
-
- }
-
- /**
- * Remove any permissions in {@code permissions} which are not present
- * in {@code mRequestingPackage} and return the result. We also filter out
- * permissions which are required by {@code mRequestingPackage}, and permissions
- * which have already been granted to {@code mRequestingPackage}, as those permissions
- * are useless to change.
- */
- private String[] keepRequestingPackagePermissions(String[] permissions) {
- List<String> result = new ArrayList<String>();
- try {
- PackageInfo pkgInfo = mPm.getPackageInfo(mRequestingPackage, PackageManager.GET_PERMISSIONS);
- if (pkgInfo.requestedPermissions == null) {
- return new String[0];
- }
- for (int i = 0; i < pkgInfo.requestedPermissions.length; i++) {
- for (String permission : permissions) {
- final boolean isRequired =
- ((pkgInfo.requestedPermissionsFlags[i]
- & PackageInfo.REQUESTED_PERMISSION_REQUIRED) != 0);
- final boolean isGranted =
- ((pkgInfo.requestedPermissionsFlags[i]
- & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0);
-
- /*
- * We ignore required permissions, and permissions which have already
- * been granted, as it's useless to grant those permissions.
- */
- if (permission.equals(pkgInfo.requestedPermissions[i])
- && !isRequired && !isGranted) {
- result.add(permission);
- break;
- }
- }
- }
- } catch (NameNotFoundException e) {
- throw new RuntimeException(e); // should never happen
- }
- return result.toArray(new String[result.size()]);
- }
-
- /**
- * Filter the permissions in {@code permissions}, keeping only the NORMAL or DANGEROUS
- * permissions.
- *
- * @param permissions the permissions to filter
- * @return A subset of {@code permissions} with only the
- * NORMAL or DANGEROUS permissions kept
- */
- private String[] keepNormalDangerousPermissions(String[] permissions) {
- List<String> result = new ArrayList<String>();
- for (String permission : permissions) {
- try {
- PermissionInfo pInfo = mPm.getPermissionInfo(permission, 0);
- final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
- if ((base != PermissionInfo.PROTECTION_NORMAL)
- && (base != PermissionInfo.PROTECTION_DANGEROUS)) {
- continue;
- }
- result.add(permission);
- } catch (NameNotFoundException e) {
- // ignore
- }
- }
- return result.toArray(new String[result.size()]);
- }
-
- @Override
- public void onClick(View v) {
- if (v == mOk) {
- for (String permission : requested_permissions) {
- mPm.grantPermission(mRequestingPackage, permission);
- }
- setResult(RESULT_OK);
- }
- if (v == mCancel) {
- setResult(RESULT_CANCELED);
- }
- finish();
- }
-}
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index 798ad0f3..3153867c 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -16,9 +16,6 @@
*/
package com.android.packageinstaller;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-
-import android.app.Activity;
import android.app.ActivityManagerNative;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -38,6 +35,7 @@ import android.content.pm.PackageUserState;
import android.content.pm.ResolveInfo;
import android.content.pm.VerificationParams;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.UserManager;
@@ -53,6 +51,8 @@ import android.widget.Button;
import android.widget.TabHost;
import android.widget.TextView;
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
+
import java.io.File;
import java.util.List;
@@ -66,7 +66,8 @@ import java.util.List;
* 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 OnCancelListener,
+ OnClickListener {
private static final String TAG = "PackageInstaller";
private int mSessionId = -1;
@@ -127,64 +128,59 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
}
}
});
-
+ // If the app supports runtime permissions the new permissions will
+ // be requested at runtime, hence we do not show them at install.
+ boolean supportsRuntimePermissions = mPkgInfo.applicationInfo.targetSdkVersion
+ >= Build.VERSION_CODES.M;
boolean permVisible = false;
mScrollView = null;
mOkCanInstall = false;
int msg = 0;
- if (mPkgInfo != null) {
- AppSecurityPermissions perms = new AppSecurityPermissions(this, mPkgInfo);
- final int NP = perms.getPermissionCount(AppSecurityPermissions.WHICH_PERSONAL);
- final int ND = perms.getPermissionCount(AppSecurityPermissions.WHICH_DEVICE);
- if (mAppInfo != null) {
- msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
- ? R.string.install_confirm_question_update_system
- : R.string.install_confirm_question_update;
- mScrollView = new CaffeinatedScrollView(this);
- mScrollView.setFillViewport(true);
- boolean newPermissionsFound =
+
+ AppSecurityPermissions perms = new AppSecurityPermissions(this, mPkgInfo);
+ final int N = perms.getPermissionCount(AppSecurityPermissions.WHICH_ALL);
+ if (mAppInfo != null) {
+ msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
+ ? R.string.install_confirm_question_update_system
+ : R.string.install_confirm_question_update;
+ mScrollView = new CaffeinatedScrollView(this);
+ mScrollView.setFillViewport(true);
+ boolean newPermissionsFound = false;
+ if (!supportsRuntimePermissions) {
+ newPermissionsFound =
(perms.getPermissionCount(AppSecurityPermissions.WHICH_NEW) > 0);
mInstallFlowAnalytics.setNewPermissionsFound(newPermissionsFound);
if (newPermissionsFound) {
permVisible = true;
mScrollView.addView(perms.getPermissionsView(
AppSecurityPermissions.WHICH_NEW));
- } else {
- LayoutInflater inflater = (LayoutInflater)getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- TextView label = (TextView)inflater.inflate(R.layout.label, null);
- label.setText(R.string.no_new_perms);
- mScrollView.addView(label);
}
- adapter.addTab(tabHost.newTabSpec(TAB_ID_NEW).setIndicator(
- getText(R.string.newPerms)), mScrollView);
- } else {
- findViewById(R.id.tabscontainer).setVisibility(View.GONE);
- findViewById(R.id.divider).setVisibility(View.VISIBLE);
}
- if (NP > 0 || ND > 0) {
- permVisible = true;
+ if (!supportsRuntimePermissions && !newPermissionsFound) {
LayoutInflater inflater = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
- View root = inflater.inflate(R.layout.permissions_list, null);
- if (mScrollView == null) {
- mScrollView = (CaffeinatedScrollView)root.findViewById(R.id.scrollview);
- }
- if (NP > 0) {
- ((ViewGroup)root.findViewById(R.id.privacylist)).addView(
- perms.getPermissionsView(AppSecurityPermissions.WHICH_PERSONAL));
- } else {
- root.findViewById(R.id.privacylist).setVisibility(View.GONE);
- }
- if (ND > 0) {
- ((ViewGroup)root.findViewById(R.id.devicelist)).addView(
- perms.getPermissionsView(AppSecurityPermissions.WHICH_DEVICE));
- } else {
- root.findViewById(R.id.devicelist).setVisibility(View.GONE);
- }
- adapter.addTab(tabHost.newTabSpec(TAB_ID_ALL).setIndicator(
- getText(R.string.allPerms)), root);
+ TextView label = (TextView)inflater.inflate(R.layout.label, null);
+ label.setText(R.string.no_new_perms);
+ mScrollView.addView(label);
+ }
+ adapter.addTab(tabHost.newTabSpec(TAB_ID_NEW).setIndicator(
+ getText(R.string.newPerms)), mScrollView);
+ } else {
+ findViewById(R.id.tabscontainer).setVisibility(View.GONE);
+ findViewById(R.id.divider).setVisibility(View.VISIBLE);
+ }
+ if (!supportsRuntimePermissions && N > 0) {
+ permVisible = true;
+ LayoutInflater inflater = (LayoutInflater)getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ View root = inflater.inflate(R.layout.permissions_list, null);
+ if (mScrollView == null) {
+ mScrollView = (CaffeinatedScrollView)root.findViewById(R.id.scrollview);
}
+ ((ViewGroup)root.findViewById(R.id.permission_list)).addView(
+ perms.getPermissionsView(AppSecurityPermissions.WHICH_ALL));
+ adapter.addTab(tabHost.newTabSpec(TAB_ID_ALL).setIndicator(
+ getText(R.string.allPerms)), root);
}
mInstallFlowAnalytics.setPermissionsDisplayed(permVisible);
if (!permVisible) {
@@ -358,7 +354,8 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
try {
mSourceInfo = mPm.getApplicationInfo(callerPackage, 0);
if (mSourceInfo != null) {
- if ((mSourceInfo.flags & ApplicationInfo.FLAG_PRIVILEGED) != 0) {
+ if ((mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
+ != 0) {
// Privileged apps are not considered an unknown source.
return false;
}
@@ -443,7 +440,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
mPm = getPackageManager();
mInstaller = mPm.getPackageInstaller();
@@ -615,7 +611,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
ApplicationInfo sourceInfo = getSourceInfo();
if (sourceInfo != null) {
if (uidFromIntent != VerificationParams.NO_UID &&
- (mSourceInfo.flags & ApplicationInfo.FLAG_PRIVILEGED) != 0) {
+ (mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) {
return uidFromIntent;
}
@@ -645,7 +641,8 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
ApplicationInfo applicationInfo =
mPm.getApplicationInfo(packageName, 0);
- if ((applicationInfo.flags & ApplicationInfo.FLAG_PRIVILEGED) != 0) {
+ if ((applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
+ != 0) {
return uidFromIntent;
}
} catch (NameNotFoundException ex) {
@@ -685,39 +682,10 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
// story ends; assume success.
mInstallFlowAnalytics.setFlowFinishedWithPackageManagerResult(
PackageManager.INSTALL_SUCCEEDED);
+ finish();
} else {
- // Start subactivity to actually install the application
- Intent newIntent = new Intent();
- newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,
- mPkgInfo.applicationInfo);
- newIntent.setData(mPackageURI);
- newIntent.setClass(this, InstallAppProgress.class);
- newIntent.putExtra(InstallAppProgress.EXTRA_MANIFEST_DIGEST, mPkgDigest);
- newIntent.putExtra(
- InstallAppProgress.EXTRA_INSTALL_FLOW_ANALYTICS, mInstallFlowAnalytics);
- String installerPackageName = getIntent().getStringExtra(
- Intent.EXTRA_INSTALLER_PACKAGE_NAME);
- if (mOriginatingURI != null) {
- newIntent.putExtra(Intent.EXTRA_ORIGINATING_URI, mOriginatingURI);
- }
- if (mReferrerURI != null) {
- newIntent.putExtra(Intent.EXTRA_REFERRER, mReferrerURI);
- }
- if (mOriginatingUid != VerificationParams.NO_UID) {
- newIntent.putExtra(Intent.EXTRA_ORIGINATING_UID, mOriginatingUid);
- }
- if (installerPackageName != null) {
- newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME,
- installerPackageName);
- }
- if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
- newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
- newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- }
- if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI);
- startActivity(newIntent);
+ startInstall();
}
- finish();
} else {
mScrollView.pageScroll(View.FOCUS_DOWN);
}
@@ -732,4 +700,38 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
finish();
}
}
+
+ private void startInstall() {
+ // Start subactivity to actually install the application
+ Intent newIntent = new Intent();
+ newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,
+ mPkgInfo.applicationInfo);
+ newIntent.setData(mPackageURI);
+ newIntent.setClass(this, InstallAppProgress.class);
+ newIntent.putExtra(InstallAppProgress.EXTRA_MANIFEST_DIGEST, mPkgDigest);
+ newIntent.putExtra(
+ InstallAppProgress.EXTRA_INSTALL_FLOW_ANALYTICS, mInstallFlowAnalytics);
+ String installerPackageName = getIntent().getStringExtra(
+ Intent.EXTRA_INSTALLER_PACKAGE_NAME);
+ if (mOriginatingURI != null) {
+ newIntent.putExtra(Intent.EXTRA_ORIGINATING_URI, mOriginatingURI);
+ }
+ if (mReferrerURI != null) {
+ newIntent.putExtra(Intent.EXTRA_REFERRER, mReferrerURI);
+ }
+ if (mOriginatingUid != VerificationParams.NO_UID) {
+ newIntent.putExtra(Intent.EXTRA_ORIGINATING_UID, mOriginatingUid);
+ }
+ if (installerPackageName != null) {
+ newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME,
+ installerPackageName);
+ }
+ if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
+ newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
+ newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ }
+ if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI);
+ startActivity(newIntent);
+ finish();
+ }
}
diff --git a/src/com/android/packageinstaller/UninstallAppProgress.java b/src/com/android/packageinstaller/UninstallAppProgress.java
index 68d053ae..d6b788d4 100755
--- a/src/com/android/packageinstaller/UninstallAppProgress.java
+++ b/src/com/android/packageinstaller/UninstallAppProgress.java
@@ -17,6 +17,7 @@
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;
@@ -54,7 +55,6 @@ import java.util.List;
*/
public class UninstallAppProgress extends Activity implements OnClickListener {
private final String TAG="UninstallAppProgress";
- private boolean localLOGV = false;
private ApplicationInfo mAppInfo;
private boolean mAllUsers;
@@ -70,6 +70,14 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
private static final int UNINSTALL_COMPLETE = 1;
+ 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) {
switch (msg.what) {
@@ -109,13 +117,45 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
Toast.makeText(ctx, statusText, Toast.LENGTH_LONG).show();
setResultAndFinish(mResultCode);
return;
- case PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER:
- Log.d(TAG, "Uninstall failed because " + packageName
- + " is a device admin");
- mDeviceManagerButton.setVisibility(View.VISIBLE);
- statusText = getString(R.string.uninstall_failed_device_policy_manager);
+ 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:
+ }
+ case PackageManager.DELETE_FAILED_OWNER_BLOCKED: {
UserManager userManager =
(UserManager) getSystemService(Context.USER_SERVICE);
IPackageManager packageManager = IPackageManager.Stub.asInterface(
@@ -135,7 +175,12 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
Log.e(TAG, "Failed to talk to package manager", e);
}
}
- mDeviceManagerButton.setVisibility(View.VISIBLE);
+ int myUserId = UserHandle.myUserId();
+ if (isProfileOfOrSame(userManager, myUserId, blockingUserId)) {
+ mDeviceManagerButton.setVisibility(View.VISIBLE);
+ } else {
+ mDeviceManagerButton.setVisibility(View.GONE);
+ }
if (blockingUserId == UserHandle.USER_OWNER) {
statusText = getString(R.string.uninstall_blocked_device_owner);
} else if (blockingUserId == UserHandle.USER_NULL) {
@@ -143,12 +188,10 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
+ msg.arg1 + " no blocking user");
statusText = getString(R.string.uninstall_failed);
} else {
- String userName = userManager.getUserInfo(blockingUserId).name;
- statusText = String.format(
- getString(R.string.uninstall_blocked_profile_owner),
- userName);
+ statusText = getString(R.string.uninstall_blocked_profile_owner);
}
break;
+ }
default:
Log.d(TAG, "Uninstall failed for " + packageName + " with code "
+ msg.arg1);
diff --git a/src/com/android/packageinstaller/UninstallerActivity.java b/src/com/android/packageinstaller/UninstallerActivity.java
index 96bc9937..e277d48f 100755
--- a/src/com/android/packageinstaller/UninstallerActivity.java
+++ b/src/com/android/packageinstaller/UninstallerActivity.java
@@ -141,6 +141,7 @@ public class UninstallerActivity extends Activity {
IBinder callback;
}
+ private String mPackageName;
private DialogInfo mDialogInfo;
@Override
@@ -156,8 +157,8 @@ public class UninstallerActivity extends Activity {
showAppNotFound();
return;
}
- final String packageName = packageUri.getEncodedSchemeSpecificPart();
- if (packageName == null) {
+ mPackageName = packageUri.getEncodedSchemeSpecificPart();
+ if (mPackageName == null) {
Log.e(TAG, "Invalid package name in URI: " + packageUri);
showAppNotFound();
return;
@@ -177,14 +178,14 @@ public class UninstallerActivity extends Activity {
mDialogInfo.callback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);
try {
- mDialogInfo.appInfo = pm.getApplicationInfo(packageName,
+ mDialogInfo.appInfo = pm.getApplicationInfo(mPackageName,
PackageManager.GET_UNINSTALLED_PACKAGES, mDialogInfo.user.getIdentifier());
} catch (RemoteException e) {
Log.e(TAG, "Unable to get packageName. Package manager is dead?");
}
if (mDialogInfo.appInfo == null) {
- Log.e(TAG, "Invalid packageName: " + packageName);
+ Log.e(TAG, "Invalid packageName: " + mPackageName);
showAppNotFound();
return;
}
@@ -194,7 +195,7 @@ public class UninstallerActivity extends Activity {
if (className != null) {
try {
mDialogInfo.activityInfo = pm.getActivityInfo(
- new ComponentName(packageName, className), 0,
+ new ComponentName(mPackageName, className), 0,
mDialogInfo.user.getIdentifier());
} catch (RemoteException e) {
Log.e(TAG, "Unable to get className. Package manager is dead?");
@@ -241,7 +242,7 @@ public class UninstallerActivity extends Activity {
final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub.asInterface(
mDialogInfo.callback);
try {
- observer.onPackageDeleted(mDialogInfo.appInfo.packageName,
+ observer.onPackageDeleted(mPackageName,
PackageManager.DELETE_FAILED_ABORTED, "Cancelled by user");
} catch (RemoteException ignored) {
}
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
new file mode 100644
index 00000000..e54b7029
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -0,0 +1,597 @@
+/*
+ * 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.app.ActivityManager;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.os.Build;
+import android.os.UserHandle;
+import android.util.ArrayMap;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.LocationUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class AppPermissionGroup implements Comparable<AppPermissionGroup> {
+ private static final String PLATFORM_PACKAGE_NAME = "android";
+
+ private static final String KILL_REASON_APP_OP_CHANGE = "Permission related app op changed";
+
+ private final Context mContext;
+ private final UserHandle mUserHandle;
+ private final PackageManager mPackageManager;
+ private final AppOpsManager mAppOps;
+ private final ActivityManager mActivityManager;
+
+ private final PackageInfo mPackageInfo;
+ private final String mName;
+ private final String mDeclaringPackage;
+ private final CharSequence mLabel;
+ private final CharSequence mDescription;
+ private final ArrayMap<String, Permission> mPermissions = new ArrayMap<>();
+ private final String mIconPkg;
+ private final int mIconResId;
+
+ private final boolean mAppSupportsRuntimePermissions;
+
+ public static AppPermissionGroup create(Context context, PackageInfo packageInfo,
+ String permissionName) {
+ PermissionInfo permissionInfo;
+ try {
+ permissionInfo = context.getPackageManager().getPermissionInfo(permissionName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ return null;
+ }
+
+ if (permissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS
+ || (permissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0
+ || (permissionInfo.flags & PermissionInfo.FLAG_HIDDEN) != 0) {
+ return null;
+ }
+
+ PackageItemInfo groupInfo = permissionInfo;
+ if (permissionInfo.group != null) {
+ try {
+ groupInfo = context.getPackageManager().getPermissionGroupInfo(
+ permissionInfo.group, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ /* ignore */
+ }
+ }
+
+ List<PermissionInfo> permissionInfos = null;
+ if (groupInfo instanceof PermissionGroupInfo) {
+ try {
+ permissionInfos = context.getPackageManager().queryPermissionsByGroup(
+ groupInfo.name, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ /* ignore */
+ }
+ }
+
+ return create(context, packageInfo, groupInfo, permissionInfos,
+ new UserHandle(context.getUserId()));
+ }
+
+ public static AppPermissionGroup create(Context context, PackageInfo packageInfo,
+ PackageItemInfo groupInfo, List<PermissionInfo> permissionInfos,
+ UserHandle userHandle) {
+
+ AppPermissionGroup group = new AppPermissionGroup(context, packageInfo, groupInfo.name,
+ groupInfo.packageName, groupInfo.loadLabel(context.getPackageManager()),
+ loadGroupDescription(context, groupInfo), groupInfo.packageName, groupInfo.icon,
+ userHandle);
+
+ if (groupInfo instanceof PermissionInfo) {
+ permissionInfos = new ArrayList<>();
+ permissionInfos.add((PermissionInfo) groupInfo);
+ }
+
+ if (permissionInfos == null || permissionInfos.isEmpty()) {
+ return null;
+ }
+
+ final int permissionCount = packageInfo.requestedPermissions.length;
+ for (int i = 0; i < permissionCount; i++) {
+ String requestedPermission = packageInfo.requestedPermissions[i];
+
+ PermissionInfo requestedPermissionInfo = null;
+
+ for (PermissionInfo permissionInfo : permissionInfos) {
+ if (requestedPermission.equals(permissionInfo.name)) {
+ requestedPermissionInfo = permissionInfo;
+ break;
+ }
+ }
+
+ if (requestedPermissionInfo == null) {
+ continue;
+ }
+
+ // Collect only runtime permissions.
+ if (requestedPermissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS) {
+ continue;
+ }
+
+ // Don't allow toggle of non platform defined permissions for legacy apps via app ops.
+ if (packageInfo.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1
+ && !PLATFORM_PACKAGE_NAME.equals(requestedPermissionInfo.packageName)) {
+ continue;
+ }
+
+ final boolean granted = (packageInfo.requestedPermissionsFlags[i]
+ & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0;
+
+ final int appOp = PLATFORM_PACKAGE_NAME.equals(requestedPermissionInfo.packageName)
+ ? AppOpsManager.permissionToOpCode(requestedPermissionInfo.name)
+ : AppOpsManager.OP_NONE;
+
+ final boolean appOpAllowed = appOp != AppOpsManager.OP_NONE
+ && context.getSystemService(AppOpsManager.class).checkOp(appOp,
+ packageInfo.applicationInfo.uid, packageInfo.packageName)
+ == AppOpsManager.MODE_ALLOWED;
+
+ final int flags = context.getPackageManager().getPermissionFlags(
+ requestedPermission, packageInfo.packageName, userHandle);
+
+ Permission permission = new Permission(requestedPermission, granted,
+ appOp, appOpAllowed, flags);
+ group.addPermission(permission);
+ }
+
+ return group;
+ }
+
+ private static CharSequence loadGroupDescription(Context context, PackageItemInfo group) {
+ CharSequence description = null;
+ if (group instanceof PermissionGroupInfo) {
+ description = ((PermissionGroupInfo) group).loadDescription(
+ context.getPackageManager());
+ } else if (group instanceof PermissionInfo) {
+ description = ((PermissionInfo) group).loadDescription(
+ context.getPackageManager());
+ }
+
+ if (description == null || description.length() <= 0) {
+ description = context.getString(R.string.default_permission_description);
+ }
+
+ return description;
+ }
+
+ private AppPermissionGroup(Context context, PackageInfo packageInfo, String name,
+ String declaringPackage, CharSequence label, CharSequence description,
+ String iconPkg, int iconResId, UserHandle userHandle) {
+ mContext = context;
+ mUserHandle = userHandle;
+ mPackageManager = mContext.getPackageManager();
+ mPackageInfo = packageInfo;
+ mAppSupportsRuntimePermissions = packageInfo.applicationInfo
+ .targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1;
+ mAppOps = context.getSystemService(AppOpsManager.class);
+ mActivityManager = context.getSystemService(ActivityManager.class);
+ mDeclaringPackage = declaringPackage;
+ mName = name;
+ mLabel = label;
+ mDescription = description;
+ if (iconResId != 0) {
+ mIconPkg = iconPkg;
+ mIconResId = iconResId;
+ } else {
+ mIconPkg = context.getPackageName();
+ mIconResId = R.drawable.ic_perm_device_info;
+ }
+ }
+
+ public boolean hasRuntimePermission() {
+ return mAppSupportsRuntimePermissions;
+ }
+
+
+ public boolean hasGrantedByDefaultPermission() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (permission.isGrantedByDefault()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean hasAppOpPermission() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (permission.getAppOp() != AppOpsManager.OP_NONE) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public PackageInfo getApp() {
+ return mPackageInfo;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public String getDeclaringPackage() {
+ return mDeclaringPackage;
+ }
+
+ public String getIconPkg() {
+ return mIconPkg;
+ }
+
+ public int getIconResId() {
+ return mIconResId;
+ }
+
+ public CharSequence getLabel() {
+ return mLabel;
+ }
+
+ public CharSequence getDescription() {
+ return mDescription;
+ }
+
+ public boolean hasPermission(String permission) {
+ return mPermissions.get(permission) != null;
+ }
+
+ public boolean areRuntimePermissionsGranted() {
+ if (LocationUtils.isLocationGroupAndProvider(mName, mPackageInfo.packageName)) {
+ return LocationUtils.isLocationEnabled(mContext);
+ }
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (mAppSupportsRuntimePermissions) {
+ if (permission.isGranted()) {
+ return true;
+ }
+ } else if (permission.isGranted() && ((permission.getAppOp()
+ != AppOpsManager.OP_NONE && permission.isAppOpAllowed())
+ || permission.getAppOp() == AppOpsManager.OP_NONE)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean grantRuntimePermissions(boolean fixedByTheUser) {
+ final boolean isSharedUser = mPackageInfo.sharedUserId != null;
+ final int uid = mPackageInfo.applicationInfo.uid;
+
+ // We toggle permissions only to apps that support runtime
+ // permissions, otherwise we toggle the app op corresponding
+ // to the permission if the permission is granted to the app.
+ for (Permission permission : mPermissions.values()) {
+ if (mAppSupportsRuntimePermissions) {
+ // Do not touch permissions fixed by the system.
+ if (permission.isSystemFixed()) {
+ return false;
+ }
+
+ // Ensure the permission app op enabled before the permission grant.
+ if (permission.hasAppOp() && !permission.isAppOpAllowed()) {
+ permission.setAppOpAllowed(true);
+ mAppOps.setUidMode(permission.getAppOp(), uid, AppOpsManager.MODE_ALLOWED);
+ }
+
+ // Grant the permission if needed.
+ if (!permission.isGranted()) {
+ permission.setGranted(true);
+ mPackageManager.grantRuntimePermission(mPackageInfo.packageName,
+ permission.getName(), mUserHandle);
+ }
+
+ // Update the permission flags.
+ if (!fixedByTheUser) {
+ // Now the apps can ask for the permission as the user
+ // no longer has it fixed in a denied state.
+ if (permission.isUserFixed() || permission.isUserSet()) {
+ permission.setUserFixed(false);
+ permission.setUserSet(true);
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_USER_FIXED
+ | PackageManager.FLAG_PERMISSION_USER_SET,
+ 0, mUserHandle);
+ }
+ }
+ } else {
+ // Legacy apps cannot have a not granted permission but just in case.
+ // Also if the permissions has no corresponding app op, then it is a
+ // third-party one and we do not offer toggling of such permissions.
+ if (!permission.isGranted() || !permission.hasAppOp()) {
+ continue;
+ }
+
+ if (!permission.isAppOpAllowed()) {
+ permission.setAppOpAllowed(true);
+ // It this is a shared user we want to enable the app op for all
+ // packages in the shared user to match the behavior of this
+ // shared user having a runtime permission.
+ if (isSharedUser) {
+ // Enable the app op.
+ String[] packageNames = mPackageManager.getPackagesForUid(uid);
+ for (String packageName : packageNames) {
+ mAppOps.setUidMode(permission.getAppOp(), uid,
+ AppOpsManager.MODE_ALLOWED);
+ }
+ } else {
+ // Enable the app op.
+ mAppOps.setUidMode(permission.getAppOp(), uid, AppOpsManager.MODE_ALLOWED);
+ }
+
+ // Mark that the permission should not be be granted on upgrade
+ // when the app begins supporting runtime permissions.
+ if (permission.shouldRevokeOnUpgrade()) {
+ permission.setRevokeOnUpgrade(false);
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE,
+ 0, mUserHandle);
+ }
+
+ // Legacy apps do not know that they have to retry access to a
+ // resource due to changes in runtime permissions (app ops in this
+ // case). Therefore, we restart them on app op change, so they
+ // can pick up the change.
+ mActivityManager.killUid(uid, KILL_REASON_APP_OP_CHANGE);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public boolean revokeRuntimePermissions(boolean fixedByTheUser) {
+ final boolean isSharedUser = mPackageInfo.sharedUserId != null;
+ final int uid = mPackageInfo.applicationInfo.uid;
+
+ // We toggle permissions only to apps that support runtime
+ // permissions, otherwise we toggle the app op corresponding
+ // to the permission if the permission is granted to the app.
+ for (Permission permission : mPermissions.values()) {
+ if (mAppSupportsRuntimePermissions) {
+ // Do not touch permissions fixed by the system.
+ if (permission.isSystemFixed()) {
+ return false;
+ }
+
+ // Revoke the permission if needed.
+ if (permission.isGranted()) {
+ permission.setGranted(false);
+ mPackageManager.revokeRuntimePermission(mPackageInfo.packageName,
+ permission.getName(), mUserHandle);
+ }
+
+ // Update the permission flags.
+ if (fixedByTheUser) {
+ // Take a note that the user fixed the permission.
+ if (permission.isUserSet() || !permission.isUserFixed()) {
+ permission.setUserSet(false);
+ permission.setUserFixed(true);
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_USER_SET
+ | PackageManager.FLAG_PERMISSION_USER_FIXED,
+ PackageManager.FLAG_PERMISSION_USER_FIXED,
+ mUserHandle);
+ }
+ } else {
+ if (!permission.isUserSet()) {
+ permission.setUserSet(true);
+ // Take a note that the user already chose once.
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_USER_SET,
+ PackageManager.FLAG_PERMISSION_USER_SET,
+ mUserHandle);
+ }
+ }
+ } else {
+ // Legacy apps cannot have a non-granted permission but just in case.
+ // Also if the permission has no corresponding app op, then it is a
+ // third-party one and we do not offer toggling of such permissions.
+ if (!permission.isGranted() || !permission.hasAppOp()) {
+ continue;
+ }
+
+ if (permission.isAppOpAllowed()) {
+ permission.setAppOpAllowed(false);
+ // It this is a shared user we want to enable the app op for all
+ // packages the the shared user to match the behavior of this
+ // shared user having a runtime permission.
+ if (isSharedUser) {
+ String[] packageNames = mPackageManager.getPackagesForUid(uid);
+ for (String packageName : packageNames) {
+ // Disable the app op.
+ mAppOps.setUidMode(permission.getAppOp(), uid,
+ AppOpsManager.MODE_IGNORED);
+ }
+ } else {
+ // Disable the app op.
+ mAppOps.setUidMode(permission.getAppOp(), uid, AppOpsManager.MODE_IGNORED);
+ }
+
+ // Mark that the permission should not be granted on upgrade
+ // when the app begins supporting runtime permissions.
+ if (!permission.shouldRevokeOnUpgrade()) {
+ permission.setRevokeOnUpgrade(true);
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE,
+ PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE,
+ mUserHandle);
+ }
+
+ // Disabling an app op may put the app in a situation in which it
+ // has a handle to state it shouldn't have, so we have to kill the
+ // app. This matches the revoke runtime permission behavior.
+ mActivityManager.killUid(uid, KILL_REASON_APP_OP_CHANGE);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public void setPolicyFixed() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ permission.setPolicyFixed(true);
+ mPackageManager.updatePermissionFlags(permission.getName(),
+ mPackageInfo.packageName,
+ PackageManager.FLAG_PERMISSION_POLICY_FIXED,
+ PackageManager.FLAG_PERMISSION_POLICY_FIXED,
+ mUserHandle);
+ }
+ }
+
+ public List<Permission> getPermissions() {
+ return new ArrayList<>(mPermissions.values());
+ }
+
+ public int getFlags() {
+ int flags = 0;
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ flags |= permission.getFlags();
+ }
+ return flags;
+ }
+
+ public boolean isUserFixed() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (!permission.isUserFixed()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isPolicyFixed() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (permission.isPolicyFixed()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isUserSet() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (!permission.isUserSet()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isSystemFixed() {
+ final int permissionCount = mPermissions.size();
+ for (int i = 0; i < permissionCount; i++) {
+ Permission permission = mPermissions.valueAt(i);
+ if (permission.isSystemFixed()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int compareTo(AppPermissionGroup another) {
+ final int result = mLabel.toString().compareTo(another.mLabel.toString());
+ if (result == 0) {
+ // Unbadged before badged.
+ return mPackageInfo.applicationInfo.uid
+ - another.mPackageInfo.applicationInfo.uid;
+ }
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ AppPermissionGroup other = (AppPermissionGroup) obj;
+
+ if (mName == null) {
+ if (other.mName != null) {
+ return false;
+ }
+ } else if (!mName.equals(other.mName)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return mName != null ? mName.hashCode() : 0;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append(getClass().getSimpleName());
+ builder.append("{name=").append(mName);
+ if (!mPermissions.isEmpty()) {
+ builder.append(", <has permissions>}");
+ } else {
+ builder.append('}');
+ }
+ return builder.toString();
+ }
+
+ private void addPermission(Permission permission) {
+ mPermissions.put(permission.getName(), permission);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java
new file mode 100644
index 00000000..d465ee09
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java
@@ -0,0 +1,173 @@
+/*
+ * 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.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.text.BidiFormatter;
+import android.text.TextPaint;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public final class AppPermissions {
+ private static final float MAX_APP_LABEL_LENGTH_PIXELS = 500;
+
+ private static final TextPaint sAppLabelEllipsizePaint = new TextPaint();
+ static {
+ sAppLabelEllipsizePaint.setAntiAlias(true);
+ // Both text size and width are given in absolute pixels, for consistent truncation
+ // across devices; this value corresponds to the default 14dip size on an xdhpi device.
+ sAppLabelEllipsizePaint.setTextSize(42);
+ }
+
+ private final ArrayList<AppPermissionGroup> mGroups = new ArrayList<>();
+
+ private final LinkedHashMap<String, AppPermissionGroup> mNameToGroupMap = new LinkedHashMap<>();
+
+ private final Context mContext;
+
+ private final String[] mFilterPermissions;
+
+ private final CharSequence mAppLabel;
+
+ private final Runnable mOnErrorCallback;
+
+ private final boolean mSortGroups;
+
+ private PackageInfo mPackageInfo;
+
+ public AppPermissions(Context context, PackageInfo packageInfo, String[] permissions,
+ boolean sortGroups, Runnable onErrorCallback) {
+ mContext = context;
+ mPackageInfo = packageInfo;
+ mFilterPermissions = permissions;
+ mAppLabel = loadEllipsizedAppLabel(context, packageInfo);
+ mSortGroups = sortGroups;
+ mOnErrorCallback = onErrorCallback;
+ loadPermissionGroups();
+ }
+
+ public PackageInfo getPackageInfo() {
+ return mPackageInfo;
+ }
+
+ public void refresh() {
+ loadPackageInfo();
+ loadPermissionGroups();
+ }
+
+ public CharSequence getAppLabel() {
+ return mAppLabel;
+ }
+
+ public AppPermissionGroup getPermissionGroup(String name) {
+ return mNameToGroupMap.get(name);
+ }
+
+ public List<AppPermissionGroup> getPermissionGroups() {
+ return mGroups;
+ }
+
+
+ private void loadPackageInfo() {
+ try {
+ mPackageInfo = mContext.getPackageManager().getPackageInfo(
+ mPackageInfo.packageName, PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ if (mOnErrorCallback != null) {
+ mOnErrorCallback.run();
+ }
+ }
+ }
+
+ private void loadPermissionGroups() {
+ mGroups.clear();
+
+ if (mPackageInfo.requestedPermissions == null) {
+ return;
+ }
+
+ if (mFilterPermissions != null) {
+ for (String filterPermission : mFilterPermissions) {
+ for (String requestedPerm : mPackageInfo.requestedPermissions) {
+ if (!filterPermission.equals(requestedPerm)) {
+ continue;
+ }
+
+ if (hasGroupForPermission(requestedPerm)) {
+ break;
+ }
+
+ AppPermissionGroup group = AppPermissionGroup.create(mContext,
+ mPackageInfo, requestedPerm);
+ if (group == null) {
+ break;
+ }
+
+ mGroups.add(group);
+ break;
+ }
+ }
+ } else {
+ for (String requestedPerm : mPackageInfo.requestedPermissions) {
+ if (hasGroupForPermission(requestedPerm)) {
+ continue;
+ }
+
+ AppPermissionGroup group = AppPermissionGroup.create(mContext,
+ mPackageInfo, requestedPerm);
+ if (group == null) {
+ continue;
+ }
+
+ mGroups.add(group);
+ }
+ }
+
+ if (mSortGroups) {
+ Collections.sort(mGroups);
+ }
+
+ mNameToGroupMap.clear();
+ for (AppPermissionGroup group : mGroups) {
+ mNameToGroupMap.put(group.getName(), group);
+ }
+ }
+
+ private boolean hasGroupForPermission(String permission) {
+ for (AppPermissionGroup group : mGroups) {
+ if (group.hasPermission(permission)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static CharSequence loadEllipsizedAppLabel(Context context, PackageInfo packageInfo) {
+ String label = packageInfo.applicationInfo.loadLabel(
+ context.getPackageManager()).toString();
+ String noNewLineLabel = label.replace("\n", " ");
+ String ellipsizedLabel = TextUtils.ellipsize(noNewLineLabel, sAppLabelEllipsizePaint,
+ MAX_APP_LABEL_LENGTH_PIXELS, TextUtils.TruncateAt.END).toString();
+ return BidiFormatter.getInstance().unicodeWrap(ellipsizedLabel);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/Permission.java b/src/com/android/packageinstaller/permission/model/Permission.java
new file mode 100644
index 00000000..1be4e75b
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/Permission.java
@@ -0,0 +1,126 @@
+/*
+ * 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.app.AppOpsManager;
+import android.content.pm.PackageManager;
+
+public final class Permission {
+ private final String mName;
+ private final int mAppOp;
+
+ private boolean mGranted;
+ private boolean mAppOpAllowed;
+ private int mFlags;
+
+ public Permission(String name, boolean granted,
+ int appOp, boolean appOpAllowed, int flags) {
+ mName = name;
+ mGranted = granted;
+ mAppOp = appOp;
+ mAppOpAllowed = appOpAllowed;
+ mFlags = flags;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public int getAppOp() {
+ return mAppOp;
+ }
+
+ public int getFlags() {
+ return mFlags;
+ }
+
+ public boolean hasAppOp() {
+ return mAppOp != AppOpsManager.OP_NONE;
+ }
+
+ public boolean isGranted() {
+ return mGranted;
+ }
+
+ public void setGranted(boolean mGranted) {
+ this.mGranted = mGranted;
+ }
+
+ public boolean isAppOpAllowed() {
+ return mAppOpAllowed;
+ }
+
+ public boolean isUserFixed() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_USER_FIXED) != 0;
+ }
+
+ public void setUserFixed(boolean userFixed) {
+ if (userFixed) {
+ mFlags |= PackageManager.FLAG_PERMISSION_USER_FIXED;
+ } else {
+ mFlags &= ~PackageManager.FLAG_PERMISSION_USER_FIXED;
+ }
+ }
+
+ public boolean isSystemFixed() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0;
+ }
+
+ public boolean isPolicyFixed() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0;
+ }
+
+ public boolean isUserSet() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_USER_SET) != 0;
+ }
+
+ public boolean isGrantedByDefault() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0;
+ }
+
+ public void setUserSet(boolean userSet) {
+ if (userSet) {
+ mFlags |= PackageManager.FLAG_PERMISSION_USER_SET;
+ } else {
+ mFlags &= ~PackageManager.FLAG_PERMISSION_USER_SET;
+ }
+ }
+
+ public void setPolicyFixed(boolean policyFixed) {
+ if (policyFixed) {
+ mFlags |= PackageManager.FLAG_PERMISSION_POLICY_FIXED;
+ } else {
+ mFlags &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED;
+ }
+ }
+
+ public boolean shouldRevokeOnUpgrade() {
+ return (mFlags & PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE) != 0;
+ }
+
+ public void setRevokeOnUpgrade(boolean revokeOnUpgrade) {
+ if (revokeOnUpgrade) {
+ mFlags |= PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE;
+ } else {
+ mFlags &= ~PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE;
+ }
+ }
+
+ public void setAppOpAllowed(boolean mAppOpAllowed) {
+ this.mAppOpAllowed = mAppOpAllowed;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
new file mode 100644
index 00000000..e5d96d55
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -0,0 +1,414 @@
+/*
+ * 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.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PermissionInfo;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+public class PermissionApps {
+ private static final String LOG_TAG = "PermissionApps";
+
+ private final Context mContext;
+ private final String mGroupName;
+ private final PackageManager mPm;
+ private final Callback mCallback;
+
+ private final PmCache mCache;
+
+ private CharSequence mLabel;
+ private Drawable mIcon;
+ private List<PermissionApp> mPermApps;
+ // Map (pkg|uid) -> AppPermission
+ private ArrayMap<String, PermissionApp> mAppLookup;
+
+ private boolean mSkipUi;
+ private boolean mRefreshing;
+
+ public PermissionApps(Context context, String groupName, Callback callback) {
+ this(context, groupName, callback, null);
+ }
+
+ public PermissionApps(Context context, String groupName, Callback callback, PmCache cache) {
+ mCache = cache;
+ mContext = context;
+ mPm = mContext.getPackageManager();
+ mGroupName = groupName;
+ mCallback = callback;
+ loadGroupInfo();
+ }
+
+ public String getGroupName() {
+ return mGroupName;
+ }
+
+ public void loadNowWithoutUi() {
+ mSkipUi = true;
+ createMap(loadPermissionApps());
+ }
+
+ public void refresh(boolean getUiInfo) {
+ if (!mRefreshing) {
+ mRefreshing = true;
+ mSkipUi = !getUiInfo;
+ new PermissionAppsLoader().execute();
+ }
+ }
+
+ public int getGrantedCount(ArraySet<String> launcherPkgs) {
+ int count = 0;
+ for (PermissionApp app : mPermApps) {
+ if (!Utils.shouldShowPermission(app)) {
+ continue;
+ }
+ if (Utils.isSystem(app, launcherPkgs)) {
+ // We default to not showing system apps, so hide them from count.
+ continue;
+ }
+ if (app.areRuntimePermissionsGranted()) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ public int getTotalCount(ArraySet<String> launcherPkgs) {
+ int count = 0;
+ for (PermissionApp app : mPermApps) {
+ if (!Utils.shouldShowPermission(app)) {
+ continue;
+ }
+ if (Utils.isSystem(app, launcherPkgs)) {
+ // We default to not showing system apps, so hide them from count.
+ continue;
+ }
+ count++;
+ }
+ return count;
+ }
+
+ public Collection<PermissionApp> getApps() {
+ return mPermApps;
+ }
+
+ public PermissionApp getApp(String key) {
+ return mAppLookup.get(key);
+ }
+
+ public CharSequence getLabel() {
+ return mLabel;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ private List<PermissionApp> loadPermissionApps() {
+ PackageItemInfo groupInfo = getGroupInfo(mGroupName);
+ if (groupInfo == null) {
+ return Collections.emptyList();
+ }
+
+ List<PermissionInfo> groupPermInfos = getGroupPermissionInfos(mGroupName);
+ if (groupPermInfos == null) {
+ return Collections.emptyList();
+ }
+
+ ArrayList<PermissionApp> permApps = new ArrayList<>();
+
+ for (UserHandle user : UserManager.get(mContext).getUserProfiles()) {
+ List<PackageInfo> apps = mCache != null ? mCache.getPackages(user.getIdentifier())
+ : mPm.getInstalledPackages(PackageManager.GET_PERMISSIONS,
+ user.getIdentifier());
+
+ final int N = apps.size();
+ for (int i = 0; i < N; i++) {
+ PackageInfo app = apps.get(i);
+ if (app.requestedPermissions == null) {
+ continue;
+ }
+
+ for (int j = 0; j < app.requestedPermissions.length; j++) {
+ String requestedPerm = app.requestedPermissions[j];
+
+ PermissionInfo requestedPermissionInfo = null;
+
+ for (PermissionInfo groupPermInfo : groupPermInfos) {
+ if (requestedPerm.equals(groupPermInfo.name)) {
+ requestedPermissionInfo = groupPermInfo;
+ break;
+ }
+ }
+
+ if (requestedPermissionInfo == null) {
+ continue;
+ }
+
+ if (requestedPermissionInfo.protectionLevel
+ != PermissionInfo.PROTECTION_DANGEROUS
+ || (requestedPermissionInfo.flags
+ & PermissionInfo.FLAG_INSTALLED) == 0
+ || (requestedPermissionInfo.flags
+ & PermissionInfo.FLAG_HIDDEN) != 0) {
+ continue;
+ }
+
+ AppPermissionGroup group = AppPermissionGroup.create(mContext,
+ app, groupInfo, groupPermInfos, user);
+
+ String label = mSkipUi ? app.packageName
+ : app.applicationInfo.loadLabel(mPm).toString();
+ PermissionApp permApp = new PermissionApp(app.packageName,
+ group, label, getBadgedIcon(app.applicationInfo),
+ app.applicationInfo);
+
+ permApps.add(permApp);
+ break; // move to the next app.
+ }
+ }
+ }
+
+ Collections.sort(permApps);
+
+ return permApps;
+ }
+
+ private void createMap(List<PermissionApp> result) {
+ mAppLookup = new ArrayMap<>();
+ for (PermissionApp app : result) {
+ mAppLookup.put(app.getKey(), app);
+ }
+ mPermApps = result;
+ }
+
+ private PackageItemInfo getGroupInfo(String groupName) {
+ try {
+ return mContext.getPackageManager().getPermissionGroupInfo(groupName, 0);
+ } catch (NameNotFoundException e) {
+ /* ignore */
+ }
+ try {
+ return mContext.getPackageManager().getPermissionInfo(groupName, 0);
+ } catch (NameNotFoundException e2) {
+ /* ignore */
+ }
+ return null;
+ }
+
+ private List<PermissionInfo> getGroupPermissionInfos(String groupName) {
+ try {
+ return mContext.getPackageManager().queryPermissionsByGroup(groupName, 0);
+ } catch (NameNotFoundException e) {
+ /* ignore */
+ }
+ try {
+ PermissionInfo permissionInfo = mContext.getPackageManager()
+ .getPermissionInfo(groupName, 0);
+ List<PermissionInfo> permissions = new ArrayList<>();
+ permissions.add(permissionInfo);
+ return permissions;
+ } catch (NameNotFoundException e2) {
+ /* ignore */
+ }
+ return null;
+ }
+
+ private Drawable getBadgedIcon(ApplicationInfo appInfo) {
+ if (mSkipUi) {
+ return null;
+ }
+ Drawable unbadged = appInfo.loadUnbadgedIcon(mPm);
+ return mPm.getUserBadgedIcon(unbadged,
+ new UserHandle(UserHandle.getUserId(appInfo.uid)));
+ }
+
+ private void loadGroupInfo() {
+ PackageItemInfo info;
+ try {
+ info = mPm.getPermissionGroupInfo(mGroupName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ try {
+ PermissionInfo permInfo = mPm.getPermissionInfo(mGroupName, 0);
+ if (permInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS) {
+ Log.w(LOG_TAG, mGroupName + " is not a runtime permission");
+ return;
+ }
+ info = permInfo;
+ } catch (NameNotFoundException reallyNotFound) {
+ Log.w(LOG_TAG, "Can't find permission: " + mGroupName, reallyNotFound);
+ return;
+ }
+ }
+ mLabel = info.loadLabel(mPm);
+ if (info.icon != 0) {
+ mIcon = info.loadUnbadgedIcon(mPm);
+ } else {
+ mIcon = mContext.getDrawable(R.drawable.ic_perm_device_info);
+ }
+ mIcon = Utils.applyTint(mContext, mIcon, android.R.attr.colorControlNormal);
+ }
+
+ public static class PermissionApp implements Comparable<PermissionApp> {
+ private final String mPackageName;
+ private final AppPermissionGroup mAppPermissionGroup;
+ private final String mLabel;
+ private final Drawable mIcon;
+ private final ApplicationInfo mInfo;
+
+ public PermissionApp(String packageName, AppPermissionGroup appPermissionGroup,
+ String label, Drawable icon, ApplicationInfo info) {
+ mPackageName = packageName;
+ mAppPermissionGroup = appPermissionGroup;
+ mLabel = label;
+ mIcon = icon;
+ mInfo = info;
+ }
+
+ public ApplicationInfo getAppInfo() {
+ return mInfo;
+ }
+
+ public String getKey() {
+ return mPackageName + getUid();
+ }
+
+ public String getLabel() {
+ return mLabel;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ public boolean areRuntimePermissionsGranted() {
+ return mAppPermissionGroup.areRuntimePermissionsGranted();
+ }
+
+ public void grantRuntimePermissions() {
+ mAppPermissionGroup.grantRuntimePermissions(false);
+ }
+
+ public void revokeRuntimePermissions() {
+ mAppPermissionGroup.revokeRuntimePermissions(false);
+ }
+
+ public boolean isPolicyFixed() {
+ return mAppPermissionGroup.isPolicyFixed();
+ }
+
+ public boolean isSystemFixed() {
+ return mAppPermissionGroup.isSystemFixed();
+ }
+
+ public boolean hasGrantedByDefaultPermissions() {
+ return mAppPermissionGroup.hasGrantedByDefaultPermission();
+ }
+
+ public boolean hasRuntimePermissions() {
+ return mAppPermissionGroup.hasRuntimePermission();
+ }
+
+ public boolean hasAppOpPermissions() {
+ return mAppPermissionGroup.hasAppOpPermission();
+ }
+
+ public String getPackageName() {
+ return mPackageName;
+ }
+
+ public AppPermissionGroup getPermissionGroup() {
+ return mAppPermissionGroup;
+ }
+
+ @Override
+ public int compareTo(PermissionApp another) {
+ final int result = mLabel.compareTo(another.mLabel);
+ if (result == 0) {
+ // Unbadged before badged.
+ return getKey().compareTo(another.getKey());
+ }
+ return result;
+ }
+
+ public int getUid() {
+ return mAppPermissionGroup.getApp().applicationInfo.uid;
+ }
+ }
+
+ private class PermissionAppsLoader extends AsyncTask<Void, Void, List<PermissionApp>> {
+
+ @Override
+ protected List<PermissionApp> doInBackground(Void... args) {
+ return loadPermissionApps();
+ }
+
+ @Override
+ protected void onPostExecute(List<PermissionApp> result) {
+ mRefreshing = false;
+ createMap(result);
+ if (mCallback != null) {
+ mCallback.onPermissionsLoaded(PermissionApps.this);
+ }
+ }
+ }
+
+ /**
+ * Class used to reduce the number of calls to the package manager.
+ * This caches app information so it should only be used across parallel PermissionApps
+ * instances, and should not be retained across UI refresh.
+ */
+ public static class PmCache {
+ private final SparseArray<List<PackageInfo>> mPackageInfoCache = new SparseArray<>();
+ private final PackageManager mPm;
+
+ public PmCache(PackageManager pm) {
+ mPm = pm;
+ }
+
+ public synchronized List<PackageInfo> getPackages(int userId) {
+ List<PackageInfo> ret = mPackageInfoCache.get(userId);
+ if (ret == null) {
+ ret = mPm.getInstalledPackages(PackageManager.GET_PERMISSIONS, userId);
+ mPackageInfoCache.put(userId, ret);
+ }
+ return ret;
+ }
+ }
+
+ public interface Callback {
+ void onPermissionsLoaded(PermissionApps permissionApps);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroup.java b/src/com/android/packageinstaller/permission/model/PermissionGroup.java
new file mode 100644
index 00000000..8a602b44
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/PermissionGroup.java
@@ -0,0 +1,87 @@
+/*
+ * 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.graphics.drawable.Drawable;
+
+public final class PermissionGroup implements Comparable<PermissionGroup> {
+ private final String mName;
+ private final String mDeclaringPackage;
+ private final CharSequence mLabel;
+ private final Drawable mIcon;
+
+ PermissionGroup(String name, String declaringPackage,
+ CharSequence label, Drawable icon) {
+ mDeclaringPackage = declaringPackage;
+ mName = name;
+ mLabel = label;
+ mIcon = icon;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public String getDeclaringPackage() {
+ return mDeclaringPackage;
+ }
+
+ public CharSequence getLabel() {
+ return mLabel;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ @Override
+ public int compareTo(PermissionGroup another) {
+ return mLabel.toString().compareTo(another.mLabel.toString());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ PermissionGroup other = (PermissionGroup) obj;
+
+ if (mName == null) {
+ if (other.mName != null) {
+ return false;
+ }
+ } else if (!mName.equals(other.mName)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return mName != null ? mName.hashCode() : 0;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroups.java b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
new file mode 100644
index 00000000..59eba856
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
@@ -0,0 +1,225 @@
+/*
+ * 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.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.AsyncTaskLoader;
+import android.content.Context;
+import android.content.Loader;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.util.ArraySet;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+public final class PermissionGroups implements LoaderCallbacks<List<PermissionGroup>> {
+ private final ArrayList<PermissionGroup> mGroups = new ArrayList<>();
+ private final Context mContext;
+ private final LoaderManager mLoaderManager;
+ private final PermissionsGroupsChangeCallback mCallback;
+
+ public interface PermissionsGroupsChangeCallback {
+ public void onPermissionGroupsChanged();
+ }
+
+ public PermissionGroups(Context context, LoaderManager loaderManager,
+ PermissionsGroupsChangeCallback callback) {
+ mContext = context;
+ mLoaderManager = loaderManager;
+ mCallback = callback;
+ }
+
+ @Override
+ public Loader<List<PermissionGroup>> onCreateLoader(int id, Bundle args) {
+ return new PermissionsLoader(mContext);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<List<PermissionGroup>> loader,
+ List<PermissionGroup> groups) {
+ if (mGroups.equals(groups)) {
+ return;
+ }
+ mGroups.clear();
+ mGroups.addAll(groups);
+ mCallback.onPermissionGroupsChanged();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<List<PermissionGroup>> loader) {
+ mGroups.clear();
+ mCallback.onPermissionGroupsChanged();
+ }
+
+ public void refresh() {
+ mLoaderManager.restartLoader(0, null, this);
+ mLoaderManager.getLoader(0).forceLoad();
+ }
+
+ public List<PermissionGroup> getGroups() {
+ return mGroups;
+ }
+
+ public PermissionGroup getGroup(String name) {
+ for (PermissionGroup group : mGroups) {
+ if (group.getName().equals(name)) {
+ return group;
+ }
+ }
+ return null;
+ }
+
+ private static final class PermissionsLoader extends AsyncTaskLoader<List<PermissionGroup>> {
+
+ public PermissionsLoader(Context context) {
+ super(context);
+ }
+
+ @Override
+ public List<PermissionGroup> loadInBackground() {
+ List<PermissionGroup> groups = new ArrayList<>();
+ Set<String> seenPermissions = new ArraySet<>();
+
+
+ PackageManager packageManager = getContext().getPackageManager();
+ List<PermissionGroupInfo> groupInfos = packageManager.getAllPermissionGroups(0);
+
+ for (PermissionGroupInfo groupInfo : groupInfos) {
+ // Mare sure we respond to cancellation.
+ if (isLoadInBackgroundCanceled()) {
+ return Collections.emptyList();
+ }
+
+ // Get the permissions in this group.
+ final List<PermissionInfo> groupPermissions;
+ try {
+ groupPermissions = packageManager.queryPermissionsByGroup(groupInfo.name, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ continue;
+ }
+
+ boolean hasRuntimePermissions = false;
+
+ // Cache seen permissions and see if group has runtime permissions.
+ for (PermissionInfo groupPermission : groupPermissions) {
+ seenPermissions.add(groupPermission.name);
+ if (groupPermission.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS
+ && (groupPermission.flags & PermissionInfo.FLAG_INSTALLED) != 0
+ && (groupPermission.flags & PermissionInfo.FLAG_HIDDEN) == 0) {
+ hasRuntimePermissions = true;
+ }
+ }
+
+ // No runtime permissions - not interesting for us.
+ if (!hasRuntimePermissions) {
+ continue;
+ }
+
+ CharSequence label = loadItemInfoLabel(groupInfo);
+ Drawable icon = loadItemInfoIcon(groupInfo);
+
+ // Create the group and add to the list.
+ PermissionGroup group = new PermissionGroup(groupInfo.name,
+ groupInfo.packageName, label, icon);
+ groups.add(group);
+ }
+
+
+ // Make sure we add groups for lone runtime permissions.
+ List<PackageInfo> installedPackages = getContext().getPackageManager()
+ .getInstalledPackages(PackageManager.GET_PERMISSIONS);
+
+
+ // We will filter out permissions that no package requests.
+ Set<String> requestedPermissions = new ArraySet<>();
+ for (PackageInfo installedPackage : installedPackages) {
+ if (installedPackage.requestedPermissions == null) {
+ continue;
+ }
+ for (String requestedPermission : installedPackage.requestedPermissions) {
+ requestedPermissions.add(requestedPermission);
+ }
+ }
+
+ for (PackageInfo installedPackage : installedPackages) {
+ if (installedPackage.permissions == null) {
+ continue;
+ }
+
+ for (PermissionInfo permissionInfo : installedPackage.permissions) {
+ // If we have handled this permission, no more work to do.
+ if (!seenPermissions.add(permissionInfo.name)) {
+ continue;
+ }
+
+ // We care only about installed runtime permissions.
+ if (permissionInfo.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS
+ || (permissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0) {
+ continue;
+ }
+
+ // If no app uses this permission,
+ if (!requestedPermissions.contains(permissionInfo.name)) {
+ continue;
+ }
+
+ CharSequence label = loadItemInfoLabel(permissionInfo);
+ Drawable icon = loadItemInfoIcon(permissionInfo);
+
+ // Create the group and add to the list.
+ PermissionGroup group = new PermissionGroup(permissionInfo.name,
+ permissionInfo.packageName, label, icon);
+ groups.add(group);
+ }
+ }
+
+ Collections.sort(groups);
+ return groups;
+ }
+
+ private CharSequence loadItemInfoLabel(PackageItemInfo itemInfo) {
+ CharSequence label = itemInfo.loadLabel(getContext().getPackageManager());
+ if (label == null) {
+ label = itemInfo.name;
+ }
+ return label;
+ }
+
+ private Drawable loadItemInfoIcon(PackageItemInfo itemInfo) {
+ final Drawable icon;
+ if (itemInfo.icon > 0) {
+ icon = Utils.loadDrawable(getContext().getPackageManager(),
+ itemInfo.packageName, itemInfo.icon);
+ } else {
+ icon = getContext().getDrawable(R.drawable.ic_perm_device_info);
+ }
+ return icon;
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
new file mode 100644
index 00000000..2a46f1a6
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
@@ -0,0 +1,133 @@
+/*
+ * 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.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;
+
+public class PermissionStatusReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int[] counts = new int[3];
+ ArrayList<CharSequence> grantedGroups = new ArrayList<>();
+ boolean succeeded = false;
+
+ boolean isForPackage = intent.hasExtra(Intent.EXTRA_PACKAGE_NAME);
+
+ Intent responseIntent = new Intent(intent.getStringExtra(
+ Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT));
+ responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+
+
+ if (isForPackage) {
+ String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+ succeeded = getPermissionsCount(context, pkg, counts, grantedGroups);
+ } else {
+ succeeded = getAppsWithPermissionsCount(context, counts);
+ }
+ if (succeeded) {
+ responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts);
+
+ if (isForPackage) {
+ responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT,
+ grantedGroups.toArray(new CharSequence[grantedGroups.size()]));
+ }
+ }
+
+ 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 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;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java b/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java
new file mode 100644
index 00000000..59e54707
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/ButtonBarLayout.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.LinearLayout;
+import com.android.packageinstaller.R;
+
+/**
+ * An extension of LinearLayout that automatically switches to vertical
+ * orientation when it can't fit its child views horizontally.
+ */
+public class ButtonBarLayout extends LinearLayout {
+ /** Whether the current configuration allows stacking. */
+ private boolean mAllowStacking;
+
+ private int mLastWidthSize = -1;
+
+ public ButtonBarLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mAllowStacking = true;
+ }
+
+ public void setAllowStacking(boolean allowStacking) {
+ if (mAllowStacking != allowStacking) {
+ mAllowStacking = allowStacking;
+ if (!mAllowStacking && getOrientation() == LinearLayout.VERTICAL) {
+ setStacked(false);
+ }
+ requestLayout();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+
+ if (mAllowStacking) {
+ if (widthSize > mLastWidthSize && isStacked()) {
+ // We're being measured wider this time, try un-stacking.
+ setStacked(false);
+ }
+
+ mLastWidthSize = widthSize;
+ }
+
+ boolean needsRemeasure = false;
+
+ // If we're not stacked, make sure the measure spec is AT_MOST rather
+ // than EXACTLY. This ensures that we'll still get TOO_SMALL so that we
+ // know to stack the buttons.
+ final int initialWidthMeasureSpec;
+ if (!isStacked() && MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY) {
+ initialWidthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.AT_MOST);
+
+ // We'll need to remeasure again to fill excess space.
+ needsRemeasure = true;
+ } else {
+ initialWidthMeasureSpec = widthMeasureSpec;
+ }
+
+ super.onMeasure(initialWidthMeasureSpec, heightMeasureSpec);
+
+ if (mAllowStacking && !isStacked()) {
+ final int measuredWidth = getMeasuredWidthAndState();
+ final int measuredWidthState = measuredWidth & MEASURED_STATE_MASK;
+ if (measuredWidthState == MEASURED_STATE_TOO_SMALL) {
+ setStacked(true);
+
+ // Measure again in the new orientation.
+ needsRemeasure = true;
+ }
+ }
+
+ if (needsRemeasure) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+
+ private void setStacked(boolean stacked) {
+ setOrientation(stacked ? LinearLayout.VERTICAL : LinearLayout.HORIZONTAL);
+ setGravity(stacked ? Gravity.RIGHT : Gravity.BOTTOM);
+
+ final View spacer = findViewById(R.id.spacer);
+ if (spacer != null) {
+ spacer.setVisibility(stacked ? View.GONE : View.INVISIBLE);
+ }
+
+ // Reverse the child order. This is specific to the Material button
+ // bar's layout XML and will probably not generalize.
+ final int childCount = getChildCount();
+ for (int i = childCount - 2; i >= 0; i--) {
+ bringChildToFront(getChildAt(i));
+ }
+ }
+
+ private boolean isStacked() {
+ return getOrientation() == LinearLayout.VERTICAL;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
new file mode 100644
index 00000000..44bbcc9c
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui;
+
+import static android.content.pm.PackageManager.PERMISSION_DENIED;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PermissionInfo;
+import android.content.res.Resources;
+import android.graphics.Typeface;
+import android.graphics.drawable.Icon;
+import android.hardware.camera2.utils.ArrayUtils;
+import android.os.Bundle;
+import android.text.SpannableString;
+import android.text.style.StyleSpan;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+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.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public class GrantPermissionsActivity extends OverlayTouchActivity
+ implements GrantPermissionsViewHandler.ResultListener {
+
+ private static final String LOG_TAG = "GrantPermissionsActivity";
+
+ private String[] mRequestedPermissions;
+ private int[] mGrantResults;
+
+ private LinkedHashMap<String, GroupState> mRequestGrantPermissionGroups = new LinkedHashMap<>();
+
+ private GrantPermissionsViewHandler mViewHandler;
+ private AppPermissions mAppPermissions;
+
+ boolean mResultSet;
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setFinishOnTouchOutside(false);
+
+ setTitle(R.string.permission_request_title);
+
+ if (Utils.isTelevision(this)) {
+ mViewHandler = new com.android.packageinstaller.permission.ui.television
+ .GrantPermissionsViewHandlerImpl(this).setResultListener(this);
+ } else {
+ mViewHandler = new com.android.packageinstaller.permission.ui.handheld
+ .GrantPermissionsViewHandlerImpl(this).setResultListener(this);
+ }
+
+ mRequestedPermissions = getIntent().getStringArrayExtra(
+ PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES);
+ if (mRequestedPermissions == null) {
+ mRequestedPermissions = new String[0];
+ }
+
+ final int requestedPermCount = mRequestedPermissions.length;
+ mGrantResults = new int[requestedPermCount];
+
+ if (requestedPermCount == 0) {
+ setResultAndFinish();
+ return;
+ }
+
+ PackageInfo callingPackageInfo = getCallingPackageInfo();
+
+ DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
+ final int permissionPolicy = devicePolicyManager.getPermissionPolicy(null);
+
+ // If calling package is null we default to deny all.
+ updateDefaultResults(callingPackageInfo, permissionPolicy);
+
+ if (callingPackageInfo == null) {
+ setResultAndFinish();
+ return;
+ }
+
+ mAppPermissions = new AppPermissions(this, callingPackageInfo, mRequestedPermissions, false,
+ new Runnable() {
+ @Override
+ public void run() {
+ setResultAndFinish();
+ }
+ });
+
+ for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
+ // 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.setPolicyFixed();
+ } break;
+
+ case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: {
+ if (group.areRuntimePermissionsGranted()) {
+ group.revokeRuntimePermissions(false);
+ }
+ group.setPolicyFixed();
+ } break;
+
+ default: {
+ mRequestGrantPermissionGroups.put(group.getName(), new GroupState(group));
+ } break;
+ }
+ } else {
+ // if the permission is fixed, ensure that we return the right request result
+ updateGrantResults(group);
+ }
+ }
+
+ setContentView(mViewHandler.createView());
+
+ Window window = getWindow();
+ WindowManager.LayoutParams layoutParams = window.getAttributes();
+ mViewHandler.updateWindowAttributes(layoutParams);
+ window.setAttributes(layoutParams);
+
+ if (!showNextPermissionGroupGrantRequest()) {
+ setResultAndFinish();
+ }
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ View rootView = getWindow().getDecorView();
+ if (rootView.getTop() != 0) {
+ // We are animating the top view, need to compensate for that in motion events.
+ ev.setLocation(ev.getX(), ev.getY() - rootView.getTop());
+ }
+ return super.dispatchTouchEvent(ev);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mViewHandler.saveInstanceState(outState);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ mViewHandler.loadInstanceState(savedInstanceState);
+ }
+
+ private boolean showNextPermissionGroupGrantRequest() {
+ final int groupCount = mRequestGrantPermissionGroups.size();
+
+ int currentIndex = 0;
+ for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
+ if (groupState.mState == GroupState.STATE_UNKNOWN) {
+ CharSequence appLabel = mAppPermissions.getAppLabel();
+ SpannableString message = new SpannableString(getString(
+ R.string.permission_warning_template, appLabel,
+ groupState.mGroup.getDescription()));
+ // Set the permission message as the title so it can be announced.
+ setTitle(message);
+ // Color the app name.
+ int appLabelStart = message.toString().indexOf(appLabel.toString(), 0);
+ int appLabelLength = appLabel.length();
+ message.setSpan(new StyleSpan(Typeface.BOLD), appLabelStart,
+ appLabelStart + appLabelLength, 0);
+
+ // Set the new grant view
+ // TODO: Use a real message for the action. We need group action APIs
+ Resources resources;
+ try {
+ resources = getPackageManager().getResourcesForApplication(
+ groupState.mGroup.getIconPkg());
+ } catch (NameNotFoundException e) {
+ // Fallback to system.
+ resources = Resources.getSystem();
+ }
+ int icon = groupState.mGroup.getIconResId();
+
+ mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, currentIndex,
+ Icon.createWithResource(resources, icon), message,
+ groupState.mGroup.isUserSet());
+ return true;
+ }
+
+ currentIndex++;
+ }
+
+ return false;
+ }
+
+ @Override
+ public void onPermissionGrantResult(String name, boolean granted, boolean doNotAskAgain) {
+ if (isObscuredTouch()) {
+ showOverlayDialog();
+ finish();
+ return;
+ }
+ GroupState groupState = mRequestGrantPermissionGroups.get(name);
+ if (groupState.mGroup != null) {
+ if (granted) {
+ groupState.mGroup.grantRuntimePermissions(doNotAskAgain);
+ groupState.mState = GroupState.STATE_ALLOWED;
+ } else {
+ groupState.mGroup.revokeRuntimePermissions(doNotAskAgain);
+ groupState.mState = GroupState.STATE_DENIED;
+ }
+ updateGrantResults(groupState.mGroup);
+ }
+ if (!showNextPermissionGroupGrantRequest()) {
+ setResultAndFinish();
+ }
+ }
+
+ private void updateGrantResults(AppPermissionGroup group) {
+ for (Permission permission : group.getPermissions()) {
+ final int index = ArrayUtils.getArrayIndex(
+ mRequestedPermissions, permission.getName());
+ if (index >= 0) {
+ mGrantResults[index] = permission.isGranted() ? PackageManager.PERMISSION_GRANTED
+ : PackageManager.PERMISSION_DENIED;
+ }
+ }
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // We do not allow backing out.
+ return keyCode == KeyEvent.KEYCODE_BACK;
+ }
+
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ // We do not allow backing out.
+ return keyCode == KeyEvent.KEYCODE_BACK;
+ }
+
+ @Override
+ public void finish() {
+ setResultIfNeeded(RESULT_CANCELED);
+ super.finish();
+ }
+
+ private int computePermissionGrantState(PackageInfo callingPackageInfo,
+ String permission, int permissionPolicy) {
+ boolean permissionRequested = false;
+
+ for (int i = 0; i < callingPackageInfo.requestedPermissions.length; i++) {
+ if (permission.equals(callingPackageInfo.requestedPermissions[i])) {
+ permissionRequested = true;
+ if ((callingPackageInfo.requestedPermissionsFlags[i]
+ & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
+ return PERMISSION_GRANTED;
+ }
+ break;
+ }
+ }
+
+ if (!permissionRequested) {
+ return PERMISSION_DENIED;
+ }
+
+ try {
+ PermissionInfo pInfo = getPackageManager().getPermissionInfo(permission, 0);
+ if ((pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+ != PermissionInfo.PROTECTION_DANGEROUS) {
+ return PERMISSION_DENIED;
+ }
+ } catch (NameNotFoundException e) {
+ return PERMISSION_DENIED;
+ }
+
+ switch (permissionPolicy) {
+ case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
+ return PERMISSION_GRANTED;
+ }
+ default: {
+ return PERMISSION_DENIED;
+ }
+ }
+ }
+
+ private PackageInfo getCallingPackageInfo() {
+ try {
+ return getPackageManager().getPackageInfo(getCallingPackage(),
+ PackageManager.GET_PERMISSIONS);
+ } catch (NameNotFoundException e) {
+ Log.i(LOG_TAG, "No package: " + getCallingPackage(), e);
+ return null;
+ }
+ }
+
+ private void updateDefaultResults(PackageInfo callingPackageInfo, int permissionPolicy) {
+ final int requestedPermCount = mRequestedPermissions.length;
+ for (int i = 0; i < requestedPermCount; i++) {
+ String permission = mRequestedPermissions[i];
+ mGrantResults[i] = callingPackageInfo != null
+ ? computePermissionGrantState(callingPackageInfo, permission, permissionPolicy)
+ : PERMISSION_DENIED;
+ }
+ }
+
+ private void setResultIfNeeded(int resultCode) {
+ if (!mResultSet) {
+ mResultSet = true;
+ logRequestedPermissionGroups();
+ Intent result = new Intent(PackageManager.ACTION_REQUEST_PERMISSIONS);
+ result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES, mRequestedPermissions);
+ result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS, mGrantResults);
+ setResult(resultCode, result);
+ }
+ }
+
+ private void setResultAndFinish() {
+ setResultIfNeeded(RESULT_OK);
+ finish();
+ }
+
+ private void logRequestedPermissionGroups() {
+ if (mRequestGrantPermissionGroups.isEmpty()) {
+ return;
+ }
+
+ final int groupCount = mRequestGrantPermissionGroups.size();
+ List<AppPermissionGroup> groups = new ArrayList<>(groupCount);
+ for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
+ groups.add(groupState.mGroup);
+ }
+
+ SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);
+ }
+
+ private static final class GroupState {
+ static final int STATE_UNKNOWN = 0;
+ static final int STATE_ALLOWED = 1;
+ static final int STATE_DENIED = 2;
+
+ final AppPermissionGroup mGroup;
+ int mState = STATE_UNKNOWN;
+
+ GroupState(AppPermissionGroup group) {
+ mGroup = group;
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java
new file mode 100644
index 00000000..5e2259af
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui;
+
+import android.graphics.drawable.Icon;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+
+/**
+ * Class for managing the presentation and user interaction of the "grant
+ * permissions" user interface.
+ */
+public interface GrantPermissionsViewHandler {
+
+ /**
+ * Listener interface for getting notified when the user responds to a
+ * permissions grant request.
+ */
+ interface ResultListener {
+ void onPermissionGrantResult(String groupName, boolean granted, boolean doNotAskAgain);
+ }
+
+ /**
+ * Creates and returns the view hierarchy that is managed by this view
+ * handler. This must be called before {@link #updateUi}.
+ */
+ View createView();
+
+ /**
+ * Updates the layout attributes of the current window. This is an optional
+ * operation; implementations only need to do work in this method if they
+ * need to alter the default styles provided by the activity's theme.
+ */
+ void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams);
+
+ /**
+ * Updates the view hierarchy to reflect the specified state.
+ * <p>
+ * Note that this must be called at least once before showing the UI to
+ * the user to properly initialize the UI.
+ *
+ * @param groupName the name of the permission group
+ * @param groupCount the total number of groups that are being requested
+ * @param groupIndex the index of the current group being requested
+ * @param icon the icon representation of the current group
+ * @param message the message to display the user
+ * @param showDoNotAsk whether to show the "do not ask again" option
+ */
+ void updateUi(String groupName, int groupCount, int groupIndex, Icon icon,
+ CharSequence message, boolean showDoNotAsk);
+
+ /**
+ * Sets the result listener that will be notified when the user responds
+ * to a permissions grant request.
+ */
+ GrantPermissionsViewHandler setResultListener(ResultListener listener);
+
+ /**
+ * Called by {@link GrantPermissionsActivity} to save the state of this
+ * view handler to the specified bundle.
+ */
+ void saveInstanceState(Bundle outState);
+
+ /**
+ * Called by {@link GrantPermissionsActivity} to load the state of this
+ * view handler from the specified bundle.
+ */
+ void loadInstanceState(Bundle savedInstanceState);
+
+ /**
+ * Gives a chance for handling the back key.
+ */
+ void onBackPressed();
+}
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
new file mode 100644
index 00000000..f5703564
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
@@ -0,0 +1,91 @@
+/*
+* Copyright (C) 2015 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.android.packageinstaller.permission.ui;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import com.android.packageinstaller.permission.utils.Utils;
+
+public final class ManagePermissionsActivity extends OverlayTouchActivity {
+ private static final String LOG_TAG = "ManagePermissionsActivity";
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (savedInstanceState != null) {
+ return;
+ }
+
+ Fragment fragment;
+ String action = getIntent().getAction();
+
+ switch (action) {
+ case Intent.ACTION_MANAGE_PERMISSIONS: {
+ if (Utils.isTelevision(this)) {
+ fragment = com.android.packageinstaller.permission.ui.television
+ .ManagePermissionsFragment.newInstance();
+ } else {
+ fragment = com.android.packageinstaller.permission.ui.handheld
+ .ManagePermissionsFragment.newInstance();
+ }
+ } break;
+
+ case Intent.ACTION_MANAGE_APP_PERMISSIONS: {
+ String packageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+ if (packageName == null) {
+ Log.i(LOG_TAG, "Missing mandatory argument EXTRA_PACKAGE_NAME");
+ finish();
+ return;
+ }
+ if (Utils.isTelevision(this)) {
+ fragment = com.android.packageinstaller.permission.ui.television
+ .AppPermissionsFragment.newInstance(packageName);
+ } else {
+ fragment = com.android.packageinstaller.permission.ui.handheld
+ .AppPermissionsFragment.newInstance(packageName);
+ }
+ } break;
+
+ case Intent.ACTION_MANAGE_PERMISSION_APPS: {
+ String permissionName = getIntent().getStringExtra(Intent.EXTRA_PERMISSION_NAME);
+ if (permissionName == null) {
+ Log.i(LOG_TAG, "Missing mandatory argument EXTRA_PERMISSION_NAME");
+ finish();
+ return;
+ }
+ if (Utils.isTelevision(this)) {
+ fragment = com.android.packageinstaller.permission.ui.television
+ .PermissionAppsFragment.newInstance(permissionName);
+ } else {
+ fragment = com.android.packageinstaller.permission.ui.handheld
+ .PermissionAppsFragment.newInstance(permissionName);
+ }
+ } break;
+
+ default: {
+ Log.w(LOG_TAG, "Unrecognized action " + action);
+ finish();
+ return;
+ }
+ }
+
+ getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
new file mode 100644
index 00000000..c9ccf9c1
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+
+/**
+ * Allows one standard layout pass, but afterwards holds getMeasuredHeight constant,
+ * however still allows drawing larger at the size needed by its children. This allows
+ * a dialog to tell the window the height is constant (with keeps its position constant)
+ * but allows the view to grow downwards for animation.
+ */
+public class ManualLayoutFrame extends FrameLayout {
+
+ private int mDesiredHeight;
+ private int mHeight;
+ private int mWidth;
+
+ private View mOffsetView;
+
+ public ManualLayoutFrame(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setClipChildren(false);
+ setClipToPadding(false);
+ }
+
+ public int getLayoutHeight() {
+ return mDesiredHeight;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (mWidth != 0) {
+ // Keep the width constant to avoid weirdness.
+ widthMeasureSpec = MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY);
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ mDesiredHeight = getMeasuredHeight();
+ if (mHeight == 0 && mDesiredHeight != 0) {
+ // Record the first non-zero width and height, this will be the height henceforth.
+ mHeight = mDesiredHeight;
+ mWidth = getMeasuredWidth();
+ }
+ if (mHeight != 0) {
+ // Always report the same height
+ setMeasuredDimension(getMeasuredWidth(), mHeight);
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ if (mDesiredHeight != 0) {
+ // Draw at height we expect to be.
+ setBottom(getTop() + mDesiredHeight);
+ bottom = top + mDesiredHeight;
+ }
+ super.onLayout(changed, left, top, right, bottom);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
new file mode 100644
index 00000000..b3938b1e
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui;
+
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.MotionEvent;
+
+public class OverlayTouchActivity extends Activity {
+
+ private boolean mObscuredTouch;
+
+ public boolean isObscuredTouch() {
+ return mObscuredTouch;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent event) {
+ mObscuredTouch = (event.getFlags() & (MotionEvent.FLAG_WINDOW_IS_OBSCURED
+ | MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED)) != 0;
+ return super.dispatchTouchEvent(event);
+ }
+
+ public void showOverlayDialog() {
+ startActivity(new Intent(this, OverlayWarningDialog.class));
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java b/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java
new file mode 100644
index 00000000..61734b47
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.ActivityNotFoundException;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.Intent;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.packageinstaller.R;
+
+public class OverlayWarningDialog extends Activity implements OnClickListener, OnDismissListener {
+
+ private static final String TAG = "OverlayWarningDialog";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.screen_overlay_title)
+ .setMessage(R.string.screen_overlay_message)
+ .setPositiveButton(R.string.screen_overlay_button, this)
+ .setOnDismissListener(this)
+ .show();
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ finish();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+ try {
+ startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION));
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, "No manage overlay settings", e);
+ }
+ }
+
+}
diff --git a/src/com/android/packageinstaller/permission/ui/PreferenceImageView.java b/src/com/android/packageinstaller/permission/ui/PreferenceImageView.java
new file mode 100644
index 00000000..c3f51674
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/PreferenceImageView.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014 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;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+/**
+ * Extension of ImageView that correctly applies maxWidth and maxHeight.
+ */
+public class PreferenceImageView extends ImageView {
+
+ public PreferenceImageView(Context context) {
+ this(context, null);
+ }
+
+ public PreferenceImageView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public PreferenceImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public PreferenceImageView(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ if (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED) {
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+ final int maxWidth = getMaxWidth();
+ if (maxWidth != Integer.MAX_VALUE
+ && (maxWidth < widthSize || widthMode == MeasureSpec.UNSPECIFIED)) {
+ widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST);
+ }
+ }
+
+ final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+ if (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED) {
+ final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+ final int maxHeight = getMaxHeight();
+ if (maxHeight != Integer.MAX_VALUE
+ && (maxHeight < heightSize || heightMode == MeasureSpec.UNSPECIFIED)) {
+ heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
+ }
+ }
+
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
new file mode 100644
index 00000000..b3b0895c
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
@@ -0,0 +1,214 @@
+/*
+* Copyright (C) 2015 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.app.ActionBar;
+import android.app.AlertDialog;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+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.Log;
+import android.view.MenuItem;
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public final class AllAppPermissionsFragment extends SettingsWithHeader {
+
+ private static final String LOG_TAG = "AllAppPermissionsFragment";
+
+ private static final String KEY_OTHER = "other_perms";
+
+ public static AllAppPermissionsFragment newInstance(String packageName) {
+ AllAppPermissionsFragment instance = new AllAppPermissionsFragment();
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ instance.setArguments(arguments);
+ return instance;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setTitle(R.string.all_permissions);
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateUi();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home: {
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void updateUi() {
+ if (getPreferenceScreen() != null) {
+ getPreferenceScreen().removeAll();
+ }
+ addPreferencesFromResource(R.xml.all_permissions);
+ PreferenceGroup otherGroup = (PreferenceGroup) findPreference(KEY_OTHER);
+ ArrayList<Preference> prefs = new ArrayList<>(); // Used for sorting.
+ prefs.add(otherGroup);
+ String pkg = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ otherGroup.removeAll();
+ PackageManager pm = getContext().getPackageManager();
+
+ try {
+ PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);
+
+ ApplicationInfo appInfo = info.applicationInfo;
+ final Drawable icon = appInfo.loadIcon(pm);
+ final CharSequence label = appInfo.loadLabel(pm);
+ Intent infoIntent = null;
+ if (!getActivity().getIntent().getBooleanExtra(
+ AppPermissionsFragment.EXTRA_HIDE_INFO_BUTTON, false)) {
+ infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.fromParts("package", pkg, null));
+ }
+ setHeader(icon, label, infoIntent);
+
+ if (info.requestedPermissions != null) {
+ for (int i = 0; i < info.requestedPermissions.length; i++) {
+ PermissionInfo perm;
+ try {
+ perm = pm.getPermissionInfo(info.requestedPermissions[i], 0);
+ } catch (NameNotFoundException e) {
+ Log.e(LOG_TAG,
+ "Can't get permission info for " + info.requestedPermissions[i], e);
+ continue;
+ }
+
+ if ((perm.flags & PermissionInfo.FLAG_INSTALLED) == 0
+ || (perm.flags & PermissionInfo.FLAG_HIDDEN) != 0) {
+ 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));
+ }
+ }
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(LOG_TAG, "Problem getting package info for " + pkg, e);
+ }
+ // Sort an ArrayList of the groups and then set the order from the sorting.
+ Collections.sort(prefs, new Comparator<Preference>() {
+ @Override
+ public int compare(Preference lhs, Preference rhs) {
+ String lKey = lhs.getKey();
+ String rKey = rhs.getKey();
+ if (lKey.equals(KEY_OTHER)) {
+ return 1;
+ } else if (rKey.equals(KEY_OTHER)) {
+ return -1;
+ } else if (Utils.isModernPermissionGroup(lKey)
+ != Utils.isModernPermissionGroup(rKey)) {
+ return Utils.isModernPermissionGroup(lKey) ? -1 : 1;
+ }
+ return lhs.getTitle().toString().compareTo(rhs.getTitle().toString());
+ }
+ });
+ for (int i = 0; i < prefs.size(); i++) {
+ prefs.get(i).setOrder(i);
+ }
+ }
+
+ private PermissionGroupInfo getGroup(String group, PackageManager pm) {
+ try {
+ return pm.getPermissionGroupInfo(group, 0);
+ } catch (NameNotFoundException e) {
+ return null;
+ }
+ }
+
+ private PreferenceGroup findOrCreate(PackageItemInfo group, PackageManager pm,
+ ArrayList<Preference> prefs) {
+ PreferenceGroup pref = (PreferenceGroup) findPreference(group.name);
+ if (pref == null) {
+ pref = new PreferenceCategory(getContext());
+ pref.setKey(group.name);
+ pref.setTitle(group.loadLabel(pm));
+ prefs.add(pref);
+ getPreferenceScreen().addPreference(pref);
+ }
+ return pref;
+ }
+
+ private Preference getPreference(PermissionInfo perm, PermissionGroupInfo group,
+ PackageManager pm) {
+ Preference pref = new Preference(getContext());
+ Drawable icon = null;
+ if (perm.icon != 0) {
+ icon = perm.loadIcon(pm);
+ } else if (group != null && group.icon != 0) {
+ icon = group.loadIcon(pm);
+ } else {
+ icon = getContext().getDrawable(R.drawable.ic_perm_device_info);
+ }
+ 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;
+ }
+ });
+
+ return pref;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
new file mode 100644
index 00000000..f56cba70
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -0,0 +1,404 @@
+/*
+* Copyright (C) 2015 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.annotation.Nullable;
+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;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.provider.Settings;
+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.Toast;
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.AppPermissions;
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
+import com.android.packageinstaller.permission.utils.LocationUtils;
+import com.android.packageinstaller.permission.utils.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class AppPermissionsFragment extends SettingsWithHeader
+ implements OnPreferenceChangeListener {
+
+ private static final String LOG_TAG = "ManagePermsFragment";
+
+ static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
+
+ private static final int MENU_ALL_PERMS = 0;
+
+ private List<AppPermissionGroup> mToggledGroups;
+ private AppPermissions mAppPermissions;
+ private PreferenceScreen mExtraScreen;
+
+ private boolean mHasConfirmedRevoke;
+
+ public static AppPermissionsFragment newInstance(String packageName) {
+ return setPackageName(new AppPermissionsFragment(), packageName);
+ }
+
+ private static <T extends Fragment> T setPackageName(T fragment, String packageName) {
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ fragment.setArguments(arguments);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+
+ String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ Activity activity = getActivity();
+ PackageInfo packageInfo = getPackageInfo(activity, packageName);
+ if (packageInfo == null) {
+ Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show();
+ activity.finish();
+ return;
+ }
+
+ mAppPermissions = new AppPermissions(activity, packageInfo, null, true, new Runnable() {
+ @Override
+ public void run() {
+ getActivity().finish();
+ }
+ });
+ loadPreferences();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mAppPermissions.refresh();
+ setPreferencesCheckedState();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home: {
+ getActivity().finish();
+ return true;
+ }
+
+ 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();
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ if (mAppPermissions != null) {
+ bindUi(this, mAppPermissions.getPackageInfo());
+ }
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ menu.add(Menu.NONE, MENU_ALL_PERMS, Menu.NONE, R.string.all_permissions);
+ }
+
+ private static void bindUi(SettingsWithHeader fragment, PackageInfo packageInfo) {
+ Activity activity = fragment.getActivity();
+ PackageManager pm = activity.getPackageManager();
+ ApplicationInfo appInfo = packageInfo.applicationInfo;
+ Intent infoIntent = null;
+ if (!activity.getIntent().getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) {
+ infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.fromParts("package", packageInfo.packageName, null));
+ }
+
+ Drawable icon = appInfo.loadIcon(pm);
+ CharSequence label = appInfo.loadLabel(pm);
+ fragment.setHeader(icon, label, infoIntent);
+
+ ActionBar ab = activity.getActionBar();
+ if (ab != null) {
+ ab.setTitle(R.string.app_permissions);
+ }
+
+ ViewGroup rootView = (ViewGroup) fragment.getView();
+ ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ iconView.setImageDrawable(icon);
+ }
+ TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(R.string.app_permissions);
+ }
+ TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(label);
+ }
+ }
+
+ private void loadPreferences() {
+ Context context = getActivity();
+ if (context == null) {
+ return;
+ }
+
+ PreferenceScreen screen = getPreferenceScreen();
+ if (screen == null) {
+ screen = getPreferenceManager().createPreferenceScreen(getActivity());
+ setPreferenceScreen(screen);
+ }
+
+ screen.removeAll();
+
+ if (mExtraScreen != null) {
+ mExtraScreen.removeAll();
+ }
+
+ final Preference extraPerms = new Preference(context);
+ extraPerms.setIcon(R.drawable.ic_toc);
+ extraPerms.setTitle(R.string.additional_permissions);
+
+ for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
+ if (!Utils.shouldShowPermission(group, mAppPermissions.getPackageInfo().packageName)) {
+ continue;
+ }
+
+ boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
+
+ SwitchPreference preference = new SwitchPreference(context);
+ 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()) {
+ preference.setSummary(getString(R.string.permission_summary_enforced_by_policy));
+ }
+ preference.setPersistent(false);
+ preference.setEnabled(!group.isPolicyFixed());
+ preference.setChecked(group.areRuntimePermissionsGranted());
+
+ if (isPlatform) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ mExtraScreen.addPreference(preference);
+ }
+ }
+
+ if (mExtraScreen != null) {
+ extraPerms.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
+ setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME));
+ frag.setTargetFragment(AppPermissionsFragment.this, 0);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, frag)
+ .addToBackStack(null)
+ .commit();
+ return true;
+ }
+ });
+ int count = mExtraScreen.getPreferenceCount();
+ extraPerms.setSummary(getResources().getQuantityString(
+ R.plurals.additional_permissions_more, count, count));
+ screen.addPreference(extraPerms);
+ }
+
+ setLoading(false /* loading */, true /* animate */);
+ }
+
+ @Override
+ public boolean onPreferenceChange(final Preference preference, Object newValue) {
+ String groupName = preference.getKey();
+ final AppPermissionGroup group = mAppPermissions.getPermissionGroup(groupName);
+
+ if (group == null) {
+ return false;
+ }
+
+ OverlayTouchActivity activity = (OverlayTouchActivity) getActivity();
+ if (activity.isObscuredTouch()) {
+ activity.showOverlayDialog();
+ return false;
+ }
+
+ addToggledGroup(group);
+
+ if (LocationUtils.isLocationGroupAndProvider(group.getName(), group.getApp().packageName)) {
+ LocationUtils.showLocationDialog(getContext(), mAppPermissions.getAppLabel());
+ return false;
+ }
+ if (newValue == Boolean.TRUE) {
+ group.grantRuntimePermissions(false);
+ } else {
+ final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
+ if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
+ new AlertDialog.Builder(getContext())
+ .setMessage(grantedByDefault ? R.string.system_warning
+ : R.string.old_sdk_deny_warning)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.grant_dialog_button_deny,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((SwitchPreference) preference).setChecked(false);
+ group.revokeRuntimePermissions(false);
+ if (!grantedByDefault) {
+ mHasConfirmedRevoke = true;
+ }
+ }
+ })
+ .show();
+ return false;
+ } else {
+ group.revokeRuntimePermissions(false);
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ logToggledGroups();
+ }
+
+ private void addToggledGroup(AppPermissionGroup group) {
+ if (mToggledGroups == null) {
+ mToggledGroups = new ArrayList<>();
+ }
+ // Double toggle is back to initial state.
+ if (mToggledGroups.contains(group)) {
+ mToggledGroups.remove(group);
+ } else {
+ mToggledGroups.add(group);
+ }
+ }
+
+ private void logToggledGroups() {
+ if (mToggledGroups != null) {
+ String packageName = mAppPermissions.getPackageInfo().packageName;
+ SafetyNetLogger.logPermissionsToggled(packageName, mToggledGroups);
+ mToggledGroups = null;
+ }
+ }
+
+ private void setPreferencesCheckedState() {
+ setPreferencesCheckedState(getPreferenceScreen());
+ if (mExtraScreen != null) {
+ setPreferencesCheckedState(mExtraScreen);
+ }
+ }
+
+ private void setPreferencesCheckedState(PreferenceScreen screen) {
+ int preferenceCount = screen.getPreferenceCount();
+ for (int i = 0; i < preferenceCount; i++) {
+ Preference preference = screen.getPreference(i);
+ if (preference instanceof SwitchPreference) {
+ SwitchPreference switchPref = (SwitchPreference) preference;
+ AppPermissionGroup group = mAppPermissions.getPermissionGroup(switchPref.getKey());
+ if (group != null) {
+ switchPref.setChecked(group.areRuntimePermissionsGranted());
+ }
+ }
+ }
+ }
+
+ private static PackageInfo getPackageInfo(Activity activity, String packageName) {
+ try {
+ return activity.getPackageManager().getPackageInfo(
+ packageName, PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.i(LOG_TAG, "No package:" + activity.getCallingPackage(), e);
+ return null;
+ }
+ }
+
+ public static class AdditionalPermissionsFragment extends SettingsWithHeader {
+ AppPermissionsFragment mOuterFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ mOuterFragment = (AppPermissionsFragment) getTargetFragment();
+ super.onCreate(savedInstanceState);
+ setHeader(mOuterFragment.mIcon, mOuterFragment.mLabel, mOuterFragment.mInfoIntent);
+ setHasOptionsMenu(true);
+ setPreferenceScreen(mOuterFragment.mExtraScreen);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ bindUi(this, getPackageInfo(getActivity(), packageName));
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
new file mode 100644
index 00000000..2d27f069
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
@@ -0,0 +1,462 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Icon;
+import android.os.Bundle;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLayoutChangeListener;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.view.ViewRootImpl;
+import android.view.WindowManager.LayoutParams;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.ImageView;
+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.ManualLayoutFrame;
+
+import java.util.ArrayList;
+
+public final 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";
+ public static final String ARG_GROUP_INDEX = "ARG_GROUP_INDEX";
+ public static final String ARG_GROUP_ICON = "ARG_GROUP_ICON";
+ public static final String ARG_GROUP_MESSAGE = "ARG_GROUP_MESSAGE";
+ public static final String ARG_GROUP_SHOW_DO_NOT_ASK = "ARG_GROUP_SHOW_DO_NOT_ASK";
+ public static final String ARG_GROUP_DO_NOT_ASK_CHECKED = "ARG_GROUP_DO_NOT_ASK_CHECKED";
+
+ // Animation parameters.
+ private static final long SIZE_START_DELAY = 300;
+ private static final long SIZE_START_LENGTH = 233;
+ private static final long FADE_OUT_START_DELAY = 300;
+ private static final long FADE_OUT_START_LENGTH = 217;
+ private static final long TRANSLATE_START_DELAY = 367;
+ private static final long TRANSLATE_LENGTH = 317;
+ private static final long GROUP_UPDATE_DELAY = 400;
+ private static final long DO_NOT_ASK_CHECK_DELAY = 450;
+
+ private final Context mContext;
+
+ private ResultListener mResultListener;
+
+ private String mGroupName;
+ private int mGroupCount;
+ private int mGroupIndex;
+ private Icon mGroupIcon;
+ private CharSequence mGroupMessage;
+ private boolean mShowDonNotAsk;
+ private boolean mDoNotAskChecked;
+
+ private ImageView mIconView;
+ private TextView mCurrentGroupView;
+ private TextView mMessageView;
+ private CheckBox mDoNotAskCheckbox;
+ private Button mAllowButton;
+
+ private ArrayList<ViewHeightController> mHeightControllers;
+ private ManualLayoutFrame mRootView;
+
+ // Needed for animation
+ private ViewGroup mDescContainer;
+ private ViewGroup mCurrentDesc;
+ private ViewGroup mNextDesc;
+
+ private ViewGroup mDialogContainer;
+
+ private final Runnable mUpdateGroup = new Runnable() {
+ @Override
+ public void run() {
+ updateGroup();
+ }
+ };
+
+ public GrantPermissionsViewHandlerImpl(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public GrantPermissionsViewHandlerImpl setResultListener(ResultListener listener) {
+ mResultListener = listener;
+ return this;
+ }
+
+ @Override
+ public void saveInstanceState(Bundle arguments) {
+ arguments.putString(ARG_GROUP_NAME, mGroupName);
+ arguments.putInt(ARG_GROUP_COUNT, mGroupCount);
+ arguments.putInt(ARG_GROUP_INDEX, mGroupIndex);
+ arguments.putParcelable(ARG_GROUP_ICON, mGroupIcon);
+ arguments.putCharSequence(ARG_GROUP_MESSAGE, mGroupMessage);
+ arguments.putBoolean(ARG_GROUP_SHOW_DO_NOT_ASK, mShowDonNotAsk);
+ arguments.putBoolean(ARG_GROUP_DO_NOT_ASK_CHECKED, mDoNotAskCheckbox.isChecked());
+ }
+
+ @Override
+ public void loadInstanceState(Bundle savedInstanceState) {
+ mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
+ mGroupMessage = savedInstanceState.getCharSequence(ARG_GROUP_MESSAGE);
+ mGroupIcon = savedInstanceState.getParcelable(ARG_GROUP_ICON);
+ mGroupCount = savedInstanceState.getInt(ARG_GROUP_COUNT);
+ mGroupIndex = savedInstanceState.getInt(ARG_GROUP_INDEX);
+ mShowDonNotAsk = savedInstanceState.getBoolean(ARG_GROUP_SHOW_DO_NOT_ASK);
+ mDoNotAskChecked = savedInstanceState.getBoolean(ARG_GROUP_DO_NOT_ASK_CHECKED);
+ }
+
+ @Override
+ public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon,
+ CharSequence message, boolean showDonNotAsk) {
+ mGroupName = groupName;
+ mGroupCount = groupCount;
+ mGroupIndex = groupIndex;
+ mGroupIcon = icon;
+ mGroupMessage = message;
+ mShowDonNotAsk = showDonNotAsk;
+ mDoNotAskChecked = false;
+ // If this is a second (or later) permission and the views exist, then animate.
+ if (mIconView != null) {
+ if (mGroupIndex > 0) {
+ // The first message will be announced as the title of the activity, all others
+ // we need to announce ourselves.
+ mDescContainer.announceForAccessibility(message);
+ animateToPermission();
+ } else {
+ updateDescription();
+ updateGroup();
+ updateDoNotAskCheckBox();
+ }
+ }
+ }
+
+ private void animateToPermission() {
+ if (mHeightControllers == null) {
+ // We need to manually control the height of any views heigher than the root that
+ // we inflate. Find all the views up to the root and create ViewHeightControllers for
+ // them.
+ mHeightControllers = new ArrayList<>();
+ ViewRootImpl viewRoot = mRootView.getViewRootImpl();
+ ViewParent v = mRootView.getParent();
+ addHeightController(mDialogContainer);
+ addHeightController(mRootView);
+ while (v != viewRoot) {
+ addHeightController((View) v);
+ v = v.getParent();
+ }
+ // On the heighest level view, we want to setTop rather than setBottom to control the
+ // height, this way the dialog will grow up rather than down.
+ ViewHeightController realRootView =
+ mHeightControllers.get(mHeightControllers.size() - 1);
+ realRootView.setControlTop(true);
+ }
+
+ // Grab the current height/y positions, then wait for the layout to change,
+ // so we can get the end height/y positions.
+ final SparseArray<Float> startPositions = getViewPositions();
+ final int startHeight = mRootView.getLayoutHeight();
+ mRootView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
+ int oldTop, int oldRight, int oldBottom) {
+ mRootView.removeOnLayoutChangeListener(this);
+ SparseArray<Float> endPositions = getViewPositions();
+ int endHeight = mRootView.getLayoutHeight();
+ if (startPositions.get(R.id.do_not_ask_checkbox) == 0
+ && endPositions.get(R.id.do_not_ask_checkbox) != 0) {
+ // If the checkbox didn't have a position before but has one now then set
+ // the start position to the end position because it just became visible.
+ startPositions.put(R.id.do_not_ask_checkbox,
+ endPositions.get(R.id.do_not_ask_checkbox));
+ }
+ animateYPos(startPositions, endPositions, endHeight - startHeight);
+ }
+ });
+
+ // Fade out old description group and scale out the icon for it.
+ Interpolator interpolator = AnimationUtils.loadInterpolator(mContext,
+ android.R.interpolator.fast_out_linear_in);
+ mIconView.animate()
+ .scaleX(0)
+ .scaleY(0)
+ .setStartDelay(FADE_OUT_START_DELAY)
+ .setDuration(FADE_OUT_START_LENGTH)
+ .setInterpolator(interpolator)
+ .start();
+ mCurrentDesc.animate()
+ .alpha(0)
+ .setStartDelay(FADE_OUT_START_DELAY)
+ .setDuration(FADE_OUT_START_LENGTH)
+ .setInterpolator(interpolator)
+ .setListener(null)
+ .start();
+
+ // Update the index of the permission after the animations have started.
+ mCurrentGroupView.getHandler().postDelayed(mUpdateGroup, GROUP_UPDATE_DELAY);
+
+ // Add the new description and translate it in.
+ mNextDesc = (ViewGroup) LayoutInflater.from(mContext).inflate(
+ R.layout.permission_description, mDescContainer, false);
+
+ mMessageView = (TextView) mNextDesc.findViewById(R.id.permission_message);
+ mIconView = (ImageView) mNextDesc.findViewById(R.id.permission_icon);
+ updateDescription();
+
+ int width = mDescContainer.getRootView().getWidth();
+ mDescContainer.addView(mNextDesc);
+ mNextDesc.setTranslationX(width);
+
+ final View oldDesc = mCurrentDesc;
+ // Remove the old view from the description, so that we can shrink if necessary.
+ mDescContainer.removeView(oldDesc);
+ oldDesc.setPadding(mDescContainer.getLeft(), mDescContainer.getTop(),
+ mRootView.getRight() - mDescContainer.getRight(), 0);
+ mRootView.addView(oldDesc);
+
+ mCurrentDesc = mNextDesc;
+ mNextDesc.animate()
+ .translationX(0)
+ .setStartDelay(TRANSLATE_START_DELAY)
+ .setDuration(TRANSLATE_LENGTH)
+ .setInterpolator(AnimationUtils.loadInterpolator(mContext,
+ android.R.interpolator.linear_out_slow_in))
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ // This is the longest animation, when it finishes, we are done.
+ mRootView.removeView(oldDesc);
+ }
+ })
+ .start();
+
+ boolean visibleBefore = mDoNotAskCheckbox.getVisibility() == View.VISIBLE;
+ updateDoNotAskCheckBox();
+ boolean visibleAfter = mDoNotAskCheckbox.getVisibility() == View.VISIBLE;
+ if (visibleBefore != visibleAfter) {
+ Animation anim = AnimationUtils.loadAnimation(mContext,
+ visibleAfter ? android.R.anim.fade_in : android.R.anim.fade_out);
+ anim.setStartOffset(visibleAfter ? DO_NOT_ASK_CHECK_DELAY : 0);
+ mDoNotAskCheckbox.startAnimation(anim);
+ }
+ }
+
+ private void addHeightController(View v) {
+ ViewHeightController heightController = new ViewHeightController(v);
+ heightController.setHeight(v.getHeight());
+ mHeightControllers.add(heightController);
+ }
+
+ private SparseArray<Float> getViewPositions() {
+ SparseArray<Float> locMap = new SparseArray<>();
+ final int N = mDialogContainer.getChildCount();
+ for (int i = 0; i < N; i++) {
+ View child = mDialogContainer.getChildAt(i);
+ if (child.getId() <= 0) {
+ // Only track views with ids.
+ continue;
+ }
+ locMap.put(child.getId(), child.getY());
+ }
+ return locMap;
+ }
+
+ private void animateYPos(SparseArray<Float> startPositions, SparseArray<Float> endPositions,
+ int heightDiff) {
+ final int N = startPositions.size();
+ for (int i = 0; i < N; i++) {
+ int key = startPositions.keyAt(i);
+ float start = startPositions.get(key);
+ float end = endPositions.get(key);
+ if (start != end) {
+ final View child = mDialogContainer.findViewById(key);
+ child.setTranslationY(start - end);
+ child.animate()
+ .setStartDelay(SIZE_START_DELAY)
+ .setDuration(SIZE_START_LENGTH)
+ .translationY(0)
+ .start();
+ }
+ }
+ for (int i = 0; i < mHeightControllers.size(); i++) {
+ mHeightControllers.get(i).animateAddHeight(heightDiff);
+ }
+ }
+
+ @Override
+ public View createView() {
+ mRootView = (ManualLayoutFrame) LayoutInflater.from(mContext)
+ .inflate(R.layout.grant_permissions, null);
+ ((ButtonBarLayout) mRootView.findViewById(R.id.button_group)).setAllowStacking(true);
+
+ mDialogContainer = (ViewGroup) mRootView.findViewById(R.id.dialog_container);
+ mMessageView = (TextView) mRootView.findViewById(R.id.permission_message);
+ 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);
+
+ 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);
+
+ if (mGroupName != null) {
+ updateDescription();
+ updateGroup();
+ updateDoNotAskCheckBox();
+ }
+
+ return mRootView;
+ }
+
+ @Override
+ public void updateWindowAttributes(LayoutParams outLayoutParams) {
+ // No-op
+ }
+
+ private void updateDescription() {
+ mIconView.setImageDrawable(mGroupIcon.loadDrawable(mContext));
+ mMessageView.setText(mGroupMessage);
+ }
+
+ private void updateGroup() {
+ if (mGroupCount > 1) {
+ mCurrentGroupView.setVisibility(View.VISIBLE);
+ mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template,
+ mGroupIndex + 1, mGroupCount));
+ } else {
+ mCurrentGroupView.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ private void updateDoNotAskCheckBox() {
+ if (mShowDonNotAsk) {
+ mDoNotAskCheckbox.setVisibility(View.VISIBLE);
+ mDoNotAskCheckbox.setOnClickListener(this);
+ mDoNotAskCheckbox.setChecked(mDoNotAskChecked);
+ } else {
+ mDoNotAskCheckbox.setVisibility(View.GONE);
+ mDoNotAskCheckbox.setOnClickListener(null);
+ }
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.permission_allow_button:
+ if (mResultListener != null) {
+ view.clearAccessibilityFocus();
+ mResultListener.onPermissionGrantResult(mGroupName, true, false);
+ }
+ break;
+ case R.id.permission_deny_button:
+ mAllowButton.setEnabled(true);
+ if (mResultListener != null) {
+ view.clearAccessibilityFocus();
+ mResultListener.onPermissionGrantResult(mGroupName, false,
+ mDoNotAskCheckbox.isChecked());
+ }
+ break;
+ case R.id.do_not_ask_checkbox:
+ mAllowButton.setEnabled(!mDoNotAskCheckbox.isChecked());
+ break;
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mResultListener != null) {
+ final boolean doNotAskAgain = mDoNotAskCheckbox.isChecked();
+ mResultListener.onPermissionGrantResult(mGroupName, false, doNotAskAgain);
+ }
+ }
+
+ /**
+ * Manually controls the height of a view through getBottom/setTop. Also listens
+ * for layout changes and sets the height again to be sure it doesn't change.
+ */
+ private static final class ViewHeightController implements OnLayoutChangeListener {
+ private final View mView;
+ private int mHeight;
+ private int mNextHeight;
+ private boolean mControlTop;
+ private ObjectAnimator mAnimator;
+
+ public ViewHeightController(View view) {
+ mView = view;
+ mView.addOnLayoutChangeListener(this);
+ }
+
+ public void setControlTop(boolean controlTop) {
+ mControlTop = controlTop;
+ }
+
+ public void animateAddHeight(int heightDiff) {
+ if (heightDiff != 0) {
+ if (mNextHeight == 0) {
+ mNextHeight = mHeight;
+ }
+ mNextHeight += heightDiff;
+ if (mAnimator != null) {
+ mAnimator.cancel();
+ }
+ mAnimator = ObjectAnimator.ofInt(this, "height", mHeight, mNextHeight);
+ mAnimator.setStartDelay(SIZE_START_DELAY);
+ mAnimator.setDuration(SIZE_START_LENGTH);
+ mAnimator.start();
+ }
+ }
+
+ public void setHeight(int height) {
+ mHeight = height;
+ updateHeight();
+ }
+
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
+ int oldTop, int oldRight, int oldBottom) {
+ // Ensure that the height never changes.
+ updateHeight();
+ }
+
+ private void updateHeight() {
+ if (mControlTop) {
+ mView.setTop(mView.getBottom() - mHeight);
+ } else {
+ mView.setBottom(mView.getTop() + mHeight);
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
new file mode 100644
index 00000000..c53da879
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui.handheld;
+
+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.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;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.List;
+
+public final 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";
+
+ 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);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ 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);
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ String key = preference.getKey();
+
+ PermissionGroup group = mPermissions.getGroup(key);
+ if (group == null) {
+ return false;
+ }
+
+ Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
+ .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
+ try {
+ getActivity().startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(LOG_TAG, "No app to handle " + intent);
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onPermissionGroupsChanged() {
+ updatePermissionsUi();
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindPermissionUi(getActivity(), getView());
+ }
+
+ private static void bindPermissionUi(@Nullable Context context, @Nullable View rootView) {
+ if (context == null || rootView == null) {
+ return;
+ }
+
+ ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ // Set the icon as the background instead of the image because ImageView
+ // doesn't properly scale vector drawables beyond their intrinsic size
+ Drawable icon = context.getDrawable(R.drawable.ic_lock);
+ icon.setTint(context.getColor(R.color.off_white));
+ iconView.setBackground(icon);
+ }
+ TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(R.string.app_permissions);
+ }
+ TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(R.string.app_permissions_breadcrumb);
+ }
+ }
+
+ private void updatePermissionsUi() {
+ Context context = getActivity();
+ if (context == null) {
+ return;
+ }
+
+ List<PermissionGroup> groups = mPermissions.getGroups();
+ PreferenceScreen screen = getPreferenceScreen();
+ if (screen == null) {
+ screen = getPreferenceManager().createPreferenceScreen(getActivity());
+ setPreferenceScreen(screen);
+ }
+
+ // Use this to speed up getting the info for all of the PermissionApps below.
+ // Create a new one for each refresh to make sure it has fresh data.
+ PmCache cache = new PmCache(getContext().getPackageManager());
+ 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) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ 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);
+ }
+
+ 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, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindPermissionUi(getActivity(), getView());
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
new file mode 100644
index 00000000..554830a7
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -0,0 +1,427 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.app.ActionBar;
+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.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+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.R;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.PermissionApps;
+import com.android.packageinstaller.permission.model.PermissionApps.Callback;
+import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
+import com.android.packageinstaller.permission.utils.LocationUtils;
+import com.android.packageinstaller.permission.utils.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class PermissionAppsFragment extends PermissionsFrameFragment implements Callback,
+ Preference.OnPreferenceChangeListener {
+
+ private static final int MENU_SHOW_SYSTEM = Menu.FIRST;
+ private static final int MENU_HIDE_SYSTEM = Menu.FIRST + 1;
+ private static final String KEY_SHOW_SYSTEM_PREFS = "_showSystem";
+
+ public static PermissionAppsFragment newInstance(String permissionName) {
+ return setPermissionName(new PermissionAppsFragment(), permissionName);
+ }
+
+ private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) {
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName);
+ fragment.setArguments(arguments);
+ return fragment;
+ }
+
+ private PermissionApps mPermissionApps;
+
+ private PreferenceScreen mExtraScreen;
+
+ private ArrayMap<String, AppPermissionGroup> mToggledGroups;
+ private ArraySet<String> mLauncherPkgs;
+ private boolean mHasConfirmedRevoke;
+
+ private boolean mShowSystem;
+ private MenuItem mShowSystemMenu;
+ private MenuItem mHideSystemMenu;
+
+ private Callback mOnPermissionsLoadedListener;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+ mLauncherPkgs = Utils.getLauncherPackages(getContext());
+
+ String groupName = getArguments().getString(Intent.EXTRA_PERMISSION_NAME);
+ mPermissionApps = new PermissionApps(getActivity(), groupName, this);
+ mPermissionApps.refresh(true);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mPermissionApps.refresh(true);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+ R.string.menu_show_system);
+ mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+ R.string.menu_hide_system);
+ updateMenu();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getActivity().finish();
+ return true;
+ case MENU_SHOW_SYSTEM:
+ case MENU_HIDE_SYSTEM:
+ mShowSystem = item.getItemId() == MENU_SHOW_SYSTEM;
+ if (mPermissionApps.getApps() != null) {
+ onPermissionsLoaded(mPermissionApps);
+ }
+ updateMenu();
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void updateMenu() {
+ mShowSystemMenu.setVisible(!mShowSystem);
+ mHideSystemMenu.setVisible(mShowSystem);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindUi(this, mPermissionApps);
+ }
+
+ private static void bindUi(Fragment fragment, PermissionApps permissionApps) {
+ final Drawable icon = permissionApps.getIcon();
+ final CharSequence label = permissionApps.getLabel();
+ final ActionBar ab = fragment.getActivity().getActionBar();
+ if (ab != null) {
+ ab.setTitle(fragment.getString(R.string.permission_title, label));
+ }
+
+ final ViewGroup rootView = (ViewGroup) fragment.getView();
+ final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ // Set the icon as the background instead of the image because ImageView
+ // doesn't properly scale vector drawables beyond their intrinsic size
+ iconView.setBackground(icon);
+ }
+ final TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(label);
+ }
+ final TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(R.string.app_permissions);
+ }
+ }
+
+ private void setOnPermissionsLoadedListener(Callback callback) {
+ mOnPermissionsLoadedListener = callback;
+ }
+
+ @Override
+ public void onPermissionsLoaded(PermissionApps permissionApps) {
+ Context context = getActivity();
+
+ if (context == null) {
+ return;
+ }
+
+ boolean isTelevision = Utils.isTelevision(context);
+ PreferenceScreen screen = getPreferenceScreen();
+ if (screen == null) {
+ screen = getPreferenceManager().createPreferenceScreen(getActivity());
+ setPreferenceScreen(screen);
+ }
+
+ ArraySet<String> preferencesToRemove = new ArraySet<>();
+ for (int i = 0, n = screen.getPreferenceCount(); i < n; i++) {
+ preferencesToRemove.add(screen.getPreference(i).getKey());
+ }
+ if (mExtraScreen != null) {
+ for (int i = 0, n = mExtraScreen.getPreferenceCount(); i < n; i++) {
+ preferencesToRemove.add(mExtraScreen.getPreference(i).getKey());
+ }
+ }
+
+ for (PermissionApp app : permissionApps.getApps()) {
+ if (!Utils.shouldShowPermission(app)) {
+ continue;
+ }
+
+ String key = app.getKey();
+ preferencesToRemove.remove(key);
+ Preference existingPref = screen.findPreference(key);
+ if (existingPref == null && mExtraScreen != null) {
+ existingPref = mExtraScreen.findPreference(key);
+ }
+
+ boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+ if (isSystemApp && !isTelevision && !mShowSystem) {
+ if (existingPref != null) {
+ screen.removePreference(existingPref);
+ }
+ continue;
+ }
+
+ if (existingPref != null) {
+ // If existing preference - only update its state.
+ if (app.isPolicyFixed()) {
+ existingPref.setSummary(getString(
+ R.string.permission_summary_enforced_by_policy));
+ }
+ existingPref.setPersistent(false);
+ existingPref.setEnabled(!app.isPolicyFixed());
+ if (existingPref instanceof SwitchPreference) {
+ ((SwitchPreference) existingPref)
+ .setChecked(app.areRuntimePermissionsGranted());
+ }
+ continue;
+ }
+
+ SwitchPreference pref = new SwitchPreference(context);
+ pref.setOnPreferenceChangeListener(this);
+ pref.setKey(app.getKey());
+ pref.setIcon(app.getIcon());
+ pref.setTitle(app.getLabel());
+ if (app.isPolicyFixed()) {
+ pref.setSummary(getString(R.string.permission_summary_enforced_by_policy));
+ }
+ pref.setPersistent(false);
+ pref.setEnabled(!app.isPolicyFixed());
+ pref.setChecked(app.areRuntimePermissionsGranted());
+
+ if (isSystemApp && isTelevision) {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ mExtraScreen.addPreference(pref);
+ } else {
+ screen.addPreference(pref);
+ }
+ }
+
+ if (mExtraScreen != null) {
+ preferencesToRemove.remove(KEY_SHOW_SYSTEM_PREFS);
+ Preference pref = screen.findPreference(KEY_SHOW_SYSTEM_PREFS);
+
+ if (pref == null) {
+ pref = new Preference(context);
+ pref.setKey(KEY_SHOW_SYSTEM_PREFS);
+ pref.setIcon(Utils.applyTint(context, R.drawable.ic_toc,
+ android.R.attr.colorControlNormal));
+ pref.setTitle(R.string.preference_show_system_apps);
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ SystemAppsFragment frag = new SystemAppsFragment();
+ setPermissionName(frag, getArguments().getString(Intent.EXTRA_PERMISSION_NAME));
+ frag.setTargetFragment(PermissionAppsFragment.this, 0);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, frag)
+ .addToBackStack("SystemApps")
+ .commit();
+ return true;
+ }
+ });
+ screen.addPreference(pref);
+ }
+
+ int grantedCount = 0;
+ for (int i = 0, n = mExtraScreen.getPreferenceCount(); i < n; i++) {
+ if (((SwitchPreference) mExtraScreen.getPreference(i)).isChecked()) {
+ grantedCount++;
+ }
+ }
+ pref.setSummary(getString(R.string.app_permissions_group_summary,
+ grantedCount, mExtraScreen.getPreferenceCount()));
+ }
+
+ for (String key : preferencesToRemove) {
+ Preference pref = screen.findPreference(key);
+ if (pref != null) {
+ screen.removePreference(pref);
+ } else if (mExtraScreen != null) {
+ pref = mExtraScreen.findPreference(key);
+ if (pref != null) {
+ mExtraScreen.removePreference(pref);
+ }
+ }
+ }
+
+ setLoading(false /* loading */, true /* animate */);
+
+ if (mOnPermissionsLoadedListener != null) {
+ mOnPermissionsLoadedListener.onPermissionsLoaded(permissionApps);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(final Preference preference, Object newValue) {
+ String pkg = preference.getKey();
+ final PermissionApp app = mPermissionApps.getApp(pkg);
+
+ if (app == null) {
+ return false;
+ }
+
+ OverlayTouchActivity activity = (OverlayTouchActivity) getActivity();
+ if (activity.isObscuredTouch()) {
+ activity.showOverlayDialog();
+ return false;
+ }
+
+ addToggledGroup(app.getPackageName(), app.getPermissionGroup());
+
+ if (LocationUtils.isLocationGroupAndProvider(mPermissionApps.getGroupName(),
+ app.getPackageName())) {
+ LocationUtils.showLocationDialog(getContext(), app.getLabel());
+ return false;
+ }
+ if (newValue == Boolean.TRUE) {
+ app.grantRuntimePermissions();
+ } else {
+ final boolean grantedByDefault = app.hasGrantedByDefaultPermissions();
+ if (grantedByDefault || (!app.hasRuntimePermissions() && !mHasConfirmedRevoke)) {
+ new AlertDialog.Builder(getContext())
+ .setMessage(grantedByDefault ? R.string.system_warning
+ : R.string.old_sdk_deny_warning)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.grant_dialog_button_deny,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((SwitchPreference) preference).setChecked(false);
+ app.revokeRuntimePermissions();
+ if (!grantedByDefault) {
+ mHasConfirmedRevoke = true;
+ }
+ }
+ })
+ .show();
+ return false;
+ } else {
+ app.revokeRuntimePermissions();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ logToggledGroups();
+ }
+
+ private void addToggledGroup(String packageName, AppPermissionGroup group) {
+ if (mToggledGroups == null) {
+ mToggledGroups = new ArrayMap<>();
+ }
+ // Double toggle is back to initial state.
+ if (mToggledGroups.containsKey(packageName)) {
+ mToggledGroups.remove(packageName);
+ } else {
+ mToggledGroups.put(packageName, group);
+ }
+ }
+
+ private void logToggledGroups() {
+ if (mToggledGroups != null) {
+ final int groupCount = mToggledGroups.size();
+ for (int i = 0; i < groupCount; i++) {
+ String packageName = mToggledGroups.keyAt(i);
+ List<AppPermissionGroup> groups = new ArrayList<>();
+ groups.add(mToggledGroups.valueAt(i));
+ SafetyNetLogger.logPermissionsToggled(packageName, groups);
+ }
+ mToggledGroups = null;
+ }
+ }
+
+ public static class SystemAppsFragment extends PermissionsFrameFragment implements Callback {
+ PermissionAppsFragment mOuterFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ mOuterFragment = (PermissionAppsFragment) getTargetFragment();
+ setLoading(true /* loading */, false /* animate */);
+ super.onCreate(savedInstanceState);
+ if (mOuterFragment.mExtraScreen != null) {
+ setPreferenceScreen();
+ } else {
+ mOuterFragment.setOnPermissionsLoadedListener(this);
+ }
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ String groupName = getArguments().getString(Intent.EXTRA_PERMISSION_NAME);
+ PermissionApps permissionApps = new PermissionApps(getActivity(), groupName, null);
+ bindUi(this, permissionApps);
+ }
+
+ @Override
+ public void onPermissionsLoaded(PermissionApps permissionApps) {
+ setPreferenceScreen();
+ mOuterFragment.setOnPermissionsLoadedListener(null);
+ }
+
+ private void setPreferenceScreen() {
+ setPreferenceScreen(mOuterFragment.mExtraScreen);
+ setLoading(false /* loading */, true /* animate */);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionsFrameFragment.java
new file mode 100644
index 00000000..e7f63b23
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionsFrameFragment.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.packageinstaller.R;
+
+public abstract class PermissionsFrameFragment extends PreferenceFragment {
+ private ViewGroup mPreferencesContainer;
+
+ private View mLoadingView;
+ private ViewGroup mPrefsView;
+ private boolean mIsLoading;
+
+ /**
+ * Returns the view group that holds the preferences objects. This will
+ * only be set after {@link #onCreateView} has been called.
+ */
+ protected final ViewGroup getPreferencesContainer() {
+ return mPreferencesContainer;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container,
+ false);
+ mPrefsView = (ViewGroup) rootView.findViewById(R.id.prefs_container);
+ if (mPrefsView == null) {
+ mPrefsView = rootView;
+ }
+ mLoadingView = rootView.findViewById(R.id.loading_container);
+ mPreferencesContainer = (ViewGroup) super.onCreateView(
+ inflater, mPrefsView, savedInstanceState);
+ setLoading(mIsLoading, false, true /* force */);
+ mPrefsView.addView(mPreferencesContainer);
+ return rootView;
+ }
+
+ protected void setLoading(boolean loading, boolean animate) {
+ setLoading(loading, animate, false);
+ }
+
+ private void setLoading(boolean loading, boolean animate, boolean force) {
+ if (mIsLoading != loading || force) {
+ mIsLoading = loading;
+ if (getView() == null) {
+ // If there is no created view, there is no reason to animate.
+ animate = false;
+ }
+ if (mPrefsView != null) {
+ setViewShown(mPrefsView, !loading, animate);
+ }
+ if (mLoadingView != null) {
+ setViewShown(mLoadingView, loading, animate);
+ }
+ }
+ }
+
+ @Override
+ public ListView getListView() {
+ ListView listView = super.getListView();
+ if (listView.getEmptyView() == null) {
+ TextView emptyView = (TextView) getView().findViewById(R.id.no_permissions);
+ listView.setEmptyView(emptyView);
+ }
+ return listView;
+ }
+
+ private void setViewShown(final View view, boolean shown, boolean animate) {
+ if (animate) {
+ Animation animation = AnimationUtils.loadAnimation(getContext(),
+ shown ? android.R.anim.fade_in : android.R.anim.fade_out);
+ if (shown) {
+ view.setVisibility(View.VISIBLE);
+ } else {
+ animation.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.setVisibility(View.INVISIBLE);
+ }
+ });
+ }
+ view.startAnimation(animation);
+ } else {
+ view.clearAnimation();
+ view.setVisibility(shown ? View.VISIBLE : View.INVISIBLE);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java
new file mode 100644
index 00000000..acb3c61e
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui.handheld;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+public abstract class SettingsWithHeader extends PermissionsFrameFragment
+ implements OnClickListener {
+
+ private View mHeader;
+ protected Intent mInfoIntent;
+ protected Drawable mIcon;
+ protected CharSequence mLabel;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
+
+ if (!Utils.isTelevision(getContext())) {
+ mHeader = inflater.inflate(R.layout.header, root, false);
+ getPreferencesContainer().addView(mHeader, 0);
+ updateHeader();
+ }
+
+ return root;
+ }
+
+ public void setHeader(Drawable icon, CharSequence label, Intent infoIntent) {
+ mIcon = icon;
+ mLabel = label;
+ mInfoIntent = infoIntent;
+ updateHeader();
+ }
+
+ private void updateHeader() {
+ if (mHeader != null) {
+ final ImageView appIcon = (ImageView) mHeader.findViewById(R.id.icon);
+ appIcon.setImageDrawable(mIcon);
+
+ final TextView appName = (TextView) mHeader.findViewById(R.id.name);
+ appName.setText(mLabel);
+
+ final View info = mHeader.findViewById(R.id.info);
+ if (mInfoIntent == null) {
+ info.setVisibility(View.GONE);
+ } else {
+ info.setVisibility(View.VISIBLE);
+ info.setClickable(true);
+ info.setOnClickListener(this);
+ }
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ getActivity().startActivity(mInfoIntent);
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
new file mode 100644
index 00000000..d4910128
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
@@ -0,0 +1,217 @@
+/*
+* Copyright (C) 2015 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.android.packageinstaller.permission.ui.television;
+
+import android.app.ActionBar;
+import android.app.AlertDialog;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceCategory;
+import android.support.v7.preference.PreferenceGroup;
+import android.util.Log;
+import android.view.MenuItem;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public final class AllAppPermissionsFragment extends SettingsWithHeader {
+
+ private static final String LOG_TAG = "AllAppPermissionsFragment";
+
+ private static final String KEY_OTHER = "other_perms";
+
+ public static AllAppPermissionsFragment newInstance(String packageName) {
+ AllAppPermissionsFragment instance = new AllAppPermissionsFragment();
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ instance.setArguments(arguments);
+ return instance;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setTitle(R.string.all_permissions);
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateUi();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home: {
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void updateUi() {
+ if (getPreferenceScreen() != null) {
+ getPreferenceScreen().removeAll();
+ }
+ addPreferencesFromResource(R.xml.all_permissions);
+ PreferenceGroup otherGroup = (PreferenceGroup) findPreference(KEY_OTHER);
+ ArrayList<Preference> prefs = new ArrayList<>(); // Used for sorting.
+ prefs.add(otherGroup);
+ String pkg = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ otherGroup.removeAll();
+ PackageManager pm = getContext().getPackageManager();
+
+ try {
+ PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS);
+
+ ApplicationInfo appInfo = info.applicationInfo;
+ final Drawable icon = appInfo.loadIcon(pm);
+ final CharSequence label = appInfo.loadLabel(pm);
+ Intent infoIntent = null;
+ if (!getActivity().getIntent().getBooleanExtra(
+ AppPermissionsFragment.EXTRA_HIDE_INFO_BUTTON, false)) {
+ infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.fromParts("package", pkg, null));
+ }
+ setHeader(icon, label, infoIntent);
+
+ if (info.requestedPermissions != null) {
+ for (int i = 0; i < info.requestedPermissions.length; i++) {
+ PermissionInfo perm;
+ try {
+ perm = pm.getPermissionInfo(info.requestedPermissions[i], 0);
+ } catch (NameNotFoundException e) {
+ Log.e(LOG_TAG,
+ "Can't get permission info for " + info.requestedPermissions[i], e);
+ continue;
+ }
+
+ if ((perm.flags & PermissionInfo.FLAG_INSTALLED) == 0
+ || (perm.flags & PermissionInfo.FLAG_HIDDEN) != 0) {
+ 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));
+ }
+ }
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(LOG_TAG, "Problem getting package info for " + pkg, e);
+ }
+ // Sort an ArrayList of the groups and then set the order from the sorting.
+ Collections.sort(prefs, new Comparator<Preference>() {
+ @Override
+ public int compare(Preference lhs, Preference rhs) {
+ String lKey = lhs.getKey();
+ String rKey = rhs.getKey();
+ if (lKey.equals(KEY_OTHER)) {
+ return 1;
+ } else if (rKey.equals(KEY_OTHER)) {
+ return -1;
+ } else if (Utils.isModernPermissionGroup(lKey)
+ != Utils.isModernPermissionGroup(rKey)) {
+ return Utils.isModernPermissionGroup(lKey) ? -1 : 1;
+ }
+ return lhs.getTitle().toString().compareTo(rhs.getTitle().toString());
+ }
+ });
+ for (int i = 0; i < prefs.size(); i++) {
+ prefs.get(i).setOrder(i);
+ }
+ }
+
+ private PermissionGroupInfo getGroup(String group, PackageManager pm) {
+ try {
+ return pm.getPermissionGroupInfo(group, 0);
+ } catch (NameNotFoundException e) {
+ return null;
+ }
+ }
+
+ private PreferenceGroup findOrCreate(PackageItemInfo group, PackageManager pm,
+ ArrayList<Preference> prefs) {
+ PreferenceGroup pref = (PreferenceGroup) findPreference(group.name);
+ if (pref == null) {
+ pref = new PreferenceCategory(getContext());
+ pref.setKey(group.name);
+ pref.setLayoutResource(R.layout.preference_category_material);
+ pref.setTitle(group.loadLabel(pm));
+ prefs.add(pref);
+ getPreferenceScreen().addPreference(pref);
+ }
+ return pref;
+ }
+
+ private Preference getPreference(PermissionInfo perm, PermissionGroupInfo group,
+ PackageManager pm) {
+ Preference pref = new Preference(getContext());
+ pref.setLayoutResource(R.layout.preference_permissions);
+ Drawable icon = null;
+ if (perm.icon != 0) {
+ icon = perm.loadIcon(pm);
+ } else if (group != null && group.icon != 0) {
+ icon = group.loadIcon(pm);
+ } else {
+ icon = getContext().getDrawable(R.drawable.ic_perm_device_info);
+ }
+ 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;
+ }
+ });
+
+ return pref;
+ }
+} \ 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
new file mode 100644
index 00000000..42a2661c
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
@@ -0,0 +1,404 @@
+/*
+* Copyright (C) 2015 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.android.packageinstaller.permission.ui.television;
+
+import android.annotation.Nullable;
+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;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceScreen;
+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.Toast;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.AppPermissions;
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
+import com.android.packageinstaller.permission.utils.LocationUtils;
+import com.android.packageinstaller.permission.utils.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class AppPermissionsFragment extends SettingsWithHeader
+ implements OnPreferenceChangeListener {
+
+ private static final String LOG_TAG = "ManagePermsFragment";
+
+ static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
+
+ private static final int MENU_ALL_PERMS = 0;
+
+ private List<AppPermissionGroup> mToggledGroups;
+ private AppPermissions mAppPermissions;
+ private PreferenceScreen mExtraScreen;
+
+ private boolean mHasConfirmedRevoke;
+
+ public static AppPermissionsFragment newInstance(String packageName) {
+ return setPackageName(new AppPermissionsFragment(), packageName);
+ }
+
+ private static <T extends Fragment> T setPackageName(T fragment, String packageName) {
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ fragment.setArguments(arguments);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+
+ String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ Activity activity = getActivity();
+ PackageInfo packageInfo = getPackageInfo(activity, packageName);
+ if (packageInfo == null) {
+ Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show();
+ activity.finish();
+ return;
+ }
+
+ mAppPermissions = new AppPermissions(activity, packageInfo, null, true, new Runnable() {
+ @Override
+ public void run() {
+ getActivity().finish();
+ }
+ });
+ loadPreferences();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mAppPermissions.refresh();
+ setPreferencesCheckedState();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home: {
+ getActivity().finish();
+ return true;
+ }
+
+ 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();
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ if (mAppPermissions != null) {
+ bindUi(this, mAppPermissions.getPackageInfo());
+ }
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ menu.add(Menu.NONE, MENU_ALL_PERMS, Menu.NONE, R.string.all_permissions);
+ }
+
+ private static void bindUi(SettingsWithHeader fragment, PackageInfo packageInfo) {
+ Activity activity = fragment.getActivity();
+ PackageManager pm = activity.getPackageManager();
+ ApplicationInfo appInfo = packageInfo.applicationInfo;
+ Intent infoIntent = null;
+ if (!activity.getIntent().getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) {
+ infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.fromParts("package", packageInfo.packageName, null));
+ }
+
+ Drawable icon = appInfo.loadIcon(pm);
+ CharSequence label = appInfo.loadLabel(pm);
+ fragment.setHeader(icon, label, infoIntent);
+
+ ActionBar ab = activity.getActionBar();
+ if (ab != null) {
+ ab.setTitle(R.string.app_permissions);
+ }
+
+ ViewGroup rootView = (ViewGroup) fragment.getView();
+ ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ iconView.setImageDrawable(icon);
+ }
+ TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(R.string.app_permissions);
+ }
+ TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(label);
+ }
+ }
+
+ private void loadPreferences() {
+ Context context = getPreferenceManager().getContext();
+ if (context == null) {
+ return;
+ }
+
+ PreferenceScreen screen = getPreferenceScreen();
+ screen.removeAll();
+
+ if (mExtraScreen != null) {
+ mExtraScreen.removeAll();
+ }
+
+ final Preference extraPerms = new Preference(context);
+ extraPerms.setIcon(R.drawable.ic_toc);
+ extraPerms.setTitle(R.string.additional_permissions);
+
+ for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
+ if (!Utils.shouldShowPermission(group, mAppPermissions.getPackageInfo().packageName)) {
+ continue;
+ }
+
+ boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
+
+ SwitchPreference preference = new SwitchPreference(context);
+ 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()) {
+ preference.setSummary(getString(R.string.permission_summary_enforced_by_policy));
+ }
+ preference.setPersistent(false);
+ preference.setEnabled(!group.isPolicyFixed());
+ preference.setChecked(group.areRuntimePermissionsGranted());
+
+ if (isPlatform) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ mExtraScreen.addPreference(preference);
+ }
+ }
+
+ if (mExtraScreen != null) {
+ extraPerms.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
+ setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME));
+ frag.setTargetFragment(AppPermissionsFragment.this, 0);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, frag)
+ .addToBackStack(null)
+ .commit();
+ return true;
+ }
+ });
+ int count = mExtraScreen.getPreferenceCount();
+ extraPerms.setSummary(getResources().getQuantityString(
+ R.plurals.additional_permissions_more, count, count));
+ screen.addPreference(extraPerms);
+ }
+
+ setLoading(false /* loading */, true /* animate */);
+ }
+
+ @Override
+ public boolean onPreferenceChange(final Preference preference, Object newValue) {
+ String groupName = preference.getKey();
+ final AppPermissionGroup group = mAppPermissions.getPermissionGroup(groupName);
+
+ if (group == null) {
+ return false;
+ }
+
+ OverlayTouchActivity activity = (OverlayTouchActivity) getActivity();
+ if (activity.isObscuredTouch()) {
+ activity.showOverlayDialog();
+ return false;
+ }
+
+ addToggledGroup(group);
+
+ if (LocationUtils.isLocationGroupAndProvider(group.getName(), group.getApp().packageName)) {
+ LocationUtils.showLocationDialog(getContext(), mAppPermissions.getAppLabel());
+ return false;
+ }
+ if (newValue == Boolean.TRUE) {
+ group.grantRuntimePermissions(false);
+ } else {
+ final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
+ if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
+ new AlertDialog.Builder(getContext())
+ .setMessage(grantedByDefault ? R.string.system_warning
+ : R.string.old_sdk_deny_warning)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.grant_dialog_button_deny,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((SwitchPreference) preference).setChecked(false);
+ group.revokeRuntimePermissions(false);
+ if (!grantedByDefault) {
+ mHasConfirmedRevoke = true;
+ }
+ }
+ })
+ .show();
+ return false;
+ } else {
+ group.revokeRuntimePermissions(false);
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ logToggledGroups();
+ }
+
+ private void addToggledGroup(AppPermissionGroup group) {
+ if (mToggledGroups == null) {
+ mToggledGroups = new ArrayList<>();
+ }
+ // Double toggle is back to initial state.
+ if (mToggledGroups.contains(group)) {
+ mToggledGroups.remove(group);
+ } else {
+ mToggledGroups.add(group);
+ }
+ }
+
+ private void logToggledGroups() {
+ if (mToggledGroups != null) {
+ String packageName = mAppPermissions.getPackageInfo().packageName;
+ SafetyNetLogger.logPermissionsToggled(packageName, mToggledGroups);
+ mToggledGroups = null;
+ }
+ }
+
+ private void setPreferencesCheckedState() {
+ setPreferencesCheckedState(getPreferenceScreen());
+ if (mExtraScreen != null) {
+ setPreferencesCheckedState(mExtraScreen);
+ }
+ }
+
+ private void setPreferencesCheckedState(PreferenceScreen screen) {
+ int preferenceCount = screen.getPreferenceCount();
+ for (int i = 0; i < preferenceCount; i++) {
+ Preference preference = screen.getPreference(i);
+ if (preference instanceof SwitchPreference) {
+ SwitchPreference switchPref = (SwitchPreference) preference;
+ AppPermissionGroup group = mAppPermissions.getPermissionGroup(switchPref.getKey());
+ if (group != null) {
+ switchPref.setChecked(group.areRuntimePermissionsGranted());
+ }
+ }
+ }
+ }
+
+ private static PackageInfo getPackageInfo(Activity activity, String packageName) {
+ try {
+ return activity.getPackageManager().getPackageInfo(
+ packageName, PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.i(LOG_TAG, "No package:" + activity.getCallingPackage(), e);
+ return null;
+ }
+ }
+
+ public static class AdditionalPermissionsFragment extends SettingsWithHeader {
+ AppPermissionsFragment mOuterFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ mOuterFragment = (AppPermissionsFragment) getTargetFragment();
+ super.onCreate(savedInstanceState);
+ setHeader(mOuterFragment.mIcon, mOuterFragment.mLabel, mOuterFragment.mInfoIntent);
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ setPreferenceScreen(mOuterFragment.mExtraScreen);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+ bindUi(this, getPackageInfo(getActivity(), packageName));
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java b/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java
new file mode 100644
index 00000000..a2538821
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/GrantPermissionsViewHandlerImpl.java
@@ -0,0 +1,131 @@
+package com.android.packageinstaller.permission.ui.television;
+
+import android.content.Context;
+import android.graphics.PixelFormat;
+import android.graphics.drawable.Icon;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.ui.GrantPermissionsViewHandler;
+
+/**
+ * TV-specific view handler for the grant permissions activity.
+ */
+public final class GrantPermissionsViewHandlerImpl implements GrantPermissionsViewHandler, OnClickListener {
+
+ private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME";
+
+ private final Context mContext;
+
+ private ResultListener mResultListener;
+
+ private String mGroupName;
+
+ private LinearLayout mRootView;
+ private TextView mMessageView;
+ private ImageView mIconView;
+ private TextView mCurrentGroupView;
+ private Button mAllowButton;
+ private Button mSoftDenyButton;
+ private Button mHardDenyButton;
+
+ public GrantPermissionsViewHandlerImpl(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public GrantPermissionsViewHandlerImpl setResultListener(ResultListener listener) {
+ mResultListener = listener;
+ return this;
+ }
+
+ @Override
+ public View createView() {
+ mRootView = (LinearLayout) LayoutInflater.from(mContext)
+ .inflate(R.layout.grant_permissions, null);
+
+ mMessageView = (TextView) mRootView.findViewById(R.id.permission_message);
+ mIconView = (ImageView) mRootView.findViewById(R.id.permission_icon);
+ mCurrentGroupView = (TextView) mRootView.findViewById(R.id.current_page_text);
+ mAllowButton = (Button) mRootView.findViewById(R.id.permission_allow_button);
+ mSoftDenyButton = (Button) mRootView.findViewById(R.id.permission_deny_button);
+ mHardDenyButton = (Button) mRootView.findViewById(
+ R.id.permission_deny_dont_ask_again_button);
+
+ mAllowButton.setOnClickListener(this);
+ mSoftDenyButton.setOnClickListener(this);
+ mHardDenyButton.setOnClickListener(this);
+
+ return mRootView;
+ }
+
+ @Override
+ public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) {
+ outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
+ outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ outLayoutParams.format = PixelFormat.OPAQUE;
+ outLayoutParams.gravity = Gravity.BOTTOM;
+ outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
+ outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ }
+
+ @Override
+ public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon,
+ CharSequence message, boolean showDoNotAsk) {
+ mGroupName = groupName;
+
+ mMessageView.setText(message);
+ mIconView.setImageIcon(icon);
+ mHardDenyButton.setVisibility(showDoNotAsk ? View.VISIBLE : View.GONE);
+ if (groupCount > 1) {
+ mCurrentGroupView.setVisibility(View.VISIBLE);
+ mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template,
+ groupIndex + 1, groupCount));
+ } else {
+ mCurrentGroupView.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ @Override
+ public void saveInstanceState(Bundle outState) {
+ outState.putString(ARG_GROUP_NAME, mGroupName);
+ }
+
+ @Override
+ public void loadInstanceState(Bundle savedInstanceState) {
+ mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
+ }
+
+ @Override
+ public void onClick(View view) {
+ boolean granted = false;
+ boolean doNotAskAgain = false;
+ switch (view.getId()) {
+ case R.id.permission_allow_button:
+ granted = true;
+ break;
+ case R.id.permission_deny_dont_ask_again_button:
+ doNotAskAgain = true;
+ break;
+ }
+ if (mResultListener != null) {
+ mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mResultListener != null) {
+ mResultListener.onPermissionGrantResult(mGroupName, false, false);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
new file mode 100644
index 00000000..47301f48
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui.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.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.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;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.List;
+
+public final class ManagePermissionsFragment extends PermissionsFrameFragment
+ implements PermissionGroups.PermissionsGroupsChangeCallback, 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";
+
+ 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);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ 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);
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ String key = preference.getKey();
+
+ PermissionGroup group = mPermissions.getGroup(key);
+ if (group == null) {
+ return false;
+ }
+
+ Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
+ .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
+ try {
+ getActivity().startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(LOG_TAG, "No app to handle " + intent);
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onPermissionGroupsChanged() {
+ updatePermissionsUi();
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindPermissionUi(getActivity(), getView());
+ }
+
+ private static void bindPermissionUi(@Nullable Context context, @Nullable View rootView) {
+ if (context == null || rootView == null) {
+ return;
+ }
+
+ ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ // Set the icon as the background instead of the image because ImageView
+ // doesn't properly scale vector drawables beyond their intrinsic size
+ Drawable icon = context.getDrawable(R.drawable.ic_lock);
+ icon.setTint(context.getColor(R.color.off_white));
+ iconView.setBackground(icon);
+ }
+ TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(R.string.app_permissions);
+ }
+ TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(R.string.app_permissions_breadcrumb);
+ }
+ }
+
+ private void updatePermissionsUi() {
+ Context context = getPreferenceManager().getContext();
+ if (context == null) {
+ return;
+ }
+
+ List<PermissionGroup> groups = mPermissions.getGroups();
+ PreferenceScreen screen = getPreferenceScreen();
+
+ // Use this to speed up getting the info for all of the PermissionApps below.
+ // Create a new one for each refresh to make sure it has fresh data.
+ PmCache cache = new PmCache(getContext().getPackageManager());
+ 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) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ 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);
+ }
+
+ 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);
+ }
+
+ @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, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindPermissionUi(getActivity(), getView());
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen);
+ setLoading(false /* loading */, true /* animate */);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
new file mode 100644
index 00000000..e41e05fb
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
@@ -0,0 +1,434 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.ui.television;
+
+import android.app.ActionBar;
+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.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v4.util.ArrayMap;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.ArraySet;
+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.R;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.PermissionApps;
+import com.android.packageinstaller.permission.model.PermissionApps.Callback;
+import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
+import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
+import com.android.packageinstaller.permission.utils.LocationUtils;
+import com.android.packageinstaller.permission.utils.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class PermissionAppsFragment extends PermissionsFrameFragment implements Callback,
+ OnPreferenceChangeListener {
+
+ private static final int MENU_SHOW_SYSTEM = Menu.FIRST;
+ private static final int MENU_HIDE_SYSTEM = Menu.FIRST + 1;
+ private static final String KEY_SHOW_SYSTEM_PREFS = "_showSystem";
+
+ public static PermissionAppsFragment newInstance(String permissionName) {
+ return setPermissionName(new PermissionAppsFragment(), permissionName);
+ }
+
+ private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) {
+ Bundle arguments = new Bundle();
+ arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName);
+ fragment.setArguments(arguments);
+ return fragment;
+ }
+
+ private PermissionApps mPermissionApps;
+
+ private PreferenceScreen mExtraScreen;
+
+ private ArrayMap<String, AppPermissionGroup> mToggledGroups;
+ private ArraySet<String> mLauncherPkgs;
+ private boolean mHasConfirmedRevoke;
+
+ private boolean mShowSystem;
+ private MenuItem mShowSystemMenu;
+ private MenuItem mHideSystemMenu;
+
+ private Callback mOnPermissionsLoadedListener;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLoading(true /* loading */, false /* animate */);
+ setHasOptionsMenu(true);
+ final ActionBar ab = getActivity().getActionBar();
+ if (ab != null) {
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+ mLauncherPkgs = Utils.getLauncherPackages(getContext());
+
+ String groupName = getArguments().getString(Intent.EXTRA_PERMISSION_NAME);
+ mPermissionApps = new PermissionApps(getActivity(), groupName, this);
+ mPermissionApps.refresh(true);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mPermissionApps.refresh(true);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+ R.string.menu_show_system);
+ mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+ R.string.menu_hide_system);
+ updateMenu();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getActivity().finish();
+ return true;
+ case MENU_SHOW_SYSTEM:
+ case MENU_HIDE_SYSTEM:
+ mShowSystem = item.getItemId() == MENU_SHOW_SYSTEM;
+ if (mPermissionApps.getApps() != null) {
+ onPermissionsLoaded(mPermissionApps);
+ }
+ updateMenu();
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void updateMenu() {
+ mShowSystemMenu.setVisible(!mShowSystem);
+ mHideSystemMenu.setVisible(mShowSystem);
+ }
+
+ @Override
+ protected void onSetEmptyText(TextView textView) {
+ textView.setText(R.string.no_apps);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ bindUi(this, mPermissionApps);
+ }
+
+ private static void bindUi(Fragment fragment, PermissionApps permissionApps) {
+ final Drawable icon = permissionApps.getIcon();
+ final CharSequence label = permissionApps.getLabel();
+ final ActionBar ab = fragment.getActivity().getActionBar();
+ if (ab != null) {
+ ab.setTitle(fragment.getString(R.string.permission_title, label));
+ }
+
+ final ViewGroup rootView = (ViewGroup) fragment.getView();
+ final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon);
+ if (iconView != null) {
+ // Set the icon as the background instead of the image because ImageView
+ // doesn't properly scale vector drawables beyond their intrinsic size
+ iconView.setBackground(icon);
+ }
+ final TextView titleView = (TextView) rootView.findViewById(R.id.lb_title);
+ if (titleView != null) {
+ titleView.setText(label);
+ }
+ final TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb);
+ if (breadcrumbView != null) {
+ breadcrumbView.setText(R.string.app_permissions);
+ }
+ }
+
+ private void setOnPermissionsLoadedListener(Callback callback) {
+ mOnPermissionsLoadedListener = callback;
+ }
+
+ @Override
+ public void onPermissionsLoaded(PermissionApps permissionApps) {
+ Context context = getPreferenceManager().getContext();
+
+ if (context == null) {
+ return;
+ }
+
+ boolean isTelevision = Utils.isTelevision(context);
+ PreferenceScreen screen = getPreferenceScreen();
+
+ ArraySet<String> preferencesToRemove = new ArraySet<>();
+ for (int i = 0, n = screen.getPreferenceCount(); i < n; i++) {
+ preferencesToRemove.add(screen.getPreference(i).getKey());
+ }
+ if (mExtraScreen != null) {
+ for (int i = 0, n = mExtraScreen.getPreferenceCount(); i < n; i++) {
+ preferencesToRemove.add(mExtraScreen.getPreference(i).getKey());
+ }
+ }
+
+ for (PermissionApp app : permissionApps.getApps()) {
+ if (!Utils.shouldShowPermission(app)) {
+ continue;
+ }
+
+ String key = app.getKey();
+ preferencesToRemove.remove(key);
+ Preference existingPref = screen.findPreference(key);
+ if (existingPref == null && mExtraScreen != null) {
+ existingPref = mExtraScreen.findPreference(key);
+ }
+
+ boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+ if (isSystemApp && !isTelevision && !mShowSystem) {
+ if (existingPref != null) {
+ screen.removePreference(existingPref);
+ }
+ continue;
+ }
+
+ if (existingPref != null) {
+ // If existing preference - only update its state.
+ if (app.isPolicyFixed()) {
+ existingPref.setSummary(getString(
+ R.string.permission_summary_enforced_by_policy));
+ }
+ existingPref.setPersistent(false);
+ existingPref.setEnabled(!app.isPolicyFixed());
+ if (existingPref instanceof SwitchPreference) {
+ ((SwitchPreference) existingPref)
+ .setChecked(app.areRuntimePermissionsGranted());
+ }
+ continue;
+ }
+
+ SwitchPreference pref = new SwitchPreference(context);
+ pref.setOnPreferenceChangeListener(this);
+ pref.setKey(app.getKey());
+ pref.setIcon(app.getIcon());
+ pref.setTitle(app.getLabel());
+ if (app.isPolicyFixed()) {
+ pref.setSummary(getString(R.string.permission_summary_enforced_by_policy));
+ }
+ pref.setPersistent(false);
+ pref.setEnabled(!app.isPolicyFixed());
+ pref.setChecked(app.areRuntimePermissionsGranted());
+
+ if (isSystemApp && isTelevision) {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
+ }
+ mExtraScreen.addPreference(pref);
+ } else {
+ screen.addPreference(pref);
+ }
+ }
+
+ if (mExtraScreen != null) {
+ preferencesToRemove.remove(KEY_SHOW_SYSTEM_PREFS);
+ Preference pref = screen.findPreference(KEY_SHOW_SYSTEM_PREFS);
+
+ if (pref == null) {
+ pref = new Preference(context);
+ pref.setKey(KEY_SHOW_SYSTEM_PREFS);
+ pref.setIcon(Utils.applyTint(context, R.drawable.ic_toc,
+ android.R.attr.colorControlNormal));
+ pref.setTitle(R.string.preference_show_system_apps);
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ SystemAppsFragment frag = new SystemAppsFragment();
+ setPermissionName(frag, getArguments().getString(Intent.EXTRA_PERMISSION_NAME));
+ frag.setTargetFragment(PermissionAppsFragment.this, 0);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, frag)
+ .addToBackStack("SystemApps")
+ .commit();
+ return true;
+ }
+ });
+ screen.addPreference(pref);
+ }
+
+ int grantedCount = 0;
+ for (int i = 0, n = mExtraScreen.getPreferenceCount(); i < n; i++) {
+ if (((SwitchPreference) mExtraScreen.getPreference(i)).isChecked()) {
+ grantedCount++;
+ }
+ }
+ pref.setSummary(getString(R.string.app_permissions_group_summary,
+ grantedCount, mExtraScreen.getPreferenceCount()));
+ }
+
+ for (String key : preferencesToRemove) {
+ Preference pref = screen.findPreference(key);
+ if (pref != null) {
+ screen.removePreference(pref);
+ } else if (mExtraScreen != null) {
+ pref = mExtraScreen.findPreference(key);
+ if (pref != null) {
+ mExtraScreen.removePreference(pref);
+ }
+ }
+ }
+
+ setLoading(false /* loading */, true /* animate */);
+
+ if (mOnPermissionsLoadedListener != null) {
+ mOnPermissionsLoadedListener.onPermissionsLoaded(permissionApps);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(final Preference preference, Object newValue) {
+ String pkg = preference.getKey();
+ final PermissionApp app = mPermissionApps.getApp(pkg);
+
+ if (app == null) {
+ return false;
+ }
+
+ OverlayTouchActivity activity = (OverlayTouchActivity) getActivity();
+ if (activity.isObscuredTouch()) {
+ activity.showOverlayDialog();
+ return false;
+ }
+
+ addToggledGroup(app.getPackageName(), app.getPermissionGroup());
+
+ if (LocationUtils.isLocationGroupAndProvider(mPermissionApps.getGroupName(),
+ app.getPackageName())) {
+ LocationUtils.showLocationDialog(getContext(), app.getLabel());
+ return false;
+ }
+ if (newValue == Boolean.TRUE) {
+ app.grantRuntimePermissions();
+ } else {
+ final boolean grantedByDefault = app.hasGrantedByDefaultPermissions();
+ if (grantedByDefault || (!app.hasRuntimePermissions() && !mHasConfirmedRevoke)) {
+ new AlertDialog.Builder(getContext())
+ .setMessage(grantedByDefault ? R.string.system_warning
+ : R.string.old_sdk_deny_warning)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.grant_dialog_button_deny,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((SwitchPreference) preference).setChecked(false);
+ app.revokeRuntimePermissions();
+ if (!grantedByDefault) {
+ mHasConfirmedRevoke = true;
+ }
+ }
+ })
+ .show();
+ return false;
+ } else {
+ app.revokeRuntimePermissions();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ logToggledGroups();
+ }
+
+ private void addToggledGroup(String packageName, AppPermissionGroup group) {
+ if (mToggledGroups == null) {
+ mToggledGroups = new ArrayMap<>();
+ }
+ // Double toggle is back to initial state.
+ if (mToggledGroups.containsKey(packageName)) {
+ mToggledGroups.remove(packageName);
+ } else {
+ mToggledGroups.put(packageName, group);
+ }
+ }
+
+ private void logToggledGroups() {
+ if (mToggledGroups != null) {
+ final int groupCount = mToggledGroups.size();
+ for (int i = 0; i < groupCount; i++) {
+ String packageName = mToggledGroups.keyAt(i);
+ List<AppPermissionGroup> groups = new ArrayList<>();
+ groups.add(mToggledGroups.valueAt(i));
+ SafetyNetLogger.logPermissionsToggled(packageName, groups);
+ }
+ mToggledGroups = null;
+ }
+ }
+
+ public static class SystemAppsFragment extends PermissionsFrameFragment implements Callback {
+ PermissionAppsFragment mOuterFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ mOuterFragment = (PermissionAppsFragment) getTargetFragment();
+ setLoading(true /* loading */, false /* animate */);
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ if (mOuterFragment.mExtraScreen != null) {
+ setPreferenceScreen();
+ } else {
+ mOuterFragment.setOnPermissionsLoadedListener(this);
+ }
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ String groupName = getArguments().getString(Intent.EXTRA_PERMISSION_NAME);
+ PermissionApps permissionApps = new PermissionApps(getActivity(), groupName, null);
+ bindUi(this, permissionApps);
+ }
+
+ @Override
+ public void onPermissionsLoaded(PermissionApps permissionApps) {
+ setPreferenceScreen();
+ mOuterFragment.setOnPermissionsLoadedListener(null);
+ }
+
+ private void setPreferenceScreen() {
+ setPreferenceScreen(mOuterFragment.mExtraScreen);
+ setLoading(false /* loading */, true /* animate */);
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
new file mode 100644
index 00000000..bc0e8457
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui.television;
+
+import android.annotation.Nullable;
+import android.os.Bundle;
+import android.support.v14.preference.PreferenceFragment;
+import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.RecyclerView.AdapterDataObserver;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+public abstract class PermissionsFrameFragment extends PreferenceFragment {
+
+ private static final float WINDOW_ALIGNMENT_OFFSET_PERCENT = 50;
+
+ private ViewGroup mPreferencesContainer;
+
+ // TV-specific instance variables
+ @Nullable private VerticalGridView mGridView;
+
+ private View mLoadingView;
+ private ViewGroup mPrefsView;
+ private boolean mIsLoading;
+
+ /**
+ * Returns the view group that holds the preferences objects. This will
+ * only be set after {@link #onCreateView} has been called.
+ */
+ protected final ViewGroup getPreferencesContainer() {
+ return mPreferencesContainer;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container,
+ false);
+ mPrefsView = (ViewGroup) rootView.findViewById(R.id.prefs_container);
+ if (mPrefsView == null) {
+ mPrefsView = rootView;
+ }
+ mLoadingView = rootView.findViewById(R.id.loading_container);
+ mPreferencesContainer = (ViewGroup) super.onCreateView(
+ inflater, mPrefsView, savedInstanceState);
+ setLoading(mIsLoading, false, true /* force */);
+ mPrefsView.addView(mPreferencesContainer);
+ return rootView;
+ }
+
+ @Override
+ public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
+ PreferenceScreen preferences = getPreferenceScreen();
+ if (preferences == null) {
+ preferences = getPreferenceManager().createPreferenceScreen(getActivity());
+ setPreferenceScreen(preferences);
+ }
+ }
+
+ protected void setLoading(boolean loading, boolean animate) {
+ setLoading(loading, animate, false);
+ }
+
+ private void setLoading(boolean loading, boolean animate, boolean force) {
+ if (mIsLoading != loading || force) {
+ mIsLoading = loading;
+ if (getView() == null) {
+ // If there is no created view, there is no reason to animate.
+ animate = false;
+ }
+ if (mPrefsView != null) {
+ setViewShown(mPrefsView, !loading, animate);
+ }
+ if (mLoadingView != null) {
+ setViewShown(mLoadingView, loading, animate);
+ }
+ }
+ }
+
+ private void setViewShown(final View view, boolean shown, boolean animate) {
+ if (animate) {
+ Animation animation = AnimationUtils.loadAnimation(getContext(),
+ shown ? android.R.anim.fade_in : android.R.anim.fade_out);
+ if (shown) {
+ view.setVisibility(View.VISIBLE);
+ } else {
+ animation.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.setVisibility(View.INVISIBLE);
+ }
+ });
+ }
+ view.startAnimation(animation);
+ } else {
+ view.clearAnimation();
+ view.setVisibility(shown ? View.VISIBLE : View.INVISIBLE);
+ }
+ }
+
+ @Override
+ public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
+ Bundle savedInstanceState) {
+ if (Utils.isTelevision(getContext())) {
+ mGridView = (VerticalGridView) inflater.inflate(
+ R.layout.leanback_preferences_list, parent, false);
+ mGridView.setWindowAlignmentOffset(0);
+ mGridView.setWindowAlignmentOffsetPercent(WINDOW_ALIGNMENT_OFFSET_PERCENT);
+ mGridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE);
+ mGridView.setFocusScrollStrategy(VerticalGridView.FOCUS_SCROLL_ALIGNED);
+ return mGridView;
+ } else {
+ return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
+ }
+ }
+
+ @Override
+ protected RecyclerView.Adapter<?> onCreateAdapter(PreferenceScreen preferenceScreen) {
+ final RecyclerView.Adapter<?> adapter = super.onCreateAdapter(preferenceScreen);
+
+ if (adapter != null) {
+ final TextView emptyView = (TextView) getView().findViewById(R.id.no_permissions);
+ onSetEmptyText(emptyView);
+ final RecyclerView recyclerView = getListView();
+ adapter.registerAdapterDataObserver(new AdapterDataObserver() {
+ @Override
+ public void onChanged() {
+ checkEmpty();
+ }
+
+ @Override
+ public void onItemRangeInserted(int positionStart, int itemCount) {
+ checkEmpty();
+ }
+
+ @Override
+ public void onItemRangeRemoved(int positionStart, int itemCount) {
+ checkEmpty();
+ }
+
+ private void checkEmpty() {
+ boolean isEmpty = adapter.getItemCount() == 0;
+ emptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
+ recyclerView.setVisibility(isEmpty ? View.GONE : View.VISIBLE);
+ if (!isEmpty && mGridView != null) {
+ mGridView.requestFocus();
+ }
+ }
+ });
+
+ boolean isEmpty = adapter.getItemCount() == 0;
+ emptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
+ recyclerView.setVisibility(isEmpty ? View.GONE : View.VISIBLE);
+ if (!isEmpty && mGridView != null) {
+ mGridView.requestFocus();
+ }
+ }
+
+ return adapter;
+ }
+
+ /**
+ * Hook for subclasses to change the default text of the empty view.
+ * Base implementation leaves the default empty view text.
+ *
+ * @param textView the empty text view
+ */
+ protected void onSetEmptyText(TextView textView) {
+ }
+}
+
diff --git a/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java
new file mode 100644
index 00000000..c7f5cda3
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.ui.television;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.Utils;
+
+public abstract class SettingsWithHeader extends PermissionsFrameFragment
+ implements OnClickListener {
+
+ private View mHeader;
+ protected Intent mInfoIntent;
+ protected Drawable mIcon;
+ protected CharSequence mLabel;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
+
+ if (!Utils.isTelevision(getContext())) {
+ mHeader = inflater.inflate(R.layout.header, root, false);
+ getPreferencesContainer().addView(mHeader, 0);
+ updateHeader();
+ }
+
+ return root;
+ }
+
+ public void setHeader(Drawable icon, CharSequence label, Intent infoIntent) {
+ mIcon = icon;
+ mLabel = label;
+ mInfoIntent = infoIntent;
+ updateHeader();
+ }
+
+ private void updateHeader() {
+ if (mHeader != null) {
+ final ImageView appIcon = (ImageView) mHeader.findViewById(R.id.icon);
+ appIcon.setImageDrawable(mIcon);
+
+ final TextView appName = (TextView) mHeader.findViewById(R.id.name);
+ appName.setText(mLabel);
+
+ final View info = mHeader.findViewById(R.id.info);
+ if (mInfoIntent == null) {
+ info.setVisibility(View.GONE);
+ } else {
+ info.setVisibility(View.VISIBLE);
+ info.setClickable(true);
+ info.setOnClickListener(this);
+ }
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ getActivity().startActivity(mInfoIntent);
+ }
+
+}
diff --git a/src/com/android/packageinstaller/permission/utils/LocationUtils.java b/src/com/android/packageinstaller/permission/utils/LocationUtils.java
new file mode 100644
index 00000000..0296ae80
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/LocationUtils.java
@@ -0,0 +1,72 @@
+/*
+ * 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.utils;
+
+import android.Manifest;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.location.ILocationManager;
+import android.location.LocationManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+
+import com.android.packageinstaller.R;
+
+import java.util.ArrayList;
+
+public class LocationUtils {
+
+ public static final String LOCATION_PERMISSION = Manifest.permission_group.LOCATION;
+
+ public static void showLocationDialog(final Context context, CharSequence label) {
+ new AlertDialog.Builder(context)
+ .setIcon(R.drawable.ic_dialog_alert_material)
+ .setTitle(android.R.string.dialog_alert_title)
+ .setMessage(context.getString(R.string.location_warning, label))
+ .setNegativeButton(R.string.ok, null)
+ .setPositiveButton(R.string.location_settings, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
+ }
+ })
+ .show();
+ }
+
+ public static boolean isLocationEnabled(Context context) {
+ return Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
+ Settings.Secure.LOCATION_MODE_OFF) != Settings.Secure.LOCATION_MODE_OFF;
+ }
+
+ public static boolean isLocationGroupAndProvider(String groupName, String packageName) {
+ return LOCATION_PERMISSION.equals(groupName) && isNetworkLocationProvider(packageName);
+ }
+
+ private static boolean isNetworkLocationProvider(String packageName) {
+ ILocationManager locationService = ILocationManager.Stub.asInterface(
+ ServiceManager.getService(Context.LOCATION_SERVICE));
+ try {
+ return packageName.equals(locationService.getNetworkProviderPackage());
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
new file mode 100644
index 00000000..8280ba36
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
@@ -0,0 +1,72 @@
+/*
+ * 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.utils;
+
+import android.content.pm.PackageInfo;
+import android.util.EventLog;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+
+import java.util.List;
+
+public final class SafetyNetLogger {
+
+ // The log tag used by SafetyNet to pick entries from the event log.
+ 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";
+
+ // Log tag for the result of permissions toggling.
+ private static final String PERMISSIONS_TOGGLED = "permissions_toggled";
+
+ private SafetyNetLogger() {
+ /* do nothing */
+ }
+
+ public static void logPermissionsRequested(PackageInfo packageInfo,
+ List<AppPermissionGroup> groups) {
+ EventLog.writeEvent(SNET_NET_EVENT_LOG_TAG, PERMISSIONS_REQUESTED,
+ packageInfo.applicationInfo.uid, buildChangedGroupForPackageMessage(
+ 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(
+ packageName, groups));
+ }
+
+ private static String buildChangedGroupForPackageMessage(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(';');
+ }
+ 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
new file mode 100644
index 00000000..2940a729
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/Utils.java
@@ -0,0 +1,140 @@
+/*
+ * 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.utils;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.Resources.Theme;
+import android.graphics.drawable.Drawable;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.TypedValue;
+
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
+
+public class Utils {
+
+ private static final String LOG_TAG = "Utils";
+
+ public static final String OS_PKG = "android";
+
+ public static final String[] MODERN_PERMISSION_GROUPS = {
+ Manifest.permission_group.CALENDAR,
+ Manifest.permission_group.CAMERA,
+ Manifest.permission_group.CONTACTS,
+ Manifest.permission_group.LOCATION,
+ Manifest.permission_group.SENSORS,
+ Manifest.permission_group.SMS,
+ Manifest.permission_group.PHONE,
+ Manifest.permission_group.MICROPHONE,
+ Manifest.permission_group.STORAGE
+ };
+
+ private static final Intent LAUNCHER_INTENT = new Intent(Intent.ACTION_MAIN, null)
+ .addCategory(Intent.CATEGORY_LAUNCHER);
+
+ private Utils() {
+ /* do nothing - hide constructor */
+ }
+
+ public static Drawable loadDrawable(PackageManager pm, String pkg, int resId) {
+ try {
+ return pm.getResourcesForApplication(pkg).getDrawable(resId, null);
+ } catch (Resources.NotFoundException | PackageManager.NameNotFoundException e) {
+ Log.d(LOG_TAG, "Couldn't get resource", e);
+ return null;
+ }
+ }
+
+ public static boolean isModernPermissionGroup(String name) {
+ for (String modernGroup : MODERN_PERMISSION_GROUPS) {
+ if (modernGroup.equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static boolean shouldShowPermission(AppPermissionGroup group, String packageName) {
+ // We currently will not show permissions fixed by the system.
+ // which is what the system does for system components.
+ if (group.isSystemFixed() && !LocationUtils.isLocationGroupAndProvider(
+ group.getName(), packageName)) {
+ return false;
+ }
+
+ final boolean isPlatformPermission = group.getDeclaringPackage().equals(OS_PKG);
+ // Show legacy permissions only if the user chose that.
+ if (isPlatformPermission
+ && !Utils.isModernPermissionGroup(group.getName())) {
+ return false;
+ }
+ return true;
+ }
+
+ public static boolean shouldShowPermission(PermissionApp app) {
+ // We currently will not show permissions fixed by the system
+ // which is what the system does for system components.
+ if (app.isSystemFixed() && !LocationUtils.isLocationGroupAndProvider(
+ app.getPermissionGroup().getName(), app.getPackageName())) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public static Drawable applyTint(Context context, Drawable icon, int attr) {
+ Theme theme = context.getTheme();
+ TypedValue typedValue = new TypedValue();
+ theme.resolveAttribute(attr, typedValue, true);
+ icon = icon.mutate();
+ icon.setTint(context.getColor(typedValue.resourceId));
+ return icon;
+ }
+
+ public static Drawable applyTint(Context context, int iconResId, int attr) {
+ return applyTint(context, context.getDrawable(iconResId), attr);
+ }
+
+ public static ArraySet<String> getLauncherPackages(Context context) {
+ ArraySet<String> launcherPkgs = new ArraySet<>();
+ for (ResolveInfo info :
+ context.getPackageManager().queryIntentActivities(LAUNCHER_INTENT, 0)) {
+ launcherPkgs.add(info.activityInfo.packageName);
+ }
+
+ return launcherPkgs;
+ }
+
+ public static boolean isSystem(PermissionApp app, ArraySet<String> launcherPkgs) {
+ ApplicationInfo info = app.getAppInfo();
+ return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0
+ && !launcherPkgs.contains(info.packageName);
+ }
+
+ public static boolean isTelevision(Context context) {
+ int uiMode = context.getResources().getConfiguration().uiMode;
+ return (uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION;
+ }
+}