Merge "Adding getManagedUserBadgedDrawableForDensity() to PackageManager." into nyc-dev

This commit is contained in:
Vadim Tryshev
2016-03-02 00:49:28 +00:00
committed by Android (Google) Code Review
3 changed files with 50 additions and 4 deletions

View File

@@ -1092,6 +1092,14 @@ public class ApplicationPackageManager extends PackageManager {
return getApplicationLogo(getApplicationInfo(packageName, sDefaultFlags));
}
@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());
@@ -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;
}

View File

@@ -4338,6 +4338,32 @@ public abstract class PackageManager {
public abstract Drawable getApplicationLogo(String packageName)
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

View File

@@ -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();