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

Commit 2703e5e8 authored by Svet Ganov's avatar Svet Ganov Committed by Android Git Automerger
Browse files

am 8dcea3bf: Show multi-permission UI in the requested order.

* commit '8dcea3bf':
  Show multi-permission UI in the requested order.
parents d161c459 8dcea3bf
Loading
Loading
Loading
Loading
+30 −28
Original line number Diff line number Diff line
@@ -19,18 +19,16 @@ package com.android.packageinstaller.permission.model;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.ArrayMap;

import com.android.internal.util.ArrayUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;

public final class AppPermissions {
    private final ArrayList<AppPermissionGroup> mGroups = new ArrayList<>();

    private final ArrayMap<String, AppPermissionGroup> mNameToGroupMap = new ArrayMap<>();
    private final LinkedHashMap<String, AppPermissionGroup> mNameToGroupMap = new LinkedHashMap<>();

    private final Context mContext;

@@ -95,36 +93,40 @@ public final class AppPermissions {
            return;
        }

        for (int i = 0; i < mPackageInfo.requestedPermissions.length; i++) {
            String requestedPerm = mPackageInfo.requestedPermissions[i];
        if (mFilterPermissions != null) {
            for (String filterPermission : mFilterPermissions) {
                for (String requestedPerm : mPackageInfo.requestedPermissions) {
                    if (!filterPermission.equals(requestedPerm)) {
                        continue;
                    }

                    if (hasGroupForPermission(requestedPerm)) {
                continue;
                        break;
                    }

                    AppPermissionGroup group = AppPermissionGroup.create(mContext,
                            mPackageInfo, requestedPerm);
                    if (group == null) {
                continue;
                        break;
                    }

                    mGroups.add(group);
        }

        if (!ArrayUtils.isEmpty(mFilterPermissions)) {
            final int groupCount = mGroups.size();
            for (int i = groupCount - 1; i >= 0; i--) {
                AppPermissionGroup group = mGroups.get(i);
                boolean groupHasPermission = false;
                for (String filterPerm : mFilterPermissions) {
                    if (group.hasPermission(filterPerm)) {
                        groupHasPermission = true;
                    break;
                }
            }
                if (!groupHasPermission) {
                    mGroups.remove(i);
        } else {
            for (String requestedPerm : mPackageInfo.requestedPermissions) {
                if (hasGroupForPermission(requestedPerm)) {
                    continue;
                }

                AppPermissionGroup group = AppPermissionGroup.create(mContext,
                        mPackageInfo, requestedPerm);
                if (group == null) {
                    continue;
                }

                mGroups.add(group);
            }
        }

+10 −8
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.hardware.camera2.utils.ArrayUtils;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.util.ArrayMap;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -47,6 +46,7 @@ import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import com.android.packageinstaller.permission.utils.Utils;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

public class GrantPermissionsActivity extends OverlayTouchActivity
@@ -57,7 +57,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
    private String[] mRequestedPermissions;
    private int[] mGrantResults;

    private ArrayMap<String, GroupState> mRequestGrantPermissionGroups = new ArrayMap<>();
    private LinkedHashMap<String, GroupState> mRequestGrantPermissionGroups = new LinkedHashMap<>();

    private GrantPermissionsViewHandler mViewHandler;
    private AppPermissions mAppPermissions;
@@ -178,8 +178,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
    private boolean showNextPermissionGroupGrantRequest() {
        final int groupCount = mRequestGrantPermissionGroups.size();

        for (int i = 0; i < groupCount; i++) {
            GroupState groupState = mRequestGrantPermissionGroups.valueAt(i);
        int currentIndex = 0;
        for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
            if (groupState.mState == GroupState.STATE_UNKNOWN) {
                CharSequence appLabel = mAppPermissions.getAppLabel();
                SpannableString message = new SpannableString(getString(
@@ -206,11 +206,13 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
                }
                int icon = groupState.mGroup.getIconResId();

                mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, i,
                mViewHandler.updateUi(groupState.mGroup.getName(), groupCount, currentIndex,
                        Icon.createWithResource(resources, icon), message,
                        groupState.mGroup.isUserSet());
                return true;
            }

            currentIndex++;
        }

        return false;
@@ -350,8 +352,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity

        final int groupCount = mRequestGrantPermissionGroups.size();
        List<AppPermissionGroup> groups = new ArrayList<>(groupCount);
        for (int i = 0; i < groupCount; i++) {
            groups.add(mRequestGrantPermissionGroups.valueAt(i).mGroup);
        for (GroupState groupState : mRequestGrantPermissionGroups.values()) {
            groups.add(groupState.mGroup);
        }

        SafetyNetLogger.logPermissionsRequested(mAppPermissions.getPackageInfo(), groups);