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

Commit ac3c9690 authored by Daniel Colascione's avatar Daniel Colascione Committed by Android (Google) Code Review
Browse files

Merge "Add context UID to package-name-based permission query" into rvc-dev

parents 442399b1 614105b3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -675,7 +675,7 @@ public class ApplicationPackageManager extends PackageManager {
    @Override
    public int checkPermission(String permName, String pkgName) {
        return PermissionManager
                .checkPackageNamePermission(permName, pkgName);
                .checkPackageNamePermission(permName, pkgName, getUserId());
    }

    @Override
+16 −10
Original line number Diff line number Diff line
@@ -561,21 +561,24 @@ public final class PermissionManager {
    private static final class PackageNamePermissionQuery {
        final String permName;
        final String pkgName;
        final int uid;

        PackageNamePermissionQuery(@Nullable String permName, @Nullable String pkgName) {
        PackageNamePermissionQuery(@Nullable String permName, @Nullable String pkgName, int uid) {
            this.permName = permName;
            this.pkgName = pkgName;
            this.uid = uid;
        }

        @Override
        public String toString() {
            return String.format("PackageNamePermissionQuery(pkgName=\"%s\", permName=\"%s\")",
                    pkgName, permName);
            return String.format(
                    "PackageNamePermissionQuery(pkgName=\"%s\", permName=\"%s, uid=%s\")",
                    pkgName, permName, uid);
        }

        @Override
        public int hashCode() {
            return Objects.hashCode(permName) * 13 + Objects.hashCode(pkgName);
            return Objects.hash(permName, pkgName, uid);
        }

        @Override
@@ -590,15 +593,17 @@ public final class PermissionManager {
                return false;
            }
            return Objects.equals(permName, other.permName)
                    && Objects.equals(pkgName, other.pkgName);
                    && Objects.equals(pkgName, other.pkgName)
                    && uid == other.uid;
        }
    }

    /* @hide */
    private static int checkPackageNamePermissionUncached(String permName, String pkgName) {
    private static int checkPackageNamePermissionUncached(
            String permName, String pkgName, int uid) {
        try {
            return ActivityThread.getPermissionManager().checkPermission(
                    permName, pkgName, UserHandle.myUserId());
                    permName, pkgName, uid);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -611,7 +616,8 @@ public final class PermissionManager {
                    16, CACHE_KEY_PACKAGE_INFO) {
                @Override
                protected Integer recompute(PackageNamePermissionQuery query) {
                    return checkPackageNamePermissionUncached(query.permName, query.pkgName);
                    return checkPackageNamePermissionUncached(
                            query.permName, query.pkgName, query.uid);
                }
            };

@@ -620,9 +626,9 @@ public final class PermissionManager {
     *
     * @hide
     */
    public static int checkPackageNamePermission(String permName, String pkgName) {
    public static int checkPackageNamePermission(String permName, String pkgName, int uid) {
        return sPackageNamePermissionCache.query(
                new PackageNamePermissionQuery(permName, pkgName));
                new PackageNamePermissionQuery(permName, pkgName, uid));
    }

    /**