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

Commit 8e500422 authored by Anna Bauza's avatar Anna Bauza Committed by Android (Google) Code Review
Browse files

Merge "Invalidate the cache when users are added or removed." into main

parents b13bfab3 9c1118a1
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -6368,8 +6368,12 @@ public class UserManager {
                Settings.Global.DEVICE_DEMO_MODE, 0) > 0;
    }

    /** @hide */
    public static final void invalidateUserSerialNumberCache() {

    /**
     * This method is used to invalidate caches, when user was added or removed.
     * @hide
     */
    public static final void invalidateCacheOnUserListChange() {
        UserManagerCache.invalidateUserSerialNumber();
    }

@@ -6382,7 +6386,7 @@ public class UserManager {
     * @hide
     */
    @UnsupportedAppUsage
    @CachedProperty(modsFlagOnOrNone = {})
    @CachedProperty(modsFlagOnOrNone = {}, api = "user_manager_users")
    public int getUserSerialNumber(@UserIdInt int userId) {
        // Read only flag should is to fix early access to this API
        // cacheUserSerialNumber to be removed after the
+26 −8
Original line number Diff line number Diff line
@@ -1101,7 +1101,7 @@ public class UserManagerService extends IUserManager.Stub {
        if (android.multiuser.Flags.cachesNotInvalidatedAtStartReadOnly()) {
            UserManager.invalidateIsUserUnlockedCache();
            UserManager.invalidateQuietModeEnabledCache();
            UserManager.invalidateUserSerialNumberCache();
            UserManager.invalidateCacheOnUserListChange();
        }
    }

@@ -4448,7 +4448,7 @@ public class UserManagerService extends IUserManager.Stub {

                            if (userData != null) {
                                synchronized (mUsersLock) {
                                    mUsers.put(userData.info.id, userData);
                                    addUserDataLU(userData);
                                    if (mNextSerialNumber < 0
                                            || mNextSerialNumber <= userData.info.id) {
                                        mNextSerialNumber = userData.info.id + 1;
@@ -5724,7 +5724,7 @@ public class UserManagerService extends IUserManager.Stub {
                    userData.info = userInfo;
                    userData.userProperties = new UserProperties(
                            userTypeDetails.getDefaultUserPropertiesReference());
                    mUsers.put(userId, userData);
                    addUserDataLU(userData);
                }
                writeUserLP(userData);
                writeUserListLP();
@@ -6138,7 +6138,7 @@ public class UserManagerService extends IUserManager.Stub {
        final UserData userData = new UserData();
        userData.info = userInfo;
        synchronized (mUsersLock) {
            mUsers.put(userInfo.id, userData);
            addUserDataLU(userData);
        }
        updateUserIds();
        return userData;
@@ -6148,8 +6148,7 @@ public class UserManagerService extends IUserManager.Stub {
    @VisibleForTesting
    void removeUserInfo(@UserIdInt int userId) {
        synchronized (mUsersLock) {
            UserManager.invalidateUserSerialNumberCache();
            mUsers.remove(userId);
            removeUserDataLU(userId);
        }
    }

@@ -6579,8 +6578,7 @@ public class UserManagerService extends IUserManager.Stub {

        // Remove this user from the list
        synchronized (mUsersLock) {
            UserManager.invalidateUserSerialNumberCache();
            mUsers.remove(userId);
            removeUserDataLU(userId);
            mIsUserManaged.delete(userId);
        }
        synchronized (mUserStates) {
@@ -6968,6 +6966,26 @@ public class UserManagerService extends IUserManager.Stub {
        return userInfo.creationTime;
    }

    /**
     * Adding user data to mUsers list in one place to invalidate related caches.
     */
    @GuardedBy("mUsersLock")
    private void addUserDataLU(UserData userData) {
        if (android.multiuser.Flags.invalidateCacheOnUsersChangedReadOnly()) {
            UserManager.invalidateCacheOnUserListChange();
        }
        mUsers.put(userData.info.id, userData);
    }

    /**
     * Removing user data to mUsers list in one place to invalidate related caches.
     */
    @GuardedBy("mUsersLock")
    private void removeUserDataLU(@UserIdInt int userId) {
        UserManager.invalidateCacheOnUserListChange();
        mUsers.remove(userId);
    }

    /**
     * Caches the list of user ids in an array, adjusting the array size when necessary.
     */