Merge "Scale RemoteViews from requestPinAppWidget shown in AddItemActivity" into sc-v2-dev
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user