summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java28
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) {