diff --git a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt index 68690d2f43..c3b072deac 100644 --- a/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt +++ b/quickstep/src/com/android/quickstep/util/RecentsViewUtils.kt @@ -113,6 +113,12 @@ class RecentsViewUtils { it.isVisibleInCarousel(runningTaskView, nonRunningTaskCarouselHidden) } + /** Returns if any small tasks are fully visible */ + fun isAnySmallTaskFullyVisible( + taskViews: Iterable, + isTaskViewFullyVisible: (TaskView) -> Boolean, + ): Boolean = taskViews.any { !it.isLargeTile && isTaskViewFullyVisible(it) } + /** Returns the current list of [TaskView] children. */ fun getTaskViews(taskViewCount: Int, requireTaskViewAt: (Int) -> TaskView): Iterable = (0 until taskViewCount).map(requireTaskViewAt) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 36d8f45856..627633c4de 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1706,10 +1706,11 @@ public abstract class RecentsView< return; } TaskView taskView = getTaskViewAt(mNextPage); - // Snap to fully visible focused task and clear all button. boolean shouldSnapToLargeTask = taskView != null && taskView.isLargeTile() - && isTaskViewFullyVisible(taskView); + && !mUtils.isAnySmallTaskFullyVisible(getTaskViews(), + this::isTaskViewFullyVisible); boolean shouldSnapToClearAll = mNextPage == indexOfChild(mClearAllButton); + // Snap to large tile when grid tasks aren't fully visible or the clear all button. if (!shouldSnapToLargeTask && !shouldSnapToClearAll) { return; }