Loading services/core/java/com/android/server/wm/WindowManagerService.java +5 −5 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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) { Loading services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +11 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
services/core/java/com/android/server/wm/WindowManagerService.java +5 −5 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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) { Loading
services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +11 −0 Original line number Diff line number Diff line Loading @@ -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) Loading