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

Commit a2a039b6 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Using a reverse hashmap instead of indexOfValue in userManager

Bug: 22980139
Change-Id: I87b633d194ff4e1529dd679dc02da573ed374207
parent d1ea63f2
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -212,7 +212,6 @@ public class WidgetPreviewLoader {
    public void removeObsoletePreviews(ArrayList<Object> list) {
        Utilities.assertWorkerThread();

        LongSparseArray<UserHandleCompat> userIdCache = new LongSparseArray<>();
        LongSparseArray<HashSet<String>> validPackages = new LongSparseArray<>();

        for (Object obj : list) {
@@ -227,15 +226,7 @@ public class WidgetPreviewLoader {
                pkg = info.provider.getPackageName();
            }

            int userIdIndex = userIdCache.indexOfValue(user);
            final long userId;
            if (userIdIndex < 0) {
                userId = mUserManager.getSerialNumberForUser(user);
                userIdCache.put(userId, user);
            } else {
                userId = userIdCache.keyAt(userIdIndex);
            }

            final long userId = mUserManager.getSerialNumberForUser(user);
            HashSet<String> packages = validPackages.get(userId);
            if (packages == null) {
                packages = new HashSet<>();
+14 −5
Original line number Diff line number Diff line
@@ -23,10 +23,16 @@ import android.os.UserManager;

import com.android.launcher3.util.LongArrayMap;

import java.util.HashMap;

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public class UserManagerCompatV17 extends UserManagerCompatV16 {

    protected LongArrayMap<UserHandleCompat> mUsers;
    // Create a separate reverse map as LongArrayMap.indexOfValue checks if objects are same
    // and not {@link Object#equals}
    protected HashMap<UserHandleCompat, Long> mUserToSerialMap;

    protected UserManager mUserManager;

    UserManagerCompatV17(Context context) {
@@ -35,9 +41,9 @@ public class UserManagerCompatV17 extends UserManagerCompatV16 {

    public long getSerialNumberForUser(UserHandleCompat user) {
        synchronized (this) {
            if (mUsers != null) {
                int index = mUsers.indexOfValue(user);
                return (index >= 0) ? mUsers.keyAt(index) : 0;
            if (mUserToSerialMap != null) {
                Long serial = mUserToSerialMap.get(user);
                return serial == null ? 0 : serial;
            }
        }
        return mUserManager.getSerialNumberForUser(user.getUser());
@@ -55,9 +61,12 @@ public class UserManagerCompatV17 extends UserManagerCompatV16 {
    @Override
    public void enableAndResetCache() {
        synchronized (this) {
            mUsers = new LongArrayMap<UserHandleCompat>();
            mUsers = new LongArrayMap<>();
            mUserToSerialMap = new HashMap<>();
            UserHandleCompat myUser = UserHandleCompat.myUserHandle();
            mUsers.put(mUserManager.getSerialNumberForUser(myUser.getUser()), myUser);
            long serial = mUserManager.getSerialNumberForUser(myUser.getUser());
            mUsers.put(serial, myUser);
            mUserToSerialMap.put(myUser, serial);
        }
    }
}
+8 −6
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.launcher3.util.LongArrayMap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@@ -48,12 +49,15 @@ public class UserManagerCompatVL extends UserManagerCompatV17 {
    @Override
    public void enableAndResetCache() {
        synchronized (this) {
            mUsers = new LongArrayMap<UserHandleCompat>();
            mUsers = new LongArrayMap<>();
            mUserToSerialMap = new HashMap<>();
            List<UserHandle> users = mUserManager.getUserProfiles();
            if (users != null) {
                for (UserHandle user : users) {
                    mUsers.put(mUserManager.getSerialNumberForUser(user),
                            UserHandleCompat.fromUser(user));
                    long serial = mUserManager.getSerialNumberForUser(user);
                    UserHandleCompat userCompat = UserHandleCompat.fromUser(user);
                    mUsers.put(serial, userCompat);
                    mUserToSerialMap.put(userCompat, serial);
                }
            }
        }
@@ -64,9 +68,7 @@ public class UserManagerCompatVL extends UserManagerCompatV17 {
        synchronized (this) {
            if (mUsers != null) {
                List<UserHandleCompat> users = new ArrayList<>();
                for (UserHandleCompat user : mUsers) {
                    users.add(user);
                }
                users.addAll(mUserToSerialMap.keySet());
                return users;
            }
        }