From 145c95342c9c976551156221e4185df7d1478866 Mon Sep 17 00:00:00 2001 From: Paul McLean Date: Fri, 4 Aug 2017 11:12:19 -0600 Subject: [PATCH] Update isWiredHeadsetOn() to support USB headsets. Bug: 64250808 Test: Manual from an App (UsbDescriptors app) Change-Id: Ic979636025e871d69853a7460befce4e1b1a6ed8 --- media/java/android/media/AudioManager.java | 7 ++++++- services/core/java/com/android/server/audio/AudioService.java | 9 +++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 20deeb1634c8..05be088fb2ac 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -1501,7 +1501,9 @@ public class AudioManager { if (AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADSET,"") == AudioSystem.DEVICE_STATE_UNAVAILABLE && AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADPHONE,"") - == AudioSystem.DEVICE_STATE_UNAVAILABLE) { + == AudioSystem.DEVICE_STATE_UNAVAILABLE && + AudioSystem.getDeviceConnectionState(DEVICE_OUT_USB_HEADSET, "") + == AudioSystem.DEVICE_STATE_UNAVAILABLE) { return false; } else { return true; @@ -3324,6 +3326,9 @@ public class AudioManager { * The audio output device code for a wired headphone without attached microphone */ public static final int DEVICE_OUT_WIRED_HEADPHONE = AudioSystem.DEVICE_OUT_WIRED_HEADPHONE; /** @hide + * The audio output device code for a USB headphone with attached microphone */ + public static final int DEVICE_OUT_USB_HEADSET = AudioSystem.DEVICE_OUT_USB_HEADSET; + /** @hide * The audio output device code for generic Bluetooth SCO, for voice */ public static final int DEVICE_OUT_BLUETOOTH_SCO = AudioSystem.DEVICE_OUT_BLUETOOTH_SCO; /** @hide diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index dda8c1ca2080..d85460fd9ddc 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5413,6 +5413,9 @@ public class AudioService extends IAudioService.Stub } else if (device == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE || device == AudioSystem.DEVICE_OUT_LINE) { intent.setAction(Intent.ACTION_HEADSET_PLUG); + intent.putExtra("microphone", (device & AudioSystem.DEVICE_BIT_IN) != 0 ? 1 : 0); + } else if (device == AudioSystem.DEVICE_OUT_USB_HEADSET) { + intent.setAction(Intent.ACTION_HEADSET_PLUG); intent.putExtra("microphone", 0); } else if (device == AudioSystem.DEVICE_OUT_HDMI || device == AudioSystem.DEVICE_OUT_HDMI_ARC) { @@ -5452,9 +5455,7 @@ public class AudioService extends IAudioService.Stub if ((state == 0) && ((device & DEVICE_OVERRIDE_A2DP_ROUTE_ON_PLUG) != 0)) { setBluetoothA2dpOnInt(true); } - boolean isUsb = ((device & ~AudioSystem.DEVICE_OUT_ALL_USB) == 0) || - (((device & AudioSystem.DEVICE_BIT_IN) != 0) && - ((device & ~AudioSystem.DEVICE_IN_ALL_USB) == 0)); + if (!handleDeviceConnection(state == 1, device, address, deviceName)) { // change of connection state failed, bailout return; @@ -5494,7 +5495,7 @@ public class AudioService extends IAudioService.Stub } } } - if (!isUsb && device != AudioSystem.DEVICE_IN_WIRED_HEADSET) { + if (device != AudioSystem.DEVICE_IN_WIRED_HEADSET) { sendDeviceConnectionIntent(device, state, address, deviceName); } updateAudioRoutes(device, state); -- 2.11.0