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