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

Commit 3fc19998 authored by Manish Singh's avatar Manish Singh
Browse files

Cache the results to avoid repetitive binder queries

Fix: 336012980
Test: atest RecentAppOpsAccessesTest
Change-Id: I63ceee9563240cf1112628205b33349f5fea0d2d
parent c8a7bb13
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.permission.PermissionManager;
import android.permission.PermissionManager;
import android.text.format.DateUtils;
import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.IconDrawableFactory;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.util.Log;


@@ -127,6 +128,7 @@ public class RecentAppOpsAccess {
        final long now = mClock.millis();
        final long now = mClock.millis();
        final UserManager um = mContext.getSystemService(UserManager.class);
        final UserManager um = mContext.getSystemService(UserManager.class);
        final List<UserHandle> profiles = um.getUserProfiles();
        final List<UserHandle> profiles = um.getUserProfiles();
        ArrayMap<UserHandle, Boolean> shouldIncludeAppsByUsers = new ArrayMap<>();


        for (int i = 0; i < appOpsCount; ++i) {
        for (int i = 0; i < appOpsCount; ++i) {
            AppOpsManager.PackageOps ops = appOps.get(i);
            AppOpsManager.PackageOps ops = appOps.get(i);
@@ -134,9 +136,13 @@ public class RecentAppOpsAccess {
            int uid = ops.getUid();
            int uid = ops.getUid();
            UserHandle user = UserHandle.getUserHandleForUid(uid);
            UserHandle user = UserHandle.getUserHandleForUid(uid);


            if (!shouldIncludeAppsByUsers.containsKey(user)) {
                shouldIncludeAppsByUsers.put(user, shouldHideUser(um, user));
            }

            // Don't show apps belonging to background users except for profiles that shouldn't
            // Don't show apps belonging to background users except for profiles that shouldn't
            // be shown in quiet mode.
            // be shown in quiet mode.
            if (!profiles.contains(user) || isHideInQuietEnabledForProfile(um, user)) {
            if (!profiles.contains(user) || !shouldIncludeAppsByUsers.get(user)) {
                continue;
                continue;
            }
            }


@@ -200,7 +206,7 @@ public class RecentAppOpsAccess {
        return accesses;
        return accesses;
    }
    }


    private boolean isHideInQuietEnabledForProfile(UserManager userManager, UserHandle userHandle) {
    private boolean shouldHideUser(UserManager userManager, UserHandle userHandle) {
        if (android.multiuser.Flags.enablePrivateSpaceFeatures()
        if (android.multiuser.Flags.enablePrivateSpaceFeatures()
                && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace()) {
                && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace()) {
            return userManager.isQuietModeEnabled(userHandle)
            return userManager.isQuietModeEnabled(userHandle)