From ae48c582e918d238351cd1523064237f1be64861 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Tue, 29 Apr 2025 01:04:38 +0000 Subject: [PATCH] Notify StateManager of predictive back animation. This way if you go to a different state like All Apps, that existing animation can be cancelled. This is essentially the same as b/405836159, but for exiting an app via predictive back rather than standard home gesture. Demo: https://drive.google.com/file/d/1x66LHDMQLArZX7sO3RBcI-M-vWW_icRg/view?usp=drive_link&resourcekey=0-_0FYAfonv7YC9u8mCmm07Q Fix: 412562139 Flag: com.android.launcher3.all_apps_blur Test: Open app from homescreen, go back, swipe to All Apps quickly. Change-Id: I83973df5702b271853149dbea5baa1781358c207 --- .../launcher3/QuickstepTransitionManager.java | 6 ++---- .../quickstep/LauncherBackAnimationController.java | 4 ++-- .../src/com/android/quickstep/util/BackAnimState.kt | 12 +++++++++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index d3cbca4460..e958264551 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -1149,9 +1149,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener return animatorSet; } - /** - * Returns animator that controls depth/blur of the background. - */ + /** Returns animator that controls depth/blur of the background during app/widget opening. */ private ObjectAnimator getBackgroundAnimator() { // When launching an app from overview that doesn't map to a task, we still want to just // blur the wallpaper instead of the launcher surface as well @@ -1859,7 +1857,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener } }); } else if (playWorkspaceReveal) { - anim.play(new WorkspaceRevealAnim(mLauncher, false).getAnimators()); + anim.play(new WorkspaceRevealAnim(mLauncher, false).getAnimators()); } } diff --git a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java index c6785629b0..1328699082 100644 --- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java +++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java @@ -599,7 +599,7 @@ public class LauncherBackAnimationController { // Scrim hasn't been attached yet. Let's attach it. addScrimLayer(); } - mScrimAlphaAnimator = new ValueAnimator().ofFloat(1, 0); + mScrimAlphaAnimator = ValueAnimator.ofFloat(1, 0); mScrimAlphaAnimator.addUpdateListener(animation -> { float value = (Float) animation.getAnimatedValue(); if (mScrimLayer != null && mScrimLayer.isValid()) { @@ -615,7 +615,7 @@ public class LauncherBackAnimationController { } }); mScrimAlphaAnimator.setDuration(SCRIM_FADE_DURATION).start(); - backAnim.start(); + backAnim.start(mLauncher.getStateManager()); } private void loadResources() { diff --git a/quickstep/src/com/android/quickstep/util/BackAnimState.kt b/quickstep/src/com/android/quickstep/util/BackAnimState.kt index 4c1e1ffacc..18cc98cd68 100644 --- a/quickstep/src/com/android/quickstep/util/BackAnimState.kt +++ b/quickstep/src/com/android/quickstep/util/BackAnimState.kt @@ -19,8 +19,11 @@ package com.android.quickstep.util import android.animation.AnimatorSet import android.content.Context import com.android.launcher3.Flags +import com.android.launcher3.Launcher import com.android.launcher3.LauncherAnimationRunner.AnimationResult +import com.android.launcher3.LauncherState import com.android.launcher3.anim.AnimatorListeners.forEndCallback +import com.android.launcher3.statemanager.StateManager import com.android.launcher3.util.RunnableList /** Interface to represent animation for back to Launcher transition */ @@ -30,7 +33,7 @@ interface BackAnimState { fun applyToAnimationResult(result: AnimationResult, c: Context) - fun start() + fun start(stateManager: StateManager) } class AnimatorBackState(private val springAnim: RectFSpringAnim?, private val anim: AnimatorSet?) : @@ -58,7 +61,10 @@ class AnimatorBackState(private val springAnim: RectFSpringAnim?, private val an result.setAnimation(anim, c) } - override fun start() { + override fun start(stateManager: StateManager) { + if (anim != null) { + stateManager.setCurrentAnimation(anim) + } anim?.start() } } @@ -73,5 +79,5 @@ class AlreadyStartedBackAnimState(private val onEndCallback: RunnableList) : Bac addOnAnimCompleteCallback(result::onAnimationFinished) } - override fun start() {} + override fun start(stateManager: StateManager) {} }