diff options
5 files changed, 68 insertions, 17 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 53cc9caf5a2f..c8411119430f 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -1093,6 +1093,14 @@ public class ApplicationPackageManager extends PackageManager { } @Override + public Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation, + int badgeDensity) { + Drawable badgeDrawable = getDrawableForDensity( + com.android.internal.R.drawable.ic_corp_badge, badgeDensity); + return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true); + } + + @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { final int badgeResId = getBadgeResIdForUser(user.getIdentifier()); if (badgeResId == 0) { @@ -1114,24 +1122,27 @@ public class ApplicationPackageManager extends PackageManager { @Override public Drawable getUserBadgeForDensity(UserHandle user, int density) { - return getManagedProfileIconForDensity(user, density, - com.android.internal.R.drawable.ic_corp_badge); + return getManagedProfileIconForDensity(user, com.android.internal.R.drawable.ic_corp_badge, + density); } @Override public Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density) { - return getManagedProfileIconForDensity(user, density, - com.android.internal.R.drawable.ic_corp_badge_no_background); + return getManagedProfileIconForDensity(user, + com.android.internal.R.drawable.ic_corp_badge_no_background, density); } - private Drawable getManagedProfileIconForDensity(UserHandle user, int density, - int drawableId) { + private Drawable getDrawableForDensity(int drawableId, int density) { + if (density <= 0) { + density = mContext.getResources().getDisplayMetrics().densityDpi; + } + return Resources.getSystem().getDrawableForDensity(drawableId, density); + } + + private Drawable getManagedProfileIconForDensity(UserHandle user, int drawableId, int density) { UserInfo userInfo = getUserIfProfile(user.getIdentifier()); if (userInfo != null && userInfo.isManagedProfile()) { - if (density <= 0) { - density = mContext.getResources().getDisplayMetrics().densityDpi; - } - return Resources.getSystem().getDrawableForDensity(drawableId, density); + return getDrawableForDensity(drawableId, density); } return null; } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index c2d1bdda3d1f..27056a3fc5a5 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4339,6 +4339,32 @@ public abstract class PackageManager { throws NameNotFoundException; /** + * Returns a managed-user-style badged copy of the given drawable allowing the user to + * distinguish it from the original drawable. + * The caller can specify the location in the bounds of the drawable to be + * badged where the badge should be applied as well as the density of the + * badge to be used. + * <p> + * If the original drawable is a BitmapDrawable and the backing bitmap is + * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging + * is performed in place and the original drawable is returned. + * </p> + * + * @param drawable The drawable to badge. + * @param badgeLocation Where in the bounds of the badged drawable to place + * the badge. If it's {@code null}, the badge is applied on top of the entire + * drawable being badged. + * @param badgeDensity The optional desired density for the badge as per + * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive, + * the density of the display is used. + * @return A drawable that combines the original drawable and a badge as + * determined by the system. + * @hide + */ + public abstract Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation, + int badgeDensity); + + /** * If the target user is a managed profile of the calling user or if the * target user is the caller and is itself a managed profile, then this * returns a badged copy of the given icon to be able to distinguish it from @@ -4367,17 +4393,17 @@ public abstract class PackageManager { * badge to be used. * <p> * If the original drawable is a BitmapDrawable and the backing bitmap is - * mutable as per {@link android.graphics.Bitmap#isMutable()}, the bading + * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging * is performed in place and the original drawable is returned. * </p> * * @param drawable The drawable to badge. * @param user The target user. * @param badgeLocation Where in the bounds of the badged drawable to place - * the badge. If not provided, the badge is applied on top of the entire + * the badge. If it's {@code null}, the badge is applied on top of the entire * drawable being badged. * @param badgeDensity The optional desired density for the badge as per - * {@link android.util.DisplayMetrics#densityDpi}. If not provided, + * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive, * the density of the display is used. * @return A drawable that combines the original drawable and a badge as * determined by the system. diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 6e9e4569c46a..7223dfbdccdb 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -1658,7 +1658,7 @@ public class UserManager { * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}. * <p> * If the original drawable is a BitmapDrawable and the backing bitmap is - * mutable as per {@link android.graphics.Bitmap#isMutable()}, the bading + * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging * is performed in place and the original drawable is returned. * </p> * @@ -1681,17 +1681,17 @@ public class UserManager { * badge to be used. * <p> * If the original drawable is a BitmapDrawable and the backing bitmap is - * mutable as per {@link android.graphics.Bitmap#isMutable()}, the bading + * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging * is performed in place and the original drawable is returned. * </p> * * @param badgedDrawable The drawable to badge. * @param user The target user. * @param badgeLocation Where in the bounds of the badged drawable to place - * the badge. If not provided, the badge is applied on top of the entire + * the badge. If it's {@code null}, the badge is applied on top of the entire * drawable being badged. * @param badgeDensity The optional desired density for the badge as per - * {@link android.util.DisplayMetrics#densityDpi}. If not provided, + * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive, * the density of the display is used. * @return A drawable that combines the original drawable and a badge as * determined by the system. diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index c34d4a919242..e851c8d784f3 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -518,6 +518,14 @@ public class MockPackageManager extends PackageManager { throw new UnsupportedOperationException(); } + /** @hide */ + @Override + public Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation, + int badgeDensity) { + throw new UnsupportedOperationException(); + } + + @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { throw new UnsupportedOperationException(); diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java index 85e26103fbf5..4039cdf7df6d 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java @@ -484,6 +484,12 @@ public class BridgePackageManager extends PackageManager { } @Override + public Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation, + int badgeDensity) { + return null; + } + + @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { return null; } |