Small refactor to separate adding workspace / all apps items

Change-Id: I06b7bc7f7f0e01696cb9670b8385e5148593e3e0
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index 7ab4e04..28cef13 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -304,7 +304,7 @@
             // Add the new apps to the model and bind them
             if (!addShortcuts.isEmpty()) {
                 LauncherAppState app = LauncherAppState.getInstance();
-                app.getModel().addAndBindAddedApps(context, addShortcuts, new ArrayList<AppInfo>());
+                app.getModel().addAndBindAddedWorkspaceApps(context, addShortcuts);
             }
         }
     }
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 709f4cf..f03ffc6 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3844,15 +3844,17 @@
         }
 
         // Add the new screens
-        bindAddScreens(newScreens);
+        if (newScreens != null) {
+            bindAddScreens(newScreens);
+        }
 
         // We add the items without animation on non-visible pages, and with
         // animations on the new page (which we will try and snap to).
-        if (!addNotAnimated.isEmpty()) {
+        if (addNotAnimated != null && !addNotAnimated.isEmpty()) {
             bindItems(addNotAnimated, 0,
                     addNotAnimated.size(), false);
         }
-        if (!addAnimated.isEmpty()) {
+        if (addAnimated != null && !addAnimated.isEmpty()) {
             bindItems(addAnimated, 0,
                     addAnimated.size(), true);
         }
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 2102a1f..c0444bb 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -292,17 +292,40 @@
         return null;
     }
 
-    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> workspaceApps,
-                                    final ArrayList<AppInfo> allAppsApps) {
-        Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
-        addAndBindAddedApps(context, workspaceApps, cb, allAppsApps);
+    public void addAppsToAllApps(final Context ctx, final ArrayList<AppInfo> allAppsApps) {
+        final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+
+        if (allAppsApps == null) {
+            throw new RuntimeException("allAppsApps must not be null");
+        }
+        if (allAppsApps.isEmpty()) {
+            return;
+        }
+
+        // Process the newly added applications and add them to the database first
+        Runnable r = new Runnable() {
+            public void run() {
+                runOnMainThread(new Runnable() {
+                    public void run() {
+                        Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+                        if (callbacks == cb && cb != null) {
+                            callbacks.bindAppsAdded(null, null, null, allAppsApps);
+                        }
+                    }
+                });
+            }
+        };
+        runOnWorkerThread(r);
     }
-    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> workspaceApps,
-                                final Callbacks callbacks, final ArrayList<AppInfo> allAppsApps) {
-        if (workspaceApps == null || allAppsApps == null) {
+
+    public void addAndBindAddedWorkspaceApps(final Context context,
+            final ArrayList<ItemInfo> workspaceApps) {
+        final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null;
+
+        if (workspaceApps == null) {
             throw new RuntimeException("workspaceApps and allAppsApps must not be null");
         }
-        if (workspaceApps.isEmpty() && allAppsApps.isEmpty()) {
+        if (workspaceApps.isEmpty()) {
             return;
         }
         // Process the newly added applications and add them to the database first
@@ -385,7 +408,7 @@
                 // Update the workspace screens
                 updateWorkspaceScreenOrder(context, workspaceScreens);
 
-                if (!addedShortcutsFinal.isEmpty() || !allAppsApps.isEmpty()) {
+                if (!addedShortcutsFinal.isEmpty()) {
                     runOnMainThread(new Runnable() {
                         public void run() {
                             Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
@@ -404,7 +427,7 @@
                                     }
                                 }
                                 callbacks.bindAppsAdded(addedWorkspaceScreensFinal,
-                                        addNotAnimated, addAnimated, allAppsApps);
+                                        addNotAnimated, addAnimated, null);
                             }
                         }
                     });
@@ -1561,8 +1584,7 @@
                 }
             }
             if (!added.isEmpty()) {
-                Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
-                addAndBindAddedApps(context, added, cb, new ArrayList<AppInfo>());
+                addAndBindAddedWorkspaceApps(context, added);
             }
         }
 
@@ -2594,14 +2616,14 @@
 
             if (added != null) {
                 // Ensure that we add all the workspace applications to the db
-                Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
-                if (!LauncherAppState.isDisableAllApps()) {
-                    addAndBindAddedApps(context, new ArrayList<ItemInfo>(), cb, added);
-                } else {
+                if (LauncherAppState.isDisableAllApps()) {
                     final ArrayList<ItemInfo> addedInfos = new ArrayList<ItemInfo>(added);
-                    addAndBindAddedApps(context, addedInfos, cb, added);
+                    addAndBindAddedWorkspaceApps(context, addedInfos);
+                } else {
+                    addAppsToAllApps(context, added);
                 }
             }
+
             if (modified != null) {
                 final ArrayList<AppInfo> modifiedFinal = modified;