diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 6 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java | 9 |
2 files changed, 14 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 66c962d855b7..b1f700dedc38 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5988,7 +5988,11 @@ public class WindowManagerService extends IWindowManager.Stub if (mFrozenDisplayId != INVALID_DISPLAY && mFrozenDisplayId == w.getDisplayId() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { ProtoLog.v(WM_DEBUG_ORIENTATION, "Changing surface while display frozen: %s", w); - w.setOrientationChanging(true); + // WindowsState#reportResized won't tell invisible requested window to redraw, + // so do not set it as changing orientation to avoid affecting draw state. + if (w.isVisibleRequested()) { + w.setOrientationChanging(true); + } if (mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_NONE) { mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_ACTIVE; // XXX should probably keep timeout from diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java index cfc0da7a4a15..9bcc1367f8ab 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -731,6 +731,15 @@ public class WindowStateTests extends WindowTestsBase { assertTrue(mWm.mResizingWindows.contains(startingApp)); assertTrue(startingApp.isDrawn()); assertFalse(startingApp.getOrientationChanging()); + + // Even if the display is frozen, invisible requested window should not be affected. + startingApp.mActivityRecord.mVisibleRequested = false; + mWm.startFreezingDisplay(0, 0, mDisplayContent); + doReturn(true).when(mWm.mPolicy).isScreenOn(); + startingApp.getWindowFrames().setInsetsChanged(true); + startingApp.updateResizingWindowIfNeeded(); + assertTrue(startingApp.isDrawn()); + assertFalse(startingApp.getOrientationChanging()); } @UseTestDisplay(addWindows = W_ABOVE_ACTIVITY) |