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

Commit 167210a3 authored by Samuel Fufa's avatar Samuel Fufa
Browse files

Keep Predicted icon same size when dragging

-> In addition, this also prevents the drawing of ring effect for predicted icon when view is about to be copied to drag bitmap. Icon will scale to full size (without ring) when dropped.

Video attached to bug report

Bug: 152325754
Test: Manual
Change-Id: Ibd1a5dbf76c41bdc30ae851ad914a4d0e32703c8
parent 9a1beceb
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.touch.ItemClickHandler;
import com.android.launcher3.touch.ItemLongClickListener;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.views.DoubleShadowBubbleTextView;

/**
@@ -65,6 +66,7 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
    private final int mNormalizedIconRadius;
    private final BlurMaskFilter mShadowFilter;
    private int mPlateColor;
    boolean mDrawForDrag = false;


    public PredictedAppIcon(Context context) {
@@ -188,6 +190,10 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
    }

    private void drawEffect(Canvas canvas, boolean isBadged) {
        // Don't draw ring effect if item is about to be dragged.
        if (mDrawForDrag) {
            return;
        }
        mRingPath.reset();
        getShape().addToPath(mRingPath, getOutlineOffsetX(), getOutlineOffsetY(),
                mNormalizedIconRadius);
@@ -208,6 +214,26 @@ public class PredictedAppIcon extends DoubleShadowBubbleTextView implements
        canvas.drawPath(mRingPath, mIconRingPaint);
    }

    @Override
    public void getSourceVisualDragBounds(Rect bounds) {
        super.getSourceVisualDragBounds(bounds);
        if (!mIsPinned) {
            int internalSize = (int) (bounds.width() * RING_EFFECT_RATIO);
            bounds.inset(internalSize, internalSize);
        }
    }

    @Override
    public SafeCloseable prepareDrawDragView() {
        mDrawForDrag = true;
        invalidate();
        SafeCloseable r = super.prepareDrawDragView();
        return () -> {
            r.close();
            mDrawForDrag = false;
        };
    }

    /**
     * Creates and returns a new instance of PredictedAppIcon from WorkspaceItemInfo
     */
+3 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.model.data.PromiseAppInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.IconLabelDotView;

@@ -744,11 +745,12 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
    }

    @Override
    public void prepareDrawDragView() {
    public SafeCloseable prepareDrawDragView() {
        if (getIcon() instanceof FastBitmapDrawable) {
            FastBitmapDrawable icon = (FastBitmapDrawable) getIcon();
            icon.setScale(1f);
        }
        setForceHideDot(true);
        return () -> { };
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@ package com.android.launcher3.dragndrop;

import android.graphics.Rect;

import androidx.annotation.NonNull;

import com.android.launcher3.util.SafeCloseable;

/**
 * Interface defining methods required for drawing and previewing DragViews, drag previews, and
 * related animations
@@ -42,9 +46,12 @@ public interface DraggableView {
    int getViewType();

    /**
     * Before rendering as a DragView bitmap, some views need a preparation step.
     * Before rendering as a DragView bitmap, some views need a preparation step. Returns a
     * callback to clear any preparation work
     */
    default void prepareDrawDragView() { }
    @NonNull default SafeCloseable prepareDrawDragView() {
        return () -> { };
    }

    /**
     * If an actual View subclass, this method returns the rectangle (within the View's coordinates)
+7 −5
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.launcher3.R;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DraggableView;
import com.android.launcher3.icons.BitmapRenderer;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.widget.LauncherAppWidgetHostView;

import java.nio.ByteBuffer;
@@ -76,12 +77,13 @@ public class DragPreviewProvider {

        if (mView instanceof DraggableView) {
            DraggableView dv = (DraggableView) mView;
            dv.prepareDrawDragView();
            try (SafeCloseable t = dv.prepareDrawDragView()) {
                dv.getSourceVisualDragBounds(mTempRect);
                destCanvas.translate(blurSizeOutline / 2 - mTempRect.left,
                        blurSizeOutline / 2 - mTempRect.top);
                mView.draw(destCanvas);
            }
        }
        destCanvas.restoreToCount(saveCount);
    }