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

Commit a3029367 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Make permissions settings UI respect user sensitive.

Test: Looked at UIs and saw flag honored
Change-Id: Id349c7498ff4e6036edd00418b2aa6754c85a2fb
parent 161ce4bf
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -428,6 +428,22 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        return false;
    }

    /**
     * Are any of the permissions in this group user sensitive.
     *
     * @return {@code true} if any of the permissions in the group is user sensitive.
     */
    public boolean isUserSensitive() {
        final int permissionCount = mPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
            Permission permission = mPermissions.valueAt(i);
            if (permission.isUserSensitive()) {
                return true;
            }
        }
        return false;
    }

    public void unsetReviewRequired() {
        final int permissionCount = mPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
+14 −6
Original line number Diff line number Diff line
@@ -174,13 +174,21 @@ public final class Permission {
        return (mFlags & PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0;
    }

    public boolean isUserSensitiveWhenGranted() {
    /**
     * Is the permission user sensitive, i.e. should it always be shown to the user.
     *
     * <p>Non-sensitive permission are usually hidden behind a setting in an overflow menu or
     * some other kind of flag.
     *
     * @return {@code true} if the permission is user sensitive.
     */
    public boolean isUserSensitive() {
        if (isGrantedIncludingAppOp()) {
            return (mFlags & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) != 0;
    }

    public boolean isUserSensitiveWhenDenied() {
        } else {
            return (mFlags & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED) != 0;
        }
    }

    /**
     * If this permission is split into a foreground and background permission, this is the name
+4 −5
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.os.AsyncTask;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -114,13 +113,13 @@ public class PermissionApps {
        createMap(loadPermissionApps());
    }

    public int getGrantedCount(ArraySet<String> launcherPkgs) {
    public int getGrantedCount() {
        int count = 0;
        for (PermissionApp app : mPermApps) {
            if (!Utils.shouldShowPermission(mContext, app.getPermissionGroup())) {
                continue;
            }
            if (Utils.isSystem(app, launcherPkgs)) {
            if (!Utils.isGroupOrBgGroupUserSensitive(app.mAppPermissionGroup)) {
                // We default to not showing system apps, so hide them from count.
                continue;
            }
@@ -131,13 +130,13 @@ public class PermissionApps {
        return count;
    }

    public int getTotalCount(ArraySet<String> launcherPkgs) {
    public int getTotalCount() {
        int count = 0;
        for (PermissionApp app : mPermApps) {
            if (!Utils.shouldShowPermission(mContext, app.getPermissionGroup())) {
                continue;
            }
            if (Utils.isSystem(app, launcherPkgs)) {
            if (!Utils.isGroupOrBgGroupUserSensitive(app.mAppPermissionGroup)) {
                // We default to not showing system apps, so hide them from count.
                continue;
            }
+4 −5
Original line number Diff line number Diff line
@@ -165,7 +165,6 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
            @Nullable Supplier<Boolean> isCanceled, boolean getAppUiInfo,
            boolean getNonPlatformPermissions, @Nullable String groupName,
            @Nullable String packageName) {
        ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context);
        PermissionApps.PmCache pmCache = new PermissionApps.PmCache(
                context.getPackageManager());
        PermissionApps.AppDataCache appDataCache = new PermissionApps.AppDataCache(
@@ -222,8 +221,8 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr

            // Create the group and add to the list.
            PermissionGroup group = new PermissionGroup(groupInfo.name,
                    groupInfo.packageName, label, icon, permApps.getTotalCount(launcherPkgs),
                    permApps.getGrantedCount(launcherPkgs), permApps);
                    groupInfo.packageName, label, icon, permApps.getTotalCount(),
                    permApps.getGrantedCount(), permApps);
            groups.add(group);
        }

@@ -282,8 +281,8 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
                // Create the group and add to the list.
                PermissionGroup group = new PermissionGroup(permissionInfo.name,
                        permissionInfo.packageName, label, icon,
                        permApps.getTotalCount(launcherPkgs),
                        permApps.getGrantedCount(launcherPkgs), permApps);
                        permApps.getTotalCount(),
                        permApps.getGrantedCount(), permApps);
                groups.add(group);
            }
        }
+8 −14
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@ import static android.permission.PermissionControllerManager.REASON_INSTALLER_PO
import static android.permission.PermissionControllerManager.REASON_MALWARE;
import static android.util.Xml.newSerializer;

import static com.android.packageinstaller.permission.utils.Utils.getLauncherPackages;
import static com.android.packageinstaller.permission.utils.Utils.isSystem;
import static com.android.packageinstaller.permission.utils.Utils.shouldShowPermission;

import static java.nio.charset.StandardCharsets.UTF_8;
@@ -41,7 +39,6 @@ import android.permission.PermissionManager;
import android.permission.RuntimePermissionPresentationInfo;
import android.permission.RuntimePermissionUsageInfo;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.Xml;

@@ -396,7 +393,6 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
        boolean countOnlyGranted = (flags & COUNT_ONLY_WHEN_GRANTED) != 0;

        List<PackageInfo> pkgs = getPackageManager().getInstalledPackages(GET_PERMISSIONS);
        ArraySet<String> launcherPkgs = getLauncherPackages(this);

        int numApps = 0;

@@ -404,10 +400,6 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
        for (int pkgNum = 0; pkgNum < numPkgs; pkgNum++) {
            PackageInfo pkg = pkgs.get(pkgNum);

            if (!countSystem && isSystem(pkg.applicationInfo, launcherPkgs)) {
                continue;
            }

            int numPerms = permissionNames.size();
            for (int permNum = 0; permNum < numPerms; permNum++) {
                String perm = permissionNames.get(permNum);
@@ -424,11 +416,15 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
                } else {
                    AppPermissionGroup bgGroup = group.getBackgroundPermissions();
                    if (bgGroup != null && bgGroup.hasPermission(perm)) {
                        subGroup = group;
                        subGroup = bgGroup;
                    }
                }

                if (subGroup != null) {
                    if (!countSystem && !subGroup.isUserSensitive()) {
                        continue;
                    }

                    if (!countOnlyGranted || subGroup.areRuntimePermissionsGranted()) {
                        // The permission might not be granted, but some permissions of the group
                        // are granted. In this case the permission is granted silently when the app
@@ -446,8 +442,6 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS

    @Override public @NonNull List<RuntimePermissionUsageInfo> onGetPermissionUsages(
            boolean countSystem, long numMillis) {
        ArraySet<String> launcherPkgs = getLauncherPackages(this);

        ArrayMap<CharSequence, Integer> groupUsers = new ArrayMap<>();

        long curTime = System.currentTimeMillis();
@@ -465,9 +459,6 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
            if (appPermissionUsage.getAccessCount() <= 0) {
                continue;
            }
            if (!countSystem && isSystem(appPermissionUsage.getApp(), launcherPkgs)) {
                continue;
            }

            List<GroupUsage> appGroups = appPermissionUsage.getGroupUsages();
            int numGroups = appGroups.size();
@@ -480,6 +471,9 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
                if (!shouldShowPermission(this, groupUsage.getGroup())) {
                    continue;
                }
                if (!countSystem && !Utils.isGroupOrBgGroupUserSensitive(groupUsage.getGroup())) {
                    continue;
                }

                CharSequence groupLabel = groupUsage.getGroup().getName();
                Integer numUsers = groupUsers.get(groupLabel);
Loading