Fix regression.

When turning off BT while connected to an A2DP/HFP headset we can hit the path

BluetoothHeadsetService.onReceive(BluetoothHeadset.STATE_CHANGED) ->
BluetoothHandsfree.audioOff() ->
BluetoothA2dp.resumeSink() ->
which causes resumeSink() to NPE because mAudioDevices.get() returns null.

It's a race between A2DP marking the device as disconnected, and HFP marking
the device as disconnected.

Fix is to NPE check in resumeSink().

Change-Id: I2782ac8c70ea1678d7de5fcd49bff8e03df36f4e
This commit is contained in:
Nick Pelly
2009-09-30 15:30:43 -07:00
committed by android-build SharedAccount
parent c926de31bc
commit 8da0999816

View File

@@ -333,10 +333,11 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
return false;
}
String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
if (path == null) {
Integer state = mAudioDevices.get(device);
if (path == null || state == null) {
return false;
}
switch (mAudioDevices.get(device)) {
switch (state.intValue()) {
case BluetoothA2dp.STATE_CONNECTED:
return true;
case BluetoothA2dp.STATE_PLAYING:
@@ -354,10 +355,11 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
return false;
}
String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
if (path == null) {
Integer state = mAudioDevices.get(device);
if (path == null || state == null) {
return false;
}
switch (mAudioDevices.get(device)) {
switch (state.intValue()) {
case BluetoothA2dp.STATE_PLAYING:
return true;
case BluetoothA2dp.STATE_CONNECTED: