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

Commit 63df5cec authored by Etienne Ruffieux's avatar Etienne Ruffieux
Browse files

Handle error response for GetTotalNumberOfItems

If no player has been set as addressed, we need to return
an error response, same for browsed player.

Bug: 346717077
Flag: exempt trivial
Test: atest BluetoothInstrumentationTests
Change-Id: I5f184e8fc2a4d5e10d3bc59a8adfe645c44824ba
parent 3af158ea
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -725,6 +725,7 @@ void Device::AddressedPlayerNotificationResponse(uint8_t label, bool interim,
  if (curr_browsed_player_id_ == -1) {
    curr_browsed_player_id_ = curr_player;
  }
  curr_addressed_player_id_ = curr_player;

  auto response = RegisterNotificationResponseBuilder::MakeAddressedPlayerBuilder(
          interim, curr_player, 0x0000);
@@ -937,6 +938,8 @@ void Device::HandleSetAddressedPlayer(uint8_t label, std::shared_ptr<SetAddresse
    return;
  }

  curr_addressed_player_id_ = curr_player;

  auto response = SetAddressedPlayerResponseBuilder::MakeBuilder(Status::NO_ERROR);
  send_message(label, false, std::move(response));
}
@@ -1126,6 +1129,13 @@ void Device::GetTotalNumberOfItemsMediaPlayersResponse(uint8_t label, uint16_t c
void Device::GetTotalNumberOfItemsVFSResponse(uint8_t label, std::vector<ListItem> list) {
  log::verbose("num_items={}", list.size());

  if (curr_browsed_player_id_ == -1) {
    auto response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_AVAILABLE_PLAYERS,
                                                                      0x0000, 0);
    send_message(label, true, std::move(response));
    return;
  }

  auto builder =
          GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_ERROR, 0x0000, list.size());
  send_message(label, true, std::move(builder));
@@ -1135,6 +1145,13 @@ void Device::GetTotalNumberOfItemsNowPlayingResponse(uint8_t label, std::string
                                                     std::vector<SongInfo> list) {
  log::verbose("num_items={}", list.size());

  if (curr_addressed_player_id_ == -1) {
    auto response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_AVAILABLE_PLAYERS,
                                                                      0x0000, 0);
    send_message(label, true, std::move(response));
    return;
  }

  auto builder =
          GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_ERROR, 0x0000, list.size());
  send_message(label, true, std::move(builder));
+1 −0
Original line number Diff line number Diff line
@@ -341,6 +341,7 @@ private:
  bool has_bip_client_;

  int curr_browsed_player_id_ = -1;
  int curr_addressed_player_id_ = -1;

  std::stack<std::string> current_path_;

+3 −3
Original line number Diff line number Diff line
@@ -744,7 +744,7 @@ TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsVFSTest) {
  EXPECT_CALL(interface, GetFolderItems(_, "", _)).Times(1).WillOnce(InvokeCb<2>(vfs_list));

  auto expected_response =
          GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_ERROR, 0, vfs_list.size());
          GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_AVAILABLE_PLAYERS, 0, 0);
  EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))).Times(1);

  SendBrowseMessage(1, TestBrowsePacket::Make(get_total_number_of_items_request_vfs));
@@ -763,8 +763,8 @@ TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsNowPlayingTest) {
  EXPECT_CALL(interface, GetNowPlayingList(_))
          .WillRepeatedly(InvokeCb<0>("test_id1", now_playing_list));

  auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(
          Status::NO_ERROR, 0, now_playing_list.size());
  auto expected_response =
          GetTotalNumberOfItemsResponseBuilder::MakeBuilder(Status::NO_AVAILABLE_PLAYERS, 0, 0);
  EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))).Times(1);

  SendBrowseMessage(1, TestBrowsePacket::Make(get_total_number_of_items_request_now_playing));