From af507efb2adbeecde3c58120ae75183594f7ad6a Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 7 Aug 2018 07:42:34 -0700 Subject: [PATCH] Deprecate/remove DataSource constructors that accept listeners ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=207713478 --- .../ext/cronet/CronetDataSource.java | 50 +++++----- .../ext/cronet/CronetDataSourceFactory.java | 15 ++- .../ext/cronet/CronetDataSourceTest.java | 8 +- .../exoplayer2/ext/rtmp/RtmpDataSource.java | 10 +- .../exoplayer2/upstream/AssetDataSource.java | 13 +-- .../upstream/ContentDataSource.java | 9 +- .../upstream/DefaultDataSource.java | 93 +++++++++++++++++-- .../upstream/DefaultHttpDataSource.java | 86 +++++++++++++++-- .../exoplayer2/upstream/FileDataSource.java | 10 +- .../upstream/RawResourceDataSource.java | 9 +- .../exoplayer2/upstream/UdpDataSource.java | 57 ++++++++++-- .../exoplayer2/testutil/FakeDataSource.java | 14 +-- 12 files changed, 294 insertions(+), 80 deletions(-) diff --git a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java index cc6de3ceaf..dd8b6e0bed 100644 --- a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java +++ b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java @@ -16,7 +16,6 @@ package com.google.android.exoplayer2.ext.cronet; import android.net.Uri; -import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; import com.google.android.exoplayer2.C; @@ -25,7 +24,6 @@ import com.google.android.exoplayer2.upstream.BaseDataSource; import com.google.android.exoplayer2.upstream.DataSourceException; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.HttpDataSource; -import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.ConditionVariable; @@ -156,15 +154,18 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { * @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the * predicate then an {@link InvalidContentTypeException} is thrown from {@link * #open(DataSpec)}. - * @param listener An optional listener. */ public CronetDataSource( - CronetEngine cronetEngine, - Executor executor, - Predicate contentTypePredicate, - @Nullable TransferListener listener) { - this(cronetEngine, executor, contentTypePredicate, listener, DEFAULT_CONNECT_TIMEOUT_MILLIS, - DEFAULT_READ_TIMEOUT_MILLIS, false, null, false); + CronetEngine cronetEngine, Executor executor, Predicate contentTypePredicate) { + this( + cronetEngine, + executor, + contentTypePredicate, + DEFAULT_CONNECT_TIMEOUT_MILLIS, + DEFAULT_READ_TIMEOUT_MILLIS, + false, + null, + false); } /** @@ -177,7 +178,6 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { * @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the * predicate then an {@link InvalidContentTypeException} is thrown from {@link * #open(DataSpec)}. - * @param listener An optional listener. * @param connectTimeoutMs The connection timeout, in milliseconds. * @param readTimeoutMs The read timeout, in milliseconds. * @param resetTimeoutOnRedirects Whether the connect timeout is reset when a redirect occurs. @@ -187,13 +187,20 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { CronetEngine cronetEngine, Executor executor, Predicate contentTypePredicate, - @Nullable TransferListener listener, int connectTimeoutMs, int readTimeoutMs, boolean resetTimeoutOnRedirects, RequestProperties defaultRequestProperties) { - this(cronetEngine, executor, contentTypePredicate, listener, connectTimeoutMs, - readTimeoutMs, resetTimeoutOnRedirects, Clock.DEFAULT, defaultRequestProperties, false); + this( + cronetEngine, + executor, + contentTypePredicate, + connectTimeoutMs, + readTimeoutMs, + resetTimeoutOnRedirects, + Clock.DEFAULT, + defaultRequestProperties, + false); } /** @@ -206,7 +213,6 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { * @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the * predicate then an {@link InvalidContentTypeException} is thrown from {@link * #open(DataSpec)}. - * @param listener An optional listener. * @param connectTimeoutMs The connection timeout, in milliseconds. * @param readTimeoutMs The read timeout, in milliseconds. * @param resetTimeoutOnRedirects Whether the connect timeout is reset when a redirect occurs. @@ -218,14 +224,20 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { CronetEngine cronetEngine, Executor executor, Predicate contentTypePredicate, - @Nullable TransferListener listener, int connectTimeoutMs, int readTimeoutMs, boolean resetTimeoutOnRedirects, RequestProperties defaultRequestProperties, boolean handleSetCookieRequests) { - this(cronetEngine, executor, contentTypePredicate, listener, connectTimeoutMs, - readTimeoutMs, resetTimeoutOnRedirects, Clock.DEFAULT, defaultRequestProperties, + this( + cronetEngine, + executor, + contentTypePredicate, + connectTimeoutMs, + readTimeoutMs, + resetTimeoutOnRedirects, + Clock.DEFAULT, + defaultRequestProperties, handleSetCookieRequests); } @@ -233,7 +245,6 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { CronetEngine cronetEngine, Executor executor, Predicate contentTypePredicate, - @Nullable TransferListener listener, int connectTimeoutMs, int readTimeoutMs, boolean resetTimeoutOnRedirects, @@ -253,9 +264,6 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { this.handleSetCookieRequests = handleSetCookieRequests; requestProperties = new RequestProperties(); operation = new ConditionVariable(); - if (listener != null) { - addTransferListener(listener); - } } // HttpDataSource implementation. diff --git a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceFactory.java b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceFactory.java index f40671984e..d832e4625d 100644 --- a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceFactory.java +++ b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceFactory.java @@ -335,8 +335,19 @@ public final class CronetDataSourceFactory extends BaseFactory { if (cronetEngine == null) { return fallbackFactory.createDataSource(); } - return new CronetDataSource(cronetEngine, executor, contentTypePredicate, transferListener, - connectTimeoutMs, readTimeoutMs, resetTimeoutOnRedirects, defaultRequestProperties); + CronetDataSource dataSource = + new CronetDataSource( + cronetEngine, + executor, + contentTypePredicate, + connectTimeoutMs, + readTimeoutMs, + resetTimeoutOnRedirects, + defaultRequestProperties); + if (transferListener != null) { + dataSource.addTransferListener(transferListener); + } + return dataSource; } } diff --git a/extensions/cronet/src/test/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceTest.java b/extensions/cronet/src/test/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceTest.java index 2ff129f9b3..7cfac378f0 100644 --- a/extensions/cronet/src/test/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceTest.java +++ b/extensions/cronet/src/test/java/com/google/android/exoplayer2/ext/cronet/CronetDataSourceTest.java @@ -102,13 +102,13 @@ public final class CronetDataSourceTest { mockCronetEngine, mockExecutor, mockContentTypePredicate, - mockTransferListener, TEST_CONNECT_TIMEOUT_MS, TEST_READ_TIMEOUT_MS, true, // resetTimeoutOnRedirects Clock.DEFAULT, null, false); + dataSourceUnderTest.addTransferListener(mockTransferListener); when(mockContentTypePredicate.evaluate(anyString())).thenReturn(true); when(mockCronetEngine.newUrlRequestBuilder( anyString(), any(UrlRequest.Callback.class), any(Executor.class))) @@ -723,13 +723,13 @@ public final class CronetDataSourceTest { mockCronetEngine, mockExecutor, mockContentTypePredicate, - mockTransferListener, TEST_CONNECT_TIMEOUT_MS, TEST_READ_TIMEOUT_MS, true, // resetTimeoutOnRedirects Clock.DEFAULT, null, true); + dataSourceUnderTest.addTransferListener(mockTransferListener); dataSourceUnderTest.setRequestProperty("Content-Type", TEST_CONTENT_TYPE); mockSingleRedirectSuccess(); @@ -754,13 +754,13 @@ public final class CronetDataSourceTest { mockCronetEngine, mockExecutor, mockContentTypePredicate, - mockTransferListener, TEST_CONNECT_TIMEOUT_MS, TEST_READ_TIMEOUT_MS, true, // resetTimeoutOnRedirects Clock.DEFAULT, null, true); + dataSourceUnderTest.addTransferListener(mockTransferListener); dataSourceUnderTest.setRequestProperty("Content-Type", TEST_CONTENT_TYPE); mockSingleRedirectSuccess(); @@ -793,13 +793,13 @@ public final class CronetDataSourceTest { mockCronetEngine, mockExecutor, mockContentTypePredicate, - mockTransferListener, TEST_CONNECT_TIMEOUT_MS, TEST_READ_TIMEOUT_MS, true, // resetTimeoutOnRedirects Clock.DEFAULT, null, true); + dataSourceUnderTest.addTransferListener(mockTransferListener); mockSingleRedirectSuccess(); mockFollowRedirectSuccess(); diff --git a/extensions/rtmp/src/main/java/com/google/android/exoplayer2/ext/rtmp/RtmpDataSource.java b/extensions/rtmp/src/main/java/com/google/android/exoplayer2/ext/rtmp/RtmpDataSource.java index bfa63be78c..08c328ce81 100644 --- a/extensions/rtmp/src/main/java/com/google/android/exoplayer2/ext/rtmp/RtmpDataSource.java +++ b/extensions/rtmp/src/main/java/com/google/android/exoplayer2/ext/rtmp/RtmpDataSource.java @@ -38,12 +38,16 @@ public final class RtmpDataSource extends BaseDataSource { private Uri uri; public RtmpDataSource() { - this(null); + super(/* isNetwork= */ true); } - /** @param listener An optional listener. */ + /** + * @param listener An optional listener. + * @deprecated Use {@link #RtmpDataSource()} and {@link #addTransferListener(TransferListener)}. + */ + @Deprecated public RtmpDataSource(@Nullable TransferListener listener) { - super(/* isNetwork= */ true); + this(); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java index e151a4b179..16c27ccde8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java @@ -45,20 +45,21 @@ public final class AssetDataSource extends BaseDataSource { private long bytesRemaining; private boolean opened; - /** - * @param context A context. - */ + /** @param context A context. */ public AssetDataSource(Context context) { - this(context, null); + super(/* isNetwork= */ false); + this.assetManager = context.getAssets(); } /** * @param context A context. * @param listener An optional listener. + * @deprecated Use {@link #AssetDataSource(Context)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public AssetDataSource(Context context, @Nullable TransferListener listener) { - super(/* isNetwork= */ false); - this.assetManager = context.getAssets(); + this(context); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java index 0f75c68ebb..273509e0d4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java @@ -53,16 +53,19 @@ public final class ContentDataSource extends BaseDataSource { * @param context A context. */ public ContentDataSource(Context context) { - this(context, null); + super(/* isNetwork= */ false); + this.resolver = context.getContentResolver(); } /** * @param context A context. * @param listener An optional listener. + * @deprecated Use {@link #ContentDataSource(Context)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public ContentDataSource(Context context, @Nullable TransferListener listener) { - super(/* isNetwork= */ false); - this.resolver = context.getContentResolver(); + this(context); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java index cb9bb68171..23d6cc368f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java @@ -74,11 +74,74 @@ public final class DefaultDataSource implements DataSource { * Constructs a new instance, optionally configured to follow cross-protocol redirects. * * @param context A context. - * @param listener An optional listener. - * @param userAgent The User-Agent string that should be used when requesting remote data. + * @param userAgent The User-Agent to use when requesting remote data. * @param allowCrossProtocolRedirects Whether cross-protocol redirects (i.e. redirects from HTTP * to HTTPS and vice versa) are enabled when fetching remote data. */ + public DefaultDataSource(Context context, String userAgent, boolean allowCrossProtocolRedirects) { + this( + context, + userAgent, + DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, + DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, + allowCrossProtocolRedirects); + } + + /** + * Constructs a new instance, optionally configured to follow cross-protocol redirects. + * + * @param context A context. + * @param userAgent The User-Agent to use when requesting remote data. + * @param connectTimeoutMillis The connection timeout that should be used when requesting remote + * data, in milliseconds. A timeout of zero is interpreted as an infinite timeout. + * @param readTimeoutMillis The read timeout that should be used when requesting remote data, in + * milliseconds. A timeout of zero is interpreted as an infinite timeout. + * @param allowCrossProtocolRedirects Whether cross-protocol redirects (i.e. redirects from HTTP + * to HTTPS and vice versa) are enabled when fetching remote data. + */ + public DefaultDataSource( + Context context, + String userAgent, + int connectTimeoutMillis, + int readTimeoutMillis, + boolean allowCrossProtocolRedirects) { + this( + context, + new DefaultHttpDataSource( + userAgent, + /* contentTypePredicate= */ null, + connectTimeoutMillis, + readTimeoutMillis, + allowCrossProtocolRedirects, + /* defaultRequestProperties= */ null)); + } + + /** + * Constructs a new instance that delegates to a provided {@link DataSource} for URI schemes other + * than file, asset and content. + * + * @param context A context. + * @param baseDataSource A {@link DataSource} to use for URI schemes other than file, asset and + * content. This {@link DataSource} should normally support at least http(s). + */ + public DefaultDataSource(Context context, DataSource baseDataSource) { + this.context = context.getApplicationContext(); + this.baseDataSource = Assertions.checkNotNull(baseDataSource); + transferListeners = new ArrayList<>(); + } + + /** + * Constructs a new instance, optionally configured to follow cross-protocol redirects. + * + * @param context A context. + * @param listener An optional listener. + * @param userAgent The User-Agent to use when requesting remote data. + * @param allowCrossProtocolRedirects Whether cross-protocol redirects (i.e. redirects from HTTP + * to HTTPS and vice versa) are enabled when fetching remote data. + * @deprecated Use {@link #DefaultDataSource(Context, String, boolean)} and {@link + * #addTransferListener(TransferListener)}. + */ + @Deprecated public DefaultDataSource( Context context, @Nullable TransferListener listener, @@ -93,14 +156,17 @@ public final class DefaultDataSource implements DataSource { * * @param context A context. * @param listener An optional listener. - * @param userAgent The User-Agent string that should be used when requesting remote data. + * @param userAgent The User-Agent to use when requesting remote data. * @param connectTimeoutMillis The connection timeout that should be used when requesting remote * data, in milliseconds. A timeout of zero is interpreted as an infinite timeout. * @param readTimeoutMillis The read timeout that should be used when requesting remote data, in * milliseconds. A timeout of zero is interpreted as an infinite timeout. * @param allowCrossProtocolRedirects Whether cross-protocol redirects (i.e. redirects from HTTP * to HTTPS and vice versa) are enabled when fetching remote data. + * @deprecated Use {@link #DefaultDataSource(Context, String, int, int, boolean)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public DefaultDataSource( Context context, @Nullable TransferListener listener, @@ -108,9 +174,17 @@ public final class DefaultDataSource implements DataSource { int connectTimeoutMillis, int readTimeoutMillis, boolean allowCrossProtocolRedirects) { - this(context, listener, - new DefaultHttpDataSource(userAgent, null, listener, connectTimeoutMillis, - readTimeoutMillis, allowCrossProtocolRedirects, null)); + this( + context, + listener, + new DefaultHttpDataSource( + userAgent, + /* contentTypePredicate= */ null, + listener, + connectTimeoutMillis, + readTimeoutMillis, + allowCrossProtocolRedirects, + /* defaultRequestProperties= */ null)); } /** @@ -121,12 +195,13 @@ public final class DefaultDataSource implements DataSource { * @param listener An optional listener. * @param baseDataSource A {@link DataSource} to use for URI schemes other than file, asset and * content. This {@link DataSource} should normally support at least http(s). + * @deprecated Use {@link #DefaultDataSource(Context, DataSource)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public DefaultDataSource( Context context, @Nullable TransferListener listener, DataSource baseDataSource) { - this.context = context.getApplicationContext(); - this.baseDataSource = Assertions.checkNotNull(baseDataSource); - transferListeners = new ArrayList<>(); + this(context, baseDataSource); if (listener != null) { transferListeners.add(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java index 5192f8285e..0cb7bac2b3 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java @@ -92,7 +92,67 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou * #open(DataSpec)}. */ public DefaultHttpDataSource(String userAgent, @Nullable Predicate contentTypePredicate) { - this(userAgent, contentTypePredicate, null); + this( + userAgent, + contentTypePredicate, + DEFAULT_CONNECT_TIMEOUT_MILLIS, + DEFAULT_READ_TIMEOUT_MILLIS); + } + + /** + * @param userAgent The User-Agent string that should be used. + * @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the + * predicate then a {@link HttpDataSource.InvalidContentTypeException} is thrown from {@link + * #open(DataSpec)}. + * @param connectTimeoutMillis The connection timeout, in milliseconds. A timeout of zero is + * interpreted as an infinite timeout. + * @param readTimeoutMillis The read timeout, in milliseconds. A timeout of zero is interpreted as + * an infinite timeout. + */ + public DefaultHttpDataSource( + String userAgent, + @Nullable Predicate contentTypePredicate, + int connectTimeoutMillis, + int readTimeoutMillis) { + this( + userAgent, + contentTypePredicate, + connectTimeoutMillis, + readTimeoutMillis, + /* allowCrossProtocolRedirects= */ false, + /* defaultRequestProperties= */ null); + } + + /** + * @param userAgent The User-Agent string that should be used. + * @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the + * predicate then a {@link HttpDataSource.InvalidContentTypeException} is thrown from {@link + * #open(DataSpec)}. + * @param connectTimeoutMillis The connection timeout, in milliseconds. A timeout of zero is + * interpreted as an infinite timeout. Pass {@link #DEFAULT_CONNECT_TIMEOUT_MILLIS} to use the + * default value. + * @param readTimeoutMillis The read timeout, in milliseconds. A timeout of zero is interpreted as + * an infinite timeout. Pass {@link #DEFAULT_READ_TIMEOUT_MILLIS} to use the default value. + * @param allowCrossProtocolRedirects Whether cross-protocol redirects (i.e. redirects from HTTP + * to HTTPS and vice versa) are enabled. + * @param defaultRequestProperties The default request properties to be sent to the server as HTTP + * headers or {@code null} if not required. + */ + public DefaultHttpDataSource( + String userAgent, + @Nullable Predicate contentTypePredicate, + int connectTimeoutMillis, + int readTimeoutMillis, + boolean allowCrossProtocolRedirects, + @Nullable RequestProperties defaultRequestProperties) { + super(/* isNetwork= */ true); + this.userAgent = Assertions.checkNotEmpty(userAgent); + this.contentTypePredicate = contentTypePredicate; + this.requestProperties = new RequestProperties(); + this.connectTimeoutMillis = connectTimeoutMillis; + this.readTimeoutMillis = readTimeoutMillis; + this.allowCrossProtocolRedirects = allowCrossProtocolRedirects; + this.defaultRequestProperties = defaultRequestProperties; } /** @@ -101,7 +161,10 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou * predicate then a {@link HttpDataSource.InvalidContentTypeException} is thrown from {@link * #open(DataSpec)}. * @param listener An optional listener. + * @deprecated Use {@link #DefaultHttpDataSource(String, Predicate)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public DefaultHttpDataSource( String userAgent, @Nullable Predicate contentTypePredicate, @@ -120,7 +183,10 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou * interpreted as an infinite timeout. * @param readTimeoutMillis The read timeout, in milliseconds. A timeout of zero is interpreted as * an infinite timeout. + * @deprecated Use {@link #DefaultHttpDataSource(String, Predicate, int, int)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public DefaultHttpDataSource( String userAgent, @Nullable Predicate contentTypePredicate, @@ -146,7 +212,10 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou * to HTTPS and vice versa) are enabled. * @param defaultRequestProperties The default request properties to be sent to the server as HTTP * headers or {@code null} if not required. + * @deprecated Use {@link #DefaultHttpDataSource(String, Predicate, int, int, boolean, + * RequestProperties)} and {@link #addTransferListener(TransferListener)}. */ + @Deprecated public DefaultHttpDataSource( String userAgent, @Nullable Predicate contentTypePredicate, @@ -155,14 +224,13 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou int readTimeoutMillis, boolean allowCrossProtocolRedirects, @Nullable RequestProperties defaultRequestProperties) { - super(/* isNetwork= */ true); - this.userAgent = Assertions.checkNotEmpty(userAgent); - this.contentTypePredicate = contentTypePredicate; - this.requestProperties = new RequestProperties(); - this.connectTimeoutMillis = connectTimeoutMillis; - this.readTimeoutMillis = readTimeoutMillis; - this.allowCrossProtocolRedirects = allowCrossProtocolRedirects; - this.defaultRequestProperties = defaultRequestProperties; + this( + userAgent, + contentTypePredicate, + connectTimeoutMillis, + readTimeoutMillis, + allowCrossProtocolRedirects, + defaultRequestProperties); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java index b765e06dd1..582b2b06da 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java @@ -42,12 +42,16 @@ public final class FileDataSource extends BaseDataSource { private boolean opened; public FileDataSource() { - this(null); + super(/* isNetwork= */ false); } - /** @param listener An optional listener. */ + /** + * @param listener An optional listener. + * @deprecated Use {@link #FileDataSource()} and {@link #addTransferListener(TransferListener)} + */ + @Deprecated public FileDataSource(@Nullable TransferListener listener) { - super(/* isNetwork= */ false); + this(); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java index 9ca7273d41..f86ed87c19 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java @@ -74,16 +74,19 @@ public final class RawResourceDataSource extends BaseDataSource { * @param context A context. */ public RawResourceDataSource(Context context) { - this(context, null); + super(/* isNetwork= */ false); + this.resources = context.getResources(); } /** * @param context A context. * @param listener An optional listener. + * @deprecated Use {@link #RawResourceDataSource(Context)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public RawResourceDataSource(Context context, @Nullable TransferListener listener) { - super(/* isNetwork= */ false); - this.resources = context.getResources(); + this(context); if (listener != null) { addTransferListener(listener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java index c7efe316ba..47677d2c47 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java @@ -45,10 +45,8 @@ public final class UdpDataSource extends BaseDataSource { */ public static final int DEFAULT_MAX_PACKET_SIZE = 2000; - /** - * The default socket timeout, in milliseconds. - */ - public static final int DEAFULT_SOCKET_TIMEOUT_MILLIS = 8 * 1000; + /** The default socket timeout, in milliseconds. */ + public static final int DEFAULT_SOCKET_TIMEOUT_MILLIS = 8 * 1000; private final int socketTimeoutMillis; private final byte[] packetBuffer; @@ -63,31 +61,70 @@ public final class UdpDataSource extends BaseDataSource { private int packetRemaining; - /** @param listener An optional listener. */ + public UdpDataSource() { + this(DEFAULT_MAX_PACKET_SIZE); + } + + /** + * Constructs a new instance. + * + * @param maxPacketSize The maximum datagram packet size, in bytes. + */ + public UdpDataSource(int maxPacketSize) { + this(maxPacketSize, DEFAULT_SOCKET_TIMEOUT_MILLIS); + } + + /** + * Constructs a new instance. + * + * @param maxPacketSize The maximum datagram packet size, in bytes. + * @param socketTimeoutMillis The socket timeout in milliseconds. A timeout of zero is interpreted + * as an infinite timeout. + */ + public UdpDataSource(int maxPacketSize, int socketTimeoutMillis) { + super(/* isNetwork= */ true); + this.socketTimeoutMillis = socketTimeoutMillis; + packetBuffer = new byte[maxPacketSize]; + packet = new DatagramPacket(packetBuffer, 0, maxPacketSize); + } + + /** + * Constructs a new instance. + * + * @param listener An optional listener. + * @deprecated Use {@link #UdpDataSource()} and {@link #addTransferListener(TransferListener)}. + */ + @Deprecated public UdpDataSource(@Nullable TransferListener listener) { this(listener, DEFAULT_MAX_PACKET_SIZE); } /** + * Constructs a new instance. + * * @param listener An optional listener. * @param maxPacketSize The maximum datagram packet size, in bytes. + * @deprecated Use {@link #UdpDataSource(int)} and {@link #addTransferListener(TransferListener)}. */ + @Deprecated public UdpDataSource(@Nullable TransferListener listener, int maxPacketSize) { - this(listener, maxPacketSize, DEAFULT_SOCKET_TIMEOUT_MILLIS); + this(listener, maxPacketSize, DEFAULT_SOCKET_TIMEOUT_MILLIS); } /** + * Constructs a new instance. + * * @param listener An optional listener. * @param maxPacketSize The maximum datagram packet size, in bytes. * @param socketTimeoutMillis The socket timeout in milliseconds. A timeout of zero is interpreted * as an infinite timeout. + * @deprecated Use {@link #UdpDataSource(int, int)} and {@link + * #addTransferListener(TransferListener)}. */ + @Deprecated public UdpDataSource( @Nullable TransferListener listener, int maxPacketSize, int socketTimeoutMillis) { - super(/* isNetwork= */ true); - this.socketTimeoutMillis = socketTimeoutMillis; - packetBuffer = new byte[maxPacketSize]; - packet = new DatagramPacket(packetBuffer, 0, maxPacketSize); + this(maxPacketSize, socketTimeoutMillis); if (listener != null) { addTransferListener(listener); } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSource.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSource.java index e0a2ad0586..d222b4f22f 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSource.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSource.java @@ -60,7 +60,11 @@ public class FakeDataSource extends BaseDataSource { @Override public DataSource createDataSource() { - return new FakeDataSource(fakeDataSet, transferListener, isNetwork); + FakeDataSource dataSource = new FakeDataSource(fakeDataSet, isNetwork); + if (transferListener != null) { + dataSource.addTransferListener(transferListener); + } + return dataSource; } } @@ -79,18 +83,14 @@ public class FakeDataSource extends BaseDataSource { } public FakeDataSource(FakeDataSet fakeDataSet) { - this(fakeDataSet, null, /* isNetwork= */ false); + this(fakeDataSet, /* isNetwork= */ false); } - public FakeDataSource( - FakeDataSet fakeDataSet, @Nullable TransferListener transferListener, boolean isNetwork) { + public FakeDataSource(FakeDataSet fakeDataSet, boolean isNetwork) { super(isNetwork); Assertions.checkNotNull(fakeDataSet); this.fakeDataSet = fakeDataSet; this.openedDataSpecs = new ArrayList<>(); - if (transferListener != null) { - addTransferListener(transferListener); - } } public final FakeDataSet getDataSet() {