Rename MediaItem.ClippingProperties to ClippingConfiguration

This is more consistent with the other MediaItem inner classes which are
all Configurations.

The old class and fields are left deprecated for backwards
compatibility.

MediaItem.Builder#setClippingProperties is directly renamed (without
deprecation) because it only exists on the dev-v2 branch and hasn't
been included in a numbered ExoPlayer release.

PiperOrigin-RevId: 399471414
This commit is contained in:
ibaker 2021-09-28 18:25:49 +01:00 committed by bachinger
parent b6b39cf7cf
commit 8db6ea4649
2 changed files with 113 additions and 87 deletions

View File

@ -69,7 +69,7 @@ public final class MediaItem implements Bundleable {
@Nullable private String mimeType;
// TODO: Change this to ClippingProperties once all the deprecated individual setters are
// removed.
private ClippingProperties.Builder clippingProperties;
private ClippingConfiguration.Builder clippingConfiguration;
// TODO: Change this to @Nullable DrmConfiguration once all the deprecated individual setters
// are removed.
private DrmConfiguration.Builder drmConfiguration;
@ -86,7 +86,7 @@ public final class MediaItem implements Bundleable {
/** Creates a builder. */
@SuppressWarnings("deprecation") // Temporarily uses DrmConfiguration.Builder() constructor.
public Builder() {
clippingProperties = new ClippingProperties.Builder();
clippingConfiguration = new ClippingConfiguration.Builder();
drmConfiguration = new DrmConfiguration.Builder();
streamKeys = Collections.emptyList();
subtitles = Collections.emptyList();
@ -95,7 +95,7 @@ public final class MediaItem implements Bundleable {
private Builder(MediaItem mediaItem) {
this();
clippingProperties = mediaItem.clippingProperties.buildUpon();
clippingConfiguration = mediaItem.clippingConfiguration.buildUpon();
mediaId = mediaItem.mediaId;
mediaMetadata = mediaItem.mediaMetadata;
liveConfiguration = mediaItem.liveConfiguration.buildUpon();
@ -162,59 +162,59 @@ public final class MediaItem implements Bundleable {
return this;
}
/** Sets the {@link ClippingProperties}, defaults to {@link ClippingProperties#UNSET}. */
public Builder setClippingProperties(ClippingProperties clippingProperties) {
this.clippingProperties = clippingProperties.buildUpon();
/** Sets the {@link ClippingConfiguration}, defaults to {@link ClippingConfiguration#UNSET}. */
public Builder setClippingConfiguration(ClippingConfiguration clippingConfiguration) {
this.clippingConfiguration = clippingConfiguration.buildUpon();
return this;
}
/**
* @deprecated Use {@link #setClippingProperties(ClippingProperties)} and {@link
* ClippingProperties.Builder#setStartPositionMs(long)} instead.
* @deprecated Use {@link #setClippingConfiguration(ClippingConfiguration)} and {@link
* ClippingConfiguration.Builder#setStartPositionMs(long)} instead.
*/
@Deprecated
public Builder setClipStartPositionMs(@IntRange(from = 0) long startPositionMs) {
clippingProperties.setStartPositionMs(startPositionMs);
clippingConfiguration.setStartPositionMs(startPositionMs);
return this;
}
/**
* @deprecated Use {@link #setClippingProperties(ClippingProperties)} and {@link
* ClippingProperties.Builder#setEndPositionMs(long)} instead.
* @deprecated Use {@link #setClippingConfiguration(ClippingConfiguration)} and {@link
* ClippingConfiguration.Builder#setEndPositionMs(long)} instead.
*/
@Deprecated
public Builder setClipEndPositionMs(long endPositionMs) {
clippingProperties.setEndPositionMs(endPositionMs);
clippingConfiguration.setEndPositionMs(endPositionMs);
return this;
}
/**
* @deprecated Use {@link #setClippingProperties(ClippingProperties)} and {@link
* ClippingProperties.Builder#setRelativeToLiveWindow(boolean)} instead.
* @deprecated Use {@link #setClippingConfiguration(ClippingConfiguration)} and {@link
* ClippingConfiguration.Builder#setRelativeToLiveWindow(boolean)} instead.
*/
@Deprecated
public Builder setClipRelativeToLiveWindow(boolean relativeToLiveWindow) {
clippingProperties.setRelativeToLiveWindow(relativeToLiveWindow);
clippingConfiguration.setRelativeToLiveWindow(relativeToLiveWindow);
return this;
}
/**
* @deprecated Use {@link #setClippingProperties(ClippingProperties)} and {@link
* ClippingProperties.Builder#setRelativeToDefaultPosition(boolean)} instead.
* @deprecated Use {@link #setClippingConfiguration(ClippingConfiguration)} and {@link
* ClippingConfiguration.Builder#setRelativeToDefaultPosition(boolean)} instead.
*/
@Deprecated
public Builder setClipRelativeToDefaultPosition(boolean relativeToDefaultPosition) {
clippingProperties.setRelativeToDefaultPosition(relativeToDefaultPosition);
clippingConfiguration.setRelativeToDefaultPosition(relativeToDefaultPosition);
return this;
}
/**
* @deprecated Use {@link #setClippingProperties(ClippingProperties)} and {@link
* ClippingProperties.Builder#setStartsAtKeyFrame(boolean)} instead.
* @deprecated Use {@link #setClippingConfiguration(ClippingConfiguration)} and {@link
* ClippingConfiguration.Builder#setStartsAtKeyFrame(boolean)} instead.
*/
@Deprecated
public Builder setClipStartsAtKeyFrame(boolean startsAtKeyFrame) {
clippingProperties.setStartsAtKeyFrame(startsAtKeyFrame);
clippingConfiguration.setStartsAtKeyFrame(startsAtKeyFrame);
return this;
}
@ -505,7 +505,7 @@ public final class MediaItem implements Bundleable {
}
return new MediaItem(
mediaId != null ? mediaId : DEFAULT_MEDIA_ID,
clippingProperties.build(),
clippingConfiguration.buildClippingProperties(),
localConfiguration,
liveConfiguration.build(),
mediaMetadata != null ? mediaMetadata : MediaMetadata.EMPTY);
@ -1368,12 +1368,13 @@ public final class MediaItem implements Bundleable {
}
/** Optionally clips the media item to a custom start and end position. */
public static final class ClippingProperties implements Bundleable {
// TODO: Mark this final when ClippingProperties is deleted.
public static class ClippingConfiguration implements Bundleable {
/** A clipping properties configuration with default values. */
public static final ClippingProperties UNSET = new ClippingProperties.Builder().build();
/** A clipping configuration with default values. */
public static final ClippingConfiguration UNSET = new ClippingConfiguration.Builder().build();
/** Builder for {@link ClippingProperties} instances. */
/** Builder for {@link ClippingConfiguration} instances. */
public static final class Builder {
private long startPositionMs;
private long endPositionMs;
@ -1386,12 +1387,12 @@ public final class MediaItem implements Bundleable {
endPositionMs = C.TIME_END_OF_SOURCE;
}
private Builder(ClippingProperties clippingProperties) {
startPositionMs = clippingProperties.startPositionMs;
endPositionMs = clippingProperties.endPositionMs;
relativeToLiveWindow = clippingProperties.relativeToLiveWindow;
relativeToDefaultPosition = clippingProperties.relativeToDefaultPosition;
startsAtKeyFrame = clippingProperties.startsAtKeyFrame;
private Builder(ClippingConfiguration clippingConfiguration) {
startPositionMs = clippingConfiguration.startPositionMs;
endPositionMs = clippingConfiguration.endPositionMs;
relativeToLiveWindow = clippingConfiguration.relativeToLiveWindow;
relativeToDefaultPosition = clippingConfiguration.relativeToDefaultPosition;
startsAtKeyFrame = clippingConfiguration.startsAtKeyFrame;
}
/**
@ -1444,9 +1445,16 @@ public final class MediaItem implements Bundleable {
}
/**
* Returns a {@link ClippingProperties} instance initialized with the values of this builder.
* Returns a {@link ClippingConfiguration} instance initialized with the values of this
* builder.
*/
public ClippingProperties build() {
public ClippingConfiguration build() {
return buildClippingProperties();
}
/** @deprecated Use {@link #build()} instead. */
@Deprecated
public ClippingProperties buildClippingProperties() {
return new ClippingProperties(this);
}
}
@ -1476,7 +1484,7 @@ public final class MediaItem implements Bundleable {
/** Sets whether the start point is guaranteed to be a key frame. */
public final boolean startsAtKeyFrame;
private ClippingProperties(Builder builder) {
private ClippingConfiguration(Builder builder) {
this.startPositionMs = builder.startPositionMs;
this.endPositionMs = builder.endPositionMs;
this.relativeToLiveWindow = builder.relativeToLiveWindow;
@ -1494,11 +1502,11 @@ public final class MediaItem implements Bundleable {
if (this == obj) {
return true;
}
if (!(obj instanceof ClippingProperties)) {
if (!(obj instanceof ClippingConfiguration)) {
return false;
}
ClippingProperties other = (ClippingProperties) obj;
ClippingConfiguration other = (ClippingConfiguration) obj;
return startPositionMs == other.startPositionMs
&& endPositionMs == other.endPositionMs
@ -1547,10 +1555,10 @@ public final class MediaItem implements Bundleable {
return bundle;
}
/** Object that can restore {@link ClippingProperties} from a {@link Bundle}. */
/** Object that can restore {@link ClippingConfiguration} from a {@link Bundle}. */
public static final Creator<ClippingProperties> CREATOR =
bundle ->
new ClippingProperties.Builder()
new ClippingConfiguration.Builder()
.setStartPositionMs(
bundle.getLong(keyForField(FIELD_START_POSITION_MS), /* defaultValue= */ 0))
.setEndPositionMs(
@ -1563,13 +1571,24 @@ public final class MediaItem implements Bundleable {
bundle.getBoolean(keyForField(FIELD_RELATIVE_TO_DEFAULT_POSITION), false))
.setStartsAtKeyFrame(
bundle.getBoolean(keyForField(FIELD_STARTS_AT_KEY_FRAME), false))
.build();
.buildClippingProperties();
private static String keyForField(@ClippingProperties.FieldNumber int field) {
private static String keyForField(@ClippingConfiguration.FieldNumber int field) {
return Integer.toString(field, Character.MAX_RADIX);
}
}
/** @deprecated Use {@link ClippingConfiguration} instead. */
@Deprecated
public static final class ClippingProperties extends ClippingConfiguration {
public static final ClippingProperties UNSET =
new ClippingConfiguration.Builder().buildClippingProperties();
private ClippingProperties(Builder builder) {
super(builder);
}
}
/**
* The default media ID that is used if the media ID is not explicitly set by {@link
* Builder#setMediaId(String)}.
@ -1597,12 +1616,15 @@ public final class MediaItem implements Bundleable {
public final MediaMetadata mediaMetadata;
/** The clipping properties. */
public final ClippingProperties clippingProperties;
public final ClippingConfiguration clippingConfiguration;
/** @deprecated Use {@link #clippingConfiguration} instead. */
@Deprecated public final ClippingProperties clippingProperties;
@SuppressWarnings("deprecation") // Using PlaybackProperties until it's deleted.
// Using PlaybackProperties and ClippingProperties until they're deleted.
@SuppressWarnings("deprecation")
private MediaItem(
String mediaId,
ClippingProperties clippingProperties,
ClippingProperties clippingConfiguration,
@Nullable PlaybackProperties localConfiguration,
LiveConfiguration liveConfiguration,
MediaMetadata mediaMetadata) {
@ -1611,7 +1633,8 @@ public final class MediaItem implements Bundleable {
this.playbackProperties = localConfiguration;
this.liveConfiguration = liveConfiguration;
this.mediaMetadata = mediaMetadata;
this.clippingProperties = clippingProperties;
this.clippingConfiguration = clippingConfiguration;
this.clippingProperties = clippingConfiguration;
}
/** Returns a {@link Builder} initialized with the values of this instance. */
@ -1631,7 +1654,7 @@ public final class MediaItem implements Bundleable {
MediaItem other = (MediaItem) obj;
return Util.areEqual(mediaId, other.mediaId)
&& clippingProperties.equals(other.clippingProperties)
&& clippingConfiguration.equals(other.clippingConfiguration)
&& Util.areEqual(localConfiguration, other.localConfiguration)
&& Util.areEqual(liveConfiguration, other.liveConfiguration)
&& Util.areEqual(mediaMetadata, other.mediaMetadata);
@ -1642,7 +1665,7 @@ public final class MediaItem implements Bundleable {
int result = mediaId.hashCode();
result = 31 * result + (localConfiguration != null ? localConfiguration.hashCode() : 0);
result = 31 * result + liveConfiguration.hashCode();
result = 31 * result + clippingProperties.hashCode();
result = 31 * result + clippingConfiguration.hashCode();
result = 31 * result + mediaMetadata.hashCode();
return result;
}
@ -1676,7 +1699,7 @@ public final class MediaItem implements Bundleable {
bundle.putString(keyForField(FIELD_MEDIA_ID), mediaId);
bundle.putBundle(keyForField(FIELD_LIVE_CONFIGURATION), liveConfiguration.toBundle());
bundle.putBundle(keyForField(FIELD_MEDIA_METADATA), mediaMetadata.toBundle());
bundle.putBundle(keyForField(FIELD_CLIPPING_PROPERTIES), clippingProperties.toBundle());
bundle.putBundle(keyForField(FIELD_CLIPPING_PROPERTIES), clippingConfiguration.toBundle());
return bundle;
}
@ -1687,6 +1710,7 @@ public final class MediaItem implements Bundleable {
*/
public static final Creator<MediaItem> CREATOR = MediaItem::fromBundle;
@SuppressWarnings("deprecation") // Unbundling to ClippingProperties while it still exists.
private static MediaItem fromBundle(Bundle bundle) {
String mediaId = checkNotNull(bundle.getString(keyForField(FIELD_MEDIA_ID), DEFAULT_MEDIA_ID));
@Nullable
@ -1705,16 +1729,16 @@ public final class MediaItem implements Bundleable {
mediaMetadata = MediaMetadata.CREATOR.fromBundle(mediaMetadataBundle);
}
@Nullable
Bundle clippingPropertiesBundle = bundle.getBundle(keyForField(FIELD_CLIPPING_PROPERTIES));
ClippingProperties clippingProperties;
if (clippingPropertiesBundle == null) {
clippingProperties = ClippingProperties.UNSET;
Bundle clippingConfigurationBundle = bundle.getBundle(keyForField(FIELD_CLIPPING_PROPERTIES));
ClippingProperties clippingConfiguration;
if (clippingConfigurationBundle == null) {
clippingConfiguration = ClippingProperties.UNSET;
} else {
clippingProperties = ClippingProperties.CREATOR.fromBundle(clippingPropertiesBundle);
clippingConfiguration = ClippingConfiguration.CREATOR.fromBundle(clippingConfigurationBundle);
}
return new MediaItem(
mediaId,
clippingProperties,
clippingConfiguration,
/* playbackProperties= */ null,
liveConfiguration,
mediaMetadata);

View File

@ -307,12 +307,13 @@ public class MediaItemTest {
}
@Test
public void builderSetClippingProperties() {
@SuppressWarnings("deprecation") // Testing deprecated field
public void builderSetClippingConfiguration() {
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(URI_STRING)
.setClippingProperties(
new MediaItem.ClippingProperties.Builder()
.setClippingConfiguration(
new MediaItem.ClippingConfiguration.Builder()
.setStartPositionMs(1000L)
.setEndPositionMs(2000L)
.setRelativeToLiveWindow(true)
@ -321,40 +322,41 @@ public class MediaItemTest {
.build())
.build();
assertThat(mediaItem.clippingProperties.startPositionMs).isEqualTo(1000L);
assertThat(mediaItem.clippingProperties.endPositionMs).isEqualTo(2000L);
assertThat(mediaItem.clippingProperties.relativeToLiveWindow).isTrue();
assertThat(mediaItem.clippingProperties.relativeToDefaultPosition).isTrue();
assertThat(mediaItem.clippingProperties.startsAtKeyFrame).isTrue();
assertThat(mediaItem.clippingConfiguration.startPositionMs).isEqualTo(1000L);
assertThat(mediaItem.clippingConfiguration.endPositionMs).isEqualTo(2000L);
assertThat(mediaItem.clippingConfiguration.relativeToLiveWindow).isTrue();
assertThat(mediaItem.clippingConfiguration.relativeToDefaultPosition).isTrue();
assertThat(mediaItem.clippingConfiguration.startsAtKeyFrame).isTrue();
assertThat(mediaItem.clippingConfiguration).isEqualTo(mediaItem.clippingProperties);
}
@Test
public void clippingPropertiesDefaults() {
MediaItem.ClippingProperties clippingProperties =
new MediaItem.ClippingProperties.Builder().build();
public void clippingConfigurationDefaults() {
MediaItem.ClippingConfiguration clippingConfiguration =
new MediaItem.ClippingConfiguration.Builder().build();
assertThat(clippingProperties.startPositionMs).isEqualTo(0L);
assertThat(clippingProperties.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
assertThat(clippingProperties.relativeToLiveWindow).isFalse();
assertThat(clippingProperties.relativeToDefaultPosition).isFalse();
assertThat(clippingProperties.startsAtKeyFrame).isFalse();
assertThat(clippingProperties).isEqualTo(MediaItem.ClippingProperties.UNSET);
assertThat(clippingConfiguration.startPositionMs).isEqualTo(0L);
assertThat(clippingConfiguration.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
assertThat(clippingConfiguration.relativeToLiveWindow).isFalse();
assertThat(clippingConfiguration.relativeToDefaultPosition).isFalse();
assertThat(clippingConfiguration.startsAtKeyFrame).isFalse();
assertThat(clippingConfiguration).isEqualTo(MediaItem.ClippingConfiguration.UNSET);
}
@Test
public void clippingPropertiesBuilder_throwsOnInvalidValues() {
MediaItem.ClippingProperties.Builder clippingPropertiesBuilder =
new MediaItem.ClippingProperties.Builder();
public void clippingConfigurationBuilder_throwsOnInvalidValues() {
MediaItem.ClippingConfiguration.Builder clippingConfigurationBuilder =
new MediaItem.ClippingConfiguration.Builder();
assertThrows(
IllegalArgumentException.class, () -> clippingPropertiesBuilder.setStartPositionMs(-1));
IllegalArgumentException.class, () -> clippingConfigurationBuilder.setStartPositionMs(-1));
assertThrows(
IllegalArgumentException.class, () -> clippingPropertiesBuilder.setEndPositionMs(-1));
IllegalArgumentException.class, () -> clippingConfigurationBuilder.setEndPositionMs(-1));
MediaItem.ClippingProperties clippingProperties = clippingPropertiesBuilder.build();
MediaItem.ClippingConfiguration clippingConfiguration = clippingConfigurationBuilder.build();
// Check neither of the setters succeeded in mutating the builder.
assertThat(clippingProperties.startPositionMs).isEqualTo(0L);
assertThat(clippingProperties.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
assertThat(clippingConfiguration.startPositionMs).isEqualTo(0L);
assertThat(clippingConfiguration.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
}
@Test
@ -363,7 +365,7 @@ public class MediaItemTest {
MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_STRING).setClipStartPositionMs(1000L).build();
assertThat(mediaItem.clippingProperties.startPositionMs).isEqualTo(1000L);
assertThat(mediaItem.clippingConfiguration.startPositionMs).isEqualTo(1000L);
}
@Test
@ -380,7 +382,7 @@ public class MediaItemTest {
MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_STRING).setClipEndPositionMs(1000L).build();
assertThat(mediaItem.clippingProperties.endPositionMs).isEqualTo(1000L);
assertThat(mediaItem.clippingConfiguration.endPositionMs).isEqualTo(1000L);
}
@Test
@ -393,7 +395,7 @@ public class MediaItemTest {
.setClipEndPositionMs(C.TIME_END_OF_SOURCE)
.build();
assertThat(mediaItem.clippingProperties.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
assertThat(mediaItem.clippingConfiguration.endPositionMs).isEqualTo(C.TIME_END_OF_SOURCE);
}
@Test
@ -415,9 +417,9 @@ public class MediaItemTest {
.setClipStartsAtKeyFrame(true)
.build();
assertThat(mediaItem.clippingProperties.relativeToDefaultPosition).isTrue();
assertThat(mediaItem.clippingProperties.relativeToLiveWindow).isTrue();
assertThat(mediaItem.clippingProperties.startsAtKeyFrame).isTrue();
assertThat(mediaItem.clippingConfiguration.relativeToDefaultPosition).isTrue();
assertThat(mediaItem.clippingConfiguration.relativeToLiveWindow).isTrue();
assertThat(mediaItem.clippingConfiguration.startsAtKeyFrame).isTrue();
}
@Test
@ -605,8 +607,8 @@ public class MediaItemTest {
new MediaItem.Builder()
.setAdsConfiguration(
new MediaItem.AdsConfiguration.Builder(Uri.parse(URI_STRING)).build())
.setClippingProperties(
new MediaItem.ClippingProperties.Builder()
.setClippingConfiguration(
new MediaItem.ClippingConfiguration.Builder()
.setEndPositionMs(1000)
.setRelativeToDefaultPosition(true)
.setRelativeToLiveWindow(true)