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

Commit 2b123833 authored by Steven Ng's avatar Steven Ng
Browse files

Scale RemoteViews from requestPinAppWidget shown in AddItemActivity

Test: manual
Bug: 193144010

Change-Id: Ia2b64c32f92a43a8d71ee82f164543e1e624814a
parent a1ef7b3c
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -189,10 +189,18 @@ public class AddItemActivity extends BaseActivity
        if (appWidgetHostView != null) {
            bounds = new Rect();
            appWidgetHostView.getSourceVisualDragBounds(bounds);
            bounds.offset(appWidgetHostView.getLeft() - (int) mLastTouchPos.x,
                    appWidgetHostView.getTop() - (int) mLastTouchPos.y);
            listener = new PinItemDragListener(mRequest, bounds,
                    appWidgetHostView.getMeasuredWidth(), appWidgetHostView.getMeasuredWidth());
            float appWidgetHostViewScale = mWidgetCell.getAppWidgetHostViewScale();
            int xOffset =
                    appWidgetHostView.getLeft() - (int) (mLastTouchPos.x * appWidgetHostViewScale);
            int yOffset = appWidgetHostView.getTop()
                    - (int) (mLastTouchPos.y * mWidgetCell.getAppWidgetHostViewScale());
            bounds.offset(xOffset, yOffset);
            listener = new PinItemDragListener(
                    mRequest,
                    bounds,
                    appWidgetHostView.getMeasuredWidth(),
                    appWidgetHostView.getMeasuredWidth(),
                    appWidgetHostView.getScaleX());
        } else {
            bounds = img.getBitmapBounds();
            bounds.offset(img.getLeft() - (int) mLastTouchPos.x,
+8 −1
Original line number Diff line number Diff line
@@ -48,12 +48,19 @@ public class PinItemDragListener extends BaseItemDragListener {

    private final PinItemRequest mRequest;
    private final CancellationSignal mCancelSignal;
    private final float mPreviewScale;

    public PinItemDragListener(PinItemRequest request, Rect previewRect,
            int previewBitmapWidth, int previewViewWidth) {
        this(request, previewRect, previewBitmapWidth, previewViewWidth, /* previewScale= */ 1f);
    }

    public PinItemDragListener(PinItemRequest request, Rect previewRect,
            int previewBitmapWidth, int previewViewWidth, float previewScale) {
        super(previewRect, previewBitmapWidth, previewViewWidth);
        mRequest = request;
        mCancelSignal = new CancellationSignal();
        mPreviewScale = previewScale;
    }

    @Override
@@ -98,7 +105,7 @@ public class PinItemDragListener extends BaseItemDragListener {

        PendingItemDragHelper dragHelper = new PendingItemDragHelper(view);
        if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_APPWIDGET) {
            dragHelper.setRemoteViewsPreview(getPreview(mRequest));
            dragHelper.setRemoteViewsPreview(getPreview(mRequest), mPreviewScale);
        }
        return dragHelper;
    }
+3 −1
Original line number Diff line number Diff line
@@ -176,7 +176,9 @@ public abstract class BaseWidgetSheet extends AbstractSlideInView<Launcher>
        }

        PendingItemDragHelper dragHelper = new PendingItemDragHelper(v);
        dragHelper.setRemoteViewsPreview(v.getRemoteViewsPreview());
        // RemoteViews are being rendered in AppWidgetHostView in WidgetCell. And thus, the scale of
        // RemoteViews is equivalent to the AppWidgetHostView scale.
        dragHelper.setRemoteViewsPreview(v.getRemoteViewsPreview(), v.getAppWidgetHostViewScale());
        dragHelper.setAppWidgetHostViewPreview(v.getAppWidgetHostViewPreview());

        if (image.getDrawable() != null) {
+13 −7
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.Size;
import android.view.View;
import android.view.View.MeasureSpec;
import android.widget.RemoteViews;
@@ -41,6 +42,7 @@ import com.android.launcher3.icons.FastBitmapDrawable;
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.icons.RoundDrawableWrapper;
import com.android.launcher3.widget.dragndrop.AppWidgetHostViewDragListener;
import com.android.launcher3.widget.util.WidgetSizes;

/**
 * Extension of {@link DragPreviewProvider} with logic specific to pending widgets/shortcuts
@@ -54,6 +56,7 @@ public class PendingItemDragHelper extends DragPreviewProvider {
    private int[] mEstimatedCellSize;

    @Nullable private RemoteViews mRemoteViewsPreview;
    private float mRemoteViewsPreviewScale = 1f;
    @Nullable private NavigableAppWidgetHostView mAppWidgetHostViewPreview;
    private final float mEnforcedRoundedCornersForWidget;

@@ -68,8 +71,10 @@ public class PendingItemDragHelper extends DragPreviewProvider {
     * Sets a {@link RemoteViews} which shows an app widget preview provided by app developers in
     * the pin widget flow.
     */
    public void setRemoteViewsPreview(@Nullable RemoteViews remoteViewsPreview) {
    public void setRemoteViewsPreview(@Nullable RemoteViews remoteViewsPreview,
            float previewScale) {
        mRemoteViewsPreview = remoteViewsPreview;
        mRemoteViewsPreviewScale = previewScale;
    }

    /** Sets a {@link NavigableAppWidgetHostView} which shows a preview layout of an app widget. */
@@ -120,13 +125,14 @@ public class PendingItemDragHelper extends DragPreviewProvider {
                mAppWidgetHostViewPreview.setPadding(padding.left, padding.top, padding.right,
                        padding.bottom);
                mAppWidgetHostViewPreview.updateAppWidget(/* remoteViews= */ mRemoteViewsPreview);
                int width =
                        deviceProfile.cellWidthPx * mAddInfo.spanX + padding.left + padding.right;
                int height =
                        deviceProfile.cellHeightPx * mAddInfo.spanY + padding.top + padding.bottom;
                Size widgetSizes = WidgetSizes.getWidgetPaddedSizePx(launcher,
                        mAddInfo.componentName, deviceProfile, mAddInfo.spanX, mAddInfo.spanY);
                mAppWidgetHostViewPreview.measure(
                        MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
                        MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
                        MeasureSpec.makeMeasureSpec(widgetSizes.getWidth(), MeasureSpec.EXACTLY),
                        MeasureSpec.makeMeasureSpec(widgetSizes.getHeight(), MeasureSpec.EXACTLY));
                mAppWidgetHostViewPreview.setClipChildren(false);
                mAppWidgetHostViewPreview.setClipToPadding(false);
                mAppWidgetHostViewPreview.setScaleToFit(mRemoteViewsPreviewScale);
            }
            if (mAppWidgetHostViewPreview != null) {
                previewSizeBeforeScale[0] = mAppWidgetHostViewPreview.getMeasuredWidth();
+9 −2
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {

    private RemoteViews mRemoteViewsPreview;
    private NavigableAppWidgetHostView mAppWidgetHostViewPreview;
    private float mAppWidgetHostViewScale = 1f;
    private int mSourceContainer = CONTAINER_WIDGETS_TRAY;

    public WidgetCell(Context context) {
@@ -177,6 +178,11 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
        return mRemoteViewsPreview;
    }

    /** Returns the app widget host view scale, which is a value between [0f, 1f]. */
    public float getAppWidgetHostViewScale() {
        return mAppWidgetHostViewScale;
    }

    /**
     * Called to clear the view and free attached resources. (e.g., {@link Bitmap}
     */
@@ -202,6 +208,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
            mWidgetImageContainer.removeView(mAppWidgetHostViewPreview);
        }
        mAppWidgetHostViewPreview = null;
        mAppWidgetHostViewScale = 1f;
        mItem = null;
    }

@@ -364,8 +371,8 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
                if (shouldScale) {
                    setNoClip(mWidgetImageContainer);
                    setNoClip(mAppWidgetHostViewPreview);
                    float previewLayoutScale = computeWidgetPreviewScale();
                    mAppWidgetHostViewPreview.setScaleToFit(previewLayoutScale);
                    mAppWidgetHostViewScale = computeWidgetPreviewScale();
                    mAppWidgetHostViewPreview.setScaleToFit(mAppWidgetHostViewScale);
                }
            }
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(