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

Commit eb82d659 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Do not grant already granted permission

This is esp. necessary as we want to avoid to grant already grated
system-fixed permissions.

Fixes: 129354118
Test: Upgraded from P->Q
Change-Id: Ifc8271e77a94545f995160402fd83867c404bb54
parent 817faef2
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -1089,6 +1089,8 @@ public final class DefaultPermissionGrantPolicy {
    private void grantRuntimePermissions(PackageInfo pkg,
            Set<String> permissionsWithoutSplits, boolean systemFixed, boolean ignoreSystemPackage,
            int userId) {
        UserHandle user = UserHandle.of(userId);

        if (pkg == null) {
            return;
        }
@@ -1109,7 +1111,14 @@ public final class DefaultPermissionGrantPolicy {
        }
        requestedPermissions = ArrayUtils.filterNotNull(requestedPermissions, String[]::new);

        PackageManager pm = mContext.getPackageManager();
        PackageManager pm;
        try {
            pm = mContext.createPackageContextAsUser(mContext.getPackageName(), 0,
                    user).getPackageManager();
        } catch (NameNotFoundException doesNotHappen) {
            throw new IllegalStateException(doesNotHappen);
        }

        final ArraySet<String> permissions = new ArraySet<>(permissionsWithoutSplits);
        ApplicationInfo applicationInfo = pkg.applicationInfo;

@@ -1187,7 +1196,6 @@ public final class DefaultPermissionGrantPolicy {
            }

            if (permissions.contains(permission)) {
                UserHandle user = UserHandle.of(userId);
                final int flags = mContext.getPackageManager().getPermissionFlags(
                        permission, pkg.packageName, user);

@@ -1210,8 +1218,11 @@ public final class DefaultPermissionGrantPolicy {
                            UserHandle.getAppId(pkg.applicationInfo.uid));
                    String op = AppOpsManager.permissionToOp(permission);

                    if (pm.checkPermission(permission, pkg.packageName)
                            != PackageManager.PERMISSION_GRANTED) {
                        mContext.getPackageManager()
                                .grantRuntimePermission(pkg.packageName, permission, user);
                    }

                    mContext.getPackageManager().updatePermissionFlags(permission, pkg.packageName,
                            newFlags, newFlags, user);