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. */