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

Commit ab1e5900 authored by Ian Pedowitz's avatar Ian Pedowitz Committed by Android (Google) Code Review
Browse files

Merge "Revert "Grant only requested permissions not the whole group."" into mnc-dev

parents d7b72885 95560c73
Loading
Loading
Loading
Loading
+3 −22
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.os.Build;
import android.os.UserHandle;
import android.util.ArrayMap;

import com.android.internal.util.ArrayUtils;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.utils.LocationUtils;

@@ -265,19 +264,13 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        return mPermissions.get(permission) != null;
    }

    public boolean areRuntimePermissionsGranted(String[] filterPermissions) {
    public boolean areRuntimePermissionsGranted() {
        if (LocationUtils.isLocked(mName, mPackageInfo.packageName)) {
            return LocationUtils.isLocationEnabled(mContext);
        }
        final int permissionCount = mPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
            Permission permission = mPermissions.valueAt(i);

            if (filterPermissions != null && !ArrayUtils.contains(
                    filterPermissions, permission.getName())) {
                continue;
            }

            if (mAppSupportsRuntimePermissions) {
                if (permission.isGranted()) {
                    return true;
@@ -290,7 +283,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        return false;
    }

    public boolean grantRuntimePermissions(boolean fixedByTheUser, String[] filterPermissions) {
    public boolean grantRuntimePermissions(boolean fixedByTheUser) {
        final boolean isSharedUser = mPackageInfo.sharedUserId != null;
        final int uid = mPackageInfo.applicationInfo.uid;

@@ -298,12 +291,6 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        // permissions, otherwise we toggle the app op corresponding
        // to the permission if the permission is granted to the app.
        for (Permission permission : mPermissions.values()) {

            if (filterPermissions != null && !ArrayUtils.contains(
                    filterPermissions, permission.getName())) {
                continue;
            }

            if (mAppSupportsRuntimePermissions) {
                // Do not touch permissions fixed by the system.
                if (permission.isSystemFixed()) {
@@ -384,7 +371,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        return true;
    }

    public boolean revokeRuntimePermissions(boolean fixedByTheUser, String[] filterPermissions) {
    public boolean revokeRuntimePermissions(boolean fixedByTheUser) {
        final boolean isSharedUser = mPackageInfo.sharedUserId != null;
        final int uid = mPackageInfo.applicationInfo.uid;

@@ -392,12 +379,6 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        // permissions, otherwise we toggle the app op corresponding
        // to the permission if the permission is granted to the app.
        for (Permission permission : mPermissions.values()) {

            if (filterPermissions != null && !ArrayUtils.contains(
                    filterPermissions, permission.getName())) {
                continue;
            }

            if (mAppSupportsRuntimePermissions) {
                // Do not touch permissions fixed by the system.
                if (permission.isSystemFixed()) {
+3 −3
Original line number Diff line number Diff line
@@ -313,15 +313,15 @@ public class PermissionApps {
        }

        public boolean areRuntimePermissionsGranted() {
            return mAppPermissionGroup.areRuntimePermissionsGranted(null);
            return mAppPermissionGroup.areRuntimePermissionsGranted();
        }

        public void grantRuntimePermissions() {
            mAppPermissionGroup.grantRuntimePermissions(false, null);
            mAppPermissionGroup.grantRuntimePermissions(false);
        }

        public void revokeRuntimePermissions() {
            mAppPermissionGroup.revokeRuntimePermissions(false, null);
            mAppPermissionGroup.revokeRuntimePermissions(false);
        }

        public boolean isPolicyFixed() {
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver {
            for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
                if (Utils.shouldShowPermission(group)) {
                    totalCount++;
                    if (group.areRuntimePermissionsGranted(null)) {
                    if (group.areRuntimePermissionsGranted()) {
                        grantedCount++;

                        if (Utils.OS_PKG.equals(group.getDeclaringPackage())) {
+5 −5
Original line number Diff line number Diff line
@@ -224,7 +224,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
            }
            preference.setPersistent(false);
            preference.setEnabled(!group.isPolicyFixed());
            preference.setChecked(group.areRuntimePermissionsGranted(null));
            preference.setChecked(group.areRuntimePermissionsGranted());

            if (isPlatform) {
                screen.addPreference(preference);
@@ -281,7 +281,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
            return false;
        }
        if (newValue == Boolean.TRUE) {
            group.grantRuntimePermissions(false, null);
            group.grantRuntimePermissions(false);
        } else {
            final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
            if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
@@ -294,7 +294,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                ((SwitchPreference) preference).setChecked(false);
                                group.revokeRuntimePermissions(false, null);
                                group.revokeRuntimePermissions(false);
                                if (!grantedByDefault) {
                                    mHasConfirmedRevoke = true;
                                }
@@ -303,7 +303,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
                        .show();
                return false;
            } else {
                group.revokeRuntimePermissions(false, null);
                group.revokeRuntimePermissions(false);
            }
        }

@@ -351,7 +351,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
                SwitchPreference switchPref = (SwitchPreference) preference;
                AppPermissionGroup group = mAppPermissions.getPermissionGroup(switchPref.getKey());
                if (group != null) {
                    switchPref.setChecked(group.areRuntimePermissionsGranted(null));
                    switchPref.setChecked(group.areRuntimePermissionsGranted());
                }
            }
        }
+7 −16
Original line number Diff line number Diff line
@@ -118,30 +118,21 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
            if (!group.isUserFixed() && !group.isPolicyFixed()) {
                switch (permissionPolicy) {
                    case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
                        if (!group.areRuntimePermissionsGranted(mRequestedPermissions)) {
                            group.grantRuntimePermissions(false, mRequestedPermissions);
                        if (!group.areRuntimePermissionsGranted()) {
                            group.grantRuntimePermissions(false);
                            group.setPolicyFixed();
                        }
                    } break;

                    case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: {
                        if (group.areRuntimePermissionsGranted(mRequestedPermissions)) {
                            group.revokeRuntimePermissions(false, mRequestedPermissions);
                        if (!group.areRuntimePermissionsGranted()) {
                            group.revokeRuntimePermissions(false);
                            group.setPolicyFixed();
                        }
                    } break;

                    default: {
                        if (group.areRuntimePermissionsGranted(null)
                                && !group.areRuntimePermissionsGranted(mRequestedPermissions)) {
                            // If the group is granted but requested permissions
                            // in it not we auto grant the these permissions.
                            group.grantRuntimePermissions(group.isUserFixed(),
                                    mRequestedPermissions);
                        } else {
                            mRequestGrantPermissionGroups.put(group.getName(),
                                    new GroupState(group));
                        }
                        mRequestGrantPermissionGroups.put(group.getName(), new GroupState(group));
                    } break;
                }
            } else {
@@ -235,10 +226,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        GroupState groupState = mRequestGrantPermissionGroups.get(name);
        if (groupState.mGroup != null) {
            if (granted) {
                groupState.mGroup.grantRuntimePermissions(doNotAskAgain, mRequestedPermissions);
                groupState.mGroup.grantRuntimePermissions(doNotAskAgain);
                groupState.mState = GroupState.STATE_ALLOWED;
            } else {
                groupState.mGroup.revokeRuntimePermissions(doNotAskAgain, mRequestedPermissions);
                groupState.mGroup.revokeRuntimePermissions(doNotAskAgain);
                groupState.mState = GroupState.STATE_DENIED;
            }
            updateGrantResults(groupState.mGroup);
Loading