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

Commit 9326dc14 authored by Stefan Kuhne's avatar Stefan Kuhne
Browse files

Removing screen artifacts afer orientation change in sleep mode

Avoiding screen artifacts upon rotation change in sleep mode. This will
be done by postponing orientation changes until the entire UI got drawn.

Bug: 16849724
Change-Id: Ib1d818258d12f5c1909de4558af46aec27e29c75
parent 4ba81a08
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    /** Amount of time (in milliseconds) to wait for windows drawn before powering on. */
    static final int WAITING_FOR_DRAWN_TIMEOUT = 1000;
    static final int WAITING_FOR_DRAWN_TIMEOUT = 500;

    /**
     * Lock protecting internal state.  Must not call out into window
@@ -837,12 +837,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            return;
        }
        // Could have been invoked due to screen turning on or off or
        //change of the currently visible window's orientation
        // change of the currently visible window's orientation.
        if (localLOGV) Slog.v(TAG, "mScreenOnEarly=" + mScreenOnEarly
                + ", mAwake=" + mAwake + ", mCurrentAppOrientation=" + mCurrentAppOrientation
                + ", mOrientationSensorEnabled=" + mOrientationSensorEnabled);
                + ", mOrientationSensorEnabled=" + mOrientationSensorEnabled
                + ", mKeyguardDrawComplete=" + mKeyguardDrawComplete
                + ", mWindowManagerDrawComplete=" + mWindowManagerDrawComplete);
        boolean disable = true;
        if (mScreenOnEarly && mAwake) {
        // Note: We postpone the rotating of the screen until the keyguard as well as the
        // window manager have reported a draw complete.
        if (mScreenOnEarly && mAwake &&
                mKeyguardDrawComplete && mWindowManagerDrawComplete) {
            if (needSensorRunningLp()) {
                disable = false;
                //enable listener if not already enabled
@@ -5369,7 +5374,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    private void finishKeyguardDrawn() {
        synchronized (mLock) {
            if (!mAwake || mKeyguardDrawComplete) {
                return; // spurious
                return; // We are not awake yet or we have already informed of this event.
            }

            mKeyguardDrawComplete = true;
@@ -5407,18 +5412,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            mScreenOnFully = false;
            mWindowManagerDrawComplete = false;
            mScreenOnListener = screenOnListener;
            updateOrientationListenerLp();
        }

        mWindowManagerInternal.waitForAllWindowsDrawn(mWindowManagerDrawCallback,
                WAITING_FOR_DRAWN_TIMEOUT);
        // ... eventually calls finishWindowsDrawn
        // ... eventually calls finishWindowsDrawn which will finalize our screen turn on
        // as well as enabling the orientation change logic/sensor.
    }

    private void finishWindowsDrawn() {
        synchronized (mLock) {
            if (!mScreenOnEarly || mWindowManagerDrawComplete) {
                return; // spurious
                return; // Screen is not turned on or we did already handle this case earlier.
            }

            mWindowManagerDrawComplete = true;
@@ -5428,6 +5433,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    private void finishScreenTurningOn() {
        synchronized (mLock) {
            // We have just finished drawing screen content. Since the orientation listener
            // gets only installed when all windows are drawn, we try to install it again.
            updateOrientationListenerLp();
        }
        final ScreenOnListener listener;
        final boolean enableScreen;
        synchronized (mLock) {