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

Commit 5a63dba0 authored by Jinyoung Kim's avatar Jinyoung Kim Committed by Android (Google) Code Review
Browse files

Merge "Revert "Read permissions state from pm/Settings""

parents f8b61c76 61b85973
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import android.util.ArraySet;
import android.util.SparseArray;

import com.android.internal.util.function.pooled.PooledLambda;
import com.android.permission.persistence.RuntimePermissionsState;
import com.android.server.pm.Installer.LegacyDexoptDisabledException;
import com.android.server.pm.KnownPackages;
import com.android.server.pm.PackageList;
@@ -1078,16 +1077,9 @@ public abstract class PackageManagerInternal {

    /**
     * Read legacy permission definitions for permissions migration to new permission subsystem.
     * Note that this api is supposed to be used for permissions migration only.
     */
    public abstract LegacyPermissionSettings getLegacyPermissions();

    /**
     * Read legacy permission states for permissions migration to new permission subsystem.
     * Note that this api is supposed to be used for permissions state migration only.
     */
    public abstract RuntimePermissionsState getLegacyPermissionsState(@UserIdInt int userId);

    /**
     * Returns {@code true} if the caller is the installer of record for the given package.
     * Otherwise, {@code false}.
+0 −11
Original line number Diff line number Diff line
@@ -188,7 +188,6 @@ import com.android.internal.util.Preconditions;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
import com.android.permission.persistence.RuntimePermissionsPersistence;
import com.android.permission.persistence.RuntimePermissionsState;
import com.android.server.EventLogTags;
import com.android.server.FgThread;
import com.android.server.LocalManagerRegistry;
@@ -6754,16 +6753,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            }
        }

        /**
         * Read legacy permission states for permissions migration to new permission subsystem.
         */
        @Override
        public RuntimePermissionsState getLegacyPermissionsState(int userId) {
            synchronized (mLock) {
                return mSettings.getLegacyPermissionsState(userId);
            }
        }

        @Override
        @SuppressWarnings("GuardedBy")
        public boolean isPermissionUpgradeNeeded(int userId) {
+32 −71
Original line number Diff line number Diff line
@@ -3444,11 +3444,6 @@ public final class Settings implements Watchable, Snappable {
                mPackages, mSharedUsers, getUserRuntimePermissionsFile(userId));
    }

    RuntimePermissionsState getLegacyPermissionsState(@UserIdInt int userId) {
        return mRuntimePermissionsPersistence.getLegacyPermissionsState(
                userId, mPackages, mSharedUsers);
    }

    void applyDefaultPreferredAppsLPw(int userId) {
        // First pull data from any pre-installed apps.
        final PackageManagerInternal pmInternal =
@@ -5883,67 +5878,17 @@ public final class Settings implements Watchable, Snappable {
            Runnable writer = () -> {
                boolean isLegacyPermissionStateStale = mIsLegacyPermissionStateStale.getAndSet(
                        false);
                Map<String, List<RuntimePermissionsState.PermissionState>> packagePermissions;
                Map<String, List<RuntimePermissionsState.PermissionState>> sharedUserPermissions;

                final Map<String, List<RuntimePermissionsState.PermissionState>>
                        packagePermissions = new ArrayMap<>();
                final Map<String, List<RuntimePermissionsState.PermissionState>>
                        sharedUserPermissions = new ArrayMap<>();
                synchronized (pmLock) {
                    if (sync || isLegacyPermissionStateStale) {
                        legacyPermissionDataProvider.writeLegacyPermissionStateTEMP();
                    }

                    packagePermissions = getPackagePermissions(userId, packageStates);
                    sharedUserPermissions = getShareUsersPermissions(userId, sharedUsers);
                }
                synchronized (mLock) {
                    int version = mVersions.get(userId, INITIAL_VERSION);
                    String fingerprint = mFingerprints.get(userId);

                    RuntimePermissionsState runtimePermissions = new RuntimePermissionsState(
                            version, fingerprint, packagePermissions, sharedUserPermissions);
                    mPendingStatesToWrite.put(userId, runtimePermissions);
                }
                if (pmHandler != null) {
                    // Async version.
                    mPersistenceHandler.obtainMessage(userId).sendToTarget();
                } else {
                    // Sync version.
                    writePendingStates();
                }
            };

            if (pmHandler != null) {
                // Async version, use pmHandler.
                pmHandler.post(writer);
            } else {
                // Sync version, use caller's thread.
                writer.run();
            }
        }

        @NonNull
        RuntimePermissionsState getLegacyPermissionsState(int userId,
                @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates,
                @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers) {
            int version;
            String fingerprint;
            synchronized (mLock) {
                version = mVersions.get(userId, INITIAL_VERSION);
                fingerprint = mFingerprints.get(userId);
            }

            return new RuntimePermissionsState(
                    version, fingerprint, getPackagePermissions(userId, packageStates),
                    getShareUsersPermissions(userId, sharedUsers));
        }

        @NonNull
        private Map<String, List<RuntimePermissionsState.PermissionState>> getPackagePermissions(
                int userId,
                @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates) {
            final Map<String, List<RuntimePermissionsState.PermissionState>>
                    packagePermissions = new ArrayMap<>();

            final int packagesSize = packageStates.size();
                    int packagesSize = packageStates.size();
                    for (int i = 0; i < packagesSize; i++) {
                        String packageName = packageStates.keyAt(i);
                        PackageStateInternal packageState = packageStates.valueAt(i);
@@ -5961,14 +5906,6 @@ public final class Settings implements Watchable, Snappable {
                            packagePermissions.put(packageName, permissions);
                        }
                    }
            return packagePermissions;
        }

        @NonNull
        private Map<String, List<RuntimePermissionsState.PermissionState>> getShareUsersPermissions(
                int userId, @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers) {
            final Map<String, List<RuntimePermissionsState.PermissionState>>
                    sharedUserPermissions = new ArrayMap<>();

                    final int sharedUsersSize = sharedUsers.size();
                    for (int i = 0; i < sharedUsersSize; i++) {
@@ -5979,7 +5916,31 @@ public final class Settings implements Watchable, Snappable {
                                        sharedUserSetting.getLegacyPermissionState(), userId);
                        sharedUserPermissions.put(sharedUserName, permissions);
                    }
            return sharedUserPermissions;
                }
                synchronized (mLock) {
                    int version = mVersions.get(userId, INITIAL_VERSION);
                    String fingerprint = mFingerprints.get(userId);

                    RuntimePermissionsState runtimePermissions = new RuntimePermissionsState(
                            version, fingerprint, packagePermissions, sharedUserPermissions);
                    mPendingStatesToWrite.put(userId, runtimePermissions);
                }
                if (pmHandler != null) {
                    // Async version.
                    mPersistenceHandler.obtainMessage(userId).sendToTarget();
                } else {
                    // Sync version.
                    writePendingStates();
                }
            };

            if (pmHandler != null) {
                // Async version, use pmHandler.
                pmHandler.post(writer);
            } else {
                // Sync version, use caller's thread.
                writer.run();
            }
        }

        private void writePendingStates() {
+5 −4
Original line number Diff line number Diff line
@@ -18,9 +18,11 @@ package com.android.server.pm.permission;

import android.annotation.NonNull;
import android.content.pm.PackageManagerInternal;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Log;

import com.android.permission.persistence.RuntimePermissionsPersistence;
import com.android.permission.persistence.RuntimePermissionsState;
import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
@@ -79,12 +81,11 @@ public class PermissionMigrationHelperImpl implements PermissionMigrationHelper
     */
    @NonNull
    public Map<Integer, Map<String, LegacyPermissionState>> getLegacyPermissionStates(int userId) {
        PackageManagerInternal mPackageManagerInternal =
                LocalServices.getService(PackageManagerInternal.class);
        RuntimePermissionsPersistence legacyPersistence =
                RuntimePermissionsPersistence.createInstance();
        Map<Integer, Map<String, LegacyPermissionState>> appIdPermissionStates = new ArrayMap<>();

        RuntimePermissionsState legacyState =
                mPackageManagerInternal.getLegacyPermissionsState(userId);
        RuntimePermissionsState legacyState = legacyPersistence.readForUser(UserHandle.of(userId));
        PackageManagerLocal packageManagerLocal =
                LocalManagerRegistry.getManager(PackageManagerLocal.class);