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

Commit a0cc380c authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by android-build-team Robot
Browse files

Revert "Skip grant dialog when permission are granted"

This reverts commit cdf84d3a.

Reason for revert: Bugs 72387749  and 72384027

Bug: 72384027
Bug: 72387749
Test: Just a revert
Change-Id: I2077cc3205c3a71a641ed50219c3c5d8cd449958
(cherry picked from commit 1259f44f)
parent 277a83e1
Loading
Loading
Loading
Loading
+10 −111
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import android.os.Build;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.util.ArraySet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -73,13 +72,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity

    boolean mResultSet;

    private PackageManager.OnPermissionsChangedListener mPermissionChangeListener;

    private int getPermissionPolicy() {
        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
        return devicePolicyManager.getPermissionPolicy(null);
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
@@ -120,13 +112,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
            return;
        }

        try {
            mPermissionChangeListener = new PermissionChangeListener();
        } catch (NameNotFoundException e) {
            setResultAndFinish();
            return;
        }

        PackageInfo callingPackageInfo = getCallingPackageInfo();

        if (callingPackageInfo == null || callingPackageInfo.requestedPermissions == null
@@ -144,7 +129,11 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
            return;
        }

        updateAlreadyGrantedPermissions(getCallingPackageInfo(), getPermissionPolicy());
        DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
        final int permissionPolicy = devicePolicyManager.getPermissionPolicy(null);

        // If calling package is null we default to deny all.
        updateDefaultResults(callingPackageInfo, permissionPolicy);

        mAppPermissions = new AppPermissions(this, callingPackageInfo, null, false,
                new Runnable() {
@@ -172,7 +161,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
            // We allow the user to choose only non-fixed permissions. A permission
            // is fixed either by device policy or the user denying with prejudice.
            if (!group.isUserFixed() && !group.isPolicyFixed()) {
                switch (getPermissionPolicy()) {
                switch (permissionPolicy) {
                    case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
                        if (!group.areRuntimePermissionsGranted()) {
                            group.grantRuntimePermissions(false, computeAffectedPermissions(
@@ -238,78 +227,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        }
    }


    /**
     * Update the {@link #mRequestedPermissions} if the system reports them as granted.
     *
     * <p>This also updates the {@link #mAppPermissions} state and switches to the next group grant
     * request if the current group becomes granted.
     */
    private void updateIfPermissionsWereGranted() {
        updateAlreadyGrantedPermissions(getCallingPackageInfo(), getPermissionPolicy());

        ArraySet<String> grantedPermissionNames = new ArraySet<>(mRequestedPermissions.length);
        for (int i = 0; i < mRequestedPermissions.length; i++) {
            if (mGrantResults[i] == PERMISSION_GRANTED) {
                grantedPermissionNames.add(mRequestedPermissions[i]);
            }
        }

        boolean mightShowNextGroup = true;
        int numGroups = mAppPermissions.getPermissionGroups().size();
        for (int groupNum = 0; groupNum < numGroups; groupNum++) {
            AppPermissionGroup group = mAppPermissions.getPermissionGroups().get(groupNum);
            GroupState groupState = mRequestGrantPermissionGroups.get(group.getName());

            if (groupState == null || groupState.mState != GroupState.STATE_UNKNOWN) {
                // Group has already been approved / denied via the UI by the user
                continue;
            }

            boolean allAffectedPermissionsOfThisGroupAreGranted = true;

            for (int permNum = 0; permNum < groupState.affectedPermissions.length;
                    permNum++) {
                if (!grantedPermissionNames.contains(
                        groupState.affectedPermissions[permNum])) {
                    allAffectedPermissionsOfThisGroupAreGranted = false;
                    break;
                }
            }

            if (allAffectedPermissionsOfThisGroupAreGranted) {
                groupState.mState = GroupState.STATE_ALLOWED;

                if (mightShowNextGroup) {
                    // The UI currently displays the first group with
                    // mState == STATE_UNKNOWN. So we are switching to next group until we
                    // could not allow a group that was still unknown
                    if (!showNextPermissionGroupGrantRequest()) {
                        setResultAndFinish();
                    }
                }
            } else {
                mightShowNextGroup = false;
            }
        }
    }

    @Override
    protected void onStart() {
        super.onStart();

        getPackageManager().addOnPermissionsChangeListener(mPermissionChangeListener);

        updateIfPermissionsWereGranted();
    }

    @Override
    protected void onStop() {
        super.onStop();

        getPackageManager().removeOnPermissionsChangeListener(mPermissionChangeListener);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
@@ -518,16 +435,13 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        }
    }

    private void updateAlreadyGrantedPermissions(PackageInfo callingPackageInfo,
            int permissionPolicy) {
    private void updateDefaultResults(PackageInfo callingPackageInfo, int permissionPolicy) {
        final int requestedPermCount = mRequestedPermissions.length;
        for (int i = 0; i < requestedPermCount; i++) {
            String permission = mRequestedPermissions[i];

            if (computePermissionGrantState(callingPackageInfo, permission, permissionPolicy)
                    == PERMISSION_GRANTED) {
                mGrantResults[i] = PERMISSION_GRANTED;
            }
            mGrantResults[i] = callingPackageInfo != null
                    ? computePermissionGrantState(callingPackageInfo, permission, permissionPolicy)
                    : PERMISSION_DENIED;
        }
    }

@@ -599,19 +513,4 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
            mGroup = group;
        }
    }

    private class PermissionChangeListener implements PackageManager.OnPermissionsChangedListener {
        final int mCallingPackageUid;

        PermissionChangeListener() throws NameNotFoundException {
            mCallingPackageUid = getPackageManager().getPackageUid(getCallingPackage(), 0);
        }

        @Override
        public void onPermissionsChanged(int uid) {
            if (uid == mCallingPackageUid) {
                updateIfPermissionsWereGranted();
            }
        }
    }
}