summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2025-03-21 20:22:50 -0700
committer Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2025-03-21 20:22:50 -0700
commit070fc13ede8ce9fe9544d36542b6bf00b0948e92 (patch)
tree3ddda803e3c37288ac87b9f5449c0859536a8c28
parentd3d6319c49935ac46de7adabfbff35f5c7ec66c7 (diff)
parent4d0a79dd0933ecb7e561d1346aca8b82ef3fa196 (diff)
Snap for 13256841 from 4d0a79dd0933ecb7e561d1346aca8b82ef3fa196 to 25Q2-release
Change-Id: I88d7faf8c54ebea0306d17719211c9276f0ebb18
-rw-r--r--android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java9
-rw-r--r--android/app/src/com/android/bluetooth/le_audio/LeAudioService.java10
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/btservice/AdapterServiceTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnableActivityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnablingActivityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppLauncherActivityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppServiceCleanupTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppUtilityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/opp/IncomingFileConfirmActivityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/pbap/BluetoothPbapActivityTest.java1
-rw-r--r--android/app/tests/instrumentation/com/android/bluetooth/telephony/CallInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/ObexAppParametersTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/SignedLongLongTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpCodecConfigTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStreamHandlerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dpsink/StackEventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowsablePlayerConnectorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowserPlayerWrapperTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/GPMWrapperTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/ImageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerListTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerWrapperTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/audio_util/MetadataTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpBipObexServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpCoverArtStorageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpPassthroughTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpTargetServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpVolumeManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcp/CoverArtTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpBipClientTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtProviderTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtStorageTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpItemTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseNodeTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseTreeTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/PlayerApplicationSettingsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/StackEventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipAttachmentFormatTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipDatetimeTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipEncodingTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageDescriptorTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageFormatTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImagePropertiesTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipPixelTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipTransformationTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImagePropertiesTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bas/BatteryServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bas/BatteryStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/BaseDataTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/PeriodicAdvertisementResultTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/bass_client/PublicBroadcastDataTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterPropertiesTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterSuspendTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/CompanionManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/ConfigTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/DataMigrationTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/MetricsLoggerTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/bluetoothKeystore/BluetoothKeystoreServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/storage/AudioPolicyEntityTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/storage/DatabaseManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/content_profiles/ContentProfileErrorReportUtilsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/gatt/AdvertiseBinderTest.kt2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementBinderTest.kt2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hap/HapClientNativeCallbackTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStackEventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/AtPhonebookTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetAgIndicatorEnableStateTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetClccResponseTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceAndStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStackEventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java50
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetVendorSpecificResultCodeTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/HfpNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/StackEventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/VendorCommandResponseProcessorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HeadsetClientServiceInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientCallTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientDeviceBlockTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/hid/HidHostServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/ContentControlIdKeeperTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcastServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcasterNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioNativeInterfaceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceTest.java8
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioTmapGattServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_scan/MsftAdvMonitorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanBinderTest.kt2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanClientTest.kt90
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanControllerTest.java540
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentObserverTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoContactElementTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingElementTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapFolderElementTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMasInstanceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingElementTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapObexServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapSmsPduTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapUtilsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageEmailTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageMimeTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageSmsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageVCardTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/ConvoContactInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/EventTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/FilterInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/MapContactTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/MsgTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/map/SmsMmsContactsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapContractTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapEmailProviderTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapIMProviderTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/BmessageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/EventReportTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientContentTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MessageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesFilterTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesListingTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/MnsObexServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mapclient/ObexTimeTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlGattServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlProfileTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppBatchTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppHandoverReceiverTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppNotificationTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexClientSessionTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexServerSessionTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppPreferenceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiverTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppSendFileInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppShareInfoTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferActivityTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferHistoryTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppUtilityTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapAuthenticatorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapCallLogComposerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapConfigTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapObexServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapSimVcardManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapUtilsTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerNestedClassesTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/HandlerForStringBufferTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbap/PbapStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapApplicationParametersTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountManagerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientConnectionHandlerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientContactsStorageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexAuthenticatorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexClientTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexTransportTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientSocketTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineOldTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookMetadataTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapSdpRecordTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/PhonebookPullRequestTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookMetadataTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapMessageTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverHidlTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapServerTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGattTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/tbs/TbsServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/telephony/BluetoothCallTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlInputDescriptorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlNativeCallbackTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlOffsetDescriptorTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceBinderTest.java2
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceTest.java1
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlStateMachineTest.java1
-rw-r--r--android/pandora/mmi2grpc/mmi2grpc/_audio.py2
-rw-r--r--android/pandora/mmi2grpc/mmi2grpc/hap.py7
-rw-r--r--android/pandora/server/configs/PtsBotTest.xml1
-rw-r--r--android/pandora/server/src/Hap.kt66
-rw-r--r--android/pandora/server/src/LeAudio.kt96
-rw-r--r--android/pandora/server/src/Pan.kt1
-rw-r--r--flags/adapter.aconfig10
-rw-r--r--flags/gap.aconfig7
-rw-r--r--flags/leaudio.aconfig57
-rw-r--r--framework/java/android/bluetooth/BluetoothAdapter.java6
-rw-r--r--framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java101
-rw-r--r--framework/tests/unit/src/android/bluetooth/BluetoothCodecConfigTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/BluetoothCodecStatusTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/BluetoothLeAudioCodecConfigTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/BluetoothUuidTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/le/ScanFilterTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/le/ScanRecordTest.java2
-rw-r--r--framework/tests/unit/src/android/bluetooth/le/ScanSettingsTest.java2
-rw-r--r--framework/tests/util/src/BlockingBluetoothAdapter.kt13
-rw-r--r--pandora/interfaces/pandora_experimental/hap.proto12
-rw-r--r--pandora/interfaces/pandora_experimental/le_audio.proto25
-rw-r--r--system/bta/le_audio/client.cc27
-rw-r--r--system/bta/le_audio/codec_manager.cc7
-rw-r--r--system/bta/le_audio/codec_manager_test.cc4
-rw-r--r--system/bta/le_audio/device_groups.cc24
-rw-r--r--system/bta/le_audio/le_audio_client_test.cc472
-rw-r--r--system/gd/hal/snoop_logger.cc14
-rw-r--r--system/gd/hal/snoop_logger.h2
275 files changed, 990 insertions, 970 deletions
diff --git a/android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index 6ea741af32..3c2fe0f8bf 100644
--- a/android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -58,6 +58,7 @@ import com.android.bluetooth.btservice.MetricsLogger;
import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.flags.Flags;
+import com.android.bluetooth.util.SystemProperties;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
@@ -187,6 +188,9 @@ class HeadsetStateMachine extends StateMachine {
BluetoothAssignedNumbers.GOOGLE);
}
+ @VisibleForTesting
+ static final String HFP_VOLUME_CONTROL_ENABLED = "bluetooth.hfp_volume_control.enabled";
+
private HeadsetStateMachine(
BluetoothDevice device,
Looper looper,
@@ -2026,7 +2030,10 @@ class HeadsetStateMachine extends StateMachine {
}
if (volumeType == HeadsetHalConstants.VOLUME_TYPE_SPK) {
mSpeakerVolume = volume;
- int flag = (mCurrentState == mAudioOn) ? AudioManager.FLAG_SHOW_UI : 0;
+ boolean showVolume =
+ !Flags.hfpVolumeControlProperty()
+ || SystemProperties.getBoolean(HFP_VOLUME_CONTROL_ENABLED, true);
+ int flag = showVolume && (mCurrentState == mAudioOn) ? AudioManager.FLAG_SHOW_UI : 0;
int volStream =
deprecateStreamBtSco()
? AudioManager.STREAM_VOICE_CALL
diff --git a/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java b/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
index 4f0d215e5b..54ced65311 100644
--- a/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
+++ b/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
@@ -348,7 +348,7 @@ public class LeAudioService extends ProfileService {
mLostLeadDeviceWhileStreaming = null;
mCurrentLeadDevice = null;
mInbandRingtoneEnabled = isInbandRingtoneEnabled;
- mAvailableContexts = Flags.leaudioUnicastNoAvailableContexts() ? null : 0;
+ mAvailableContexts = null;
mInputSelectableConfig = new ArrayList<>();
mOutputSelectableConfig = new ArrayList<>();
mInactivatedDueToContextType = false;
@@ -3371,11 +3371,6 @@ public class LeAudioService extends ProfileService {
boolean inputCodecOrFreqChanged) {
Log.i(TAG, "notifyAudioFrameworkForCodecConfigUpdate groupId: " + groupId);
- if (!Flags.leaudioCodecConfigCallbackOrderFix()) {
- Log.d(TAG, "leaudio_codec_config_callback_order_fix is not enabled");
- return;
- }
-
if (mActiveAudioOutDevice != null && outputCodecOrFreqChanged) {
int volume = getAudioDeviceGroupVolume(groupId);
@@ -4347,8 +4342,7 @@ public class LeAudioService extends ProfileService {
if (getConnectedPeerDevices(groupId).isEmpty()) {
descriptor.mIsConnected = false;
descriptor.mAutoActiveModeEnabled = true;
- descriptor.mAvailableContexts =
- Flags.leaudioUnicastNoAvailableContexts() ? null : 0;
+ descriptor.mAvailableContexts = null;
if (descriptor.isActive()) {
/* Notify Native layer */
removeActiveDevice(hasFallbackDevice);
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/btservice/AdapterServiceTest.java b/android/app/tests/instrumentation/com/android/bluetooth/btservice/AdapterServiceTest.java
index 768c62ee34..33dd02ef1f 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/btservice/AdapterServiceTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/btservice/AdapterServiceTest.java
@@ -97,6 +97,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
+/** Test cases for {@link AdapterService}. */
@MediumTest
@RunWith(ParameterizedAndroidJunit4.class)
public class AdapterServiceTest {
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnableActivityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnableActivityTest.java
index 23b8b132f3..98af642bfd 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnableActivityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnableActivityTest.java
@@ -47,6 +47,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+/** Test cases for {@link BluetoothOppBtEnableActivity}. */
public class BluetoothOppBtEnableActivityTest {
Intent mIntent;
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnablingActivityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnablingActivityTest.java
index d31d579e47..0a7003909d 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnablingActivityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppBtEnablingActivityTest.java
@@ -51,6 +51,7 @@ import org.mockito.Spy;
import java.util.concurrent.atomic.AtomicBoolean;
+/** Test cases for {@link BluetoothOppBtEnablingActivity}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppBtEnablingActivityTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppLauncherActivityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppLauncherActivityTest.java
index 7bb7bbfbc3..3e656d6169 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppLauncherActivityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppLauncherActivityTest.java
@@ -74,6 +74,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link BluetoothOppLauncherActivity}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppLauncherActivityTest {
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppServiceCleanupTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppServiceCleanupTest.java
index a1cb6e8fa9..7d72d8fc1e 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppServiceCleanupTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppServiceCleanupTest.java
@@ -36,6 +36,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothOppServiceCleanup}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppServiceCleanupTest {
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppUtilityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
index 92423c17ea..c27d16d8f8 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
@@ -35,6 +35,7 @@ import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Spy;
+/** Test cases for {@link BluetoothOppUtility}. */
public class BluetoothOppUtilityTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/opp/IncomingFileConfirmActivityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/opp/IncomingFileConfirmActivityTest.java
index 473b55c3e0..305fc53fc7 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/opp/IncomingFileConfirmActivityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/opp/IncomingFileConfirmActivityTest.java
@@ -69,6 +69,7 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
// Long class name cause problem with Junit4. It will raise java.lang.NoClassDefFoundError
+/** Test cases for {@link BluetoothOppIncomingFileConfirmActivity}. */
@RunWith(AndroidJUnit4.class)
public class IncomingFileConfirmActivityTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/pbap/BluetoothPbapActivityTest.java b/android/app/tests/instrumentation/com/android/bluetooth/pbap/BluetoothPbapActivityTest.java
index 09316dbc78..acd8a49077 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/pbap/BluetoothPbapActivityTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/pbap/BluetoothPbapActivityTest.java
@@ -55,6 +55,7 @@ import org.junit.runner.RunWith;
import java.util.concurrent.atomic.AtomicBoolean;
+/** Test cases for {@link BluetoothPbapActivity}. */
@LargeTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapActivityTest {
diff --git a/android/app/tests/instrumentation/com/android/bluetooth/telephony/CallInfoTest.java b/android/app/tests/instrumentation/com/android/bluetooth/telephony/CallInfoTest.java
index 18a4b4d053..f407f971d5 100644
--- a/android/app/tests/instrumentation/com/android/bluetooth/telephony/CallInfoTest.java
+++ b/android/app/tests/instrumentation/com/android/bluetooth/telephony/CallInfoTest.java
@@ -52,6 +52,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.UUID;
+/** Test cases for {@link CallInfo}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class CallInfoTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/ObexAppParametersTest.java b/android/app/tests/unit/src/com/android/bluetooth/ObexAppParametersTest.java
index 1166a4ae10..dec896c409 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/ObexAppParametersTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/ObexAppParametersTest.java
@@ -30,6 +30,7 @@ import org.junit.runner.RunWith;
import java.nio.ByteBuffer;
import java.util.Arrays;
+/** Test cases for {@link ObexAppParameters}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class ObexAppParametersTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/SignedLongLongTest.java b/android/app/tests/unit/src/com/android/bluetooth/SignedLongLongTest.java
index 00b4306532..e473bc2d5a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/SignedLongLongTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/SignedLongLongTest.java
@@ -25,7 +25,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** Test for SignedLongLong.java */
+/** Test cases for {@link SignedLongLong}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SignedLongLongTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpCodecConfigTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpCodecConfigTest.java
index 8f5dd839ae..5476f25186 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpCodecConfigTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpCodecConfigTest.java
@@ -44,6 +44,7 @@ import org.mockito.Mock;
import java.util.Arrays;
+/** Test cases for {@link A2dpCodecConfig}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class A2dpCodecConfigTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceBinderTest.java
index 65d00773ba..a754fe5376 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceBinderTest.java
@@ -46,7 +46,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link A2dpServiceBinder} */
+/** Test cases for {@link A2dpServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class A2dpServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceTest.java
index b2fb43b362..4cfd988490 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpServiceTest.java
@@ -82,6 +82,7 @@ import java.time.Duration;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link A2dpService}. */
@MediumTest
@RunWith(ParameterizedAndroidJunit4.class)
public class A2dpServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
index c44094bd2c..72b776ed42 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
@@ -69,6 +69,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.Arrays;
+/** Test cases for {@link A2dpStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class A2dpStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceBinderTest.java
index 6f7723caa9..bf2db08235 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceBinderTest.java
@@ -37,7 +37,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link A2dpSinkServiceBinder} */
+/** Test cases for {@link A2dpSinkServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class A2dpSinkServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceTest.java
index 8b108c65e5..d9b8bf0ede 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkServiceTest.java
@@ -54,6 +54,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link A2dpSinkService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class A2dpSinkServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachineTest.java
index 5641fbe7fc..c61300d7d2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachineTest.java
@@ -48,6 +48,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link A2dpSinkStateMachine}. */
@RunWith(AndroidJUnit4.class)
public class A2dpSinkStateMachineTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStreamHandlerTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStreamHandlerTest.java
index 0870b09f51..afb9715fe0 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStreamHandlerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/A2dpSinkStreamHandlerTest.java
@@ -49,6 +49,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link A2dpSinkStreamHandler}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class A2dpSinkStreamHandlerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/StackEventTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/StackEventTest.java
index 5a0b67d77e..0057695df6 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/StackEventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dpsink/StackEventTest.java
@@ -31,6 +31,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link StackEvent}. */
@RunWith(AndroidJUnit4.class)
public class StackEventTest {
private final BluetoothDevice mDevice = getTestDevice(21);
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowsablePlayerConnectorTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowsablePlayerConnectorTest.java
index 47109d6b16..63899b1004 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowsablePlayerConnectorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowsablePlayerConnectorTest.java
@@ -47,6 +47,7 @@ import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link BrowsablePlayerConnector}. */
@RunWith(AndroidJUnit4.class)
public final class BrowsablePlayerConnectorTest {
private static final int TIMEOUT_MS = 300;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowserPlayerWrapperTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowserPlayerWrapperTest.java
index 7d77021833..dfc3103acc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowserPlayerWrapperTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/BrowserPlayerWrapperTest.java
@@ -57,6 +57,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link BrowserPlayerWrapper}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BrowserPlayerWrapperTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/GPMWrapperTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/GPMWrapperTest.java
index 74d63bddbf..261cea6c24 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/GPMWrapperTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/GPMWrapperTest.java
@@ -37,6 +37,7 @@ import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link GPMWrapper}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class GPMWrapperTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/ImageTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/ImageTest.java
index a74a0e7789..588c34d55b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/ImageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/ImageTest.java
@@ -49,6 +49,7 @@ import org.mockito.Mock;
import java.io.InputStream;
+/** Test cases for {@link Image}. */
@RunWith(AndroidJUnit4.class)
public class ImageTest {
private Context mTargetContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerListTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerListTest.java
index c7d5458ca2..1eb7960fe8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerListTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerListTest.java
@@ -49,6 +49,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
+/** Test cases for {@link MediaPlayerList}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MediaPlayerListTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerWrapperTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerWrapperTest.java
index ca7d227747..0a2991cecf 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerWrapperTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MediaPlayerWrapperTest.java
@@ -54,6 +54,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+/** Test cases for {@link MediaPlayerWrapper}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MediaPlayerWrapperTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MetadataTest.java b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MetadataTest.java
index b0ac35637d..fafeb1e459 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/audio_util/MetadataTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/audio_util/MetadataTest.java
@@ -51,6 +51,7 @@ import org.mockito.Mock;
import java.io.InputStream;
+/** Test cases for {@link Metadata}. */
@RunWith(AndroidJUnit4.class)
public class MetadataTest {
private Context mTargetContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpBipObexServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpBipObexServerTest.java
index d67e19ee60..d8e35e3eef 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpBipObexServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpBipObexServerTest.java
@@ -47,6 +47,7 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
+/** Test cases for {@link AvrcpBipObexServer}. */
@RunWith(AndroidJUnit4.class)
public class AvrcpBipObexServerTest {
private static final String TYPE_GET_LINKED_THUMBNAIL = "x-bt/img-thm";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpCoverArtStorageTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpCoverArtStorageTest.java
index 46e24db940..6655ead6ac 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpCoverArtStorageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpCoverArtStorageTest.java
@@ -35,6 +35,7 @@ import org.junit.runner.RunWith;
import java.io.InputStream;
+/** Test cases for {@link AvrcpCoverArtStorage}. */
@RunWith(AndroidJUnit4.class)
public class AvrcpCoverArtStorageTest {
private Resources mTestResources;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpPassthroughTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpPassthroughTest.java
index 8dbaf5833b..0876c4ae55 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpPassthroughTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpPassthroughTest.java
@@ -9,6 +9,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+/** Test cases for {@link AvrcpPassthrough}. */
@RunWith(JUnit4.class)
public final class AvrcpPassthroughTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpTargetServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpTargetServiceTest.java
index 1111e05af7..42ff54db9a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpTargetServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpTargetServiceTest.java
@@ -59,6 +59,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link AvrcpTargetService}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AvrcpTargetServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpVolumeManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpVolumeManagerTest.java
index 4ce83f3a56..dee01695ba 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpVolumeManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/AvrcpVolumeManagerTest.java
@@ -47,6 +47,7 @@ import org.junit.rules.TestName;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link AvrcpVolumeManager}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AvrcpVolumeManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcp/CoverArtTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcp/CoverArtTest.java
index 1312a589aa..11631341ac 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcp/CoverArtTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcp/CoverArtTest.java
@@ -42,6 +42,7 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
+/** Test cases for {@link CoverArt}. */
@RunWith(AndroidJUnit4.class)
public class CoverArtTest {
private Resources mTestResources;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpBipClientTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpBipClientTest.java
index 16360b5cce..9276985e84 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpBipClientTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpBipClientTest.java
@@ -42,6 +42,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link AvrcpBipClient}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AvrcpBipClientTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterfaceTest.java
index 6364c499a4..6c2841efe7 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterfaceTest.java
@@ -25,6 +25,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link AvrcpControllerNativeInterface}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class AvrcpControllerNativeInterfaceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceBinderTest.java
index c4bc5dad1a..e994e5bb0d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceBinderTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link AvrcpControllerServiceBinder} */
+/** Test cases for {@link AvrcpControllerServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AvrcpControllerServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceTest.java
index ee46a1accd..abed5c7f6b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerServiceTest.java
@@ -62,6 +62,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link AvrcpControllerService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class AvrcpControllerServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachineTest.java
index 43688601fe..76bc1c60de 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachineTest.java
@@ -68,6 +68,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+/** Test cases for {@link AvrcpControllerStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class AvrcpControllerStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtProviderTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtProviderTest.java
index b2fbbe132f..5fb2c5edfa 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtProviderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtProviderTest.java
@@ -38,6 +38,7 @@ import org.mockito.Mock;
import java.io.FileNotFoundException;
+/** Test cases for {@link AvrcpCoverArtProvider}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AvrcpCoverArtProviderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtStorageTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtStorageTest.java
index 33aa418fda..1e23a27ae8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtStorageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpCoverArtStorageTest.java
@@ -39,7 +39,7 @@ import org.junit.runner.RunWith;
import java.io.InputStream;
-/** A test suite for the AvrcpCoverArtStorage class. */
+/** Test cases for {@link AvrcpCoverArtStorage}. */
@RunWith(AndroidJUnit4.class)
public final class AvrcpCoverArtStorageTest {
private final Context mTargetContext =
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpItemTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpItemTest.java
index 40c03dd0ae..a11423a34c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpItemTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpItemTest.java
@@ -33,7 +33,7 @@ import com.google.common.testing.EqualsTester;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the AvrcpItem class. */
+/** Test cases for {@link AvrcpItem}. */
@RunWith(AndroidJUnit4.class)
public final class AvrcpItemTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayerTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayerTest.java
index 95d12cb2a1..e7794c8077 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayerTest.java
@@ -31,6 +31,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
+/** Test cases for {@link AvrcpPlayer}. */
public class AvrcpPlayerTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseNodeTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseNodeTest.java
index aa06d75c77..d978cecccf 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseNodeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseNodeTest.java
@@ -40,6 +40,7 @@ import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link BrowseNode}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BrowseNodeTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseTreeTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseTreeTest.java
index 5d359d1ef4..0439478842 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseTreeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/BrowseTreeTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import java.util.Set;
+/** Test cases for {@link BrowseTree}. */
public class BrowseTreeTest {
private static final String ILLEGAL_ID = "illegal_id";
private static final String TEST_HANDLE = "test_handle";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/PlayerApplicationSettingsTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/PlayerApplicationSettingsTest.java
index a106f6e97f..17dca38977 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/PlayerApplicationSettingsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/PlayerApplicationSettingsTest.java
@@ -26,6 +26,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PlayerApplicationSettings}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PlayerApplicationSettingsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/StackEventTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/StackEventTest.java
index ded802cbb7..005e96d4e2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/StackEventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/StackEventTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link StackEvent}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class StackEventTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipAttachmentFormatTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipAttachmentFormatTest.java
index 68b06e5c95..bc3873aee7 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipAttachmentFormatTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipAttachmentFormatTest.java
@@ -31,7 +31,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
-/** A test suite for the BipAttachmentFormat class */
+/** Test cases for {@link BipAttachmentFormat}. */
@RunWith(AndroidJUnit4.class)
public class BipAttachmentFormatTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipDatetimeTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipDatetimeTest.java
index abdee02e65..025abaa8ec 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipDatetimeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipDatetimeTest.java
@@ -32,7 +32,7 @@ import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
-/** A test suite for the BipDateTime class */
+/** Test cases for {@link BipDatetime}. */
@RunWith(AndroidJUnit4.class)
public class BipDatetimeTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipEncodingTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipEncodingTest.java
index dd6c498679..0c637f6777 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipEncodingTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipEncodingTest.java
@@ -23,7 +23,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the BipEncoding class */
+/** Test cases for {@link BipEncoding}. */
@RunWith(AndroidJUnit4.class)
public class BipEncodingTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageDescriptorTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageDescriptorTest.java
index 0d87190643..75ac3ac536 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageDescriptorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageDescriptorTest.java
@@ -25,7 +25,7 @@ import com.google.common.testing.EqualsTester;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the BipImageDescriptor class */
+/** Test cases for {@link BipImageDescriptor}. */
@RunWith(AndroidJUnit4.class)
public class BipImageDescriptorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageFormatTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageFormatTest.java
index 2ee0bda8bb..4fb29f0699 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageFormatTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageFormatTest.java
@@ -25,7 +25,7 @@ import com.google.common.testing.EqualsTester;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the BipImageFormat class */
+/** Test cases for {@link BipImageFormat}. */
@RunWith(AndroidJUnit4.class)
public class BipImageFormatTest {
@Test
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImagePropertiesTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImagePropertiesTest.java
index a1c9829273..e8cd024158 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImagePropertiesTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImagePropertiesTest.java
@@ -27,7 +27,7 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-/** A test suite for the BipImageProperties class */
+/** Test cases for {@link BipImageProperties}. */
@RunWith(AndroidJUnit4.class)
public class BipImagePropertiesTest {
private static final String IMAGE_HANDLE = "123456789";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageTest.java
index ca98f02d21..b4d81ca7f9 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipImageTest.java
@@ -33,7 +33,7 @@ import org.junit.runner.RunWith;
import java.io.InputStream;
-/** A test suite for the BipImage class */
+/** Test cases for {@link BipImage}. */
@RunWith(AndroidJUnit4.class)
public class BipImageTest {
private static final String sImageHandle = "123456789";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipPixelTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipPixelTest.java
index 1f47f0c606..51df561043 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipPixelTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipPixelTest.java
@@ -23,7 +23,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the BipPixel class */
+/** Test cases for {@link BipPixel}. */
@RunWith(AndroidJUnit4.class)
public class BipPixelTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipTransformationTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipTransformationTest.java
index 7d5eb5a986..bfaa399881 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipTransformationTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/BipTransformationTest.java
@@ -23,7 +23,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** A test suite for the BipTransformation class */
+/** Test cases for {@link BipTransformation}. */
@RunWith(AndroidJUnit4.class)
public class BipTransformationTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImagePropertiesTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImagePropertiesTest.java
index 9633aa4f95..2ad0923cb2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImagePropertiesTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImagePropertiesTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link RequestGetImageProperties}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class RequestGetImagePropertiesTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImageTest.java b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImageTest.java
index 4d5ca54dfb..f1e4b1f001 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/avrcpcontroller/bip/RequestGetImageTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link RequestGetImage}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class RequestGetImageTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryServiceTest.java
index 84c9640524..f12a91f276 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryServiceTest.java
@@ -54,6 +54,7 @@ import org.mockito.Mock;
import java.util.List;
+/** Test cases for {@link BatteryService}. */
@MediumTest
@RunWith(JUnit4.class)
public class BatteryServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryStateMachineTest.java
index 5e439f826b..982400f2fb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bas/BatteryStateMachineTest.java
@@ -50,6 +50,7 @@ import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
+/** Test cases for {@link BatteryStateMachine}. */
@SmallTest
@RunWith(JUnit4.class)
public class BatteryStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BaseDataTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BaseDataTest.java
index c8305744e2..2b644a3853 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BaseDataTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BaseDataTest.java
@@ -28,6 +28,7 @@ import org.junit.runners.JUnit4;
import java.util.Random;
+/** Test cases for {@link BaseData}. */
@RunWith(JUnit4.class)
public class BaseDataTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceBinderTest.java
index 584f0cdeea..84b34536d2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceBinderTest.java
@@ -50,7 +50,7 @@ import org.mockito.Mockito;
import java.util.Collections;
import java.util.List;
-/** Test cases for {@link BassClientServiceBinder} */
+/** Test cases for {@link BassClientServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BassClientServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceTest.java
index 464cb5c652..bbdc6bb9b1 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientServiceTest.java
@@ -123,7 +123,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-/** Tests for {@link BassClientService} */
+/** Test cases for {@link BassClientService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BassClientServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientStateMachineTest.java
index 6915785794..c0f21e18fb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/BassClientStateMachineTest.java
@@ -130,6 +130,7 @@ import java.util.List;
import java.util.Random;
import java.util.UUID;
+/** Test cases for {@link BassClientStateMachine}. */
@MediumTest
@RunWith(JUnit4.class)
public class BassClientStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/PeriodicAdvertisementResultTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/PeriodicAdvertisementResultTest.java
index d7d0605fb5..bec7426b66 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/PeriodicAdvertisementResultTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/PeriodicAdvertisementResultTest.java
@@ -29,6 +29,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PeriodicAdvertisementResult}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PeriodicAdvertisementResultTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/bass_client/PublicBroadcastDataTest.java b/android/app/tests/unit/src/com/android/bluetooth/bass_client/PublicBroadcastDataTest.java
index 48c2b7935c..422225a419 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/bass_client/PublicBroadcastDataTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/bass_client/PublicBroadcastDataTest.java
@@ -28,6 +28,7 @@ import org.junit.runners.JUnit4;
import java.util.Random;
+/** Test cases for {@link PublicBroadcastData}. */
@RunWith(JUnit4.class)
public class PublicBroadcastDataTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java
index 2af03df4ae..746e4985e9 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java
@@ -84,6 +84,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+/** Test cases for {@link ActiveDeviceManager}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ActiveDeviceManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterPropertiesTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterPropertiesTest.java
index db3a61cb3a..8699768543 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterPropertiesTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterPropertiesTest.java
@@ -44,6 +44,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link AdapterProperties}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class AdapterPropertiesTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceBinderTest.java
index 7e143a2851..dcf1aaf4bc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceBinderTest.java
@@ -42,7 +42,7 @@ import org.mockito.Mockito;
import java.io.FileDescriptor;
-/** Test cases for {@link AdapterServiceBinder} */
+/** Test cases for {@link AdapterServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AdapterServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterSuspendTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterSuspendTest.java
index bc86ce8ee1..ee866721a5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterSuspendTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterSuspendTest.java
@@ -41,6 +41,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link AdapterSuspend}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AdapterSuspendTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java
index f420ffb43f..c08eaa32e4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java
@@ -49,6 +49,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link BondStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BondStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/CompanionManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/CompanionManagerTest.java
index bea6e8ea6d..72b5389982 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/CompanionManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/CompanionManagerTest.java
@@ -40,6 +40,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link CompanionManager}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class CompanionManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/ConfigTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/ConfigTest.java
index 704234cf1e..e338d8b9df 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/ConfigTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/ConfigTest.java
@@ -26,6 +26,7 @@ import org.junit.runners.JUnit4;
import java.util.Arrays;
+/** Test cases for {@link Config}. */
@RunWith(JUnit4.class)
public final class ConfigTest {
@Test
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/DataMigrationTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/DataMigrationTest.java
index ec8bfd09be..2b7a5d26b9 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/DataMigrationTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/DataMigrationTest.java
@@ -61,6 +61,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link DataMigration}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class DataMigrationTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/MetricsLoggerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/MetricsLoggerTest.java
index ae3db21382..54e986d93d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/MetricsLoggerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/MetricsLoggerTest.java
@@ -58,7 +58,7 @@ import java.time.ZoneId;
import java.util.HashMap;
import java.util.Map;
-/** Unit tests for {@link MetricsLogger} */
+/** Test cases for {@link MetricsLogger}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MetricsLoggerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
index 28188621a0..068379dfe4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
@@ -80,6 +80,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+/** Test cases for {@link PhonePolicy}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PhonePolicyTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
index 960374ddae..1a1b2258ce 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
@@ -65,6 +65,7 @@ import java.util.Map;
import java.util.concurrent.FutureTask;
import java.util.stream.Collectors;
+/** Test cases for {@link ProfileService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ProfileServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
index 4a261c1b06..2f50505082 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/RemoteDevicesTest.java
@@ -57,6 +57,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.ArrayList;
+/** Test cases for {@link RemoteDevices}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class RemoteDevicesTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java
index 8cbf61d8d8..a5a87971fb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java
@@ -49,6 +49,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link SilenceDeviceManager}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class SilenceDeviceManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/bluetoothKeystore/BluetoothKeystoreServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/bluetoothKeystore/BluetoothKeystoreServiceTest.java
index 0b3cc08343..3047b07016 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/bluetoothKeystore/BluetoothKeystoreServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/bluetoothKeystore/BluetoothKeystoreServiceTest.java
@@ -42,6 +42,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+/** Test cases for {@link BluetoothKeystoreService}. */
@RunWith(JUnit4.class)
public final class BluetoothKeystoreServiceTest {
private static final String TAG = BluetoothKeystoreServiceTest.class.getSimpleName();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/AudioPolicyEntityTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/AudioPolicyEntityTest.java
index 317153b64b..87c102438f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/AudioPolicyEntityTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/AudioPolicyEntityTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+/** Test cases for {@link AudioPolicyEntity}. */
@RunWith(JUnit4.class)
public final class AudioPolicyEntityTest {
@Test
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/DatabaseManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/DatabaseManagerTest.java
index 21449beaf5..f3adb8244b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/DatabaseManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/DatabaseManagerTest.java
@@ -73,6 +73,7 @@ import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link DatabaseManager}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public final class DatabaseManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/content_profiles/ContentProfileErrorReportUtilsTest.java b/android/app/tests/unit/src/com/android/bluetooth/content_profiles/ContentProfileErrorReportUtilsTest.java
index e682e9af17..2a86f1291e 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/content_profiles/ContentProfileErrorReportUtilsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/content_profiles/ContentProfileErrorReportUtilsTest.java
@@ -25,6 +25,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link ContentProfileErrorReportUtils}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class ContentProfileErrorReportUtilsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceBinderTest.java
index 81adae18f4..916fe65f2f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceBinderTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link CsipSetCoordinatorServiceBinder} */
+/** Test cases for {@link CsipSetCoordinatorServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class CsipSetCoordinatorServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceTest.java
index 72fbd125b6..80d06fc4c4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorServiceTest.java
@@ -82,6 +82,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.List;
import java.util.UUID;
+/** Test cases for {@link CsipSetCoordinatorService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class CsipSetCoordinatorServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorStateMachineTest.java
index 4c9cd6fb5e..339bb318be 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/csip/CsipSetCoordinatorStateMachineTest.java
@@ -51,6 +51,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
+/** Test cases for {@link CsipSetCoordinatorStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class CsipSetCoordinatorStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/gatt/AdvertiseBinderTest.kt b/android/app/tests/unit/src/com/android/bluetooth/gatt/AdvertiseBinderTest.kt
index 6b038678f0..467c5e9815 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/gatt/AdvertiseBinderTest.kt
+++ b/android/app/tests/unit/src/com/android/bluetooth/gatt/AdvertiseBinderTest.kt
@@ -37,7 +37,7 @@ import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.kotlin.whenever
-/** Test cases for [AdvertiseBinder] */
+/** Test cases for [AdvertiseBinder]. */
@SmallTest
@RunWith(AndroidJUnit4::class)
class AdvertiseBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementBinderTest.kt b/android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementBinderTest.kt
index b20eda9a17..ac890b1ef5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementBinderTest.kt
+++ b/android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementBinderTest.kt
@@ -42,7 +42,7 @@ import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.kotlin.whenever
-/** Test cases for [DistanceMeasurementBinder] */
+/** Test cases for [DistanceMeasurementBinder]. */
@SmallTest
@RunWith(AndroidJUnit4::class)
class DistanceMeasurementBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceBinderTest.java
index f9bb1d556d..b956bec5cc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceBinderTest.java
@@ -42,7 +42,7 @@ import org.mockito.Mock;
import java.util.UUID;
-/** Test cases for {@link GattServiceBinder} */
+/** Test cases for {@link GattServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class GattServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientNativeCallbackTest.java b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientNativeCallbackTest.java
index 5e1218b202..004051b041 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientNativeCallbackTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientNativeCallbackTest.java
@@ -35,6 +35,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
+/** Test cases for {@link HapClientNativeCallback}. */
public class HapClientNativeCallbackTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
@Rule public Expect expect = Expect.create();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceBinderTest.java
index 3544578497..3178045545 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceBinderTest.java
@@ -44,7 +44,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
-/** Test cases for {@link HapClientServiceBinder} */
+/** Test cases for {@link HapClientServiceBinder}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HapClientServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceTest.java
index 045ed21e09..1cf197294b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientServiceTest.java
@@ -92,6 +92,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
+/** Test cases for {@link HapClientService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HapClientServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStackEventTest.java b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStackEventTest.java
index 01a12b7a9b..1f40cec30e 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStackEventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStackEventTest.java
@@ -22,6 +22,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+/** Test cases for {@link HapClientStackEvent}. */
@RunWith(JUnit4.class)
public final class HapClientStackEventTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStateMachineTest.java
index f953dc47ff..83bd1ee7d8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hap/HapClientStateMachineTest.java
@@ -63,6 +63,7 @@ import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.hamcrest.MockitoHamcrest;
+/** Test cases for {@link HapClientStateMachine}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HapClientStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidNativeInterfaceTest.java
index 6b32743a7b..cf2e78e06a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidNativeInterfaceTest.java
@@ -40,6 +40,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
+/** Test cases for {@link HearingAidNativeInterface}. */
public class HearingAidNativeInterfaceTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceBinderTest.java
index 8dae3bf594..ac740f3a16 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceBinderTest.java
@@ -46,7 +46,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
-/** Test cases for {@link HearingAidServiceBinder} */
+/** Test cases for {@link HearingAidServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HearingAidServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceTest.java
index a284d6a414..760489f724 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidServiceTest.java
@@ -80,6 +80,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.List;
+/** Test cases for {@link HearingAidService}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HearingAidServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidStateMachineTest.java
index 07cd5703ff..6511691991 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hearingaid/HearingAidStateMachineTest.java
@@ -57,6 +57,7 @@ import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.hamcrest.MockitoHamcrest;
+/** Test cases for {@link HearingAidStateMachine}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HearingAidStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/AtPhonebookTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/AtPhonebookTest.java
index b54da60e79..1d7a9a2bdb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/AtPhonebookTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/AtPhonebookTest.java
@@ -56,6 +56,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
+/** Test cases for {@link AtPhonebook}. */
@RunWith(AndroidJUnit4.class)
public class AtPhonebookTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetAgIndicatorEnableStateTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetAgIndicatorEnableStateTest.java
index 8fa050b679..462182fe54 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetAgIndicatorEnableStateTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetAgIndicatorEnableStateTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link HeadsetAgIndicatorEnableState}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetAgIndicatorEnableStateTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetClccResponseTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetClccResponseTest.java
index 63e0f2632d..9350e3bc5c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetClccResponseTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetClccResponseTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link HeadsetClccResponse}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetClccResponseTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java
index edcf484239..0c808f1352 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java
@@ -43,7 +43,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Unit test to verify various methods in {@link HeadsetPhoneState} */
+/** Test cases for {@link HeadsetPhoneState}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HeadsetPhoneStateTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceAndStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceAndStateMachineTest.java
index 835f03aaa2..6595d55deb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceAndStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceAndStateMachineTest.java
@@ -89,6 +89,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+/** Test cases for {@link HeadsetServiceAndStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HeadsetServiceAndStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceBinderTest.java
index 73f3610505..efbbe34e56 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link HeadsetServiceBinder} */
+/** Test cases for {@link HeadsetServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceTest.java
index b16578c823..2e03a61c22 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetServiceTest.java
@@ -84,7 +84,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Set;
-/** Tests for {@link HeadsetService} */
+/** Test cases for {@link HeadsetService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HeadsetServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStackEventTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStackEventTest.java
index d5f66da856..43e0d3d58e 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStackEventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStackEventTest.java
@@ -28,6 +28,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link HeadsetStackEvent}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetStackEventTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java
index 68c17a10f8..529110f7d2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java
@@ -69,10 +69,12 @@ import com.android.bluetooth.TestUtils;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.ActiveDeviceManager;
import com.android.bluetooth.btservice.AdapterService;
+import com.android.bluetooth.btservice.PhonePolicy;
import com.android.bluetooth.btservice.RemoteDevices;
import com.android.bluetooth.btservice.SilenceDeviceManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.flags.Flags;
+import com.android.bluetooth.util.SystemProperties;
import org.junit.After;
import org.junit.Before;
@@ -86,7 +88,7 @@ import org.mockito.Mockito;
import java.util.ArrayList;
-/** Tests for {@link HeadsetStateMachine} */
+/** Test cases for {@link HeadsetStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HeadsetStateMachineTest {
@@ -121,6 +123,7 @@ public class HeadsetStateMachineTest {
private MockContentResolver mMockContentResolver;
@Mock private HeadsetNativeInterface mNativeInterface;
@Mock private RemoteDevices mRemoteDevices;
+ @Mock private SystemProperties.MockableSystemProperties mProperties;
@Before
public void setUp() throws Exception {
@@ -175,6 +178,8 @@ public class HeadsetStateMachineTest {
mAdapterService,
mNativeInterface,
mSystemInterface);
+
+ SystemProperties.mProperties = mProperties;
}
@After
@@ -1765,6 +1770,49 @@ public class HeadsetStateMachineTest {
verify(mockAudioManager).setStreamVolume(AudioManager.STREAM_VOICE_CALL, 2, 0);
}
+ @RequiresFlagsEnabled(Flags.FLAG_HFP_VOLUME_CONTROL_PROPERTY)
+ @Test
+ public void testProcessVolumeEventAudioConnected_withVolumeControlEnabled_ShowUiFlagEnabled() {
+ doReturn(true)
+ .when(mProperties)
+ .getBoolean(eq(HeadsetStateMachine.HFP_VOLUME_CONTROL_ENABLED), anyBoolean());
+
+ setUpAudioOnState();
+
+ when(mHeadsetService.getActiveDevice()).thenReturn(mDevice);
+ AudioManager mockAudioManager = mock(AudioManager.class);
+ when(mockAudioManager.getStreamVolume(anyInt())).thenReturn(1);
+ when(mSystemInterface.getAudioManager()).thenReturn(mockAudioManager);
+
+ mHeadsetStateMachine.processVolumeEvent(HeadsetHalConstants.VOLUME_TYPE_SPK, 2);
+
+ var flagsCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(mockAudioManager).setStreamVolume(anyInt(), anyInt(), flagsCaptor.capture());
+ assertThat(flagsCaptor.getValue() & AudioManager.FLAG_SHOW_UI)
+ .isEqualTo(AudioManager.FLAG_SHOW_UI);
+ }
+
+ @RequiresFlagsEnabled(Flags.FLAG_HFP_VOLUME_CONTROL_PROPERTY)
+ @Test
+ public void testProcessVolumeEventAudioConnected_withVolumeControlEnabled_ShowUiFlagDisabled() {
+ doReturn(false)
+ .when(mProperties)
+ .getBoolean(eq(HeadsetStateMachine.HFP_VOLUME_CONTROL_ENABLED), anyBoolean());
+
+ setUpAudioOnState();
+
+ when(mHeadsetService.getActiveDevice()).thenReturn(mDevice);
+ AudioManager mockAudioManager = mock(AudioManager.class);
+ when(mockAudioManager.getStreamVolume(anyInt())).thenReturn(1);
+ when(mSystemInterface.getAudioManager()).thenReturn(mockAudioManager);
+
+ mHeadsetStateMachine.processVolumeEvent(HeadsetHalConstants.VOLUME_TYPE_SPK, 2);
+
+ var flagsCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(mockAudioManager).setStreamVolume(anyInt(), anyInt(), flagsCaptor.capture());
+ assertThat(flagsCaptor.getValue() & AudioManager.FLAG_SHOW_UI).isEqualTo(0);
+ }
+
@Test
public void testVolumeChangeEvent_fromIntentWhenAudioOn() {
setUpAudioOnState();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetVendorSpecificResultCodeTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetVendorSpecificResultCodeTest.java
index cfb1dea03c..8afc87f7ab 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetVendorSpecificResultCodeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetVendorSpecificResultCodeTest.java
@@ -28,6 +28,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link HeadsetVendorSpecificResultCode}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetVendorSpecificResultCodeTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceBinderTest.java
index 87f18055e5..ff08ed765a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link HeadsetClientServiceBinder} */
+/** Test cases for {@link HeadsetClientServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetClientServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java
index a8a81b0440..5e6eac9d11 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java
@@ -62,6 +62,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link HeadsetClientService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HeadsetClientServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachineTest.java
index 7e47efeb4a..1395089d3f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachineTest.java
@@ -84,6 +84,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.List;
import java.util.Set;
+/** Test cases for {@link HeadsetClientStateMachine}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HeadsetClientStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HfpNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HfpNativeInterfaceTest.java
index bd480693e8..681d98e56b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HfpNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/HfpNativeInterfaceTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link HfpNativeInterface}. */
public class HfpNativeInterfaceTest {
private static final byte[] TEST_DEVICE_ADDRESS =
new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/StackEventTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/StackEventTest.java
index cb397e29ec..350f332b58 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/StackEventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/StackEventTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import java.lang.reflect.Field;
+/** Test cases for {@link StackEvent}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class StackEventTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/VendorCommandResponseProcessorTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/VendorCommandResponseProcessorTest.java
index 0c9522b05b..2b7ca8da47 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/VendorCommandResponseProcessorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/VendorCommandResponseProcessorTest.java
@@ -39,6 +39,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link VendorCommandResponseProcessor}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class VendorCommandResponseProcessorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HeadsetClientServiceInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HeadsetClientServiceInterfaceTest.java
index 11d5a02a56..86daa5adae 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HeadsetClientServiceInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HeadsetClientServiceInterfaceTest.java
@@ -39,6 +39,7 @@ import org.mockito.Mock;
import java.util.List;
import java.util.Set;
+/** Test cases for {@link HeadsetClientServiceInterface}. */
@RunWith(AndroidJUnit4.class)
public class HeadsetClientServiceInterfaceTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientCallTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientCallTest.java
index d622a00666..a0d622cf15 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientCallTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientCallTest.java
@@ -28,6 +28,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link HfpClientCall}. */
@RunWith(AndroidJUnit4.class)
public class HfpClientCallTest {
private static final int TEST_ID = 0;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionServiceTest.java
index d6cffe4f20..ba858947f1 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionServiceTest.java
@@ -64,6 +64,7 @@ import org.mockito.Mock;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link HfpClientConnectionService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HfpClientConnectionServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionTest.java
index 5423abf868..31a3a61073 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientConnectionTest.java
@@ -46,6 +46,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.util.Set;
+/** Test cases for {@link HfpClientConnection}. */
@MediumTest
@RunWith(MockitoJUnitRunner.class)
public class HfpClientConnectionTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientDeviceBlockTest.java b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientDeviceBlockTest.java
index 09178c30d5..85388f52a4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientDeviceBlockTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hfpclient/connserv/HfpClientDeviceBlockTest.java
@@ -35,13 +35,13 @@ import androidx.test.filters.MediumTest;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link HfpClientDeviceBlock}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HfpClientDeviceBlockTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceNativeInterfaceTest.java
index d393b8dc65..b67eadbdb8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceNativeInterfaceTest.java
@@ -34,6 +34,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
+/** Test cases for {@link HidDeviceNativeInterface}. */
public class HidDeviceNativeInterfaceTest {
private static final byte[] TEST_DEVICE_ADDRESS =
new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceBinderTest.java
index 4369e85310..ad15865941 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceBinderTest.java
@@ -42,7 +42,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link HidDeviceServiceBinder} */
+/** Test cases for {@link HidDeviceServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HidDeviceServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceTest.java
index a242f054a7..cff2659d8a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hid/HidDeviceServiceTest.java
@@ -74,6 +74,7 @@ import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.hamcrest.MockitoHamcrest;
+/** Test cases for {@link HidDeviceService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HidDeviceServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/hid/HidHostServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/hid/HidHostServiceTest.java
index 10f5f3257f..bc0d0167c0 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/hid/HidHostServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/hid/HidHostServiceTest.java
@@ -51,6 +51,7 @@ import org.mockito.Mock;
import java.util.List;
+/** Test cases for {@link HidHostService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class HidHostServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/ContentControlIdKeeperTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/ContentControlIdKeeperTest.java
index 0fc41d3d0c..03f7fb345d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/ContentControlIdKeeperTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/ContentControlIdKeeperTest.java
@@ -41,6 +41,7 @@ import org.mockito.Mock;
import java.util.Map;
import java.util.UUID;
+/** Test cases for {@link ContentControlIdKeeper}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ContentControlIdKeeperTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcastServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcastServiceTest.java
index e1569ea836..5f3beeea95 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcastServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcastServiceTest.java
@@ -113,6 +113,7 @@ import org.mockito.hamcrest.MockitoHamcrest;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link LeAudioBroadcastService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class LeAudioBroadcastServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcasterNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcasterNativeInterfaceTest.java
index f9c57e1494..c3dc110482 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcasterNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioBroadcasterNativeInterfaceTest.java
@@ -35,6 +35,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link LeAudioBroadcasterNativeInterface}. */
@RunWith(AndroidJUnit4.class)
public class LeAudioBroadcasterNativeInterfaceTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioNativeInterfaceTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioNativeInterfaceTest.java
index 369304c608..978b2b192a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioNativeInterfaceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioNativeInterfaceTest.java
@@ -36,6 +36,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link LeAudioNativeInterface}. */
@RunWith(AndroidJUnit4.class)
public class LeAudioNativeInterfaceTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceBinderTest.java
index 68677ffedb..623ced680c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceBinderTest.java
@@ -48,7 +48,7 @@ import org.mockito.Mockito;
import java.util.UUID;
-/** Test cases for {@link LeAudioServiceBinder} */
+/** Test cases for {@link LeAudioServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class LeAudioServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceTest.java
index cf836ddc3c..b69b864bb4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioServiceTest.java
@@ -123,6 +123,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
+/** Test cases for {@link LeAudioService}. */
@MediumTest
@RunWith(ParameterizedAndroidJunit4.class)
public class LeAudioServiceTest {
@@ -210,8 +211,6 @@ public class LeAudioServiceTest {
public static List<FlagsParameterization> getParams() {
return FlagsParameterization.progressionOf(
Flags.FLAG_LEAUDIO_BROADCAST_PRIMARY_GROUP_SELECTION,
- Flags.FLAG_LEAUDIO_CODEC_CONFIG_CALLBACK_ORDER_FIX,
- Flags.FLAG_LEAUDIO_UNICAST_NO_AVAILABLE_CONTEXTS,
Flags.FLAG_LEAUDIO_BROADCAST_API_MANAGE_PRIMARY_GROUP,
Flags.FLAG_DO_NOT_HARDCODE_TMAP_ROLE_MASK);
}
@@ -1842,7 +1841,6 @@ public class LeAudioServiceTest {
/** Test native interface group status message handling */
@Test
- @EnableFlags(Flags.FLAG_LEAUDIO_CODEC_CONFIG_CALLBACK_ORDER_FIX)
public void testMessageFromNativeGroupCodecConfigChangedNonActiveDevice() {
onGroupCodecConfChangedCallbackCalled = false;
@@ -1928,7 +1926,6 @@ public class LeAudioServiceTest {
/** Test native interface group status message handling */
@Test
- @EnableFlags(Flags.FLAG_LEAUDIO_CODEC_CONFIG_CALLBACK_ORDER_FIX)
public void testMessageFromNativeGroupCodecConfigChangedActiveDevice_DifferentConfiguration() {
onGroupCodecConfChangedCallbackCalled = false;
@@ -2838,7 +2835,6 @@ public class LeAudioServiceTest {
* </pre>
*/
@Test
- @EnableFlags(Flags.FLAG_LEAUDIO_UNICAST_NO_AVAILABLE_CONTEXTS)
public void testActivateGroupWhenAvailableContextAreBack_Scenario1() {
int groupId = 1;
/* AUDIO_DIRECTION_OUTPUT_BIT = 0x01 */
@@ -2922,7 +2918,6 @@ public class LeAudioServiceTest {
* </pre>
*/
@Test
- @EnableFlags(Flags.FLAG_LEAUDIO_UNICAST_NO_AVAILABLE_CONTEXTS)
public void testActivateDeviceWhenAvailableContextAreBack_Scenario2() {
int groupId = 1;
/* AUDIO_DIRECTION_OUTPUT_BIT = 0x01 */
@@ -3020,7 +3015,6 @@ public class LeAudioServiceTest {
* 4. The available contexts are updated with non-zero value. Group becomes active.
*/
@Test
- @EnableFlags(Flags.FLAG_LEAUDIO_UNICAST_NO_AVAILABLE_CONTEXTS)
public void testActivateDeviceWhenAvailableContextAreBack_Scenario3() {
int groupId = 1;
/* AUDIO_DIRECTION_OUTPUT_BIT = 0x01 */
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioStateMachineTest.java
index 3057a13b55..ad88d08b6e 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioStateMachineTest.java
@@ -58,6 +58,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link LeAudioStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class LeAudioStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioTmapGattServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioTmapGattServerTest.java
index abb4ddd7a7..a7955e76f9 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioTmapGattServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_audio/LeAudioTmapGattServerTest.java
@@ -44,6 +44,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+/** Test cases for {@link LeAudioTmapGattServer}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class LeAudioTmapGattServerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_scan/MsftAdvMonitorTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_scan/MsftAdvMonitorTest.java
index 6e396df67e..c717d7f013 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_scan/MsftAdvMonitorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_scan/MsftAdvMonitorTest.java
@@ -25,6 +25,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+/** Test cases for {@link MsftAdvMonitor}. */
@RunWith(JUnit4.class)
public final class MsftAdvMonitorTest {
private static final String TAG = MsftAdvMonitorTest.class.getSimpleName();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanBinderTest.kt b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanBinderTest.kt
index 3424c48a54..238b4c5b29 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanBinderTest.kt
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanBinderTest.kt
@@ -39,7 +39,7 @@ import org.mockito.Mock
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
-/** Test cases for [ScanBinder] */
+/** Test cases for [ScanBinder]. */
@SmallTest
@RunWith(AndroidJUnit4::class)
class ScanBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanClientTest.kt b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanClientTest.kt
new file mode 100644
index 0000000000..3cff05a6fe
--- /dev/null
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanClientTest.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.bluetooth.le_scan
+
+import android.bluetooth.le.ScanFilter
+import android.bluetooth.le.ScanSettings
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.google.common.testing.EqualsTester
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/** Test cases for [ScanClient]. */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class ScanClientTest {
+
+ private val scanClient = ScanClient(1)
+
+ @Test
+ fun constructor() {
+ val scanClientWithDefaultSettings = ScanClient(1)
+ assertThat(scanClientWithDefaultSettings.mSettings.scanMode)
+ .isEqualTo(ScanSettings.SCAN_MODE_LOW_LATENCY)
+ }
+
+ @Test
+ fun constructor_withFilters() {
+ val filters = listOf(ScanFilter.Builder().build())
+ val scanSettings = ScanSettings.Builder().build()
+ val scanClientWithFilters = ScanClient(1, scanSettings, filters)
+ assertThat(scanClientWithFilters.mFilters).isEqualTo(filters)
+ }
+
+ @Test
+ fun constructor_withAppUid() {
+ val appUid = 1234
+ val scanSettings = ScanSettings.Builder().build()
+ val scanClientWithAppUid = ScanClient(1, scanSettings, null, appUid)
+ assertThat(scanClientWithAppUid.mAppUid).isEqualTo(appUid)
+ }
+
+ @Test
+ fun equals() {
+ val scanSettings = ScanSettings.Builder().build()
+ EqualsTester()
+ .addEqualityGroup(
+ ScanClient(1, scanSettings, null),
+ ScanClient(1, scanSettings, null),
+ ScanClient(1, scanSettings, listOf(ScanFilter.Builder().build())),
+ ScanClient(1, scanSettings, null, 1234),
+ ScanClient(1, scanSettings, null, 5678),
+ )
+ .addEqualityGroup(ScanClient(2, scanSettings, null))
+ .testEquals()
+ }
+
+ @Test
+ fun toString_doesNotCrash() {
+ scanClient.toString()
+ }
+
+ @Test
+ fun updateScanMode() {
+ val newScanMode = ScanSettings.SCAN_MODE_BALANCED
+ val updated = scanClient.updateScanMode(newScanMode)
+ assertThat(updated).isTrue()
+ assertThat(scanClient.mSettings.scanMode).isEqualTo(newScanMode)
+
+ val sameScanMode = scanClient.mSettings.scanMode
+ val notUpdated = scanClient.updateScanMode(sameScanMode)
+ assertThat(notUpdated).isFalse()
+ assertThat(scanClient.mSettings.scanMode).isEqualTo(sameScanMode)
+ }
+}
diff --git a/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanControllerTest.java b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanControllerTest.java
index f1d428906b..8b6ec0548d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanControllerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/le_scan/ScanControllerTest.java
@@ -19,6 +19,8 @@ package com.android.bluetooth.le_scan;
import static android.bluetooth.BluetoothProfile.STATE_CONNECTED;
import static android.bluetooth.BluetoothProfile.STATE_CONNECTING;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
import static com.android.bluetooth.TestUtils.MockitoRule;
import static com.android.bluetooth.TestUtils.getTestDevice;
@@ -55,7 +57,6 @@ import android.platform.test.flag.junit.SetFlagsRule;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
-import com.android.bluetooth.TestLooper;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.CompanionManager;
@@ -79,23 +80,30 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import java.util.UUID;
/** Test cases for {@link ScanController}. */
@SmallTest
@RunWith(TestParameterInjector.class)
public class ScanControllerTest {
+
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
@Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
- @Mock private ScannerMap mScannerMap;
- @Mock private ScannerMap.ScannerApp mApp;
- @Mock private PeriodicScanManager mPeriodicScanManager;
- @Mock private ScanManager mScanManager;
- @Mock private Resources mResources;
- @Mock private AdapterService mAdapterService;
@Mock private GattObjectsFactory mGattObjectsFactory;
@Mock private ScanObjectsFactory mScanObjectsFactory;
+ @Mock private AdapterService mAdapterService;
@Mock private GattNativeInterface mNativeInterface;
+ @Mock private PeriodicScanManager mPeriodicScanManager;
+ @Mock private Resources mResources;
+ @Mock private ScanManager mScanManager;
+ @Mock private ScannerMap mScannerMap;
+ @Mock private ScannerMap.ScannerApp mApp;
+
+ private static final int TEST_SCANNER_ID = 1;
+ private static final int TEST_STATUS = 0;
+ private static final int TEST_ACTION = 1;
+ private static final int TEST_CLIENT_IF = 2;
private final BluetoothAdapter mAdapter =
InstrumentationRegistry.getInstrumentation()
@@ -104,11 +112,10 @@ public class ScanControllerTest {
.getAdapter();
private final BluetoothDevice mDevice = getTestDevice(89);
private final AttributionSource mAttributionSource = mAdapter.getAttributionSource();
- private final Context mContext =
- InstrumentationRegistry.getInstrumentation().getTargetContext();
+ private final Context mContext = getInstrumentation().getTargetContext();
- private ScanController mScanController;
private CompanionManager mBtCompanionManager;
+ private ScanController mScanController;
@Before
public void setUp() throws Exception {
@@ -120,7 +127,6 @@ public class ScanControllerTest {
.when(mScanObjectsFactory)
.createScanManager(any(), any(), any(), any());
doReturn(mPeriodicScanManager).when(mScanObjectsFactory).createPeriodicScanManager();
-
doReturn(mResources).when(mAdapterService).getResources();
doReturn(mContext.getPackageManager()).when(mAdapterService).getPackageManager();
doReturn(mContext.getSharedPreferences("ScanControllerTest", Context.MODE_PRIVATE))
@@ -133,9 +139,6 @@ public class ScanControllerTest {
mBtCompanionManager = new CompanionManager(mAdapterService, null);
doReturn(mBtCompanionManager).when(mAdapterService).getCompanionManager();
- TestLooper testLooper = new TestLooper();
- testLooper.startAutoDispatch();
-
mScanController = new ScanController(mAdapterService);
mScanController.setScannerMap(mScannerMap);
}
@@ -143,183 +146,21 @@ public class ScanControllerTest {
@After
public void tearDown() throws Exception {
mScanController.cleanup();
-
GattObjectsFactory.setInstanceForTesting(null);
ScanObjectsFactory.setInstanceForTesting(null);
}
@Test
- public void testParseBatchTimestamp() {
- long timestampNanos = mScanController.parseTimestampNanos(new byte[] {-54, 7});
- assertThat(timestampNanos).isEqualTo(99700000000L);
- }
-
- @Test
- public void continuePiStartScan() {
- int scannerId = 1;
-
- ScanController.PendingIntentInfo pii =
- new ScanController.PendingIntentInfo(
- null, new ScanSettings.Builder().build(), null, null, 0);
- mApp.mInfo = pii;
-
- AppScanStats appScanStats = mock(AppScanStats.class);
- doReturn(appScanStats).when(mScannerMap).getAppScanStatsById(scannerId);
-
- mScanController.continuePiStartScan(scannerId, mApp);
-
- verify(appScanStats)
- .recordScanStart(pii.settings(), pii.filters(), false, false, scannerId, null);
- verify(mScanManager).startScan(any());
- }
-
- @Test
- public void continuePiStartScanCheckUid() {
- int scannerId = 1;
-
- ScanController.PendingIntentInfo pii =
- new ScanController.PendingIntentInfo(
- null, new ScanSettings.Builder().build(), null, null, 123);
- mApp.mInfo = pii;
-
- AppScanStats appScanStats = mock(AppScanStats.class);
- doReturn(appScanStats).when(mScannerMap).getAppScanStatsById(scannerId);
-
- mScanController.continuePiStartScan(scannerId, mApp);
-
- verify(appScanStats)
- .recordScanStart(pii.settings(), pii.filters(), false, false, scannerId, null);
+ public void notifyProfileConnectionStateChange_notify_scanManager() {
+ mScanController.notifyProfileConnectionStateChange(
+ BluetoothProfile.A2DP, STATE_CONNECTING, STATE_CONNECTED);
verify(mScanManager)
- .startScan(
- argThat(
- new ArgumentMatcher<ScanClient>() {
- @Override
- public boolean matches(ScanClient client) {
- return pii.callingUid() == client.mAppUid;
- }
- }));
- }
-
- @Test
- public void onBatchScanReportsInternal_deliverBatchScan_full(
- @TestParameter boolean expectResults) throws RemoteException {
- int status = 1;
- int scannerId = 2;
- int reportType = ScanManager.SCAN_RESULT_TYPE_FULL;
- int numRecords = 1;
- byte[] recordData =
- new byte[] {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00
- };
-
- Set<ScanClient> scanClientSet = new HashSet<>();
- ScanClient scanClient = new ScanClient(scannerId);
- scanClient.mAssociatedDevices = new ArrayList<>();
- if (expectResults) {
- scanClient.mHasScanWithoutLocationPermission = true;
- }
- scanClientSet.add(scanClient);
- doReturn(scanClientSet).when(mScanManager).getFullBatchScanQueue();
- doReturn(mApp).when(mScannerMap).getById(scanClient.mScannerId);
- IScannerCallback callback = mock(IScannerCallback.class);
- mApp.mCallback = callback;
-
- mScanController.onBatchScanReportsInternal(
- status, scannerId, reportType, numRecords, recordData);
- verify(mScanManager).callbackDone(scannerId, status);
- if (expectResults) {
- verify(callback).onBatchScanResults(any());
- } else {
- verify(callback, never()).onBatchScanResults(any());
- }
- }
-
- @Test
- public void onBatchScanReportsInternal_deliverBatchScan_truncated(
- @TestParameter boolean expectResults) throws RemoteException {
- int status = 1;
- int scannerId = 2;
- int reportType = ScanManager.SCAN_RESULT_TYPE_TRUNCATED;
- int numRecords = 1;
- byte[] recordData =
- new byte[] {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x02, 0x02, 0x00, 0x00, 0x02
- };
-
- Set<ScanClient> scanClientSet = new HashSet<>();
- ScanClient scanClient = new ScanClient(scannerId);
- scanClient.mAssociatedDevices = new ArrayList<>();
- if (expectResults) {
- scanClient.mAssociatedDevices.add("02:00:00:00:00:00");
- }
- scanClientSet.add(scanClient);
- doReturn(scanClientSet).when(mScanManager).getBatchScanQueue();
- doReturn(mApp).when(mScannerMap).getById(scanClient.mScannerId);
- IScannerCallback callback = mock(IScannerCallback.class);
- mApp.mCallback = callback;
-
- mScanController.onBatchScanReportsInternal(
- status, scannerId, reportType, numRecords, recordData);
- verify(mScanManager).callbackDone(scannerId, status);
- if (expectResults) {
- verify(callback).onBatchScanResults(any());
- } else {
- verify(callback, never()).onBatchScanResults(any());
- }
- }
-
- @Test
- public void enforceReportDelayFloor() {
- long reportDelayFloorHigher = ScanController.DEFAULT_REPORT_DELAY_FLOOR + 1;
- ScanSettings scanSettings =
- new ScanSettings.Builder().setReportDelay(reportDelayFloorHigher).build();
-
- ScanSettings newScanSettings = mScanController.enforceReportDelayFloor(scanSettings);
-
- assertThat(newScanSettings.getReportDelayMillis())
- .isEqualTo(scanSettings.getReportDelayMillis());
-
- ScanSettings scanSettingsFloor = new ScanSettings.Builder().setReportDelay(1).build();
-
- ScanSettings newScanSettingsFloor =
- mScanController.enforceReportDelayFloor(scanSettingsFloor);
-
- assertThat(newScanSettingsFloor.getReportDelayMillis())
- .isEqualTo(ScanController.DEFAULT_REPORT_DELAY_FLOOR);
- }
-
- @Test
- public void registerScanner() throws Exception {
- IScannerCallback callback = mock(IScannerCallback.class);
- WorkSource workSource = mock(WorkSource.class);
-
- AppScanStats appScanStats = mock(AppScanStats.class);
- doReturn(appScanStats).when(mScannerMap).getAppScanStatsByUid(Binder.getCallingUid());
-
- mScanController.registerScanner(callback, workSource, mAttributionSource);
- verify(mScannerMap)
- .add(
- any(),
- eq(mAttributionSource),
- eq(workSource),
- eq(callback),
- any(),
- eq(mScanController));
- verify(mScanManager).registerScanner(any());
- }
-
- @Test
- public void flushPendingBatchResults() {
- int scannerId = 3;
-
- mScanController.flushPendingBatchResults(scannerId, mAttributionSource);
- verify(mScanManager).flushBatchScanResults(new ScanClient(scannerId));
+ .handleBluetoothProfileConnectionStateChanged(
+ BluetoothProfile.A2DP, STATE_CONNECTING, STATE_CONNECTED);
}
@Test
public void onScanResult_remoteException_clientDied() throws Exception {
- int scannerId = 1;
-
int eventType = 0;
int addressType = 0;
String address = "02:00:00:00:00:00";
@@ -331,22 +172,19 @@ public class ScanControllerTest {
int periodicAdvInt = 0;
byte[] advData = new byte[0];
- ScanClient scanClient = new ScanClient(scannerId);
+ ScanClient scanClient = new ScanClient(TEST_SCANNER_ID);
scanClient.mHasNetworkSettingsPermission = true;
scanClient.mSettings =
new ScanSettings.Builder()
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.setLegacy(false)
.build();
-
AppScanStats appScanStats = mock(AppScanStats.class);
IScannerCallback callback = mock(IScannerCallback.class);
-
mApp.mCallback = callback;
mApp.mAppScanStats = appScanStats;
scanClient.mStats = appScanStats;
Set<ScanClient> scanClientSet = Collections.singleton(scanClient);
-
doReturn(address).when(mAdapterService).getIdentityAddress(anyString());
doReturn(scanClientSet).when(mScanManager).getRegularScanQueue();
doReturn(mApp).when(mScannerMap).getById(scanClient.mScannerId);
@@ -369,66 +207,179 @@ public class ScanControllerTest {
address);
assertThat(scanClient.mAppDied).isTrue();
- verify(appScanStats).recordScanStop(scannerId);
+ verify(appScanStats).recordScanStop(TEST_SCANNER_ID);
}
@Test
- public void registerSync() {
- ScanResult scanResult = new ScanResult(mDevice, 1, 2, 3, 4, 5, 6, 7, null, 8);
- int skip = 1;
- int timeout = 2;
- IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+ public void onScannerRegistered_success_callback() throws RemoteException {
+ long uuidLsb = 12345L;
+ long uuidMsb = 67890L;
+ UUID uuid = new UUID(uuidMsb, uuidLsb);
+ IScannerCallback callback = mock(IScannerCallback.class);
+ mApp.mCallback = callback;
+ doReturn(mApp).when(mScannerMap).getByUuid(uuid);
- mScanController.registerSync(scanResult, skip, timeout, callback, mAttributionSource);
- verify(mPeriodicScanManager).startSync(scanResult, skip, timeout, callback);
+ mScanController.onScannerRegistered(TEST_STATUS, TEST_SCANNER_ID, uuidLsb, uuidMsb);
+
+ verify(mApp).linkToDeath(any());
+ verify(callback).onScannerRegistered(TEST_STATUS, TEST_SCANNER_ID);
+ assertThat(mApp.mId).isEqualTo(TEST_SCANNER_ID);
}
@Test
- public void transferSync() {
- int serviceData = 1;
- int syncHandle = 2;
+ public void onScanFilterEnableDisabled_callbackDone_scanManager() {
+ mScanController.onScanFilterEnableDisabled(TEST_ACTION, TEST_STATUS, TEST_CLIENT_IF);
+ verify(mScanManager).callbackDone(TEST_CLIENT_IF, TEST_STATUS);
+ }
- mScanController.transferSync(mDevice, serviceData, syncHandle, mAttributionSource);
- verify(mPeriodicScanManager).transferSync(mDevice, serviceData, syncHandle);
+ @Test
+ public void onScanFilterParamsConfigured_callbackDone_scanManager() {
+ int availableSpace = 3;
+
+ mScanController.onScanFilterParamsConfigured(
+ TEST_ACTION, TEST_STATUS, TEST_CLIENT_IF, availableSpace);
+ verify(mScanManager).callbackDone(TEST_CLIENT_IF, TEST_STATUS);
}
@Test
- public void transferSetInfo() {
- int serviceData = 1;
- int advHandle = 2;
- IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+ public void onScanFilterConfig_callbackDone_scanManager() {
+ int filterType = 3;
+ int availableSpace = 4;
- mScanController.transferSetInfo(
- mDevice, serviceData, advHandle, callback, mAttributionSource);
- verify(mPeriodicScanManager).transferSetInfo(mDevice, serviceData, advHandle, callback);
+ mScanController.onScanFilterConfig(
+ TEST_ACTION, TEST_STATUS, TEST_CLIENT_IF, filterType, availableSpace);
+ verify(mScanManager).callbackDone(TEST_CLIENT_IF, TEST_STATUS);
}
@Test
- public void unregisterSync() {
- IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+ public void onBatchScanStorageConfigured_callbackDone_scanManager() {
+ mScanController.onBatchScanStorageConfigured(TEST_STATUS, TEST_CLIENT_IF);
+ verify(mScanManager).callbackDone(TEST_CLIENT_IF, TEST_STATUS);
+ }
- mScanController.unregisterSync(callback, mAttributionSource);
- verify(mPeriodicScanManager).stopSync(callback);
+ @Test
+ public void onBatchScanStartStopped_callbackDone_scanManager() {
+ int startStopAction = 0;
+
+ mScanController.onBatchScanStartStopped(startStopAction, TEST_STATUS, TEST_CLIENT_IF);
+ verify(mScanManager).callbackDone(TEST_CLIENT_IF, TEST_STATUS);
}
@Test
- public void profileConnectionStateChanged_notifyScanManager() {
- mScanController.notifyProfileConnectionStateChange(
- BluetoothProfile.A2DP, STATE_CONNECTING, STATE_CONNECTED);
- verify(mScanManager)
- .handleBluetoothProfileConnectionStateChanged(
- BluetoothProfile.A2DP, STATE_CONNECTING, STATE_CONNECTED);
+ public void onBatchScanReportsInternal_deliverBatchScan(
+ @TestParameter boolean expectResults, @TestParameter boolean isTruncated)
+ throws RemoteException {
+ int reportType =
+ isTruncated
+ ? ScanManager.SCAN_RESULT_TYPE_TRUNCATED
+ : ScanManager.SCAN_RESULT_TYPE_FULL;
+ int numRecords = 1;
+ final byte[] recordData;
+ if (isTruncated) {
+ recordData =
+ new byte[] {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x02, 0x02, 0x00, 0x00, 0x02
+ };
+ } else {
+ recordData =
+ new byte[] {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00
+ };
+ }
+
+ Set<ScanClient> scanClientSet = new HashSet<>();
+ ScanClient scanClient = new ScanClient(TEST_SCANNER_ID);
+ scanClient.mAssociatedDevices = new ArrayList<>();
+ if (expectResults) {
+ if (isTruncated) {
+ scanClient.mAssociatedDevices.add("02:00:00:00:00:00");
+ } else {
+ scanClient.mHasScanWithoutLocationPermission = true;
+ }
+ }
+ scanClientSet.add(scanClient);
+ if (isTruncated) {
+ doReturn(scanClientSet).when(mScanManager).getBatchScanQueue();
+ } else {
+ doReturn(scanClientSet).when(mScanManager).getFullBatchScanQueue();
+ }
+ doReturn(mApp).when(mScannerMap).getById(scanClient.mScannerId);
+ IScannerCallback callback = mock(IScannerCallback.class);
+ mApp.mCallback = callback;
+
+ mScanController.onBatchScanReportsInternal(
+ TEST_STATUS, TEST_SCANNER_ID, reportType, numRecords, recordData);
+ verify(mScanManager).callbackDone(TEST_SCANNER_ID, TEST_STATUS);
+ if (expectResults) {
+ verify(callback).onBatchScanResults(any());
+ } else {
+ verify(callback, never()).onBatchScanResults(any());
+ }
}
@Test
- public void onTrackAdvFoundLost() throws Exception {
- int scannerId = 1;
+ public void parseTimestampNanos() {
+ long timestampNanos = mScanController.parseTimestampNanos(new byte[] {-54, 7});
+ assertThat(timestampNanos).isEqualTo(99700000000L);
+ }
+
+ @Test
+ public void createOnTrackAdvFoundLostObject() {
int advPacketLen = 1;
byte[] advPacket = new byte[] {0x02};
int scanResponseLen = 3;
byte[] scanResponse = new byte[] {0x04};
int filtIndex = 5;
+ int advState = ScanController.ADVT_STATE_ONFOUND;
+ int advInfoPresent = 7;
+ String address = "00:11:22:33:FF:EE";
+ int addrType = BluetoothDevice.ADDRESS_TYPE_RANDOM;
+ int txPower = 9;
+ int rssiValue = 10;
+ int timeStamp = 11;
+
+ AdvtFilterOnFoundOnLostInfo advtFilterOnFoundOnLostInfo =
+ new AdvtFilterOnFoundOnLostInfo(
+ TEST_SCANNER_ID,
+ advPacketLen,
+ ByteString.copyFrom(advPacket),
+ scanResponseLen,
+ ByteString.copyFrom(scanResponse),
+ filtIndex,
+ advState,
+ advInfoPresent,
+ address,
+ addrType,
+ txPower,
+ rssiValue,
+ timeStamp);
+ AdvtFilterOnFoundOnLostInfo advtFilterOnFoundOnLostInfoCreated =
+ mScanController.createOnTrackAdvFoundLostObject(
+ TEST_SCANNER_ID,
+ advPacketLen,
+ advPacket,
+ scanResponseLen,
+ scanResponse,
+ filtIndex,
+ advState,
+ advInfoPresent,
+ address,
+ addrType,
+ txPower,
+ rssiValue,
+ timeStamp);
+
+ assertThat(advtFilterOnFoundOnLostInfo).isEqualTo(advtFilterOnFoundOnLostInfoCreated);
+ }
+
+ @Test
+ public void onTrackAdvFoundLost() throws RemoteException {
+ int advPacketLen = 1;
+ byte[] advPacket = new byte[] {0x02};
+ int scanResponseLen = 3;
+ byte[] scanResponse = new byte[] {0x04};
+ int filtIndex = 5;
int advState = ScanController.ADVT_STATE_ONFOUND;
int advInfoPresent = 7;
String address = "00:11:22:33:FF:EE";
@@ -437,7 +388,7 @@ public class ScanControllerTest {
int rssiValue = 10;
int timeStamp = 11;
- ScanClient scanClient = new ScanClient(scannerId);
+ ScanClient scanClient = new ScanClient(TEST_SCANNER_ID);
scanClient.mHasNetworkSettingsPermission = true;
scanClient.mSettings =
new ScanSettings.Builder()
@@ -448,15 +399,14 @@ public class ScanControllerTest {
ScannerMap.ScannerApp app = mock(ScannerMap.ScannerApp.class);
IScannerCallback callback = mock(IScannerCallback.class);
-
app.mCallback = callback;
- doReturn(app).when(mScannerMap).getById(scannerId);
+ doReturn(app).when(mScannerMap).getById(TEST_SCANNER_ID);
doReturn(scanClientSet).when(mScanManager).getRegularScanQueue();
AdvtFilterOnFoundOnLostInfo advtFilterOnFoundOnLostInfo =
new AdvtFilterOnFoundOnLostInfo(
- scannerId,
+ TEST_SCANNER_ID,
advPacketLen,
ByteString.copyFrom(advPacket),
scanResponseLen,
@@ -477,4 +427,152 @@ public class ScanControllerTest {
assertThat(result.getValue().getDevice().getAddress()).isEqualTo(address);
assertThat(result.getValue().getDevice().getAddressType()).isEqualTo(addrType);
}
+
+ @Test
+ public void registerScanner() {
+ IScannerCallback callback = mock(IScannerCallback.class);
+ WorkSource workSource = mock(WorkSource.class);
+ AppScanStats appScanStats = mock(AppScanStats.class);
+ doReturn(appScanStats).when(mScannerMap).getAppScanStatsByUid(Binder.getCallingUid());
+
+ mScanController.registerScanner(callback, workSource, mAttributionSource);
+ verify(mScannerMap)
+ .add(
+ any(),
+ eq(mAttributionSource),
+ eq(workSource),
+ eq(callback),
+ any(),
+ eq(mScanController));
+ verify(mScanManager).registerScanner(any());
+ }
+
+ @Test
+ public void unregisterScanner() {
+ mScanController.unregisterScanner(TEST_SCANNER_ID, mAttributionSource);
+
+ verify(mScannerMap).remove(TEST_SCANNER_ID);
+ verify(mScanManager).unregisterScanner(TEST_SCANNER_ID);
+ }
+
+ @Test
+ public void continuePiStartScan() {
+ ScanController.PendingIntentInfo pii =
+ new ScanController.PendingIntentInfo(
+ null, new ScanSettings.Builder().build(), null, null, 0);
+ mApp.mInfo = pii;
+
+ AppScanStats appScanStats = mock(AppScanStats.class);
+ doReturn(appScanStats).when(mScannerMap).getAppScanStatsById(TEST_SCANNER_ID);
+
+ mScanController.continuePiStartScan(TEST_SCANNER_ID, mApp);
+
+ verify(appScanStats)
+ .recordScanStart(
+ pii.settings(), pii.filters(), false, false, TEST_SCANNER_ID, null);
+ verify(mScanManager).startScan(any());
+ }
+
+ @Test
+ public void continuePiStartScanCheckUid() {
+ ScanController.PendingIntentInfo pii =
+ new ScanController.PendingIntentInfo(
+ null, new ScanSettings.Builder().build(), null, null, 123);
+ mApp.mInfo = pii;
+
+ AppScanStats appScanStats = mock(AppScanStats.class);
+ doReturn(appScanStats).when(mScannerMap).getAppScanStatsById(TEST_SCANNER_ID);
+
+ mScanController.continuePiStartScan(TEST_SCANNER_ID, mApp);
+
+ verify(appScanStats)
+ .recordScanStart(
+ pii.settings(), pii.filters(), false, false, TEST_SCANNER_ID, null);
+ verify(mScanManager)
+ .startScan(
+ argThat(
+ new ArgumentMatcher<ScanClient>() {
+ @Override
+ public boolean matches(ScanClient client) {
+ return pii.callingUid() == client.mAppUid;
+ }
+ }));
+ }
+
+ @Test
+ public void flushPendingBatchResults() {
+ mScanController.flushPendingBatchResults(TEST_SCANNER_ID, mAttributionSource);
+ verify(mScanManager).flushBatchScanResults(new ScanClient(TEST_SCANNER_ID));
+ }
+
+ @Test
+ public void registerSync() {
+ ScanResult scanResult = new ScanResult(mDevice, 1, 2, 3, 4, 5, 6, 7, null, 8);
+ int skip = 1;
+ int timeout = 2;
+ IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+
+ mScanController.registerSync(scanResult, skip, timeout, callback, mAttributionSource);
+ verify(mPeriodicScanManager).startSync(scanResult, skip, timeout, callback);
+ }
+
+ @Test
+ public void unregisterSync() {
+ IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+
+ mScanController.unregisterSync(callback, mAttributionSource);
+ verify(mPeriodicScanManager).stopSync(callback);
+ }
+
+ @Test
+ public void transferSync() {
+ int serviceData = 1;
+ int syncHandle = 2;
+
+ mScanController.transferSync(mDevice, serviceData, syncHandle, mAttributionSource);
+ verify(mPeriodicScanManager).transferSync(mDevice, serviceData, syncHandle);
+ }
+
+ @Test
+ public void transferSetInfo() {
+ int serviceData = 1;
+ int advHandle = 2;
+ IPeriodicAdvertisingCallback callback = mock(IPeriodicAdvertisingCallback.class);
+
+ mScanController.transferSetInfo(
+ mDevice, serviceData, advHandle, callback, mAttributionSource);
+ verify(mPeriodicScanManager).transferSetInfo(mDevice, serviceData, advHandle, callback);
+ }
+
+ @Test
+ public void enforceReportDelayFloor() {
+ long reportDelayFloorHigher = ScanController.DEFAULT_REPORT_DELAY_FLOOR + 1;
+ ScanSettings scanSettings =
+ new ScanSettings.Builder().setReportDelay(reportDelayFloorHigher).build();
+ ScanSettings newScanSettings = mScanController.enforceReportDelayFloor(scanSettings);
+
+ assertThat(newScanSettings.getReportDelayMillis())
+ .isEqualTo(scanSettings.getReportDelayMillis());
+
+ ScanSettings scanSettingsFloor = new ScanSettings.Builder().setReportDelay(1).build();
+ ScanSettings newScanSettingsFloor =
+ mScanController.enforceReportDelayFloor(scanSettingsFloor);
+
+ assertThat(newScanSettingsFloor.getReportDelayMillis())
+ .isEqualTo(ScanController.DEFAULT_REPORT_DELAY_FLOOR);
+ }
+
+ @Test
+ public void dumpRegisterId_doesNotCrash() {
+ StringBuilder sb = new StringBuilder();
+ mScanController.dumpRegisterId(sb);
+ assertThat(sb.toString()).isNotNull();
+ }
+
+ @Test
+ public void dump_doesNotCrash() {
+ StringBuilder sb = new StringBuilder();
+ mScanController.dump(sb);
+ assertThat(sb.toString()).isNotNull();
+ }
}
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
index 6e493ee6d5..64d6192271 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
@@ -26,6 +26,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothMapAccountItem}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapAccountItemTest {
private static final String TEST_NAME = "test_name";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
index c0defe0c21..8803980264 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
@@ -30,6 +30,7 @@ import org.junit.runner.RunWith;
import java.nio.ByteBuffer;
+/** Test cases for {@link BluetoothMapAppParams}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapAppParamsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentObserverTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentObserverTest.java
index b131039e99..d17d1e0a85 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentObserverTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentObserverTest.java
@@ -74,6 +74,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link BluetoothMapContentObserver}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapContentObserverTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentTest.java
index b149953287..ae34c71782 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapContentTest.java
@@ -68,6 +68,7 @@ import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
+/** Test cases for {@link BluetoothMapContent}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapContentTest {
private static final String TEST_TEXT = "text";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoContactElementTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoContactElementTest.java
index 6e8f60f5ce..ed57d98121 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoContactElementTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoContactElementTest.java
@@ -34,6 +34,7 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
+/** Test cases for {@link BluetoothMapConvoContactElement}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapConvoContactElementTest {
private static final String TEST_UCI = "test_bt_uci";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingElementTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingElementTest.java
index da6e865ab3..e0227b86cb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingElementTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingElementTest.java
@@ -38,6 +38,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link BluetoothMapConvoListingElement}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapConvoListingElementTest {
private static final long TEST_ID = 1111;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingTest.java
index e333d7b4bb..d2a0f0ebcb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapConvoListingTest.java
@@ -31,6 +31,7 @@ import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+/** Test cases for {@link BluetoothMapConvoListing}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapConvoListingTest {
private static final long TEST_LAST_ACTIVITY_EARLIEST = 0;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapFolderElementTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapFolderElementTest.java
index 0ba98aef33..4b974cd2bc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapFolderElementTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapFolderElementTest.java
@@ -24,6 +24,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothMapFolderElement}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapFolderElementTest {
private static final boolean TEST_HAS_SMS_MMS_CONTENT = true;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMasInstanceTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMasInstanceTest.java
index 87c33d6588..dd56b933c2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMasInstanceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMasInstanceTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link BluetoothMapMasInstance}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapMasInstanceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingElementTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingElementTest.java
index bf58abaebc..de6e1f25bb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingElementTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingElementTest.java
@@ -35,6 +35,7 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
+/** Test cases for {@link BluetoothMapMessageListingElement}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapMessageListingElementTest {
private static final long TEST_CP_HANDLE = 1;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingTest.java
index d78405aff4..f748832912 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapMessageListingTest.java
@@ -37,6 +37,7 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
+/** Test cases for {@link BluetoothMapMessageListing}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapMessageListingTest {
private static final long TEST_DATE_TIME_EARLIEST = 0;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapObexServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapObexServerTest.java
index a5c4b8425e..27bca34f3a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapObexServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapObexServerTest.java
@@ -50,6 +50,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
+/** Test cases for {@link BluetoothMapObexServer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapObexServerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceBinderTest.java
index 0ebb4e7bd2..01f83b4eac 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link BluetoothMapServiceBinder} */
+/** Test cases for {@link BluetoothMapServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceTest.java
index f2c455bbc1..2e61805948 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapServiceTest.java
@@ -45,6 +45,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link BluetoothMapService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapSmsPduTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapSmsPduTest.java
index 2f96c2ead9..01c05e37e8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapSmsPduTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapSmsPduTest.java
@@ -48,6 +48,7 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
+/** Test cases for {@link BluetoothMapSmsPdu}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapSmsPduTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapUtilsTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapUtilsTest.java
index 57467027e1..9325a8fcff 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapUtilsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapUtilsTest.java
@@ -30,6 +30,7 @@ import org.junit.runner.RunWith;
import java.nio.charset.StandardCharsets;
+/** Test cases for {@link BluetoothMapUtils}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapUtilsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageEmailTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageEmailTest.java
index b3094670e2..3d4b2e53d7 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageEmailTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageEmailTest.java
@@ -29,6 +29,7 @@ import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+/** Test cases for {@link BluetoothMapbMessageEmail}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapbMessageEmailTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageMimeTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageMimeTest.java
index 7aa1ad9b1c..af8e22b461 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageMimeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageMimeTest.java
@@ -33,6 +33,7 @@ import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
+/** Test cases for {@link BluetoothMapbMessageMime}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapbMessageMimeTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageSmsTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageSmsTest.java
index 9cec017f97..478a594859 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageSmsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageSmsTest.java
@@ -38,6 +38,7 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
+/** Test cases for {@link BluetoothMapbMessageSms}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothMapbMessageSmsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageTest.java
index d778b412a6..aaa8914b41 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageTest.java
@@ -31,6 +31,7 @@ import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+/** Test cases for {@link BluetoothMapbMessage}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapbMessageTest {
private static final String TEST_VERSION_STRING = "1.0";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageVCardTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageVCardTest.java
index 69a57b83b2..d9823360db 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageVCardTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapbMessageVCardTest.java
@@ -31,6 +31,7 @@ import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+/** Test cases for {@link BluetoothMapbMessageVCard}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapbMessageVCardTest {
private static final String TEST_NAME = "test_name";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/ConvoContactInfoTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/ConvoContactInfoTest.java
index fc99e7134e..bf0936428e 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/ConvoContactInfoTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/ConvoContactInfoTest.java
@@ -28,6 +28,7 @@ import com.android.bluetooth.mapapi.BluetoothMapContract;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link ConvoContactInfo}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class ConvoContactInfoTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/EventTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/EventTest.java
index edd0863d4b..13de9d11ab 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/EventTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/EventTest.java
@@ -39,6 +39,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link Event}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class EventTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/FilterInfoTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/FilterInfoTest.java
index 7042e34980..b8d8de4d36 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/FilterInfoTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/FilterInfoTest.java
@@ -32,6 +32,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link FilterInfo}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class FilterInfoTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/MapContactTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/MapContactTest.java
index 93babf8f81..c55efd2b77 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/MapContactTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/MapContactTest.java
@@ -26,6 +26,7 @@ import com.android.bluetooth.SignedLongLong;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link MapContact}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MapContactTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/MsgTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/MsgTest.java
index 4a0963cd78..98450d3e6d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/MsgTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/MsgTest.java
@@ -26,6 +26,7 @@ import com.google.common.testing.EqualsTester;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link Msg}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MsgTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/SmsMmsContactsTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/SmsMmsContactsTest.java
index fdf2ee67e1..525143d623 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/SmsMmsContactsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/SmsMmsContactsTest.java
@@ -39,6 +39,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
+/** Test cases for {@link SmsMmsContacts}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SmsMmsContactsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapContractTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapContractTest.java
index 021c1ae82f..d7690e732c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapContractTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapContractTest.java
@@ -25,6 +25,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothMapContract}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapContractTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapEmailProviderTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapEmailProviderTest.java
index 1dadfd906d..348f374211 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapEmailProviderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapEmailProviderTest.java
@@ -47,6 +47,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+/** Test cases for {@link BluetoothMapEmailProvider}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapEmailProviderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapIMProviderTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapIMProviderTest.java
index 2fccf754e5..774e8c5f20 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapIMProviderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapapi/BluetoothMapIMProviderTest.java
@@ -56,6 +56,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+/** Test cases for {@link BluetoothMapIMProvider}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothMapIMProviderTest {
private static final String TAG = BluetoothMapIMProviderTest.class.getSimpleName();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/BmessageTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/BmessageTest.java
index 06d66600d7..89471435f7 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/BmessageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/BmessageTest.java
@@ -26,6 +26,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link Bmessage}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BmessageTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/EventReportTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/EventReportTest.java
index 05facb51cc..b48868aba5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/EventReportTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/EventReportTest.java
@@ -33,6 +33,7 @@ import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
+/** Test cases for {@link EventReport}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class EventReportTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientContentTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientContentTest.java
index 09d946390b..32980a2068 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientContentTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientContentTest.java
@@ -65,6 +65,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+/** Test cases for {@link MapClientContent}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MapClientContentTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceBinderTest.java
index 4e6910718f..98279f3d8d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link MapClientServiceBinder} */
+/** Test cases for {@link MapClientServiceBinder}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MapClientServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceTest.java
index 66f04951ee..8ea8c2bba8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientServiceTest.java
@@ -64,6 +64,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link MapClientService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MapClientServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java
index 73280280ca..e2ec29a16c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java
@@ -101,6 +101,7 @@ import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link MapClientStateMachine}. */
@MediumTest
@RunWith(ParameterizedAndroidJunit4.class)
public class MapClientStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessageTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessageTest.java
index 967e5b209d..154f5140ca 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessageTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import java.util.HashMap;
+/** Test cases for {@link Message}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MessageTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesFilterTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesFilterTest.java
index 5433d67897..7b148666f5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesFilterTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesFilterTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import java.util.Calendar;
+/** Test cases for {@link MessagesFilter}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MessagesFilterTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesListingTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesListingTest.java
index ab6e7a46a4..4a821e1cbe 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesListingTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MessagesListingTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
+/** Test cases for {@link MessagesListing}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MessagesListingTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MnsObexServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MnsObexServerTest.java
index 2abea296e7..56b0a6d0eb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/MnsObexServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/MnsObexServerTest.java
@@ -41,6 +41,7 @@ import org.mockito.Mock;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
+/** Test cases for {@link MnsObexServer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class MnsObexServerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mapclient/ObexTimeTest.java b/android/app/tests/unit/src/com/android/bluetooth/mapclient/ObexTimeTest.java
index 6f8bad385c..d6fb3090b1 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mapclient/ObexTimeTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mapclient/ObexTimeTest.java
@@ -29,6 +29,7 @@ import java.time.Instant;
import java.util.Date;
import java.util.TimeZone;
+/** Test cases for {@link ObexTime}. */
@RunWith(AndroidJUnit4.class)
@SuppressLint("UndefinedEquals")
public class ObexTimeTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceBinderTest.java
index dc21e810b8..534f8f1d18 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceBinderTest.java
@@ -34,7 +34,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link McpServiceBinder} */
+/** Test cases for {@link McpServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class McpServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceTest.java
index 5ff65a4f8c..c32483fcdc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mcp/McpServiceTest.java
@@ -38,6 +38,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link McpService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class McpServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlGattServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlGattServiceTest.java
index 6b3df639aa..9a88458050 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlGattServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlGattServiceTest.java
@@ -57,6 +57,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+/** Test cases for {@link MediaControlGattService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MediaControlGattServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlProfileTest.java b/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlProfileTest.java
index 0aa5f199d5..35ba769a81 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlProfileTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/mcp/MediaControlProfileTest.java
@@ -52,6 +52,7 @@ import org.mockito.Mock;
import java.util.HashMap;
import java.util.UUID;
+/** Test cases for {@link MediaControlProfile}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class MediaControlProfileTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppBatchTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppBatchTest.java
index e3f764d2bc..6017de3b42 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppBatchTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppBatchTest.java
@@ -38,6 +38,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link BluetoothOppBatch}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppBatchTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppHandoverReceiverTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppHandoverReceiverTest.java
index daa65ebba6..cbc97b1242 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppHandoverReceiverTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppHandoverReceiverTest.java
@@ -49,6 +49,7 @@ import org.mockito.Spy;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link BluetoothOppHandoverReceiver}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppHandoverReceiverTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppManagerTest.java
index b20858b647..6d9edf9aec 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppManagerTest.java
@@ -56,6 +56,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
+/** Test cases for {@link BluetoothOppManager}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppManagerTest {
Context mContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppNotificationTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppNotificationTest.java
index 5e5d11ce4d..928cfcae60 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppNotificationTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppNotificationTest.java
@@ -58,6 +58,7 @@ import org.mockito.Mock;
import java.util.Locale;
+/** Test cases for {@link BluetoothOppNotification}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppNotificationTest {
static final int TIMEOUT_MS = 3000;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexClientSessionTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexClientSessionTest.java
index b216680836..083a7d1508 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexClientSessionTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexClientSessionTest.java
@@ -59,6 +59,7 @@ import java.io.OutputStream;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+/** Test cases for {@link BluetoothOppObexClientSession}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppObexClientSessionTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexServerSessionTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexServerSessionTest.java
index 1e850d057b..8a93a3f0ac 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexServerSessionTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppObexServerSessionTest.java
@@ -62,6 +62,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+/** Test cases for {@link BluetoothOppObexServerSession}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppObexServerSessionTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppPreferenceTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppPreferenceTest.java
index 91b1b0b65d..f0f4fe71dc 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppPreferenceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppPreferenceTest.java
@@ -40,6 +40,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothOppPreference}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppPreferenceTest {
Context mContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfoTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfoTest.java
index 3f74ac90d1..b532222f5f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfoTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfoTest.java
@@ -41,6 +41,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothOppReceiveFileInfo}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppReceiveFileInfoTest {
Context mContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiverTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiverTest.java
index 0a144d7b35..8ff6fab596 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiverTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppReceiverTest.java
@@ -61,6 +61,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link BluetoothOppReceiver}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppReceiverTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppSendFileInfoTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppSendFileInfoTest.java
index d76517320e..20725f3600 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppSendFileInfoTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppSendFileInfoTest.java
@@ -52,6 +52,7 @@ import org.mockito.Mock;
import java.io.FileInputStream;
import java.io.IOException;
+/** Test cases for {@link BluetoothOppSendFileInfo}. */
@RunWith(TestParameterInjector.class)
public class BluetoothOppSendFileInfoTest {
Context mContext;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppServiceTest.java
index a065757c01..e5db783227 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppServiceTest.java
@@ -52,6 +52,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
+/** Test cases for {@link BluetoothOppService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppShareInfoTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppShareInfoTest.java
index 212f1ffef7..7e37021813 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppShareInfoTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppShareInfoTest.java
@@ -27,6 +27,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link BluetoothOppShareInfo}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppShareInfoTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferActivityTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferActivityTest.java
index ece55f357e..c0cf0349fe 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferActivityTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferActivityTest.java
@@ -56,6 +56,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
+/** Test cases for {@link BluetoothOppTransferActivity}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppTransferActivityTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferHistoryTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferHistoryTest.java
index 3d313bdfb5..1e84a06020 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferHistoryTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferHistoryTest.java
@@ -63,7 +63,7 @@ import org.mockito.Spy;
import java.util.ArrayList;
import java.util.List;
-/** This class will also test BluetoothOppTransferAdapter */
+/** Test cases for {@link BluetoothOppTransferHistory} and {@link BluetoothOppTransferAdapter}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothOppTransferHistoryTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferTest.java
index 3ab02065e3..57365d631c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppTransferTest.java
@@ -51,7 +51,6 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.BluetoothObexTransport;
-import com.android.bluetooth.flags.Flags;
import com.android.obex.ObexTransport;
import org.junit.After;
@@ -63,6 +62,7 @@ import org.mockito.Mock;
import java.util.Objects;
+/** Test cases for {@link BluetoothOppTransfer}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothOppTransferTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppUtilityTest.java b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
index cadff94862..e99d7800a0 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/opp/BluetoothOppUtilityTest.java
@@ -64,6 +64,7 @@ import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
+/** Test cases for {@link BluetoothOppUtility}. */
public class BluetoothOppUtilityTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceBinderTest.java
index 272ada98d7..53fa3d4226 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link PanServiceBinder} */
+/** Test cases for {@link PanServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PanServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceTest.java
index 1621909b73..ca91194688 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pan/PanServiceTest.java
@@ -60,6 +60,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link PanService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PanServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapAuthenticatorTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapAuthenticatorTest.java
index 78d61ff046..8ace3204d5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapAuthenticatorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapAuthenticatorTest.java
@@ -34,6 +34,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link BluetoothPbapAuthenticator}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapAuthenticatorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapCallLogComposerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapCallLogComposerTest.java
index 73aa0f015f..40bdec97be 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapCallLogComposerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapCallLogComposerTest.java
@@ -49,6 +49,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
+/** Test cases for {@link BluetoothPbapCallLogComposer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapCallLogComposerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapConfigTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapConfigTest.java
index a95fbcc461..3e4f84b144 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapConfigTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapConfigTest.java
@@ -36,6 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link BluetoothPbapConfig}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapConfigTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapObexServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapObexServerTest.java
index a833c6134b..2baf4075cd 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapObexServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapObexServerTest.java
@@ -77,6 +77,7 @@ import org.mockito.Spy;
import java.io.IOException;
import java.io.OutputStream;
+/** Test cases for {@link BluetoothPbapObexServer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapObexServerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceBinderTest.java
index 5c713d62b5..2142eba264 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceBinderTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link BluetoothPbapServiceBinder} */
+/** Test cases for {@link BluetoothPbapServiceBinder}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceTest.java
index e19ca130bf..27eb54f24f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapServiceTest.java
@@ -68,6 +68,7 @@ import org.mockito.Spy;
import java.util.List;
+/** Test cases for {@link BluetoothPbapService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapSimVcardManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapSimVcardManagerTest.java
index 4afce15b68..75728b2c05 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapSimVcardManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapSimVcardManagerTest.java
@@ -56,6 +56,7 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
+/** Test cases for {@link BluetoothPbapSimVcardManager}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapSimVcardManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapUtilsTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapUtilsTest.java
index df448082c2..cb0530c641 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapUtilsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapUtilsTest.java
@@ -60,6 +60,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+/** Test cases for {@link BluetoothPbapUtils}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapUtilsTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerNestedClassesTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerNestedClassesTest.java
index e95e90088a..1ecc61ae71 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerNestedClassesTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerNestedClassesTest.java
@@ -43,6 +43,7 @@ import org.mockito.Mock;
import java.util.concurrent.atomic.AtomicInteger;
+/** Test cases for {@link BluetoothPbapVcardManagerNestedClasses}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapVcardManagerNestedClassesTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerTest.java
index 3b6034cd33..56ba69d410 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/BluetoothPbapVcardManagerTest.java
@@ -52,6 +52,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
+/** Test cases for {@link BluetoothPbapVcardManager}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothPbapVcardManagerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/HandlerForStringBufferTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/HandlerForStringBufferTest.java
index 9382902122..d5e4068122 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/HandlerForStringBufferTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/HandlerForStringBufferTest.java
@@ -40,6 +40,7 @@ import org.mockito.Mock;
import java.io.IOException;
import java.io.OutputStream;
+/** Test cases for {@link HandlerForStringBuffer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class HandlerForStringBufferTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbap/PbapStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbap/PbapStateMachineTest.java
index c46ea24702..d83d663ff8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbap/PbapStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbap/PbapStateMachineTest.java
@@ -45,6 +45,7 @@ import org.mockito.Mock;
import java.io.IOException;
import java.io.InputStream;
+/** Test cases for {@link PbapStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapApplicationParametersTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapApplicationParametersTest.java
index 8f8c076648..18e91bef08 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapApplicationParametersTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapApplicationParametersTest.java
@@ -24,6 +24,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PbapApplicationParameters}. */
@RunWith(AndroidJUnit4.class)
public class PbapApplicationParametersTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorServiceTest.java
index dfc7c322a5..6cfec032ba 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorServiceTest.java
@@ -36,6 +36,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PbapClientAccountAuthenticatorService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapClientAccountAuthenticatorServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorTest.java
index fce20be7ad..8b1bcee2fa 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountAuthenticatorTest.java
@@ -35,6 +35,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link PbapClientAccountAuthenticator}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PbapClientAccountAuthenticatorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountManagerTest.java
index e3ed3884a4..075fa2eddb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountManagerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientAccountManagerTest.java
@@ -61,6 +61,7 @@ import org.mockito.Mock;
import java.util.List;
+/** Test cases for {@link PbapClientAccountManager}. */
@RunWith(AndroidJUnit4.class)
public class PbapClientAccountManagerTest {
private static final String ACCOUNT_TYPE = "com.android.bluetooth.pbapclient.account";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientConnectionHandlerTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientConnectionHandlerTest.java
index eef3517311..b76cb683df 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientConnectionHandlerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientConnectionHandlerTest.java
@@ -44,6 +44,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link PbapClientConnectionHandler}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PbapClientConnectionHandlerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientContactsStorageTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientContactsStorageTest.java
index afd2c2a085..fdd4473648 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientContactsStorageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientContactsStorageTest.java
@@ -67,6 +67,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+/** Test cases for {@link PbapClientContactsStorage}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapClientContactsStorageTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexAuthenticatorTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexAuthenticatorTest.java
index 45476f1b73..5846e6fb08 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexAuthenticatorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexAuthenticatorTest.java
@@ -27,6 +27,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PbapClientObexAuthenticator}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PbapClientObexAuthenticatorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexClientTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexClientTest.java
index ef315042d2..ac82e6be59 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexClientTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexClientTest.java
@@ -67,6 +67,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+/** Test cases for {@link PbapClientObexClient}. */
@RunWith(AndroidJUnit4.class)
public class PbapClientObexClientTest {
private static final int TEST_L2CAP_PSM = 4098;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexTransportTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexTransportTest.java
index b594ac70b4..fda3858c81 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexTransportTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientObexTransportTest.java
@@ -42,6 +42,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+/** Test cases for {@link PbapClientObexTransport}. */
@RunWith(AndroidJUnit4.class)
public class PbapClientObexTransportTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceBinderTest.java
index 94b51136dd..a54827346b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceBinderTest.java
@@ -47,7 +47,7 @@ import org.mockito.Mock;
import java.util.List;
-/** Test cases for {@link PbapClientServiceBinder} */
+/** Test cases for {@link PbapClientServiceBinder}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapClientServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceTest.java
index bf3014a7ac..302f432d21 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientServiceTest.java
@@ -84,6 +84,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+/** Test cases for {@link PbapClientService}. */
@MediumTest
@RunWith(ParameterizedAndroidJunit4.class)
public class PbapClientServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientSocketTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientSocketTest.java
index 64f1979437..28b00d2c53 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientSocketTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientSocketTest.java
@@ -38,6 +38,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+/** Test cases for {@link PbapClientSocket}. */
@RunWith(AndroidJUnit4.class)
public class PbapClientSocketTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineOldTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineOldTest.java
index 73c1722e75..c1cdc928a8 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineOldTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineOldTest.java
@@ -53,6 +53,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
+/** Test cases for {@link PbapClientStateMachineOld}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapClientStateMachineOldTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineTest.java
index d9b8bef9d4..cf3e39ed48 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapClientStateMachineTest.java
@@ -63,6 +63,7 @@ import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link PbapClientStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PbapClientStateMachineTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookMetadataTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookMetadataTest.java
index 2abafedf77..05a9b43198 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookMetadataTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookMetadataTest.java
@@ -23,6 +23,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PbapPhonebookMetadata}. */
@RunWith(AndroidJUnit4.class)
public class PbapPhonebookMetadataTest {
private static final int SIZE = 5;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookTest.java
index 5c24a9f794..fff637e015 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapPhonebookTest.java
@@ -32,6 +32,7 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
+/** Test cases for {@link PbapPhonebook}. */
@RunWith(AndroidJUnit4.class)
public class PbapPhonebookTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapSdpRecordTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapSdpRecordTest.java
index 3248d6e9db..caeb536a3f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapSdpRecordTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PbapSdpRecordTest.java
@@ -32,6 +32,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link PbapSdpRecord}. */
@RunWith(AndroidJUnit4.class)
public class PbapSdpRecordTest {
private BluetoothDevice mTestDevice;
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PhonebookPullRequestTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PhonebookPullRequestTest.java
index 10526bac41..e7df7f174f 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PhonebookPullRequestTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/PhonebookPullRequestTest.java
@@ -35,6 +35,7 @@ import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link PhonebookPullRequest}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PhonebookPullRequestTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookMetadataTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookMetadataTest.java
index 2e404f9614..42e0f1e4fe 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookMetadataTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookMetadataTest.java
@@ -37,6 +37,7 @@ import org.junit.runner.RunWith;
import java.io.IOException;
import java.nio.ByteBuffer;
+/** Test cases for {@link RequestPullPhonebookMetadata}. */
@RunWith(AndroidJUnit4.class)
public class RequestPullPhonebookMetadataTest {
private static final String PHONEBOOK_NAME = "phonebook";
diff --git a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookTest.java b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookTest.java
index 551d3e3d2f..cec2030657 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/pbapclient/RequestPullPhonebookTest.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+/** Test cases for {@link RequestPullPhonebook}. */
@RunWith(AndroidJUnit4.class)
public class RequestPullPhonebookTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapMessageTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapMessageTest.java
index 174e71a954..5e1db970cd 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapMessageTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapMessageTest.java
@@ -55,6 +55,7 @@ import org.mockito.Mockito;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+/** Test cases for {@link SapMessage}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SapMessageTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverHidlTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverHidlTest.java
index 5d30fa6e93..70eb47e560 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverHidlTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverHidlTest.java
@@ -70,6 +70,7 @@ import org.mockito.Spy;
import java.util.ArrayList;
import java.util.Arrays;
+/** Test cases for {@link SapRilReceiverHidl}. */
@LargeTest
@RunWith(AndroidJUnit4.class)
public class SapRilReceiverHidlTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverTest.java
index 80983b2eef..ae4e35a715 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapRilReceiverTest.java
@@ -73,6 +73,7 @@ import org.mockito.Spy;
import java.util.Arrays;
+/** Test cases for {@link SapRilReceiver}. */
@LargeTest
@RunWith(AndroidJUnit4.class)
public class SapRilReceiverTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServerTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServerTest.java
index 69d6434ff2..b6a90affd5 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServerTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServerTest.java
@@ -83,6 +83,7 @@ import org.mockito.Spy;
import java.io.InputStream;
import java.io.OutputStream;
+/** Test cases for {@link SapServer}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SapServerTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceBinderTest.java
index 10d1a092e0..7ee0e89bfb 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceBinderTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link SapServiceBinder} */
+/** Test cases for {@link SapServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SapServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceTest.java
index 06d41b2db8..db9dcb14a2 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/sap/SapServiceTest.java
@@ -46,6 +46,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link SapService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class SapServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGattTest.java b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGattTest.java
index 81d7bc1bd5..35ab51cb25 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGattTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGattTest.java
@@ -56,6 +56,7 @@ import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
+/** Test cases for {@link TbsGatt}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class TbsGattTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java
index 381da33bc0..73822ed8b4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java
@@ -52,6 +52,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+/** Test cases for {@link TbsGeneric}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class TbsGenericTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsServiceBinderTest.java
index 7758d101b1..66f70c1354 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/tbs/TbsServiceBinderTest.java
@@ -40,7 +40,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-/** Test cases for {@link TbsServiceBinder} */
+/** Test cases for {@link TbsServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TbsServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/telephony/BluetoothCallTest.java b/android/app/tests/unit/src/com/android/bluetooth/telephony/BluetoothCallTest.java
index 441ac2b603..d3145bde1b 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/telephony/BluetoothCallTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/telephony/BluetoothCallTest.java
@@ -33,6 +33,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+/** Test cases for {@link BluetoothCall}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BluetoothCallTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlInputDescriptorTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlInputDescriptorTest.java
index eac31c5d95..091c85b761 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlInputDescriptorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlInputDescriptorTest.java
@@ -38,6 +38,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+/** Test cases for {@link VolumeControlInputDescriptor}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class VolumeControlInputDescriptorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlNativeCallbackTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlNativeCallbackTest.java
index e474775f88..f239ca9bbd 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlNativeCallbackTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlNativeCallbackTest.java
@@ -45,6 +45,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
+/** Test cases for {@link VolumeControlNativeCallback}. */
@RunWith(AndroidJUnit4.class)
public class VolumeControlNativeCallbackTest {
@Rule public final MockitoRule mMockitoRule = new MockitoRule();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlOffsetDescriptorTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlOffsetDescriptorTest.java
index 4f7389b8f8..a0f6f450de 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlOffsetDescriptorTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlOffsetDescriptorTest.java
@@ -25,6 +25,7 @@ import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+/** Test cases for {@link VolumeControlOffsetDescriptor}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class VolumeControlOffsetDescriptorTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceBinderTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceBinderTest.java
index 32296381c8..f2167cf4f6 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceBinderTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceBinderTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-/** Test cases for {@link VolumeControlServiceBinder} */
+/** Test cases for {@link VolumeControlServiceBinder}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class VolumeControlServiceBinderTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceTest.java
index 9412ebfe40..b7bc838af4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlServiceTest.java
@@ -96,6 +96,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
+/** Test cases for {@link VolumeControlService}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class VolumeControlServiceTest {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlStateMachineTest.java
index 40b274f7e6..7570c7d387 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/vc/VolumeControlStateMachineTest.java
@@ -63,6 +63,7 @@ import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.hamcrest.MockitoHamcrest;
+/** Test cases for {@link VolumeControlStateMachine}. */
@MediumTest
@RunWith(AndroidJUnit4.class)
public class VolumeControlStateMachineTest {
diff --git a/android/pandora/mmi2grpc/mmi2grpc/_audio.py b/android/pandora/mmi2grpc/mmi2grpc/_audio.py
index 7bc97167a8..6ab5b148ff 100644
--- a/android/pandora/mmi2grpc/mmi2grpc/_audio.py
+++ b/android/pandora/mmi2grpc/mmi2grpc/_audio.py
@@ -18,7 +18,7 @@ import math
import os
from threading import Thread
-# import numpy as np
+import numpy as np
# from scipy.io import wavfile
SINE_FREQUENCY = 440
diff --git a/android/pandora/mmi2grpc/mmi2grpc/hap.py b/android/pandora/mmi2grpc/mmi2grpc/hap.py
index bd2fd83643..99202e9f7f 100644
--- a/android/pandora/mmi2grpc/mmi2grpc/hap.py
+++ b/android/pandora/mmi2grpc/mmi2grpc/hap.py
@@ -28,7 +28,8 @@ from pandora.security_grpc import Security
from pandora.security_pb2 import LE_LEVEL3, PairingEventAnswer
from pandora_experimental.gatt_grpc import GATT
from pandora_experimental.hap_grpc import HAP
-from pandora_experimental.hap_pb2 import HaPlaybackAudioRequest
+from pandora_experimental.le_audio_pb2 import LeAudioPlaybackAudioRequest
+from pandora_experimental.le_audio_grpc import LeAudio
BASE_UUID = uuid.UUID("00000000-0000-1000-8000-00805F9B34FB")
SINK_ASE_UUID = 0x2BC4
@@ -60,9 +61,9 @@ class HAPProxy(ProfileProxy):
self.connection = None
def convert_frame(data):
- return HaPlaybackAudioRequest(data=data, source=self.source)
+ return LeAudioPlaybackAudioRequest(data=data)
- self.audio = AudioSignal(lambda frames: self.hap.HaPlaybackAudio(map(convert_frame, frames)),
+ self.audio = AudioSignal(lambda frames: self.le_audio.LeAudioPlaybackAudio(map(convert_frame, frames)),
AUDIO_SIGNAL_AMPLITUDE, AUDIO_SIGNAL_SAMPLING_RATE)
def test_started(self, test: str, **kwargs):
diff --git a/android/pandora/server/configs/PtsBotTest.xml b/android/pandora/server/configs/PtsBotTest.xml
index 2acbd64521..60a609cc56 100644
--- a/android/pandora/server/configs/PtsBotTest.xml
+++ b/android/pandora/server/configs/PtsBotTest.xml
@@ -35,6 +35,7 @@
<target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
<option name="dep-module" value="grpcio" />
<option name="dep-module" value="protobuf==3.20.1" />
+ <option name="dep-module" value="numpy" />
<!-- Re-enable when A2DP audio streaming tests are active, disabling to speed up atest runtime
(installation takes roughly 30s each time, never cached) -->
diff --git a/android/pandora/server/src/Hap.kt b/android/pandora/server/src/Hap.kt
index ddecaeb773..a242f4bcf2 100644
--- a/android/pandora/server/src/Hap.kt
+++ b/android/pandora/server/src/Hap.kt
@@ -29,8 +29,6 @@ import android.bluetooth.BluetoothProfile.CONNECTION_POLICY_ALLOWED
import android.bluetooth.BluetoothProfile.STATE_CONNECTED
import android.content.Context
import android.content.IntentFilter
-import android.media.AudioManager
-import android.media.AudioTrack
import android.util.Log
import com.google.protobuf.Empty
import io.grpc.Status
@@ -61,7 +59,6 @@ class Hap(val context: Context) : HAPImplBase(), Closeable {
private val bluetoothManager = context.getSystemService(BluetoothManager::class.java)!!
private val bluetoothAdapter = bluetoothManager.adapter
- private val audioManager = context.getSystemService(AudioManager::class.java)!!
private val bluetoothHapClient =
getProfileProxy<BluetoothHapClient>(context, BluetoothProfile.HAP_CLIENT)
@@ -79,8 +76,6 @@ class Hap(val context: Context) : HAPImplBase(), Closeable {
)
.shareIn(scope, SharingStarted.Eagerly)
- private var audioTrack: AudioTrack? = null
-
private class PresetInfoChanged(
var connection: Connection,
var presetInfoList: List<BluetoothHapPresetInfo>,
@@ -287,67 +282,6 @@ class Hap(val context: Context) : HAPImplBase(), Closeable {
}
}
- override fun haPlaybackAudio(
- responseObserver: StreamObserver<Empty>
- ): StreamObserver<HaPlaybackAudioRequest> {
- Log.i(TAG, "haPlaybackAudio")
-
- if (audioTrack == null) {
- audioTrack = buildAudioTrack()
- }
-
- // Play an audio track.
- audioTrack!!.play()
-
- if (audioTrack!!.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
- responseObserver.onError(
- Status.UNKNOWN.withDescription("AudioTrack is not started").asException()
- )
- }
-
- // Volume is maxed out to avoid any amplitude modification of the provided audio data,
- // enabling the test runner to do comparisons between input and output audio signal.
- // Any volume modification should be done before providing the audio data.
- if (audioManager.isVolumeFixed) {
- Log.w(TAG, "Volume is fixed, cannot max out the volume")
- } else {
- val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
- if (audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) < maxVolume) {
- audioManager.setStreamVolume(
- AudioManager.STREAM_MUSIC,
- maxVolume,
- AudioManager.FLAG_SHOW_UI,
- )
- }
- }
-
- return object : StreamObserver<HaPlaybackAudioRequest> {
- override fun onNext(request: HaPlaybackAudioRequest) {
- val data = request.data.toByteArray()
- val written = synchronized(audioTrack!!) { audioTrack!!.write(data, 0, data.size) }
- if (written != data.size) {
- responseObserver.onError(
- Status.UNKNOWN.withDescription("AudioTrack write failed").asException()
- )
- }
- }
-
- override fun onError(t: Throwable) {
- t.printStackTrace()
- val sw = StringWriter()
- t.printStackTrace(PrintWriter(sw))
- responseObserver.onError(
- Status.UNKNOWN.withCause(t).withDescription(sw.toString()).asException()
- )
- }
-
- override fun onCompleted() {
- responseObserver.onNext(Empty.getDefaultInstance())
- responseObserver.onCompleted()
- }
- }
- }
-
override fun waitPresetChanged(
request: Empty,
responseObserver: StreamObserver<WaitPresetChangedResponse>,
diff --git a/android/pandora/server/src/LeAudio.kt b/android/pandora/server/src/LeAudio.kt
index 7e7e7e6147..7677f9ea71 100644
--- a/android/pandora/server/src/LeAudio.kt
+++ b/android/pandora/server/src/LeAudio.kt
@@ -25,9 +25,11 @@ import android.bluetooth.BluetoothProfile.STATE_DISCONNECTED
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
-import android.media.*
+import android.media.AudioTrack
+import android.media.AudioManager
import android.util.Log
import com.google.protobuf.Empty
+import io.grpc.Status
import io.grpc.stub.StreamObserver
import java.io.Closeable
import kotlinx.coroutines.CoroutineScope
@@ -41,6 +43,8 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.shareIn
import pandora.LeAudioGrpc.LeAudioImplBase
import pandora.LeAudioProto.*
+import java.io.PrintWriter
+import java.io.StringWriter
@kotlinx.coroutines.ExperimentalCoroutinesApi
class LeAudio(val context: Context) : LeAudioImplBase(), Closeable {
@@ -57,6 +61,8 @@ class LeAudio(val context: Context) : LeAudioImplBase(), Closeable {
private val bluetoothLeAudio =
getProfileProxy<BluetoothLeAudio>(context, BluetoothProfile.LE_AUDIO)
+ private var audioTrack: AudioTrack? = null
+
init {
scope = CoroutineScope(Dispatchers.Default)
val intentFilter = IntentFilter()
@@ -98,4 +104,92 @@ class LeAudio(val context: Context) : LeAudioImplBase(), Closeable {
Empty.getDefaultInstance()
}
}
+
+ override fun leAudioStart(request: LeAudioStartRequest, responseObserver: StreamObserver<Empty>) {
+ grpcUnary<Empty>(scope, responseObserver) {
+ if (audioTrack == null) {
+ audioTrack = buildAudioTrack()
+ }
+ val device = request.connection.toBluetoothDevice(bluetoothAdapter)
+ Log.i(TAG, "start: device=$device")
+
+ if (bluetoothLeAudio.getConnectionState(device) != BluetoothLeAudio.STATE_CONNECTED) {
+ throw RuntimeException("Device is not connected, cannot start")
+ }
+
+ // Configure the selected device as active device if it is not
+ // already.
+ bluetoothLeAudio.setActiveDevice(device)
+
+ // Play an audio track.
+ audioTrack!!.play()
+
+ Empty.getDefaultInstance()
+ }
+ }
+
+ override fun leAudioStop(request: LeAudioStopRequest, responseObserver: StreamObserver<Empty>) {
+ grpcUnary<Empty>(scope, responseObserver) {
+ checkNotNull(audioTrack) { "No track to pause!" }
+
+ // Play an audio track.
+ audioTrack!!.pause()
+
+ Empty.getDefaultInstance()
+ }
+ }
+
+ override fun leAudioPlaybackAudio(
+ responseObserver: StreamObserver<LeAudioPlaybackAudioResponse>
+ ): StreamObserver<LeAudioPlaybackAudioRequest> {
+ Log.i(TAG, "leAudioPlaybackAudio")
+
+ if (audioTrack!!.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
+ responseObserver.onError(
+ Status.UNKNOWN.withDescription("AudioTrack is not started").asException()
+ )
+ }
+
+ // Volume is maxed out to avoid any amplitude modification of the provided audio data,
+ // enabling the test runner to do comparisons between input and output audio signal.
+ // Any volume modification should be done before providing the audio data.
+ if (audioManager.isVolumeFixed) {
+ Log.w(TAG, "Volume is fixed, cannot max out the volume")
+ } else {
+ val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
+ if (audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) < maxVolume) {
+ audioManager.setStreamVolume(
+ AudioManager.STREAM_MUSIC,
+ maxVolume,
+ AudioManager.FLAG_SHOW_UI,
+ )
+ }
+ }
+
+ return object : StreamObserver<LeAudioPlaybackAudioRequest> {
+ override fun onNext(request: LeAudioPlaybackAudioRequest) {
+ val data = request.data.toByteArray()
+ val written = synchronized(audioTrack!!) { audioTrack!!.write(data, 0, data.size) }
+ if (written != data.size) {
+ responseObserver.onError(
+ Status.UNKNOWN.withDescription("AudioTrack write failed").asException()
+ )
+ }
+ }
+
+ override fun onError(t: Throwable) {
+ t.printStackTrace()
+ val sw = StringWriter()
+ t.printStackTrace(PrintWriter(sw))
+ responseObserver.onError(
+ Status.UNKNOWN.withCause(t).withDescription(sw.toString()).asException()
+ )
+ }
+
+ override fun onCompleted() {
+ responseObserver.onNext(LeAudioPlaybackAudioResponse.getDefaultInstance())
+ responseObserver.onCompleted()
+ }
+ }
+ }
}
diff --git a/android/pandora/server/src/Pan.kt b/android/pandora/server/src/Pan.kt
index 62334af83b..6961eea7dd 100644
--- a/android/pandora/server/src/Pan.kt
+++ b/android/pandora/server/src/Pan.kt
@@ -67,6 +67,7 @@ class Pan(private val context: Context) : PANImplBase(), Closeable {
}
override fun close() {
+ mTetheringManager.stopTethering(TETHERING_BLUETOOTH)
bluetoothAdapter.closeProfileProxy(BluetoothProfile.PAN, bluetoothPan)
mScope.cancel()
}
diff --git a/flags/adapter.aconfig b/flags/adapter.aconfig
index 0195723932..39e681be16 100644
--- a/flags/adapter.aconfig
+++ b/flags/adapter.aconfig
@@ -9,6 +9,16 @@ flag {
}
flag {
+ name: "call_bluetooth_ready_before_profiles_start"
+ namespace: "bluetooth"
+ description: "Initiates the adapter properties before starting profiles"
+ bug: "405437771"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "empty_names_are_invalid"
namespace: "bluetooth"
description: "Make sure the names used in the stack are valid"
diff --git a/flags/gap.aconfig b/flags/gap.aconfig
index 9dcdcd4b2b..856f4f7bb4 100644
--- a/flags/gap.aconfig
+++ b/flags/gap.aconfig
@@ -263,3 +263,10 @@ flag {
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "rssi_scan_filter"
+ namespace: "bluetooth"
+ description: "Add RSSI ScanFilter"
+ bug: "404986559"
+}
diff --git a/flags/leaudio.aconfig b/flags/leaudio.aconfig
index a2f77b5658..7a917fbaca 100644
--- a/flags/leaudio.aconfig
+++ b/flags/leaudio.aconfig
@@ -44,16 +44,6 @@ flag {
}
flag {
- name: "leaudio_codec_config_callback_order_fix"
- namespace: "bluetooth"
- description: "Fix for the order on the callback"
- bug: "326442537"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "leaudio_allow_leaudio_only_devices"
namespace: "bluetooth"
description: "Enable Le Audio for LeAudio only devices"
@@ -61,16 +51,6 @@ flag {
}
flag {
- name: "leaudio_mono_location_errata"
- namespace: "bluetooth"
- description: "Add mono location as per Bluetooth Assigned Numbers"
- bug: "331139722"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "leaudio_mono_location_errata_api"
is_exported: true
namespace: "bluetooth"
@@ -79,13 +59,6 @@ flag {
}
flag {
- name: "le_audio_support_unidirectional_voice_assistant"
- namespace: "bluetooth"
- description: "Allow to create unidirectional stream for VOICEASSISTANT"
- bug: "332510824"
-}
-
-flag {
name: "run_clock_recovery_in_worker_thread"
namespace: "bluetooth"
description: "Fix thread ownership issue in clock_recovery"
@@ -116,16 +89,6 @@ flag {
}
flag {
- name: "leaudio_speed_up_reconfiguration_between_call"
- namespace: "bluetooth"
- description: "Fix reconfiguration time between call and media"
- bug: "352686917"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "leaudio_set_codec_config_preference"
namespace: "bluetooth"
description: "New apis to set codec config preference"
@@ -157,26 +120,6 @@ flag {
}
flag {
- name: "leaudio_unicast_no_available_contexts"
- namespace: "bluetooth"
- description: "Fix handling initial zero available contexts"
- bug: "367325041"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
- name: "leaudio_improve_switch_during_phone_call"
- namespace: "bluetooth"
- description: "Fix audio slip to speaker while switching bt audio device during phonecall"
- bug: "369322905"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "leaudio_sort_scans_to_sync_by_fails"
namespace: "bluetooth"
description: "Sort scan results for source sync by fails counter"
diff --git a/framework/java/android/bluetooth/BluetoothAdapter.java b/framework/java/android/bluetooth/BluetoothAdapter.java
index 1b37497323..b7feb11e19 100644
--- a/framework/java/android/bluetooth/BluetoothAdapter.java
+++ b/framework/java/android/bluetooth/BluetoothAdapter.java
@@ -3460,14 +3460,14 @@ public final class BluetoothAdapter {
BiFunction<Context, BluetoothAdapter, BluetoothProfile> constructor =
PROFILE_CONSTRUCTORS.get(profile);
- BluetoothProfile profileProxy = constructor.apply(context, this);
- ProfileConnection connection = new ProfileConnection(profile, listener, executor);
-
if (constructor == null) {
Log.e(TAG, "getProfileProxy(): Unknown profile " + profile);
return false;
}
+ BluetoothProfile profileProxy = constructor.apply(context, this);
+ ProfileConnection connection = new ProfileConnection(profile, listener, executor);
+
synchronized (sProfileLock) {
// Synchronize with the binder callback to prevent performing the
// ProfileConnection.connect concurrently
diff --git a/framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java b/framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java
index 37dc344cb5..ecb400deb3 100644
--- a/framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java
+++ b/framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java
@@ -32,6 +32,7 @@ import android.bluetooth.BluetoothHidHost;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothStatusCodes;
+import android.bluetooth.BluetoothSocket;
import android.bluetooth.PandoraDevice;
import android.bluetooth.StreamObserverSpliterator;
import android.bluetooth.Utils;
@@ -41,6 +42,7 @@ import android.bluetooth.test_utils.BlockingBluetoothAdapter;
import android.bluetooth.test_utils.EnableBluetoothRule;
import android.content.Context;
import android.os.ParcelUuid;
+import android.util.Log;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -80,6 +82,9 @@ import java.time.Duration;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.io.IOException;
@RunWith(TestParameterInjector.class)
public class PairingTest {
@@ -87,6 +92,7 @@ public class PairingTest {
private static final Duration BOND_INTENT_TIMEOUT = Duration.ofSeconds(10);
private static final int TEST_DELAY_MS = 1000;
+ private static final int TEST_PSM = 5;
private static final ParcelUuid BATTERY_UUID =
ParcelUuid.fromString("0000180F-0000-1000-8000-00805F9B34FB");
@@ -836,6 +842,101 @@ public class PairingTest {
intentReceiver.close();
}
+ /**
+ * Test pending LE L2CAP socket connection and LE pairing
+ *
+ * <p>Prerequisites:
+ *
+ * <ol>
+ * <li>Bumble and Android are not bonded
+ * </ol>
+ *
+ * <p>Steps:
+ *
+ * <ol>
+ * <li>Make Remote device non-connectable over LE
+ * <li>Initiate LE socket connection from DUT to Remote device
+ * <li>Initiate LE pairing from DUT to Remote device
+ * <li>Start LE Advertisement from Remote device after few seconds
+ * </ol>
+ *
+ * <p>Expectation: LE connection should be created and LE Pairing should succeed.
+ */
+ @Test
+ public void testCreateLeSocket_BondLe() throws Exception {
+ IntentReceiver intentReceiver = new IntentReceiver.Builder(sTargetContext,
+ BluetoothDevice.ACTION_ACL_CONNECTED,
+ BluetoothDevice.ACTION_PAIRING_REQUEST,
+ BluetoothDevice.ACTION_BOND_STATE_CHANGED)
+ .build();
+
+ StreamObserver<PairingEventAnswer> pairingEventAnswerObserver =
+ mBumble.security()
+ .withDeadlineAfter(BOND_INTENT_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS)
+ .onPairing(mPairingEventStreamObserver);
+
+ BluetoothSocket bluetoothSocket = mBumbleDevice.createL2capChannel(TEST_PSM);
+
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ executor.submit(() -> {
+ try {
+ bluetoothSocket.connect();
+ } catch (IOException e) {
+ Log.e(TAG, "Exception during socket connection: " + e);
+ }
+ });
+ executor.shutdown();
+
+ // Wait for LE L2CAP socket connection above to be called and reach BT stack
+ Thread.sleep(2000);
+
+ mBumbleDevice.createBond(BluetoothDevice.TRANSPORT_LE);
+
+ /* Make LE L2CAP socket connection and LE Bond calls to wait for few seconds
+ and start LE advertisement from remote device. */
+ Thread.sleep(3000);
+
+ // Start LE advertisement from Bumble
+ AdvertiseRequest.Builder advRequestBuilder =
+ AdvertiseRequest.newBuilder().setLegacy(true)
+ .setConnectable(true)
+ .setOwnAddressType(OwnAddressType.PUBLIC);
+
+ StreamObserverSpliterator<AdvertiseResponse> responseObserver =
+ new StreamObserverSpliterator<>();
+ mBumble.host().advertise(advRequestBuilder.build(), responseObserver);
+
+ intentReceiver.verifyReceivedOrdered(
+ hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED),
+ hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice),
+ hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDING));
+
+ intentReceiver.verifyReceivedOrdered(
+ hasAction(BluetoothDevice.ACTION_ACL_CONNECTED),
+ hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice),
+ hasExtra(BluetoothDevice.EXTRA_TRANSPORT, BluetoothDevice.TRANSPORT_LE));
+
+ intentReceiver.verifyReceivedOrdered(
+ hasAction(BluetoothDevice.ACTION_PAIRING_REQUEST),
+ hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice),
+ hasExtra(
+ BluetoothDevice.EXTRA_PAIRING_VARIANT,
+ BluetoothDevice.PAIRING_VARIANT_CONSENT));
+ mBumbleDevice.setPairingConfirmation(true);
+
+ PairingEvent pairingEvent = mPairingEventStreamObserver.iterator().next();
+ assertThat(pairingEvent.hasJustWorks()).isTrue();
+ pairingEventAnswerObserver.onNext(
+ PairingEventAnswer.newBuilder().setEvent(pairingEvent).setConfirm(true).build());
+
+ intentReceiver.verifyReceivedOrdered(
+ hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED),
+ hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice),
+ hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDED));
+
+ intentReceiver.close();
+ }
+
/** Helper/testStep functions goes here */
/**
diff --git a/framework/tests/unit/src/android/bluetooth/BluetoothCodecConfigTest.java b/framework/tests/unit/src/android/bluetooth/BluetoothCodecConfigTest.java
index d2ca867f01..1129a2c8db 100644
--- a/framework/tests/unit/src/android/bluetooth/BluetoothCodecConfigTest.java
+++ b/framework/tests/unit/src/android/bluetooth/BluetoothCodecConfigTest.java
@@ -26,7 +26,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** Unit test cases for {@link BluetoothCodecConfig}. */
+/** Test cases for {@link BluetoothCodecConfig}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothCodecConfigTest {
diff --git a/framework/tests/unit/src/android/bluetooth/BluetoothCodecStatusTest.java b/framework/tests/unit/src/android/bluetooth/BluetoothCodecStatusTest.java
index 25b1812bf5..33aae7f0e6 100644
--- a/framework/tests/unit/src/android/bluetooth/BluetoothCodecStatusTest.java
+++ b/framework/tests/unit/src/android/bluetooth/BluetoothCodecStatusTest.java
@@ -26,7 +26,7 @@ import org.junit.runner.RunWith;
import java.util.List;
-/** Unit test cases for {@link BluetoothCodecStatus}. */
+/** Test cases for {@link BluetoothCodecStatus}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothCodecStatusTest {
diff --git a/framework/tests/unit/src/android/bluetooth/BluetoothLeAudioCodecConfigTest.java b/framework/tests/unit/src/android/bluetooth/BluetoothLeAudioCodecConfigTest.java
index 7a8f16d778..095e8dc5c2 100644
--- a/framework/tests/unit/src/android/bluetooth/BluetoothLeAudioCodecConfigTest.java
+++ b/framework/tests/unit/src/android/bluetooth/BluetoothLeAudioCodecConfigTest.java
@@ -24,7 +24,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-/** Unit test cases for {@link BluetoothLeAudioCodecConfig}. */
+/** Test cases for {@link BluetoothLeAudioCodecConfig}. */
@RunWith(AndroidJUnit4.class)
public class BluetoothLeAudioCodecConfigTest {
diff --git a/framework/tests/unit/src/android/bluetooth/BluetoothUuidTest.java b/framework/tests/unit/src/android/bluetooth/BluetoothUuidTest.java
index 808f1cf95f..4a36c65f40 100644
--- a/framework/tests/unit/src/android/bluetooth/BluetoothUuidTest.java
+++ b/framework/tests/unit/src/android/bluetooth/BluetoothUuidTest.java
@@ -27,7 +27,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Unit test cases for {@link BluetoothUuid}. */
+/** Test cases for {@link BluetoothUuid}. */
@RunWith(JUnit4.class)
public class BluetoothUuidTest {
diff --git a/framework/tests/unit/src/android/bluetooth/le/ScanFilterTest.java b/framework/tests/unit/src/android/bluetooth/le/ScanFilterTest.java
index 18dc031429..c204028f4f 100644
--- a/framework/tests/unit/src/android/bluetooth/le/ScanFilterTest.java
+++ b/framework/tests/unit/src/android/bluetooth/le/ScanFilterTest.java
@@ -25,7 +25,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Test for Bluetooth LE {@link ScanFilter}. */
+/** Test cases for {@link ScanFilter}. */
@RunWith(JUnit4.class)
public class ScanFilterTest {
diff --git a/framework/tests/unit/src/android/bluetooth/le/ScanRecordTest.java b/framework/tests/unit/src/android/bluetooth/le/ScanRecordTest.java
index 4292583191..68463b4f78 100644
--- a/framework/tests/unit/src/android/bluetooth/le/ScanRecordTest.java
+++ b/framework/tests/unit/src/android/bluetooth/le/ScanRecordTest.java
@@ -34,7 +34,7 @@ import java.util.List;
import java.util.function.Predicate;
/**
- * Unit test cases for {@link ScanRecord}.
+ * Test cases for {@link ScanRecord}.
*
* <p>To run this test, use adb shell am instrument -e class 'android.bluetooth.ScanRecordTest' -w
* 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner'
diff --git a/framework/tests/unit/src/android/bluetooth/le/ScanSettingsTest.java b/framework/tests/unit/src/android/bluetooth/le/ScanSettingsTest.java
index b9ee993b82..2af50ae5da 100644
--- a/framework/tests/unit/src/android/bluetooth/le/ScanSettingsTest.java
+++ b/framework/tests/unit/src/android/bluetooth/le/ScanSettingsTest.java
@@ -41,7 +41,7 @@ import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Test for Bluetooth LE {@link ScanSettings}. */
+/** Test cases for {@link ScanSettings}. */
@RunWith(JUnit4.class)
public class ScanSettingsTest {
@Rule
diff --git a/framework/tests/util/src/BlockingBluetoothAdapter.kt b/framework/tests/util/src/BlockingBluetoothAdapter.kt
index 13ea7aee9b..5d55b80c51 100644
--- a/framework/tests/util/src/BlockingBluetoothAdapter.kt
+++ b/framework/tests/util/src/BlockingBluetoothAdapter.kt
@@ -145,22 +145,14 @@ object BlockingBluetoothAdapter {
Log.e(TAG, "disable: Failed")
return false
}
- // Notify that disable was call.
- state.wasDisabled = true
return state.waitForStateWithTimeout(stateChangeTimeout, STATE_OFF)
}
}
private class AdapterStateListener(context: Context, private val adapter: BluetoothAdapter) {
- private val STATE_UNKNOWN = -42
private val STATE_BLE_TURNING_ON = 14 // BluetoothAdapter.STATE_BLE_TURNING_ON
private val STATE_BLE_TURNING_OFF = 16 // BluetoothAdapter.STATE_BLE_TURNING_OFF
- // Set to true once a call to disable is made, in order to force the differentiation between the
- // various state hidden within STATE_OFF (OFF, BLE_TURNING_ON, BLE_TURNING_OFF)
- // Once true, getter will return STATE_OFF when there has not been any callback sent to it
- var wasDisabled = false
-
val adapterStateFlow =
callbackFlow<Intent> {
val broadcastReceiver =
@@ -184,10 +176,8 @@ private class AdapterStateListener(context: Context, private val adapter: Blueto
state
} else if (adapter.isLeEnabled()) {
STATE_BLE_ON
- } else if (wasDisabled) {
- STATE_OFF
} else {
- STATE_UNKNOWN
+ STATE_OFF
}
}
@@ -200,7 +190,6 @@ private class AdapterStateListener(context: Context, private val adapter: Blueto
// Cts cannot use BluetoothAdapter.nameForState prior to T, some module test on R
private fun nameForState(state: Int): String {
return when (state) {
- STATE_UNKNOWN -> "UNKNOWN: State is oneOf(OFF, BLE_TURNING_ON, BLE_TURNING_OFF)"
STATE_OFF -> "OFF"
STATE_TURNING_ON -> "TURNING_ON"
STATE_ON -> "ON"
diff --git a/pandora/interfaces/pandora_experimental/hap.proto b/pandora/interfaces/pandora_experimental/hap.proto
index 5847887529..d56fdb515d 100644
--- a/pandora/interfaces/pandora_experimental/hap.proto
+++ b/pandora/interfaces/pandora_experimental/hap.proto
@@ -28,8 +28,6 @@ service HAP {
rpc SetNextPreset(SetNextPresetRequest) returns (google.protobuf.Empty);
// Set next preset
rpc SetPreviousPreset(SetPreviousPresetRequest) returns (google.protobuf.Empty);
- // Playback audio
- rpc HaPlaybackAudio(stream HaPlaybackAudioRequest) returns (google.protobuf.Empty);
// Set preset name
rpc WritePresetName(WritePresetNameRequest) returns (google.protobuf.Empty);
// Get preset record
@@ -50,16 +48,6 @@ message GetFeaturesResponse{
int32 features = 1;
}
-// Request of the `PlaybackAudio` method.
-message HaPlaybackAudioRequest {
- // Low Energy connection.
- Connection connection = 1;
- // Audio data to playback.
- // `data` should be interleaved stereo frames with 16-bit signed little-endian
- // linear PCM samples at 44100Hz sample rate
- bytes data = 2;
-}
-
// Request of the `SetActivePreset` method.
message SetActivePresetRequest {
// Connection crafted by grpc server
diff --git a/pandora/interfaces/pandora_experimental/le_audio.proto b/pandora/interfaces/pandora_experimental/le_audio.proto
index 4500564991..4628ac9a2e 100644
--- a/pandora/interfaces/pandora_experimental/le_audio.proto
+++ b/pandora/interfaces/pandora_experimental/le_audio.proto
@@ -10,8 +10,33 @@ package pandora;
// Service to trigger LE Audio procedures.
service LeAudio {
rpc Open(OpenRequest) returns (google.protobuf.Empty);
+ // Playback audio
+ rpc LeAudioPlaybackAudio(stream LeAudioPlaybackAudioRequest) returns (LeAudioPlaybackAudioResponse);
+ // Start an opened stream.
+ rpc LeAudioStart(LeAudioStartRequest) returns (google.protobuf.Empty);
+ // Stop an opened stream.
+ rpc LeAudioStop(LeAudioStopRequest) returns (google.protobuf.Empty);
}
message OpenRequest {
Connection connection = 1;
}
+
+// Request for the `LeAudioStart` method.
+message LeAudioStartRequest {
+ Connection connection = 1;
+}
+
+// Request of the `PlaybackAudio` method.
+message LeAudioPlaybackAudioRequest {
+ // Audio data to playback.
+ bytes data = 1;
+}
+
+// Response of the `LeAudioPlaybackAudio` method.
+message LeAudioPlaybackAudioResponse {}
+
+// Request of the `LeAudioStop` method.
+message LeAudioStopRequest {
+ Connection connection = 1;
+}
diff --git a/system/bta/le_audio/client.cc b/system/bta/le_audio/client.cc
index 43c5100b02..ff1b7e2c77 100644
--- a/system/bta/le_audio/client.cc
+++ b/system/bta/le_audio/client.cc
@@ -1332,11 +1332,6 @@ public:
in_call_ = in_call;
- if (!com::android::bluetooth::flags::leaudio_speed_up_reconfiguration_between_call()) {
- log::debug("leaudio_speed_up_reconfiguration_between_call flag is not enabled");
- return;
- }
-
if (active_group_id_ == bluetooth::groups::kGroupUnknown) {
log::debug("There is no active group");
return;
@@ -1641,11 +1636,6 @@ public:
}
void PrepareStreamForAConversational(LeAudioDeviceGroup* group) {
- if (!com::android::bluetooth::flags::leaudio_improve_switch_during_phone_call()) {
- log::info("Flag leaudio_improve_switch_during_phone_call is not enabled");
- return;
- }
-
log::debug("group_id: {}", group->group_id_);
auto remote_direction = bluetooth::le_audio::types::kLeAudioDirectionSink;
@@ -1794,14 +1784,10 @@ public:
/* Reset sink and source listener notified status */
sink_monitor_notified_status_ = std::nullopt;
source_monitor_notified_status_ = std::nullopt;
- if (com::android::bluetooth::flags::leaudio_codec_config_callback_order_fix()) {
- SendAudioGroupSelectableCodecConfigChanged(group);
- SendAudioGroupCurrentCodecConfigChanged(group);
- callbacks_->OnGroupStatus(active_group_id_, GroupStatus::ACTIVE);
- } else {
- callbacks_->OnGroupStatus(active_group_id_, GroupStatus::ACTIVE);
- SendAudioGroupSelectableCodecConfigChanged(group);
- }
+
+ SendAudioGroupSelectableCodecConfigChanged(group);
+ SendAudioGroupCurrentCodecConfigChanged(group);
+ callbacks_->OnGroupStatus(active_group_id_, GroupStatus::ACTIVE);
}
void SetEnableState(const RawAddress& address, bool enabled) override {
@@ -5451,11 +5437,6 @@ public:
remote_metadata.source.set(LeAudioContextType::CONVERSATIONAL);
}
- if (!com::android::bluetooth::flags::leaudio_speed_up_reconfiguration_between_call()) {
- UpdateSinkLocalMetadataContextTypes(remote_metadata.source);
- UpdateSourceLocalMetadataContextTypes(remote_metadata.sink);
- }
-
if (IsInVoipCall()) {
log::debug("Unsetting RINGTONE from remote sink");
remote_metadata.sink.unset(LeAudioContextType::RINGTONE);
diff --git a/system/bta/le_audio/codec_manager.cc b/system/bta/le_audio/codec_manager.cc
index 104d397833..03ea6eede7 100644
--- a/system/bta/le_audio/codec_manager.cc
+++ b/system/bta/le_audio/codec_manager.cc
@@ -787,11 +787,8 @@ public:
bool UpdateCisMonoConfiguration(const std::vector<struct types::cis>& cises,
const stream_parameters& stream_params, uint8_t direction) {
- if (!LeAudioHalVerifier::SupportsStreamActiveApi() ||
- !com::android::bluetooth::flags::leaudio_mono_location_errata()) {
- log::error(
- "SupportsStreamActiveApi() not supported or leaudio_mono_location_errata flag is not "
- "enabled. Mono stream cannot be enabled");
+ if (!LeAudioHalVerifier::SupportsStreamActiveApi()) {
+ log::error("SupportsStreamActiveApi() not supported. Mono stream cannot be enabled");
return false;
}
diff --git a/system/bta/le_audio/codec_manager_test.cc b/system/bta/le_audio/codec_manager_test.cc
index c69464b72e..f238b959f8 100644
--- a/system/bta/le_audio/codec_manager_test.cc
+++ b/system/bta/le_audio/codec_manager_test.cc
@@ -369,8 +369,6 @@ public:
// Disable codec extensibility by default
osi_property_set_bool(kPropLeAudioCodecExtensibility, false);
- com::android::bluetooth::flags::provider_->leaudio_mono_location_errata(false);
-
CodecManagerTestBase::SetUp();
}
};
@@ -542,7 +540,6 @@ TEST_F(CodecManagerTestAdsp, testStreamConfigurationAdspDownMix) {
}
TEST_F(CodecManagerTestAdsp, testStreamConfigurationMono) {
- com::android::bluetooth::flags::provider_->leaudio_mono_location_errata(true);
const std::vector<bluetooth::le_audio::btle_audio_codec_config_t> offloading_preference(0);
codec_manager->Start(offloading_preference);
@@ -1343,7 +1340,6 @@ TEST_F(CodecManagerTestHost, test_dont_call_hal_for_config) {
}
TEST_F(CodecManagerTestAdsp, testStreamConfigurationVendor) {
- com::android::bluetooth::flags::provider_->leaudio_mono_location_errata(true);
osi_property_set_bool(kPropLeAudioCodecExtensibility, true);
const std::vector<bluetooth::le_audio::btle_audio_codec_config_t> offloading_preference(0);
diff --git a/system/bta/le_audio/device_groups.cc b/system/bta/le_audio/device_groups.cc
index 43f27c0a31..6b1f98a6f8 100644
--- a/system/bta/le_audio/device_groups.cc
+++ b/system/bta/le_audio/device_groups.cc
@@ -862,8 +862,7 @@ LeAudioDeviceGroup::GetAudioSetConfigurationRequirements(types::LeAudioContextTy
continue;
}
- if ((com::android::bluetooth::flags::le_audio_support_unidirectional_voice_assistant() &&
- ctx_type == types::LeAudioContextType::VOICEASSISTANTS) ||
+ if (ctx_type == types::LeAudioContextType::VOICEASSISTANTS ||
ctx_type == types::LeAudioContextType::GAME) {
// For GAME and VOICE ASSISTANT, ignore direction if it is not supported only on a single
// direction.
@@ -1689,19 +1688,16 @@ bool LeAudioDeviceGroup::IsAudioSetConfigurationSupported(
continue;
}
- if (com::android::bluetooth::flags::le_audio_support_unidirectional_voice_assistant()) {
- // Verify the direction requirements.
- if (direction == types::kLeAudioDirectionSink &&
- requirements.sink_requirements->size() == 0) {
- log::debug("There is no requirement for Sink direction.");
- return false;
- }
+ // Verify the direction requirements.
+ if (direction == types::kLeAudioDirectionSink && requirements.sink_requirements->size() == 0) {
+ log::debug("There is no requirement for Sink direction.");
+ return false;
+ }
- if (direction == types::kLeAudioDirectionSource &&
- requirements.source_requirements->size() == 0) {
- log::debug("There is no requirement for source direction.");
- return false;
- }
+ if (direction == types::kLeAudioDirectionSource &&
+ requirements.source_requirements->size() == 0) {
+ log::debug("There is no requirement for source direction.");
+ return false;
}
// Match with requirement first if we have
diff --git a/system/bta/le_audio/le_audio_client_test.cc b/system/bta/le_audio/le_audio_client_test.cc
index 02104518d2..69cd0fe768 100644
--- a/system/bta/le_audio/le_audio_client_test.cc
+++ b/system/bta/le_audio/le_audio_client_test.cc
@@ -4792,7 +4792,6 @@ TEST_F(UnicastTest, GroupSetActiveNonConnectedGroup) {
}
TEST_F(UnicastTest, GroupSetActive_CurrentCodecSentOfActive) {
- com::android::bluetooth::flags::provider_->leaudio_codec_config_callback_order_fix(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -5023,7 +5022,6 @@ TEST_F(UnicastTest, GroupSetActive_and_InactiveDuringStreamConfiguration) {
}
TEST_F(UnicastTest, AnotherGroupSetActive_DuringMediaStream) {
- com::android::bluetooth::flags::provider_->leaudio_improve_switch_during_phone_call(true);
const RawAddress test_address0 = GetTestAddress(0);
const RawAddress test_address1 = GetTestAddress(1);
int group_id_1 = 1;
@@ -5102,7 +5100,6 @@ TEST_F(UnicastTest, AnotherGroupSetActive_DuringMediaStream) {
}
TEST_F(UnicastTest, AnotherGroupSetActive_DuringVoip) {
- com::android::bluetooth::flags::provider_->leaudio_improve_switch_during_phone_call(true);
const RawAddress test_address0 = GetTestAddress(0);
const RawAddress test_address1 = GetTestAddress(1);
int group_id_1 = 1;
@@ -5175,7 +5172,6 @@ TEST_F(UnicastTest, AnotherGroupSetActive_DuringVoip) {
}
TEST_F(UnicastTest, GroupSetActive_and_GroupSetInactive_DuringPhoneCall) {
- com::android::bluetooth::flags::provider_->leaudio_improve_switch_during_phone_call(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -5222,7 +5218,6 @@ TEST_F(UnicastTest, GroupSetActive_and_GroupSetInactive_DuringPhoneCall) {
}
TEST_F(UnicastTest, GroupSetActive_DuringPhoneCall_ThenResume) {
- com::android::bluetooth::flags::provider_->leaudio_improve_switch_during_phone_call(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -6578,7 +6573,6 @@ TEST_F(UnicastTest, SpeakerStreamingNonDefault) {
}
TEST_F(UnicastTest, TestUnidirectionalGameAndLiveRecording) {
- com::android::bluetooth::flags::provider_->le_audio_support_unidirectional_voice_assistant(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -6769,7 +6763,6 @@ TEST_F(UnicastTest, TestUnidirectionalGameAndLiveRecordingMicOnlyDev) {
}
TEST_F(UnicastTest, TestUnidirectionalVoiceAssistant_Sink) {
- com::android::bluetooth::flags::provider_->le_audio_support_unidirectional_voice_assistant(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -6843,7 +6836,6 @@ TEST_F(UnicastTest, TestUnidirectionalVoiceAssistant_Sink) {
}
TEST_F(UnicastTest, TestUnidirectionalVoiceAssistant_Source) {
- com::android::bluetooth::flags::provider_->le_audio_support_unidirectional_voice_assistant(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -8837,111 +8829,7 @@ TEST_F(UnicastTest, TwoEarbudsStopConversational_StartStreamSonification) {
Mock::VerifyAndClearExpectations(&mock_state_machine_);
}
-TEST_F(UnicastTest, TwoEarbudsStreamingContextSwitchReconfigure) {
- // TODO(b/352686917). Remove the test when flag will be removing
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(false);
-
- uint8_t group_size = 2;
- int group_id = 2;
-
- // Report working CSIS
- ON_CALL(mock_csis_client_module_, IsCsisClientRunning()).WillByDefault(Return(true));
-
- ON_CALL(mock_csis_client_module_, GetDesiredSize(group_id))
- .WillByDefault(Invoke([&](int /*group_id*/) { return group_size; }));
-
- // First earbud
- const RawAddress test_address0 = GetTestAddress(0);
- EXPECT_CALL(mock_btif_storage_, AddLeaudioAutoconnect(test_address0, true)).Times(1);
- ConnectCsisDevice(test_address0, 1 /*conn_id*/, codec_spec_conf::kLeAudioLocationFrontLeft,
- codec_spec_conf::kLeAudioLocationFrontLeft, group_size, group_id, 1 /* rank*/);
-
- // Second earbud
- const RawAddress test_address1 = GetTestAddress(1);
- EXPECT_CALL(mock_btif_storage_, AddLeaudioAutoconnect(test_address1, true)).Times(1);
- ConnectCsisDevice(test_address1, 2 /*conn_id*/, codec_spec_conf::kLeAudioLocationFrontRight,
- codec_spec_conf::kLeAudioLocationFrontRight, group_size, group_id, 2 /* rank*/,
- true /*connect_through_csis*/);
-
- constexpr int gmcs_ccid = 1;
- constexpr int gtbs_ccid = 2;
-
- // Start streaming MEDIA
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
- LeAudioClient::Get()->SetCcidInformation(gmcs_ccid, 4 /* Media */);
- LeAudioClient::Get()->SetCcidInformation(gtbs_ccid, 2 /* Phone */);
- LeAudioClient::Get()->GroupSetActive(group_id);
- SyncOnMainLoop();
-
- types::BidirectionalPair<std::vector<uint8_t>> ccids = {.sink = {gmcs_ccid}, .source = {}};
- EXPECT_CALL(mock_state_machine_, StartStream(_, _, _, ccids)).Times(1);
- StartStreaming(AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, group_id);
-
- SyncOnMainLoop();
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
-
- // Verify Data transfer on two peer sinks
- uint8_t cis_count_out = 2;
- uint8_t cis_count_in = 0;
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920);
-
- // Stop
- StopStreaming(group_id);
- // simulate suspend timeout passed, alarm executing
- fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
-
- log::info("SetInCall is used by GTBS - and only then we can expect CCID to be set.");
- LeAudioClient::Get()->SetInCall(true);
-
- // Conversational is a bidirectional scenario so expect GTBS CCID
- // in the metadata for both directions. Can be called twice when one
- // direction resume after the other and metadata is updated.
- ccids = {.sink = {gtbs_ccid}, .source = {gtbs_ccid}};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, types::LeAudioContextType::CONVERSATIONAL, _, ccids))
- .Times(AtLeast(1));
- StartStreaming(AUDIO_USAGE_VOICE_COMMUNICATION, AUDIO_CONTENT_TYPE_SPEECH, group_id);
-
- SyncOnMainLoop();
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
-
- // Verify Data transfer on two peer sinks and one source
- cis_count_out = 2;
- cis_count_in = 2;
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920, 40);
-
- log::info("End call");
- LeAudioClient::Get()->SetInCall(false);
- UpdateLocalSourceMetadata(AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, false);
- UpdateLocalSinkMetadata(std::nullopt);
- // Stop
- StopStreaming(group_id, true);
-
- log::info("Switch back to MEDIA");
- ccids = {.sink = {gmcs_ccid}, .source = {}};
- types::BidirectionalPair<types::AudioContexts> contexts = {
- .sink = types::AudioContexts(types::LeAudioContextType::MEDIA),
- .source = types::AudioContexts()};
- EXPECT_CALL(mock_state_machine_,
- ConfigureStream(_, bluetooth::le_audio::types::LeAudioContextType::MEDIA, contexts,
- ccids, _))
- .Times(1);
- StartStreaming(AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, group_id, AUDIO_SOURCE_INVALID, true);
-
- SyncOnMainLoop();
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
-}
-
TEST_F(UnicastTest, TwoEarbudsStreamingContextSwitchReconfigure_SpeedUpReconfigFlagEnabled) {
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(true);
-
uint8_t group_size = 2;
int group_id = 2;
@@ -10937,79 +10825,7 @@ TEST_F(UnicastTest, SwitchBetweenSoundEffectAndMicrophoneScenario) {
* What we can do now is to keep streaming (and reconfigure if needed for the
* use case).
*/
-TEST_F(UnicastTest, UpdateNotSupportedContextTypeUnspecifiedAvailable) {
- // TODO(b/352686917). Remove the test when flag will be removing
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(false);
-
- const RawAddress test_address0 = GetTestAddress(0);
- int group_id = bluetooth::groups::kGroupUnknown;
-
- available_snk_context_types_ =
- (types::LeAudioContextType::RINGTONE | types::LeAudioContextType::CONVERSATIONAL |
- types::LeAudioContextType::UNSPECIFIED | types::LeAudioContextType::MEDIA)
- .value();
- supported_snk_context_types_ = available_snk_context_types_;
- available_src_context_types_ = available_snk_context_types_;
- supported_src_context_types_ = available_src_context_types_;
-
- SetSampleDatabaseEarbudsValid(1, test_address0, codec_spec_conf::kLeAudioLocationStereo,
- codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
- default_channel_cnt, 0x0004, false /*add_csis*/, true /*add_cas*/,
- true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
- 0 /*rank*/);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnConnectionState(ConnectionState::CONNECTED, test_address0))
- .Times(1);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
- .WillOnce(DoAll(SaveArg<1>(&group_id)));
-
- ConnectLeAudio(test_address0);
- ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);
-
- // Start streaming
- uint8_t cis_count_out = 1;
- uint8_t cis_count_in = 0;
-
- LeAudioClient::Get()->SetInCall(true);
-
- // Audio sessions are started only when device gets active
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
- LeAudioClient::Get()->GroupSetActive(group_id);
- SyncOnMainLoop();
-
- StartStreaming(AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE, AUDIO_CONTENT_TYPE_UNKNOWN, group_id);
- LocalAudioSourceResume();
- LocalAudioSinkResume();
-
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- SyncOnMainLoop();
-
- // Verify Data transfer on one audio source cis
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920);
-
- LeAudioClient::Get()->SetInCall(false);
- LocalAudioSinkSuspend();
- UpdateLocalSinkMetadata(std::nullopt);
-
- /* We should use GAME configuration, but do not send the GAME context type, as
- * it is not available on the remote device.
- */
- EXPECT_CALL(mock_state_machine_, StopStream(_)).Times(0);
- types::BidirectionalPair<types::AudioContexts> contexts = {
- .sink = types::AudioContexts(types::LeAudioContextType::UNSPECIFIED),
- .source = types::AudioContexts()};
- EXPECT_CALL(mock_state_machine_, StartStream(_, types::LeAudioContextType::GAME, contexts, _))
- .Times(1);
- UpdateLocalSourceMetadata(AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_UNKNOWN, false);
- SyncOnMainLoop();
-}
-
TEST_F(UnicastTest, UpdateNotSupportedContextTypeUnspecifiedAvailable_SpeedUpReconfigFlagEnabled) {
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(true);
-
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -11081,146 +10897,7 @@ TEST_F(UnicastTest, UpdateNotSupportedContextTypeUnspecifiedAvailable_SpeedUpRec
* always results with one bidirectional context, so that the remote device
* is not confused about our intentions.
*/
-TEST_F(UnicastTest, UpdateMultipleBidirContextTypes) {
- // TODO(b/352686917). Remove the test when flag will be removing
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(false);
-
- const RawAddress test_address0 = GetTestAddress(0);
- int group_id = bluetooth::groups::kGroupUnknown;
-
- available_snk_context_types_ = (types::LeAudioContextType::CONVERSATIONAL |
- types::LeAudioContextType::GAME | types::LeAudioContextType::LIVE)
- .value();
- supported_snk_context_types_ =
- available_snk_context_types_ |
- types::AudioContexts(types::LeAudioContextType::UNSPECIFIED).value();
- available_src_context_types_ = available_snk_context_types_;
- supported_src_context_types_ =
- available_src_context_types_ |
- types::AudioContexts(types::LeAudioContextType::UNSPECIFIED).value();
-
- SetSampleDatabaseEarbudsValid(1, test_address0, codec_spec_conf::kLeAudioLocationAnyLeft,
- codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
- default_channel_cnt, 0x0024, false /*add_csis*/, true /*add_cas*/,
- true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
- 0 /*rank*/);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnConnectionState(ConnectionState::CONNECTED, test_address0))
- .Times(1);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
- .WillOnce(DoAll(SaveArg<1>(&group_id)));
-
- ConnectLeAudio(test_address0);
- ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);
-
- // Audio sessions are started only when device gets active
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
- LeAudioClient::Get()->GroupSetActive(group_id);
- SyncOnMainLoop();
-
- // When the local audio sink resumes expect only LIVE context
- types::BidirectionalPair<types::AudioContexts> contexts = {
- .sink = types::AudioContexts(types::LeAudioContextType::LIVE),
- .source = types::AudioContexts(types::LeAudioContextType::LIVE)};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, bluetooth::le_audio::types::LeAudioContextType::LIVE, contexts, _))
- .Times(1);
-
- // 1) Start the recording. Sink resume will trigger the reconfiguration
- // ---------------------------------------------------------------------
- ASSERT_NE(nullptr, unicast_sink_hal_cb_);
- UpdateLocalSinkMetadata(AUDIO_SOURCE_MIC);
- LocalAudioSinkResume();
-
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- /* After the reconfiguration the local Audio Sink HAL has to resume again */
- LocalAudioSourceResume();
- LocalAudioSinkResume();
-
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- // Verify Data transfer on one audio source and sink cis
- uint8_t cis_count_out = 1;
- uint8_t cis_count_in = 1;
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920, 40);
-
- // Stop
- StopStreaming(group_id);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
-
- // 2) Now set in call preference to get CONVERSATIONAL into the mix
- // -----------------------------------------------------------------
- LeAudioClient::Get()->SetInCall(true);
-
- // Verify that we only got CONVERSATIONAL context and no LIVE
- contexts = {.sink = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL),
- .source = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL)};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, bluetooth::le_audio::types::LeAudioContextType::CONVERSATIONAL,
- contexts, _))
- .Times(1);
-
- // Start with ringtone on local source
- ASSERT_NE(nullptr, unicast_sink_hal_cb_);
- StartStreaming(AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE, AUDIO_CONTENT_TYPE_UNKNOWN, group_id);
-
- // Resume both directions
- LocalAudioSourceResume();
- LocalAudioSinkResume();
-
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- // Verify Data transfer on one audio source cis
- cis_count_out = 1;
- cis_count_in = 1;
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920, 40);
-
- // 3) Disable call so we could go to GAME
- // ---------------------------------------
- LeAudioClient::Get()->SetInCall(false);
-
- /* Start the game on local source - expect no previous sink (LIVE) metadata */
- EXPECT_CALL(mock_state_machine_, StopStream(_)).Times(0);
- contexts = {.sink = types::AudioContexts(types::LeAudioContextType::GAME),
- .source = types::AudioContexts(types::LeAudioContextType::GAME)};
- EXPECT_CALL(mock_state_machine_, StartStream(_, types::LeAudioContextType::GAME, contexts, _))
- .Times(1);
- UpdateLocalSourceMetadata(AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_UNKNOWN, false);
-
- /* If the above triggers reconfiguration, Audio Hal action is needed to
- * restart the stream.
- */
- LocalAudioSourceResume();
- LocalAudioSinkResume();
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- // 4) Stop streaming
- // ------------------
- StopStreaming(group_id);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
-
- // Release
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Stop()).Times(1);
- EXPECT_CALL(*mock_le_audio_source_hal_client_, OnDestroyed()).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, OnDestroyed()).Times(1);
- do_in_main_thread(base::BindOnce(
- [](LeAudioClient* client) { client->GroupSetActive(bluetooth::groups::kGroupUnknown); },
- LeAudioClient::Get()));
- SyncOnMainLoop();
-}
-
TEST_F(UnicastTest, UpdateMultipleBidirContextTypes_SpeedUpReconfigFlagEnabled) {
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(true);
-
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -11444,154 +11121,7 @@ TEST_F(UnicastTest, UpdateDisableLocalAudioSinkOnGame) {
}
/* Start music when in a call, end the call, continue with music only */
-TEST_F(UnicastTest, MusicDuringCallContextTypes) {
- // TODO(b/352686917). Remove the test when flag will be removing
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(false);
-
- const RawAddress test_address0 = GetTestAddress(0);
- int group_id = bluetooth::groups::kGroupUnknown;
-
- available_snk_context_types_ =
- (types::LeAudioContextType::CONVERSATIONAL | types::LeAudioContextType::RINGTONE |
- types::LeAudioContextType::GAME | types::LeAudioContextType::MEDIA |
- types::LeAudioContextType::LIVE | types::LeAudioContextType::NOTIFICATIONS)
- .value();
- supported_snk_context_types_ =
- available_snk_context_types_ |
- types::AudioContexts(types::LeAudioContextType::UNSPECIFIED).value();
- available_src_context_types_ = available_snk_context_types_;
- available_src_context_types_ &=
- ~((types::LeAudioContextType::NOTIFICATIONS | types::LeAudioContextType::MEDIA).value());
- supported_src_context_types_ =
- available_src_context_types_ |
- types::AudioContexts(types::LeAudioContextType::UNSPECIFIED).value();
-
- SetSampleDatabaseEarbudsValid(1, test_address0, codec_spec_conf::kLeAudioLocationAnyLeft,
- codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
- default_channel_cnt, 0x0024, false /*add_csis*/, true /*add_cas*/,
- true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
- 0 /*rank*/);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnConnectionState(ConnectionState::CONNECTED, test_address0))
- .Times(1);
- EXPECT_CALL(mock_audio_hal_client_callbacks_,
- OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
- .WillOnce(DoAll(SaveArg<1>(&group_id)));
-
- ConnectLeAudio(test_address0);
- ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);
-
- // Audio sessions are started only when device gets active
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
- LeAudioClient::Get()->GroupSetActive(group_id);
- SyncOnMainLoop();
-
- log::info("TESTPOINT 1: Start with the call first");
- // -----------------------------
- // CONVERSATIONAL is from In Call preference, and RINGTONE is from metadata
- LeAudioClient::Get()->SetInCall(true);
- types::BidirectionalPair<types::AudioContexts> contexts = {
- .sink = types::AudioContexts(types::LeAudioContextType::RINGTONE |
- types::LeAudioContextType::CONVERSATIONAL),
- .source = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL)};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, bluetooth::le_audio::types::LeAudioContextType::CONVERSATIONAL,
- contexts, _))
- .Times(1);
- StartStreaming(AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE, AUDIO_CONTENT_TYPE_UNKNOWN, group_id);
- LocalAudioSinkResume();
-
- // Verify
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- // Verify Data transfer
- uint8_t cis_count_out = 1;
- uint8_t cis_count_in = 1;
- TestAudioDataTransfer(group_id, cis_count_out, cis_count_in, 1920, 40);
-
- log::info("TESTPOINT 2: Start MEDIA during the call, expect MEDIA only on the remote sink");
- contexts = {.sink = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL |
- types::LeAudioContextType::MEDIA),
- .source = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL)};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, bluetooth::le_audio::types::LeAudioContextType::CONVERSATIONAL,
- contexts, _))
- .Times(1);
- UpdateLocalSourceMetadata(AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, false);
- SyncOnMainLoop();
-
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
-
- log::info(
- "TESTPOINT 3: Disable In Call preference but do not suspend the local sink. Play "
- "notification on the same stream.");
- // Verify both context are sent as the metadata.
- // ---------------------------------------
- LeAudioClient::Get()->SetInCall(false);
-
- EXPECT_CALL(mock_state_machine_, StopStream(_)).Times(0);
- contexts = {.sink = types::AudioContexts(types::LeAudioContextType::NOTIFICATIONS |
- types::LeAudioContextType::CONVERSATIONAL),
- .source = types::AudioContexts(types::LeAudioContextType::CONVERSATIONAL)};
- EXPECT_CALL(mock_state_machine_,
- StartStream(_, types::LeAudioContextType::CONVERSATIONAL, contexts, _))
- .Times(1);
- UpdateLocalSourceMetadata(AUDIO_USAGE_NOTIFICATION, AUDIO_CONTENT_TYPE_UNKNOWN,
- /*reconfigure=*/false);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
-
- log::info("TESTPOINT 4: Disable call so we could go back to MEDIA");
- // ---------------------------------------
- // Suspend should stop the stream
- EXPECT_CALL(mock_state_machine_, StopStream(_)).Times(1);
- UpdateLocalSinkMetadata(std::nullopt);
- LocalAudioSourceSuspend();
- LocalAudioSinkSuspend();
- // simulate suspend timeout passed, alarm executing
- fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
-
- // Restart the stream with MEDIA
- contexts = {.sink = types::AudioContexts(types::LeAudioContextType::MEDIA),
- .source = types::AudioContexts()};
- EXPECT_CALL(mock_state_machine_, StartStream(_, types::LeAudioContextType::MEDIA, contexts, _))
- .Times(1);
- UpdateLocalSourceMetadata(AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC,
- /*reconfigure=*/false);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
-
- /* The source needs to resume to reconfigure to MEDIA */
- LocalAudioSourceResume(/*expect_confirm=*/false);
- LocalAudioSourceResume(/*expect_confirm=*/true);
- Mock::VerifyAndClearExpectations(&mock_state_machine_);
- Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
- Mock::VerifyAndClearExpectations(mock_le_audio_sink_hal_client_);
-
- log::info("TESTPOINT 5: Stop streaming");
- // ------------------
- StopStreaming(group_id);
- Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
-
- // Release
- EXPECT_CALL(*mock_le_audio_source_hal_client_, Stop()).Times(1);
- EXPECT_CALL(*mock_le_audio_source_hal_client_, OnDestroyed()).Times(1);
- EXPECT_CALL(*mock_le_audio_sink_hal_client_, OnDestroyed()).Times(1);
- do_in_main_thread(base::BindOnce(
- [](LeAudioClient* client) { client->GroupSetActive(bluetooth::groups::kGroupUnknown); },
- LeAudioClient::Get()));
- SyncOnMainLoop();
-}
-
TEST_F(UnicastTest, MetadataUpdateDuringReconfiguration) {
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(true);
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
@@ -11664,8 +11194,6 @@ TEST_F(UnicastTest, MetadataUpdateDuringReconfiguration) {
}
TEST_F(UnicastTest, MusicDuringCallContextTypes_SpeedUpReconfigFlagEnabled) {
- com::android::bluetooth::flags::provider_->leaudio_speed_up_reconfiguration_between_call(true);
-
const RawAddress test_address0 = GetTestAddress(0);
int group_id = bluetooth::groups::kGroupUnknown;
diff --git a/system/gd/hal/snoop_logger.cc b/system/gd/hal/snoop_logger.cc
index 538d13ec3e..2462834b53 100644
--- a/system/gd/hal/snoop_logger.cc
+++ b/system/gd/hal/snoop_logger.cc
@@ -55,7 +55,7 @@ static std::string GetBtSnoopMode() {
// Default mode is FILTERED on userdebug/eng build, DISABLED on user build.
// In userdebug/eng build, it can also be overwritten by modifying the global setting
std::string btsnoop_mode = SnoopLogger::kBtSnoopLogModeDisabled;
- if (os::GetSystemPropertyBool(SnoopLogger::kIsDebuggableProperty, false)) {
+ if (os::GetSystemProperty(SnoopLogger::kRoBuildType) != "user") {
btsnoop_mode = os::GetSystemProperty(SnoopLogger::kBtSnoopDefaultLogModeProperty)
.value_or(SnoopLogger::kBtSnoopLogModeFiltered);
}
@@ -471,7 +471,7 @@ size_t get_btsnooz_packet_length_to_write(const HciPacket& packet, SnoopLogger::
// system properties
const std::string SnoopLogger::kBtSnoopMaxPacketsPerFileProperty = "persist.bluetooth.btsnoopsize";
-const std::string SnoopLogger::kIsDebuggableProperty = "ro.debuggable";
+const std::string SnoopLogger::kRoBuildType = "ro.build.type";
const std::string SnoopLogger::kBtSnoopLogModeProperty = "persist.bluetooth.btsnooplogmode";
const std::string SnoopLogger::kBtSnoopDefaultLogModeProperty =
"persist.bluetooth.btsnoopdefaultmode";
@@ -1333,7 +1333,7 @@ void SnoopLogger::Start() {
EnableFilters();
}
- if (os::GetSystemPropertyBool(kIsDebuggableProperty, false)) {
+ if (os::GetSystemProperty(kRoBuildType) != "user") {
// Cf b/375056207: The implementation must pass a security review
// in order to enable the snoop logger socket in user builds.
auto snoop_logger_socket = std::make_unique<SnoopLoggerSocket>(&syscall_if);
@@ -1404,9 +1404,9 @@ size_t SnoopLogger::GetMaxPacketsPerFile() {
size_t SnoopLogger::GetMaxPacketsPerBuffer() {
// We want to use at most 256 KB memory for btsnooz log for release builds
// and 512 KB memory for userdebug/eng builds
- auto is_debuggable = os::GetSystemPropertyBool(kIsDebuggableProperty, false);
+ auto is_debug_build = (os::GetSystemProperty(kRoBuildType) != "user");
- size_t btsnooz_max_memory_usage_bytes = (is_debuggable ? 1024 : 256) * 1024;
+ size_t btsnooz_max_memory_usage_bytes = (is_debug_build ? 1024 : 256) * 1024;
// Calculate max number of packets based on max memory usage and max packet size
return btsnooz_max_memory_usage_bytes / kDefaultBtSnoozMaxBytesPerPacket;
}
@@ -1419,8 +1419,8 @@ void SnoopLogger::RegisterSocket(SnoopLoggerSocketInterface* socket) {
}
bool SnoopLogger::IsBtSnoopLogPersisted() {
- auto is_debuggable = os::GetSystemPropertyBool(kIsDebuggableProperty, false);
- return is_debuggable && os::GetSystemPropertyBool(kBtSnoopLogPersists, false);
+ auto is_debug_build = (os::GetSystemProperty(kRoBuildType) != "user");
+ return is_debug_build && os::GetSystemPropertyBool(kBtSnoopLogPersists, false);
}
bool SnoopLogger::IsQualcommDebugLogEnabled() {
diff --git a/system/gd/hal/snoop_logger.h b/system/gd/hal/snoop_logger.h
index b0783442b3..5f45e8a0b2 100644
--- a/system/gd/hal/snoop_logger.h
+++ b/system/gd/hal/snoop_logger.h
@@ -146,7 +146,7 @@ public:
static const ModuleFactory Factory;
static const std::string kBtSnoopMaxPacketsPerFileProperty;
- static const std::string kIsDebuggableProperty;
+ static const std::string kRoBuildType;
static const std::string kBtSnoopLogModeProperty;
static const std::string kBtSnoopLogPersists;
static const std::string kBtSnoopDefaultLogModeProperty;