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

Commit 7a670895 authored by Chris Li's avatar Chris Li
Browse files

Fix missing legacy change transition on display info changed

Before, we remove the changing window from transition onDisplayChanged
even if it is a display info change on the same display. Now, we only do
that when the window is moved from the old display.

Fix: 251001013
Test: atest WmTests:WindowContainerTests
Change-Id: Id3ab6db47dad8e2541a14b5529694c290e4d2b66
parent 99a763bf
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1020,10 +1020,11 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
     * @param dc The display this container is on after changes.
     */
    void onDisplayChanged(DisplayContent dc) {
        if (mDisplayContent != null) {
        if (mDisplayContent != null && mDisplayContent != dc) {
            // Cancel any change transition queued-up for this container on the old display when
            // this container is moved from the old display.
            mDisplayContent.mClosingChangingContainers.remove(this);
            if (mDisplayContent.mChangingContainers.remove(this)) {
                // Cancel any change transition queued-up for this container on the old display.
                mSurfaceFreezer.unfreeze(getSyncTransaction());
            }
        }
+22 −0
Original line number Diff line number Diff line
@@ -868,6 +868,28 @@ public class WindowContainerTests extends WindowTestsBase {
        assertEquals(newDc, activity.mDisplayContent);
    }

    @Test
    public void testOnDisplayChanged_cleanupChanging() {
        final Task task = createTask(mDisplayContent);
        spyOn(task.mSurfaceFreezer);
        mDisplayContent.mChangingContainers.add(task);

        // Don't remove the changing transition of this window when it is still the old display.
        // This happens on display info changed.
        task.onDisplayChanged(mDisplayContent);

        assertTrue(mDisplayContent.mChangingContainers.contains(task));
        verify(task.mSurfaceFreezer, never()).unfreeze(any());

        // Remove the changing transition of this window when it is moved or reparented from the old
        // display.
        final DisplayContent newDc = createNewDisplay();
        task.onDisplayChanged(newDc);

        assertFalse(mDisplayContent.mChangingContainers.contains(task));
        verify(task.mSurfaceFreezer).unfreeze(any());
    }

    @Test
    public void testHandleCompleteDeferredRemoval() {
        final DisplayContent displayContent = createNewDisplay();