Log warning when UserHandle in UserManagerState#allUsers get overridden

Bug: 340362067
Test: manual
Flag: NONE
Change-Id: I123f02f52408db0f7c711ee420743ac01df04156
This commit is contained in:
Fengjiang Li
2024-05-16 13:49:34 -07:00
parent d931dd7d2f
commit 172e454e2c
@@ -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);