From 3bc21c35fa167ac233e19df0c9a01b0a07173ed8 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 20 Jan 2012 13:59:18 -0800 Subject: [PATCH] Fixing issue where the outline is on the wrong side of the screen when dragging to final page. - Also allowing pages to snap in springloaded mode without moving your finger. Change-Id: I868f700bd740f2cd1e02023e1dee0f66b0799c58 --- src/com/android/launcher2/DragController.java | 10 +++++++- .../launcher2/SpringLoadedDragController.java | 2 +- src/com/android/launcher2/Workspace.java | 24 +++++++++++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java index 44556cf96f..8658eebaee 100644 --- a/src/com/android/launcher2/DragController.java +++ b/src/com/android/launcher2/DragController.java @@ -525,6 +525,12 @@ public class DragController { } } + public void forceMoveEvent() { + if (mDragging) { + handleMoveEvent(mDragObject.x, mDragObject.y); + } + } + /** * Call this from a drag source view. */ @@ -558,12 +564,14 @@ 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); } endDrag(); break; case MotionEvent.ACTION_CANCEL: + mHandler.removeCallbacks(mScrollRunnable); cancelDrag(); break; } @@ -690,7 +698,7 @@ public class DragController { if (isDragging()) { // Force an update so that we can requeue the scroller if necessary - handleMoveEvent(mDragObject.x, mDragObject.y); + forceMoveEvent(); } } } diff --git a/src/com/android/launcher2/SpringLoadedDragController.java b/src/com/android/launcher2/SpringLoadedDragController.java index 358362c855..d96aab7941 100644 --- a/src/com/android/launcher2/SpringLoadedDragController.java +++ b/src/com/android/launcher2/SpringLoadedDragController.java @@ -18,7 +18,7 @@ package com.android.launcher2; public class SpringLoadedDragController implements OnAlarmListener { // how long the user must hover over a mini-screen before it unshrinks - final long ENTER_SPRING_LOAD_HOVER_TIME = 550; + final long ENTER_SPRING_LOAD_HOVER_TIME = 500; final long ENTER_SPRING_LOAD_CANCEL_HOVER_TIME = 950; final long EXIT_SPRING_LOAD_HOVER_TIME = 200; diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index bb4c264c44..6fb664a05a 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -705,9 +705,15 @@ public class Workspace extends SmoothPagedView clearChildrenCache(); } - // Hide the outlines, as long as we're not dragging - if (!mDragController.dragging()) { - // Only hide page outlines as we pan if we are on large screen + + if (mDragController.isDragging()) { + if (isSmall()) { + // If we are in springloaded mode, then force an event to check if the current touch + // is under a new page (to scroll to) + mDragController.forceMoveEvent(); + } + } else { + // If we are not mid-dragging, hide the page outlines if we are on a large screen if (LauncherApplication.isScreenLarge()) { hideOutlines(); } @@ -2485,7 +2491,11 @@ public class Workspace extends SmoothPagedView v.getMatrix().invert(mTempInverseMatrix); cachedInverseMatrix = mTempInverseMatrix; } - xy[0] = xy[0] + mScrollX - v.getLeft(); + int scrollX = mScrollX; + if (mNextPage != INVALID_PAGE) { + scrollX = mScroller.getFinalX(); + } + xy[0] = xy[0] + scrollX - v.getLeft(); xy[1] = xy[1] + mScrollY - v.getTop(); cachedInverseMatrix.mapPoints(xy); } @@ -2507,7 +2517,11 @@ public class Workspace extends SmoothPagedView */ void mapPointFromChildToSelf(View v, float[] xy) { v.getMatrix().mapPoints(xy); - xy[0] -= (mScrollX - v.getLeft()); + int scrollX = mScrollX; + if (mNextPage != INVALID_PAGE) { + scrollX = mScroller.getFinalX(); + } + xy[0] -= (scrollX - v.getLeft()); xy[1] -= (mScrollY - v.getTop()); }