Merge "Scale Icon badges for shortcut and widgets" into ub-launcher3-qt-future-dev
am: f2d486e5b0
Change-Id: I5c2c115b1ee42489d969ff30c48abf00d4a5a3f7
This commit is contained in:
commit
023188e424
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue