Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21ac8f14 authored by Jordan Silva's avatar Jordan Silva
Browse files

Fix grid task dismiss animation when desktop large tile is enabled (1/4)

- Fix bottom grid row size in createTaskDismissAnimation to subtract all large tiles from bottom row count.
This fixes the animation when dismissing a focused and a bottom row task turns into a focused task.

- Fix when snapping to last task, snap to focused task page instead of INVALID_PAGE (-1).
This prevents snapping to a wrong page (DesktopTask page) when last grid task is dismissed.

Bug: 353948136
Bug: 353948182
Flag: com.android.launcher3.enable_large_desktop_windowing_tile
Test: OverviewDesktopTaskImageTest
Change-Id: Ib4b0453eb6b99855615b22fe842ccbe1205c962d
parent 8388a076
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ class RecentsViewUtils {
    fun getLargeTaskViewIds(taskViews: Iterable<TaskView>): List<Int> =
        taskViews.filter { it.isLargeTile }.map { it.taskViewId }

    /** Counts [TaskView]s that are large tiles. */
    fun getLargeTileCount(taskViews: Iterable<TaskView>): Int = taskViews.count { it.isLargeTile }

    /**
     * Returns the first TaskView that should be displayed as a large tile.
     *
+12 −4
Original line number Diff line number Diff line
@@ -3672,8 +3672,8 @@ public abstract class RecentsView<
            float longGridRowWidthDiff = 0;

            int topGridRowSize = mTopRowIdSet.size();
            int bottomGridRowSize = taskCount - mTopRowIdSet.size()
                    - (enableGridOnlyOverview() ? 0 : 1);
            int numLargeTiles = mUtils.getLargeTileCount(getTaskViews());
            int bottomGridRowSize = taskCount - mTopRowIdSet.size() - numLargeTiles;
            boolean topRowLonger = topGridRowSize > bottomGridRowSize;
            boolean bottomRowLonger = bottomGridRowSize > topGridRowSize;
            boolean dismissedTaskFromTop = mTopRowIdSet.contains(dismissedTaskViewId);
@@ -3972,12 +3972,12 @@ public abstract class RecentsView<
        final boolean finalCloseGapBetweenClearAll = closeGapBetweenClearAll;
        final boolean finalSnapToLastTask = snapToLastTask;
        final boolean finalIsFocusedTaskDismissed = isFocusedTaskDismissed;
        mPendingAnimation.addEndListener(new Consumer<Boolean>() {
        mPendingAnimation.addEndListener(new Consumer<>() {
            @Override
            public void accept(Boolean success) {
                if (mEnableDrawingLiveTile && dismissedTaskView.isRunningTask() && success) {
                    finishRecentsAnimation(true /* toRecents */, false /* shouldPip */,
                            () -> onEnd(success));
                            () -> onEnd(true));
                } else {
                    onEnd(success);
                }
@@ -4147,6 +4147,14 @@ public abstract class RecentsView<
                                // If snapping to last task, find the last task after dismissal.
                                pageToSnapTo = indexOfChild(
                                        getLastGridTaskView(topRowIdArray, bottomRowIdArray));

                                if (pageToSnapTo == INVALID_PAGE) {
                                    // Snap to latest large tile page after dismissing the
                                    // last grid task. This will prevent snapping to page 0 when
                                    // desktop task is visible as large tile.
                                    pageToSnapTo = indexOfChild(
                                            mUtils.getLastLargeTaskView(getTaskViews()));
                                }
                            } else if (taskViewIdToSnapTo != -1) {
                                // If snapping to another page due to indices rearranging, find
                                // the new index after dismissal & rearrange using the task view id.