am aa15ffe6: Allowing dragging to edge and holding to continue skipping pages.

* commit 'aa15ffe60e28b923ebf3e3162ce427ca6feae803':
  Allowing dragging to edge and holding to continue skipping pages.
This commit is contained in:
Winson Chung
2012-01-18 16:40:27 -08:00
committed by Android Git Automerger
2 changed files with 30 additions and 17 deletions
+23 -12
View File
@@ -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);
}
}
}
+7 -5
View File
@@ -1280,8 +1280,9 @@ public class Workspace extends SmoothPagedView
final int paddingTop = mPaddingTop + offset;
final int paddingBottom = mPaddingBottom + offset;
final CellLayout leftPage = (CellLayout) getChildAt(mCurrentPage - 1);
final CellLayout rightPage = (CellLayout) getChildAt(mCurrentPage + 1);
final int page = (mNextPage != INVALID_PAGE ? mNextPage : mCurrentPage);
final CellLayout leftPage = (CellLayout) getChildAt(page - 1);
final CellLayout rightPage = (CellLayout) getChildAt(page + 1);
if (leftPage != null && leftPage.getIsDragOverlapping()) {
final Drawable d = getResources().getDrawable(R.drawable.page_hover_left_holo);
@@ -3160,11 +3161,12 @@ public class Workspace extends SmoothPagedView
if (!isSmall() && !mIsSwitchingState) {
mInScrollArea = true;
final int page = mCurrentPage + (direction == DragController.SCROLL_LEFT ? -1 : 1);
final CellLayout layout = (CellLayout) getChildAt(page);
final int page = (mNextPage != INVALID_PAGE ? mNextPage : mCurrentPage) +
(direction == DragController.SCROLL_LEFT ? -1 : 1);
cancelFolderCreation();
if (layout != null) {
if (0 <= page && page < getChildCount()) {
CellLayout layout = (CellLayout) getChildAt(page);
// Exit the current layout and mark the overlapping layout
if (mDragTargetLayout != null) {
mDragTargetLayout.setIsDragOverlapping(false);