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

Commit b340f275 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Revert "Grant only the requested permissions"

This reverts commit 294b6406.

Change-Id: Ifb48eb1fbdb0499743f4ca88adbd5ed77cfa4cf8
parent 294b6406
Loading
Loading
Loading
Loading
+9 −41
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.graphics.drawable.Icon;
import android.hardware.camera2.utils.ArrayUtils;
import android.os.Build;
import android.os.Bundle;
import android.text.SpannableString;
@@ -46,7 +47,6 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.Permission;
import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl;
import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;

import java.util.ArrayList;
@@ -147,36 +147,24 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
                switch (permissionPolicy) {
                    case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
                        if (!group.areRuntimePermissionsGranted()) {
                            group.grantRuntimePermissions(false, computeAffectedPermissions(
                                    callingPackageInfo, requestedPermission));
                            group.grantRuntimePermissions(false);
                        }
                        group.setPolicyFixed();
                    } break;

                    case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: {
                        if (group.areRuntimePermissionsGranted()) {
                            group.revokeRuntimePermissions(false, computeAffectedPermissions(
                                    callingPackageInfo, requestedPermission));
                            group.revokeRuntimePermissions(false);
                        }
                        group.setPolicyFixed();
                    } break;

                    default: {
                        if (!group.areRuntimePermissionsGranted()) {
                            GroupState state = mRequestGrantPermissionGroups.get(group.getName());
                            if (state == null) {
                                state = new GroupState(group);
                                mRequestGrantPermissionGroups.put(group.getName(), state);
                            }
                            String affectedPermission = computeAffectedPermission(
                                    callingPackageInfo, requestedPermission);
                            if (affectedPermission != null) {
                                state.affectedPermissions = ArrayUtils.appendString(
                                        state.affectedPermissions, affectedPermission);
                            }
                            mRequestGrantPermissionGroups.put(group.getName(),
                                    new GroupState(group));
                        } else {
                            group.grantRuntimePermissions(false, computeAffectedPermissions(
                                    callingPackageInfo, requestedPermission));
                            group.grantRuntimePermissions(false);
                            updateGrantResults(group);
                        }
                    } break;
@@ -283,12 +271,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        GroupState groupState = mRequestGrantPermissionGroups.get(name);
        if (groupState.mGroup != null) {
            if (granted) {
                groupState.mGroup.grantRuntimePermissions(doNotAskAgain,
                        groupState.affectedPermissions);
                groupState.mGroup.grantRuntimePermissions(doNotAskAgain);
                groupState.mState = GroupState.STATE_ALLOWED;
            } else {
                groupState.mGroup.revokeRuntimePermissions(doNotAskAgain,
                        groupState.affectedPermissions);
                groupState.mGroup.revokeRuntimePermissions(doNotAskAgain);
                groupState.mState = GroupState.STATE_DENIED;
            }
            updateGrantResults(groupState.mGroup);
@@ -300,7 +286,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity

    private void updateGrantResults(AppPermissionGroup group) {
        for (Permission permission : group.getPermissions()) {
            final int index = ArrayUtils.indexOf(
            final int index = ArrayUtils.getArrayIndex(
                    mRequestedPermissions, permission.getName());
            if (index >= 0) {
                mGrantResults[index] = permission.isGranted() ? PackageManager.PERMISSION_GRANTED
@@ -416,23 +402,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);
    }

    private static String[] computeAffectedPermissions(PackageInfo callingPackageInfo,
            String permission) {
        String affectedPermission = computeAffectedPermission(callingPackageInfo, permission);
        if (affectedPermission != null) {
            return new String[] {permission};
        }
        return null;
    }

    private static String computeAffectedPermission(PackageInfo callingPackageInfo,
            String permission) {
        if (callingPackageInfo.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) {
            return permission;
        }
        return null;
    }

    private static final class GroupState {
        static final int STATE_UNKNOWN = 0;
        static final int STATE_ALLOWED = 1;
@@ -440,7 +409,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity

        final AppPermissionGroup mGroup;
        int mState = STATE_UNKNOWN;
        String[] affectedPermissions;

        GroupState(AppPermissionGroup group) {
            mGroup = group;
+0 −18
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.packageinstaller.permission.utils;

import android.text.TextUtils;

import java.util.Objects;

public final class ArrayUtils {
@@ -44,20 +42,4 @@ public final class ArrayUtils {
        }
        return -1;
    }

    public static String[] appendString(String[] cur, String val) {
        if (cur == null) {
            return new String[] { val };
        }
        final int N = cur.length;
        for (int i = 0; i < N; i++) {
            if (TextUtils.equals(cur[i], val)) {
                return cur;
            }
        }
        String[] ret = new String[N + 1];
        System.arraycopy(cur, 0, ret, 0, N);
        ret[N] = val;
        return ret;
    }
}