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

Commit c116b44c authored by android-build-team Robot's avatar android-build-team Robot Committed by Android (Google) Code Review
Browse files

Merge "Implement GetTotalNumberOfItems response for AVRCP Browsing" into pi-dev

parents 7418452b f217bbf1
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -291,9 +291,17 @@ std::vector<uint8_t> set_browsed_player_response = {
    0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x04, 0x00, 0x6a, 0x00};

// AVRCP Get Total Number of Items Request with Scope = Media Player List
std::vector<uint8_t> get_total_number_of_items_request_media_players = {
    0x75, 0x00, 0x01, 0x00};

// AVRCP Get Total Number of Items Request with Scope = VFS
std::vector<uint8_t> get_total_number_of_items_request_vfs = {0x75, 0x00, 0x01,
                                                              0x01};

// AVRCP Get Total Number of Items Request with Scope = Now Playing List
std::vector<uint8_t> get_total_number_of_items_request = {0x75, 0x00, 0x01,
                                                          0x03};
std::vector<uint8_t> get_total_number_of_items_request_now_playing = {
    0x75, 0x00, 0x01, 0x03};

// AVRCP Get Total number of Items Response with 5 items in folder
std::vector<uint8_t> get_total_number_of_items_response = {
+5 −5
Original line number Diff line number Diff line
@@ -48,19 +48,19 @@ TEST(GetTotalNumberOfItemsResponseBuilderTest, errorStatusTest) {
}

TEST(GetTotalNumberOfItemsRequestTest, getterTest) {
  auto test_packet =
      TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request);
  auto test_packet = TestGetTotalNumItemsReqPacket::Make(
      get_total_number_of_items_request_now_playing);
  ASSERT_EQ(test_packet->GetScope(), Scope::NOW_PLAYING);
}

TEST(GetTotalNumberOfItemsRequestTest, validTest) {
  auto test_packet =
      TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request);
  auto test_packet = TestGetTotalNumItemsReqPacket::Make(
      get_total_number_of_items_request_now_playing);
  ASSERT_TRUE(test_packet->IsValid());
}

TEST(GetTotalNumberOfItemsRequestTest, invalidTest) {
  auto packet_copy = get_total_number_of_items_request;
  auto packet_copy = get_total_number_of_items_request_now_playing;
  packet_copy.push_back(0x00);
  auto test_packet = TestGetTotalNumItemsReqPacket::Make(packet_copy);
  ASSERT_FALSE(test_packet->IsValid());
+60 −1
Original line number Diff line number Diff line
@@ -578,8 +578,12 @@ void Device::BrowseMessageReceived(uint8_t label,
      HandleGetItemAttributes(
          label, Packet::Specialize<GetItemAttributesRequest>(pkt));
      break;
    case BrowsePdu::GET_TOTAL_NUMBER_OF_ITEMS:
      HandleGetTotalNumberOfItems(
          label, Packet::Specialize<GetTotalNumberOfItemsRequest>(pkt));
      break;
    default:
      DEVICE_LOG(WARNING) << __func__ << ": " << pkt->GetPdu();
      DEVICE_LOG(FATAL) << __func__ << ": " << pkt->GetPdu();
      break;
  }
}
@@ -611,6 +615,61 @@ void Device::HandleGetFolderItems(uint8_t label,
  }
}

void Device::HandleGetTotalNumberOfItems(
    uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt) {
  DEVICE_VLOG(2) << __func__ << ": scope=" << pkt->GetScope();

  switch (pkt->GetScope()) {
    case Scope::MEDIA_PLAYER_LIST: {
      media_interface_->GetMediaPlayerList(
          base::Bind(&Device::GetTotalNumberOfItemsMediaPlayersResponse,
                     base::Unretained(this), label));
      break;
    }
    case Scope::VFS:
      media_interface_->GetFolderItems(
          curr_browsed_player_id_, CurrentFolder(),
          base::Bind(&Device::GetTotalNumberOfItemsVFSResponse,
                     base::Unretained(this), label));
      break;
    case Scope::NOW_PLAYING:
      media_interface_->GetNowPlayingList(
          base::Bind(&Device::GetTotalNumberOfItemsNowPlayingResponse,
                     base::Unretained(this), label));
      break;
    default:
      DEVICE_LOG(ERROR) << __func__ << ": " << pkt->GetScope();
      break;
  }
}

