Moving some swipe up complete logic to when the handler is completed.

Bug: 76449024
Change-Id: I136e665495ab7164c79e1dfa0ef61090ba50fc7a
diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
index b784c03..84d97a9 100644
--- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java
+++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
@@ -79,8 +79,6 @@
 
     ActivityInitListener createActivityInitListener(BiPredicate<T, Boolean> onInitListener);
 
-    void onOverviewShown(T activity);
-
     @Nullable
     T getCreatedActivity();
 
@@ -150,6 +148,7 @@
         public void onSwipeUpComplete(Launcher activity) {
             // Re apply state in case we did something funky during the transition.
             activity.getStateManager().reapplyState();
+            DiscoveryBounce.showForOverviewIfNeeded(activity);
         }
 
         @Override
@@ -213,11 +212,6 @@
             return new LauncherInitListener(onInitListener);
         }
 
-        @Override
-        public void onOverviewShown(Launcher launcher) {
-            DiscoveryBounce.showForOverviewIfNeeded(launcher);
-        }
-
         @Nullable
         @Override
         public Launcher getCreatedActivity() {
@@ -372,11 +366,6 @@
             return new RecentsActivityTracker(onInitListener);
         }
 
-        @Override
-        public void onOverviewShown(RecentsActivity activity) {
-            // Do nothing.
-        }
-
         @Nullable
         @Override
         public RecentsActivity getCreatedActivity() {
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 248aa41..7b09b8f 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -694,9 +694,6 @@
             // If we haven't posted the transition end runnable, run it now
             finishTransitionRunnable.run();
         }
-        RecentsModel.getInstance(mContext).onOverviewShown(false, TAG);
-        mActivityControlHelper.onOverviewShown(mActivity);
-        doLogGesture(true /* toLauncher */);
     }
 
     private void setupLauncherUiAfterSwipeUpAnimation() {
@@ -708,9 +705,11 @@
 
         // Animate the first icon.
         mRecentsView.setFirstTaskIconScaledDown(false /* isScaledDown */, true /* animate */);
-
         mRecentsView.setSwipeDownShouldLaunchApp(true);
 
+        RecentsModel.getInstance(mContext).onOverviewShown(false, TAG);
+
+        doLogGesture(true /* toLauncher */);
         reset();
     }
 
diff --git a/src/com/android/launcher3/allapps/DiscoveryBounce.java b/src/com/android/launcher3/allapps/DiscoveryBounce.java
index 0ce33bc..f73916c 100644
--- a/src/com/android/launcher3/allapps/DiscoveryBounce.java
+++ b/src/com/android/launcher3/allapps/DiscoveryBounce.java
@@ -27,6 +27,7 @@
 import android.animation.PropertyValuesHolder;
 import android.animation.TimeInterpolator;
 import android.app.ActivityManager;
+import android.os.Handler;
 import android.view.MotionEvent;
 import android.view.animation.PathInterpolator;
 
@@ -34,12 +35,15 @@
 import com.android.launcher3.Launcher;
 import com.android.launcher3.R;
 import com.android.launcher3.compat.UserManagerCompat;
+import com.android.launcher3.states.InternalStateHandler;
 
 /**
  * Abstract base class of floating view responsible for showing discovery bounce animation
  */
 public class DiscoveryBounce extends AbstractFloatingView {
 
+    private static final long DELAY_MS = 200;
+
     public static final String HOME_BOUNCE_SEEN = "launcher.apps_view_shown";
     public static final String SHELF_BOUNCE_SEEN = "launcher.shelf_bounce_seen";
 
@@ -102,6 +106,10 @@
     }
 
     public static void showForHomeIfNeeded(Launcher launcher) {
+        showForHomeIfNeeded(launcher, true);
+    }
+
+    private static void showForHomeIfNeeded(Launcher launcher, boolean withDelay) {
         if (!launcher.isInState(NORMAL)
                 || launcher.getSharedPrefs().getBoolean(HOME_BOUNCE_SEEN, false)
                 || AbstractFloatingView.getTopOpenView(launcher) != null
@@ -110,6 +118,11 @@
             return;
         }
 
+        if (withDelay) {
+            new Handler().postDelayed(() -> showForHomeIfNeeded(launcher, false), DELAY_MS);
+            return;
+        }
+
         DiscoveryBounce view = new DiscoveryBounce(launcher,
                 AnimatorInflater.loadAnimator(launcher, R.animator.discovery_bounce));
         view.mIsOpen = true;
@@ -117,7 +130,13 @@
     }
 
     public static void showForOverviewIfNeeded(Launcher launcher) {
+        showForOverviewIfNeeded(launcher, true);
+    }
+
+    private static void showForOverviewIfNeeded(Launcher launcher, boolean withDelay) {
         if (!launcher.isInState(OVERVIEW)
+                || !launcher.hasBeenResumed()
+                || launcher.isForceInvisible()
                 || launcher.getDeviceProfile().isVerticalBarLayout()
                 || launcher.getSharedPrefs().getBoolean(SHELF_BOUNCE_SEEN, false)
                 || UserManagerCompat.getInstance(launcher).isDemoUser()
@@ -125,6 +144,15 @@
             return;
         }
 
+        if (withDelay) {
+            new Handler().postDelayed(() -> showForOverviewIfNeeded(launcher, false), DELAY_MS);
+            return;
+        } else if (InternalStateHandler.hasPending()
+                || AbstractFloatingView.getTopOpenView(launcher) != null) {
+            // TODO: Move these checks to the top and call this method after invalidate handler.
+            return;
+        }
+
         float verticalProgress = OVERVIEW.getVerticalProgress(launcher);
 
         TimeInterpolator pathInterpolator = new PathInterpolator(0.35f, 0, 0.5f, 1);
diff --git a/src/com/android/launcher3/states/InternalStateHandler.java b/src/com/android/launcher3/states/InternalStateHandler.java
index 0a2c3e4..cf7c6ba 100644
--- a/src/com/android/launcher3/states/InternalStateHandler.java
+++ b/src/com/android/launcher3/states/InternalStateHandler.java
@@ -60,6 +60,10 @@
         return sScheduler.clearReference(this);
     }
 
+    public static boolean hasPending() {
+        return sScheduler.hasPending();
+    }
+
     public static boolean handleCreate(Launcher launcher, Intent intent) {
         return handleIntent(launcher, intent, false, false);
     }
@@ -132,5 +136,9 @@
             }
             return false;
         }
+
+        public boolean hasPending() {
+            return mPendingHandler.get() != null;
+        }
     }
 }
\ No newline at end of file