Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5205a35f authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent 2d5c0d89
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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);
               }
            }
        }
    }