AudioService: fix missing AUDIO_BECOMING_NOISY intent
If Bluetooth service calls onBluetoothA2dpDeviceConfigChange() before setBluetoothA2dpDeviceConnectionState(), there is a chance that the first method fails leaving the A2DP device state disconnected in audio policy manager while it appears as connected in AudioService causing a failure to send the AUDIO_BECOMING_NOISY intent. Bug: 37687852 Test: Verify AUDIO_BECOMING_NOISY intent is sent even if race condition occurs. Change-Id: I014d145e7da5e7d267991ffb2ff50626e71247eb
This commit is contained in:
@@ -5149,7 +5149,7 @@ public class AudioService extends IAudioService.Stub
|
||||
|
||||
private void onBluetoothA2dpDeviceConfigChange(BluetoothDevice btDevice)
|
||||
{
|
||||
if (DEBUG_VOL) {
|
||||
if (DEBUG_DEVICES) {
|
||||
Log.d(TAG, "onBluetoothA2dpDeviceConfigChange btDevice=" + btDevice);
|
||||
}
|
||||
if (btDevice == null) {
|
||||
@@ -5166,8 +5166,13 @@ public class AudioService extends IAudioService.Stub
|
||||
final DeviceListSpec deviceSpec = mConnectedDevices.get(key);
|
||||
if (deviceSpec != null) {
|
||||
// Device is connected
|
||||
AudioSystem.handleDeviceConfigChange(device, address,
|
||||
btDevice.getName());
|
||||
if (AudioSystem.handleDeviceConfigChange(device, address,
|
||||
btDevice.getName()) != AudioSystem.AUDIO_STATUS_OK) {
|
||||
// force A2DP device disconnection in case of error so that AudioService state is
|
||||
// consistent with audio policy manager state
|
||||
setBluetoothA2dpDeviceConnectionState(
|
||||
btDevice, BluetoothA2dp.STATE_DISCONNECTED, BluetoothProfile.A2DP_SINK);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user