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.manager.RequestTracker;
12import com.bumptech.glide.provider.FixedLoadProvider;
13
14import java.io.InputStream;
15
16public class DrawableTypeRequest<A> extends DrawableRequestBuilder<A> {
17    private final ModelLoader<A, InputStream> streamModelLoader;
18    private final ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader;
19    private final Context context;
20    private final Glide glide;
21    private RequestTracker requestTracker;
22    private RequestManager.OptionsApplier optionsApplier;
23    private final A model;
24
25    private static <A, Z, R> FixedLoadProvider<A, ImageVideoWrapper, Z, R> buildProvider(Glide glide,
26            ModelLoader<A, InputStream> streamModelLoader,
27            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, Class<Z> resourceClass,
28            Class<R> transcodedClass,
29            ResourceTranscoder<Z, R> transcoder) {
30            return streamModelLoader == null && fileDescriptorModelLoader == null ? null :
31                    new FixedLoadProvider<A, ImageVideoWrapper, Z, R>(
32                            new ImageVideoModelLoader<A>(streamModelLoader, fileDescriptorModelLoader),
33                            transcoder != null ? transcoder : glide.buildTranscoder(resourceClass, transcodedClass),
34                            glide.buildDataProvider(ImageVideoWrapper.class, resourceClass));
35    }
36
37
38    DrawableTypeRequest(A model, ModelLoader<A, InputStream> streamModelLoader,
39            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, Context context, Glide glide,
40            RequestTracker requestTracker, RequestManager.OptionsApplier optionsApplier) {
41        super(context, model,
42                buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, GifBitmapWrapper.class,
43                        Drawable.class, null),
44                glide, requestTracker);
45        this.model = model;
46        this.streamModelLoader = streamModelLoader;
47        this.fileDescriptorModelLoader = fileDescriptorModelLoader;
48        this.context = context;
49        this.glide = glide;
50        this.requestTracker = requestTracker;
51        this.optionsApplier = optionsApplier;
52    }
53
54    public BitmapTypeRequest<A> asBitmap() {
55        return optionsApplier.apply(model, new BitmapTypeRequest<A>(context, model, streamModelLoader,
56                fileDescriptorModelLoader, glide, requestTracker, optionsApplier));
57    }
58
59    public GifTypeRequest<A> asGif() {
60        return optionsApplier.apply(model, new GifTypeRequest<A>(context, model, streamModelLoader, glide,
61                requestTracker, optionsApplier));
62    }
63}
64