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

Commit 72169102 authored by Jonathan Miranda's avatar Jonathan Miranda Committed by Android (Google) Code Review
Browse files

Merge "Scale widgets when dragging and dropping in multi-window mode." into ub-launcher3-master

parents 621e2006 f7ff3fe5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1041,7 +1041,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler {
                    // Offsets due to the size difference between the View and the dragOutline.
                    // There is a size difference to account for the outer blur, which may lie
                    // outside the bounds of the view.
                    top += (v.getHeight() - dragOutline.getHeight()) / 2;
                    top += ((mCellHeight * spanY) - dragOutline.getHeight()) / 2;
                    // We center about the x axis
                    left += ((mCellWidth * spanX) - dragOutline.getWidth()) / 2;
                } else {
+7 −7
Original line number Diff line number Diff line
@@ -3461,14 +3461,14 @@ public class Workspace extends PagedView
                mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(layout, loc, true);
        resetTransitionTransform(layout);

        float dragViewScaleX;
        float dragViewScaleY;
        float dragViewScaleX = 1f;
        float dragViewScaleY = 1f;
        if (scale) {
            dragViewScaleX = (1.0f * r.width()) / dragView.getMeasuredWidth();
            dragViewScaleY = (1.0f * r.height()) / dragView.getMeasuredHeight();
        } else {
            dragViewScaleX = 1f;
            dragViewScaleY = 1f;
            float width = info.spanX * layout.mCellWidth;
            float height = info.spanY * layout.mCellHeight;

            dragViewScaleX = r.width() / width;
            dragViewScaleY = r.height() / height;
        }

        // The animation will scale the dragView about its center, so we need to center about
+49 −10
Original line number Diff line number Diff line
@@ -24,7 +24,9 @@ import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.TextView;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppWidgetHostView;
import com.android.launcher3.PreloadIconDrawable;
import com.android.launcher3.Workspace;
import com.android.launcher3.config.ProviderConfig;
@@ -100,20 +102,31 @@ public class DragPreviewProvider {
     * Responsibility for the bitmap is transferred to the caller.
     */
    public Bitmap createDragBitmap(Canvas canvas) {
        Bitmap b;
        float scale = 1f;
        int width = mView.getWidth();
        int height = mView.getHeight();

        if (mView instanceof TextView) {
            Drawable d = Workspace.getTextViewIcon((TextView) mView);
            Rect bounds = getDrawableBounds(d);
            b = Bitmap.createBitmap(bounds.width() + DRAG_BITMAP_PADDING,
                    bounds.height() + DRAG_BITMAP_PADDING, Bitmap.Config.ARGB_8888);
        } else {
            b = Bitmap.createBitmap(mView.getWidth() + DRAG_BITMAP_PADDING,
                    mView.getHeight() + DRAG_BITMAP_PADDING, Bitmap.Config.ARGB_8888);
            width = bounds.width();
            height = bounds.height();
        } else if (mView instanceof LauncherAppWidgetHostView) {
            DeviceProfile profile = Launcher.getLauncher(mView.getContext()).getDeviceProfile();
            scale = Math.min(profile.appWidgetScale.x, profile.appWidgetScale.y);
            width = (int) (mView.getWidth() * scale);
            height = (int) (mView.getHeight() * scale);
        }

        Bitmap b = Bitmap.createBitmap(width + DRAG_BITMAP_PADDING, height + DRAG_BITMAP_PADDING,
                Bitmap.Config.ARGB_8888);
        canvas.setBitmap(b);

        canvas.save();
        canvas.scale(scale, scale);
        drawDragView(canvas);
        canvas.restore();

        canvas.setBitmap(null);

        return b;
@@ -132,12 +145,29 @@ public class DragPreviewProvider {
     * Responsibility for the bitmap is transferred to the caller.
     */
    public Bitmap createDragOutline(Canvas canvas) {
        final Bitmap b = Bitmap.createBitmap(mView.getWidth() + DRAG_BITMAP_PADDING,
                mView.getHeight() + DRAG_BITMAP_PADDING, Bitmap.Config.ALPHA_8);
        float scale = 1f;
        int width = mView.getWidth();
        int height = mView.getHeight();

        if (mView instanceof LauncherAppWidgetHostView) {
            DeviceProfile profile = Launcher.getLauncher(mView.getContext()).getDeviceProfile();
            scale = Math.min(profile.appWidgetScale.x, profile.appWidgetScale.y);
            width = (int) Math.floor(mView.getWidth() * scale);
            height = (int) Math.floor(mView.getHeight() * scale);
        }

        Bitmap b = Bitmap.createBitmap(width + DRAG_BITMAP_PADDING, height + DRAG_BITMAP_PADDING,
                Bitmap.Config.ALPHA_8);
        canvas.setBitmap(b);

        canvas.save();
        canvas.scale(scale, scale);
        drawDragView(canvas);
        canvas.restore();

        HolographicOutlineHelper.getInstance(mView.getContext())
                .applyExpensiveOutlineWithBlur(b, canvas);

        canvas.setBitmap(null);
        return b;
    }
@@ -160,8 +190,17 @@ public class DragPreviewProvider {
    public float getScaleAndPosition(Bitmap preview, int[] outPos) {
        float scale = Launcher.getLauncher(mView.getContext())
                .getDragLayer().getLocationInDragLayer(mView, outPos);
        outPos[0] = Math.round(outPos[0] - (preview.getWidth() - scale * mView.getWidth()) / 2);
        outPos[1] = Math.round(outPos[1] - (1 - scale) * preview.getHeight() / 2 - previewPadding / 2);
        DeviceProfile profile = Launcher.getLauncher(mView.getContext()).getDeviceProfile();
        if (mView instanceof LauncherAppWidgetHostView) {
            // App widgets are technically scaled, but are drawn at their expected size -- so the
            // app widget scale should not affect the scale of the preview.
            scale /= Math.min(profile.appWidgetScale.x, profile.appWidgetScale.y);
        }

        outPos[0] = Math.round(outPos[0] -
                (preview.getWidth() - scale * mView.getWidth() * mView.getScaleX()) / 2);
        outPos[1] = Math.round(outPos[1] - (1 - scale) * preview.getHeight() / 2
                - previewPadding / 2);
        return scale;
    }
}