1package com.bumptech.glide;
2
3import android.content.Context;
4import android.graphics.Bitmap;
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.transcode.BitmapBytesTranscoder;
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 BitmapTypeRequest<A> extends BitmapRequestBuilder<A, Bitmap> {
17    private final Context context;
18    private final A model;
19    private final ModelLoader<A, InputStream> streamModelLoader;
20    private ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader;
21    private final Glide glide;
22    private RequestTracker requestTracker;
23    private RequestManager.OptionsApplier optionsApplier;
24
25    private static <A, R> FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R> buildProvider(Glide glide,
26            ModelLoader<A, InputStream> streamModelLoader,
27            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader,
28            Class<R> transcodedClass,
29            ResourceTranscoder<Bitmap, R> transcoder) {
30            return streamModelLoader == null && fileDescriptorModelLoader == null ? null :
31                    new FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R>(
32                            new ImageVideoModelLoader<A>(streamModelLoader, fileDescriptorModelLoader),
33                            transcoder != null ? transcoder : glide.buildTranscoder(Bitmap.class, transcodedClass),
34                            glide.buildDataProvider(ImageVideoWrapper.class, Bitmap.class));
35    }
36
37    BitmapTypeRequest(Context context, A model,
38            ModelLoader<A, InputStream> streamModelLoader,
39            ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader,
40            Glide glide, RequestTracker requestTracker, RequestManager.OptionsApplier optionsApplier) {
41        super(context, model,
42                buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, Bitmap.class, null),
43                Bitmap.class,
44                glide, requestTracker);
45        this.context = context;
46        this.model = model;
47        this.streamModelLoader = streamModelLoader;
48        this.fileDescriptorModelLoader = fileDescriptorModelLoader;
49        this.glide = glide;
50        this.requestTracker= requestTracker;
51        this.optionsApplier = optionsApplier;
52    }
53
54    public <R> BitmapRequestBuilder<A, R> transcode(ResourceTranscoder<Bitmap, R> transcoder, Class<R> transcodeClass) {
55        return optionsApplier.apply(model, new BitmapRequestBuilder<A, R>(context, model,
56                buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, transcodeClass, transcoder),
57                transcodeClass, glide, requestTracker));
58    }
59
60    public BitmapRequestBuilder<A, byte[]> toBytes() {
61        return transcode(new BitmapBytesTranscoder(), byte[].class);
62    }
63
64    public BitmapRequestBuilder<A, byte[]> toBytes(Bitmap.CompressFormat compressFormat, int quality) {
65        return transcode(new BitmapBytesTranscoder(compressFormat, quality), byte[].class);
66    }
67}
68