diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-09-30 23:12:45 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-09-30 23:12:45 +0000 |
commit | 02076acde3168be6e11e83a5683c7658f6fed67a (patch) | |
tree | 7b184c932eeb55de5ed8d6634c65db4c2d9825e4 | |
parent | 0608ef56499c38be7ac4f3668d8d7b264e7ab8d8 (diff) | |
parent | aec3a4681b893ebdc022740d74b678eaa3945850 (diff) | |
download | bt-02076acde3168be6e11e83a5683c7658f6fed67a.tar.gz |
Snap for 6875707 from aec3a4681b893ebdc022740d74b678eaa3945850 to rvc-qpr1-release
Change-Id: I219a75fb436577918a3c4bb77e27d3a7470906cf
-rw-r--r-- | packet/tests/avrcp/avrcp_test_packets.h | 4 | ||||
-rw-r--r-- | profile/avrcp/device.cc | 8 | ||||
-rw-r--r-- | profile/avrcp/tests/avrcp_device_test.cc | 38 |
3 files changed, 50 insertions, 0 deletions
diff --git a/packet/tests/avrcp/avrcp_test_packets.h b/packet/tests/avrcp/avrcp_test_packets.h index 14e30e7ac..9028805d6 100644 --- a/packet/tests/avrcp/avrcp_test_packets.h +++ b/packet/tests/avrcp/avrcp_test_packets.h @@ -316,6 +316,10 @@ std::vector<uint8_t> set_addressed_player_response = { std::vector<uint8_t> set_browsed_player_request = {0x70, 0x00, 0x02, 0x00, 0x02}; +// AVRCP Set Browsed Player Request with player_id = 0 +std::vector<uint8_t> set_browsed_player_id_0_request = {0x70, 0x00, 0x02, 0x00, + 0x00}; + // AVRCP Set Browsed Player Response with num items = 4 and depth = 0 std::vector<uint8_t> set_browsed_player_response = { 0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00, diff --git a/profile/avrcp/device.cc b/profile/avrcp/device.cc index a7e0e9a05..34292d226 100644 --- a/profile/avrcp/device.cc +++ b/profile/avrcp/device.cc @@ -1257,6 +1257,14 @@ void Device::SetBrowsedPlayerResponse( return; } + if (pkt->GetPlayerId() == 0 && num_items == 0) { + // Response fail if no browsable player in Bluetooth Player + auto response = SetBrowsedPlayerResponseBuilder::MakeBuilder( + Status::PLAYER_NOT_BROWSABLE, 0x0000, num_items, 0, ""); + send_message(label, true, std::move(response)); + return; + } + curr_browsed_player_id_ = pkt->GetPlayerId(); // Clear the path and push the new root. diff --git a/profile/avrcp/tests/avrcp_device_test.cc b/profile/avrcp/tests/avrcp_device_test.cc index d221e1be3..8d70e43a6 100644 --- a/profile/avrcp/tests/avrcp_device_test.cc +++ b/profile/avrcp/tests/avrcp_device_test.cc @@ -1035,6 +1035,44 @@ TEST_F(AvrcpDeviceTest, setAddressedPlayerTest) { SendMessage(1, request); } +TEST_F(AvrcpDeviceTest, setBrowsedPlayerTest) { + MockMediaInterface interface; + NiceMock<MockA2dpInterface> a2dp_interface; + + test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); + + EXPECT_CALL(interface, SetBrowsedPlayer(_, _)) + .Times(3) + .WillOnce(InvokeCb<1>(true, "", 0)) + .WillOnce(InvokeCb<1>(false, "", 0)) + .WillOnce(InvokeCb<1>(true, "", 2)); + + auto not_browsable_rsp = SetBrowsedPlayerResponseBuilder::MakeBuilder( + Status::PLAYER_NOT_BROWSABLE, 0x0000, 0, 0, ""); + EXPECT_CALL(response_cb, + Call(1, true, matchPacket(std::move(not_browsable_rsp)))) + .Times(1); + + auto player_id_0_request = + TestBrowsePacket::Make(set_browsed_player_id_0_request); + SendBrowseMessage(1, player_id_0_request); + + auto invalid_id_rsp = SetBrowsedPlayerResponseBuilder::MakeBuilder( + Status::INVALID_PLAYER_ID, 0x0000, 0, 0, ""); + EXPECT_CALL(response_cb, + Call(2, true, matchPacket(std::move(invalid_id_rsp)))) + .Times(1); + + SendBrowseMessage(2, player_id_0_request); + + auto response = SetBrowsedPlayerResponseBuilder::MakeBuilder( + Status::NO_ERROR, 0x0000, 2, 0, ""); + EXPECT_CALL(response_cb, Call(3, true, matchPacket(std::move(response)))) + .Times(1); + + SendBrowseMessage(3, player_id_0_request); +} + TEST_F(AvrcpDeviceTest, volumeChangedTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; |