diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index fdb2b72475..e69fcb39e2 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -23,6 +23,8 @@
been handled and the values reported through callbacks are again
completely consistent with the values obtained from the `Player`
getters.
+ * Deprecate `HttpDataSource.Factory.getDefaultRequestProperties` and add
+ `HttpDataSource.Factory.setDefaultRequestProperties` instead.
* Track selection:
* Add option to specify multiple preferred audio or text languages.
* Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`.
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 85c9d09a79..57e75de3dc 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
@@ -343,7 +343,7 @@ public final class CronetDataSourceFactory extends BaseFactory {
@Override
protected HttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties
defaultRequestProperties) {
- CronetEngine cronetEngine = cronetEngineWrapper.getCronetEngine();
+ @Nullable CronetEngine cronetEngine = cronetEngineWrapper.getCronetEngine();
if (cronetEngine == null) {
return fallbackFactory.createDataSource();
}
diff --git a/library/common/src/main/java/com/google/android/exoplayer2/upstream/DataSpec.java b/library/common/src/main/java/com/google/android/exoplayer2/upstream/DataSpec.java
index 75e23ae6f2..d484779d36 100644
--- a/library/common/src/main/java/com/google/android/exoplayer2/upstream/DataSpec.java
+++ b/library/common/src/main/java/com/google/android/exoplayer2/upstream/DataSpec.java
@@ -343,8 +343,7 @@ public final class DataSpec {
* header directly.
*
Other headers set at the {@link HttpDataSource} layer. I.e., headers set using {@link
* HttpDataSource#setRequestProperty(String, String)}, and using {@link
- * HttpDataSource.RequestProperties#set(String, String)} on the default properties obtained
- * from {@link HttpDataSource.Factory#getDefaultRequestProperties()}.
+ * HttpDataSource.Factory#setDefaultRequestProperties(Map)}.
*
*/
public final Map httpRequestHeaders;
diff --git a/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java b/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
index 1c450ca02d..e2ae38b013 100644
--- a/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
+++ b/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
@@ -42,43 +42,23 @@ public interface HttpDataSource extends DataSource {
@Override
HttpDataSource createDataSource();
- /**
- * Gets the default request properties used by all {@link HttpDataSource}s created by the
- * factory. Changes to the properties will be reflected in any future requests made by
- * {@link HttpDataSource}s created by the factory.
- *
- * @return The default request properties of the factory.
- */
+ /** @deprecated Use {@link #setDefaultRequestProperties(Map)} instead. */
+ @Deprecated
RequestProperties getDefaultRequestProperties();
/**
- * Sets a default request header for {@link HttpDataSource} instances created by the factory.
+ * Sets the default request headers for {@link HttpDataSource} instances created by the factory.
*
- * @deprecated Use {@link #getDefaultRequestProperties} instead.
- * @param name The name of the header field.
- * @param value The value of the field.
- */
- @Deprecated
- void setDefaultRequestProperty(String name, String value);
-
- /**
- * Clears a default request header for {@link HttpDataSource} instances created by the factory.
+ * The new request properties will be used for future requests made by {@link HttpDataSource
+ * HttpDataSources} created by the factory, including instances that have already been created.
+ * Modifying the {@code defaultRequestProperties} map after a call to this method will have no
+ * effect, and so it's necessary to call this method again each time the request properties need
+ * to be updated.
*
- * @deprecated Use {@link #getDefaultRequestProperties} instead.
- * @param name The name of the header field.
+ * @param defaultRequestProperties The default request properties.
+ * @return This factory.
*/
- @Deprecated
- void clearDefaultRequestProperty(String name);
-
- /**
- * Clears all default request headers for all {@link HttpDataSource} instances created by the
- * factory.
- *
- * @deprecated Use {@link #getDefaultRequestProperties} instead.
- */
- @Deprecated
- void clearAllDefaultRequestProperties();
-
+ Factory setDefaultRequestProperties(Map defaultRequestProperties);
}
/**
@@ -159,12 +139,9 @@ public interface HttpDataSource extends DataSource {
}
return requestPropertiesSnapshot;
}
-
}
- /**
- * Base implementation of {@link Factory} that sets default request properties.
- */
+ /** Base implementation of {@link Factory} that sets default request properties. */
abstract class BaseFactory implements Factory {
private final RequestProperties defaultRequestProperties;
@@ -178,30 +155,17 @@ public interface HttpDataSource extends DataSource {
return createDataSourceInternal(defaultRequestProperties);
}
+ /** @deprecated Use {@link #setDefaultRequestProperties(Map)} instead. */
+ @Deprecated
@Override
public final RequestProperties getDefaultRequestProperties() {
return defaultRequestProperties;
}
- /** @deprecated Use {@link #getDefaultRequestProperties} instead. */
- @Deprecated
@Override
- public final void setDefaultRequestProperty(String name, String value) {
- defaultRequestProperties.set(name, value);
- }
-
- /** @deprecated Use {@link #getDefaultRequestProperties} instead. */
- @Deprecated
- @Override
- public final void clearDefaultRequestProperty(String name) {
- defaultRequestProperties.remove(name);
- }
-
- /** @deprecated Use {@link #getDefaultRequestProperties} instead. */
- @Deprecated
- @Override
- public final void clearAllDefaultRequestProperties() {
- defaultRequestProperties.clear();
+ public final Factory setDefaultRequestProperties(Map defaultRequestProperties) {
+ this.defaultRequestProperties.clearAndSet(defaultRequestProperties);
+ return this;
}
/**
@@ -211,9 +175,8 @@ public interface HttpDataSource extends DataSource {
* {@link HttpDataSource} instance.
* @return A {@link HttpDataSource} instance.
*/
- protected abstract HttpDataSource createDataSourceInternal(RequestProperties
- defaultRequestProperties);
-
+ protected abstract HttpDataSource createDataSourceInternal(
+ RequestProperties defaultRequestProperties);
}
/** A {@link Predicate} that rejects content types often used for pay-walls. */