Updating icon badging logic
Bug: 201682172 Test: Manual Change-Id: I57421b0c77e12f1cd464e532d2a1383c2cf93981
This commit is contained in:
@@ -27,9 +27,7 @@ import android.content.res.Resources;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Bundle;
|
||||
import android.os.Process;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.AttributeSet;
|
||||
@@ -449,7 +447,7 @@ public class AutoInstallsLayout {
|
||||
// Auto installs should always support the current platform version.
|
||||
LauncherIcons li = LauncherIcons.obtain(mContext);
|
||||
mValues.put(LauncherSettings.Favorites.ICON, GraphicsUtils.flattenBitmap(
|
||||
li.createBadgedIconBitmap(icon, Process.myUserHandle(), VERSION.SDK_INT).icon));
|
||||
li.createBadgedIconBitmap(icon).icon));
|
||||
li.recycle();
|
||||
|
||||
mValues.put(Favorites.ICON_PACKAGE, mIconRes.getResourcePackageName(iconId));
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.android.launcher3;
|
||||
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_ICON_LABEL_AUTO_SCALING;
|
||||
import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon;
|
||||
import static com.android.launcher3.icons.BitmapInfo.FLAG_NO_BADGE;
|
||||
import static com.android.launcher3.icons.BitmapInfo.FLAG_THEMED;
|
||||
import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound;
|
||||
|
||||
import android.animation.Animator;
|
||||
@@ -144,6 +146,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
|
||||
private final boolean mIsRtl;
|
||||
private final int mIconSize;
|
||||
|
||||
@ViewDebug.ExportedProperty(category = "launcher")
|
||||
private boolean mHideBadge = false;
|
||||
@ViewDebug.ExportedProperty(category = "launcher")
|
||||
private boolean mIsIconVisible = true;
|
||||
@ViewDebug.ExportedProperty(category = "launcher")
|
||||
@@ -241,6 +245,10 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
|
||||
super.onFocusChanged(focused, direction, previouslyFocusedRect);
|
||||
}
|
||||
|
||||
public void setHideBadge(boolean hideBadge) {
|
||||
mHideBadge = hideBadge;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the view so it can be recycled.
|
||||
*/
|
||||
@@ -364,7 +372,11 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
|
||||
protected void applyIconAndLabel(ItemInfoWithIcon info) {
|
||||
boolean useTheme = mDisplay == DISPLAY_WORKSPACE || mDisplay == DISPLAY_FOLDER
|
||||
|| mDisplay == DISPLAY_TASKBAR;
|
||||
FastBitmapDrawable iconDrawable = info.newIcon(getContext(), useTheme);
|
||||
int flags = useTheme ? FLAG_THEMED : 0;
|
||||
if (mHideBadge) {
|
||||
flags |= FLAG_NO_BADGE;
|
||||
}
|
||||
FastBitmapDrawable iconDrawable = info.newIcon(getContext(), flags);
|
||||
mDotParams.color = IconPalette.getMutedColor(iconDrawable.getIconColor(), 0.54f);
|
||||
|
||||
setIcon(iconDrawable);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.launcher3;
|
||||
|
||||
import static com.android.launcher3.icons.BitmapInfo.FLAG_THEMED;
|
||||
import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ICON_BADGED;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
@@ -36,7 +37,6 @@ import android.content.pm.ShortcutInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.LightingColorFilter;
|
||||
@@ -48,12 +48,12 @@ import android.graphics.RectF;
|
||||
import android.graphics.drawable.AdaptiveIconDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.InsetDrawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.DeadObjectException;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.Process;
|
||||
import android.os.TransactionTooLargeException;
|
||||
import android.provider.Settings;
|
||||
import android.text.Spannable;
|
||||
@@ -78,7 +78,6 @@ import com.android.launcher3.graphics.GridCustomizationsProvider;
|
||||
import com.android.launcher3.graphics.TintedDrawableSpan;
|
||||
import com.android.launcher3.icons.BitmapInfo;
|
||||
import com.android.launcher3.icons.FastBitmapDrawable;
|
||||
import com.android.launcher3.icons.LauncherIcons;
|
||||
import com.android.launcher3.icons.ShortcutCachingLogic;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.model.data.ItemInfoWithIcon;
|
||||
@@ -110,8 +109,6 @@ public final class Utilities {
|
||||
private static final Pattern sTrimPattern =
|
||||
Pattern.compile("^[\\s|\\p{javaSpaceChar}]*(.*)[\\s|\\p{javaSpaceChar}]*$");
|
||||
|
||||
private static final float[] sTmpFloatArray = new float[4];
|
||||
|
||||
private static final int[] sLoc0 = new int[2];
|
||||
private static final int[] sLoc1 = new int[2];
|
||||
private static final Matrix sMatrix = new Matrix();
|
||||
@@ -738,27 +735,23 @@ public final class Utilities {
|
||||
@TargetApi(Build.VERSION_CODES.O)
|
||||
public static Drawable getBadge(Context context, ItemInfo info, Object obj) {
|
||||
LauncherAppState appState = LauncherAppState.getInstance(context);
|
||||
int iconSize = appState.getInvariantDeviceProfile().iconBitmapSize;
|
||||
if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
|
||||
boolean iconBadged = (info instanceof ItemInfoWithIcon)
|
||||
&& (((ItemInfoWithIcon) info).runtimeStatusFlags & FLAG_ICON_BADGED) > 0;
|
||||
if ((info.id == ItemInfo.NO_ID && !iconBadged)
|
||||
|| !(obj instanceof ShortcutInfo)) {
|
||||
// The item is not yet added on home screen.
|
||||
return new FixedSizeEmptyDrawable(iconSize);
|
||||
return new ColorDrawable(Color.TRANSPARENT);
|
||||
}
|
||||
ShortcutInfo si = (ShortcutInfo) obj;
|
||||
Bitmap badge = LauncherAppState.getInstance(appState.getContext())
|
||||
.getIconCache().getShortcutInfoBadge(si).icon;
|
||||
float badgeSize = LauncherIcons.getBadgeSizeForIconSize(iconSize);
|
||||
float insetFraction = (iconSize - badgeSize) / iconSize;
|
||||
return new InsetDrawable(new FastBitmapDrawable(badge),
|
||||
insetFraction, insetFraction, 0, 0);
|
||||
return LauncherAppState.getInstance(appState.getContext())
|
||||
.getIconCache().getShortcutInfoBadge(si).newIcon(context, FLAG_THEMED);
|
||||
} else if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) {
|
||||
return ((FolderAdaptiveIcon) obj).getBadge();
|
||||
} else {
|
||||
return context.getPackageManager()
|
||||
.getUserBadgedIcon(new FixedSizeEmptyDrawable(iconSize), info.user);
|
||||
return Process.myUserHandle().equals(info.user)
|
||||
? new ColorDrawable(Color.TRANSPARENT)
|
||||
: context.getDrawable(R.drawable.ic_work_app_badge);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -864,24 +857,4 @@ public final class Utilities {
|
||||
v.getLocationOnScreen(pos);
|
||||
return new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1] + v.getHeight());
|
||||
}
|
||||
|
||||
private static class FixedSizeEmptyDrawable extends ColorDrawable {
|
||||
|
||||
private final int mSize;
|
||||
|
||||
public FixedSizeEmptyDrawable(int size) {
|
||||
super(Color.TRANSPARENT);
|
||||
mSize = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntrinsicHeight() {
|
||||
return mSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntrinsicWidth() {
|
||||
return mSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import static android.view.View.MeasureSpec.makeMeasureSpec;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
|
||||
import static com.android.launcher3.Utilities.getBadge;
|
||||
import static com.android.launcher3.icons.FastBitmapDrawable.getDisabledColorFilter;
|
||||
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
|
||||
|
||||
import android.animation.Animator;
|
||||
@@ -31,9 +32,9 @@ import android.animation.ValueAnimator;
|
||||
import android.animation.ValueAnimator.AnimatorUpdateListener;
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.Picture;
|
||||
import android.graphics.Point;
|
||||
@@ -225,9 +226,8 @@ public abstract class DragView<T extends Context & ActivityContext> extends Fram
|
||||
bounds.inset(blurMargin, blurMargin);
|
||||
// Badge is applied after icon normalization so the bounds for badge should not
|
||||
// be scaled down due to icon normalization.
|
||||
Rect badgeBounds = new Rect(bounds);
|
||||
mBadge = getBadge(mActivity, info, outObj[0]);
|
||||
mBadge.setBounds(badgeBounds);
|
||||
FastBitmapDrawable.setBadgeBounds(mBadge, bounds);
|
||||
|
||||
// Do not draw the background in case of folder as its translucent
|
||||
final boolean shouldDrawBackground = !(dr instanceof FolderAdaptiveIcon);
|
||||
@@ -280,11 +280,10 @@ public abstract class DragView<T extends Context & ActivityContext> extends Fram
|
||||
removeAllViewsInLayout();
|
||||
|
||||
if (info.isDisabled()) {
|
||||
FastBitmapDrawable d = new FastBitmapDrawable((Bitmap) null);
|
||||
d.setIsDisabled(true);
|
||||
mBgSpringDrawable.setColorFilter(d.getColorFilter());
|
||||
mFgSpringDrawable.setColorFilter(d.getColorFilter());
|
||||
mBadge.setColorFilter(d.getColorFilter());
|
||||
ColorFilter filter = getDisabledColorFilter();
|
||||
mBgSpringDrawable.setColorFilter(filter);
|
||||
mFgSpringDrawable.setColorFilter(filter);
|
||||
mBadge.setColorFilter(filter);
|
||||
}
|
||||
invalidate();
|
||||
}));
|
||||
|
||||
@@ -21,6 +21,7 @@ import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.EXIT_INDE
|
||||
import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
|
||||
import static com.android.launcher3.folder.FolderIcon.DROP_IN_ANIMATION_DURATION;
|
||||
import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon;
|
||||
import static com.android.launcher3.icons.BitmapInfo.FLAG_THEMED;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -429,7 +430,7 @@ public class PreviewItemManager {
|
||||
drawable.setLevel(item.getProgressLevel());
|
||||
p.drawable = drawable;
|
||||
} else {
|
||||
p.drawable = item.newIcon(mContext, true);
|
||||
p.drawable = item.newIcon(mContext, FLAG_THEMED);
|
||||
}
|
||||
p.drawable.setBounds(0, 0, mIconSize, mIconSize);
|
||||
p.item = item;
|
||||
|
||||
@@ -43,7 +43,6 @@ import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Process;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.ContextThemeWrapper;
|
||||
@@ -202,10 +201,10 @@ public class LauncherPreviewRenderer extends ContextWrapper
|
||||
|
||||
BaseIconFactory iconFactory =
|
||||
new BaseIconFactory(context, mIdp.fillResIconDpi, mIdp.iconBitmapSize) { };
|
||||
BitmapInfo iconInfo = iconFactory.createBadgedIconBitmap(new AdaptiveIconDrawable(
|
||||
new ColorDrawable(Color.WHITE), new ColorDrawable(Color.WHITE)),
|
||||
Process.myUserHandle(),
|
||||
Build.VERSION.SDK_INT);
|
||||
BitmapInfo iconInfo = iconFactory.createBadgedIconBitmap(
|
||||
new AdaptiveIconDrawable(
|
||||
new ColorDrawable(Color.WHITE),
|
||||
new ColorDrawable(Color.WHITE)));
|
||||
|
||||
mWorkspaceItemInfo = new WorkspaceItemInfo();
|
||||
mWorkspaceItemInfo.bitmap = iconInfo;
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.graphics.drawable.Drawable;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.icons.BaseIconFactory.IconOptions;
|
||||
|
||||
/**
|
||||
* Extension of ComponentWithLabel to also support loading icons
|
||||
@@ -47,7 +48,7 @@ public interface ComponentWithLabelAndIcon extends ComponentWithLabel {
|
||||
return super.loadIcon(context, object);
|
||||
}
|
||||
try (LauncherIcons li = LauncherIcons.obtain(context)) {
|
||||
return li.createBadgedIconBitmap(d, object.getUser(), 0);
|
||||
return li.createBadgedIconBitmap(d, new IconOptions().setUser(object.getUser()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,14 +216,7 @@ public class IconCache extends BaseIconCache {
|
||||
* Fill in {@param info} with the icon for {@param si}
|
||||
*/
|
||||
public void getShortcutIcon(ItemInfoWithIcon info, ShortcutInfo si) {
|
||||
getShortcutIcon(info, si, true, mIsUsingFallbackOrNonDefaultIconCheck);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill in {@param info} with an unbadged icon for {@param si}
|
||||
*/
|
||||
public void getUnbadgedShortcutIcon(ItemInfoWithIcon info, ShortcutInfo si) {
|
||||
getShortcutIcon(info, si, false, mIsUsingFallbackOrNonDefaultIconCheck);
|
||||
getShortcutIcon(info, si, mIsUsingFallbackOrNonDefaultIconCheck);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -232,11 +225,6 @@ public class IconCache extends BaseIconCache {
|
||||
*/
|
||||
public <T extends ItemInfoWithIcon> void getShortcutIcon(T info, ShortcutInfo si,
|
||||
@NonNull Predicate<T> fallbackIconCheck) {
|
||||
getShortcutIcon(info, si, true /* use badged */, fallbackIconCheck);
|
||||
}
|
||||
|
||||
private synchronized <T extends ItemInfoWithIcon> void getShortcutIcon(T info, ShortcutInfo si,
|
||||
boolean useBadged, @NonNull Predicate<T> fallbackIconCheck) {
|
||||
BitmapInfo bitmapInfo;
|
||||
if (FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) {
|
||||
bitmapInfo = cacheLocked(ShortcutKey.fromInfo(si).componentName, si.getUserHandle(),
|
||||
@@ -252,13 +240,7 @@ public class IconCache extends BaseIconCache {
|
||||
if (isDefaultIcon(bitmapInfo, si.getUserHandle()) && fallbackIconCheck.test(info)) {
|
||||
return;
|
||||
}
|
||||
info.bitmap = bitmapInfo;
|
||||
if (useBadged) {
|
||||
BitmapInfo badgeInfo = getShortcutInfoBadge(si);
|
||||
try (LauncherIcons li = LauncherIcons.obtain(mContext)) {
|
||||
info.bitmap = li.badgeBitmap(info.bitmap.icon, badgeInfo);
|
||||
}
|
||||
}
|
||||
info.bitmap = bitmapInfo.withBadgeInfo(getShortcutInfoBadge(si));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.os.UserHandle;
|
||||
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.icons.BaseIconFactory.IconOptions;
|
||||
import com.android.launcher3.icons.cache.CachingLogic;
|
||||
import com.android.launcher3.util.ResourceBasedOverride;
|
||||
|
||||
@@ -59,7 +60,7 @@ public class LauncherActivityCachingLogic
|
||||
try (LauncherIcons li = LauncherIcons.obtain(context)) {
|
||||
return li.createBadgedIconBitmap(LauncherAppState.getInstance(context)
|
||||
.getIconProvider().getIcon(object, li.mFillResIconDpi),
|
||||
object.getUser(), object.getApplicationInfo().targetSdkVersion);
|
||||
new IconOptions().setUser(object.getUser()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,8 +71,8 @@ public class ShortcutCachingLogic implements CachingLogic<ShortcutInfo> {
|
||||
Drawable unbadgedDrawable = ShortcutCachingLogic.getIcon(
|
||||
context, info, LauncherAppState.getIDP(context).fillResIconDpi);
|
||||
if (unbadgedDrawable == null) return BitmapInfo.LOW_RES_INFO;
|
||||
return new BitmapInfo(li.createScaledBitmapWithoutShadow(
|
||||
unbadgedDrawable, 0), Themes.getColorAccent(context));
|
||||
return new BitmapInfo(li.createScaledBitmapWithoutShadow(unbadgedDrawable),
|
||||
Themes.getColorAccent(context));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.content.Intent;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.icons.BitmapInfo;
|
||||
import com.android.launcher3.icons.BitmapInfo.DrawableCreationFlags;
|
||||
import com.android.launcher3.icons.FastBitmapDrawable;
|
||||
import com.android.launcher3.logging.FileLog;
|
||||
import com.android.launcher3.pm.PackageInstallInfo;
|
||||
@@ -230,15 +231,14 @@ public abstract class ItemInfoWithIcon extends ItemInfo {
|
||||
* Returns a FastBitmapDrawable with the icon.
|
||||
*/
|
||||
public FastBitmapDrawable newIcon(Context context) {
|
||||
return newIcon(context, false);
|
||||
return newIcon(context, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a FastBitmapDrawable with the icon and context theme applied
|
||||
*/
|
||||
public FastBitmapDrawable newIcon(Context context, boolean applyTheme) {
|
||||
FastBitmapDrawable drawable = applyTheme
|
||||
? bitmap.newThemedIcon(context) : bitmap.newIcon(context);
|
||||
public FastBitmapDrawable newIcon(Context context, @DrawableCreationFlags int creationFlags) {
|
||||
FastBitmapDrawable drawable = bitmap.newIcon(context, creationFlags);
|
||||
drawable.setIsDisabled(isDisabled());
|
||||
return drawable;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ import androidx.annotation.Nullable;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherModel;
|
||||
import com.android.launcher3.LauncherSettings;
|
||||
import com.android.launcher3.icons.LauncherIcons;
|
||||
import com.android.launcher3.logger.LauncherAtom.ItemInfo;
|
||||
import com.android.launcher3.logger.LauncherAtom.SearchActionItem;
|
||||
import com.android.launcher3.model.AllAppsList;
|
||||
@@ -176,9 +175,7 @@ public class SearchActionItemInfo extends ItemInfoWithIcon {
|
||||
model.updateAndBindWorkspaceItem(() -> {
|
||||
PackageItemInfo pkgInfo = new PackageItemInfo(getIntentPackageName(), user);
|
||||
app.getIconCache().getTitleAndIconForApp(pkgInfo, false);
|
||||
try (LauncherIcons li = LauncherIcons.obtain(app.getContext())) {
|
||||
info.bitmap = li.badgeBitmap(info.bitmap.icon, pkgInfo.bitmap);
|
||||
}
|
||||
info.bitmap = info.bitmap.withBadgeInfo(pkgInfo.bitmap);
|
||||
return info;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ public class PopupPopulator {
|
||||
for (int i = 0; i < shortcuts.size() && i < shortcutViews.size(); i++) {
|
||||
final ShortcutInfo shortcut = shortcuts.get(i);
|
||||
final WorkspaceItemInfo si = new WorkspaceItemInfo(shortcut, context);
|
||||
cache.getUnbadgedShortcutIcon(si, shortcut);
|
||||
cache.getShortcutIcon(si, shortcut);
|
||||
si.rank = i;
|
||||
si.container = CONTAINER_SHORTCUTS;
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ public class DeepShortcutView extends FrameLayout implements BubbleTextHolder {
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mBubbleText = findViewById(R.id.bubble_text);
|
||||
mBubbleText.setHideBadge(true);
|
||||
mIconView = findViewById(R.id.icon);
|
||||
tryUpdateTextBackground();
|
||||
}
|
||||
|
||||
@@ -338,15 +338,13 @@ public class FloatingIconView extends FrameLayout implements
|
||||
setLayoutParams(lp);
|
||||
|
||||
final LayoutParams clipViewLp = (LayoutParams) mClipIconView.getLayoutParams();
|
||||
final int clipViewOgHeight = clipViewLp.height;
|
||||
final int clipViewOgWidth = clipViewLp.width;
|
||||
if (mBadge != null) {
|
||||
Rect badgeBounds = new Rect(0, 0, clipViewLp.width, clipViewLp.height);
|
||||
FastBitmapDrawable.setBadgeBounds(mBadge, badgeBounds);
|
||||
}
|
||||
clipViewLp.width = lp.width;
|
||||
clipViewLp.height = lp.height;
|
||||
mClipIconView.setLayoutParams(clipViewLp);
|
||||
|
||||
if (mBadge != null) {
|
||||
mBadge.setBounds(0, 0, clipViewOgWidth, clipViewOgHeight);
|
||||
}
|
||||
}
|
||||
|
||||
if (!mIsOpening && btvIcon != null) {
|
||||
|
||||
@@ -25,15 +25,10 @@ import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffXfermode;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Handler;
|
||||
import android.os.Process;
|
||||
import android.os.UserHandle;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
import android.util.Size;
|
||||
|
||||
@@ -44,7 +39,6 @@ import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.icons.BitmapRenderer;
|
||||
import com.android.launcher3.icons.FastBitmapDrawable;
|
||||
import com.android.launcher3.icons.LauncherIcons;
|
||||
import com.android.launcher3.icons.ShadowGenerator;
|
||||
import com.android.launcher3.icons.cache.HandlerRunnable;
|
||||
@@ -65,9 +59,6 @@ public class DatabaseWidgetPreviewLoader {
|
||||
private final Context mContext;
|
||||
private final float mPreviewBoxCornerRadius;
|
||||
|
||||
private final UserHandle mMyUser = Process.myUserHandle();
|
||||
private final ArrayMap<UserHandle, Bitmap> mUserBadges = new ArrayMap<>();
|
||||
|
||||
public DatabaseWidgetPreviewLoader(Context context) {
|
||||
mContext = context;
|
||||
float previewCornerRadius = RoundedCornerEnforcement.computeEnforcedRadius(context);
|
||||
@@ -108,52 +99,6 @@ public class DatabaseWidgetPreviewLoader {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a drawable that can be used as a badge for the user or null.
|
||||
*/
|
||||
// @UiThread
|
||||
public Drawable getBadgeForUser(UserHandle user, int badgeSize) {
|
||||
if (mMyUser.equals(user)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Bitmap badgeBitmap = getUserBadge(user, badgeSize);
|
||||
FastBitmapDrawable d = new FastBitmapDrawable(badgeBitmap);
|
||||
d.setFilterBitmap(true);
|
||||
d.setBounds(0, 0, badgeBitmap.getWidth(), badgeBitmap.getHeight());
|
||||
return d;
|
||||
}
|
||||
|
||||
private Bitmap getUserBadge(UserHandle user, int badgeSize) {
|
||||
synchronized (mUserBadges) {
|
||||
Bitmap badgeBitmap = mUserBadges.get(user);
|
||||
if (badgeBitmap != null) {
|
||||
return badgeBitmap;
|
||||
}
|
||||
|
||||
final Resources res = mContext.getResources();
|
||||
badgeBitmap = Bitmap.createBitmap(badgeSize, badgeSize, Bitmap.Config.ARGB_8888);
|
||||
|
||||
Drawable drawable = mContext.getPackageManager().getUserBadgedDrawableForDensity(
|
||||
new BitmapDrawable(res, badgeBitmap), user,
|
||||
new Rect(0, 0, badgeSize, badgeSize),
|
||||
0);
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
badgeBitmap = ((BitmapDrawable) drawable).getBitmap();
|
||||
} else {
|
||||
badgeBitmap.eraseColor(Color.TRANSPARENT);
|
||||
Canvas c = new Canvas(badgeBitmap);
|
||||
drawable.setBounds(0, 0, badgeSize, badgeSize);
|
||||
drawable.draw(c);
|
||||
c.setBitmap(null);
|
||||
}
|
||||
|
||||
mUserBadges.put(user, badgeBitmap);
|
||||
return badgeBitmap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates the widget preview from either the {@link WidgetManagerHelper} or cache
|
||||
* and add badge at the bottom right corner.
|
||||
@@ -318,8 +263,8 @@ public class DatabaseWidgetPreviewLoader {
|
||||
LauncherIcons li = LauncherIcons.obtain(mContext);
|
||||
Drawable icon = li.createBadgedIconBitmap(
|
||||
mutateOnMainThread(info.getFullResIcon(
|
||||
LauncherAppState.getInstance(mContext).getIconCache())),
|
||||
Process.myUserHandle(), 0).newIcon(mContext);
|
||||
LauncherAppState.getInstance(mContext).getIconCache())))
|
||||
.newIcon(mContext);
|
||||
li.recycle();
|
||||
|
||||
icon.setBounds(padding, padding, padding + iconSize, padding + iconSize);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3.widget;
|
||||
|
||||
import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon;
|
||||
import static com.android.launcher3.icons.FastBitmapDrawable.getDisabledColorFilter;
|
||||
import static com.android.launcher3.widget.WidgetSections.getWidgetSections;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -159,8 +160,7 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
|
||||
disabledIcon.setIsDisabled(true);
|
||||
mCenterDrawable = disabledIcon;
|
||||
} else {
|
||||
widgetCategoryIcon.setColorFilter(
|
||||
FastBitmapDrawable.getDisabledFColorFilter(/* disabledAlpha= */ 1f));
|
||||
widgetCategoryIcon.setColorFilter(getDisabledColorFilter());
|
||||
mCenterDrawable = widgetCategoryIcon;
|
||||
}
|
||||
mSettingIconDrawable = null;
|
||||
|
||||
@@ -181,8 +181,7 @@ public class PendingItemDragHelper extends DragPreviewProvider {
|
||||
PendingAddShortcutInfo createShortcutInfo = (PendingAddShortcutInfo) mAddInfo;
|
||||
Drawable icon = createShortcutInfo.activityInfo.getFullResIcon(app.getIconCache());
|
||||
LauncherIcons li = LauncherIcons.obtain(launcher);
|
||||
preview = new FastBitmapDrawable(
|
||||
li.createScaledBitmapWithoutShadow(icon, 0));
|
||||
preview = new FastBitmapDrawable(li.createScaledBitmapWithoutShadow(icon));
|
||||
previewWidth = preview.getIntrinsicWidth();
|
||||
previewHeight = preview.getIntrinsicHeight();
|
||||
li.recycle();
|
||||
|
||||
@@ -26,6 +26,7 @@ import static com.android.launcher3.Utilities.ATLEAST_S;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Process;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.util.Size;
|
||||
@@ -48,7 +49,6 @@ import com.android.launcher3.CheckLongPressHelper;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.icons.BaseIconFactory;
|
||||
import com.android.launcher3.icons.FastBitmapDrawable;
|
||||
import com.android.launcher3.icons.RoundDrawableWrapper;
|
||||
import com.android.launcher3.icons.cache.HandlerRunnable;
|
||||
@@ -372,14 +372,11 @@ public class WidgetCell extends LinearLayout {
|
||||
/** Used to show the badge when the widget is in the recommended section
|
||||
*/
|
||||
public void showBadge() {
|
||||
Drawable badge = mWidgetPreviewLoader.getBadgeForUser(mItem.user,
|
||||
BaseIconFactory.getBadgeSizeForIconSize(
|
||||
mActivity.getDeviceProfile().allAppsIconSizePx));
|
||||
if (badge == null) {
|
||||
if (Process.myUserHandle().equals(mItem.user)) {
|
||||
mWidgetBadge.setVisibility(View.GONE);
|
||||
} else {
|
||||
mWidgetBadge.setVisibility(View.VISIBLE);
|
||||
mWidgetBadge.setImageDrawable(badge);
|
||||
mWidgetBadge.setImageResource(R.drawable.ic_work_app_badge);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user