Fix weird page jumps after dropping items

Change-Id: I9f5063d2a9db9e2f2a5c2fd183b45884da11dacc
This commit is contained in:
Adam Cohen
2013-07-12 14:41:21 -07:00
parent dedbd962dc
commit accfd5648c
2 changed files with 20 additions and 5 deletions
+17 -2
View File
@@ -171,6 +171,8 @@ public class Workspace extends SmoothPagedView
boolean mIsDragOccuring = false;
boolean mChildrenLayersEnabled = true;
private boolean mStripScreensOnPageStopMoving = false;
/** Is the user is dragging an item near the edge of a page? */
private boolean mInScrollArea = false;
@@ -582,6 +584,12 @@ public class Workspace extends SmoothPagedView
}
public void stripEmptyScreens() {
if (isPageMoving()) {
mStripScreensOnPageStopMoving = true;
return;
}
int currentPage = getNextPage();
ArrayList<Long> removeScreens = new ArrayList<Long>();
for (Long id: mWorkspaceScreens.keySet()) {
CellLayout cl = mWorkspaceScreens.get(id);
@@ -595,17 +603,20 @@ public class Workspace extends SmoothPagedView
CellLayout cl = mWorkspaceScreens.get(id);
mWorkspaceScreens.remove(id);
mScreenOrder.remove(id);
if (indexOfChild(cl) < mCurrentPage) {
if (indexOfChild(cl) < currentPage) {
pageShift++;
}
removeView(cl);
}
setCurrentPage(mCurrentPage - pageShift);
if (!removeScreens.isEmpty()) {
// Update the model if we have changed any screens
mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder);
}
if (pageShift >= 0) {
setCurrentPage(currentPage - pageShift);
}
}
// See implementation for parameter definition.
@@ -901,6 +912,10 @@ public class Workspace extends SmoothPagedView
mDelayedSnapToPageRunnable.run();
mDelayedSnapToPageRunnable = null;
}
if (mStripScreensOnPageStopMoving) {
stripEmptyScreens();
mStripScreensOnPageStopMoving = false;
}
}
@Override