Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ca49448 authored by Ted Wang's avatar Ted Wang
Browse files

Reject SetBrowsedPlayer if there is not browsable player

Tag: #compatibility
Bug: 163109635
Test: atest net_test_avrcp
Change-Id: I587ca0d514b50c7a72269eef86a8b5ff38343d05
Merged-In: I587ca0d514b50c7a72269eef86a8b5ff38343d05
parent 385eee4c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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,
+8 −0
Original line number Diff line number Diff line
@@ -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.
+38 −0
Original line number Diff line number Diff line
@@ -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;