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

Commit 64b468f6 authored by Hai Zhang's avatar Hai Zhang Committed by Automerger Merge Worker
Browse files

Merge "Persist permission state for updated apps synchronously." into tm-dev...

Merge "Persist permission state for updated apps synchronously." into tm-dev am: 5309004a am: b6a2a002

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



Change-Id: I77b52220aaeda6d9f573f5abed97584c017d88c0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents e9445980 b6a2a002
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -2516,6 +2516,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
        final int[] userIds = filterUserId == UserHandle.USER_ALL ? getAllUserIds()
                : new int[] { filterUserId };

        boolean installPermissionsChanged = false;
        boolean runtimePermissionsRevoked = false;
        int[] updatedUserIds = EMPTY_INT_ARRAY;

@@ -2634,7 +2635,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt

                UidPermissionState origState = uidState;

                boolean changedInstallPermission = false;
                boolean installPermissionsChangedForUser = false;

                if (replace) {
                    userState.setInstallPermissionsFixed(ps.getPackageName(), false);
@@ -2800,7 +2801,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                                                    && origState.isPermissionGranted(permName))))) {
                        // Grant an install permission.
                        if (uidState.grantPermission(bp)) {
                            changedInstallPermission = true;
                            installPermissionsChangedForUser = true;
                        }
                    } else if (bp.isRuntime()) {
                        boolean hardRestricted = bp.isHardRestricted();
@@ -2940,12 +2941,12 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                            }
                        }
                        if (uidState.removePermissionState(bp.getName())) {
                            changedInstallPermission = true;
                            installPermissionsChangedForUser = true;
                        }
                    }
                }

                if ((changedInstallPermission || replace)
                if ((installPermissionsChangedForUser || replace)
                        && !userState.areInstallPermissionsFixed(ps.getPackageName())
                        && !ps.isSystem() || ps.getTransientState().isUpdatedSystemApp()) {
                    // This is the first that we have heard about this package, so the
@@ -2954,6 +2955,12 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                    userState.setInstallPermissionsFixed(ps.getPackageName(), true);
                }

                if (installPermissionsChangedForUser) {
                    installPermissionsChanged = true;
                    if (replace) {
                        updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId);
                    }
                }
                updatedUserIds = revokePermissionsNoLongerImplicitLocked(uidState,
                        pkg.getPackageName(), uidImplicitPermissions, uidTargetSdkVersion, userId,
                        updatedUserIds);
@@ -2970,8 +2977,12 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
        // Persist the runtime permissions state for users with changes. If permissions
        // were revoked because no app in the shared user declares them we have to
        // write synchronously to avoid losing runtime permissions state.
        // Also write synchronously if we changed any install permission for an updated app, because
        // the install permission state is likely already fixed before update, and if we lose the
        // changes here the app won't be reconsidered for newly-added install permissions.
        if (callback != null) {
            callback.onPermissionUpdated(updatedUserIds, runtimePermissionsRevoked);
            callback.onPermissionUpdated(updatedUserIds,
                    (replace && installPermissionsChanged) || runtimePermissionsRevoked);
        }

        for (int userId : updatedUserIds) {