Skip to content

Commit 3d54ef5

Browse files
sjuddglide-copybara-robot
authored andcommittedJan 15, 2020
Rollforward exposing cronet glide modules
PiperOrigin-RevId: 289954530
1 parent 1dd0576 commit 3d54ef5

File tree

4 files changed

+127
-2
lines changed

4 files changed

+127
-2
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1-
<manifest package="com.bumptech.glide.integration.cronet">
2-
<application />
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
package="com.bumptech.glide.integration.cronet">
3+
<application>
4+
<meta-data
5+
android:name="com.bumptech.glide.integration.cronet.CronetGlideModule"
6+
android:value="GlideModule" />
7+
</application>
38
</manifest>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.bumptech.glide.integration.cronet;
2+
3+
import android.content.Context;
4+
import org.chromium.net.CronetEngine;
5+
6+
/**
7+
* Class controlling singleton instance of the CronetEngine. Ensures at most one instance of the
8+
* CronetEngine is created.
9+
*/
10+
// NOTE: This is a standalone class and not a memoized supplier as the CronetEngine creations
11+
// requires a parameter, namedly a Context reference.
12+
public final class CronetEngineSingleton {
13+
14+
// non instantiable
15+
private CronetEngineSingleton() {}
16+
17+
private static volatile CronetEngine cronetEngineSingleton;
18+
19+
public static CronetEngine getSingleton(Context context) {
20+
21+
// Lazily create the engine.
22+
if (cronetEngineSingleton == null) {
23+
synchronized (CronetEngineSingleton.class) {
24+
// have to re-check since this might have changed before synchronization, but we don't
25+
// want to synchronize just to check for null.
26+
if (cronetEngineSingleton == null) {
27+
cronetEngineSingleton = createEngine(context);
28+
}
29+
}
30+
}
31+
32+
return cronetEngineSingleton;
33+
}
34+
35+
private static CronetEngine createEngine(Context context) {
36+
return new CronetEngine.Builder(context)
37+
.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISABLED, 0)
38+
.enableHttp2(true)
39+
.enableQuic(false)
40+
.build();
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.bumptech.glide.integration.cronet;
2+
3+
import android.content.Context;
4+
import com.bumptech.glide.Glide;
5+
import com.bumptech.glide.GlideBuilder;
6+
import com.bumptech.glide.Registry;
7+
import com.bumptech.glide.load.model.GlideUrl;
8+
import com.bumptech.glide.module.GlideModule;
9+
import com.google.common.base.Supplier;
10+
import java.io.InputStream;
11+
import java.nio.ByteBuffer;
12+
import org.chromium.net.CronetEngine;
13+
14+
/**
15+
* A {@link GlideModule} that registers components allowing remote image fetching to be done using
16+
* Cronet.
17+
*/
18+
public final class CronetGlideModule implements GlideModule {
19+
20+
@Override
21+
public void applyOptions(Context context, GlideBuilder builder) {}
22+
23+
@Override
24+
public void registerComponents(final Context context, Glide glide, Registry registry) {
25+
CronetRequestFactory factory =
26+
new CronetRequestFactoryImpl(
27+
new Supplier<CronetEngine>() {
28+
@Override
29+
public CronetEngine get() {
30+
return CronetEngineSingleton.getSingleton(context);
31+
}
32+
});
33+
registry.replace(
34+
GlideUrl.class, InputStream.class, new ChromiumUrlLoader.StreamFactory(factory, null));
35+
registry.prepend(
36+
GlideUrl.class, ByteBuffer.class, new ChromiumUrlLoader.ByteBufferFactory(factory, null));
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.bumptech.glide.integration.cronet;
2+
3+
import android.content.Context;
4+
import androidx.annotation.NonNull;
5+
import com.bumptech.glide.Glide;
6+
import com.bumptech.glide.Registry;
7+
import com.bumptech.glide.annotation.GlideModule;
8+
import com.bumptech.glide.integration.cronet.ChromiumUrlLoader.ByteBufferFactory;
9+
import com.bumptech.glide.integration.cronet.ChromiumUrlLoader.StreamFactory;
10+
import com.bumptech.glide.load.model.GlideUrl;
11+
import com.bumptech.glide.module.LibraryGlideModule;
12+
import com.google.common.base.Supplier;
13+
import java.io.InputStream;
14+
import java.nio.ByteBuffer;
15+
import org.chromium.net.CronetEngine;
16+
17+
/**
18+
* A {@link LibraryGlideModule} that registers components allowing remote image fetching to be done
19+
* using Cronet.
20+
*/
21+
@GlideModule
22+
public final class CronetLibraryGlideModule extends LibraryGlideModule {
23+
24+
@Override
25+
public void registerComponents(
26+
final @NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
27+
CronetRequestFactory factory =
28+
new CronetRequestFactoryImpl(
29+
new Supplier<CronetEngine>() {
30+
@Override
31+
public CronetEngine get() {
32+
return CronetEngineSingleton.getSingleton(context);
33+
}
34+
});
35+
registry.replace(
36+
GlideUrl.class, InputStream.class, new StreamFactory(factory, null /* dataLogger */));
37+
registry.prepend(
38+
GlideUrl.class, ByteBuffer.class, new ByteBufferFactory(factory, null /* dataLogger */));
39+
}
40+
}

0 commit comments

Comments
 (0)
Please sign in to comment.