Merge "Scale RemoteViews from requestPinAppWidget shown in AddItemActivity" into sc-v2-dev am: 4083ae30db
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15288650
Change-Id: I0e4a5d5ad12e9865b8f4e9513d19d6fa480c7977
diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java
index 55be4a4..6bd6261 100644
--- a/src/com/android/launcher3/dragndrop/AddItemActivity.java
+++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java
@@ -189,10 +189,18 @@
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,
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index 2bdf8a0..af43ae8 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -48,12 +48,19 @@
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 @@
PendingItemDragHelper dragHelper = new PendingItemDragHelper(view);
if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_APPWIDGET) {
- dragHelper.setRemoteViewsPreview(getPreview(mRequest));
+ dragHelper.setRemoteViewsPreview(getPreview(mRequest), mPreviewScale);
}
return dragHelper;
}
diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java
index adc7ba0..ee44174 100644
--- a/src/com/android/launcher3/widget/BaseWidgetSheet.java
+++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java
@@ -176,7 +176,9 @@
}
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) {
diff --git a/src/com/android/launcher3/widget/PendingItemDragHelper.java b/src/com/android/launcher3/widget/PendingItemDragHelper.java
index cea4de7..a4003d4 100644
--- a/src/com/android/launcher3/widget/PendingItemDragHelper.java
+++ b/src/com/android/launcher3/widget/PendingItemDragHelper.java
@@ -22,6 +22,7 @@
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.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 @@
private int[] mEstimatedCellSize;
@Nullable private RemoteViews mRemoteViewsPreview;
+ private float mRemoteViewsPreviewScale = 1f;
@Nullable private NavigableAppWidgetHostView mAppWidgetHostViewPreview;
private final float mEnforcedRoundedCornersForWidget;
@@ -68,8 +71,10 @@
* 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 @@
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();
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index c2e1caa..0c9a15a 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -128,6 +128,7 @@
private RemoteViews mRemoteViewsPreview;
private NavigableAppWidgetHostView mAppWidgetHostViewPreview;
+ private float mAppWidgetHostViewScale = 1f;
private int mSourceContainer = CONTAINER_WIDGETS_TRAY;
public WidgetCell(Context context) {
@@ -178,6 +179,11 @@
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 @@
mWidgetImageContainer.removeView(mAppWidgetHostViewPreview);
}
mAppWidgetHostViewPreview = null;
+ mAppWidgetHostViewScale = 1f;
mItem = null;
}
@@ -365,8 +372,8 @@
if (shouldScale) {
setNoClip(mWidgetImageContainer);
setNoClip(mAppWidgetHostViewPreview);
- float previewLayoutScale = computeWidgetPreviewScale();
- mAppWidgetHostViewPreview.setScaleToFit(previewLayoutScale);
+ mAppWidgetHostViewScale = computeWidgetPreviewScale();
+ mAppWidgetHostViewPreview.setScaleToFit(mAppWidgetHostViewScale);
}
}
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(