blob: 33ea82301381caf78c65bd6e9e95e574ad3b0d4b [file] [log] [blame]
package com.bumptech.glide;
import android.content.Context;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.resource.gif.GifData;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.load.resource.transcode.GifDataBytesTranscoder;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
import com.bumptech.glide.manager.RequestTracker;
import com.bumptech.glide.provider.FixedLoadProvider;
import java.io.InputStream;
public class GifTypeRequest<A> extends GifRequestBuilder<A, GifDrawable> {
private final Context context;
private final A model;
private final ModelLoader<A, InputStream> streamModelLoader;
private final Glide glide;
private final RequestTracker requestTracker;
private RequestManager.OptionsApplier optionsApplier;
private static <A, R> FixedLoadProvider<A, InputStream, GifData, R> buildProvider(Glide glide,
ModelLoader<A, InputStream> streamModelLoader, Class<R> transcodeClass,
ResourceTranscoder<GifData, R> transcoder) {
if (transcoder == null) {
transcoder = glide.buildTranscoder(GifData.class, transcodeClass);
}
return streamModelLoader == null ? null :
new FixedLoadProvider<A, InputStream, GifData, R>(streamModelLoader, transcoder,
glide.buildDataProvider(InputStream.class, GifData.class));
}
GifTypeRequest(Context context, A model, ModelLoader<A, InputStream> streamModelLoader, Glide glide,
RequestTracker requestTracker, RequestManager.OptionsApplier optionsApplier){
super(context, model, buildProvider(glide, streamModelLoader, GifDrawable.class, null), GifDrawable.class,
glide, requestTracker);
this.context = context;
this.model = model;
this.streamModelLoader = streamModelLoader;
this.glide = glide;
this.requestTracker = requestTracker;
this.optionsApplier = optionsApplier;
}
public <R> GifRequestBuilder<A, R> transcode(ResourceTranscoder<GifData, R> transcoder, Class<R> transcodeClass) {
return optionsApplier.apply(model, new GifRequestBuilder<A, R>(context, model,
buildProvider(glide, streamModelLoader, transcodeClass, transcoder), transcodeClass, glide,
requestTracker));
}
/**
* Setup the request to return the bytes of the loaded gif.
* <p>
* Note - Any transformations added during this load do not change the underlying bytes and therefore this
* will always load and provide the bytes of the original image before any transformations to the given target.
* </p>
*
* @return A new Builder object to build a request to transform the given model into the bytes of an animated gif.
*/
public GifRequestBuilder<A, byte[]> toBytes() {
return transcode(new GifDataBytesTranscoder(), byte[].class);
}
}