Commit 99d805f6 by bachinger Committed by Ian Baker

Make media item of SinglePeriodTimeline non-null

This change makes the media item argument in any constructors of the SinglePeriodTimeline non-null. Further a dummy media item is created for deprecated constructors using a tag only.

PiperOrigin-RevId: 315283842
parent c37af0b5
......@@ -15,6 +15,9 @@
*/
package com.google.android.exoplayer2.source;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import android.net.Uri;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
......@@ -27,6 +30,11 @@ import com.google.android.exoplayer2.util.Assertions;
public final class SinglePeriodTimeline extends Timeline {
private static final Object UID = new Object();
private static final MediaItem MEDIA_ITEM =
new MediaItem.Builder()
.setMediaId("com.google.android.exoplayer2.source.SinglePeriodTimeline")
.setUri(Uri.EMPTY)
.build();
private final long presentationStartTimeMs;
private final long windowStartTimeMs;
......@@ -84,7 +92,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic,
boolean isLive,
@Nullable Object manifest,
@Nullable MediaItem mediaItem) {
MediaItem mediaItem) {
this(
durationUs,
durationUs,
......@@ -154,7 +162,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic,
boolean isLive,
@Nullable Object manifest,
@Nullable MediaItem mediaItem) {
MediaItem mediaItem) {
this(
/* presentationStartTimeMs= */ C.TIME_UNSET,
/* windowStartTimeMs= */ C.TIME_UNSET,
......@@ -200,7 +208,7 @@ public final class SinglePeriodTimeline extends Timeline {
isDynamic,
isLive,
manifest,
/* mediaItem= */ null,
MEDIA_ITEM.buildUpon().setTag(tag).build(),
tag);
}
......@@ -239,7 +247,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic,
boolean isLive,
@Nullable Object manifest,
@Nullable MediaItem mediaItem) {
MediaItem mediaItem) {
this(
presentationStartTimeMs,
windowStartTimeMs,
......@@ -268,7 +276,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic,
boolean isLive,
@Nullable Object manifest,
@Nullable MediaItem mediaItem,
MediaItem mediaItem,
@Nullable Object tag) {
this.presentationStartTimeMs = presentationStartTimeMs;
this.windowStartTimeMs = windowStartTimeMs;
......@@ -281,7 +289,7 @@ public final class SinglePeriodTimeline extends Timeline {
this.isDynamic = isDynamic;
this.isLive = isLive;
this.manifest = manifest;
this.mediaItem = mediaItem;
this.mediaItem = checkNotNull(mediaItem);
this.tag = tag;
}
......@@ -351,7 +359,7 @@ public final class SinglePeriodTimeline extends Timeline {
@Override
public Period getPeriod(int periodIndex, Period period, boolean setIds) {
Assertions.checkIndex(periodIndex, 0, 1);
Object uid = setIds ? UID : null;
@Nullable Object uid = setIds ? UID : null;
return period.set(/* id= */ null, uid, 0, periodDurationUs, -windowPositionInPeriodUs);
}
......
......@@ -57,7 +57,7 @@ public final class MediaPeriodQueueTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
private static final Uri AD_URI = Uri.EMPTY;
private MediaPeriodQueue mediaPeriodQueue;
......
......@@ -74,7 +74,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US);
......@@ -95,7 +95,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// If the unseekable window isn't clipped, clipping succeeds.
getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US);
......@@ -117,7 +117,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// If the unseekable window isn't clipped, clipping succeeds.
getClippedTimeline(timeline, /* startUs= */ 0, TEST_PERIOD_DURATION_US);
......@@ -139,7 +139,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline =
getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US);
......@@ -158,7 +158,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline =
getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US);
......@@ -194,7 +194,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// When clipping to the end, the clipped timeline should also have a duration.
Timeline clippedTimeline =
......@@ -213,7 +213,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// When clipping to the end, the clipped timeline should also have an unset duration.
Timeline clippedTimeline =
......@@ -231,7 +231,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline =
getClippedTimeline(
......@@ -254,7 +254,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = getClippedTimeline(timeline, /* durationUs= */ TEST_CLIP_AMOUNT_US);
assertThat(clippedTimeline.getWindow(0, window).getDurationUs()).isEqualTo(TEST_CLIP_AMOUNT_US);
......@@ -277,7 +277,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 =
new SinglePeriodTimeline(
/* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US,
......@@ -288,7 +288,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines =
getClippedTimelines(
......@@ -328,7 +328,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 =
new SinglePeriodTimeline(
/* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US,
......@@ -339,7 +339,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines =
getClippedTimelines(
......@@ -379,7 +379,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 =
new SinglePeriodTimeline(
/* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US,
......@@ -390,7 +390,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines =
getClippedTimelines(
......@@ -431,7 +431,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 =
new SinglePeriodTimeline(
/* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US,
......@@ -442,7 +442,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines =
getClippedTimelines(
......@@ -561,7 +561,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
FakeMediaSource fakeMediaSource =
new FakeMediaSource(timeline) {
@Override
......
......@@ -50,7 +50,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// Should return null with any positive position projection.
Pair<Object, Long> position = timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, 1);
assertThat(position).isNull();
......@@ -73,7 +73,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ true,
/* isLive= */ true,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
// Should return null with a positive position projection beyond window duration.
Pair<Object, Long> position =
timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, windowDurationUs + 1);
......@@ -108,26 +108,6 @@ public final class SinglePeriodTimelineTest {
}
@Test
public void setNullMediaItem_returnsFallbackMediaItem_butUsesDefaultUid() {
SinglePeriodTimeline timeline =
new SinglePeriodTimeline(
/* durationUs= */ C.TIME_UNSET,
/* isSeekable= */ false,
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).mediaItem.mediaId)
.isEqualTo("com.google.android.exoplayer2.Timeline");
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).id).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).id).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).uid).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).uid)
.isNotNull();
}
@Test
public void getWindow_setsTag() {
Object tag = new Object();
SinglePeriodTimeline timeline =
......@@ -171,7 +151,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
Object uid = timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).uid;
assertThat(timeline.getIndexOfPeriod(uid)).isEqualTo(0);
......
......@@ -28,6 +28,7 @@ import android.net.Uri;
import android.os.Looper;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
......@@ -61,7 +62,7 @@ public final class AdsMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
private static final Object PREROLL_AD_PERIOD_UID =
PREROLL_AD_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0);
......@@ -73,7 +74,7 @@ public final class AdsMediaSourceTest {
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
MediaItem.fromUri(Uri.EMPTY));
private static final Object CONTENT_PERIOD_UID =
CONTENT_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment