mirror of
https://github.com/androidx/media.git
synced 2025-05-05 06:30:24 +08:00
Merge pull request #1909 from kaorimatz/okhttp-call-factory
Use Call.Factory instead of OkHttpClient
This commit is contained in:
commit
93c2133f29
@ -32,21 +32,21 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import okhttp3.CacheControl;
|
import okhttp3.CacheControl;
|
||||||
|
import okhttp3.Call;
|
||||||
import okhttp3.HttpUrl;
|
import okhttp3.HttpUrl;
|
||||||
import okhttp3.MediaType;
|
import okhttp3.MediaType;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.RequestBody;
|
import okhttp3.RequestBody;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An {@link HttpDataSource} that delegates to Square's {@link OkHttpClient}.
|
* An {@link HttpDataSource} that delegates to Square's {@link Call.Factory}.
|
||||||
*/
|
*/
|
||||||
public class OkHttpDataSource implements HttpDataSource {
|
public class OkHttpDataSource implements HttpDataSource {
|
||||||
|
|
||||||
private static final AtomicReference<byte[]> skipBufferReference = new AtomicReference<>();
|
private static final AtomicReference<byte[]> skipBufferReference = new AtomicReference<>();
|
||||||
|
|
||||||
private final OkHttpClient okHttpClient;
|
private final Call.Factory callFactory;
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
private final Predicate<String> contentTypePredicate;
|
private final Predicate<String> contentTypePredicate;
|
||||||
private final TransferListener<? super OkHttpDataSource> listener;
|
private final TransferListener<? super OkHttpDataSource> listener;
|
||||||
@ -65,31 +65,31 @@ public class OkHttpDataSource implements HttpDataSource {
|
|||||||
private long bytesRead;
|
private long bytesRead;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param client An {@link OkHttpClient} for use by the source.
|
* @param callFactory An {@link Call.Factory} for use by the source.
|
||||||
* @param userAgent The User-Agent string that should be used.
|
* @param userAgent The User-Agent string that should be used.
|
||||||
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
||||||
* predicate then a InvalidContentTypeException} is thrown from {@link #open(DataSpec)}.
|
* predicate then a InvalidContentTypeException} is thrown from {@link #open(DataSpec)}.
|
||||||
*/
|
*/
|
||||||
public OkHttpDataSource(OkHttpClient client, String userAgent,
|
public OkHttpDataSource(Call.Factory callFactory, String userAgent,
|
||||||
Predicate<String> contentTypePredicate) {
|
Predicate<String> contentTypePredicate) {
|
||||||
this(client, userAgent, contentTypePredicate, null);
|
this(callFactory, userAgent, contentTypePredicate, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param client An {@link OkHttpClient} for use by the source.
|
* @param callFactory An {@link Call.Factory} for use by the source.
|
||||||
* @param userAgent The User-Agent string that should be used.
|
* @param userAgent The User-Agent string that should be used.
|
||||||
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
||||||
* predicate then a {@link InvalidContentTypeException} is thrown from
|
* predicate then a {@link InvalidContentTypeException} is thrown from
|
||||||
* {@link #open(DataSpec)}.
|
* {@link #open(DataSpec)}.
|
||||||
* @param listener An optional listener.
|
* @param listener An optional listener.
|
||||||
*/
|
*/
|
||||||
public OkHttpDataSource(OkHttpClient client, String userAgent,
|
public OkHttpDataSource(Call.Factory callFactory, String userAgent,
|
||||||
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> listener) {
|
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> listener) {
|
||||||
this(client, userAgent, contentTypePredicate, listener, null);
|
this(callFactory, userAgent, contentTypePredicate, listener, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param client An {@link OkHttpClient} for use by the source.
|
* @param callFactory An {@link Call.Factory} for use by the source.
|
||||||
* @param userAgent The User-Agent string that should be used.
|
* @param userAgent The User-Agent string that should be used.
|
||||||
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
* @param contentTypePredicate An optional {@link Predicate}. If a content type is rejected by the
|
||||||
* predicate then a {@link InvalidContentTypeException} is thrown from
|
* predicate then a {@link InvalidContentTypeException} is thrown from
|
||||||
@ -98,10 +98,10 @@ public class OkHttpDataSource implements HttpDataSource {
|
|||||||
* @param cacheControl An optional {@link CacheControl} which sets all requests' Cache-Control
|
* @param cacheControl An optional {@link CacheControl} which sets all requests' Cache-Control
|
||||||
* header. For example, you could force the network response for all requests.
|
* header. For example, you could force the network response for all requests.
|
||||||
*/
|
*/
|
||||||
public OkHttpDataSource(OkHttpClient client, String userAgent,
|
public OkHttpDataSource(Call.Factory callFactory, String userAgent,
|
||||||
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> listener,
|
Predicate<String> contentTypePredicate, TransferListener<? super OkHttpDataSource> listener,
|
||||||
CacheControl cacheControl) {
|
CacheControl cacheControl) {
|
||||||
this.okHttpClient = Assertions.checkNotNull(client);
|
this.callFactory = Assertions.checkNotNull(callFactory);
|
||||||
this.userAgent = Assertions.checkNotEmpty(userAgent);
|
this.userAgent = Assertions.checkNotEmpty(userAgent);
|
||||||
this.contentTypePredicate = contentTypePredicate;
|
this.contentTypePredicate = contentTypePredicate;
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
@ -150,7 +150,7 @@ public class OkHttpDataSource implements HttpDataSource {
|
|||||||
this.bytesSkipped = 0;
|
this.bytesSkipped = 0;
|
||||||
Request request = makeRequest(dataSpec);
|
Request request = makeRequest(dataSpec);
|
||||||
try {
|
try {
|
||||||
response = okHttpClient.newCall(request).execute();
|
response = callFactory.newCall(request).execute();
|
||||||
responseByteStream = response.body().byteStream();
|
responseByteStream = response.body().byteStream();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new HttpDataSourceException("Unable to connect to " + dataSpec.uri.toString(), e,
|
throw new HttpDataSourceException("Unable to connect to " + dataSpec.uri.toString(), e,
|
||||||
|
@ -19,26 +19,26 @@ import com.google.android.exoplayer2.upstream.DataSource;
|
|||||||
import com.google.android.exoplayer2.upstream.HttpDataSource.Factory;
|
import com.google.android.exoplayer2.upstream.HttpDataSource.Factory;
|
||||||
import com.google.android.exoplayer2.upstream.TransferListener;
|
import com.google.android.exoplayer2.upstream.TransferListener;
|
||||||
import okhttp3.CacheControl;
|
import okhttp3.CacheControl;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.Call;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link Factory} that produces {@link OkHttpDataSource}.
|
* A {@link Factory} that produces {@link OkHttpDataSource}.
|
||||||
*/
|
*/
|
||||||
public final class OkHttpDataSourceFactory implements Factory {
|
public final class OkHttpDataSourceFactory implements Factory {
|
||||||
|
|
||||||
private final OkHttpClient client;
|
private final Call.Factory callFactory;
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
private final TransferListener<? super DataSource> transferListener;
|
private final TransferListener<? super DataSource> transferListener;
|
||||||
private final CacheControl cacheControl;
|
private final CacheControl cacheControl;
|
||||||
|
|
||||||
public OkHttpDataSourceFactory(OkHttpClient client, String userAgent,
|
public OkHttpDataSourceFactory(Call.Factory callFactory, String userAgent,
|
||||||
TransferListener<? super DataSource> transferListener) {
|
TransferListener<? super DataSource> transferListener) {
|
||||||
this(client, userAgent, transferListener, null);
|
this(callFactory, userAgent, transferListener, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OkHttpDataSourceFactory(OkHttpClient client, String userAgent,
|
public OkHttpDataSourceFactory(Call.Factory callFactory, String userAgent,
|
||||||
TransferListener<? super DataSource> transferListener, CacheControl cacheControl) {
|
TransferListener<? super DataSource> transferListener, CacheControl cacheControl) {
|
||||||
this.client = client;
|
this.callFactory = callFactory;
|
||||||
this.userAgent = userAgent;
|
this.userAgent = userAgent;
|
||||||
this.transferListener = transferListener;
|
this.transferListener = transferListener;
|
||||||
this.cacheControl = cacheControl;
|
this.cacheControl = cacheControl;
|
||||||
@ -46,7 +46,7 @@ public final class OkHttpDataSourceFactory implements Factory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OkHttpDataSource createDataSource() {
|
public OkHttpDataSource createDataSource() {
|
||||||
return new OkHttpDataSource(client, userAgent, null, transferListener, cacheControl);
|
return new OkHttpDataSource(callFactory, userAgent, null, transferListener, cacheControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user