Merge "Scale RemoteViews from requestPinAppWidget shown in AddItemActivity" into sc-v2-dev am: 4083ae30db am: 8971abebf1

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15288650

Change-Id: I4505f4b08835992839e0c72545ee75e232c64796
This commit is contained in:
Steven Ng
2021-07-16 09:57:24 +00:00
committed by Automerger Merge Worker
5 changed files with 45 additions and 15 deletions
@@ -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,
@@ -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;
}
@@ -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) {
@@ -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();
@@ -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(