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

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

Support revoke-when-requested with pre-M apps

In this case the permission should not be revoked, but the app-op should
be.

Fixes: 124609307
Test: atest SplitPermissionTests
Change-Id: I4e70b8f9ef1e01320adb55096437e82a058883db
parent bee38836
Loading
Loading
Loading
Loading
+12 −12
Original line number Original line Diff line number Diff line
@@ -1181,11 +1181,9 @@ public class PermissionManagerService {
            @NonNull int[] updatedUserIds) {
            @NonNull int[] updatedUserIds) {
        AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
        AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);


        if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) {
            return updatedUserIds;
        }

        String pkgName = pkg.packageName;
        String pkgName = pkg.packageName;
        boolean supportsRuntimePermissions = pkg.applicationInfo.targetSdkVersion
                >= Build.VERSION_CODES.M;


        int[] users = UserManagerService.getInstance().getUserIds();
        int[] users = UserManagerService.getInstance().getUserIds();
        int numUsers = users.length;
        int numUsers = users.length;
@@ -1210,16 +1208,18 @@ public class PermissionManagerService {
                            if ((flags & (FLAG_PERMISSION_GRANTED_BY_DEFAULT
                            if ((flags & (FLAG_PERMISSION_GRANTED_BY_DEFAULT
                                    | FLAG_PERMISSION_POLICY_FIXED | FLAG_PERMISSION_SYSTEM_FIXED))
                                    | FLAG_PERMISSION_POLICY_FIXED | FLAG_PERMISSION_SYSTEM_FIXED))
                                    == 0) {
                                    == 0) {
                                if (supportsRuntimePermissions) {
                                    int revokeResult = ps.revokeRuntimePermission(bp, userId);
                                    int revokeResult = ps.revokeRuntimePermission(bp, userId);
                                if (revokeResult
                                    if (revokeResult != PERMISSION_OPERATION_FAILURE) {
                                        != PERMISSION_OPERATION_FAILURE) {

                                        if (DEBUG_PERMISSIONS) {
                                        if (DEBUG_PERMISSIONS) {
                                        Slog.i(TAG, "Revoking runtime permission " + permission
                                            Slog.i(TAG, "Revoking runtime permission "
                                                + " for " + pkgName
                                                    + permission + " for " + pkgName
                                                    + " as it is now requested");
                                                    + " as it is now requested");
                                        }
                                        }
                                    }
                                    }
                                } else {
                                    setAppOpMode(permission, pkg, userId, MODE_IGNORED);
                                }


                                List<String> fgPerms = mBackgroundPermissions.get(permission);
                                List<String> fgPerms = mBackgroundPermissions.get(permission);
                                if (fgPerms != null) {
                                if (fgPerms != null) {