Merge "Fixing issue where drag view is jumping when you scroll from hovering over an edge. (Bug 8522679)" into jb-mr2-dev
This commit is contained in:
@@ -488,6 +488,23 @@ public class DragController {
|
||||
DropTarget dropTarget = findDropTarget(x, y, coordinates);
|
||||
mDragObject.x = coordinates[0];
|
||||
mDragObject.y = coordinates[1];
|
||||
checkTouchMove(dropTarget);
|
||||
|
||||
// Check if we are hovering over the scroll areas
|
||||
mDistanceSinceScroll +=
|
||||
Math.sqrt(Math.pow(mLastTouch[0] - x, 2) + Math.pow(mLastTouch[1] - y, 2));
|
||||
mLastTouch[0] = x;
|
||||
mLastTouch[1] = y;
|
||||
checkScrollState(x, y);
|
||||
}
|
||||
|
||||
public void forceTouchMove() {
|
||||
int[] dummyCoordinates = mCoordinatesTemp;
|
||||
DropTarget dropTarget = findDropTarget(mLastTouch[0], mLastTouch[1], dummyCoordinates);
|
||||
checkTouchMove(dropTarget);
|
||||
}
|
||||
|
||||
private void checkTouchMove(DropTarget dropTarget) {
|
||||
if (dropTarget != null) {
|
||||
DropTarget delegate = dropTarget.getDropTargetDelegate(mDragObject);
|
||||
if (delegate != null) {
|
||||
@@ -507,14 +524,10 @@ public class DragController {
|
||||
}
|
||||
}
|
||||
mLastDropTarget = dropTarget;
|
||||
}
|
||||
|
||||
// After a scroll, the touch point will still be in the scroll region.
|
||||
// Rather than scrolling immediately, require a bit of twiddling to scroll again
|
||||
private void checkScrollState(int x, int y) {
|
||||
final int slop = ViewConfiguration.get(mLauncher).getScaledWindowTouchSlop();
|
||||
mDistanceSinceScroll +=
|
||||
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;
|
||||
final DragLayer dragLayer = mLauncher.getDragLayer();
|
||||
final boolean isRtl = (dragLayer.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);
|
||||
@@ -544,12 +557,6 @@ public class DragController {
|
||||
}
|
||||
}
|
||||
|
||||
public void forceMoveEvent() {
|
||||
if (mDragging) {
|
||||
handleMoveEvent(mDragObject.x, mDragObject.y);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this from a drag source view.
|
||||
*/
|
||||
@@ -800,8 +807,8 @@ public class DragController {
|
||||
mLauncher.getDragLayer().onExitScrollArea();
|
||||
|
||||
if (isDragging()) {
|
||||
// Force an update so that we can requeue the scroller if necessary
|
||||
forceMoveEvent();
|
||||
// Check the scroll again so that we can requeue the scroller if necessary
|
||||
checkScrollState(mLastTouch[0], mLastTouch[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -773,7 +773,7 @@ public class Workspace extends SmoothPagedView
|
||||
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();
|
||||
mDragController.forceTouchMove();
|
||||
}
|
||||
} else {
|
||||
// If we are not mid-dragging, hide the page outlines if we are on a large screen
|
||||
|
||||
Reference in New Issue
Block a user