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

Commit f8c03954 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Revert "Grant only the requested permissions"" into nyc-dev

parents 9154c12c b340f275
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;
    }
}