Fixing issue where the PagedView scroll is out of sync with the current page. (Bug 11050528)

Change-Id: I9c445d862763b2a77847cc3bff994f6ba9af8cc4
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 66d4410..ca684df 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -441,6 +441,13 @@
         setLayoutTransition(mLayoutTransition);
     }
 
+    void enableLayoutTransitions() {
+        setLayoutTransition(mLayoutTransition);
+    }
+    void disableLayoutTransitions() {
+        setLayoutTransition(null);
+    }
+
     @Override
     protected int getScrollMode() {
         return SmoothPagedView.X_LARGE_MODE;
@@ -488,10 +495,24 @@
     }
 
     public void removeAllWorkspaceScreens() {
+        // Disable all layout transitions before removing all pages to ensure that we don't get the
+        // transition animations competing with us changing the scroll when we add pages or the
+        // custom content screen
+        disableLayoutTransitions();
+
+        // Since we increment the current page when we call addCustomContentPage via bindScreens
+        // (and other places), we need to adjust the current page back when we clear the pages
+        if (hasCustomContent()) {
+            removeCustomContentPage();
+        }
+
         // Remove the pages and clear the screen models
         removeAllViews();
         mScreenOrder.clear();
         mWorkspaceScreens.clear();
+
+        // Re-enable the layout transitions
+        enableLayoutTransitions();
     }
 
     public long insertNewWorkspaceScreenBeforeEmptyScreen(long screenId) {
@@ -1821,7 +1842,7 @@
         super.onStartReordering();
         showOutlines();
         // Reordering handles its own animations, disable the automatic ones.
-        setLayoutTransition(null);
+        disableLayoutTransitions();
     }
 
     protected void onEndReordering() {
@@ -1838,7 +1859,7 @@
         mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder);
 
         // Re-enable auto layout transitions for page deletion.
-        setLayoutTransition(mLayoutTransition);
+        enableLayoutTransitions();
     }
 
     public boolean isInOverviewMode() {