Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b05db251 authored by Patrick Baumann's avatar Patrick Baumann
Browse files

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
parent 270922b3
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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));
                        }
                    }
                }