Adding callback to notify LauncherCallbacks when quickstep starts

Bug: 73081875
Change-Id: Ieccba6ecb16553ed5211f277b49e9f2ed2d7c745
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 028af9a..1151d30 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -154,6 +154,8 @@
                 this::initializeLauncherAnimationController);
         mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_LAUNCHER_DRAWN,
                 this::launcherFrameDrawn);
+        mStateCallback.addCallback(STATE_LAUNCHER_PRESENT | STATE_GESTURE_STARTED,
+                this::notifyGestureStarted);
 
         mStateCallback.addCallback(STATE_SCALED_CONTROLLER_APP | STATE_APP_CONTROLLER_RECEIVED,
                 this::resumeLastTask);
@@ -220,6 +222,7 @@
             mStateCallback.setState(oldState);
             mLauncherLayoutListener.setHandler(null);
         }
+        mWasLauncherAlreadyVisible = alreadyOnHome;
         mLauncher = launcher;
 
         LauncherState startState = mLauncher.getStateManager().getState();
@@ -229,7 +232,6 @@
         mLauncher.getStateManager().setRestState(startState);
 
         AbstractFloatingView.closeAllOpenViews(launcher, alreadyOnHome);
-        mWasLauncherAlreadyVisible = alreadyOnHome;
 
         mRecentsView = mLauncher.getOverviewPanel();
         mLauncherLayoutListener = new LauncherLayoutListener(mLauncher);
@@ -429,10 +431,22 @@
     }
 
     public void onGestureStarted() {
+        if (mLauncher != null) {
+            notifyGestureStarted();
+        }
+
         setStateOnUiThread(STATE_GESTURE_STARTED);
         mGestureStarted = true;
     }
 
+    /**
+     * Notifies the launcher that the swipe gesture has started. This can be called multiple times
+     * on both background and UI threads
+     */
+    private void notifyGestureStarted() {
+        mLauncher.onQuickstepGestureStarted(mWasLauncherAlreadyVisible);
+    }
+
     @WorkerThread
     public void onGestureEnded(float endVelocity) {
         Resources res = mContext.getResources();
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5da4944..5a1143fc 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1193,6 +1193,12 @@
         }
     }
 
+    public void onQuickstepGestureStarted(boolean isVisible) {
+        if (mLauncherCallbacks != null) {
+            mLauncherCallbacks.onQuickstepGestureStarted(isVisible);
+        }
+    }
+
     public AllAppsTransitionController getAllAppsController() {
         return mAllAppsController;
     }
diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java
index 914d9eb..ed7bf3d 100644
--- a/src/com/android/launcher3/LauncherCallbacks.java
+++ b/src/com/android/launcher3/LauncherCallbacks.java
@@ -71,4 +71,12 @@
      * Extensions points for adding / replacing some other aspects of the Launcher experience.
      */
     boolean hasSettings();
+
+    /**
+     * Called when launcher integrated quickstep and some quickstep gesture started. It can be
+     * called multiple times for a single gesture an UI or background thread.
+     *
+     * @param isVisible if Launcher was visible when the gesture started.
+     */
+    void onQuickstepGestureStarted(boolean isVisible);
 }