Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dd8714b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Skip updating flags for a permission that's not requested." into rvc-dev am: 97110707

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12000450

Change-Id: I5e2ce8c3d9de732507200501639fa1b79764c32b
parents 99f1b489 97110707
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -789,6 +789,31 @@ public class PermissionManagerService extends IPermissionManager.Stub {
        final PermissionsState permissionsState = ps.getPermissionsState();
        final boolean hadState =
                permissionsState.getRuntimePermissionState(permName, userId) != null;
        if (!hadState) {
            boolean isRequested = false;
            // Fast path, the current package has requested the permission.
            if (pkg.getRequestedPermissions().contains(permName)) {
                isRequested = true;
            }
            if (!isRequested) {
                // Slow path, go through all shared user packages.
                String[] sharedUserPackageNames =
                        mPackageManagerInt.getSharedUserPackagesForPackage(packageName, userId);
                for (String sharedUserPackageName : sharedUserPackageNames) {
                    AndroidPackage sharedUserPkg = mPackageManagerInt.getPackage(
                            sharedUserPackageName);
                    if (sharedUserPkg != null
                            && sharedUserPkg.getRequestedPermissions().contains(permName)) {
                        isRequested = true;
                        break;
                    }
                }
            }
            if (!isRequested) {
                Log.e(TAG, "Permission " + permName + " isn't requested by package " + packageName);
                return;
            }
        }
        final boolean permissionUpdated =
                permissionsState.updatePermissionFlags(bp, userId, flagMask, flagValues);
        if (permissionUpdated && bp.isRuntime()) {