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

@@ -22,11 +22,17 @@ import android.content.Context;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.ColorDrawable;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
import android.window.RemoteTransition;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.UserIconInfo;
import com.android.quickstep.util.FadeOutRemoteTransition;
import java.util.List;
import java.util.Map;
/**
@@ -53,4 +59,41 @@ public class ApiWrapper {
options.setRemoteTransition(new RemoteTransition(new FadeOutRemoteTransition()));
return options;
}
/**
* Returns a map of all users on the device to their corresponding UI properties
*/
public static Map<UserHandle, UserIconInfo> queryAllUsers(Context context) {
UserManager um = context.getSystemService(UserManager.class);
Map<UserHandle, UserIconInfo> users = new ArrayMap<>();
List<UserHandle> usersActual = um.getUserProfiles();
if (usersActual != null) {
for (UserHandle user : usersActual) {
long serial = um.getSerialNumberForUser(user);
// Simple check to check if the provided user is work profile
// TODO: Migrate to a better platform API
NoopDrawable d = new NoopDrawable();
boolean isWork = (d != context.getPackageManager().getUserBadgedIcon(d, user));
UserIconInfo info = new UserIconInfo(
user,
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN,
serial);
users.put(user, info);
}
}
return users;
}
private static class NoopDrawable extends ColorDrawable {
@Override
public int getIntrinsicHeight() {
return 1;
}
@Override
public int getIntrinsicWidth() {
return 1;
}
}
}