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

am: f2d486e5b0

Change-Id: I5c2c115b1ee42489d969ff30c48abf00d4a5a3f7
This commit is contained in:
Samuel Fufa 2019-10-07 18:56:02 -07:00 committed by android-build-merger
commit 023188e424
4 changed files with 23 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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