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

Commit 95f50d6e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make runtime permission check return granted for pre-M apps"

parents 9bbde45f 54c51cee
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -843,7 +843,23 @@ public class PermissionManagerService extends IPermissionManager.Stub {

    private boolean checkSinglePermissionInternal(int uid,
            @NonNull PermissionsState permissionsState, @NonNull String permissionName) {
        if (!permissionsState.hasPermission(permissionName, UserHandle.getUserId(uid))) {
        boolean hasPermission = permissionsState.hasPermission(permissionName,
                UserHandle.getUserId(uid));

        if (!hasPermission && mSettings.isPermissionRuntime(permissionName)) {
            final String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid);
            final int packageNamesSize = packageNames != null ? packageNames.length : 0;
            for (int i = 0; i < packageNamesSize; i++) {
                final PackageParser.Package pkg = mPackageManagerInt.getPackage(packageNames[i]);
                if (pkg != null && pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M
                        && pkg.requestedPermissions.contains(permissionName)) {
                    hasPermission = true;
                    break;
                }
            }
        }

        if (!hasPermission) {
            return false;
        }

+12 −3
Original line number Diff line number Diff line
@@ -18,13 +18,11 @@ package com.android.server.pm.permission;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.PackageParser;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;

import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.XmlUtils;
import com.android.server.pm.DumpState;
@@ -37,7 +35,6 @@ import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Set;

/**
 * Permissions and other related data. This class is not meant for
@@ -249,6 +246,18 @@ public class PermissionSettings {
        }
    }

    /**
     * Check whether a permission is runtime.
     *
     * @see BasePermission#isRuntime()
     */
    public boolean isPermissionRuntime(@NonNull String permName) {
        synchronized (mLock) {
            final BasePermission bp = mPermissions.get(permName);
            return (bp != null && bp.isRuntime());
        }
    }

    public boolean isPermissionInstant(String permName) {
        synchronized (mLock) {
            final BasePermission bp = mPermissions.get(permName);