diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 10 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java | 11 |
2 files changed, 16 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 06d41c0e8d35..d31dfeed389d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1020,7 +1020,7 @@ public class WindowManagerService extends IWindowManager.Stub private int mExitAnimId, mEnterAnimId; /** The display that the rotation animation is applying to. */ - private int mFrozenDisplayId; + private int mFrozenDisplayId = INVALID_DISPLAY; /** Skip repeated ActivityRecords initialization. Note that AppWindowsToken's version of this * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */ @@ -5968,10 +5968,10 @@ public class WindowManagerService extends IWindowManager.Stub } void makeWindowFreezingScreenIfNeededLocked(WindowState w) { - // If the screen is currently frozen or off, then keep - // it frozen/off until this window draws at its new - // orientation. - if (!w.mToken.okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { + // If the screen is currently frozen, then keep it frozen until this window draws at its + // new orientation. + 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); if (mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_NONE) { 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 fb7400bc83ef..cfc0da7a4a15 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -720,6 +720,17 @@ public class WindowStateTests extends WindowTestsBase { outWaitingForDrawn.clear(); invisibleApp.requestDrawIfNeeded(outWaitingForDrawn); assertTrue(outWaitingForDrawn.isEmpty()); + + // Drawn state should not be changed for insets change when screen is off. + spyOn(mWm.mPolicy); + doReturn(false).when(mWm.mPolicy).isScreenOn(); + makeWindowVisibleAndDrawn(startingApp); + startingApp.getConfiguration().orientation = 0; // Reset to be the same as last reported. + startingApp.getWindowFrames().setInsetsChanged(true); + startingApp.updateResizingWindowIfNeeded(); + assertTrue(mWm.mResizingWindows.contains(startingApp)); + assertTrue(startingApp.isDrawn()); + assertFalse(startingApp.getOrientationChanging()); } @UseTestDisplay(addWindows = W_ABOVE_ACTIVITY) |