Fix weird page jumps after dropping items
Change-Id: I9f5063d2a9db9e2f2a5c2fd183b45884da11dacc
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user