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

Commit fe68150f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Predicted icon ring embellishments" into ub-launcher3-rvc-dev

parents e922b06c 9b7d9139
Loading
Loading
Loading
Loading
+36 −6
Original line number Diff line number Diff line
@@ -19,10 +19,13 @@ import static com.android.launcher3.accessibility.LauncherAccessibilityDelegate.
import static com.android.launcher3.graphics.IconShape.getShape;

import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.os.Process;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@@ -38,6 +41,7 @@ import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.graphics.IconPalette;
import com.android.launcher3.hybridhotseat.HotseatPredictionController;
import com.android.launcher3.icons.IconNormalizer;
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.touch.ItemClickHandler;
@@ -50,13 +54,18 @@ import com.android.launcher3.views.DoubleShadowBubbleTextView;
public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
        LauncherAccessibilityDelegate.AccessibilityActionHandler {

    private static final int RING_SHADOW_COLOR = 0x99000000;
    private static final float RING_EFFECT_RATIO = 0.11f;

    boolean mIsDrawingDot = false;
    private final DeviceProfile mDeviceProfile;
    private final Paint mIconRingPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private final Path mRingPath = new Path();
    private boolean mIsPinned = false;
    private int mNormalizedIconRadius;
    private final int mNormalizedIconRadius;
    private final BlurMaskFilter mShadowFilter;
    private int mPlateColor;


    public PredictedAppIcon(Context context) {
        this(context, null, 0);
@@ -72,13 +81,18 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
        mNormalizedIconRadius = IconNormalizer.getNormalizedCircleSize(getIconSize()) / 2;
        setOnClickListener(ItemClickHandler.INSTANCE);
        setOnFocusChangeListener(Launcher.getLauncher(context).getFocusHandler());
        int shadowSize = context.getResources().getDimensionPixelSize(
                R.dimen.blur_size_thin_outline);
        mShadowFilter = new BlurMaskFilter(shadowSize, BlurMaskFilter.Blur.OUTER);
    }

    @Override
    public void onDraw(Canvas canvas) {
        int count = canvas.save();
        if (!mIsPinned) {
            drawEffect(canvas);
            boolean isBadged = getTag() instanceof WorkspaceItemInfo
                    && !Process.myUserHandle().equals(((ItemInfo) getTag()).user);
            drawEffect(canvas, isBadged);
            canvas.translate(getWidth() * RING_EFFECT_RATIO, getHeight() * RING_EFFECT_RATIO);
            canvas.scale(1 - 2 * RING_EFFECT_RATIO, 1 - 2 * RING_EFFECT_RATIO);
        }
@@ -101,7 +115,7 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
    public void applyFromWorkspaceItem(WorkspaceItemInfo info) {
        super.applyFromWorkspaceItem(info);
        int color = IconPalette.getMutedColor(info.bitmap.color, 0.54f);
        mIconRingPaint.setColor(ColorUtils.setAlphaComponent(color, 200));
        mPlateColor = ColorUtils.setAlphaComponent(color, 200);
        if (mIsPinned) {
            setContentDescription(info.contentDescription);
        } else {
@@ -173,9 +187,25 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
        return getPaddingTop() + mDeviceProfile.folderIconOffsetYPx;
    }

    private void drawEffect(Canvas canvas) {
        getShape().drawShape(canvas, getOutlineOffsetX(), getOutlineOffsetY(),
                mNormalizedIconRadius, mIconRingPaint);
    private void drawEffect(Canvas canvas, boolean isBadged) {
        mRingPath.reset();
        getShape().addToPath(mRingPath, getOutlineOffsetX(), getOutlineOffsetY(),
                mNormalizedIconRadius);
        if (isBadged) {
            float outlineSize = mNormalizedIconRadius * RING_EFFECT_RATIO * 2;
            float iconSize = getIconSize() * (1 - 2 * RING_EFFECT_RATIO);
            float badgeSize = LauncherIcons.getBadgeSizeForIconSize((int) iconSize) + outlineSize;
            float badgeInset = mNormalizedIconRadius * 2 - badgeSize;
            getShape().addToPath(mRingPath, getOutlineOffsetX() + badgeInset,
                    getOutlineOffsetY() + badgeInset, badgeSize / 2);

        }
        mIconRingPaint.setColor(RING_SHADOW_COLOR);
        mIconRingPaint.setMaskFilter(mShadowFilter);
        canvas.drawPath(mRingPath, mIconRingPaint);
        mIconRingPaint.setColor(mPlateColor);
        mIconRingPaint.setMaskFilter(null);
        canvas.drawPath(path, mIconRingPaint);
    }

    /**