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

Commit b94b8cd4 authored by Shashwat Razdan's avatar Shashwat Razdan Committed by Automerger Merge Worker
Browse files

Merge "Revert "Persist permission state for updated apps synchronously."" into...

Merge "Revert "Persist permission state for updated apps synchronously."" into tm-dev am: 90549066 am: 7b437f90 am: 27c7ea98

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



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


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


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


                UidPermissionState origState = uidState;
                UidPermissionState origState = uidState;


                boolean installPermissionsChangedForUser = false;
                boolean changedInstallPermission = false;


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


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


                if (installPermissionsChangedForUser) {
                    installPermissionsChanged = true;
                    if (replace) {
                        updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId);
                    }
                }
                updatedUserIds = revokePermissionsNoLongerImplicitLocked(uidState,
                updatedUserIds = revokePermissionsNoLongerImplicitLocked(uidState,
                        pkg.getPackageName(), uidImplicitPermissions, uidTargetSdkVersion, userId,
                        pkg.getPackageName(), uidImplicitPermissions, uidTargetSdkVersion, userId,
                        updatedUserIds);
                        updatedUserIds);
@@ -2977,12 +2970,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
        // Persist the runtime permissions state for users with changes. If permissions
        // 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
        // were revoked because no app in the shared user declares them we have to
        // write synchronously to avoid losing runtime permissions state.
        // 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) {
        if (callback != null) {
            callback.onPermissionUpdated(updatedUserIds,
            callback.onPermissionUpdated(updatedUserIds, runtimePermissionsRevoked);
                    (replace && installPermissionsChanged) || runtimePermissionsRevoked);
        }
        }


        for (int userId : updatedUserIds) {
        for (int userId : updatedUserIds) {