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

Commit 4083ae30 authored by Steven Ng's avatar Steven Ng Committed by Android (Google) Code Review
Browse files

Merge "Scale RemoteViews from requestPinAppWidget shown in AddItemActivity" into sc-v2-dev

parents 935ca32b 2b123833
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
@@ -128,6 +128,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) {
@@ -178,6 +179,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}
     */
@@ -203,6 +209,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
            mWidgetImageContainer.removeView(mAppWidgetHostViewPreview);
        }
        mAppWidgetHostViewPreview = null;
        mAppWidgetHostViewScale = 1f;
        mItem = null;
    }

@@ -365,8 +372,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(