Loading services/core/java/com/android/server/pm/permission/PermissionManagerService.java +5 −16 Original line number Diff line number Diff line Loading @@ -2626,7 +2626,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int[] userIds = filterUserId == UserHandle.USER_ALL ? getAllUserIds() : new int[] { filterUserId }; boolean installPermissionsChanged = false; boolean runtimePermissionsRevoked = false; int[] updatedUserIds = EMPTY_INT_ARRAY; Loading Loading @@ -2740,7 +2739,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { UidPermissionState origState = uidState; boolean installPermissionsChangedForUser = false; boolean changedInstallPermission = false; if (replace) { userState.setInstallPermissionsFixed(ps.name, false); Loading Loading @@ -2905,7 +2904,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { && origState.isPermissionGranted(permName))))) { // Grant an install permission. if (uidState.grantPermission(bp)) { installPermissionsChangedForUser = true; changedInstallPermission = true; } } else if (bp.isRuntime()) { boolean hardRestricted = bp.isHardRestricted(); Loading Loading @@ -3035,12 +3034,12 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } if (uidState.removePermissionState(bp.getName())) { installPermissionsChangedForUser = true; changedInstallPermission = true; } } } if ((installPermissionsChangedForUser || replace) if ((changedInstallPermission || replace) && !userState.areInstallPermissionsFixed(ps.name) && !ps.isSystem() || ps.getPkgState().isUpdatedSystemApp()) { // This is the first that we have heard about this package, so the Loading @@ -3049,12 +3048,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { userState.setInstallPermissionsFixed(ps.name, true); } if (installPermissionsChangedForUser) { installPermissionsChanged = true; if (replace) { updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId); } } updatedUserIds = revokePermissionsNoLongerImplicitLocked(uidState, pkg.getPackageName(), uidImplicitPermissions, uidTargetSdkVersion, userId, updatedUserIds); Loading @@ -3071,12 +3064,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { // 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, (replace && installPermissionsChanged) || runtimePermissionsRevoked); callback.onPermissionUpdated(updatedUserIds, runtimePermissionsRevoked); } for (int userId : updatedUserIds) { Loading Loading
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +5 −16 Original line number Diff line number Diff line Loading @@ -2626,7 +2626,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int[] userIds = filterUserId == UserHandle.USER_ALL ? getAllUserIds() : new int[] { filterUserId }; boolean installPermissionsChanged = false; boolean runtimePermissionsRevoked = false; int[] updatedUserIds = EMPTY_INT_ARRAY; Loading Loading @@ -2740,7 +2739,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { UidPermissionState origState = uidState; boolean installPermissionsChangedForUser = false; boolean changedInstallPermission = false; if (replace) { userState.setInstallPermissionsFixed(ps.name, false); Loading Loading @@ -2905,7 +2904,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { && origState.isPermissionGranted(permName))))) { // Grant an install permission. if (uidState.grantPermission(bp)) { installPermissionsChangedForUser = true; changedInstallPermission = true; } } else if (bp.isRuntime()) { boolean hardRestricted = bp.isHardRestricted(); Loading Loading @@ -3035,12 +3034,12 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } if (uidState.removePermissionState(bp.getName())) { installPermissionsChangedForUser = true; changedInstallPermission = true; } } } if ((installPermissionsChangedForUser || replace) if ((changedInstallPermission || replace) && !userState.areInstallPermissionsFixed(ps.name) && !ps.isSystem() || ps.getPkgState().isUpdatedSystemApp()) { // This is the first that we have heard about this package, so the Loading @@ -3049,12 +3048,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { userState.setInstallPermissionsFixed(ps.name, true); } if (installPermissionsChangedForUser) { installPermissionsChanged = true; if (replace) { updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId); } } updatedUserIds = revokePermissionsNoLongerImplicitLocked(uidState, pkg.getPackageName(), uidImplicitPermissions, uidTargetSdkVersion, userId, updatedUserIds); Loading @@ -3071,12 +3064,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { // 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, (replace && installPermissionsChanged) || runtimePermissionsRevoked); callback.onPermissionUpdated(updatedUserIds, runtimePermissionsRevoked); } for (int userId : updatedUserIds) { Loading