From aa038af6b3da0633c229f053c3f272bb452e4632 Mon Sep 17 00:00:00 2001 From: Samuel Fufa Date: Fri, 4 Oct 2019 16:37:12 -0700 Subject: Scale Icon badges for shortcut and widgets Test: Manual Bug: 141262820 Change-Id: I03edc986e3fe1876b6b7ed179b96864d587cb137 --- .../src/com/android/launcher3/icons/BaseIconFactory.java | 12 +++++++++++- src/com/android/launcher3/Utilities.java | 2 +- src/com/android/launcher3/graphics/DrawableFactory.java | 7 +++---- src/com/android/launcher3/widget/WidgetCell.java | 12 ++++++++---- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java index fc7d6b329..f491ed73f 100644 --- a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java +++ b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java @@ -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 diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 6ddebe75d..c5f26aaf1 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -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); diff --git a/src/com/android/launcher3/graphics/DrawableFactory.java b/src/com/android/launcher3/graphics/DrawableFactory.java index 288749fa7..837301fb8 100644 --- a/src/com/android/launcher3/graphics/DrawableFactory.java +++ b/src/com/android/launcher3/graphics/DrawableFactory.java @@ -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( diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index 412fb7ba6..6944879be 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -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(); -- cgit v1.2.3