diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java index c17c0a62ab..2adfb28632 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java @@ -51,8 +51,6 @@ import java.util.Collections; public class MainActivity extends AppCompatActivity implements OnClickListener, PlayerManager.Listener { - private final MediaItem.Builder mediaItemBuilder; - private PlayerView localPlayerView; private PlayerControlView castControlView; private PlayerManager playerManager; @@ -60,10 +58,6 @@ public class MainActivity extends AppCompatActivity private MediaQueueListAdapter mediaQueueListAdapter; private CastContext castContext; - public MainActivity() { - mediaItemBuilder = new MediaItem.Builder(); - } - // Activity lifecycle methods. @Override @@ -179,11 +173,11 @@ public class MainActivity extends AppCompatActivity sampleList.setOnItemClickListener( (parent, view, position, id) -> { DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position); - mediaItemBuilder - .clear() - .setMedia(sample.uri) - .setTitle(sample.name) - .setMimeType(sample.mimeType); + MediaItem.Builder mediaItemBuilder = + new MediaItem.Builder() + .setMedia(sample.uri) + .setTitle(sample.name) + .setMimeType(sample.mimeType); DemoUtil.DrmConfiguration drmConfiguration = sample.drmConfiguration; if (drmConfiguration != null) { mediaItemBuilder.setDrmSchemes( diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/MediaItem.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/MediaItem.java index adb8e59070..79f36f46d7 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/MediaItem.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/MediaItem.java @@ -17,8 +17,6 @@ package com.google.android.exoplayer2.ext.cast; import android.net.Uri; import androidx.annotation.Nullable; -import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Util; import java.util.ArrayList; import java.util.Collections; @@ -26,8 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import org.checkerframework.checker.initialization.qual.UnknownInitialization; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; /** Representation of an item that can be played by a media player. */ public final class MediaItem { @@ -35,25 +31,16 @@ public final class MediaItem { /** A builder for {@link MediaItem} instances. */ public static final class Builder { - @Nullable private UUID uuid; private String title; - private String description; private MediaItem.UriBundle media; - @Nullable private Object attachment; private List drmSchemes; - private long startPositionUs; - private long endPositionUs; private String mimeType; - /** Creates an builder with default field values. */ public Builder() { - clearInternal(); - } - - /** See {@link MediaItem#uuid}. */ - public Builder setUuid(UUID uuid) { - this.uuid = uuid; - return this; + title = ""; + media = UriBundle.EMPTY; + drmSchemes = Collections.emptyList(); + mimeType = ""; } /** See {@link MediaItem#title}. */ @@ -62,12 +49,6 @@ public final class MediaItem { return this; } - /** See {@link MediaItem#description}. */ - public Builder setDescription(String description) { - this.description = description; - return this; - } - /** Equivalent to {@link #setMedia(UriBundle) setMedia(new UriBundle(Uri.parse(uri)))}. */ public Builder setMedia(String uri) { return setMedia(new UriBundle(Uri.parse(uri))); @@ -79,84 +60,26 @@ public final class MediaItem { return this; } - /** See {@link MediaItem#attachment}. */ - public Builder setAttachment(Object attachment) { - this.attachment = attachment; - return this; - } - /** See {@link MediaItem#drmSchemes}. */ public Builder setDrmSchemes(List drmSchemes) { this.drmSchemes = Collections.unmodifiableList(new ArrayList<>(drmSchemes)); return this; } - /** See {@link MediaItem#startPositionUs}. */ - public Builder setStartPositionUs(long startPositionUs) { - this.startPositionUs = startPositionUs; - return this; - } - - /** See {@link MediaItem#endPositionUs}. */ - public Builder setEndPositionUs(long endPositionUs) { - Assertions.checkArgument(endPositionUs != C.TIME_END_OF_SOURCE); - this.endPositionUs = endPositionUs; - return this; - } - /** See {@link MediaItem#mimeType}. */ public Builder setMimeType(String mimeType) { this.mimeType = mimeType; return this; } - /** - * Equivalent to {@link #build()}, except it also calls {@link #clear()} after creating the - * {@link MediaItem}. - */ - public MediaItem buildAndClear() { - MediaItem item = build(); - clearInternal(); - return item; - } - - /** Returns the builder to default values. */ - public Builder clear() { - clearInternal(); - return this; - } - - /** - * Returns a new {@link MediaItem} instance with the current builder values. This method also - * clears any values passed to {@link #setUuid(UUID)}. - */ + /** Returns a new {@link MediaItem} instance with the current builder values. */ public MediaItem build() { - UUID uuid = this.uuid; - this.uuid = null; return new MediaItem( - uuid != null ? uuid : UUID.randomUUID(), title, - description, media, - attachment, drmSchemes, - startPositionUs, - endPositionUs, mimeType); } - - @EnsuresNonNull({"title", "description", "media", "drmSchemes", "mimeType"}) - private void clearInternal(@UnknownInitialization Builder this) { - uuid = null; - title = ""; - description = ""; - media = UriBundle.EMPTY; - attachment = null; - drmSchemes = Collections.emptyList(); - startPositionUs = C.TIME_UNSET; - endPositionUs = C.TIME_UNSET; - mimeType = ""; - } } /** Bundles a resource's URI with headers to attach to any request to that URI. */ @@ -259,49 +182,20 @@ public final class MediaItem { } } - /** - * A UUID that identifies this item, potentially across different devices. The default value is - * obtained by calling {@link UUID#randomUUID()}. - */ - public final UUID uuid; - /** The title of the item. The default value is an empty string. */ public final String title; - /** A description for the item. The default value is an empty string. */ - public final String description; - /** * A {@link UriBundle} to fetch the media content. The default value is {@link UriBundle#EMPTY}. */ public final UriBundle media; - /** - * An optional opaque object to attach to the media item. Handling of this attachment is - * implementation specific. The default value is null. - */ - @Nullable public final Object attachment; - /** * Immutable list of {@link DrmScheme} instances sorted in decreasing order of preference. The * default value is an empty list. */ public final List drmSchemes; - /** - * The position in microseconds at which playback of this media item should start. {@link - * C#TIME_UNSET} if playback should start at the default position. The default value is {@link - * C#TIME_UNSET}. - */ - public final long startPositionUs; - - /** - * The position in microseconds at which playback of this media item should end. {@link - * C#TIME_UNSET} if playback should end at the end of the media. The default value is {@link - * C#TIME_UNSET}. - */ - public final long endPositionUs; - /** * The mime type of this media item. The default value is an empty string. * @@ -320,49 +214,29 @@ public final class MediaItem { return false; } MediaItem mediaItem = (MediaItem) other; - return startPositionUs == mediaItem.startPositionUs - && endPositionUs == mediaItem.endPositionUs - && uuid.equals(mediaItem.uuid) - && title.equals(mediaItem.title) - && description.equals(mediaItem.description) + return title.equals(mediaItem.title) && media.equals(mediaItem.media) - && Util.areEqual(attachment, mediaItem.attachment) && drmSchemes.equals(mediaItem.drmSchemes) && mimeType.equals(mediaItem.mimeType); } @Override public int hashCode() { - int result = uuid.hashCode(); - result = 31 * result + title.hashCode(); - result = 31 * result + description.hashCode(); + int result = title.hashCode(); result = 31 * result + media.hashCode(); - result = 31 * result + (attachment != null ? attachment.hashCode() : 0); result = 31 * result + drmSchemes.hashCode(); - result = 31 * result + (int) (startPositionUs ^ (startPositionUs >>> 32)); - result = 31 * result + (int) (endPositionUs ^ (endPositionUs >>> 32)); result = 31 * result + mimeType.hashCode(); return result; } private MediaItem( - UUID uuid, String title, - String description, UriBundle media, - @Nullable Object attachment, List drmSchemes, - long startPositionUs, - long endPositionUs, String mimeType) { - this.uuid = uuid; this.title = title; - this.description = description; this.media = media; - this.attachment = attachment; this.drmSchemes = drmSchemes; - this.startPositionUs = startPositionUs; - this.endPositionUs = endPositionUs; this.mimeType = mimeType; } } diff --git a/extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/MediaItemTest.java b/extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/MediaItemTest.java index 9cdc073b06..d21e57efd1 100644 --- a/extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/MediaItemTest.java +++ b/extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/MediaItemTest.java @@ -24,7 +24,6 @@ import com.google.android.exoplayer2.util.MimeTypes; import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,32 +31,16 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class MediaItemTest { - @Test - public void buildMediaItem_resetsUuid() { - MediaItem.Builder builder = new MediaItem.Builder(); - UUID uuid = new UUID(1, 1); - MediaItem item1 = builder.setUuid(uuid).build(); - MediaItem item2 = builder.build(); - MediaItem item3 = builder.build(); - assertThat(item1.uuid).isEqualTo(uuid); - assertThat(item2.uuid).isNotEqualTo(uuid); - assertThat(item3.uuid).isNotEqualTo(item2.uuid); - assertThat(item3.uuid).isNotEqualTo(uuid); - } - @Test public void buildMediaItem_doesNotChangeState() { MediaItem.Builder builder = new MediaItem.Builder(); MediaItem item1 = builder - .setUuid(new UUID(0, 1)) .setMedia("http://example.com") .setTitle("title") .setMimeType(MimeTypes.AUDIO_MP4) - .setStartPositionUs(3) - .setEndPositionUs(4) .build(); - MediaItem item2 = builder.setUuid(new UUID(0, 1)).build(); + MediaItem item2 = builder.build(); assertThat(item1).isEqualTo(item2); } @@ -66,63 +49,32 @@ public class MediaItemTest { assertDefaultValues(new MediaItem.Builder().build()); } - @Test - public void buildAndClear_assertDefaultValues() { - MediaItem.Builder builder = new MediaItem.Builder(); - builder - .setMedia("http://example.com") - .setTitle("title") - .setMimeType(MimeTypes.AUDIO_MP4) - .setStartPositionUs(3) - .setEndPositionUs(4) - .buildAndClear(); - assertDefaultValues(builder.build()); - } - @Test public void equals_withEqualDrmSchemes_returnsTrue() { - MediaItem.Builder builder = new MediaItem.Builder(); + MediaItem.Builder builder1 = new MediaItem.Builder(); MediaItem mediaItem1 = - builder - .setUuid(new UUID(0, 1)) - .setMedia("www.google.com") - .setDrmSchemes(createDummyDrmSchemes(1)) - .buildAndClear(); + builder1.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build(); + MediaItem.Builder builder2 = new MediaItem.Builder(); MediaItem mediaItem2 = - builder - .setUuid(new UUID(0, 1)) - .setMedia("www.google.com") - .setDrmSchemes(createDummyDrmSchemes(1)) - .buildAndClear(); + builder2.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build(); assertThat(mediaItem1).isEqualTo(mediaItem2); } @Test public void equals_withDifferentDrmRequestHeaders_returnsFalse() { - MediaItem.Builder builder = new MediaItem.Builder(); + MediaItem.Builder builder1 = new MediaItem.Builder(); MediaItem mediaItem1 = - builder - .setUuid(new UUID(0, 1)) - .setMedia("www.google.com") - .setDrmSchemes(createDummyDrmSchemes(1)) - .buildAndClear(); + builder1.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build(); + MediaItem.Builder builder2 = new MediaItem.Builder(); MediaItem mediaItem2 = - builder - .setUuid(new UUID(0, 1)) - .setMedia("www.google.com") - .setDrmSchemes(createDummyDrmSchemes(2)) - .buildAndClear(); + builder2.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(2)).build(); assertThat(mediaItem1).isNotEqualTo(mediaItem2); } private static void assertDefaultValues(MediaItem item) { assertThat(item.title).isEmpty(); - assertThat(item.description).isEmpty(); assertThat(item.media.uri).isEqualTo(Uri.EMPTY); - assertThat(item.attachment).isNull(); assertThat(item.drmSchemes).isEmpty(); - assertThat(item.startPositionUs).isEqualTo(C.TIME_UNSET); - assertThat(item.endPositionUs).isEqualTo(C.TIME_UNSET); assertThat(item.mimeType).isEmpty(); }