From c4f9510874ae0c75db03e5e7dab5b3df5a4acfe6 Mon Sep 17 00:00:00 2001 From: Jagrut Desai Date: Mon, 7 Oct 2024 15:16:43 -0700 Subject: [PATCH] Fix Taskbar to Hotseat Animation for Non-Predective back apps - Refactored Taskbar animation duration to under one method and added logic to sync animation duration according to enableScalingRevealHomeAnimation. - Change the interpolator for TaskbarLauncherStateController based on enableScalingRevealHomeAnimation. Test: Presubmit, Manual Bug: 369378541 Flag: EXEMPT Bug Fix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:0a65c5bd72d755856148faeb070a5d2ad2c79cb0) Merged-In: I942829b475f91e9102801b758eb7ee0d27eee912 Change-Id: I942829b475f91e9102801b758eb7ee0d27eee912 --- .../taskbar/LauncherTaskbarUIController.java | 19 +++++++++++++------ .../TaskbarLauncherStateController.java | 7 ++++++- .../uioverrides/QuickstepLauncher.java | 4 ++++ .../util/ScalingWorkspaceRevealAnim.kt | 3 ++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 477f90cedf..5374280c71 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -17,6 +17,8 @@ package com.android.launcher3.taskbar; import static android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY; +import static com.android.launcher3.QuickstepTransitionManager.TASKBAR_TO_APP_DURATION; +import static com.android.launcher3.QuickstepTransitionManager.getTaskbarToHomeDuration; import static com.android.launcher3.QuickstepTransitionManager.TRANSIENT_TASKBAR_TRANSITION_DURATION; import static com.android.launcher3.statemanager.BaseState.FLAG_NON_INTERACTIVE; import static com.android.launcher3.taskbar.TaskbarEduTooltipControllerKt.TOOLTIP_STEP_FEATURES; @@ -32,7 +34,6 @@ import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Flags; import com.android.launcher3.LauncherState; -import com.android.launcher3.QuickstepTransitionManager; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.logging.InstanceId; @@ -204,11 +205,17 @@ public class LauncherTaskbarUIController extends TaskbarUIController { isVisible, fromInitOrDestroy, /* startAnimation= */ true, - DisplayController.isTransientTaskbar(mLauncher) - ? TRANSIENT_TASKBAR_TRANSITION_DURATION - : (!isVisible - ? QuickstepTransitionManager.TASKBAR_TO_APP_DURATION - : QuickstepTransitionManager.getTaskbarToHomeDuration())); + getTaskbarAnimationDuration(isVisible)); + } + + private int getTaskbarAnimationDuration(boolean isVisible) { + if (isVisible && !mLauncher.getPredictiveBackToHomeInProgress()) { + return getTaskbarToHomeDuration(); + } else { + return DisplayController.isTransientTaskbar(mLauncher) + ? TRANSIENT_TASKBAR_TRANSITION_DURATION + : TASKBAR_TO_APP_DURATION; + } } @Nullable diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java index 39ddb407fa..2be7162e84 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java @@ -16,6 +16,7 @@ package com.android.launcher3.taskbar; import static com.android.app.animation.Interpolators.EMPHASIZED; +import static com.android.launcher3.Flags.enableScalingRevealHomeAnimation; import static com.android.launcher3.Hotseat.ALPHA_CHANNEL_TASKBAR_ALIGNMENT; import static com.android.launcher3.Hotseat.ALPHA_CHANNEL_TASKBAR_STASH; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; @@ -39,6 +40,7 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.os.SystemClock; import android.util.Log; +import android.view.animation.Interpolator; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -58,6 +60,7 @@ import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.MultiPropertyFactory.MultiProperty; import com.android.quickstep.RecentsAnimationCallbacks; import com.android.quickstep.RecentsAnimationController; +import com.android.quickstep.util.ScalingWorkspaceRevealAnim; import com.android.quickstep.util.SystemUiFlagUtils; import com.android.quickstep.views.RecentsView; import com.android.systemui.animation.ViewRootSync; @@ -666,7 +669,9 @@ public class TaskbarLauncherStateController { animatorSet.play(iconAlignAnim); } - animatorSet.setInterpolator(EMPHASIZED); + Interpolator interpolator = enableScalingRevealHomeAnimation() + ? ScalingWorkspaceRevealAnim.SCALE_INTERPOLATOR : EMPHASIZED; + animatorSet.setInterpolator(interpolator); if (start) { animatorSet.start(); diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index e80e838e90..6371646422 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -1300,6 +1300,10 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer, mTISBindHelper.setPredictiveBackToHomeInProgress(isInProgress); } + public boolean getPredictiveBackToHomeInProgress() { + return mIsPredictiveBackToHomeInProgress; + } + @Override public boolean areDesktopTasksVisible() { DesktopVisibilityController desktopVisibilityController = getDesktopVisibilityController(); diff --git a/quickstep/src/com/android/quickstep/util/ScalingWorkspaceRevealAnim.kt b/quickstep/src/com/android/quickstep/util/ScalingWorkspaceRevealAnim.kt index f547a7fba1..df08ac8882 100644 --- a/quickstep/src/com/android/quickstep/util/ScalingWorkspaceRevealAnim.kt +++ b/quickstep/src/com/android/quickstep/util/ScalingWorkspaceRevealAnim.kt @@ -60,7 +60,8 @@ class ScalingWorkspaceRevealAnim( * Custom interpolator for both the home and wallpaper scaling. Necessary because EMPHASIZED * is too aggressive, but EMPHASIZED_DECELERATE is too soft. */ - private val SCALE_INTERPOLATOR = + @JvmField + val SCALE_INTERPOLATOR = PathInterpolator( Path().apply { moveTo(0f, 0f)