Update sysui flags

- Launcher always controlls sysui flags during quickstep gestures.
  - If we passed window threshold (i.e. window isn't under system
    bars), use same flags as home screen
  - Else use sysui flags of the centermost TaskView
- Update sysui flags based on home animation progress as well
  (otherwise we weren't applying home screen sysui flags until
  the end of the animation if you ended the swipe before crossing
  the window threshold).
- Update sysui flags for quick switch from home
- Specify that the activity controller animation is user-controlled
  so we don't reapply state when re-setting  it. This happens when
  we get window insets, for instance, which we get when changing
  sysui flags.

Bug: 131360249
Bug: 130020567
Change-Id: If82dbf75fe663fd690b816cdc1c4366cc2bf75b1
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
index 81090c1..3b664b7 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
@@ -28,9 +28,13 @@
 import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
 import static com.android.launcher3.anim.Interpolators.INSTANT;
 import static com.android.launcher3.anim.Interpolators.LINEAR;
+import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
+import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
 
 import android.view.MotionEvent;
 
+import androidx.annotation.Nullable;
+
 import com.android.launcher3.Launcher;
 import com.android.launcher3.LauncherState;
 import com.android.launcher3.LauncherStateManager;
@@ -45,8 +49,6 @@
 import com.android.quickstep.views.RecentsView;
 import com.android.quickstep.views.TaskView;
 
-import androidx.annotation.Nullable;
-
 /**
  * Handles quick switching to a recent task from the home screen.
  */
@@ -128,6 +130,10 @@
     private void updateFullscreenProgress(float progress) {
         if (mTaskToLaunch != null) {
             mTaskToLaunch.setFullscreenProgress(progress);
+            int sysuiFlags = progress > UPDATE_SYSUI_FLAGS_THRESHOLD
+                    ? mTaskToLaunch.getThumbnail().getSysUiStatusNavFlags()
+                    : 0;
+            mLauncher.getSystemUiController().updateUiState(UI_STATE_OVERVIEW, sysuiFlags);
         }
     }
 
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
index 50f25fb..e932452 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
@@ -270,9 +270,9 @@
         playScaleDownAnim(anim, activity, endState);
 
         anim.setDuration(transitionLength * 2);
-        activity.getStateManager().setCurrentAnimation(anim);
         AnimatorPlaybackController controller =
                 AnimatorPlaybackController.wrap(anim, transitionLength * 2);
+        activity.getStateManager().setCurrentUserControlledAnimation(controller);
 
         // Since we are changing the start position of the UI, reapply the state, at the end
         controller.setEndAction(() -> {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 936f0aa..58ae5eb 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -27,6 +27,7 @@
 import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS;
 import static com.android.launcher3.util.RaceConditionTracker.ENTER;
 import static com.android.launcher3.util.RaceConditionTracker.EXIT;
+import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
 import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
 import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.HIDE;
 import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.PEEK;
@@ -654,8 +655,7 @@
             mTransformParams.setProgress(shift).setOffsetX(offsetX).setOffsetScale(offsetScale);
             mClipAnimationHelper.applyTransform(mRecentsAnimationWrapper.targetSet,
                     mTransformParams);
-            mRecentsAnimationWrapper.setWindowThresholdCrossed(
-                    shift > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD);
+            updateSysUiFlags(shift);
         }
 
         if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
@@ -700,6 +700,18 @@
                         ? 0 : (progress - mShiftAtGestureStart) / (1 - mShiftAtGestureStart));
     }
 
+    private void updateSysUiFlags(float windowProgress) {
+        if (mRecentsView != null) {
+            // We will handle the sysui flags based on the centermost task view.
+            mRecentsAnimationWrapper.setWindowThresholdCrossed(true);
+            int sysuiFlags = windowProgress > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD
+                    ? 0
+                    : mRecentsView.getTaskViewAt(mRecentsView.getPageNearestToCenterOfScreen())
+                            .getThumbnail().getSysUiStatusNavFlags();
+            mActivity.getSystemUiController().updateUiState(UI_STATE_OVERVIEW, sysuiFlags);
+        }
+    }
+
     @Override
     public void onRecentsAnimationStart(SwipeAnimationTargetSet targetSet) {
         DeviceProfile dp = InvariantDeviceProfile.INSTANCE.get(mContext).getDeviceProfile(mContext);
@@ -1091,6 +1103,7 @@
                         windowAlphaThreshold, mClipAnimationHelper.getCurrentCornerRadius(), false);
             }
 
+            updateSysUiFlags(Math.max(progress, mCurrentShift.value));
         });
         anim.addAnimatorListener(new AnimationSuccessListener() {
             @Override