DrawableTypeRequest.java revision cbba04826bfaf4f8055f922bc41937572983c17f
1package com.bumptech.glide;
2
3import android.content.Context;
4import android.graphics.drawable.Drawable;
5import android.os.ParcelFileDescriptor;
6import com.bumptech.glide.load.model.ImageVideoModelLoader;
7import com.bumptech.glide.load.model.ImageVideoWrapper;
8import com.bumptech.glide.load.model.ModelLoader;
9import com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapper;
10import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
11import com.bumptech.glide.provider.FixedLoadProvider;
12
13import java.io.InputStream;
14
15public class DrawableTypeRequest<A> extends DrawableRequestBuilder<A> {
16    private final ModelLoader<A, InputStream> streamModelLoader;
17    private final ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader;
18    private final Context context;
19    private final Glide glide;
20    private final A model;
21
22    private static <A, Z, R> FixedLoadProvider<A, ImageVideoWrapper, Z, R> buildProvider(Glide glide,
23            ModelLoader<A, InputStream> streamModelLoader,
24            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, Class<Z> resourceClass,
25            Class<R> transcodedClass,
26            ResourceTranscoder<Z, R> transcoder) {
27            return streamModelLoader == null && fileDescriptorModelLoader == null ? null :
28                    new FixedLoadProvider<A, ImageVideoWrapper, Z, R>(
29                            new ImageVideoModelLoader<A>(streamModelLoader, fileDescriptorModelLoader),
30                            transcoder != null ? transcoder : glide.buildTranscoder(resourceClass, transcodedClass),
31                            glide.buildDataProvider(ImageVideoWrapper.class, resourceClass));
32    }
33
34
35    DrawableTypeRequest(A model, ModelLoader<A, InputStream> streamModelLoader,
36            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, Context context, Glide glide) {
37        super(context, model,
38                buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, GifBitmapWrapper.class, Drawable.class,
39                        null), glide);
40        this.model = model;
41        this.streamModelLoader = streamModelLoader;
42        this.fileDescriptorModelLoader = fileDescriptorModelLoader;
43        this.context = context;
44        this.glide = glide;
45    }
46
47    public BitmapTypeRequest<A> asBitmap() {
48        return new BitmapTypeRequest<A>(context, model, streamModelLoader, fileDescriptorModelLoader, glide);
49    }
50
51    public GifTypeRequest<A> asGif() {
52        return new GifTypeRequest<A>(context, model, streamModelLoader, glide);
53    }
54}
55