Avoid entering display freeze mode when using seamless rotation.
If we enter seamless rotation through the Activity#setRequestedOrientation->updateOrientationFromAppTokens(conf, ibinder) codepath, it will helpfully try to freeze the display for us after updating the orientation. Normally only updateRotationUncheckedLocked does this and so the seamless rotation logic there would prevent it...however in this path we fail to prevent it and strange strange things happen. Bug: 30642017 Change-Id: I12e94905781975f59384d609d12fa54b9fa4fba0
This commit is contained in:
@@ -3790,7 +3790,11 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
Configuration config = null;
|
||||
|
||||
if (updateOrientationFromAppTokensLocked(false)) {
|
||||
if (freezeThisOneIfNeeded != null) {
|
||||
// If we changed the orientation but mOrientationChangeComplete is
|
||||
// already true, we used seamless rotation, and we don't need
|
||||
// to freeze the screen.
|
||||
if (freezeThisOneIfNeeded != null &&
|
||||
!mWindowPlacerLocked.mOrientationChangeComplete) {
|
||||
AppWindowToken atoken = findAppWindowToken(freezeThisOneIfNeeded);
|
||||
if (atoken != null) {
|
||||
startAppFreezingScreenLocked(atoken);
|
||||
|
||||
@@ -101,6 +101,10 @@ class WindowSurfacePlacer {
|
||||
static final int SET_WALLPAPER_ACTION_PENDING = 1 << 5;
|
||||
|
||||
boolean mWallpaperMayChange = false;
|
||||
// During an orientation change, we track whether all windows have rendered
|
||||
// at the new orientation, and this will be false from changing orientation until that occurs.
|
||||
// For seamless rotation cases this always stays true, as the windows complete their orientation
|
||||
// changes 1 by 1 without disturbing global state.
|
||||
boolean mOrientationChangeComplete = true;
|
||||
boolean mWallpaperActionPending = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user