Loading quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java +43 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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; } } } src/com/android/launcher3/icons/LauncherIcons.java +11 −0 Original line number Diff line number Diff line Loading @@ -20,11 +20,16 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_FORCED_MONO_ICON; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.UserHandle; import androidx.annotation.NonNull; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.graphics.IconShape; import com.android.launcher3.graphics.LauncherPreviewRenderer; import com.android.launcher3.pm.UserCache; import com.android.launcher3.util.Themes; import com.android.launcher3.util.UserIconInfo; /** * Wrapper class to provide access to {@link BaseIconFactory} and also to provide pool of this class Loading Loading @@ -107,6 +112,12 @@ public class LauncherIcons extends BaseIconFactory implements AutoCloseable { return mMonochromeIconFactory.wrap(base); } @NonNull @Override protected UserIconInfo getUserInfo(@NonNull UserHandle user) { return UserCache.INSTANCE.get(mContext).getUserInfo(user); } @Override public void close() { recycle(); Loading src/com/android/launcher3/pm/UserCache.java +15 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -103,7 +104,7 @@ public class UserCache implements SafeCloseable { @WorkerThread private void updateCache() { mUserToSerialMap = queryAllUsers(mContext.getSystemService(UserManager.class)); mUserToSerialMap = queryAllUsers(mContext); } /** Loading @@ -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()); Loading @@ -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; } } src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java +43 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,16 @@ import android.app.Person; import android.content.Context; import android.content.pm.LauncherActivityInfo; import android.content.pm.ShortcutInfo; import android.graphics.drawable.ColorDrawable; import android.os.UserHandle; import android.os.UserManager; import android.util.ArrayMap; import com.android.launcher3.Utilities; import com.android.launcher3.util.UserIconInfo; import java.util.Collections; import java.util.List; import java.util.Map; /** Loading @@ -48,4 +54,41 @@ public class ApiWrapper { public static ActivityOptions createFadeOutAnimOptions(Context context) { return ActivityOptions.makeCustomAnimation(context, 0, android.R.anim.fade_out); } /** * 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; } } } Loading
quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java +43 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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; } } }
src/com/android/launcher3/icons/LauncherIcons.java +11 −0 Original line number Diff line number Diff line Loading @@ -20,11 +20,16 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_FORCED_MONO_ICON; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.UserHandle; import androidx.annotation.NonNull; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.graphics.IconShape; import com.android.launcher3.graphics.LauncherPreviewRenderer; import com.android.launcher3.pm.UserCache; import com.android.launcher3.util.Themes; import com.android.launcher3.util.UserIconInfo; /** * Wrapper class to provide access to {@link BaseIconFactory} and also to provide pool of this class Loading Loading @@ -107,6 +112,12 @@ public class LauncherIcons extends BaseIconFactory implements AutoCloseable { return mMonochromeIconFactory.wrap(base); } @NonNull @Override protected UserIconInfo getUserInfo(@NonNull UserHandle user) { return UserCache.INSTANCE.get(mContext).getUserInfo(user); } @Override public void close() { recycle(); Loading
src/com/android/launcher3/pm/UserCache.java +15 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -103,7 +104,7 @@ public class UserCache implements SafeCloseable { @WorkerThread private void updateCache() { mUserToSerialMap = queryAllUsers(mContext.getSystemService(UserManager.class)); mUserToSerialMap = queryAllUsers(mContext); } /** Loading @@ -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()); Loading @@ -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; } }
src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java +43 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,16 @@ import android.app.Person; import android.content.Context; import android.content.pm.LauncherActivityInfo; import android.content.pm.ShortcutInfo; import android.graphics.drawable.ColorDrawable; import android.os.UserHandle; import android.os.UserManager; import android.util.ArrayMap; import com.android.launcher3.Utilities; import com.android.launcher3.util.UserIconInfo; import java.util.Collections; import java.util.List; import java.util.Map; /** Loading @@ -48,4 +54,41 @@ public class ApiWrapper { public static ActivityOptions createFadeOutAnimOptions(Context context) { return ActivityOptions.makeCustomAnimation(context, 0, android.R.anim.fade_out); } /** * 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; } } }