From 0db354cba9c29ea7bd5b736ae05f625a6acf8c88 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Fri, 8 Oct 2010 22:53:33 -0700 Subject: [PATCH 1/2] Snap workspace back to screen on ACTION_CANCEL. Bug: 3066123 Change-Id: Icbdf3ef241ec44b5569e7490c1b950d80699ddc8 --- src/com/android/launcher2/Workspace.java | 43 +++++++++++++----------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 7761cb3489..c18220931d 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -653,10 +653,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag return true; } - if (mVelocityTracker == null) { - mVelocityTracker = VelocityTracker.obtain(); - } - mVelocityTracker.addMovement(ev); + acquireVelocityTrackerAndAddMovement(ev); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_MOVE: { @@ -741,12 +738,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag mTouchState = TOUCH_STATE_REST; mActivePointerId = INVALID_POINTER; mAllowLongPress = false; - - if (mVelocityTracker != null) { - mVelocityTracker.recycle(); - mVelocityTracker = null; - } - + releaseVelocityTracker(); break; case MotionEvent.ACTION_POINTER_UP: @@ -846,10 +838,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag return false; // We don't want the events. Let them fall through to the all apps view. } - if (mVelocityTracker == null) { - mVelocityTracker = VelocityTracker.obtain(); - } - mVelocityTracker.addMovement(ev); + acquireVelocityTrackerAndAddMovement(ev); final int action = ev.getAction(); @@ -922,18 +911,20 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag } else { snapToScreen(whichScreen, 0, true); } - - if (mVelocityTracker != null) { - mVelocityTracker.recycle(); - mVelocityTracker = null; - } } mTouchState = TOUCH_STATE_REST; mActivePointerId = INVALID_POINTER; + releaseVelocityTracker(); break; case MotionEvent.ACTION_CANCEL: + if (mTouchState == TOUCH_STATE_SCROLLING) { + final int screenWidth = getWidth(); + final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth; + snapToScreen(whichScreen, 0, true); + } mTouchState = TOUCH_STATE_REST; mActivePointerId = INVALID_POINTER; + releaseVelocityTracker(); break; case MotionEvent.ACTION_POINTER_UP: onSecondaryPointerUp(ev); @@ -943,6 +934,20 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag return true; } + private void acquireVelocityTrackerAndAddMovement(MotionEvent ev) { + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } + mVelocityTracker.addMovement(ev); + } + + private void releaseVelocityTracker() { + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + } + void snapToScreen(int whichScreen) { snapToScreen(whichScreen, 0, false); } From ade2f8122f6b1a9b64d2d4a81348db619db4d5b2 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sun, 10 Oct 2010 15:42:06 -0700 Subject: [PATCH 2/2] Don't block the UI when rearranging icons. The pause is mostly notable when a sync is happening at the same time. The related function addItemToDatabase() is unchanged by this CL though as it populates item.id and would need more invasive changes elsewhere. Change-Id: I6538445aeb15d9efedf99f262c39f6175f7f1e0e --- src/com/android/launcher2/LauncherModel.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index ee61a919ea..b22d9ab2ff 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -151,6 +151,7 @@ public class LauncherModel extends BroadcastReceiver { item.cellX = cellX; item.cellY = cellY; + final Uri uri = LauncherSettings.Favorites.getContentUri(item.id, false); final ContentValues values = new ContentValues(); final ContentResolver cr = context.getContentResolver(); @@ -159,7 +160,11 @@ public class LauncherModel extends BroadcastReceiver { values.put(LauncherSettings.Favorites.CELLY, item.cellY); values.put(LauncherSettings.Favorites.SCREEN, item.screen); - cr.update(LauncherSettings.Favorites.getContentUri(item.id, false), values, null, null); + new Thread("moveItemInDatabase") { + public void run() { + cr.update(uri, values, null, null); + } + }.start(); } /**