Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f68f41a authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

Adding getManagedUserBadgedDrawableForDensity() to PackageManager.

It allows badging an image regardless of of the user (no
user id parameter). The styling for managed users is applied.

This is useful for new cases where the existing functions
wouldn't badge the icon, but we need it.

Bug: 25192539
Change-Id: I20ca2d7265cbc3a47c050a72ec1843cc0a481c74
parent 85f2ded2
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -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,15 +1132,19 @@ public class ApplicationPackageManager extends PackageManager {
                com.android.internal.R.drawable.ic_corp_badge_no_background);
    }

    private Drawable getManagedProfileIconForDensity(UserHandle user, int density,
            int drawableId) {
        UserInfo userInfo = getUserIfProfile(user.getIdentifier());
        if (userInfo != null && userInfo.isManagedProfile()) {
    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()) {
            return getDrawableForDensity(density, drawableId);
        }
        return null;
    }

+26 −0
Original line number Diff line number Diff line
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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();