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

Commit 1259f44f authored by Philip P. Moltmann's avatar Philip P. Moltmann
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
parent cdf84d3a
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();
            }
        }
    }
}