Generalize userproperties to support for more user types in iconCache

Bug: 305062259
Flag: None
Test: Presubmit
Change-Id: I35cd20a03520ada233809930fcc56cdea1dabec6
This commit is contained in:
Sunny Goyal
2023-10-12 13:33:54 -07:00
parent 4588031286
commit c173c04422
4 changed files with 112 additions and 19 deletions

View File

@@ -17,6 +17,7 @@
package com.android.launcher3.pm;
import static com.android.launcher3.Utilities.ATLEAST_U;
import static com.android.launcher3.uioverrides.ApiWrapper.queryAllUsers;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import android.content.Context;
@@ -24,7 +25,6 @@ import android.content.Intent;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
@@ -33,6 +33,7 @@ import androidx.annotation.WorkerThread;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.SimpleBroadcastReceiver;
import com.android.launcher3.util.UserIconInfo;
import java.util.ArrayList;
import java.util.Collections;
@@ -65,7 +66,7 @@ public class UserCache implements SafeCloseable {
private final Context mContext;
@NonNull
private Map<UserHandle, Long> mUserToSerialMap;
private Map<UserHandle, UserIconInfo> mUserToSerialMap;
private UserCache(Context context) {
mContext = context;
@@ -103,7 +104,7 @@ public class UserCache implements SafeCloseable {
@WorkerThread
private void updateCache() {
mUserToSerialMap = queryAllUsers(mContext.getSystemService(UserManager.class));
mUserToSerialMap = queryAllUsers(mContext);
}
/**
@@ -118,19 +119,26 @@ public class UserCache implements SafeCloseable {
* @see UserManager#getSerialNumberForUser(UserHandle)
*/
public long getSerialNumberForUser(UserHandle user) {
Long serial = mUserToSerialMap.get(user);
return serial == null ? 0 : serial;
return getUserInfo(user).userSerial;
}
/**
* Returns the user properties for the provided user or default values
*/
@NonNull
public UserIconInfo getUserInfo(UserHandle user) {
UserIconInfo info = mUserToSerialMap.get(user);
return info == null ? new UserIconInfo(user, UserIconInfo.TYPE_MAIN) : info;
}
/**
* @see UserManager#getUserForSerialNumber(long)
*/
public UserHandle getUserForSerialNumber(long serialNumber) {
Long value = serialNumber;
return mUserToSerialMap
.entrySet()
.stream()
.filter(entry -> value.equals(entry.getValue()))
.filter(entry -> serialNumber == entry.getValue().userSerial)
.findFirst()
.map(Map.Entry::getKey)
.orElse(Process.myUserHandle());
@@ -142,16 +150,4 @@ public class UserCache implements SafeCloseable {
public List<UserHandle> getUserProfiles() {
return List.copyOf(mUserToSerialMap.keySet());
}
private static Map<UserHandle, Long> queryAllUsers(UserManager userManager) {
Map<UserHandle, Long> users = new ArrayMap<>();
List<UserHandle> usersActual = userManager.getUserProfiles();
if (usersActual != null) {
for (UserHandle user : usersActual) {
long serial = userManager.getSerialNumberForUser(user);
users.put(user, serial);
}
}
return users;
}
}