summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Li <lihongyu@google.com> 2022-12-12 02:55:48 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-12-12 02:55:48 +0000
commit369bce07d63583a1960ea5fcea188b8638e8c4f9 (patch)
tree5dfc21ab433680326b973a63ff61933ef7f2fe74
parentc5548851572dd35e0fdcdf32e3851d974b00199b (diff)
parent7a67089554b0dcda8fcda793d6302d54021f8f36 (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.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java22
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.