diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java index e185d88bb2..bf87d3e0df 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java @@ -80,6 +80,7 @@ import java.io.PrintWriter; import java.util.HashMap; import java.util.StringJoiner; import java.util.function.Consumer; +import java.util.function.Function; /** * Track LauncherState, RecentsAnimation, resumed state for task bar in one place here and animate @@ -360,16 +361,16 @@ public class TaskbarLauncherStateController { if (mTaskBarRecentsAnimationListener != null) { mTaskBarRecentsAnimationListener.endGestureStateOverride( - !mLauncher.isInState(LauncherState.OVERVIEW), false /*canceled*/); + !isStateManagerInState(LauncherState.OVERVIEW), /* canceled= */ false); } mTaskBarRecentsAnimationListener = new TaskBarRecentsAnimationListener(callbacks); callbacks.addListener(mTaskBarRecentsAnimationListener); RecentsView recentsView = mControllers.uiController.getRecentsView(); if (recentsView != null) { recentsView.setTaskLaunchListener(() -> mTaskBarRecentsAnimationListener - .endGestureStateOverride(true, false /*canceled*/)); + .endGestureStateOverride(/* finishedToApp= */ true, /* canceled= */ false)); recentsView.setTaskLaunchCancelledRunnable(() -> { - updateStateForUserFinishedToApp(false /* finishedToApp */); + updateStateForUserFinishedToApp(/* finishedToApp= */ false); }); } @@ -1081,6 +1082,12 @@ public class TaskbarLauncherStateController { translationXAnimation.start(); } + private boolean isStateManagerInState(@NonNull LauncherState state) { + return mLauncher.isInState(state) || state == getFromRecentsWindowManager( + recentsWindowManager -> + toLauncherState(recentsWindowManager.getStateManager().getState())); + } + private final class TaskBarRecentsAnimationListener implements RecentsAnimationCallbacks.RecentsAnimationListener { private final RecentsAnimationCallbacks mCallbacks; @@ -1091,13 +1098,13 @@ public class TaskbarLauncherStateController { @Override public void onRecentsAnimationCanceled(HashMap thumbnailDatas) { - boolean isInOverview = mLauncher.isInState(LauncherState.OVERVIEW); - endGestureStateOverride(!isInOverview, true /*canceled*/); + boolean isInOverview = isStateManagerInState(LauncherState.OVERVIEW); + endGestureStateOverride(!isInOverview, /* canceled= */ true); } @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { - endGestureStateOverride(!controller.getFinishTargetIsLauncher(), false /*canceled*/); + endGestureStateOverride(!controller.getFinishTargetIsLauncher(), /* canceled= */ false); } /** @@ -1152,15 +1159,24 @@ public class TaskbarLauncherStateController { * Helper function to run a callback on the RecentsWindowManager (if it exists). */ private void runForRecentsWindowManager(Consumer callback) { + getFromRecentsWindowManager(recentsWindowManager -> { + callback.accept(recentsWindowManager); + return null; + }); + } + + private @Nullable T getFromRecentsWindowManager( + Function function) { final TaskbarActivityContext taskbarContext = mControllers.taskbarActivityContext; int displayId = taskbarContext.getDisplayId(); BaseContainerInterface containerInterface = OverviewComponentObserver.INSTANCE.get( taskbarContext).getContainerInterface(displayId); - if (containerInterface != null - && containerInterface.getCreatedContainer() instanceof RecentsWindowManager - recentsWindowManager) { - callback.accept(recentsWindowManager); + if (containerInterface == null + || !(containerInterface.getCreatedContainer() instanceof RecentsWindowManager + recentsWindowManager)) { + return null; } + return function.apply(recentsWindowManager); } private static String getStateString(int flags) {