summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml2
-rw-r--r--src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java59
2 files changed, 34 insertions, 27 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2c77f523..3e9e74dc 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -39,6 +39,8 @@
<uses-permission android:name="android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
+ <!-- This permission will be removed in R. -->
+ <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />
diff --git a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java
index f64a72b3..cedb108e 100644
--- a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java
+++ b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java
@@ -38,7 +38,7 @@ class RuntimePermissionsUpgradeController {
private static final String LOG_TAG = RuntimePermissionsUpgradeController.class.getSimpleName();
// The latest version of the runtime permissions database
- private static final int LATEST_VERSION = 6;
+ private static final int LATEST_VERSION = 7;
private RuntimePermissionsUpgradeController() {
/* do nothing - hide constructor */
@@ -148,6 +148,36 @@ class RuntimePermissionsUpgradeController {
}
if (currentVersion == 4) {
+ // moved to step 5->6 to clean up broken permission state during beta 4->5 upgrade
+ currentVersion = 5;
+ }
+
+ if (currentVersion == 5) {
+ Log.i(LOG_TAG, "Grandfathering Storage permissions");
+
+ final List<String> storagePermissions = Utils.getPlatformPermissionNamesOfGroup(
+ Manifest.permission_group.STORAGE);
+
+ for (int i = 0; i < appCount; i++) {
+ final PackageInfo app = apps.get(i);
+ if (app.requestedPermissions == null) {
+ continue;
+ }
+
+ // We don't want to allow modification of storage post install, so put it
+ // on the internal system whitelist to prevent the installer changing it.
+ for (String requestedPermission : app.requestedPermissions) {
+ if (storagePermissions.contains(requestedPermission)) {
+ context.getPackageManager().addWhitelistedRestrictedPermission(
+ app.packageName, requestedPermission,
+ PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE);
+ }
+ }
+ }
+ currentVersion = 6;
+ }
+
+ if (currentVersion == 6) {
if (sdkUpgradedFromP) {
Log.i(LOG_TAG, "Expanding location permissions");
@@ -183,32 +213,7 @@ class RuntimePermissionsUpgradeController {
+ "from Android P");
}
- currentVersion = 5;
- }
-
- if (currentVersion == 5) {
- Log.i(LOG_TAG, "Grandfathering Storage permissions");
-
- final List<String> storagePermissions = Utils.getPlatformPermissionNamesOfGroup(
- Manifest.permission_group.STORAGE);
-
- for (int i = 0; i < appCount; i++) {
- final PackageInfo app = apps.get(i);
- if (app.requestedPermissions == null) {
- continue;
- }
-
- // We don't want to allow modification of storage post install, so put it
- // on the internal system whitelist to prevent the installer changing it.
- for (String requestedPermission : app.requestedPermissions) {
- if (storagePermissions.contains(requestedPermission)) {
- context.getPackageManager().addWhitelistedRestrictedPermission(
- app.packageName, requestedPermission,
- PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE);
- }
- }
- }
- currentVersion = 6;
+ currentVersion = 7;
}
// XXX: Add new upgrade steps above this point.