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

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

Merge changes from topic "grantrevoke"

* changes:
  Move grant/revoke permission APIs
  Move whitelist permissions to permission manager
  Move check permission methods
parents 89cdd4f6 c971a45e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -136,7 +136,6 @@ java_defaults {
        "core/java/android/content/pm/IDexModuleRegisterCallback.aidl",
        "core/java/android/content/pm/ILauncherApps.aidl",
        "core/java/android/content/pm/IOnAppsChangedListener.aidl",
        "core/java/android/content/pm/IOnPermissionsChangeListener.aidl",
        "core/java/android/content/pm/IOtaDexopt.aidl",
        "core/java/android/content/pm/IPackageDataObserver.aidl",
        "core/java/android/content/pm/IPackageDeleteObserver.aidl",
@@ -278,6 +277,7 @@ java_defaults {
        "core/java/android/os/storage/IStorageEventListener.aidl",
        "core/java/android/os/storage/IStorageShutdownObserver.aidl",
        "core/java/android/os/storage/IObbActionListener.aidl",
        "core/java/android/permission/IOnPermissionsChangeListener.aidl",
        "core/java/android/permission/IPermissionController.aidl",
        "core/java/android/permission/IPermissionManager.aidl",
        ":keystore_aidl",
+21 −18
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.ChangedPackages;
import android.content.pm.ComponentInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageManager;
@@ -82,6 +81,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.permission.IOnPermissionsChangeListener;
import android.permission.IPermissionManager;
import android.provider.Settings;
import android.system.ErrnoException;
@@ -626,7 +626,7 @@ public class ApplicationPackageManager extends PackageManager {
    @Override
    public int checkPermission(String permName, String pkgName) {
        try {
            return mPM.checkPermission(permName, pkgName, getUserId());
            return mPermissionManager.checkPermission(permName, pkgName, getUserId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -707,15 +707,15 @@ public class ApplicationPackageManager extends PackageManager {
    }

    @Override
    public void revokeRuntimePermission(String packageName, String permissionName,
            UserHandle user) {
    public void revokeRuntimePermission(String packageName, String permName, UserHandle user) {
        if (DEBUG_TRACE_GRANTS
                && shouldTraceGrant(packageName, permissionName, user.getIdentifier())) {
                && shouldTraceGrant(packageName, permName, user.getIdentifier())) {
            Log.i(TAG, "App " + mContext.getPackageName() + " is revoking "
                    + permissionName + " for user " + user.getIdentifier(), new RuntimeException());
                    + permName + " for user " + user.getIdentifier(), new RuntimeException());
        }
        try {
            mPM.revokeRuntimePermission(packageName, permissionName, user.getIdentifier());
            mPermissionManager
                    .revokeRuntimePermission(packageName, permName, user.getIdentifier());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -755,10 +755,11 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public @NonNull Set<String> getWhitelistedRestrictedPermissions(
            @NonNull String packageName, @PermissionWhitelistFlags int whitelistFlags) {
            @NonNull String packageName, @PermissionWhitelistFlags int flags) {
        try {
            final List<String> whitelist = mPM.getWhitelistedRestrictedPermissions(
                    packageName, whitelistFlags, getUserId());
            final int userId = getUserId();
            final List<String> whitelist = mPermissionManager
                    .getWhitelistedRestrictedPermissions(packageName, flags, userId);
            if (whitelist != null) {
                return new ArraySet<>(whitelist);
            }
@@ -770,10 +771,11 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public boolean addWhitelistedRestrictedPermission(@NonNull String packageName,
            @NonNull String permission, @PermissionWhitelistFlags int whitelistFlags) {
            @NonNull String permName, @PermissionWhitelistFlags int flags) {
        try {
            return mPM.addWhitelistedRestrictedPermission(packageName, permission,
                    whitelistFlags, getUserId());
            final int userId = getUserId();
            return mPermissionManager
                    .addWhitelistedRestrictedPermission(packageName, permName, flags, userId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -781,10 +783,11 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName,
            @NonNull String permission, @PermissionWhitelistFlags int whitelistFlags) {
            @NonNull String permName, @PermissionWhitelistFlags int flags) {
        try {
            return mPM.removeWhitelistedRestrictedPermission(packageName, permission,
                    whitelistFlags, getUserId());
            final int userId = getUserId();
            return mPermissionManager
                    .removeWhitelistedRestrictedPermission(packageName, permName, flags, userId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -1624,7 +1627,7 @@ public class ApplicationPackageManager extends PackageManager {
            OnPermissionsChangeListenerDelegate delegate =
                    new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper());
            try {
                mPM.addOnPermissionsChangeListener(delegate);
                mPermissionManager.addOnPermissionsChangeListener(delegate);
                mPermissionListeners.put(listener, delegate);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
@@ -1638,7 +1641,7 @@ public class ApplicationPackageManager extends PackageManager {
            IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener);
            if (delegate != null) {
                try {
                    mPM.removeOnPermissionsChangeListener(delegate);
                    mPermissionManager.removeOnPermissionsChangeListener(delegate);
                    mPermissionListeners.remove(listener);
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
+5 −5
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.IAccessibilityServiceClient;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.hardware.input.InputManager;
@@ -31,6 +30,7 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.permission.IPermissionManager;
import android.util.Log;
import android.view.IWindowManager;
import android.view.InputEvent;
@@ -69,8 +69,8 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub {
    private final IAccessibilityManager mAccessibilityManager = IAccessibilityManager.Stub
            .asInterface(ServiceManager.getService(Service.ACCESSIBILITY_SERVICE));

    private final IPackageManager mPackageManager = IPackageManager.Stub
            .asInterface(ServiceManager.getService("package"));
    private final IPermissionManager mPermissionManager = IPermissionManager.Stub
            .asInterface(ServiceManager.getService("permissionmgr"));

    private final IActivityManager mActivityManager = IActivityManager.Stub
            .asInterface(ServiceManager.getService("activity"));
@@ -273,7 +273,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub {
        }
        final long identity = Binder.clearCallingIdentity();
        try {
            mPackageManager.grantRuntimePermission(packageName, permission, userId);
            mPermissionManager.grantRuntimePermission(packageName, permission, userId);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
@@ -289,7 +289,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub {
        }
        final long identity = Binder.clearCallingIdentity();
        try {
            mPackageManager.revokeRuntimePermission(packageName, permission, userId);
            mPermissionManager.revokeRuntimePermission(packageName, permission, userId);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
+18 −26
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.InstrumentationInfo;
import android.content.pm.KeySet;
@@ -95,29 +94,7 @@ interface IPackageManager {

    @UnsupportedAppUsage
    ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId);

    @UnsupportedAppUsage
    int checkPermission(String permName, String pkgName, int userId);

    int checkUidPermission(String permName, int uid);

    @UnsupportedAppUsage
    void grantRuntimePermission(String packageName, String permissionName, int userId);

    void revokeRuntimePermission(String packageName, String permissionName, int userId);

    void resetRuntimePermissions();

    List<String> getWhitelistedRestrictedPermissions(String packageName, int flags,
            int userId);

    boolean addWhitelistedRestrictedPermission(String packageName, String permission,
            int whitelistFlags, int userId);

    boolean removeWhitelistedRestrictedPermission(String packageName, String permission,
            int whitelistFlags, int userId);

    boolean shouldShowRequestPermissionRationale(String permissionName,
    boolean shouldShowRequestPermissionRationale(String permName,
            String packageName, int userId);

    boolean isProtectedBroadcast(String actionName);
@@ -652,8 +629,6 @@ interface IPackageManager {
    boolean isPackageSignedByKeySet(String packageName, in KeySet ks);
    boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks);

    void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
    void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
    void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
    void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
    void grantDefaultPermissionsToEnabledTelephonyDataServices(
@@ -750,6 +725,10 @@ interface IPackageManager {
    // The following binder interfaces have been moved to IPermissionManager
    //
    //------------------------------------------------------------------------

    //------------------------------------------------------------------------
    // We need to keep these in IPackageManager for app compatibility
    //------------------------------------------------------------------------
    @UnsupportedAppUsage
    String[] getAppOpPermissionPackages(String permissionName);

@@ -764,4 +743,17 @@ interface IPackageManager {

    @UnsupportedAppUsage
    void removePermission(String name);

    @UnsupportedAppUsage
    int checkPermission(String permName, String pkgName, int userId);

    @UnsupportedAppUsage
    void grantRuntimePermission(String packageName, String permissionName, int userId);

    //------------------------------------------------------------------------
    // We need to keep these in IPackageManager for convenience in splitting
    // out the permission manager. This should be cleaned up, but, will require
    // a large change that modifies many repos.
    //------------------------------------------------------------------------
    int checkUidPermission(String permName, int uid);
}
+12 −65
Original line number Diff line number Diff line
@@ -32,13 +32,10 @@ import android.os.PersistableBundle;
import android.util.ArraySet;
import android.util.SparseArray;

import com.android.internal.util.function.TriFunction;

import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;

/**
@@ -86,32 +83,6 @@ public abstract class PackageManagerInternal {
        void onPackageRemoved(@NonNull String packageName, int uid);
    }

    /** Interface to override permission checks via composition */
    public interface CheckPermissionDelegate {
        /**
         * Allows overriding check permission behavior.
         *
         * @param permName The permission to check.
         * @param pkgName The package for which to check.
         * @param userId The user for which to check.
         * @param superImpl The super implementation.
         * @return The check permission result.
         */
        int checkPermission(String permName, String pkgName, int userId,
                TriFunction<String, String, Integer, Integer> superImpl);

        /**
         * Allows overriding check UID permission behavior.
         *
         * @param permName The permission to check.
         * @param uid The UID for which to check.
         * @param superImpl The super implementation.
         * @return The check permission result.
         */
        int checkUidPermission(String permName, int uid,
                BiFunction<String, Integer, Integer> superImpl);
    }

    /**
     * Provider for package names.
     */
@@ -463,26 +434,6 @@ public abstract class PackageManagerInternal {
     */
    public abstract boolean wasPackageEverLaunched(String packageName, int userId);

    /**
     * Grants a runtime permission
     * @param packageName The package name.
     * @param name The name of the permission.
     * @param userId The userId for which to grant the permission.
     * @param overridePolicy If true, grant this permission even if it is fixed by policy.
     */
    public abstract void grantRuntimePermission(String packageName, String name, int userId,
            boolean overridePolicy);

    /**
     * Revokes a runtime permission
     * @param packageName The package name.
     * @param name The name of the permission.
     * @param userId The userId for which to revoke the permission.
     * @param overridePolicy If true, revoke this permission even if it is fixed by policy.
     */
    public abstract void revokeRuntimePermission(String packageName, String name, int userId,
            boolean overridePolicy);

    /**
     * Retrieve the official name associated with a uid. This name is
     * guaranteed to never change, though it is possible for the underlying
@@ -667,6 +618,12 @@ public abstract class PackageManagerInternal {
     */
    public abstract @Nullable PackageParser.Package getPackage(@NonNull String packageName);

    /**
     * Returns a package for the given UID. If the UID is part of a shared user ID, one
     * of the packages will be chosen to be returned.
     */
    public abstract @Nullable PackageParser.Package getPackage(int uid);

    /**
     * Returns a list without a change observer.
     *
@@ -770,20 +727,6 @@ public abstract class PackageManagerInternal {
    public abstract boolean hasSignatureCapability(int serverUid, int clientUid,
            @PackageParser.SigningDetails.CertCapabilities int capability);

    /**
     * Get the delegate to influence permission checking.
     *
     * @return The delegate instance or null to clear.
     */
    public abstract @Nullable CheckPermissionDelegate getCheckPermissionDelegate();

    /**
     * Set a delegate to influence permission checking.
     *
     * @param delegate A delegate instance or null to clear.
     */
    public abstract void setCheckPermissionDelegate(@Nullable CheckPermissionDelegate delegate);

    /**
     * Get appIds of all available apps which specified android:sharedUserId in the manifest.
     *
@@ -1011,6 +954,10 @@ public abstract class PackageManagerInternal {
     */
    public abstract int getTargetSdk(int uid);

    /** HACK. Remove when listeners move to the permission manager */
    public abstract void onPermissionsChangedTEMP(int uid);
    /**
     * Returns {@code true} if the caller is the installer of record for the given package.
     * Otherwise, {@code false}.
     */
    public abstract boolean isCallerInstallerOfRecord(
            @NonNull PackageParser.Package pkg, int callingUid);
}
Loading