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

Commit 8f135982 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Create permission manager AIDL

Today, the package manager largely routes any permission related
method to the PermissionManagerService. But, PermissionManagerService
is a service in name only. Instead, we will make the
PermissionManagerService a real service and direct API calls directly
to it.

We will likely need to maintain all of the public permission APIs
that already exist on PackageManager. However, the public -> private
implementation will go directly to PermissionManagerService.

Bug: 135279435
Test: Manual. Device boots
Change-Id: Ia4992ba6d1f4b9050db98c7d7647d51a5d45fcbe
parent b9914e06
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -279,6 +279,7 @@ java_defaults {
        "core/java/android/os/storage/IStorageShutdownObserver.aidl",
        "core/java/android/os/storage/IObbActionListener.aidl",
        "core/java/android/permission/IPermissionController.aidl",
        "core/java/android/permission/IPermissionManager.aidl",
        ":keystore_aidl",
        "core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl",
        "core/java/android/service/appprediction/IPredictionService.aidl",
+15 −5
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
import android.permission.IPermissionManager;
import android.provider.BlockedNumberContract;
import android.provider.CalendarContract;
import android.provider.CallLog;
@@ -287,6 +288,7 @@ public final class ActivityThread extends ClientTransactionHandler {

    @UnsupportedAppUsage
    static volatile IPackageManager sPackageManager;
    private static volatile IPermissionManager sPermissionManager;

    @UnsupportedAppUsage
    final ApplicationThread mAppThread = new ApplicationThread();
@@ -2136,16 +2138,23 @@ public final class ActivityThread extends ClientTransactionHandler {
    @UnsupportedAppUsage
    public static IPackageManager getPackageManager() {
        if (sPackageManager != null) {
            //Slog.v("PackageManager", "returning cur default = " + sPackageManager);
            return sPackageManager;
        }
        IBinder b = ServiceManager.getService("package");
        //Slog.v("PackageManager", "default service binder = " + b);
        final IBinder b = ServiceManager.getService("package");
        sPackageManager = IPackageManager.Stub.asInterface(b);
        //Slog.v("PackageManager", "default service = " + sPackageManager);
        return sPackageManager;
    }

    /** Returns the permission manager */
    public static IPermissionManager getPermissionManager() {
        if (sPermissionManager != null) {
            return sPermissionManager;
        }
        final IBinder b = ServiceManager.getService("permissionmgr");
        sPermissionManager = IPermissionManager.Stub.asInterface(b);
        return sPermissionManager;
    }

    private Configuration mMainThreadConfig = new Configuration();

    Configuration applyConfigCompatMainThread(int displayDensity, Configuration config,
@@ -6317,7 +6326,8 @@ public final class ActivityThread extends ClientTransactionHandler {
        final InstrumentationInfo ii;
        if (data.instrumentationName != null) {
            try {
                ii = new ApplicationPackageManager(null, getPackageManager())
                ii = new ApplicationPackageManager(
                        null, getPackageManager(), getPermissionManager())
                        .getInstrumentationInfo(data.instrumentationName, 0);
            } catch (PackageManager.NameNotFoundException e) {
                throw new RuntimeException(
+9 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.app;

import android.annotation.UnsupportedAppUsage;
import android.content.pm.IPackageManager;
import android.permission.IPermissionManager;

/**
 * Special private access for certain globals related to a process.
@@ -51,6 +52,14 @@ public class AppGlobals {
        return ActivityThread.getPackageManager();
    }

    /**
     * Return the raw interface to the permission manager.
     * @return The permission manager.
     */
    public static IPermissionManager getPermissionManager() {
        return ActivityThread.getPermissionManager();
    }

    /**
     * Gets the value of an integer core setting.
     *
+5 −2
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.permission.IPermissionManager;
import android.provider.Settings;
import android.system.ErrnoException;
import android.system.Os;
@@ -1655,10 +1656,11 @@ public class ApplicationPackageManager extends PackageManager {
    }

    @UnsupportedAppUsage
    protected ApplicationPackageManager(ContextImpl context,
                              IPackageManager pm) {
    protected ApplicationPackageManager(ContextImpl context, IPackageManager pm,
            IPermissionManager permissionManager) {
        mContext = context;
        mPM = pm;
        mPermissionManager = permissionManager;
    }

    /**
@@ -2930,6 +2932,7 @@ public class ApplicationPackageManager extends PackageManager {
    private final ContextImpl mContext;
    @UnsupportedAppUsage
    private final IPackageManager mPM;
    private final IPermissionManager mPermissionManager;

    /** Assume locked until we hear otherwise */
    private volatile boolean mUserUnlocked = false;
+5 −3
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
import android.permission.IPermissionManager;
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
@@ -297,10 +298,11 @@ class ContextImpl extends Context {
            return mPackageManager;
        }

        IPackageManager pm = ActivityThread.getPackageManager();
        if (pm != null) {
        final IPackageManager pm = ActivityThread.getPackageManager();
        final IPermissionManager permissionManager = ActivityThread.getPermissionManager();
        if (pm != null && permissionManager != null) {
            // Doesn't matter if we make more than one instance.
            return (mPackageManager = new ApplicationPackageManager(this, pm));
            return (mPackageManager = new ApplicationPackageManager(this, pm, permissionManager));
        }

        return null;
Loading