From d747dc8179df3cfcc68df78ec46b93992de52eaf Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Tue, 13 Sep 2011 16:28:22 -0400 Subject: [PATCH] Fix problems dispatching media button events on headless devices Signed-off-by: Mike Lockwood Conflicts: policy/src/com/android/internal/policy/impl/PhoneWindowManager.java --- .../internal/policy/impl/PhoneWindowManager.java | 10 ++++++---- .../com/android/server/am/ActivityManagerService.java | 2 +- .../com/android/server/wm/WindowManagerService.java | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 62ea84b3e750d..1efb475c2f08d 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -286,7 +286,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */ boolean mEnableShiftMenuBugReports = false; - + + boolean mHeadless; boolean mSafeMode; WindowState mStatusBar = null; boolean mStatusBarCanHide; @@ -783,7 +784,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManager = windowManager; mWindowManagerFuncs = windowManagerFuncs; mPowerManager = powerManager; - if ("0".equals(SystemProperties.get("ro.config.headless", "0"))) { + mHeadless = "1".equals(SystemProperties.get("ro.config.headless", "0")); + if (!mHeadless) { // don't create KeyguardViewMediator if headless mKeyguardMediator = new KeyguardViewMediator(context, this, powerManager); } @@ -2584,7 +2586,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) { // do nothing if headless - if (mKeyguardMediator == null) return; + if (mHeadless) return; // lid changed state mLidOpen = lidOpen ? LID_OPEN : LID_CLOSED; @@ -2817,7 +2819,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // the device some other way (which is why we have an exemption here for injected // events). int result; - if (isScreenOn || (isInjected && !isWakeKey)) { + if ((isScreenOn && !mHeadless) || (isInjected && !isWakeKey)) { // When the screen is on or if the key is injected pass the key to the application. result = ACTION_PASS_TO_USER; } else { diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 0a4c6acb2fa1d..1a18bd0317000 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -4930,7 +4930,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { booting = mBooting; mBooting = false; - enableScreen = !mBooted && !mHeadless; + enableScreen = !mBooted; mBooted = true; } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 08d4aaf4c9f8a..3b5ec035ec517 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -4893,7 +4893,7 @@ public class WindowManagerService extends IWindowManager.Stub public void performBootTimeout() { synchronized(mWindowMap) { - if (mDisplayEnabled) { + if (mDisplayEnabled || mHeadless) { return; } Slog.w(TAG, "***** BOOT TIMEOUT: forcing display enabled");