From 172e454e2c0992a2764642b4fd5176ea87392f0b Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Thu, 16 May 2024 13:49:34 -0700 Subject: [PATCH] Log warning when UserHandle in UserManagerState#allUsers get overridden Bug: 340362067 Test: manual Flag: NONE Change-Id: I123f02f52408db0f7c711ee420743ac01df04156 --- src/com/android/launcher3/model/UserManagerState.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/android/launcher3/model/UserManagerState.java b/src/com/android/launcher3/model/UserManagerState.java index 720f08e256..ed3243043b 100644 --- a/src/com/android/launcher3/model/UserManagerState.java +++ b/src/com/android/launcher3/model/UserManagerState.java @@ -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 allUsers = new LongSparseArray<>(); private final LongSparseArray 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);