Update the A2dpService logic for creating/deleting state machine instances
* Create a new state machine instance for native stack events only if the
event is CONNECTION_STATE_CONNECTED or CONNECTION_STATE_CONNECTING
* Add an early check to reject connect() request if there are too many
connected devices.
* Fixed the logic inside updateOptionalCodecsSupport() so it cannot
create a new state machine instance
* Unbonding a device will remove the state machine instance only
if the device is disconnected
* If a device is disconnected, remove the state machine if
the device is already unbond
Also:
* Renamed canConnectToDevice() to connectionAllowedCheckMaxDevices()
* Add new method A2dpService.getDevices() - used only for testing
* Add a missing transition in the A2dpStateMachine from Connected
to Disconnecting on A2dpStackEvent.CONNECTION_STATE_DISCONNECTING
event.
* Fix the logic for checking the maximum number of state machines
to avoid DoS attack
* Add checks that bond state events and native stack events
contain a device
* Change the A2dpServiceTest setting to use MAX_CONNECTED_AUDIO_DEVICES
of 5 by default.
* Add internal mechanism in A2dpServiceTest to
- waitForNoIntent() - Wait and verify that no intent has been received
- verifyNoConnectionStateIntent() - Wait and verify that no connection
state intent has been received
* Add unit tests:
- testOutgoingConnectPriorityOff()
- testMaxConnectDevices()
- testCreateStateMachineStackEvents()
- testDeleteStateMachineUnbondEvents()
- testDeleteStateMachineDisconnectEvents()
* Add a new helper method TestUtils.getTestDevice()
* Minor cleanup: arguments renaming, etc.
Bug: 73212853
Test: Unit tests added:
runtest bluetooth --test-class com.android.bluetooth.a2dp.A2dpServiceTest
Change-Id: I484fcc04b7ce800df1a0e1cf8930816edae6ab91
4 files changed