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

Commit 023188e4 authored by Samuel Fufa's avatar Samuel Fufa Committed by android-build-merger
Browse files

Merge "Scale Icon badges for shortcut and widgets" into ub-launcher3-qt-future-dev

am: f2d486e5

Change-Id: I5c2c115b1ee42489d969ff30c48abf00d4a5a3f7
parents 1ab5de3f f2d486e5
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Process;
import android.os.UserHandle;

import androidx.annotation.NonNull;

/**
@@ -35,6 +36,8 @@ public class BaseIconFactory implements AutoCloseable {
    static final boolean ATLEAST_OREO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
    static final boolean ATLEAST_P = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P;

    private static final float ICON_BADGE_SCALE = 0.444f;

    private final Rect mOldBounds = new Rect();
    protected final Context mContext;
    private final Canvas mCanvas;
@@ -254,7 +257,7 @@ public class BaseIconFactory implements AutoCloseable {
     * Adds the {@param badge} on top of {@param target} using the badge dimensions.
     */
    public void badgeWithDrawable(Canvas target, Drawable badge) {
        int badgeSize = mContext.getResources().getDimensionPixelSize(R.dimen.profile_badge_size);
        int badgeSize = getBadgeSizeForIconSize(mIconBitmapSize);
        badge.setBounds(mIconBitmapSize - badgeSize, mIconBitmapSize - badgeSize,
                mIconBitmapSize, mIconBitmapSize);
        badge.draw(target);
@@ -334,6 +337,13 @@ public class BaseIconFactory implements AutoCloseable {
                iconDpi);
    }

    /**
     * Returns the correct badge size given an icon size
     */
    public static int getBadgeSizeForIconSize(int iconSize) {
        return (int) (ICON_BADGE_SCALE * iconSize);
    }

    /**
     * An extension of {@link BitmapDrawable} which returns the bitmap pixel size as intrinsic size.
     * This allows the badging to be done based on the action bitmap size rather than
+1 −1
Original line number Diff line number Diff line
@@ -584,7 +584,7 @@ public final class Utilities {
            LauncherIcons li = LauncherIcons.obtain(appState.getContext());
            Bitmap badge = li.getShortcutInfoBadge(si, appState.getIconCache()).iconBitmap;
            li.recycle();
            float badgeSize = launcher.getResources().getDimension(R.dimen.profile_badge_size);
            float badgeSize = iconSize * LauncherIcons.getBadgeSizeForIconSize(iconSize);
            float insetFraction = (iconSize - badgeSize) / iconSize;
            return new InsetDrawable(new FastBitmapDrawable(badge),
                    insetFraction, insetFraction, 0, 0);
+3 −4
Original line number Diff line number Diff line
@@ -80,26 +80,25 @@ public class DrawableFactory implements ResourceBasedOverride {
     * Returns a drawable that can be used as a badge for the user or null.
     */
    @UiThread
    public Drawable getBadgeForUser(UserHandle user, Context context) {
    public Drawable getBadgeForUser(UserHandle user, Context context, int badgeSize) {
        if (mMyUser.equals(user)) {
            return null;
        }

        Bitmap badgeBitmap = getUserBadge(user, context);
        Bitmap badgeBitmap = getUserBadge(user, context, badgeSize);
        FastBitmapDrawable d = new FastBitmapDrawable(badgeBitmap);
        d.setFilterBitmap(true);
        d.setBounds(0, 0, badgeBitmap.getWidth(), badgeBitmap.getHeight());
        return d;
    }

    protected synchronized Bitmap getUserBadge(UserHandle user, Context context) {
    protected synchronized Bitmap getUserBadge(UserHandle user, Context context, int badgeSize) {
        Bitmap badgeBitmap = mUserBadges.get(user);
        if (badgeBitmap != null) {
            return badgeBitmap;
        }

        final Resources res = context.getApplicationContext().getResources();
        int badgeSize = res.getDimensionPixelSize(R.dimen.profile_badge_size);
        badgeBitmap = Bitmap.createBitmap(badgeSize, badgeSize, Bitmap.Config.ARGB_8888);

        Drawable drawable = context.getPackageManager().getUserBadgedDrawableForDensity(
+8 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.launcher3.SimpleOnStylusPressListener;
import com.android.launcher3.StylusEventHelper;
import com.android.launcher3.WidgetPreviewLoader;
import com.android.launcher3.graphics.DrawableFactory;
import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.model.WidgetItem;

/**
@@ -80,6 +81,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
    private Bitmap mDeferredBitmap;

    protected final BaseActivity mActivity;
    protected DeviceProfile mDeviceProfile;

    public WidgetCell(Context context) {
        this(context, null);
@@ -93,6 +95,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
        super(context, attrs, defStyle);

        mActivity = BaseActivity.fromContext(context);
        mDeviceProfile = mActivity.getDeviceProfile();
        mStylusEventHelper = new StylusEventHelper(new SimpleOnStylusPressListener(this), this);

        setContainerWidth();
@@ -102,8 +105,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
    }

    private void setContainerWidth() {
        DeviceProfile profile = mActivity.getDeviceProfile();
        mCellSize = (int) (profile.allAppsCellWidthPx * WIDTH_SCALE);
        mCellSize = (int) (mDeviceProfile.allAppsCellWidthPx * WIDTH_SCALE);
        mPresetPreviewSize = (int) (mCellSize * PREVIEW_SCALE);
    }

@@ -180,8 +182,10 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
            return;
        }
        if (bitmap != null) {
            mWidgetImage.setBitmap(bitmap, DrawableFactory.INSTANCE.get(getContext())
                    .getBadgeForUser(mItem.user, getContext()));
            mWidgetImage.setBitmap(bitmap,
                    DrawableFactory.INSTANCE.get(getContext()).getBadgeForUser(mItem.user,
                            getContext(), BaseIconFactory.getBadgeSizeForIconSize(
                                    mDeviceProfile.allAppsIconSizePx)));
            if (mAnimatePreview) {
                mWidgetImage.setAlpha(0f);
                ViewPropertyAnimator anim = mWidgetImage.animate();