From 400110902e1680eebe70aed583789870e31758f6 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 22 Sep 2011 13:37:48 -0700 Subject: [PATCH] Fix issue #5355844: PowerManager does not call screenTurningOn after boot. Be more explicit about initialization -- power manager never sends screen update when first initializing, phone window manager retreives current screen state and applies that itself when initializing. Change-Id: I8294ed36d700e186c1637754df8c8183721c15dd --- .../policy/impl/PhoneWindowManager.java | 60 ++++++++++++------- .../android/server/PowerManagerService.java | 10 +++- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index a977618c89724..b0abd978dc021 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -716,6 +716,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Controls rotation and the like. initializeHdmiState(); + + // Match current screen state. + if (mPowerManager.isScreenOn()) { + screenTurningOn(null); + } else { + screenTurnedOff(WindowManagerPolicy.OFF_BECAUSE_OF_USER); + } } public void setInitialDisplaySize(int width, int height) { @@ -2780,31 +2787,42 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void screenTurningOn(final ScreenOnListener screenOnListener) { EventLog.writeEvent(70000, 1); - //Slog.i(TAG, "Screen turning on..."); - mKeyguardMediator.onScreenTurnedOn(new KeyguardViewManager.ShowListener() { - @Override public void onShown(IBinder windowToken) { - if (windowToken != null) { - try { - mWindowManager.waitForWindowDrawn(windowToken, new IRemoteCallback.Stub() { - @Override public void sendResult(Bundle data) { - Slog.i(TAG, "Lock screen displayed!"); - screenOnListener.onScreenOn(); - synchronized (mLock) { - mScreenOnFully = true; + if (false) { + RuntimeException here = new RuntimeException("here"); + here.fillInStackTrace(); + Slog.i(TAG, "Screen turning on...", here); + } + if (screenOnListener != null) { + mKeyguardMediator.onScreenTurnedOn(new KeyguardViewManager.ShowListener() { + @Override public void onShown(IBinder windowToken) { + if (windowToken != null) { + try { + mWindowManager.waitForWindowDrawn(windowToken, + new IRemoteCallback.Stub() { + @Override public void sendResult(Bundle data) { + Slog.i(TAG, "Lock screen displayed!"); + screenOnListener.onScreenOn(); + synchronized (mLock) { + mScreenOnFully = true; + } } - } - }); - } catch (RemoteException e) { - } - } else { - Slog.i(TAG, "No lock screen!"); - screenOnListener.onScreenOn(); - synchronized (mLock) { - mScreenOnFully = true; + }); + } catch (RemoteException e) { + } + } else { + Slog.i(TAG, "No lock screen!"); + screenOnListener.onScreenOn(); + synchronized (mLock) { + mScreenOnFully = true; + } } } + }); + } else { + synchronized (mLock) { + mScreenOnFully = true; } - }); + } synchronized (mLock) { mScreenOnEarly = true; updateOrientationListenerLp(); diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index 785db9829992a..78dbbd6eb5553 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -564,6 +564,7 @@ public class PowerManagerService extends IPowerManager.Stub // We make sure to start out with the screen on due to user activity. // (They did just boot their device, after all.) forceUserActivityLocked(); + mInitialized = true; } } @@ -1330,6 +1331,13 @@ public class PowerManagerService extends IPowerManager.Stub // (And also do not send needless broadcasts about the screen.) return; } + + if (DEBUG_SCREEN_ON) { + RuntimeException here = new RuntimeException("here"); + here.fillInStackTrace(); + Slog.i(TAG, "sendNotificationLocked: " + on, here); + } + if (!on) { mStillNeedSleepNotification = false; } @@ -1845,8 +1853,6 @@ public class PowerManagerService extends IPowerManager.Stub mPowerState = (mPowerState & ~LIGHTS_MASK) | (newState & LIGHTS_MASK); updateNativePowerStateLocked(); - - mInitialized = true; } }