Return empty timeline when media info is null
Issue: androidx/media#708 PiperOrigin-RevId: 584054624
This commit is contained in:
parent
4bcb60d31d
commit
167f50a9ca
@ -90,6 +90,9 @@
|
|||||||
([#710](https://github.com/androidx/media/pull/710)).
|
([#710](https://github.com/androidx/media/pull/710)).
|
||||||
* Leanback extension:
|
* Leanback extension:
|
||||||
* Cast 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:
|
* Test Utilities:
|
||||||
* Remove deprecated symbols:
|
* Remove deprecated symbols:
|
||||||
* Demo app:
|
* Demo app:
|
||||||
|
@ -17,7 +17,6 @@ package androidx.media3.cast;
|
|||||||
|
|
||||||
import static androidx.media3.cast.CastTimeline.ItemData.UNKNOWN_CONTENT_ID;
|
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.checkNotNull;
|
||||||
import static androidx.media3.common.util.Assertions.checkStateNotNull;
|
|
||||||
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -105,12 +104,12 @@ import java.util.List;
|
|||||||
|
|
||||||
// TODO: Reset state when the app instance changes [Internal ref: b/129672468].
|
// TODO: Reset state when the app instance changes [Internal ref: b/129672468].
|
||||||
MediaStatus mediaStatus = remoteMediaClient.getMediaStatus();
|
MediaStatus mediaStatus = remoteMediaClient.getMediaStatus();
|
||||||
if (mediaStatus == null) {
|
if (mediaStatus == null || mediaStatus.getMediaInfo() == null) {
|
||||||
return CastTimeline.EMPTY_CAST_TIMELINE;
|
return CastTimeline.EMPTY_CAST_TIMELINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentItemId = mediaStatus.getCurrentItemId();
|
int currentItemId = mediaStatus.getCurrentItemId();
|
||||||
String currentContentId = checkStateNotNull(mediaStatus.getMediaInfo()).getContentId();
|
String currentContentId = checkNotNull(mediaStatus.getMediaInfo()).getContentId();
|
||||||
MediaItem mediaItem = mediaItemsByContentId.get(currentContentId);
|
MediaItem mediaItem = mediaItemsByContentId.get(currentContentId);
|
||||||
updateItemData(
|
updateItemData(
|
||||||
currentItemId,
|
currentItemId,
|
||||||
|
@ -277,6 +277,30 @@ public class CastTimelineTrackerTest {
|
|||||||
assertThat(castTimelineTracker.mediaItemsByContentId).hasSize(1);
|
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) {
|
private MediaItem createMediaItem(int uid) {
|
||||||
return new MediaItem.Builder()
|
return new MediaItem.Builder()
|
||||||
.setUri("http://www.google.com/" + uid)
|
.setUri("http://www.google.com/" + uid)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user