Fix weird page jumps after dropping items

Change-Id: I9f5063d2a9db9e2f2a5c2fd183b45884da11dacc
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index cc9a075..275195b 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -652,7 +652,6 @@
 
         // We measure the dimensions of the PagedView to be larger than the pages so that when we
         // zoom out (and scale down), the view is still contained in the parent
-        View parent = (View) getParent();
         int widthMode = MeasureSpec.getMode(widthMeasureSpec);
         int widthSize = MeasureSpec.getSize(widthMeasureSpec);
         int heightMode = MeasureSpec.getMode(heightMeasureSpec);
@@ -727,8 +726,9 @@
         // ensure that the cache is filled with good values.
         invalidateCachedOffsets();
 
-        if (mChildCountOnLastMeasure != getChildCount() && !mDeferringForDelete) {
-            setCurrentPage(mCurrentPage);
+        if (mScroller.isFinished() && mChildCountOnLastMeasure != getChildCount() &&
+                !mDeferringForDelete) {
+            setCurrentPage(getNextPage());
         }
         mChildCountOnLastMeasure = getChildCount();
 
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index cd31722..2ab4bbd 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -171,6 +171,8 @@
     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 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 @@
             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 @@
             mDelayedSnapToPageRunnable.run();
             mDelayedSnapToPageRunnable = null;
         }
+        if (mStripScreensOnPageStopMoving) {
+            stripEmptyScreens();
+            mStripScreensOnPageStopMoving = false;
+        }
     }
 
     @Override