Waiting for a small timeout for launcher draw, before performing the swipe gesture.

This allow for a better synchronized motion, in case launcher draw was fast enough

Change-Id: Ie59aa1e8a2ffa94f3640b4ea08a0c23eeabafb54
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 639fb6c..fcf36ca 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1256,7 +1256,7 @@
                 && AbstractFloatingView.getTopOpenView(this) == null;
         boolean isActionMain = Intent.ACTION_MAIN.equals(intent.getAction());
         boolean internalStateHandled = InternalStateHandler
-                .handleNewIntent(this, intent, alreadyOnHome);
+                .handleNewIntent(this, intent, isStarted());
 
         if (isActionMain) {
             if (!internalStateHandled) {
diff --git a/src/com/android/launcher3/states/InternalStateHandler.java b/src/com/android/launcher3/states/InternalStateHandler.java
index 4c3ef4b..7298383 100644
--- a/src/com/android/launcher3/states/InternalStateHandler.java
+++ b/src/com/android/launcher3/states/InternalStateHandler.java
@@ -23,6 +23,7 @@
 import com.android.launcher3.Launcher;
 import com.android.launcher3.LauncherAppState;
 import com.android.launcher3.LauncherModel.Callbacks;
+import com.android.launcher3.MainThreadExecutor;
 import com.android.launcher3.util.Preconditions;
 
 import java.lang.ref.WeakReference;
@@ -52,9 +53,12 @@
         return intent;
     }
 
-    public final void initWhenReady() {
-        Preconditions.assertUIThread();
+    public final void initWhenReady(MainThreadExecutor executor) {
         sPendingHandler = new WeakReference<>(this);
+        executor.execute(this::initIfReadOnUIThread);
+    }
+
+    private void initIfReadOnUIThread() {
         LauncherAppState app = LauncherAppState.getInstanceNoCreate();
         if (app == null) {
             return;
@@ -76,15 +80,15 @@
     }
 
     public static boolean handleCreate(Launcher launcher, Intent intent) {
-        return handleIntent(launcher, intent, false);
+        return handleIntent(launcher, intent, false, false);
     }
 
     public static boolean handleNewIntent(Launcher launcher, Intent intent, boolean alreadyOnHome) {
-        return handleIntent(launcher, intent, alreadyOnHome);
+        return handleIntent(launcher, intent, alreadyOnHome, true);
     }
 
     private static boolean handleIntent(
-            Launcher launcher, Intent intent, boolean alreadyOnHome) {
+            Launcher launcher, Intent intent, boolean alreadyOnHome, boolean explicitIntent) {
         boolean result = false;
         if (intent != null && intent.getExtras() != null) {
             IBinder stateBinder = intent.getExtras().getBinder(EXTRA_STATE_HANDLER);
@@ -96,7 +100,7 @@
                 result = true;
             }
         }
-        if (!result) {
+        if (!result && !explicitIntent) {
             InternalStateHandler pendingHandler = sPendingHandler.get();
             if (pendingHandler != null) {
                 if (!pendingHandler.init(launcher, alreadyOnHome)) {