GifTypeRequest.java revision 8a6067fbe2a670d2e893c79c9c0ec17817da6568
1package com.bumptech.glide;
2
3import android.content.Context;
4import com.bumptech.glide.load.model.ModelLoader;
5import com.bumptech.glide.load.resource.gif.GifData;
6import com.bumptech.glide.load.resource.gif.GifDrawable;
7import com.bumptech.glide.load.resource.transcode.GifDataBytesTranscoder;
8import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
9import com.bumptech.glide.manager.RequestManager;
10import com.bumptech.glide.provider.FixedLoadProvider;
11
12import java.io.InputStream;
13
14public class GifTypeRequest<A> extends GifRequestBuilder<A, GifDrawable> {
15    private final Context context;
16    private final A model;
17    private final ModelLoader<A, InputStream> streamModelLoader;
18    private final Glide glide;
19    private RequestManager requestManager;
20
21    private static <A, R> FixedLoadProvider<A, InputStream, GifData, R> buildProvider(Glide glide,
22            ModelLoader<A, InputStream> streamModelLoader, Class<R> transcodeClass,
23            ResourceTranscoder<GifData, R> transcoder) {
24        if (transcoder == null) {
25            transcoder = glide.buildTranscoder(GifData.class, transcodeClass);
26        }
27        return streamModelLoader == null ? null :
28                new FixedLoadProvider<A, InputStream, GifData, R>(streamModelLoader, transcoder,
29                        glide.buildDataProvider(InputStream.class, GifData.class));
30
31    }
32
33    GifTypeRequest(Context context, A model, ModelLoader<A, InputStream> streamModelLoader, Glide glide,
34            RequestManager requestManager){
35        super(context, model, buildProvider(glide, streamModelLoader, GifDrawable.class, null), GifDrawable.class,
36                glide, requestManager);
37        this.context = context;
38        this.model = model;
39        this.streamModelLoader = streamModelLoader;
40        this.glide = glide;
41        this.requestManager = requestManager;
42    }
43
44    public <R> GifRequestBuilder<A, R> transcode(ResourceTranscoder<GifData, R> transcoder, Class<R> transcodeClass) {
45        return new GifRequestBuilder<A, R>(context, model,
46                buildProvider(glide, streamModelLoader, transcodeClass, transcoder), transcodeClass, glide,
47                requestManager);
48    }
49
50    /**
51     * Setup the request to return the bytes of the loaded gif.
52     * <p>
53     *     Note - Any transformations added during this load do not change the underlying bytes and therefore this
54     *     will always load and provide the bytes of the original image before any transformations to the given target.
55     * </p>
56     *
57     * @return A new Builder object to build a request to transform the given model into the bytes of an animated gif.
58     */
59    public GifRequestBuilder<A, byte[]> toBytes() {
60        return transcode(new GifDataBytesTranscoder(), byte[].class);
61    }
62}
63