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

Commit af7650b7 authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

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

parents e6a1ec8d d5708cea
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;
@@ -6747,16 +6746,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
@@ -3289,11 +3289,6 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                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 =
@@ -5726,67 +5721,17 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            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);
@@ -5804,14 +5749,6 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                            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++) {
@@ -5822,7 +5759,31 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                                        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);