diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-26 03:09:35 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-26 03:09:35 +0000 |
commit | b306001c3feb74f20e60ef478f5b1eb2f7cbd9af (patch) | |
tree | 62c70fa0c1be7abd2cadbd6db0dd123fd478fe38 | |
parent | fe9b607c13723fc80882ae40db6c47c5d29be745 (diff) | |
parent | bfb184415188d45882b52e3f76ffb76455689ff1 (diff) | |
download | android_packages_apps_PackageInstaller-b306001c3feb74f20e60ef478f5b1eb2f7cbd9af.tar.gz android_packages_apps_PackageInstaller-b306001c3feb74f20e60ef478f5b1eb2f7cbd9af.tar.bz2 android_packages_apps_PackageInstaller-b306001c3feb74f20e60ef478f5b1eb2f7cbd9af.zip |
Snap for 5688376 from bfb184415188d45882b52e3f76ffb76455689ff1 to qt-release
Change-Id: I5b54221a275398d4cb54c1ecd1c60647bd7ae1fb
-rw-r--r-- | src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java | 48 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java | 9 |
2 files changed, 57 insertions, 0 deletions
diff --git a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java index bac015a6..cac2ef2c 100644 --- a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java +++ b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java @@ -22,6 +22,7 @@ import android.Manifest; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.PermissionInfo; import android.permission.PermissionManager; import android.text.TextUtils; import android.util.Log; @@ -54,6 +55,8 @@ class RuntimePermissionsUpgradeController { PermissionManager.class); final int currentVersion = permissionManager.getRuntimePermissionsVersion(); + whitelistAllSystemAppPermissions(context); + final int upgradedVersion = onUpgradeLocked(context, currentVersion); if (upgradedVersion != LATEST_VERSION) { @@ -70,6 +73,51 @@ class RuntimePermissionsUpgradeController { } /** + * Whitelist permissions of system-apps. + * + * <p>Apps that are updated via OTAs are never installed. Hence their permission are never + * whitelisted. This code replaces that by always whitelisting them. + * + * @param context A context to talk to the platform + */ + private static void whitelistAllSystemAppPermissions(@NonNull Context context) { + // Only whitelist permissions that are in the OTA. For non-OTA updates the installer should + // do the white-listing + final List<PackageInfo> apps = context.getPackageManager() + .getInstalledPackages(PackageManager.GET_PERMISSIONS + | PackageManager.MATCH_UNINSTALLED_PACKAGES + | PackageManager.MATCH_FACTORY_ONLY); + + final int appCount = apps.size(); + for (int i = 0; i < appCount; i++) { + final PackageInfo app = apps.get(i); + + if (app.requestedPermissions == null) { + continue; + } + + for (String requestedPermission : app.requestedPermissions) { + final PermissionInfo permInfo; + try { + permInfo = context.getPackageManager().getPermissionInfo( + requestedPermission, 0); + } catch (PackageManager.NameNotFoundException e) { + continue; + } + + if ((permInfo.flags & (PermissionInfo.FLAG_HARD_RESTRICTED + | PermissionInfo.FLAG_SOFT_RESTRICTED)) == 0) { + continue; + } + + context.getPackageManager().addWhitelistedRestrictedPermission( + app.packageName, requestedPermission, + PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE); + } + } + } + + /** * You must perform all necessary mutations to bring the runtime permissions * database from the old to the new version. When you add a new upgrade step * you *must* update LATEST_VERSION. diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java index 91c08389..2aa3072a 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java @@ -320,6 +320,11 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader { for (int i = 0; i < numAllowed; i++) { Preference preference = allowed.getPreference(i); + if (preference.getSummary() == null) { + // R.string.no_permission_allowed was added to PreferenceCategory + continue; + } + int category = APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__ALLOWED; if (permissionSubtitleOnlyInForeground.contentEquals(preference.getSummary())) { category = APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__ALLOWED_FOREGROUND; @@ -333,6 +338,10 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader { int numDenied = denied.getPreferenceCount(); for (int i = 0; i < numDenied; i++) { Preference preference = denied.getPreference(i); + if (preference.getSummary() == null) { + // R.string.no_permission_denied was added to PreferenceCategory + continue; + } logAppPermissionsFragmentViewEntry(sessionId, viewId, preference.getKey(), APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__DENIED); } |