Clearing workspace screen data structures along with pages.

Change-Id: Ib6c4522cd0c0c06dd6fd327be3621a6de0778f9c
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 943deda..dd9e793 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3501,7 +3501,7 @@
 
         // Clear the workspace because it's going to be rebound
         mWorkspace.clearDropTargets();
-        mWorkspace.removeAllViews();
+        mWorkspace.removeAllWorkspaceScreens();
 
         mWidgetsToAdvance.clear();
         if (mHotseat != null) {
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 8676b09..c1754b4 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -283,7 +283,7 @@
                                     final Callbacks callbacks) {
         Log.w(TAG, "10249126 - addAndBindAddedApps()");
         if (added.isEmpty()) {
-            throw new RuntimeException("EMPTY ADDED ARRAY?");
+            return;
         }
         // Process the newly added applications and add them to the database first
         Runnable r = new Runnable() {
@@ -979,6 +979,7 @@
      * a list of screen ids in the order that they should appear.
      */
     void updateWorkspaceScreenOrder(Context context, final ArrayList<Long> screens) {
+        Log.w(TAG, "10249126 - updateWorkspaceScreenOrder()");
         final ArrayList<Long> screensCopy = new ArrayList<Long>(screens);
         final ContentResolver cr = context.getContentResolver();
         final Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI;
@@ -988,10 +989,17 @@
         while (iter.hasNext()) {
             long id = iter.next();
             if (id < 0) {
+                Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - remove: " + id + ")");
                 iter.remove();
             }
         }
 
+        // Dump the screens copy
+        Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - screensCopy");
+        for (Long l : screensCopy) {
+            Log.w(TAG, "10249126\t- " + l);
+        }
+
         Runnable r = new Runnable() {
             @Override
             public void run() {
@@ -1004,10 +1012,18 @@
                     long screenId = screensCopy.get(i);
                     v.put(LauncherSettings.WorkspaceScreens._ID, screenId);
                     v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i);
-                    Log.w(TAG, "10249126 - updateWorkspaceScreenOrder(" + screenId + ", " + i + ")");
+                    Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - add: " +
+                            screenId + ", " + i + ")");
                     values[i] = v;
                 }
                 cr.bulkInsert(uri, values);
+
+                // Dump the sBgWorkspaceScreens
+                Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens");
+                for (Long l : sBgWorkspaceScreens) {
+                    Log.w(TAG, "10249126\t- " + l);
+                }
+
                 sBgWorkspaceScreens.clear();
                 sBgWorkspaceScreens.addAll(screensCopy);
             }
@@ -1915,6 +1931,13 @@
                         }
                     }
                     Collections.sort(sBgWorkspaceScreens);
+
+                    // Dump the sBgWorkspaceScreens
+                    Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens");
+                    for (Long l : sBgWorkspaceScreens) {
+                        Log.w(TAG, "10249126\t- " + l);
+                    }
+
                     mApp.getLauncherProvider().updateMaxScreenId(maxScreenId);
                     updateWorkspaceScreenOrder(context, sBgWorkspaceScreens);
 
@@ -1948,6 +1971,13 @@
                     // If there are any empty screens remove them, and update.
                     if (unusedScreens.size() != 0) {
                         sBgWorkspaceScreens.removeAll(unusedScreens);
+
+                        // Dump the sBgWorkspaceScreens
+                        Log.w(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens");
+                        for (Long l : sBgWorkspaceScreens) {
+                            Log.w(TAG, "10249126\t- " + l);
+                        }
+
                         updateWorkspaceScreenOrder(context, sBgWorkspaceScreens);
                     }
                 }
@@ -2101,6 +2131,13 @@
         private void bindWorkspaceScreens(final Callbacks oldCallbacks,
                 final ArrayList<Long> orderedScreens) {
             Log.w(TAG, "10249126 - bindWorkspaceScreens()");
+
+            // Dump the orderedScreens
+            Log.w(TAG, "10249126 - orderedScreens");
+            for (Long l : sBgWorkspaceScreens) {
+                Log.w(TAG, "10249126\t- " + l);
+            }
+
             final Runnable r = new Runnable() {
                 @Override
                 public void run() {
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 3114389..e3fad4e 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -106,6 +106,7 @@
     private final WallpaperManager mWallpaperManager;
     private IBinder mWindowToken;
 
+    private int mOriginalDefaultPage;
     private int mDefaultPage;
 
     // The screen id used for the empty screen always present to the right.
@@ -298,7 +299,7 @@
         mOverviewModeShrinkFactor =
                 res.getInteger(R.integer.config_workspaceOverviewShrinkPercentage) / 100.0f;
         mCameraDistance = res.getInteger(R.integer.config_cameraDistance);
-        mDefaultPage = a.getInt(R.styleable.Workspace_defaultScreen, 1);
+        mOriginalDefaultPage = mDefaultPage = a.getInt(R.styleable.Workspace_defaultScreen, 1);
         a.recycle();
 
         setOnHierarchyChangeListener(this);
@@ -453,10 +454,19 @@
         return mTouchState != TOUCH_STATE_REST;
     }
 
+    public void removeAllWorkspaceScreens() {
+        Log.w(TAG, "10249126 - removeAllWorkspaceScreens()");
+        // Remove the pages and clear the screen models
+        removeAllViews();
+        mScreenOrder.clear();
+        mWorkspaceScreens.clear();
+    }
+
     public long insertNewWorkspaceScreenBeforeEmptyScreen(long screenId) {
         // Find the index to insert this view into.  If the empty screen exists, then
         // insert it before that.
         int insertIndex = mScreenOrder.indexOf(EXTRA_EMPTY_SCREEN_ID);
+        Log.w(TAG, "10249126 - insertNewWorkspaceScreenBeforeEmptyScreen(" + insertIndex + ")");
         if (insertIndex < 0) {
             insertIndex = mScreenOrder.size();
         }
@@ -494,7 +504,7 @@
         addFullScreenPage(customScreen);
 
         // Ensure that the current page and default page are maintained.
-        mDefaultPage++;
+        mDefaultPage = mOriginalDefaultPage + 1;
         setCurrentPage(getCurrentPage() + 1);
     }