Merge "Clamping touch positions to drag layer rect to prevent dragging outside of bounds."
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 833daff..0000000
--- a/res/drawable-hdpi/default_widget_preview.9.png
+++ /dev/null
Binary files differ
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index f5874bf..12fe971 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -833,19 +833,25 @@
// 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 f6058a0..5aecede 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -110,6 +110,9 @@
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
*/
@@ -385,6 +388,16 @@
}
/**
+ * 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.
*/
public boolean onInterceptTouchEvent(MotionEvent ev) {
@@ -394,8 +407,9 @@
}
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 @@
}
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: