Skip to content

Commit

Permalink
Return empty timeline when media info is null
Browse files Browse the repository at this point in the history
Issue: #708
PiperOrigin-RevId: 584054624
  • Loading branch information
marcbaechinger authored and Copybara-Service committed Nov 20, 2023
1 parent 4bcb60d commit 167f50a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 3 deletions.
3 changes: 3 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@
([#710](https://github.com/androidx/media/pull/710)).
* Leanback extension:
* Cast Extension:
* Sanitize creation of a `Timeline` to not crash the app when loading
media fails on the cast device
([#708](https://github.com/androidx/media/issues/708)).
* Test Utilities:
* Remove deprecated symbols:
* Demo app:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import static androidx.media3.cast.CastTimeline.ItemData.UNKNOWN_CONTENT_ID;
import static androidx.media3.common.util.Assertions.checkNotNull;
import static androidx.media3.common.util.Assertions.checkStateNotNull;

import android.util.SparseArray;
import androidx.annotation.Nullable;
Expand Down Expand Up @@ -105,12 +104,12 @@ public CastTimeline getCastTimeline(RemoteMediaClient remoteMediaClient) {

// TODO: Reset state when the app instance changes [Internal ref: b/129672468].
MediaStatus mediaStatus = remoteMediaClient.getMediaStatus();
if (mediaStatus == null) {
if (mediaStatus == null || mediaStatus.getMediaInfo() == null) {
return CastTimeline.EMPTY_CAST_TIMELINE;
}

int currentItemId = mediaStatus.getCurrentItemId();
String currentContentId = checkStateNotNull(mediaStatus.getMediaInfo()).getContentId();
String currentContentId = checkNotNull(mediaStatus.getMediaInfo()).getContentId();
MediaItem mediaItem = mediaItemsByContentId.get(currentContentId);
updateItemData(
currentItemId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,30 @@ public void getCastTimeline_itemsRemoved_correctMediaItemsInTimelineAndMapCleane
assertThat(castTimelineTracker.mediaItemsByContentId).hasSize(1);
}

@Test
public void getCastTimeline_mediaStatusIsNull_returnsEmptyTimeline() {
RemoteMediaClient mockRemoteMediaClient = mock(RemoteMediaClient.class);
MediaQueue mediaQueue = mock(MediaQueue.class);
when(mockRemoteMediaClient.getMediaQueue()).thenReturn(mediaQueue);
when(mediaQueue.getItemIds()).thenReturn(new int[0]);
when(mockRemoteMediaClient.getMediaStatus()).thenReturn(null);

assertThat(castTimelineTracker.getCastTimeline(mockRemoteMediaClient).isEmpty()).isTrue();
}

@Test
public void getCastTimeline_mediaInfoIsNull_returnsEmptyTimeline() {
RemoteMediaClient mockRemoteMediaClient = mock(RemoteMediaClient.class);
MediaQueue mediaQueue = mock(MediaQueue.class);
when(mockRemoteMediaClient.getMediaQueue()).thenReturn(mediaQueue);
when(mediaQueue.getItemIds()).thenReturn(new int[0]);
MediaStatus mediaStatus = mock(MediaStatus.class);
when(mockRemoteMediaClient.getMediaStatus()).thenReturn(mediaStatus);
when(mediaStatus.getMediaInfo()).thenReturn(null);

assertThat(castTimelineTracker.getCastTimeline(mockRemoteMediaClient).isEmpty()).isTrue();
}

private MediaItem createMediaItem(int uid) {
return new MediaItem.Builder()
.setUri("http://www.google.com/" + uid)
Expand Down

0 comments on commit 167f50a

Please sign in to comment.