void Device::GetTotalNumberOfItemsMediaPlayersResponse(
    uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list) {
  DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size();

  auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(
      Status::NO_ERROR, 0x0000, list.size());
  send_message(label, true, std::move(builder));
}

void Device::GetTotalNumberOfItemsVFSResponse(uint8_t label,
                                              std::vector<ListItem> list) {
  DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size();

  auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(
      Status::NO_ERROR, 0x0000, list.size());
  send_message(label, true, std::move(builder));
}

void Device::GetTotalNumberOfItemsNowPlayingResponse(
    uint8_t label, std::string curr_song_id, std::vector<SongInfo> list) {
  DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size();

  auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(
      Status::NO_ERROR, 0x0000, list.size());
  send_message(label, true, std::move(builder));
}

void Device::HandleChangePath(uint8_t label,
                              std::shared_ptr<ChangePathRequest> pkt) {
  DEVICE_VLOG(2) << __func__ << ": direction=" << pkt->GetDirection()
+10 −0
Original line number Diff line number Diff line
@@ -163,6 +163,16 @@ class Device {
      uint8_t label, std::shared_ptr<GetFolderItemsRequest> pkt,
      std::string curr_song_id, std::vector<SongInfo> song_list);

  // GET TOTAL NUMBER OF ITEMS
  virtual void HandleGetTotalNumberOfItems(
      uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt);
  virtual void GetTotalNumberOfItemsMediaPlayersResponse(
      uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list);
  virtual void GetTotalNumberOfItemsVFSResponse(uint8_t label,
                                                std::vector<ListItem> items);
  virtual void GetTotalNumberOfItemsNowPlayingResponse(
      uint8_t label, std::string curr_song_id, std::vector<SongInfo> song_list);

  // GET ITEM ATTRIBUTES
  virtual void HandleGetItemAttributes(
      uint8_t label, std::shared_ptr<GetItemAttributesRequest> request);
+73 −0
Original line number Diff line number Diff line
@@ -355,6 +355,79 @@ TEST_F(AvrcpDeviceTest, getElementAttributesMtuTest) {
      1, TestAvrcpPacket::Make(get_element_attributes_request_full));
}

TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsMediaPlayersTest) {
  MockMediaInterface interface;
  NiceMock<MockA2dpInterface> a2dp_interface;

  test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr);

  std::vector<MediaPlayerInfo> player_list = {
      {0, "player1", true}, {1, "player2", true}, {2, "player3", true},
  };

  EXPECT_CALL(interface, GetMediaPlayerList(_))
      .Times(1)
      .WillOnce(InvokeCb<0>(0, player_list));

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

  SendBrowseMessage(1, TestBrowsePacket::Make(
                           get_total_number_of_items_request_media_players));
}

TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsVFSTest) {
  MockMediaInterface interface;
  NiceMock<MockA2dpInterface> a2dp_interface;

  test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr);

  std::vector<ListItem> vfs_list = {
      {ListItem::FOLDER, {"id1", true, "folder1"}, SongInfo()},
      {ListItem::FOLDER, {"id2", true, "folder2"}, SongInfo()},
  };

  EXPECT_CALL(interface, GetFolderItems(_, "", _))
      .Times(1)
      .WillOnce(InvokeCb<2>(vfs_list));

  auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder(
      Status::NO_ERROR, 0, vfs_list.size());
  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));
}

TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsNowPlayingTest) {
  MockMediaInterface interface;
  NiceMock<MockA2dpInterface> a2dp_interface;

  test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr);

  std::vector<SongInfo> now_playing_list = {
      {"test_id1", {}}, {"test_id2", {}}, {"test_id3", {}},
      {"test_id4", {}}, {"test_id5", {}},
  };

  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());
  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));
}

TEST_F(AvrcpDeviceTest, getMediaPlayerListTest) {
  MockMediaInterface interface;
  NiceMock<MockA2dpInterface> a2dp_interface;