Merge "Log warning when UserHandle in UserManagerState#allUsers get overridden" into main

This commit is contained in:
Fengjiang Li
2024-05-17 05:56:12 +00:00
committed by Android (Google) Code Review
@@ -17,6 +17,7 @@ package com.android.launcher3.model;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
import android.util.LongSparseArray;
import android.util.SparseBooleanArray;
@@ -27,6 +28,8 @@ import com.android.launcher3.pm.UserCache;
*/
public class UserManagerState {
private static final String TAG = "UserManagerState";
public final LongSparseArray<UserHandle> allUsers = new LongSparseArray<>();
private final LongSparseArray<Boolean> mQuietUsersSerialNoMap = new LongSparseArray<>();
@@ -39,6 +42,13 @@ public class UserManagerState {
for (UserHandle user : userManager.getUserProfiles()) {
long serialNo = userCache.getSerialNumberForUser(user);
boolean isUserQuiet = userManager.isQuietModeEnabled(user);
// Mapping different UserHandles to the same serialNo in allUsers could lead to losing
// UserHandle and cause a series of problems, such as incorrectly marking app as
// disabled and deleting app icons from workspace.
if (allUsers.get(serialNo) != null) {
Log.w(TAG, String.format("Override allUsers[%d]=%s with %s",
serialNo, allUsers.get(serialNo), user));
}
allUsers.put(serialNo, user);
mQuietUsersHashCodeMap.put(user.hashCode(), isUserQuiet);
mQuietUsersSerialNoMap.put(serialNo, isUserQuiet);