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

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

Do not revoke pre-M perms on upgrade

... just remove the REVOKE_ON_UPGRADE flag.

Pre-M apps do not know how to ask for permissions. Hence only the user
can revoke permissions as this is likely to break apps.

Test: atest CtsPermissionTestCases:SplitPermissionsTest
Change-Id: I4f7634985cb655f6b8f98ecf4261e1afcb4519de
parent c6e3a8e0
Loading
Loading
Loading
Loading
+14 −17
Original line number Diff line number Diff line
@@ -1201,17 +1201,11 @@ public class PermissionManagerService {
                        if ((flags & FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) != 0) {
                            BasePermission bp = mSettings.getPermissionLocked(permission);

                            ps.updatePermissionFlags(bp, userId,
                                    FLAG_PERMISSION_REVOKE_WHEN_REQUESTED
                                            | FLAG_PERMISSION_USER_FIXED | FLAG_PERMISSION_USER_SET,
                                    0);
                            updatedUserIds = ArrayUtils.appendInt(updatedUserIds,
                                    userId);
                            int flagsToRemove = FLAG_PERMISSION_REVOKE_WHEN_REQUESTED;

                            if ((flags & (FLAG_PERMISSION_GRANTED_BY_DEFAULT
                                    | FLAG_PERMISSION_POLICY_FIXED | FLAG_PERMISSION_SYSTEM_FIXED))
                                    == 0) {
                                if (supportsRuntimePermissions) {
                                    == 0 && supportsRuntimePermissions) {
                                int revokeResult = ps.revokeRuntimePermission(bp, userId);
                                if (revokeResult != PERMISSION_OPERATION_FAILURE) {
                                    if (DEBUG_PERMISSIONS) {
@@ -1220,9 +1214,9 @@ public class PermissionManagerService {
                                                + " as it is now requested");
                                    }
                                }
                                } else {
                                    setAppOpMode(permission, pkg, userId, MODE_IGNORED);
                                }

                                flagsToRemove |=
                                        FLAG_PERMISSION_USER_FIXED | FLAG_PERMISSION_USER_SET;

                                List<String> fgPerms = mBackgroundPermissions.get(permission);
                                if (fgPerms != null) {
@@ -1241,6 +1235,9 @@ public class PermissionManagerService {
                                    }
                                }
                            }

                            ps.updatePermissionFlags(bp, userId, flagsToRemove, 0);
                            updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId);
                        }
                    }
                }