Queueing up items for adding later if Launcher is unavailable. (Bug 6457412)

Change-Id: Ia66a6411a54397543db4122a80ebca6a50b6360c
diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index 6d91602..e05127b 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -22,6 +22,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
+import android.os.Debug;
 import android.widget.Toast;
 
 import com.android.launcher.R;
@@ -90,9 +91,12 @@
                 return;
             }
         }
+        // Queue the item up for adding if launcher has not loaded properly yet
+        boolean launcherNotLoaded = LauncherModel.getCellCountX() <= 0 ||
+                LauncherModel.getCellCountY() <= 0;
 
         PendingInstallShortcutInfo info = new PendingInstallShortcutInfo(data, name, intent);
-        if (mUseInstallQueue) {
+        if (mUseInstallQueue || launcherNotLoaded) {
             mInstallQueue.add(info);
         } else {
             processInstallShortcut(context, info);
@@ -102,9 +106,11 @@
     static void enableInstallQueue() {
         mUseInstallQueue = true;
     }
-
     static void disableAndFlushInstallQueue(Context context) {
         mUseInstallQueue = false;
+        flushInstallQueue(context);
+    }
+    static void flushInstallQueue(Context context) {
         Iterator<PendingInstallShortcutInfo> iter = mInstallQueue.iterator();
         while (iter.hasNext()) {
             processInstallShortcut(context, iter.next());
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index d0f4b86..6025c70 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -649,6 +649,9 @@
     protected void onResume() {
         super.onResume();
 
+        // Process any items that were added while Launcher was away
+        InstallShortcutReceiver.flushInstallQueue(this);
+
         mPaused = false;
         if (mRestoring || mOnResumeNeedsLoad) {
             mWorkspaceLoading = true;