Commit 223cc5f1 by olly Committed by Oliver Woodman

Cast extension: Remove unused parts of MediaItem

PiperOrigin-RevId: 259586520
parent 2c318d7b
...@@ -51,8 +51,6 @@ import java.util.Collections; ...@@ -51,8 +51,6 @@ import java.util.Collections;
public class MainActivity extends AppCompatActivity public class MainActivity extends AppCompatActivity
implements OnClickListener, PlayerManager.Listener { implements OnClickListener, PlayerManager.Listener {
private final MediaItem.Builder mediaItemBuilder;
private PlayerView localPlayerView; private PlayerView localPlayerView;
private PlayerControlView castControlView; private PlayerControlView castControlView;
private PlayerManager playerManager; private PlayerManager playerManager;
...@@ -60,10 +58,6 @@ public class MainActivity extends AppCompatActivity ...@@ -60,10 +58,6 @@ public class MainActivity extends AppCompatActivity
private MediaQueueListAdapter mediaQueueListAdapter; private MediaQueueListAdapter mediaQueueListAdapter;
private CastContext castContext; private CastContext castContext;
public MainActivity() {
mediaItemBuilder = new MediaItem.Builder();
}
// Activity lifecycle methods. // Activity lifecycle methods.
@Override @Override
...@@ -179,8 +173,8 @@ public class MainActivity extends AppCompatActivity ...@@ -179,8 +173,8 @@ public class MainActivity extends AppCompatActivity
sampleList.setOnItemClickListener( sampleList.setOnItemClickListener(
(parent, view, position, id) -> { (parent, view, position, id) -> {
DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position); DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position);
mediaItemBuilder MediaItem.Builder mediaItemBuilder =
.clear() new MediaItem.Builder()
.setMedia(sample.uri) .setMedia(sample.uri)
.setTitle(sample.name) .setTitle(sample.name)
.setMimeType(sample.mimeType); .setMimeType(sample.mimeType);
......
...@@ -17,8 +17,6 @@ package com.google.android.exoplayer2.ext.cast; ...@@ -17,8 +17,6 @@ package com.google.android.exoplayer2.ext.cast;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable; 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 com.google.android.exoplayer2.util.Util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
...@@ -26,8 +24,6 @@ import java.util.HashMap; ...@@ -26,8 +24,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; 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. */ /** Representation of an item that can be played by a media player. */
public final class MediaItem { public final class MediaItem {
...@@ -35,25 +31,16 @@ public final class MediaItem { ...@@ -35,25 +31,16 @@ public final class MediaItem {
/** A builder for {@link MediaItem} instances. */ /** A builder for {@link MediaItem} instances. */
public static final class Builder { public static final class Builder {
@Nullable private UUID uuid;
private String title; private String title;
private String description;
private MediaItem.UriBundle media; private MediaItem.UriBundle media;
@Nullable private Object attachment;
private List<MediaItem.DrmScheme> drmSchemes; private List<MediaItem.DrmScheme> drmSchemes;
private long startPositionUs;
private long endPositionUs;
private String mimeType; private String mimeType;
/** Creates an builder with default field values. */
public Builder() { public Builder() {
clearInternal(); title = "";
} media = UriBundle.EMPTY;
drmSchemes = Collections.emptyList();
/** See {@link MediaItem#uuid}. */ mimeType = "";
public Builder setUuid(UUID uuid) {
this.uuid = uuid;
return this;
} }
/** See {@link MediaItem#title}. */ /** See {@link MediaItem#title}. */
...@@ -62,12 +49,6 @@ public final class MediaItem { ...@@ -62,12 +49,6 @@ public final class MediaItem {
return this; 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)))}. */ /** Equivalent to {@link #setMedia(UriBundle) setMedia(new UriBundle(Uri.parse(uri)))}. */
public Builder setMedia(String uri) { public Builder setMedia(String uri) {
return setMedia(new UriBundle(Uri.parse(uri))); return setMedia(new UriBundle(Uri.parse(uri)));
...@@ -79,84 +60,26 @@ public final class MediaItem { ...@@ -79,84 +60,26 @@ public final class MediaItem {
return this; return this;
} }
/** See {@link MediaItem#attachment}. */
public Builder setAttachment(Object attachment) {
this.attachment = attachment;
return this;
}
/** See {@link MediaItem#drmSchemes}. */ /** See {@link MediaItem#drmSchemes}. */
public Builder setDrmSchemes(List<MediaItem.DrmScheme> drmSchemes) { public Builder setDrmSchemes(List<MediaItem.DrmScheme> drmSchemes) {
this.drmSchemes = Collections.unmodifiableList(new ArrayList<>(drmSchemes)); this.drmSchemes = Collections.unmodifiableList(new ArrayList<>(drmSchemes));
return this; 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}. */ /** See {@link MediaItem#mimeType}. */
public Builder setMimeType(String mimeType) { public Builder setMimeType(String mimeType) {
this.mimeType = mimeType; this.mimeType = mimeType;
return this; return this;
} }
/** /** Returns a new {@link MediaItem} instance with the current builder values. */
* 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)}.
*/
public MediaItem build() { public MediaItem build() {
UUID uuid = this.uuid;
this.uuid = null;
return new MediaItem( return new MediaItem(
uuid != null ? uuid : UUID.randomUUID(),
title, title,
description,
media, media,
attachment,
drmSchemes, drmSchemes,
startPositionUs,
endPositionUs,
mimeType); 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. */ /** Bundles a resource's URI with headers to attach to any request to that URI. */
...@@ -259,50 +182,21 @@ public final class MediaItem { ...@@ -259,50 +182,21 @@ 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. */ /** The title of the item. The default value is an empty string. */
public final String title; 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}. * A {@link UriBundle} to fetch the media content. The default value is {@link UriBundle#EMPTY}.
*/ */
public final UriBundle media; 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 * Immutable list of {@link DrmScheme} instances sorted in decreasing order of preference. The
* default value is an empty list. * default value is an empty list.
*/ */
public final List<DrmScheme> drmSchemes; public final List<DrmScheme> 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. * The mime type of this media item. The default value is an empty string.
* *
* <p>The usage of this mime type is optional and player implementation specific. * <p>The usage of this mime type is optional and player implementation specific.
...@@ -320,49 +214,29 @@ public final class MediaItem { ...@@ -320,49 +214,29 @@ public final class MediaItem {
return false; return false;
} }
MediaItem mediaItem = (MediaItem) other; MediaItem mediaItem = (MediaItem) other;
return startPositionUs == mediaItem.startPositionUs return title.equals(mediaItem.title)
&& endPositionUs == mediaItem.endPositionUs
&& uuid.equals(mediaItem.uuid)
&& title.equals(mediaItem.title)
&& description.equals(mediaItem.description)
&& media.equals(mediaItem.media) && media.equals(mediaItem.media)
&& Util.areEqual(attachment, mediaItem.attachment)
&& drmSchemes.equals(mediaItem.drmSchemes) && drmSchemes.equals(mediaItem.drmSchemes)
&& mimeType.equals(mediaItem.mimeType); && mimeType.equals(mediaItem.mimeType);
} }
@Override @Override
public int hashCode() { public int hashCode() {
int result = uuid.hashCode(); int result = title.hashCode();
result = 31 * result + title.hashCode();
result = 31 * result + description.hashCode();
result = 31 * result + media.hashCode(); result = 31 * result + media.hashCode();
result = 31 * result + (attachment != null ? attachment.hashCode() : 0);
result = 31 * result + drmSchemes.hashCode(); result = 31 * result + drmSchemes.hashCode();
result = 31 * result + (int) (startPositionUs ^ (startPositionUs >>> 32));
result = 31 * result + (int) (endPositionUs ^ (endPositionUs >>> 32));
result = 31 * result + mimeType.hashCode(); result = 31 * result + mimeType.hashCode();
return result; return result;
} }
private MediaItem( private MediaItem(
UUID uuid,
String title, String title,
String description,
UriBundle media, UriBundle media,
@Nullable Object attachment,
List<DrmScheme> drmSchemes, List<DrmScheme> drmSchemes,
long startPositionUs,
long endPositionUs,
String mimeType) { String mimeType) {
this.uuid = uuid;
this.title = title; this.title = title;
this.description = description;
this.media = media; this.media = media;
this.attachment = attachment;
this.drmSchemes = drmSchemes; this.drmSchemes = drmSchemes;
this.startPositionUs = startPositionUs;
this.endPositionUs = endPositionUs;
this.mimeType = mimeType; this.mimeType = mimeType;
} }
} }
...@@ -24,7 +24,6 @@ import com.google.android.exoplayer2.util.MimeTypes; ...@@ -24,7 +24,6 @@ import com.google.android.exoplayer2.util.MimeTypes;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -33,31 +32,15 @@ import org.junit.runner.RunWith; ...@@ -33,31 +32,15 @@ import org.junit.runner.RunWith;
public class MediaItemTest { public class MediaItemTest {
@Test @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() { public void buildMediaItem_doesNotChangeState() {
MediaItem.Builder builder = new MediaItem.Builder(); MediaItem.Builder builder = new MediaItem.Builder();
MediaItem item1 = MediaItem item1 =
builder builder
.setUuid(new UUID(0, 1))
.setMedia("http://example.com") .setMedia("http://example.com")
.setTitle("title") .setTitle("title")
.setMimeType(MimeTypes.AUDIO_MP4) .setMimeType(MimeTypes.AUDIO_MP4)
.setStartPositionUs(3)
.setEndPositionUs(4)
.build(); .build();
MediaItem item2 = builder.setUuid(new UUID(0, 1)).build(); MediaItem item2 = builder.build();
assertThat(item1).isEqualTo(item2); assertThat(item1).isEqualTo(item2);
} }
...@@ -67,62 +50,31 @@ public class MediaItemTest { ...@@ -67,62 +50,31 @@ public class MediaItemTest {
} }
@Test @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() { public void equals_withEqualDrmSchemes_returnsTrue() {
MediaItem.Builder builder = new MediaItem.Builder(); MediaItem.Builder builder1 = new MediaItem.Builder();
MediaItem mediaItem1 = MediaItem mediaItem1 =
builder builder1.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build();
.setUuid(new UUID(0, 1)) MediaItem.Builder builder2 = new MediaItem.Builder();
.setMedia("www.google.com")
.setDrmSchemes(createDummyDrmSchemes(1))
.buildAndClear();
MediaItem mediaItem2 = MediaItem mediaItem2 =
builder builder2.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build();
.setUuid(new UUID(0, 1))
.setMedia("www.google.com")
.setDrmSchemes(createDummyDrmSchemes(1))
.buildAndClear();
assertThat(mediaItem1).isEqualTo(mediaItem2); assertThat(mediaItem1).isEqualTo(mediaItem2);
} }
@Test @Test
public void equals_withDifferentDrmRequestHeaders_returnsFalse() { public void equals_withDifferentDrmRequestHeaders_returnsFalse() {
MediaItem.Builder builder = new MediaItem.Builder(); MediaItem.Builder builder1 = new MediaItem.Builder();
MediaItem mediaItem1 = MediaItem mediaItem1 =
builder builder1.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(1)).build();
.setUuid(new UUID(0, 1)) MediaItem.Builder builder2 = new MediaItem.Builder();
.setMedia("www.google.com")
.setDrmSchemes(createDummyDrmSchemes(1))
.buildAndClear();
MediaItem mediaItem2 = MediaItem mediaItem2 =
builder builder2.setMedia("www.google.com").setDrmSchemes(createDummyDrmSchemes(2)).build();
.setUuid(new UUID(0, 1))
.setMedia("www.google.com")
.setDrmSchemes(createDummyDrmSchemes(2))
.buildAndClear();
assertThat(mediaItem1).isNotEqualTo(mediaItem2); assertThat(mediaItem1).isNotEqualTo(mediaItem2);
} }
private static void assertDefaultValues(MediaItem item) { private static void assertDefaultValues(MediaItem item) {
assertThat(item.title).isEmpty(); assertThat(item.title).isEmpty();
assertThat(item.description).isEmpty();
assertThat(item.media.uri).isEqualTo(Uri.EMPTY); assertThat(item.media.uri).isEqualTo(Uri.EMPTY);
assertThat(item.attachment).isNull();
assertThat(item.drmSchemes).isEmpty(); assertThat(item.drmSchemes).isEmpty();
assertThat(item.startPositionUs).isEqualTo(C.TIME_UNSET);
assertThat(item.endPositionUs).isEqualTo(C.TIME_UNSET);
assertThat(item.mimeType).isEmpty(); assertThat(item.mimeType).isEmpty();
} }
......
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