Fix jump when dismissing last grid task View

- Calcualte the scroll diff to bring large tile to middle of screen
- Additional compensate for scroll diff between last task and ClearAllButton if ClearAllButton is visible

Fix: 395883390
Test: manual, not adding e2e because animation jump cannot be caught by e2e test
Flag: com.android.launcher3.enable_grid_only_overview
Change-Id: I6a506f2af46ded4daf21fe49329ab71b59e3f19d
This commit is contained in:
Alex Chau
2025-02-18 18:07:34 +00:00
parent b38ab564be
commit 7d47679892
2 changed files with 19 additions and 0 deletions
@@ -3901,6 +3901,22 @@ public abstract class RecentsView<
// the only invariant point in landscape split screen.
snapToLastTask = true;
}
if (mUtils.getGridTaskCount() == 1 && dismissedTaskView.isGridTask()) {
TaskView lastLargeTile = mUtils.getLastLargeTaskView();
if (lastLargeTile != null) {
// Calculate the distance to put last large tile back to middle of the screen.
int primaryScroll = getPagedOrientationHandler().getPrimaryScroll(this);
int lastLargeTileScroll = getScrollForPage(indexOfChild(lastLargeTile));
longGridRowWidthDiff = primaryScroll - lastLargeTileScroll;
if (!isClearAllHidden) {
// If ClearAllButton is visible, reduce the distance by scroll difference
// between ClearAllButton and the last task.
longGridRowWidthDiff += getLastTaskScroll(/*clearAllScroll=*/0,
getPagedOrientationHandler().getPrimarySize(mClearAllButton));
}
}
}
// If we need to animate the grid to compensate the clear all gap, we split the second
// half of the dismiss pending animation (in which the non-dismissed tasks slide into