session-android/src/org/thoughtcrime/securesms/glide/OkHttpUrlLoader.java

74 lines
2.1 KiB
Java
Raw Normal View History

2016-10-17 04:05:07 +02:00
package org.thoughtcrime.securesms.glide;
import android.support.annotation.NonNull;
2017-10-12 02:12:46 +02:00
import android.support.annotation.Nullable;
2016-10-17 04:05:07 +02:00
2017-10-12 02:12:46 +02:00
import com.bumptech.glide.load.Options;
2016-10-17 04:05:07 +02:00
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoaderFactory;
2017-10-12 02:12:46 +02:00
import com.bumptech.glide.load.model.MultiModelLoaderFactory;
2016-10-17 04:05:07 +02:00
2019-01-15 09:41:05 +01:00
import org.thoughtcrime.securesms.net.ContentProxySelector;
2016-10-17 04:05:07 +02:00
import java.io.InputStream;
import okhttp3.OkHttpClient;
2016-10-17 04:05:07 +02:00
/**
* A simple model loader for fetching media over http/https using OkHttp.
*/
public class OkHttpUrlLoader implements ModelLoader<GlideUrl, InputStream> {
2017-10-12 02:12:46 +02:00
private final OkHttpClient client;
private OkHttpUrlLoader(OkHttpClient client) {
this.client = client;
}
@Override
public @Nullable LoadData<InputStream> buildLoadData(@NonNull GlideUrl glideUrl, int width, int height, @NonNull Options options) {
2017-10-12 02:12:46 +02:00
return new LoadData<>(glideUrl, new OkHttpStreamFetcher(client, glideUrl));
}
@Override
public boolean handles(@NonNull GlideUrl glideUrl) {
2017-10-12 02:12:46 +02:00
return true;
}
2016-10-17 04:05:07 +02:00
public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {
private static volatile OkHttpClient internalClient;
private OkHttpClient client;
private static OkHttpClient getInternalClient() {
if (internalClient == null) {
synchronized (Factory.class) {
if (internalClient == null) {
internalClient = new OkHttpClient.Builder()
2019-01-15 09:41:05 +01:00
.proxySelector(new ContentProxySelector())
.build();
2016-10-17 04:05:07 +02:00
}
}
}
return internalClient;
}
public Factory() {
this(getInternalClient());
}
private Factory(OkHttpClient client) {
this.client = client;
}
@Override
public @NonNull ModelLoader<GlideUrl, InputStream> build(@NonNull MultiModelLoaderFactory multiFactory) {
2016-10-17 04:05:07 +02:00
return new OkHttpUrlLoader(client);
}
@Override
public void teardown() {
// Do nothing, this instance doesn't own the client.
}
}
}