summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eric Laurent <elaurent@google.com> 2010-11-18 15:50:22 -0800
committer Eric Laurent <elaurent@google.com> 2010-11-18 16:18:27 -0800
commit3fc78a59b6ec4182fc3671e555dd7f5a228b4903 (patch)
treeff75464841bd03bd789972f7f365ea3b20503da6
parenta3326781352888ff80fcf920cf93fd738bb69e66 (diff)
Fix issue 3192794.
Delay uevent registration and initialization or wired accessories state until boot is completed. Change-Id: I272fc9fbf6c34e17d211360c30c712f72ac5bb5e
-rw-r--r--services/java/com/android/server/WiredAccessoryObserver.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/services/java/com/android/server/WiredAccessoryObserver.java b/services/java/com/android/server/WiredAccessoryObserver.java
index 0529080bf0b3..e45c3685b1c4 100644
--- a/services/java/com/android/server/WiredAccessoryObserver.java
+++ b/services/java/com/android/server/WiredAccessoryObserver.java
@@ -17,8 +17,10 @@
package com.android.server;
import android.app.ActivityManagerNative;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
@@ -72,14 +74,22 @@ class WiredAccessoryObserver extends UEventObserver {
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryObserver");
mWakeLock.setReferenceCounted(false);
- // At any given time both headsets could be inserted
- // one on the board and one on the dock
- // observe two UEVENTs
+ context.registerReceiver(new BootCompletedReceiver(),
+ new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null);
+ }
+
+ private final class BootCompletedReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // At any given time accessories could be inserted
+ // one on the board, one on the dock and one on HDMI:
+ // observe three UEVENTs
+ init(); // set initial status
for (int i = 0; i < MAX_AUDIO_PORTS; i++) {
startObserving(uEventInfo[i][0]);
}
- init(); // set initial status
- }
+ }
+ }
@Override
public void onUEvent(UEventObserver.UEvent event) {
@@ -127,6 +137,8 @@ class WiredAccessoryObserver extends UEventObserver {
int newState = mHeadsetState;
mPrevHeadsetState = mHeadsetState;
+ if (LOG) Slog.v(TAG, "init()");
+
for (int i = 0; i < MAX_AUDIO_PORTS; i++) {
try {
FileReader file = new FileReader(uEventInfo[i][1]);
@@ -164,7 +176,8 @@ class WiredAccessoryObserver extends UEventObserver {
// reject all suspect transitions: only accept state changes from:
// - a: 0 heaset to 1 headset
// - b: 1 headset to 0 headset
- Log.v(TAG, "newState = "+newState+", headsetState = "+headsetState+", mHeadsetState = "+mHeadsetState);
+ if (LOG) Slog.v(TAG, "newState = "+newState+", headsetState = "+headsetState+","
+ + "mHeadsetState = "+mHeadsetState);
if (mHeadsetState == headsetState || ((h2w_headset & (h2w_headset - 1)) != 0)) {
Log.e(TAG, "unsetting h2w flag");
h2wStateChange = false;