Loading system/bta/le_audio/client.cc +5 −0 Original line number Diff line number Diff line Loading @@ -1258,6 +1258,11 @@ class LeAudioClientImpl : public LeAudioClient { group_remove_node(group, address, true); } leAudioDevices_.Remove(address); return; } /* Attempt background re-connect if disconnect was not intended locally */ if (reason != GATT_CONN_TERMINATE_LOCAL_HOST) { BTA_GATTC_Open(gatt_if_, address, false, false); } } Loading system/bta/le_audio/le_audio_client_test.cc +27 −2 Original line number Diff line number Diff line Loading @@ -264,7 +264,9 @@ class UnicastTestNoInit : public Test { base::Unretained(this->gatt_callback), event_data)); } void InjectDisconnectedEvent(uint16_t conn_id) { void InjectDisconnectedEvent( uint16_t conn_id, tGATT_DISCONN_REASON reason = GATT_CONN_TERMINATE_LOCAL_HOST) { ASSERT_NE(conn_id, GATT_INVALID_CONN_ID); ASSERT_NE(peer_devices.count(conn_id), 0u); Loading @@ -273,7 +275,7 @@ class UnicastTestNoInit : public Test { .conn_id = conn_id, .client_if = gatt_if, .remote_bda = peer_devices.at(conn_id)->addr, .reason = GATT_CONN_TERMINATE_PEER_USER, .reason = reason, }; peer_devices.at(conn_id)->connected = false; Loading Loading @@ -1769,6 +1771,29 @@ TEST_F(UnicastTest, ConnectDisconnectOneEarbud) { DisconnectLeAudio(test_address0, 1); } /* same as above case except the disconnect is initiated by remote */ TEST_F(UnicastTest, ConnectRemoteDisconnectOneEarbud) { const RawAddress test_address0 = GetTestAddress(0); SetSampleDatabaseEarbudsValid(1, test_address0, codec_spec_conf::kLeAudioLocationStereo, codec_spec_conf::kLeAudioLocationStereo); EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::CONNECTED, test_address0)) .Times(1); ConnectLeAudio(test_address0); EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::DISCONNECTED, test_address0)) .Times(1); /* For remote disconnection, expect stack to try background re-connect */ EXPECT_CALL(mock_gatt_interface_, Open(gatt_if, test_address0, false, _)) .Times(1); global_conn_id = 1; /* Reset to keep conn_id same during re-connect */ EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::CONNECTED, test_address0)) .Times(1); InjectDisconnectedEvent(1, GATT_CONN_TERMINATE_PEER_USER); } TEST_F(UnicastTest, ConnectTwoEarbudsCsisGrouped) { uint8_t group_size = 2; int group_id = 2; Loading Loading
system/bta/le_audio/client.cc +5 −0 Original line number Diff line number Diff line Loading @@ -1258,6 +1258,11 @@ class LeAudioClientImpl : public LeAudioClient { group_remove_node(group, address, true); } leAudioDevices_.Remove(address); return; } /* Attempt background re-connect if disconnect was not intended locally */ if (reason != GATT_CONN_TERMINATE_LOCAL_HOST) { BTA_GATTC_Open(gatt_if_, address, false, false); } } Loading
system/bta/le_audio/le_audio_client_test.cc +27 −2 Original line number Diff line number Diff line Loading @@ -264,7 +264,9 @@ class UnicastTestNoInit : public Test { base::Unretained(this->gatt_callback), event_data)); } void InjectDisconnectedEvent(uint16_t conn_id) { void InjectDisconnectedEvent( uint16_t conn_id, tGATT_DISCONN_REASON reason = GATT_CONN_TERMINATE_LOCAL_HOST) { ASSERT_NE(conn_id, GATT_INVALID_CONN_ID); ASSERT_NE(peer_devices.count(conn_id), 0u); Loading @@ -273,7 +275,7 @@ class UnicastTestNoInit : public Test { .conn_id = conn_id, .client_if = gatt_if, .remote_bda = peer_devices.at(conn_id)->addr, .reason = GATT_CONN_TERMINATE_PEER_USER, .reason = reason, }; peer_devices.at(conn_id)->connected = false; Loading Loading @@ -1769,6 +1771,29 @@ TEST_F(UnicastTest, ConnectDisconnectOneEarbud) { DisconnectLeAudio(test_address0, 1); } /* same as above case except the disconnect is initiated by remote */ TEST_F(UnicastTest, ConnectRemoteDisconnectOneEarbud) { const RawAddress test_address0 = GetTestAddress(0); SetSampleDatabaseEarbudsValid(1, test_address0, codec_spec_conf::kLeAudioLocationStereo, codec_spec_conf::kLeAudioLocationStereo); EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::CONNECTED, test_address0)) .Times(1); ConnectLeAudio(test_address0); EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::DISCONNECTED, test_address0)) .Times(1); /* For remote disconnection, expect stack to try background re-connect */ EXPECT_CALL(mock_gatt_interface_, Open(gatt_if, test_address0, false, _)) .Times(1); global_conn_id = 1; /* Reset to keep conn_id same during re-connect */ EXPECT_CALL(mock_client_callbacks_, OnConnectionState(ConnectionState::CONNECTED, test_address0)) .Times(1); InjectDisconnectedEvent(1, GATT_CONN_TERMINATE_PEER_USER); } TEST_F(UnicastTest, ConnectTwoEarbudsCsisGrouped) { uint8_t group_size = 2; int group_id = 2; Loading