From b05db2511b1f326a66c2478e0466a5a1d17b7e11 Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Fri, 25 Jun 2021 08:19:59 -0700 Subject: [PATCH] Fixes incorrect array type comparison A prior change used ArrayUtils.contains to search an int among an array of UserInfos. This was resulting in never running the optimized user add flow in AppsFilter. Test: atest --user-type secondary_user AppsFilterTest AppEnumerationTests Test: [create 2nd user; run as primary] atest AppsFilterTest AppEnumerationTests Bug: 187853334 Change-Id: I8e0a5a4acbf8f06eb7932fb1953ff2af0baf8424 --- .../core/java/com/android/server/pm/AppsFilter.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java index d1d1eb00b1148..1401fa9b5e583 100644 --- a/services/core/java/com/android/server/pm/AppsFilter.java +++ b/services/core/java/com/android/server/pm/AppsFilter.java @@ -18,6 +18,7 @@ package com.android.server.pm; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import static android.os.UserHandle.USER_ALL; +import static android.os.UserHandle.USER_NULL; import static android.provider.DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE; import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE; @@ -838,8 +839,14 @@ public class AppsFilter implements Watchable, Snappable { private void updateEntireShouldFilterCache(int subjectUserId) { mStateProvider.runWithState((settings, users) -> { - int userId = subjectUserId; - if (!ArrayUtils.contains(users, subjectUserId)) { + int userId = USER_NULL; + for (int u = 0; u < users.length; u++) { + if (subjectUserId == users[u].id) { + userId = subjectUserId; + break; + } + } + if (userId == USER_NULL) { Slog.e(TAG, "We encountered a new user that isn't a member of known users, " + "updating the whole cache"); userId = USER_ALL; @@ -861,7 +868,7 @@ public class AppsFilter implements Watchable, Snappable { if (UserHandle.getUserId(uid2) == userId) { continue; } - cache.setValueAt(uid1, uid2, mShouldFilterCache.valueAt(uid1, uid2)); + cache.put(uid1, uid2, mShouldFilterCache.get(uid1, uid2)); } } }