diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-09-21 23:17:25 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-09-21 23:17:25 +0000 |
commit | e11ee801db6f3c19119a7a55034a23671a41baee (patch) | |
tree | 9b6e6448d10822e8cdace1f7e56464cdd882bb5d | |
parent | e67fb262bfaf610c52bcc0a1c28cefb3f2340423 (diff) | |
parent | ddb202551ae029dccbbe592274cdea20e30bc606 (diff) | |
download | android_packages_apps_PackageInstaller-e11ee801db6f3c19119a7a55034a23671a41baee.tar.gz android_packages_apps_PackageInstaller-e11ee801db6f3c19119a7a55034a23671a41baee.tar.bz2 android_packages_apps_PackageInstaller-e11ee801db6f3c19119a7a55034a23671a41baee.zip |
Snap for 5892339 from ddb202551ae029dccbbe592274cdea20e30bc606 to qt-qpr1-release
Change-Id: I4de8c7097d8844392473ee459504e638a1061b37
3 files changed, 47 insertions, 6 deletions
diff --git a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java index d0ee1809..d846ce09 100644 --- a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java +++ b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java @@ -34,7 +34,6 @@ import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.AsyncTask; -import android.os.Process; import android.os.UserHandle; import android.permission.PermissionControllerService; import android.permission.PermissionManager; @@ -570,9 +569,6 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS AsyncTask.execute(() -> { onGrantOrUpgradeDefaultRuntimePermissions(); callback.run(); - - // Async part - Utils.updateUserSensitive(getApplication(), Process.myUserHandle()); }); } diff --git a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java index ff72b980..438487ec 100644 --- a/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java +++ b/src/com/android/packageinstaller/permission/service/RuntimePermissionsUpgradeController.java @@ -33,6 +33,7 @@ import androidx.annotation.NonNull; import com.android.packageinstaller.PermissionControllerStatsLog; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.Permission; +import com.android.packageinstaller.permission.utils.ArrayUtils; import com.android.packageinstaller.permission.utils.Utils; import java.util.ArrayList; @@ -45,7 +46,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 = 7; + private static final int LATEST_VERSION = 8; private RuntimePermissionsUpgradeController() { /* do nothing - hide constructor */ @@ -280,16 +281,55 @@ class RuntimePermissionsUpgradeController { currentVersion = 7; } + if (currentVersion == 7) { + Log.i(LOG_TAG, "Expanding read storage to access media location"); + + for (int i = 0; i < appCount; i++) { + final PackageInfo pkgInfo = apps.get(i); + + if (!ArrayUtils.contains(pkgInfo.requestedPermissions, + Manifest.permission.ACCESS_MEDIA_LOCATION)) { + continue; + } + + if (context.checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, 0, + pkgInfo.applicationInfo.uid) != PackageManager.PERMISSION_GRANTED) { + continue; + } + + final AppPermissionGroup group = AppPermissionGroup.create(context, pkgInfo, + Manifest.permission.ACCESS_MEDIA_LOCATION, false); + final Permission perm = group.getPermission( + Manifest.permission.ACCESS_MEDIA_LOCATION); + + if (!perm.isUserSet() && !perm.isSystemFixed() && !perm.isPolicyFixed() + && !perm.isGrantedIncludingAppOp()) { + group.grantRuntimePermissions(false, + new String[]{Manifest.permission.ACCESS_MEDIA_LOCATION}); + + logRuntimePermissionUpgradeResult(group, + pkgInfo.applicationInfo.uid, pkgInfo.packageName, + Manifest.permission.ACCESS_MEDIA_LOCATION); + } + } + + currentVersion = 8; + } + // XXX: Add new upgrade steps above this point. return currentVersion; } private static void logRuntimePermissionUpgradeResult(AppPermissionGroup permissionGroup, - int uid, String packageName) { + int uid, String packageName, String... filterPermissions) { ArrayList<Permission> permissions = permissionGroup.getPermissions(); int numPermissions = permissions.size(); for (int i = 0; i < numPermissions; i++) { + if (filterPermissions != null && !ArrayUtils.contains(filterPermissions, permissions)) { + continue; + } + Permission permission = permissions.get(i); PermissionControllerStatsLog.write(RUNTIME_PERMISSIONS_UPGRADE_RESULT, permission.getName(), uid, packageName); diff --git a/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java b/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java index fde630b5..bee43205 100644 --- a/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java +++ b/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java @@ -19,6 +19,7 @@ package com.android.packageinstaller.role.service; import android.app.role.RoleControllerService; import android.app.role.RoleManager; import android.content.pm.ApplicationInfo; +import android.os.AsyncTask; import android.os.Process; import android.os.UserHandle; import android.util.ArrayMap; @@ -29,6 +30,7 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import com.android.packageinstaller.permission.utils.CollectionUtils; +import com.android.packageinstaller.permission.utils.Utils; import com.android.packageinstaller.role.model.Role; import com.android.packageinstaller.role.model.Roles; import com.android.packageinstaller.role.utils.PackageUtils; @@ -168,6 +170,9 @@ public class RoleControllerServiceImpl extends RoleControllerService { } } + AsyncTask.execute( + () -> Utils.updateUserSensitive(getApplication(), Process.myUserHandle())); + return true; } |