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
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user