Commit 04824dfd by bachinger Committed by Oliver Woodman

Make DefaultHttpDataSourceFactory an inner class of the built class

#exofixit

PiperOrigin-RevId: 348441436
parent 5e47c3c5
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
`HttpDataSource.Factory.setDefaultRequestProperties` instead. `HttpDataSource.Factory.setDefaultRequestProperties` instead.
* Fix playback issues after seeking during an ad * Fix playback issues after seeking during an ad
([#8349](https://github.com/google/ExoPlayer/issues/8349)) ([#8349](https://github.com/google/ExoPlayer/issues/8349))
* Add `DefaultHttpDataSource.Factory` and deprecate
`DefaultHttpDataSourceFactory`.
* Track selection: * Track selection:
* Add option to specify multiple preferred audio or text languages. * Add option to specify multiple preferred audio or text languages.
* Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`. * Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`.
......
...@@ -132,12 +132,12 @@ public final class DefaultDataSource implements DataSource { ...@@ -132,12 +132,12 @@ public final class DefaultDataSource implements DataSource {
boolean allowCrossProtocolRedirects) { boolean allowCrossProtocolRedirects) {
this( this(
context, context,
new DefaultHttpDataSource( new DefaultHttpDataSource.Factory()
userAgent, .setUserAgent(userAgent)
connectTimeoutMillis, .setConnectTimeoutMs(connectTimeoutMillis)
readTimeoutMillis, .setReadTimeoutMs(readTimeoutMillis)
allowCrossProtocolRedirects, .setAllowCrossProtocolRedirects(allowCrossProtocolRedirects)
/* defaultRequestProperties= */ null)); .createDataSource());
} }
/** /**
......
...@@ -59,7 +59,7 @@ public final class DefaultDataSourceFactory implements Factory { ...@@ -59,7 +59,7 @@ public final class DefaultDataSourceFactory implements Factory {
*/ */
public DefaultDataSourceFactory( public DefaultDataSourceFactory(
Context context, String userAgent, @Nullable TransferListener listener) { Context context, String userAgent, @Nullable TransferListener listener) {
this(context, listener, new DefaultHttpDataSourceFactory(userAgent, listener)); this(context, listener, new DefaultHttpDataSource.Factory().setUserAgent(userAgent));
} }
/** /**
......
...@@ -19,10 +19,10 @@ import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AG ...@@ -19,10 +19,10 @@ import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AG
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.upstream.HttpDataSource.BaseFactory; import com.google.android.exoplayer2.upstream.HttpDataSource.BaseFactory;
import com.google.android.exoplayer2.upstream.HttpDataSource.Factory;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
/** A {@link Factory} that produces {@link DefaultHttpDataSource} instances. */ /** @deprecated Use {@link DefaultHttpDataSource.Factory} instead. */
@Deprecated
public final class DefaultHttpDataSourceFactory extends BaseFactory { public final class DefaultHttpDataSourceFactory extends BaseFactory {
private final String userAgent; private final String userAgent;
...@@ -110,6 +110,8 @@ public final class DefaultHttpDataSourceFactory extends BaseFactory { ...@@ -110,6 +110,8 @@ public final class DefaultHttpDataSourceFactory extends BaseFactory {
this.allowCrossProtocolRedirects = allowCrossProtocolRedirects; this.allowCrossProtocolRedirects = allowCrossProtocolRedirects;
} }
// Calls deprecated constructor.
@SuppressWarnings("deprecation")
@Override @Override
protected DefaultHttpDataSource createDataSourceInternal( protected DefaultHttpDataSource createDataSourceInternal(
HttpDataSource.RequestProperties defaultRequestProperties) { HttpDataSource.RequestProperties defaultRequestProperties) {
......
...@@ -57,19 +57,18 @@ public class DefaultHttpDataSourceTest { ...@@ -57,19 +57,18 @@ public class DefaultHttpDataSourceTest {
MockWebServer mockWebServer = new MockWebServer(); MockWebServer mockWebServer = new MockWebServer();
mockWebServer.enqueue(new MockResponse()); mockWebServer.enqueue(new MockResponse());
String propertyFromConstructor = "fromConstructor"; String propertyFromFactory = "fromFactory";
HttpDataSource.RequestProperties constructorProperties = new HttpDataSource.RequestProperties(); Map<String, String> defaultRequestProperties = new HashMap<>();
constructorProperties.set("0", propertyFromConstructor); defaultRequestProperties.put("0", propertyFromFactory);
constructorProperties.set("1", propertyFromConstructor); defaultRequestProperties.put("1", propertyFromFactory);
constructorProperties.set("2", propertyFromConstructor); defaultRequestProperties.put("2", propertyFromFactory);
constructorProperties.set("4", propertyFromConstructor); defaultRequestProperties.put("4", propertyFromFactory);
DefaultHttpDataSource dataSource = DefaultHttpDataSource dataSource =
new DefaultHttpDataSource( new DefaultHttpDataSource.Factory()
/* userAgent= */ "testAgent", .setConnectTimeoutMs(1000)
/* connectTimeoutMillis= */ 1000, .setReadTimeoutMs(1000)
/* readTimeoutMillis= */ 1000, .setDefaultRequestProperties(defaultRequestProperties)
/* allowCrossProtocolRedirects= */ false, .createDataSource();
constructorProperties);
String propertyFromSetter = "fromSetter"; String propertyFromSetter = "fromSetter";
dataSource.setRequestProperty("1", propertyFromSetter); dataSource.setRequestProperty("1", propertyFromSetter);
...@@ -92,7 +91,7 @@ public class DefaultHttpDataSourceTest { ...@@ -92,7 +91,7 @@ public class DefaultHttpDataSourceTest {
dataSource.open(dataSpec); dataSource.open(dataSpec);
Headers headers = mockWebServer.takeRequest(10, SECONDS).getHeaders(); Headers headers = mockWebServer.takeRequest(10, SECONDS).getHeaders();
assertThat(headers.get("0")).isEqualTo(propertyFromConstructor); assertThat(headers.get("0")).isEqualTo(propertyFromFactory);
assertThat(headers.get("1")).isEqualTo(propertyFromSetter); assertThat(headers.get("1")).isEqualTo(propertyFromSetter);
assertThat(headers.get("2")).isEqualTo(propertyFromDataSpec); assertThat(headers.get("2")).isEqualTo(propertyFromDataSpec);
assertThat(headers.get("3")).isEqualTo(propertyFromDataSpec); assertThat(headers.get("3")).isEqualTo(propertyFromDataSpec);
...@@ -102,14 +101,12 @@ public class DefaultHttpDataSourceTest { ...@@ -102,14 +101,12 @@ public class DefaultHttpDataSourceTest {
} }
@Test @Test
public void open_invalidResponseCode() throws Exception { public void open_invalidResponseCode() {
DefaultHttpDataSource defaultHttpDataSource = DefaultHttpDataSource defaultHttpDataSource =
new DefaultHttpDataSource( new DefaultHttpDataSource.Factory()
/* userAgent= */ "testAgent", .setConnectTimeoutMs(1000)
/* connectTimeoutMillis= */ 1000, .setReadTimeoutMs(1000)
/* readTimeoutMillis= */ 1000, .createDataSource();
/* allowCrossProtocolRedirects= */ false,
/* defaultRequestProperties= */ null);
MockWebServer mockWebServer = new MockWebServer(); MockWebServer mockWebServer = new MockWebServer();
mockWebServer.enqueue( mockWebServer.enqueue(
...@@ -128,4 +125,22 @@ public class DefaultHttpDataSourceTest { ...@@ -128,4 +125,22 @@ public class DefaultHttpDataSourceTest {
assertThat(exception.responseCode).isEqualTo(404); assertThat(exception.responseCode).isEqualTo(404);
assertThat(exception.responseBody).isEqualTo(TestUtil.createByteArray(1, 2, 3)); assertThat(exception.responseBody).isEqualTo(TestUtil.createByteArray(1, 2, 3));
} }
@Test
public void factory_setRequestPropertyAfterCreation_setsCorrectHeaders() throws Exception {
MockWebServer mockWebServer = new MockWebServer();
mockWebServer.enqueue(new MockResponse());
DataSpec dataSpec =
new DataSpec.Builder().setUri(mockWebServer.url("/test-path").toString()).build();
DefaultHttpDataSource.Factory factory = new DefaultHttpDataSource.Factory();
HttpDataSource dataSource = factory.createDataSource();
Map<String, String> defaultRequestProperties = new HashMap<>();
defaultRequestProperties.put("0", "afterCreation");
factory.setDefaultRequestProperties(defaultRequestProperties);
dataSource.open(dataSpec);
Headers headers = mockWebServer.takeRequest(10, SECONDS).getHeaders();
assertThat(headers.get("0")).isEqualTo("afterCreation");
}
} }
...@@ -26,7 +26,8 @@ import com.google.android.exoplayer2.upstream.DefaultHttpDataSource; ...@@ -26,7 +26,8 @@ import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
/** Fake {@link MediaChunk}. */ /** Fake {@link MediaChunk}. */
public final class FakeMediaChunk extends MediaChunk { public final class FakeMediaChunk extends MediaChunk {
private static final DataSource DATA_SOURCE = new DefaultHttpDataSource("TEST_AGENT"); private static final DataSource DATA_SOURCE =
new DefaultHttpDataSource.Factory().setUserAgent("TEST_AGENT").createDataSource();
/** /**
* Creates a fake media chunk. * Creates a fake media chunk.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment