diff options
| author | 2022-12-12 02:55:48 +0000 | |
|---|---|---|
| committer | 2022-12-12 02:55:48 +0000 | |
| commit | 369bce07d63583a1960ea5fcea188b8638e8c4f9 (patch) | |
| tree | 5dfc21ab433680326b973a63ff61933ef7f2fe74 | |
| parent | c5548851572dd35e0fdcdf32e3851d974b00199b (diff) | |
| parent | 7a67089554b0dcda8fcda793d6302d54021f8f36 (diff) | |
Merge "Fix missing legacy change transition on display info changed" into tm-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowContainer.java | 5 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java | 22 |
2 files changed, 25 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 4c8095e28518..7b16cccb928b 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -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()); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java index c8ea70c5d650..ef3ddb7b1302 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java @@ -869,6 +869,28 @@ public class WindowContainerTests extends WindowTestsBase { } @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(); // Do not reparent activity to default display when removing the display. |