donut snapshot
diff --git a/services/java/com/android/server/HeadsetObserver.java b/services/java/com/android/server/HeadsetObserver.java
index c9066be..3fc1e0e 100644
--- a/services/java/com/android/server/HeadsetObserver.java
+++ b/services/java/com/android/server/HeadsetObserver.java
@@ -21,6 +21,8 @@
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
import android.os.UEventObserver;
import android.util.Log;
import android.media.AudioManager;
@@ -38,15 +40,19 @@
private static final String HEADSET_STATE_PATH = "/sys/class/switch/h2w/state";
private static final String HEADSET_NAME_PATH = "/sys/class/switch/h2w/name";
- private Context mContext;
-
private int mHeadsetState;
private String mHeadsetName;
private boolean mAudioRouteNeedsUpdate;
private AudioManager mAudioManager;
+ private final Context mContext;
+ private final WakeLock mWakeLock; // held while there is a pending route change
+
public HeadsetObserver(Context context) {
mContext = context;
+ PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "HeadsetObserver");
+ mWakeLock.setReferenceCounted(false);
startObserving(HEADSET_UEVENT_MATCH);
@@ -103,6 +109,7 @@
// immediate, so delay the route change by 1000ms.
// This could be improved once the audio sub-system provides an
// interface to clear the audio pipeline.
+ mWakeLock.acquire();
mHandler.sendEmptyMessageDelayed(0, 1000);
} else {
updateAudioRoute();
@@ -138,7 +145,8 @@
@Override
public void handleMessage(Message msg) {
updateAudioRoute();
+ mWakeLock.release();
}
- };
+ };
}