package moe.kurumi.moegallery.di.modules;
import com.bumptech.glide.GenericRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.StreamEncoder;
import com.bumptech.glide.load.resource.file.FileToStreamDecoder;
import java.io.InputStream;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import moe.kurumi.moegallery.activity.MainActivity;
import moe.kurumi.moegallery.glide.GifDrawableBytesTranscoder;
import moe.kurumi.moegallery.glide.OkHttpUrlLoader;
import moe.kurumi.moegallery.glide.StreamByteArrayResourceDecoder;
import okhttp3.OkHttpClient;
import pl.droidsonroids.gif.GifDrawable;
@Module
public class MainModule {
private MainActivity mView;
public MainModule(MainActivity view) {
mView = view;
}
@Singleton
@Provides
RequestManager provideGlide(OkHttpClient okHttpClient) {
OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(okHttpClient);
Glide.get(mView).register(GlideUrl.class, InputStream.class, factory);
return Glide.with(mView);
}
@Singleton
@Provides
GenericRequestBuilder<GlideUrl, InputStream, byte[], GifDrawable> provideGifRequestBuilder(
RequestManager requestManager, OkHttpClient okHttpClient) {
return requestManager.using(new OkHttpUrlLoader(okHttpClient), InputStream.class)
.from(GlideUrl.class)
.as(byte[].class)
.transcode(new GifDrawableBytesTranscoder(), GifDrawable.class)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.decoder(new StreamByteArrayResourceDecoder())
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<>(new StreamByteArrayResourceDecoder()));
}
}