diff options
| author | Stefan Kuhne <skuhne@google.com> | 2015-06-12 21:54:23 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-12 21:54:25 +0000 |
| commit | 11e6fcb5a8c031460cf2c2997ba0f807858bd37c (patch) | |
| tree | 58888b19d7b4f9d769b9f00d0a23866734a3eee4 | |
| parent | d5ca05c3dd3c9cd2879b15ef2444c2c33824e01b (diff) | |
| parent | 9326dc1407e3942c35b197b7e0287ea4a50a56d8 (diff) | |
| download | frameworks_base-11e6fcb5a8c031460cf2c2997ba0f807858bd37c.zip frameworks_base-11e6fcb5a8c031460cf2c2997ba0f807858bd37c.tar.gz frameworks_base-11e6fcb5a8c031460cf2c2997ba0f807858bd37c.tar.bz2 | |
Merge "Removing screen artifacts afer orientation change in sleep mode" into mnc-dev
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 25ca167..dbcfa19 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -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 @@ -836,13 +836,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { // If sensor is turned off or nonexistent for some reason return; } - //Could have been invoked due to screen turning on or off or - //change of the currently visible window's orientation + // Could have been invoked due to screen turning on or off or + // 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) { |
