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

Commit 31a093c0 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Trims Recent Task when Task windowing mode changed after dismiss...

Merge "Trims Recent Task when Task windowing mode changed after dismiss split-screen" into udc-qpr-dev am: 970f6c42 am: f6f37a93

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24033385



Change-Id: I4b10e8988053f0e68eb9f619d721a255135e2e8d
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f71a43af f6f37a93
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -684,6 +684,26 @@ class RecentTasks {
        }
    }

    /**
     * Removes the oldest recent task that is compatible with the given one. This is possible if
     * the task windowing mode changed after being added to the Recents.
     */
    void removeCompatibleRecentTask(Task task) {
        final int taskIndex = mTasks.indexOf(task);
        if (taskIndex < 0) {
            return;
        }

        final int candidateIndex = findRemoveIndexForTask(task, false /* includingSelf */);
        if (candidateIndex == -1) {
            // Nothing to trim
            return;
        }

        final Task taskToRemove = taskIndex > candidateIndex ? task : mTasks.get(candidateIndex);
        remove(taskToRemove);
    }

    void removeTasksByPackageName(String packageName, int userId) {
        for (int i = mTasks.size() - 1; i >= 0; --i) {
            final Task task = mTasks.get(i);
@@ -1546,6 +1566,10 @@ class RecentTasks {
     * list (if any).
     */
    private int findRemoveIndexForAddTask(Task task) {
        return findRemoveIndexForTask(task, true /* includingSelf */);
    }

    private int findRemoveIndexForTask(Task task, boolean includingSelf) {
        final int recentsCount = mTasks.size();
        final Intent intent = task.intent;
        final boolean document = intent != null && intent.isDocument();
@@ -1601,6 +1625,8 @@ class RecentTasks {
                    // existing task
                    continue;
                }
            } else if (!includingSelf) {
                continue;
            }
            return i;
        }
+7 −0
Original line number Diff line number Diff line
@@ -1615,6 +1615,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
        final int count = tasksToReparent.size();
        for (int i = 0; i < count; ++i) {
            final Task task = tasksToReparent.get(i);
            final int prevWindowingMode = task.getWindowingMode();
            if (syncId >= 0) {
                addToSyncSet(syncId, task);
            }
@@ -1628,6 +1629,12 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                        hop.getToTop() ? POSITION_TOP : POSITION_BOTTOM,
                        false /*moveParents*/, "processChildrenTaskReparentHierarchyOp");
            }
            // Trim the compatible Recent task (if any) after the Task is reparented and now has
            // a different windowing mode, in order to prevent redundant Recent tasks after
            // reparenting.
            if (prevWindowingMode != task.getWindowingMode()) {
                mService.mTaskSupervisor.mRecentTasks.removeCompatibleRecentTask(task);
            }
        }

        if (transition != null) transition.collect(newParent);
+20 −0
Original line number Diff line number Diff line
@@ -1303,6 +1303,26 @@ public class RecentTasksTest extends WindowTestsBase {
        assertTrue(info.supportsMultiWindow);
    }

    @Test
    public void testRemoveCompatibleRecentTask() {
        final Task task1 = createTaskBuilder(".Task").setWindowingMode(
                WINDOWING_MODE_FULLSCREEN).build();
        mRecentTasks.add(task1);
        final Task task2 = createTaskBuilder(".Task").setWindowingMode(
                WINDOWING_MODE_MULTI_WINDOW).build();
        mRecentTasks.add(task2);
        assertEquals(2, mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
                true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().size());

        // Set windowing mode and ensure the same fullscreen task that created earlier is removed.
        task2.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
        mRecentTasks.removeCompatibleRecentTask(task2);
        assertEquals(1, mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
                true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().size());
        assertEquals(task2.mTaskId, mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
                true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().get(0).taskId);
    }

    private TaskSnapshot createSnapshot(Point taskSize, Point bufferSize) {
        HardwareBuffer buffer = null;
        if (bufferSize != null) {