diff --git a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java index 0e2bddf820..d497929241 100644 --- a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java +++ b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java @@ -48,7 +48,7 @@ public class OkHttpDataSource implements HttpDataSource { private final OkHttpClient okHttpClient; private final String userAgent; private final Predicate contentTypePredicate; - private final TransferListener listener; + private final TransferListener listener; private final CacheControl cacheControl; private final HashMap requestProperties; @@ -83,7 +83,7 @@ public class OkHttpDataSource implements HttpDataSource { * @param listener An optional listener. */ public OkHttpDataSource(OkHttpClient client, String userAgent, - Predicate contentTypePredicate, TransferListener listener) { + Predicate contentTypePredicate, TransferListener listener) { this(client, userAgent, contentTypePredicate, listener, null); } @@ -96,10 +96,9 @@ public class OkHttpDataSource implements HttpDataSource { * @param listener An optional listener. * @param cacheControl An optional {@link CacheControl} which sets all requests' Cache-Control * header. For example, you could force the network response for all requests. - * */ public OkHttpDataSource(OkHttpClient client, String userAgent, - Predicate contentTypePredicate, TransferListener listener, + Predicate contentTypePredicate, TransferListener listener, CacheControl cacheControl) { this.okHttpClient = Assertions.checkNotNull(client); this.userAgent = Assertions.checkNotEmpty(userAgent); @@ -187,7 +186,7 @@ public class OkHttpDataSource implements HttpDataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return bytesToRead; @@ -208,7 +207,7 @@ public class OkHttpDataSource implements HttpDataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } closeConnectionQuietly(); } @@ -311,7 +310,7 @@ public class OkHttpDataSource implements HttpDataSource { } bytesSkipped += read; if (listener != null) { - listener.onBytesTransferred(read); + listener.onBytesTransferred(this, read); } } @@ -352,7 +351,7 @@ public class OkHttpDataSource implements HttpDataSource { bytesRead += read; if (listener != null) { - listener.onBytesTransferred(read); + listener.onBytesTransferred(this, read); } return read; } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java b/library/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java index 94bcf5de32..f18b1bc8a7 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/AssetDataSource.java @@ -40,7 +40,7 @@ public final class AssetDataSource implements DataSource { } private final AssetManager assetManager; - private final TransferListener listener; + private final TransferListener listener; private Uri uri; private InputStream inputStream; @@ -58,7 +58,7 @@ public final class AssetDataSource implements DataSource { * @param context A context. * @param listener An optional listener. */ - public AssetDataSource(Context context, TransferListener listener) { + public AssetDataSource(Context context, TransferListener listener) { this.assetManager = context.getAssets(); this.listener = listener; } @@ -97,7 +97,7 @@ public final class AssetDataSource implements DataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return bytesRemaining; } @@ -121,7 +121,7 @@ public final class AssetDataSource implements DataSource { bytesRemaining -= bytesRead; } if (listener != null) { - listener.onBytesTransferred(bytesRead); + listener.onBytesTransferred(this, bytesRead); } } @@ -147,7 +147,7 @@ public final class AssetDataSource implements DataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } } } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java b/library/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java index 3f7437e94a..9078d66f40 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/ContentDataSource.java @@ -42,7 +42,7 @@ public final class ContentDataSource implements DataSource { } private final ContentResolver resolver; - private final TransferListener listener; + private final TransferListener listener; private Uri uri; private InputStream inputStream; @@ -60,7 +60,7 @@ public final class ContentDataSource implements DataSource { * @param context A context. * @param listener An optional listener. */ - public ContentDataSource(Context context, TransferListener listener) { + public ContentDataSource(Context context, TransferListener listener) { this.resolver = context.getContentResolver(); this.listener = listener; } @@ -94,7 +94,7 @@ public final class ContentDataSource implements DataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return bytesRemaining; @@ -119,7 +119,7 @@ public final class ContentDataSource implements DataSource { bytesRemaining -= bytesRead; } if (listener != null) { - listener.onBytesTransferred(bytesRead); + listener.onBytesTransferred(this, bytesRead); } } @@ -145,7 +145,7 @@ public final class ContentDataSource implements DataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } } } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java b/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java index c395c73da2..20f28e7a7d 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java @@ -24,7 +24,7 @@ import com.google.android.exoplayer2.util.SlidingPercentile; * Estimates bandwidth by listening to data transfers. The bandwidth estimate is calculated using * a {@link SlidingPercentile} and is updated each time a transfer ends. */ -public final class DefaultBandwidthMeter implements BandwidthMeter, TransferListener { +public final class DefaultBandwidthMeter implements BandwidthMeter, TransferListener { /** * The default maximum weight for the sliding window. @@ -67,7 +67,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList } @Override - public synchronized void onTransferStart() { + public synchronized void onTransferStart(Object source, DataSpec dataSpec) { if (streamCount == 0) { sampleStartTimeMs = SystemClock.elapsedRealtime(); } @@ -75,12 +75,12 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList } @Override - public synchronized void onBytesTransferred(int bytes) { + public synchronized void onBytesTransferred(Object source, int bytes) { sampleBytesTransferred += bytes; } @Override - public synchronized void onTransferEnd() { + public synchronized void onTransferEnd(Object source) { Assertions.checkState(streamCount > 0); long nowMs = SystemClock.elapsedRealtime(); int sampleElapsedTimeMs = (int) (nowMs - sampleStartTimeMs); diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java index 9015814652..1e90448038 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java @@ -71,7 +71,7 @@ public class DefaultHttpDataSource implements HttpDataSource { private final String userAgent; private final Predicate contentTypePredicate; private final HashMap requestProperties; - private final TransferListener listener; + private final TransferListener listener; private DataSpec dataSpec; private HttpURLConnection connection; @@ -102,7 +102,7 @@ public class DefaultHttpDataSource implements HttpDataSource { * @param listener An optional listener. */ public DefaultHttpDataSource(String userAgent, Predicate contentTypePredicate, - TransferListener listener) { + TransferListener listener) { this(userAgent, contentTypePredicate, listener, DEFAULT_CONNECT_TIMEOUT_MILLIS, DEFAULT_READ_TIMEOUT_MILLIS); } @@ -119,7 +119,8 @@ public class DefaultHttpDataSource implements HttpDataSource { * as an infinite timeout. */ public DefaultHttpDataSource(String userAgent, Predicate contentTypePredicate, - TransferListener listener, int connectTimeoutMillis, int readTimeoutMillis) { + TransferListener listener, int connectTimeoutMillis, + int readTimeoutMillis) { this(userAgent, contentTypePredicate, listener, connectTimeoutMillis, readTimeoutMillis, false); } @@ -138,8 +139,8 @@ public class DefaultHttpDataSource implements HttpDataSource { * to HTTPS and vice versa) are enabled. */ public DefaultHttpDataSource(String userAgent, Predicate contentTypePredicate, - TransferListener listener, int connectTimeoutMillis, int readTimeoutMillis, - boolean allowCrossProtocolRedirects) { + TransferListener listener, int connectTimeoutMillis, + int readTimeoutMillis, boolean allowCrossProtocolRedirects) { this.userAgent = Assertions.checkNotEmpty(userAgent); this.contentTypePredicate = contentTypePredicate; this.listener = listener; @@ -246,7 +247,7 @@ public class DefaultHttpDataSource implements HttpDataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return bytesToRead; @@ -279,7 +280,7 @@ public class DefaultHttpDataSource implements HttpDataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } } } @@ -518,7 +519,7 @@ public class DefaultHttpDataSource implements HttpDataSource { } bytesSkipped += read; if (listener != null) { - listener.onBytesTransferred(read); + listener.onBytesTransferred(this, read); } } @@ -559,7 +560,7 @@ public class DefaultHttpDataSource implements HttpDataSource { bytesRead += read; if (listener != null) { - listener.onBytesTransferred(read); + listener.onBytesTransferred(this, read); } return read; } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java b/library/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java index 503882ec5a..edcf15509c 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/FileDataSource.java @@ -37,7 +37,7 @@ public final class FileDataSource implements DataSource { } - private final TransferListener listener; + private final TransferListener listener; private RandomAccessFile file; private Uri uri; @@ -51,7 +51,7 @@ public final class FileDataSource implements DataSource { /** * @param listener An optional listener. */ - public FileDataSource(TransferListener listener) { + public FileDataSource(TransferListener listener) { this.listener = listener; } @@ -72,7 +72,7 @@ public final class FileDataSource implements DataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return bytesRemaining; @@ -93,7 +93,7 @@ public final class FileDataSource implements DataSource { if (bytesRead > 0) { bytesRemaining -= bytesRead; if (listener != null) { - listener.onBytesTransferred(bytesRead); + listener.onBytesTransferred(this, bytesRead); } } @@ -119,7 +119,7 @@ public final class FileDataSource implements DataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } } } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/TransferListener.java b/library/src/main/java/com/google/android/exoplayer2/upstream/TransferListener.java index 9150af462b..e061f0c7d0 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/TransferListener.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/TransferListener.java @@ -18,24 +18,30 @@ package com.google.android.exoplayer2.upstream; /** * A listener of data transfer events. */ -public interface TransferListener { +public interface TransferListener { /** * Called when a transfer starts. + * + * @param source The source performing the transfer. + * @param dataSpec Describes the data being transferred. */ - void onTransferStart(); + void onTransferStart(S source, DataSpec dataSpec); /** * Called incrementally during a transfer. * + * @param source The source performing the transfer. * @param bytesTransferred The number of bytes transferred since the previous call to this * method (or if the first call, since the transfer was started). */ - void onBytesTransferred(int bytesTransferred); + void onBytesTransferred(S source, int bytesTransferred); /** * Called when a transfer ends. + * + * @param source The source performing the transfer. */ - void onTransferEnd(); + void onTransferEnd(S source); } diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java b/library/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java index 4c25bc453a..9e8a88b3be 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/UdpDataSource.java @@ -51,7 +51,7 @@ public final class UdpDataSource implements DataSource { */ public static final int DEAFULT_SOCKET_TIMEOUT_MILLIS = 8 * 1000; - private final TransferListener listener; + private final TransferListener listener; private final int socketTimeoutMillis; private final byte[] packetBuffer; private final DatagramPacket packet; @@ -76,7 +76,7 @@ public final class UdpDataSource implements DataSource { * @param listener An optional listener. * @param maxPacketSize The maximum datagram packet size, in bytes. */ - public UdpDataSource(TransferListener listener, int maxPacketSize) { + public UdpDataSource(TransferListener listener, int maxPacketSize) { this(listener, maxPacketSize, DEAFULT_SOCKET_TIMEOUT_MILLIS); } @@ -86,7 +86,8 @@ public final class UdpDataSource implements DataSource { * @param socketTimeoutMillis The socket timeout in milliseconds. A timeout of zero is interpreted * as an infinite timeout. */ - public UdpDataSource(TransferListener listener, int maxPacketSize, int socketTimeoutMillis) { + public UdpDataSource(TransferListener listener, int maxPacketSize, + int socketTimeoutMillis) { this.listener = listener; this.socketTimeoutMillis = socketTimeoutMillis; packetBuffer = new byte[maxPacketSize]; @@ -121,7 +122,7 @@ public final class UdpDataSource implements DataSource { opened = true; if (listener != null) { - listener.onTransferStart(); + listener.onTransferStart(this, dataSpec); } return C.LENGTH_UNBOUNDED; } @@ -138,7 +139,7 @@ public final class UdpDataSource implements DataSource { packetRemaining = packet.getLength(); if (listener != null) { - listener.onBytesTransferred(packetRemaining); + listener.onBytesTransferred(this, packetRemaining); } } @@ -175,7 +176,7 @@ public final class UdpDataSource implements DataSource { if (opened) { opened = false; if (listener != null) { - listener.onTransferEnd(); + listener.onTransferEnd(this); } } }