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

Commit 7e3dd3af authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Move whitelist permissions to permission manager

Also while doing this, it made sense to move the permission change
listener to the permission manager [it resulted in fewer hacks to
get the two sides to talk to one another].

Bug: 135279435
Test: atest PermissionUpdateListenerTest
Test: android.content.pm.cts.PackageManagerTest
Test: android.permission2.cts.RestrictedPermissionsTest
Change-Id: Ie08701dfe999cd435335103f4b4daeaa0b31ef10
parent ca1ea17a
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",
+15 −12
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;
@@ -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();
+1 −13
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;
@@ -103,16 +102,7 @@ interface IPackageManager {

    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);
@@ -647,8 +637,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(
+6 −2
Original line number Diff line number Diff line
@@ -974,6 +974,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);
}
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package android.content.pm;
package android.permission;

/**
 * Listener for changes in the permissions for installed packages.
Loading