summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jean-Michel Trivi <jmtrivi@google.com> 2015-08-04 21:16:49 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-08-04 21:16:49 +0000
commitcbda3dc7c53d6a404b3f37b5609f22844fbdf1d1 (patch)
tree9ab38e41b6f4a1e0fa6e9584bc2f6779b054db1d
parentc39730583e83c734633f6bd534c509cf46b7a4e5 (diff)
parent0ca9e2dffb60781b4bdfa2a4a012f7ee2afa02b8 (diff)
am 0ca9e2df: am 4032c94d: am fc5a4bf0: Merge "AudioService: check for audio device connection success" into mnc-dev
* commit '0ca9e2dffb60781b4bdfa2a4a012f7ee2afa02b8': AudioService: check for audio device connection success
-rw-r--r--media/java/android/media/AudioSystem.java4
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java19
2 files changed, 18 insertions, 5 deletions
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index acdadd76c6c8..e99a37a41d30 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -604,6 +604,10 @@ public class AudioSystem
public static final int SYNC_EVENT_NONE = 0;
public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1;
+ /**
+ * @return command completion status, one of {@link #AUDIO_STATUS_OK},
+ * {@link #AUDIO_STATUS_ERROR} or {@link #AUDIO_STATUS_SERVER_DIED}
+ */
public static native int setDeviceConnectionState(int device, int state,
String device_address, String device_name);
public static native int getDeviceConnectionState(int device, String device_address);
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 094cb57afc11..a0ededfb7941 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -4730,13 +4730,19 @@ public class AudioService extends IAudioService.Stub {
Slog.i(TAG, "deviceSpec:" + deviceSpec + " is(already)Connected:" + isConnected);
}
if (connect && !isConnected) {
- AudioSystem.setDeviceConnectionState(device, AudioSystem.DEVICE_STATE_AVAILABLE,
- address, deviceName);
+ final int res = AudioSystem.setDeviceConnectionState(device,
+ AudioSystem.DEVICE_STATE_AVAILABLE, address, deviceName);
+ if (res != AudioSystem.AUDIO_STATUS_OK) {
+ Slog.e(TAG, "not connecting device 0x" + Integer.toHexString(device) +
+ " due to command error " + res );
+ return false;
+ }
mConnectedDevices.put(deviceKey, new DeviceListSpec(device, deviceName, address));
return true;
} else if (!connect && isConnected) {
- AudioSystem.setDeviceConnectionState(device, AudioSystem.DEVICE_STATE_UNAVAILABLE,
- address, deviceName);
+ AudioSystem.setDeviceConnectionState(device,
+ AudioSystem.DEVICE_STATE_UNAVAILABLE, address, deviceName);
+ // always remove even if disconnection failed
mConnectedDevices.remove(deviceKey);
return true;
}
@@ -4869,7 +4875,10 @@ public class AudioService extends IAudioService.Stub {
boolean isUsb = ((device & ~AudioSystem.DEVICE_OUT_ALL_USB) == 0) ||
(((device & AudioSystem.DEVICE_BIT_IN) != 0) &&
((device & ~AudioSystem.DEVICE_IN_ALL_USB) == 0));
- handleDeviceConnection(state == 1, device, address, deviceName);
+ if (!handleDeviceConnection(state == 1, device, address, deviceName)) {
+ // change of connection state failed, bailout
+ return;
+ }
if (state != 0) {
if ((device == AudioSystem.DEVICE_OUT_WIRED_HEADSET) ||
(device == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE) ||