summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPraveen Bharathi <pbharathi@motorola.com>2010-11-02 19:23:30 -0700
committerIliyan Malchev <malchev@google.com>2010-11-03 15:38:12 -0700
commit26e37349831476d3225570af2dfbf1e459374c6b (patch)
tree2d927c9f6f8989abd6465d5d6725827867e2c55b
parentde04e5242ad7d95c392070e1a4f7acdf3809b91a (diff)
downloadframeworks_base-26e37349831476d3225570af2dfbf1e459374c6b.zip
frameworks_base-26e37349831476d3225570af2dfbf1e459374c6b.tar.gz
frameworks_base-26e37349831476d3225570af2dfbf1e459374c6b.tar.bz2
frameworks/base: switch audio to hdmi when cable is plugged in
Change-Id: I01c4ee968bc0ffbb6ce75370935571cc1ff6f8c7 Signed-off-by: Iliyan Malchev <malchev@google.com>
-rw-r--r--core/java/android/content/Intent.java17
-rw-r--r--media/java/android/media/AudioService.java4
-rw-r--r--services/java/com/android/server/WiredAccessoryObserver.java25
3 files changed, 40 insertions, 6 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index e14282c..ac6b147 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1853,7 +1853,22 @@ public class Intent implements Parcelable, Cloneable {
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_USB_DGTL_HEADSET_PLUG =
- "android.intent.action.DOCK_HEADSET_PLUG";
+ "android.intent.action.HDMI_AUDIO_PLUG";
+
+ /**
+ * Broadcast Action: A HMDI cable was plugged or unplugged
+ *
+ * <p>The intent will have the following extra values:
+ * <ul>
+ * <li><em>state</em> - 0 for unplugged, 1 for plugged. </li>
+ * <li><em>name</em> - HDMI cable, human readable string </li>
+ * </ul>
+ * </ul>
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_HDMI_AUDIO_PLUG =
+ "android.intent.action.HDMI_AUDIO_PLUG";
/**
* Broadcast Action: An outgoing call is about to be placed.
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index a64158f..3bee906 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -314,6 +314,7 @@ public class AudioService extends IAudioService.Stub {
intentFilter.addAction(Intent.ACTION_DOCK_EVENT);
intentFilter.addAction(Intent.ACTION_USB_ANLG_HEADSET_PLUG);
intentFilter.addAction(Intent.ACTION_USB_DGTL_HEADSET_PLUG);
+ intentFilter.addAction(Intent.ACTION_HDMI_AUDIO_PLUG);
context.registerReceiver(mReceiver, intentFilter);
// Register for media button intent broadcasts.
@@ -1949,7 +1950,8 @@ public class AudioService extends IAudioService.Stub {
AudioSystem.DEVICE_STATE_AVAILABLE, "");
mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET), "");
}
- } else if (action.equals(Intent.ACTION_USB_DGTL_HEADSET_PLUG)) {
+ } else if ( (action.equals(Intent.ACTION_USB_DGTL_HEADSET_PLUG)) ||
+ (action.equals(Intent.ACTION_HDMI_AUDIO_PLUG)) ) {
int state = intent.getIntExtra("state", 0);
Log.v(TAG, "Broadcast Receiver: Got ACTION_USB_DGTL_HEADSET_PLUG, state = "+state);
boolean isConnected = mConnectedDevices.containsKey(AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET);
diff --git a/services/java/com/android/server/WiredAccessoryObserver.java b/services/java/com/android/server/WiredAccessoryObserver.java
index ab92fdf..2046473 100644
--- a/services/java/com/android/server/WiredAccessoryObserver.java
+++ b/services/java/com/android/server/WiredAccessoryObserver.java
@@ -37,20 +37,25 @@ import java.io.FileNotFoundException;
class WiredAccessoryObserver extends UEventObserver {
private static final String TAG = WiredAccessoryObserver.class.getSimpleName();
private static final boolean LOG = true;
- private static final int MAX_AUDIO_PORTS = 2; /* h2w & USB Audio */
+ private static final int MAX_AUDIO_PORTS = 3; /* h2w, USB Audio & hdmi */
private static final String uEventInfo[][] = { {"DEVPATH=/devices/virtual/switch/h2w",
"/sys/class/switch/h2w/state",
"/sys/class/switch/h2w/name"},
{"DEVPATH=/devices/virtual/switch/usb_audio",
"/sys/class/switch/usb_audio/state",
- "/sys/class/switch/usb_audio/name"} };
+ "/sys/class/switch/usb_audio/name"},
+ {"DEVPATH=/devices/virtual/switch/hdmi",
+ "/sys/class/switch/hdmi/state",
+ "/sys/class/switch/hdmi/name"} };
private static final int BIT_HEADSET = (1 << 0);
private static final int BIT_HEADSET_NO_MIC = (1 << 1);
private static final int BIT_USB_HEADSET_ANLG = (1 << 2);
private static final int BIT_USB_HEADSET_DGTL = (1 << 3);
+ private static final int BIT_HDMI_AUDIO = (1 << 4);
private static final int SUPPORTED_HEADSETS = (BIT_HEADSET|BIT_HEADSET_NO_MIC|
- BIT_USB_HEADSET_ANLG|BIT_USB_HEADSET_DGTL);
+ BIT_USB_HEADSET_ANLG|BIT_USB_HEADSET_DGTL|
+ BIT_HDMI_AUDIO);
private static final int HEADSETS_WITH_MIC = BIT_HEADSET;
private int mHeadsetState;
@@ -93,6 +98,11 @@ class WiredAccessoryObserver extends UEventObserver {
}
else switchState = (mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC));
}
+ else if ((event.get("SWITCH_NAME")).equals("hdmi")) {
+ switchState = ((mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC|
+ BIT_USB_HEADSET_DGTL|BIT_USB_HEADSET_ANLG)) |
+ (Integer.parseInt(event.get("SWITCH_STATE")) << 4));
+ }
else {
switchState = ((mHeadsetState & (BIT_USB_HEADSET_ANLG|BIT_USB_HEADSET_DGTL)) |
(Integer.parseInt(event.get("SWITCH_STATE"))));
@@ -204,7 +214,8 @@ class WiredAccessoryObserver extends UEventObserver {
if ((headsetState & headset) != 0) {
state = 1;
}
- if((headset == BIT_USB_HEADSET_ANLG) || (headset == BIT_USB_HEADSET_DGTL)) {
+ if((headset == BIT_USB_HEADSET_ANLG) || (headset == BIT_USB_HEADSET_DGTL) ||
+ (headset == BIT_HDMI_AUDIO)) {
Intent intent;
// Pack up the values and broadcast them to everyone
@@ -220,6 +231,12 @@ class WiredAccessoryObserver extends UEventObserver {
intent.putExtra("state", state);
intent.putExtra("name", headsetName);
ActivityManagerNative.broadcastStickyIntent(intent, null);
+ } else if (headset == BIT_HDMI_AUDIO) {
+ intent = new Intent(Intent.ACTION_HDMI_AUDIO_PLUG);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra("state", state);
+ intent.putExtra("name", headsetName);
+ ActivityManagerNative.broadcastStickyIntent(intent, null);
}
if (LOG) Slog.v(TAG, "Intent.ACTION_USB_HEADSET_PLUG: state: "+state+" name: "+headsetName);