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

Commit 45d6ef22 authored by Hai Zhang's avatar Hai Zhang Committed by Android (Google) Code Review
Browse files

Merge "Move more methods accessing PermissionsState into PermissionManagerService."

parents 5d650722 09aafada
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.internal.util.XmlUtils;
import com.android.server.pm.parsing.PackageInfoUtils;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.permission.PermissionManagerServiceInternal;

import libcore.io.IoUtils;
import libcore.util.HexEncoding;
@@ -112,6 +113,7 @@ class InstantAppRegistry {
    private static final String ATTR_GRANTED = "granted";

    private final PackageManagerService mService;
    private final PermissionManagerServiceInternal mPermissionManager;
    private final CookiePersistence mCookiePersistence;

    /** State for uninstalled instant apps */
@@ -131,8 +133,10 @@ class InstantAppRegistry {
    @GuardedBy("mService.mLock")
    private SparseArray<SparseBooleanArray> mInstalledInstantAppUids;

    public InstantAppRegistry(PackageManagerService service) {
    public InstantAppRegistry(PackageManagerService service,
            PermissionManagerServiceInternal permissionManager) {
        mService = service;
        mPermissionManager = permissionManager;
        mCookiePersistence = new CookiePersistence(BackgroundThread.getHandler().getLooper());
    }

@@ -861,7 +865,8 @@ class InstantAppRegistry {
        String[] requestedPermissions = new String[pkg.getRequestedPermissions().size()];
        pkg.getRequestedPermissions().toArray(requestedPermissions);

        Set<String> permissions = ps.getPermissionsState().getPermissions(userId);
        Set<String> permissions = mPermissionManager.getGrantedPermissions(
                pkg.getPackageName(), userId);
        String[] grantedPermissions = new String[permissions.size()];
        permissions.toArray(grantedPermissions);

+7 −20
Original line number Diff line number Diff line
@@ -2970,7 +2970,7 @@ public class PackageManagerService extends IPackageManager.Stub
            mHandler = new PackageHandler(mHandlerThread.getLooper());
            mProcessLoggingHandler = new ProcessLoggingHandler();
            Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
            mInstantAppRegistry = new InstantAppRegistry(this);
            mInstantAppRegistry = new InstantAppRegistry(this, mPermissionManager);
            ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig
                    = systemConfig.getSharedLibraries();
@@ -4385,14 +4385,13 @@ public class PackageManagerService extends IPackageManager.Stub
        final PackageUserState state = ps.readUserState(userId);
        AndroidPackage p = ps.pkg;
        if (p != null) {
            final PermissionsState permissionsState = ps.getPermissionsState();
            // Compute GIDs only if requested
            final int[] gids = (flags & PackageManager.GET_GIDS) == 0
                    ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
                    ? EMPTY_INT_ARRAY : mPermissionManager.getPackageGids(ps.name, userId);
            // Compute granted permissions only if package has requested permissions
            final Set<String> permissions = ArrayUtils.isEmpty(p.getRequestedPermissions())
                    ? Collections.emptySet() : permissionsState.getPermissions(userId);
                    ? Collections.emptySet()
                    : mPermissionManager.getGrantedPermissions(ps.name, userId);
            PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags,
                    ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId, ps);
@@ -4863,13 +4862,13 @@ public class PackageManagerService extends IPackageManager.Stub
                }
                // TODO: Shouldn't this be checking for package installed state for userId and
                // return null?
                return ps.getPermissionsState().computeGids(userId);
                return mPermissionManager.getPackageGids(packageName, userId);
            }
            if ((flags & MATCH_KNOWN_PACKAGES) != 0) {
                final PackageSetting ps = mSettings.mPackages.get(packageName);
                if (ps != null && ps.isMatch(flags)
                        && !shouldFilterApplicationLocked(ps, callingUid, userId)) {
                    return ps.getPermissionsState().computeGids(userId);
                    return mPermissionManager.getPackageGids(packageName, userId);
                }
            }
        }
@@ -24948,9 +24947,7 @@ public class PackageManagerService extends IPackageManager.Stub
        @Override
        public int[] getPermissionGids(String permissionName, int userId) {
            synchronized (mLock) {
                return getPermissionGidsLocked(permissionName, userId);
            }
            return mPermissionManager.getPermissionGids(permissionName, userId);
        }
        @Override
@@ -25271,16 +25268,6 @@ public class PackageManagerService extends IPackageManager.Stub
        return null;
    }
    @GuardedBy("mLock")
    public int[] getPermissionGidsLocked(String permissionName, int userId) {
        BasePermission perm
                = mPermissionManager.getPermissionSettings().getPermission(permissionName);
        if (perm != null) {
            return perm.computeGids(userId);
        }
        return null;
    }
    @Override
    public int getRuntimePermissionsVersion(@UserIdInt int userId) {
        Preconditions.checkArgumentNonnegative(userId);
+46 −0
Original line number Diff line number Diff line
@@ -2454,6 +2454,36 @@ public class PermissionManagerService extends IPermissionManager.Stub {
        }
    }

    @NonNull
    private Set<String> getGrantedPermissions(@NonNull String packageName,
            @UserIdInt int userId) {
        final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName);
        if (ps == null) {
            return null;
        }
        final PermissionsState permissionsState = ps.getPermissionsState();
        return permissionsState.getPermissions(userId);
    }

    @Nullable
    private int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) {
        BasePermission permission = mSettings.getPermission(permissionName);
        if (permission == null) {
            return null;
        }
        return permission.computeGids(userId);
    }

    @Nullable
    private int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) {
        final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName);
        if (ps == null) {
            return null;
        }
        final PermissionsState permissionsState = ps.getPermissionsState();
        return permissionsState.computeGids(userId);
    }

    /**
     * Restore the permission state for a package.
     *
@@ -4650,6 +4680,22 @@ public class PermissionManagerService extends IPermissionManager.Stub {
        public void removeAllPermissions(AndroidPackage pkg, boolean chatty) {
            PermissionManagerService.this.removeAllPermissions(pkg, chatty);
        }
        @NonNull
        @Override
        public Set<String> getGrantedPermissions(@NonNull String packageName,
                @UserIdInt int userId) {
            return PermissionManagerService.this.getGrantedPermissions(packageName, userId);
        }
        @Nullable
        @Override
        public int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) {
            return PermissionManagerService.this.getPermissionGids(permissionName, userId);
        }
        @Nullable
        @Override
        public int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) {
            return PermissionManagerService.this.getPackageGids(packageName, userId);
        }
        @Override
        public void grantRequestedRuntimePermissions(AndroidPackage pkg, int[] userIds,
                String[] grantedPermissions, int callingUid) {
+20 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.server.pm.parsing.pkg.AndroidPackage;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;

/**
@@ -263,6 +264,25 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
    public abstract void addAllPermissionGroups(@NonNull AndroidPackage pkg, boolean chatty);
    public abstract void removeAllPermissions(@NonNull AndroidPackage pkg, boolean chatty);

    /**
     * Get all the permissions granted to a package.
     */
    @NonNull
    public abstract Set<String> getGrantedPermissions(@NonNull String packageName,
            @UserIdInt int userId);

    /**
     * Get the GIDs of a permission.
     */
    @Nullable
    public abstract int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId);

    /**
     * Get the GIDs computed from the permission state of a package.
     */
    @Nullable
    public abstract int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId);

    /** Retrieve the packages that have requested the given app op permission */
    public abstract @Nullable String[] getAppOpPermissionPackages(
            @NonNull String permName, int callingUid);