Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73a1fa7f authored by Robert Carr's avatar Robert Carr Committed by Rob Carr
Browse files

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
parent d031d57c
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
@@ -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;