Pass source to TransferListener events

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129622239
This commit is contained in:
olly 2016-08-08 06:05:29 -07:00 committed by Oliver Woodman
parent 3ef837341e
commit a7cb98d991
8 changed files with 53 additions and 46 deletions

View file

@ -48,7 +48,7 @@ public class OkHttpDataSource implements HttpDataSource {
private final OkHttpClient okHttpClient;
private final String userAgent;
private final Predicate<String> contentTypePredicate;
private final TransferListener listener;
private final TransferListener<? super OkHttpDataSource> listener;
private final CacheControl cacheControl;
private final HashMap<String, String> requestProperties;
@ -83,7 +83,7 @@ public class OkHttpDataSource implements HttpDataSource {
* @param listener An optional listener.
*/
public OkHttpDataSource(OkHttpClient client, String userAgent,
Predicate<String> contentTypePredicate, TransferListener listener) {
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> 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<String> contentTypePredicate, TransferListener listener,
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> 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;
}

View file

@ -40,7 +40,7 @@ public final class AssetDataSource implements DataSource {
}
private final AssetManager assetManager;
private final TransferListener listener;
private final TransferListener<? super AssetDataSource> 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<? super AssetDataSource> 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);
}
}
}

View file

@ -42,7 +42,7 @@ public final class ContentDataSource implements DataSource {
}
private final ContentResolver resolver;
private final TransferListener listener;
private final TransferListener<? super ContentDataSource> 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<? super ContentDataSource> 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);
}
}
}

View file

@ -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<Object> {
/**
* 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);

View file

@ -71,7 +71,7 @@ public class DefaultHttpDataSource implements HttpDataSource {
private final String userAgent;
private final Predicate<String> contentTypePredicate;
private final HashMap<String, String> requestProperties;
private final TransferListener listener;
private final TransferListener<? super DefaultHttpDataSource> 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<String> contentTypePredicate,
TransferListener listener) {
TransferListener<? super DefaultHttpDataSource> 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<String> contentTypePredicate,
TransferListener listener, int connectTimeoutMillis, int readTimeoutMillis) {
TransferListener<? super DefaultHttpDataSource> 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<String> contentTypePredicate,
TransferListener listener, int connectTimeoutMillis, int readTimeoutMillis,
boolean allowCrossProtocolRedirects) {
TransferListener<? super DefaultHttpDataSource> 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;
}

View file

@ -37,7 +37,7 @@ public final class FileDataSource implements DataSource {
}
private final TransferListener listener;
private final TransferListener<? super FileDataSource> 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<? super FileDataSource> 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);
}
}
}

View file

@ -18,24 +18,30 @@ package com.google.android.exoplayer2.upstream;
/**
* A listener of data transfer events.
*/
public interface TransferListener {
public interface TransferListener<S> {
/**
* 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);
}

View file

@ -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<? super UdpDataSource> 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<? super UdpDataSource> 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<? super UdpDataSource> 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);
}
}
}