summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/DragController.java
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2012-01-18 15:45:28 -0800
committerWinson Chung <winsonc@google.com>2012-01-18 15:45:56 -0800
commitaa15ffe60e28b923ebf3e3162ce427ca6feae803 (patch)
treed568d8656b5ad3579df1b540a42d08998ab9546e /src/com/android/launcher2/DragController.java
parentc0f21e1d3c348c6ab83c1d223e7c1c2d683412fb (diff)
downloadandroid_packages_apps_Trebuchet-aa15ffe60e28b923ebf3e3162ce427ca6feae803.tar.gz
android_packages_apps_Trebuchet-aa15ffe60e28b923ebf3e3162ce427ca6feae803.tar.bz2
android_packages_apps_Trebuchet-aa15ffe60e28b923ebf3e3162ce427ca6feae803.zip
Allowing dragging to edge and holding to continue skipping pages.
Change-Id: I254f267e2ed04980925f71b7c96c2cac11f350ec
Diffstat (limited to 'src/com/android/launcher2/DragController.java')
-rw-r--r--src/com/android/launcher2/DragController.java35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index a120ac569..44556cf96 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -47,7 +47,8 @@ public class DragController {
/** Indicates the drag is a copy. */
public static int DRAG_ACTION_COPY = 1;
- private static final int SCROLL_DELAY = 600;
+ private static final int SCROLL_DELAY = 500;
+ private static final int RESCROLL_DELAY = 750;
private static final int VIBRATE_DURATION = 35;
private static final boolean PROFILE_DRAWING_DURING_DRAG = false;
@@ -388,6 +389,7 @@ public class DragController {
private void endDrag() {
if (mDragging) {
mDragging = false;
+ clearScrollRunnable();
for (DragListener listener : mListeners) {
listener.onDragEnd();
}
@@ -456,6 +458,15 @@ public class DragController {
return mMoveTarget != null && mMoveTarget.dispatchUnhandledMove(focused, direction);
}
+ private void clearScrollRunnable() {
+ mHandler.removeCallbacks(mScrollRunnable);
+ if (mScrollState == SCROLL_WAITING_IN_ZONE) {
+ mScrollState = SCROLL_OUTSIDE_ZONE;
+ mScrollRunnable.setDirection(SCROLL_RIGHT);
+ mDragScroller.onExitScrollArea();
+ }
+ }
+
private void handleMoveEvent(int x, int y) {
mDragObject.dragView.move(x, y);
@@ -491,30 +502,26 @@ public class DragController {
Math.sqrt(Math.pow(mLastTouch[0] - x, 2) + Math.pow(mLastTouch[1] - y, 2));
mLastTouch[0] = x;
mLastTouch[1] = y;
+ final int delay = mDistanceSinceScroll < slop ? RESCROLL_DELAY : SCROLL_DELAY;
if (x < mScrollZone) {
- if (mScrollState == SCROLL_OUTSIDE_ZONE && mDistanceSinceScroll > slop) {
+ if (mScrollState == SCROLL_OUTSIDE_ZONE) {
mScrollState = SCROLL_WAITING_IN_ZONE;
if (mDragScroller.onEnterScrollArea(x, y, SCROLL_LEFT)) {
mScrollRunnable.setDirection(SCROLL_LEFT);
- mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
+ mHandler.postDelayed(mScrollRunnable, delay);
}
}
} else if (x > mScrollView.getWidth() - mScrollZone) {
- if (mScrollState == SCROLL_OUTSIDE_ZONE && mDistanceSinceScroll > slop) {
+ if (mScrollState == SCROLL_OUTSIDE_ZONE) {
mScrollState = SCROLL_WAITING_IN_ZONE;
if (mDragScroller.onEnterScrollArea(x, y, SCROLL_RIGHT)) {
mScrollRunnable.setDirection(SCROLL_RIGHT);
- mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
+ mHandler.postDelayed(mScrollRunnable, delay);
}
}
} else {
- if (mScrollState == SCROLL_WAITING_IN_ZONE) {
- mScrollState = SCROLL_OUTSIDE_ZONE;
- mScrollRunnable.setDirection(SCROLL_RIGHT);
- mHandler.removeCallbacks(mScrollRunnable);
- mDragScroller.onExitScrollArea();
- }
+ clearScrollRunnable();
}
}
@@ -551,7 +558,6 @@ public class DragController {
// Ensure that we've processed a move event at the current pointer location.
handleMoveEvent(dragLayerX, dragLayerY);
- mHandler.removeCallbacks(mScrollRunnable);
if (mDragging) {
drop(dragLayerX, dragLayerY);
}
@@ -681,6 +687,11 @@ public class DragController {
mScrollState = SCROLL_OUTSIDE_ZONE;
mDistanceSinceScroll = 0;
mDragScroller.onExitScrollArea();
+
+ if (isDragging()) {
+ // Force an update so that we can requeue the scroller if necessary
+ handleMoveEvent(mDragObject.x, mDragObject.y);
+ }
}
}