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