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

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

Merge "Fourth batch of permission in-process API refactoring."

parents 81585a24 369efdab
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.InstantAppInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.content.pm.PermissionInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -36,6 +37,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.permission.PermissionManager;
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.AtomicFile;
@@ -974,8 +976,7 @@ class InstantAppRegistry implements Watchable, Snappable {
        final long identity = Binder.clearCallingIdentity();
        try {
            for (String grantedPermission : appInfo.getGrantedPermissions()) {
                final boolean propagatePermission =
                        mPermissionManager.canPropagatePermissionToInstantApp(grantedPermission);
                final boolean propagatePermission = canPropagatePermission(grantedPermission);
                if (propagatePermission && pkg.getRequestedPermissions().contains(
                        grantedPermission)) {
                    mService.grantRuntimePermission(pkg.getPackageName(), grantedPermission,
@@ -987,6 +988,19 @@ class InstantAppRegistry implements Watchable, Snappable {
        }
    }

    private boolean canPropagatePermission(@NonNull String permissionName) {
        final PermissionManager permissionManager = mService.mContext.getSystemService(
                PermissionManager.class);
        final PermissionInfo permissionInfo = permissionManager.getPermissionInfo(permissionName,
                0);
        return permissionInfo != null
                && (permissionInfo.getProtection() == PermissionInfo.PROTECTION_DANGEROUS
                        || (permissionInfo.getProtectionFlags()
                                & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0)
                && (permissionInfo.getProtectionFlags() & PermissionInfo.PROTECTION_FLAG_INSTANT)
                        != 0;
    }

    private @NonNull
    InstantAppInfo peekOrParseUninstalledInstantAppInfo(
            @NonNull String packageName, @UserIdInt int userId) {
+6 −2
Original line number Diff line number Diff line
@@ -20913,8 +20913,12 @@ public class PackageManagerService extends IPackageManager.Stub
                mSettings.applyDefaultPreferredAppsLPw(userId);
                clearIntentFilterVerificationsLPw(userId);
                primeDomainVerificationsLPw(userId);
                final int numPackages = mPackages.size();
                for (int i = 0; i < numPackages; i++) {
                    final AndroidPackage pkg = mPackages.valueAt(i);
                    mPermissionManager.resetRuntimePermissions(pkg, userId);
                }
            }
            mPermissionManager.resetAllRuntimePermissions(userId);
            updateDefaultHomeNotLocked(userId);
            // TODO: We have to reset the default SMS and Phone. This requires
            // significant refactoring to keep all default apps in the package
@@ -22412,7 +22416,7 @@ public class PackageManagerService extends IPackageManager.Stub
        mUserManager.reconcileUsers(StorageManager.UUID_PRIVATE_INTERNAL);
        reconcileApps(StorageManager.UUID_PRIVATE_INTERNAL);
        mPermissionManager.systemReady();
        mPermissionManager.onSystemReady();
        int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
        for (int userId : UserManagerService.getInstance().getUserIds()) {
+1 −18
Original line number Diff line number Diff line
@@ -4868,13 +4868,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
        }
    }

    private boolean canPropagatePermissionToInstantApp(@NonNull String permissionName) {
        synchronized (mLock) {
            final Permission bp = mRegistry.getPermission(permissionName);
            return bp != null && (bp.isRuntime() || bp.isDevelopment()) && bp.isInstant();
        }
    }

    @NonNull
    private List<LegacyPermission> getLegacyPermissions() {
        synchronized (mLock) {
@@ -4954,7 +4947,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {

    private class PermissionManagerServiceInternalImpl implements PermissionManagerServiceInternal {
        @Override
        public void systemReady() {
        public void onSystemReady() {
            PermissionManagerService.this.systemReady();
        }

@@ -5012,11 +5005,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            Preconditions.checkArgumentNonNegative(userId, "userId");
            resetRuntimePermissionsInternal(pkg, userId);
        }
        @Override
        public void resetAllRuntimePermissions(@UserIdInt int userId) {
            Preconditions.checkArgumentNonNegative(userId, "userId");
            mPackageManagerInt.forEachPackage(pkg -> resetRuntimePermissionsInternal(pkg, userId));
        }

        @Override
        public Permission getPermissionTEMP(String permName) {
@@ -5157,11 +5145,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            onPackageUninstalledInternal(packageName, appId, pkg, sharedUserPkgs, userId);
        }

        @Override
        public boolean canPropagatePermissionToInstantApp(@NonNull String permissionName) {
            return PermissionManagerService.this.canPropagatePermissionToInstantApp(permissionName);
        }

        @NonNull
        @Override
        public List<LegacyPermission> getLegacyPermissions() {
+6 −18
Original line number Diff line number Diff line
@@ -54,8 +54,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
    void removeOnRuntimePermissionStateChangedListener(
            @NonNull OnRuntimePermissionStateChangedListener listener);

    void systemReady();

    /**
     * Get whether permission review is required for a package.
     *
@@ -93,14 +91,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
    void resetRuntimePermissions(@NonNull AndroidPackage pkg,
            @UserIdInt int userId);

    /**
     * Reset the runtime permission state changes for all packages.
     *
     * @param userId the user ID
     */
    //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
    void resetAllRuntimePermissions(@UserIdInt int userId);

    /**
     * Read legacy permission state from package settings.
     *
@@ -200,6 +190,12 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
     */
    void writeLegacyPermissionsTEMP(@NonNull LegacyPermissionSettings legacyPermissionSettings);

    /**
     * Callback when the system is ready.
     */
    //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
    void onSystemReady();

    /**
     * Callback when a user has been created.
     *
@@ -264,14 +260,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
    void onPackageUninstalled(@NonNull String packageName, int appId, @Nullable AndroidPackage pkg,
            @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);

    /**
     * Check whether a permission can be propagated to instant app.
     *
     * @param permissionName the name of the permission
     * @return whether the permission can be propagated
     */
    boolean canPropagatePermissionToInstantApp(@NonNull String permissionName);

    /**
     * Listener for package permission state (permissions or flags) changes.
     */