2016-10-17 04:05:07 +02:00
|
|
|
package org.thoughtcrime.securesms.glide;
|
|
|
|
|
2019-05-22 18:51:56 +02:00
|
|
|
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;
|
|
|
|
|
2017-01-09 16:49:37 +01:00
|
|
|
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
|
2019-05-22 18:51:56 +02:00
|
|
|
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
|
2019-05-22 18:51:56 +02:00
|
|
|
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) {
|
2017-01-09 16:49:37 +01:00
|
|
|
internalClient = new OkHttpClient.Builder()
|
2019-01-15 09:41:05 +01:00
|
|
|
.proxySelector(new ContentProxySelector())
|
2017-01-09 16:49:37 +01:00
|
|
|
.build();
|
2016-10-17 04:05:07 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return internalClient;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Factory() {
|
|
|
|
this(getInternalClient());
|
|
|
|
}
|
|
|
|
|
|
|
|
private Factory(OkHttpClient client) {
|
|
|
|
this.client = client;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-05-22 18:51:56 +02:00
|
|
|
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.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|