diff --git a/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java b/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java index 3621404e4c..98059d98db 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java @@ -99,19 +99,19 @@ public final class MediaItem implements Bundleable { mediaId = mediaItem.mediaId; mediaMetadata = mediaItem.mediaMetadata; liveConfiguration = mediaItem.liveConfiguration.buildUpon(); - @Nullable PlaybackProperties playbackProperties = mediaItem.playbackProperties; - if (playbackProperties != null) { - customCacheKey = playbackProperties.customCacheKey; - mimeType = playbackProperties.mimeType; - uri = playbackProperties.uri; - streamKeys = playbackProperties.streamKeys; - subtitles = playbackProperties.subtitles; - tag = playbackProperties.tag; + @Nullable LocalConfiguration localConfiguration = mediaItem.localConfiguration; + if (localConfiguration != null) { + customCacheKey = localConfiguration.customCacheKey; + mimeType = localConfiguration.mimeType; + uri = localConfiguration.uri; + streamKeys = localConfiguration.streamKeys; + subtitles = localConfiguration.subtitles; + tag = localConfiguration.tag; drmConfiguration = - playbackProperties.drmConfiguration != null - ? playbackProperties.drmConfiguration.buildUpon() + localConfiguration.drmConfiguration != null + ? localConfiguration.drmConfiguration.buildUpon() : new DrmConfiguration.Builder(); - adsConfiguration = playbackProperties.adsConfiguration; + adsConfiguration = localConfiguration.adsConfiguration; } } @@ -128,9 +128,9 @@ public final class MediaItem implements Bundleable { /** * Sets the optional URI. * - *

If {@code uri} is null or unset then no {@link PlaybackProperties} object is created + *

If {@code uri} is null or unset then no {@link LocalConfiguration} object is created * during {@link #build()} and no other {@code Builder} methods that would populate {@link - * MediaItem#playbackProperties} should be called. + * MediaItem#localConfiguration} should be called. */ public Builder setUri(@Nullable String uri) { return setUri(uri == null ? null : Uri.parse(uri)); @@ -139,9 +139,9 @@ public final class MediaItem implements Bundleable { /** * Sets the optional URI. * - *

If {@code uri} is null or unset then no {@link PlaybackProperties} object is created + *

If {@code uri} is null or unset then no {@link LocalConfiguration} object is created * during {@link #build()} and no other {@code Builder} methods that would populate {@link - * MediaItem#playbackProperties} should be called. + * MediaItem#localConfiguration} should be called. */ public Builder setUri(@Nullable Uri uri) { this.uri = uri; @@ -334,7 +334,7 @@ public final class MediaItem implements Bundleable { *

{@code null} or an empty {@link List} can be used for a reset. * *

If {@link #setUri} is passed a non-null {@code uri}, the stream keys are used to create a - * {@link PlaybackProperties} object. Otherwise they will be ignored. + * {@link LocalConfiguration} object. Otherwise they will be ignored. */ public Builder setStreamKeys(@Nullable List streamKeys) { this.streamKeys = @@ -485,13 +485,14 @@ public final class MediaItem implements Bundleable { } /** Returns a new {@link MediaItem} instance with the current builder values. */ + @SuppressWarnings("deprecation") // Using PlaybackProperties while it exists. public MediaItem build() { // TODO: remove this check once all the deprecated individual DRM setters are removed. checkState(drmConfiguration.licenseUri == null || drmConfiguration.scheme != null); - @Nullable PlaybackProperties playbackProperties = null; + @Nullable PlaybackProperties localConfiguration = null; @Nullable Uri uri = this.uri; if (uri != null) { - playbackProperties = + localConfiguration = new PlaybackProperties( uri, mimeType, @@ -505,7 +506,7 @@ public final class MediaItem implements Bundleable { return new MediaItem( mediaId != null ? mediaId : DEFAULT_MEDIA_ID, clippingProperties.build(), - playbackProperties, + localConfiguration, liveConfiguration.build(), mediaMetadata != null ? mediaMetadata : MediaMetadata.EMPTY); } @@ -861,7 +862,8 @@ public final class MediaItem implements Bundleable { } /** Properties for local playback. */ - public static final class PlaybackProperties { + // TODO: Mark this final when PlaybackProperties is deleted. + public static class LocalConfiguration { /** The {@link Uri}. */ public final Uri uri; @@ -896,7 +898,7 @@ public final class MediaItem implements Bundleable { */ @Nullable public final Object tag; - private PlaybackProperties( + private LocalConfiguration( Uri uri, @Nullable String mimeType, @Nullable DrmConfiguration drmConfiguration, @@ -920,10 +922,10 @@ public final class MediaItem implements Bundleable { if (this == obj) { return true; } - if (!(obj instanceof PlaybackProperties)) { + if (!(obj instanceof LocalConfiguration)) { return false; } - PlaybackProperties other = (PlaybackProperties) obj; + LocalConfiguration other = (LocalConfiguration) obj; return uri.equals(other.uri) && Util.areEqual(mimeType, other.mimeType) @@ -949,6 +951,31 @@ public final class MediaItem implements Bundleable { } } + /** @deprecated Use {@link LocalConfiguration}. */ + @Deprecated + public static final class PlaybackProperties extends LocalConfiguration { + + private PlaybackProperties( + Uri uri, + @Nullable String mimeType, + @Nullable DrmConfiguration drmConfiguration, + @Nullable AdsConfiguration adsConfiguration, + List streamKeys, + @Nullable String customCacheKey, + List subtitles, + @Nullable Object tag) { + super( + uri, + mimeType, + drmConfiguration, + adsConfiguration, + streamKeys, + customCacheKey, + subtitles, + tag); + } + } + /** Live playback configuration. */ public static final class LiveConfiguration implements Bundleable { @@ -1555,8 +1582,13 @@ public final class MediaItem implements Bundleable { /** Identifies the media item. */ public final String mediaId; - /** Optional playback properties. May be {@code null} if shared over process boundaries. */ - @Nullable public final PlaybackProperties playbackProperties; + /** + * Optional configuration for local playback. May be {@code null} if shared over process + * boundaries. + */ + @Nullable public final LocalConfiguration localConfiguration; + /** @deprecated Use {@link #localConfiguration} instead. */ + @Deprecated @Nullable public final PlaybackProperties playbackProperties; /** The live playback configuration. */ public final LiveConfiguration liveConfiguration; @@ -1567,14 +1599,16 @@ public final class MediaItem implements Bundleable { /** The clipping properties. */ public final ClippingProperties clippingProperties; + @SuppressWarnings("deprecation") // Using PlaybackProperties until it's deleted. private MediaItem( String mediaId, ClippingProperties clippingProperties, - @Nullable PlaybackProperties playbackProperties, + @Nullable PlaybackProperties localConfiguration, LiveConfiguration liveConfiguration, MediaMetadata mediaMetadata) { this.mediaId = mediaId; - this.playbackProperties = playbackProperties; + this.localConfiguration = localConfiguration; + this.playbackProperties = localConfiguration; this.liveConfiguration = liveConfiguration; this.mediaMetadata = mediaMetadata; this.clippingProperties = clippingProperties; @@ -1598,7 +1632,7 @@ public final class MediaItem implements Bundleable { return Util.areEqual(mediaId, other.mediaId) && clippingProperties.equals(other.clippingProperties) - && Util.areEqual(playbackProperties, other.playbackProperties) + && Util.areEqual(localConfiguration, other.localConfiguration) && Util.areEqual(liveConfiguration, other.liveConfiguration) && Util.areEqual(mediaMetadata, other.mediaMetadata); } @@ -1606,7 +1640,7 @@ public final class MediaItem implements Bundleable { @Override public int hashCode() { int result = mediaId.hashCode(); - result = 31 * result + (playbackProperties != null ? playbackProperties.hashCode() : 0); + result = 31 * result + (localConfiguration != null ? localConfiguration.hashCode() : 0); result = 31 * result + liveConfiguration.hashCode(); result = 31 * result + clippingProperties.hashCode(); result = 31 * result + mediaMetadata.hashCode(); @@ -1633,7 +1667,7 @@ public final class MediaItem implements Bundleable { /** * {@inheritDoc} * - *

It omits the {@link #playbackProperties} field. The {@link #playbackProperties} of an + *

It omits the {@link #localConfiguration} field. The {@link #localConfiguration} of an * instance restored by {@link #CREATOR} will always be {@code null}. */ @Override @@ -1649,7 +1683,7 @@ public final class MediaItem implements Bundleable { /** * Object that can restore {@link MediaItem} from a {@link Bundle}. * - *

The {@link #playbackProperties} of a restored instance will always be {@code null}. + *

The {@link #localConfiguration} of a restored instance will always be {@code null}. */ public static final Creator CREATOR = MediaItem::fromBundle; diff --git a/library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java b/library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java index b7760bf56a..45b54f3047 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java @@ -45,7 +45,7 @@ public class MediaItemTest { MediaItem mediaItem = MediaItem.fromUri(uri); - assertThat(mediaItem.playbackProperties.uri).isEqualTo(uri); + assertThat(mediaItem.localConfiguration.uri).isEqualTo(uri); assertThat(mediaItem.mediaMetadata).isNotNull(); } @@ -53,7 +53,7 @@ public class MediaItemTest { public void builderWithUriAsString_setsUri() { MediaItem mediaItem = MediaItem.fromUri(URI_STRING); - assertThat(mediaItem.playbackProperties.uri.toString()).isEqualTo(URI_STRING); + assertThat(mediaItem.localConfiguration.uri.toString()).isEqualTo(URI_STRING); } @Test @@ -67,7 +67,7 @@ public class MediaItemTest { public void builderSetMimeType_isNullByDefault() { MediaItem mediaItem = MediaItem.fromUri(URI_STRING); - assertThat(mediaItem.playbackProperties.mimeType).isNull(); + assertThat(mediaItem.localConfiguration.mimeType).isNull(); } @Test @@ -75,14 +75,14 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setMimeType(MimeTypes.APPLICATION_MPD).build(); - assertThat(mediaItem.playbackProperties.mimeType).isEqualTo(MimeTypes.APPLICATION_MPD); + assertThat(mediaItem.localConfiguration.mimeType).isEqualTo(MimeTypes.APPLICATION_MPD); } @Test public void builder_drmConfigIsNullByDefault() { // Null value by default. MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).build(); - assertThat(mediaItem.playbackProperties.drmConfiguration).isNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration).isNull(); } @Test @@ -105,20 +105,20 @@ public class MediaItemTest { .setDrmUuid(C.WIDEVINE_UUID) .build(); - assertThat(mediaItem.playbackProperties.drmConfiguration).isNotNull(); - assertThat(mediaItem.playbackProperties.drmConfiguration.scheme).isEqualTo(C.WIDEVINE_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.uuid).isEqualTo(C.WIDEVINE_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseUri).isEqualTo(licenseUri); - assertThat(mediaItem.playbackProperties.drmConfiguration.requestHeaders) + assertThat(mediaItem.localConfiguration.drmConfiguration).isNotNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration.scheme).isEqualTo(C.WIDEVINE_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.uuid).isEqualTo(C.WIDEVINE_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseUri).isEqualTo(licenseUri); + assertThat(mediaItem.localConfiguration.drmConfiguration.requestHeaders) .isEqualTo(requestHeaders); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseRequestHeaders) + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseRequestHeaders) .isEqualTo(requestHeaders); - assertThat(mediaItem.playbackProperties.drmConfiguration.multiSession).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.forceDefaultLicenseUri).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes) + assertThat(mediaItem.localConfiguration.drmConfiguration.multiSession).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.forceDefaultLicenseUri).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.playClearContentWithoutKey).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.sessionForClearTypes) .containsExactly(C.TRACK_TYPE_AUDIO); - assertThat(mediaItem.playbackProperties.drmConfiguration.getKeySetId()).isEqualTo(keySetId); + assertThat(mediaItem.localConfiguration.drmConfiguration.getKeySetId()).isEqualTo(keySetId); } @Test @@ -142,17 +142,17 @@ public class MediaItemTest { .setDrmConfiguration(new MediaItem.DrmConfiguration.Builder(C.CLEARKEY_UUID).build()) .build(); - assertThat(mediaItem.playbackProperties.drmConfiguration).isNotNull(); - assertThat(mediaItem.playbackProperties.drmConfiguration.scheme).isEqualTo(C.CLEARKEY_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.uuid).isEqualTo(C.CLEARKEY_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseUri).isNull(); - assertThat(mediaItem.playbackProperties.drmConfiguration.requestHeaders).isEmpty(); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseRequestHeaders).isEmpty(); - assertThat(mediaItem.playbackProperties.drmConfiguration.multiSession).isFalse(); - assertThat(mediaItem.playbackProperties.drmConfiguration.forceDefaultLicenseUri).isFalse(); - assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isFalse(); - assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes).isEmpty(); - assertThat(mediaItem.playbackProperties.drmConfiguration.getKeySetId()).isNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration).isNotNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration.scheme).isEqualTo(C.CLEARKEY_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.uuid).isEqualTo(C.CLEARKEY_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseUri).isNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration.requestHeaders).isEmpty(); + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseRequestHeaders).isEmpty(); + assertThat(mediaItem.localConfiguration.drmConfiguration.multiSession).isFalse(); + assertThat(mediaItem.localConfiguration.drmConfiguration.forceDefaultLicenseUri).isFalse(); + assertThat(mediaItem.localConfiguration.drmConfiguration.playClearContentWithoutKey).isFalse(); + assertThat(mediaItem.localConfiguration.drmConfiguration.sessionForClearTypes).isEmpty(); + assertThat(mediaItem.localConfiguration.drmConfiguration.getKeySetId()).isNull(); } @Test @@ -177,20 +177,20 @@ public class MediaItemTest { .build()) .build(); - assertThat(mediaItem.playbackProperties.drmConfiguration).isNotNull(); - assertThat(mediaItem.playbackProperties.drmConfiguration.scheme).isEqualTo(C.WIDEVINE_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.uuid).isEqualTo(C.WIDEVINE_UUID); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseUri).isEqualTo(licenseUri); - assertThat(mediaItem.playbackProperties.drmConfiguration.requestHeaders) + assertThat(mediaItem.localConfiguration.drmConfiguration).isNotNull(); + assertThat(mediaItem.localConfiguration.drmConfiguration.scheme).isEqualTo(C.WIDEVINE_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.uuid).isEqualTo(C.WIDEVINE_UUID); + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseUri).isEqualTo(licenseUri); + assertThat(mediaItem.localConfiguration.drmConfiguration.requestHeaders) .isEqualTo(requestHeaders); - assertThat(mediaItem.playbackProperties.drmConfiguration.licenseRequestHeaders) + assertThat(mediaItem.localConfiguration.drmConfiguration.licenseRequestHeaders) .isEqualTo(requestHeaders); - assertThat(mediaItem.playbackProperties.drmConfiguration.multiSession).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.forceDefaultLicenseUri).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isTrue(); - assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes) + assertThat(mediaItem.localConfiguration.drmConfiguration.multiSession).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.forceDefaultLicenseUri).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.playClearContentWithoutKey).isTrue(); + assertThat(mediaItem.localConfiguration.drmConfiguration.sessionForClearTypes) .containsExactly(C.TRACK_TYPE_AUDIO); - assertThat(mediaItem.playbackProperties.drmConfiguration.getKeySetId()).isEqualTo(keySetId); + assertThat(mediaItem.localConfiguration.drmConfiguration.getKeySetId()).isEqualTo(keySetId); } @Test @@ -206,7 +206,7 @@ public class MediaItemTest { .setDrmSessionForClearPeriods(true) .build(); - assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes) + assertThat(mediaItem.localConfiguration.drmConfiguration.sessionForClearTypes) .containsExactly(C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO); } @@ -242,7 +242,7 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setCustomCacheKey("key").build(); - assertThat(mediaItem.playbackProperties.customCacheKey).isEqualTo("key"); + assertThat(mediaItem.localConfiguration.customCacheKey).isEqualTo("key"); } @Test @@ -254,7 +254,7 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setStreamKeys(streamKeys).build(); - assertThat(mediaItem.playbackProperties.streamKeys).isEqualTo(streamKeys); + assertThat(mediaItem.localConfiguration.streamKeys).isEqualTo(streamKeys); } @Test @@ -287,14 +287,14 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setSubtitles(subtitles).build(); - assertThat(mediaItem.playbackProperties.subtitles).isEqualTo(subtitles); + assertThat(mediaItem.localConfiguration.subtitles).isEqualTo(subtitles); } @Test public void builderSetTag_isNullByDefault() { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).build(); - assertThat(mediaItem.playbackProperties.tag).isNull(); + assertThat(mediaItem.localConfiguration.tag).isNull(); } @Test @@ -303,7 +303,7 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setTag(tag).build(); - assertThat(mediaItem.playbackProperties.tag).isEqualTo(tag); + assertThat(mediaItem.localConfiguration.tag).isEqualTo(tag); } @Test @@ -430,8 +430,8 @@ public class MediaItemTest { .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build(); - assertThat(mediaItem.playbackProperties.adsConfiguration.adTagUri).isEqualTo(adTagUri); - assertThat(mediaItem.playbackProperties.adsConfiguration.adsId).isNull(); + assertThat(mediaItem.localConfiguration.adsConfiguration.adTagUri).isEqualTo(adTagUri); + assertThat(mediaItem.localConfiguration.adsConfiguration.adsId).isNull(); } @Test @@ -445,8 +445,8 @@ public class MediaItemTest { .setAdsConfiguration( new MediaItem.AdsConfiguration.Builder(adTagUri).setAdsId(adsId).build()) .build(); - assertThat(mediaItem.playbackProperties.adsConfiguration.adTagUri).isEqualTo(adTagUri); - assertThat(mediaItem.playbackProperties.adsConfiguration.adsId).isEqualTo(adsId); + assertThat(mediaItem.localConfiguration.adsConfiguration.adTagUri).isEqualTo(adTagUri); + assertThat(mediaItem.localConfiguration.adsConfiguration.adsId).isEqualTo(adsId); } @Test @@ -456,8 +456,8 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setAdTagUri(adTagUri).build(); - assertThat(mediaItem.playbackProperties.adsConfiguration.adTagUri).isEqualTo(adTagUri); - assertThat(mediaItem.playbackProperties.adsConfiguration.adsId).isNull(); + assertThat(mediaItem.localConfiguration.adsConfiguration.adTagUri).isEqualTo(adTagUri); + assertThat(mediaItem.localConfiguration.adsConfiguration.adsId).isNull(); } @Test @@ -469,8 +469,8 @@ public class MediaItemTest { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).setAdTagUri(adTagUri, adsId).build(); - assertThat(mediaItem.playbackProperties.adsConfiguration.adTagUri).isEqualTo(adTagUri); - assertThat(mediaItem.playbackProperties.adsConfiguration.adsId).isEqualTo(adsId); + assertThat(mediaItem.localConfiguration.adsConfiguration.adTagUri).isEqualTo(adTagUri); + assertThat(mediaItem.localConfiguration.adsConfiguration.adsId).isEqualTo(adsId); } @Test @@ -596,6 +596,7 @@ public class MediaItemTest { MediaItem copy = mediaItem.buildUpon().build(); assertThat(copy).isEqualTo(mediaItem); + assertThat(copy.localConfiguration).isEqualTo(mediaItem.playbackProperties); } @Test @@ -674,7 +675,7 @@ public class MediaItemTest { .setClipStartsAtKeyFrame(true) .build(); - assertThat(mediaItem.playbackProperties).isNull(); + assertThat(mediaItem.localConfiguration).isNull(); assertThat(MediaItem.CREATOR.fromBundle(mediaItem.toBundle())).isEqualTo(mediaItem); } @@ -682,7 +683,7 @@ public class MediaItemTest { public void roundTripViaBundle_withPlaybackProperties_dropsPlaybackProperties() { MediaItem mediaItem = new MediaItem.Builder().setUri(URI_STRING).build(); - assertThat(mediaItem.playbackProperties).isNotNull(); - assertThat(MediaItem.CREATOR.fromBundle(mediaItem.toBundle()).playbackProperties).isNull(); + assertThat(mediaItem.localConfiguration).isNotNull(); + assertThat(MediaItem.CREATOR.fromBundle(mediaItem.toBundle()).localConfiguration).isNull(); } }