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

This commit is contained in:
Vadim Tryshev
2016-03-03 00:28:16 +00:00
committed by Android (Google) Code Review
5 changed files with 68 additions and 17 deletions

View File

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

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 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
@@ -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.

View File

@@ -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.

View File

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

View File

@@ -483,6 +483,12 @@ public class BridgePackageManager extends PackageManager {
return null;
}
@Override
public Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation,
int badgeDensity) {
return null;
}
@Override
public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) {
return null;