diff options
| -rw-r--r-- | core/java/android/os/UserManager.java | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 34 |
2 files changed, 33 insertions, 11 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 3ae951170759..f1964e7bc024 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -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 diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 8bab9de903ba..708e0679d6d4 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -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) { @@ -6969,6 +6967,26 @@ public class UserManagerService extends IUserManager.Stub { } /** + * 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. */ private void updateUserIds() { |