Fixing Launcher UI jump if the fling animation is completed before launcehr first frame

Also temporarily removing input consumer, as that might be causing event to getmissed
(similar to b/72715390)

Change-Id: I82918133d334fae5d3da267b0d03ff2af8f02e67
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 16b34f9..e5110e6 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -15,8 +15,6 @@
  */
 package com.android.quickstep;
 
-import static android.view.MotionEvent.ACTION_UP;
-
 import static com.android.launcher3.LauncherState.OVERVIEW;
 import static com.android.launcher3.anim.Interpolators.LINEAR;
 import static com.android.quickstep.TouchInteractionService.INTERACTION_NORMAL;
@@ -62,7 +60,6 @@
 import com.android.systemui.shared.recents.model.Task;
 import com.android.systemui.shared.recents.model.Task.TaskKey;
 import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.InputConsumerController;
 import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
 import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
 import com.android.systemui.shared.system.TransactionCompat;
@@ -107,6 +104,8 @@
     // visible.
     private final AnimatedFloat mCurrentShift = new AnimatedFloat(this::updateFinalShift);
 
+    private final MainThreadExecutor mMainExecutor = new MainThreadExecutor();
+
     private final Task mRunningTask;
     private final Context mContext;
 
@@ -131,22 +130,12 @@
     private final RecentsAnimationWrapper mRecentsAnimationWrapper = new RecentsAnimationWrapper();
     private Matrix mTmpMatrix = new Matrix();
 
-    private final InputConsumerController mInputConsumerController;
-    private final InputConsumerController.TouchListener mInputConsumerTouchListener =
-            (ev) -> {
-                if (ev.getActionMasked() == ACTION_UP) {
-                    // TODO: Handle touch event while the transition is in progress.
-                }
-                return true;
-            };
-
     WindowTransformSwipeHandler(RunningTaskInfo runningTaskInfo, Context context) {
         // TODO: We need a better way for this
         TaskKey taskKey = new TaskKey(runningTaskInfo.id, 0, null, UserHandle.myUserId(), 0);
         mRunningTask = new Task(taskKey, null, null, "", "", Color.BLACK, Color.BLACK,
                 true, false, false, false, null, 0, null, false);
         mContext = context;
-        mInputConsumerController = InputConsumerController.getRecentsAnimationInputConsumer();
 
         WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);
 
@@ -181,6 +170,10 @@
                 mLauncherDrawnCallback);
     }
 
+    private void setStateOnUiThread(int stateFlag) {
+        mMainExecutor.execute(() -> mStateCallback.setState(stateFlag));
+    }
+
     public void setLauncherOnDrawCallback(Runnable callback) {
         mLauncherDrawnCallback = callback;
         mStateCallback.addCallback(STATE_LAUNCHER_READY | STATE_LAUNCHER_DRAWN,
@@ -307,7 +300,7 @@
         }
     }
 
-    @UiThread
+    @WorkerThread
     public void updateDisplacement(float displacement) {
         mCurrentDisplacement = displacement;
 
@@ -359,9 +352,6 @@
                     AnimatorPlaybackController.wrap(anim, mTransitionDragLength * 2);
             mLauncherTransitionController.setPlayFraction(mCurrentShift.value);
         }
-
-        // In case the transition length changed (which should never happen, redo everything
-        updateDisplacement(mCurrentDisplacement);
     }
 
     @WorkerThread
@@ -397,9 +387,12 @@
             }
         }
 
-        if (Looper.getMainLooper() == Looper.myLooper()) {
-            if (mLauncherTransitionController != null) {
+        if (mLauncherTransitionController != null) {
+            if (Looper.getMainLooper() == Looper.myLooper()) {
                 mLauncherTransitionController.setPlayFraction(shift);
+            } else {
+                // The fling operation completed even before the launcher was drawn
+                mMainExecutor.execute(() -> mLauncherTransitionController.setPlayFraction(shift));
             }
         }
     }
@@ -407,18 +400,12 @@
     public void setRecentsAnimation(RecentsAnimationControllerCompat controller,
             RemoteAnimationTargetCompat[] apps) {
         mRecentsAnimationWrapper.setController(controller, apps);
-        mStateCallback.setState(STATE_APP_CONTROLLER_RECEIVED);
+        setStateOnUiThread(STATE_APP_CONTROLLER_RECEIVED);
     }
 
-    public void onGestureStarted() {
-        mInputConsumerController.unregisterInputConsumer();
-        mInputConsumerController.registerInputConsumer();
-        mInputConsumerController.setTouchListener(mInputConsumerTouchListener);
+    public void onGestureStarted() { }
 
-        mRecentsAnimationWrapper.enableInputConsumer();
-    }
-
-    @UiThread
+    @WorkerThread
     public void onGestureEnded(float endVelocity) {
         Resources res = mContext.getResources();
         float flingThreshold = res.getDimension(R.dimen.quickstep_fling_threshold_velocity);
@@ -451,9 +438,8 @@
         anim.addListener(new AnimationSuccessListener() {
             @Override
             public void onAnimationSuccess(Animator animator) {
-                new MainThreadExecutor().execute(() -> mStateCallback.setState(
-                        (Float.compare(mCurrentShift.value, 0) == 0)
-                                ? STATE_SCALED_SNAPSHOT_APP : STATE_SCALED_SNAPSHOT_RECENTS));
+                setStateOnUiThread((Float.compare(mCurrentShift.value, 0) == 0)
+                        ? STATE_SCALED_SNAPSHOT_APP : STATE_SCALED_SNAPSHOT_RECENTS);
             }
         });
         anim.start();
@@ -470,7 +456,6 @@
         if (mGestureEndCallback != null) {
             mGestureEndCallback.run();
         }
-        mInputConsumerController.unregisterInputConsumer();
 
         // TODO: These should be done as part of ActivityOptions#OnAnimationStarted
         mLauncher.getStateManager().reapplyState();