diff options
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 20 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 26 | ||||
| -rw-r--r-- | test-runner/src/android/test/mock/MockPackageManager.java | 8 |
3 files changed, 50 insertions, 4 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 53cc9caf5a2f..faa59b557a94 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 getManagedUserBadgedDrawableForDensity(Drawable drawable, Rect badgeLocation, + int badgeDensity) { + Drawable badgeDrawable = getDrawableForDensity(badgeDensity, + com.android.internal.R.drawable.ic_corp_badge); + return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true); + } + + @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { final int badgeResId = getBadgeResIdForUser(user.getIdentifier()); if (badgeResId == 0) { @@ -1124,14 +1132,18 @@ public class ApplicationPackageManager extends PackageManager { com.android.internal.R.drawable.ic_corp_badge_no_background); } + private Drawable getDrawableForDensity(int density, int drawableId) { + if (density <= 0) { + density = mContext.getResources().getDisplayMetrics().densityDpi; + } + return Resources.getSystem().getDrawableForDensity(drawableId, density); + } + private Drawable getManagedProfileIconForDensity(UserHandle user, int density, int drawableId) { 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(density, drawableId); } return null; } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index c2d1bdda3d1f..33ee510f1426 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 bading + * 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 not provided, 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, + * 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 getManagedUserBadgedDrawableForDensity(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 diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index c34d4a919242..48f2fb30ecd4 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 getManagedUserBadgedDrawableForDensity(Drawable drawable, Rect badgeLocation, + int badgeDensity) { + throw new UnsupportedOperationException(); + } + + @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { throw new UnsupportedOperationException(); |