diff --git a/extensions/cronet/src/main/gcore_versions.bzl b/extensions/cronet/src/main/gcore_versions.bzl new file mode 100644 index 0000000000..7f9f9c3863 --- /dev/null +++ b/extensions/cronet/src/main/gcore_versions.bzl @@ -0,0 +1,5 @@ +"""GCore versions supporting Cronet.""" +GCORE_VERSIONS = [ + "v10", +] + 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 2ad6da6a54..1af76c11a7 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 @@ -22,7 +22,6 @@ import com.google.android.exoplayer2.upstream.HttpDataSource.Factory; import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.util.Predicate; import java.util.concurrent.Executor; -import org.chromium.net.CronetEngine; /** * A {@link Factory} that produces {@link CronetDataSource}. @@ -34,13 +33,14 @@ public final class CronetDataSourceFactory extends BaseFactory { */ public static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = CronetDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS; + /** * The default read timeout, in milliseconds. */ public static final int DEFAULT_READ_TIMEOUT_MILLIS = CronetDataSource.DEFAULT_READ_TIMEOUT_MILLIS; - private final CronetEngine cronetEngine; + private final CronetEngineFactory cronetEngineFactory; private final Executor executor; private final Predicate contentTypePredicate; private final TransferListener transferListener; @@ -48,18 +48,18 @@ public final class CronetDataSourceFactory extends BaseFactory { private final int readTimeoutMs; private final boolean resetTimeoutOnRedirects; - public CronetDataSourceFactory(CronetEngine cronetEngine, + public CronetDataSourceFactory(CronetEngineFactory cronetEngineFactory, Executor executor, Predicate contentTypePredicate, TransferListener transferListener) { - this(cronetEngine, executor, contentTypePredicate, transferListener, + this(cronetEngineFactory, executor, contentTypePredicate, transferListener, DEFAULT_CONNECT_TIMEOUT_MILLIS, DEFAULT_READ_TIMEOUT_MILLIS, false); } - public CronetDataSourceFactory(CronetEngine cronetEngine, + public CronetDataSourceFactory(CronetEngineFactory cronetEngineFactory, Executor executor, Predicate contentTypePredicate, TransferListener transferListener, int connectTimeoutMs, int readTimeoutMs, boolean resetTimeoutOnRedirects) { - this.cronetEngine = cronetEngine; + this.cronetEngineFactory = cronetEngineFactory; this.executor = executor; this.contentTypePredicate = contentTypePredicate; this.transferListener = transferListener; @@ -71,8 +71,9 @@ public final class CronetDataSourceFactory extends BaseFactory { @Override protected CronetDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) { - return new CronetDataSource(cronetEngine, executor, contentTypePredicate, transferListener, - connectTimeoutMs, readTimeoutMs, resetTimeoutOnRedirects, defaultRequestProperties); + return new CronetDataSource(cronetEngineFactory.createCronetEngine(), executor, + contentTypePredicate, transferListener, connectTimeoutMs, readTimeoutMs, + resetTimeoutOnRedirects, defaultRequestProperties); } } diff --git a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetEngineFactory.java b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetEngineFactory.java new file mode 100644 index 0000000000..0bd74256e4 --- /dev/null +++ b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetEngineFactory.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.ext.cronet; + +import android.content.Context; +import org.chromium.net.CronetEngine; + +/** + * A factory class which creates or reuses a {@link CronetEngine}. + */ +public final class CronetEngineFactory { + + private final Context context; + + private CronetEngine cronetEngine = null; + + /** + * Creates the factory for a {@link CronetEngine}. + * @param context The application context. + */ + public CronetEngineFactory(Context context) { + this.context = context; + } + + /* package */ CronetEngine createCronetEngine() { + if (cronetEngine == null) { + cronetEngine = new CronetEngine.Builder(context).build(); + } + return cronetEngine; + } + +}