diff --git a/res/drawable-hdpi/default_widget_preview.9.png b/res/drawable-hdpi/default_widget_preview.9.png deleted file mode 100644 index 833daff110..0000000000 Binary files a/res/drawable-hdpi/default_widget_preview.9.png and /dev/null differ diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java index f5874bfaf9..12fe9714cc 100644 --- a/src/com/android/launcher2/AppsCustomizePagedView.java +++ b/src/com/android/launcher2/AppsCustomizePagedView.java @@ -833,19 +833,25 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen // Generate a preview image if we couldn't load one if (drawable == null) { Resources resources = mLauncher.getResources(); + int bitmapWidth; + int bitmapHeight; - // Specify the dimensions of the bitmap - if (info.minWidth >= info.minHeight) { - expectedWidth = cellWidth; - expectedHeight = mWidgetPreviewIconPaddedDimension; + // Specify the dimensions of the bitmap (since we are using a default preview bg with + // the full icon, we only imply the aspect ratio of the widget) + if (cellHSpan == cellVSpan) { + bitmapWidth = bitmapHeight = cellWidth; + expectedWidth = expectedHeight = mWidgetPreviewIconPaddedDimension; + } else if (cellHSpan >= cellVSpan) { + bitmapWidth = expectedWidth = cellWidth; + bitmapHeight = expectedHeight = mWidgetPreviewIconPaddedDimension; } else { // Note that in vertical widgets, we might not have enough space due to the text // label, so be conservative and use the width as a height bound - expectedWidth = mWidgetPreviewIconPaddedDimension; - expectedHeight = cellWidth; + bitmapWidth = expectedWidth = mWidgetPreviewIconPaddedDimension; + bitmapHeight = expectedHeight = cellWidth; } - preview = Bitmap.createBitmap(expectedWidth, expectedHeight, Config.ARGB_8888); + preview = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Config.ARGB_8888); renderDrawableToBitmap(mDefaultWidgetBackground, preview, 0, 0, expectedWidth, expectedHeight, 1f,1f); diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java index f6058a0a29..5aecede0ec 100644 --- a/src/com/android/launcher2/DragController.java +++ b/src/com/android/launcher2/DragController.java @@ -110,6 +110,9 @@ public class DragController { private int mLastTouch[] = new int[2]; private int mDistanceSinceScroll = 0; + private int mTmpPoint[] = new int[2]; + private Rect mDragLayerRect = new Rect(); + /** * Interface to receive notifications when a drag starts or stops */ @@ -384,6 +387,16 @@ public class DragController { } } + /** + * Clamps the position to the drag layer bounds. + */ + private int[] getClampedDragLayerPos(float x, float y) { + mLauncher.getDragLayer().getLocalVisibleRect(mDragLayerRect); + mTmpPoint[0] = (int) Math.max(mDragLayerRect.left, Math.min(x, mDragLayerRect.right - 1)); + mTmpPoint[1] = (int) Math.max(mDragLayerRect.top, Math.min(y, mDragLayerRect.bottom - 1)); + return mTmpPoint; + } + /** * Call this from a drag source view. */ @@ -394,8 +407,9 @@ public class DragController { } final int action = ev.getAction(); - final int dragLayerX = (int) ev.getX(); - final int dragLayerY = (int) ev.getY(); + final int[] dragLayerPos = getClampedDragLayerPos(ev.getX(), ev.getY()); + final int dragLayerX = dragLayerPos[0]; + final int dragLayerY = dragLayerPos[1]; switch (action) { case MotionEvent.ACTION_MOVE: @@ -506,8 +520,9 @@ public class DragController { } final int action = ev.getAction(); - final int dragLayerX = (int) ev.getX(); - final int dragLayerY = (int) ev.getY(); + final int[] dragLayerPos = getClampedDragLayerPos(ev.getX(), ev.getY()); + final int dragLayerX = dragLayerPos[0]; + final int dragLayerY = dragLayerPos[1]; switch (action) { case MotionEvent.ACTION_DOWN: