diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.kt b/quickstep/src/com/android/quickstep/OverviewCommandHelper.kt index a33e5c0fd2..461f963dc1 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.kt +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.kt @@ -27,6 +27,7 @@ import androidx.annotation.BinderThread import androidx.annotation.UiThread import androidx.annotation.VisibleForTesting import com.android.internal.jank.Cuj +import com.android.launcher3.Flags.enableLargeDesktopWindowingTile import com.android.launcher3.Flags.enableOverviewCommandHelperTimeout import com.android.launcher3.PagedView import com.android.launcher3.logger.LauncherAtom @@ -215,13 +216,12 @@ constructor( } } TOGGLE -> { - val taskView = - if (recentsView.runningTaskView == null) { - recentsView.getTaskViewAt(0) - } else { - recentsView.nextTaskView ?: recentsView.runningTaskView - } - launchTask(recentsView, taskView, command, onCallbackResult) + launchTask( + recentsView, + getNextToggledTaskView(recentsView), + command, + onCallbackResult, + ) } HOME -> { recentsView.startHome() @@ -229,6 +229,27 @@ constructor( } } + private fun getNextToggledTaskView(recentsView: RecentsView<*, *>): TaskView? { + // When running task view is null we return last large taskView - typically focusView when + // grid only is not enabled else last desktop task view. + return if (recentsView.runningTaskView == null) { + recentsView.lastLargeTaskView ?: recentsView.getTaskViewAt(0) + } else { + if ( + enableLargeDesktopWindowingTile() && + recentsView.getTaskViewCount() == recentsView.largeTilesCount && + recentsView.runningTaskView === recentsView.lastLargeTaskView + ) { + // Enables the toggle when only large tiles are in recents view. + // We return previous because unlike small tiles, large tiles are always + // on the right hand side. + recentsView.previousTaskView ?: recentsView.runningTaskView + } else { + recentsView.nextTaskView ?: recentsView.runningTaskView + } + } + } + private fun launchTask( recents: RecentsView<*, *>, taskView: TaskView?, diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 82f08e58e5..8b3ef04f8e 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -4571,6 +4571,20 @@ public abstract class RecentsView< return getTaskViewAt(getRunningTaskIndex() + 1); } + @Nullable + public TaskView getPreviousTaskView() { + return getTaskViewAt(getRunningTaskIndex() - 1); + } + + @Nullable + public TaskView getLastLargeTaskView() { + return mUtils.getLastLargeTaskView(getTaskViews()); + } + + public int getLargeTilesCount() { + return mUtils.getLargeTileCount(getTaskViews()); + } + @Nullable public TaskView getCurrentPageTaskView() { return getTaskViewAt(getCurrentPage());