From 20fdc7b50847896e7b3b7a31cdec6252e74ce18a Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 12 Dec 2023 16:48:01 -0800 Subject: [PATCH] Move taskbar clean up so that it only gets called when user swipes up to go home. This fixes the bug where the flag gets set when user taps on nav handle, which results in the taskbar animation playing. Flag: N/A Test: open app wait for taskbar to finish stashing* tap on nav handle nothing happens (desired affect) * I will address tapping on taskbar while its animating in a separate change Bug: 292108880 Change-Id: I75870050225bdd951c69224d272d0bd5a3d6d4ea --- .../taskbar/LauncherTaskbarUIController.java | 5 +++++ .../TaskbarLauncherStateController.java | 22 +++++++++++++------ .../taskbar/TaskbarUIController.java | 9 ++++++++ .../uioverrides/QuickstepLauncher.java | 7 ++++++ .../NavBarToHomeTouchController.java | 16 +++++++++++++- src/com/android/launcher3/Launcher.java | 8 +++++++ 6 files changed, 59 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index b4754c6bc5..159a6eff07 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -203,6 +203,11 @@ public class LauncherTaskbarUIController extends TaskbarUIController { return mTaskbarLauncherStateController.applyState(fromInit ? 0 : duration, startAnimation); } + @Override + public void onStateTransitionCompletedAfterSwipeToHome(LauncherState state) { + mTaskbarLauncherStateController.onStateTransitionCompletedAfterSwipeToHome(state); + } + @Override public void refreshResumedState() { onLauncherVisibilityChanged(mLauncher.hasBeenResumed()); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java index 9a37bcb76d..057b71b74f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java @@ -205,13 +205,6 @@ public class TaskbarLauncherStateController { public void onStateTransitionComplete(LauncherState finalState) { mLauncherState = finalState; updateStateForFlag(FLAG_LAUNCHER_IN_STATE_TRANSITION, false); - // TODO(b/279514548) Cleans up bad state that can occur when user interacts with - // taskbar on top of transparent activity. - if (!FeatureFlags.enableHomeTransitionListener() - && finalState == LauncherState.NORMAL - && mLauncher.hasBeenResumed()) { - updateStateForFlag(FLAG_VISIBLE, true); - } applyState(); boolean disallowLongClick = FeatureFlags.enableSplitContextually() @@ -223,6 +216,21 @@ public class TaskbarLauncherStateController { } }; + /** + * Callback for when launcher state transition completes after user swipes to home. + * @param finalState The final state of the transition. + */ + public void onStateTransitionCompletedAfterSwipeToHome(LauncherState finalState) { + // TODO(b/279514548) Cleans up bad state that can occur when user interacts with + // taskbar on top of transparent activity. + if (!FeatureFlags.enableHomeTransitionListener() + && (finalState == LauncherState.NORMAL) + && mLauncher.hasBeenResumed()) { + updateStateForFlag(FLAG_VISIBLE, true); + applyState(); + } + } + /** Initializes the controller instance, and applies the initial state immediately. */ public void init(TaskbarControllers controllers, QuickstepLauncher launcher, int sysuiStateFlags) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java index a29a25c6c9..df2a43b170 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java @@ -30,6 +30,7 @@ import androidx.annotation.CallSuper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.launcher3.LauncherState; import com.android.launcher3.Utilities; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfoWithIcon; @@ -329,6 +330,14 @@ public class TaskbarUIController { return null; } + /** + * Callback for when launcher state transition completes after user swipes to home. + * @param finalState The final state of the transition. + */ + public void onStateTransitionCompletedAfterSwipeToHome(LauncherState finalState) { + // Overridden + } + /** * Refreshes the resumed state of this ui controller. */ diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 14e258b625..9438e00b43 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -706,6 +706,13 @@ public class QuickstepLauncher extends Launcher { return mSplitSelectStateController.isSplitSelectActive(); } + @Override + public void onStateTransitionCompletedAfterSwipeToHome(LauncherState finalState) { + if (mTaskbarUIController != null) { + mTaskbarUIController.onStateTransitionCompletedAfterSwipeToHome(finalState); + } + } + @Override protected void onResume() { super.onResume(); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index f6cd30a222..82a9c058df 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -45,6 +45,7 @@ import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.compat.AccessibilityManagerCompat; import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.statemanager.StateManager; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.TouchController; @@ -194,7 +195,20 @@ public class NavBarToHomeTouchController implements TouchController, recentsView.switchToScreenshot(null, () -> recentsView.finishRecentsAnimation(true /* toRecents */, null)); if (mStartState.overviewUi) { - new OverviewToHomeAnim(mLauncher, () -> onSwipeInteractionCompleted(mEndState), + Runnable onReachedHome = () -> { + StateManager.StateListener listener = + new StateManager.StateListener<>() { + @Override + public void onStateTransitionComplete(LauncherState finalState) { + mLauncher.onStateTransitionCompletedAfterSwipeToHome( + finalState); + mLauncher.getStateManager().removeStateListener(this); + } + }; + mLauncher.getStateManager().addStateListener(listener); + onSwipeInteractionCompleted(mEndState); + }; + new OverviewToHomeAnim(mLauncher, onReachedHome, FeatureFlags.enableSplitContextually() ? mCancelSplitRunnable : null) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 5adfd43c3d..e41a8a544c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2905,6 +2905,14 @@ public class Launcher extends StatefulActivity // Overridden; move this into ActivityContext if necessary for Taskbar } + /** + * Callback for when launcher state transition completes after user swipes to home. + * @param finalState The final state of the transition. + */ + public void onStateTransitionCompletedAfterSwipeToHome(LauncherState finalState) { + // Overridden + } + @Override public void returnToHomescreen() { super.returnToHomescreen();