1be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddpackage com.bumptech.glide;
2be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport android.content.Context;
4be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport android.graphics.Bitmap;
5be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport android.graphics.drawable.Drawable;
6be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport android.view.animation.Animation;
7e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Juddimport android.widget.ImageView;
8f7a6d65cf7c1a41908dd48e0dab68ee5b881387eSam Judd
9cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Juddimport com.bumptech.glide.load.Encoder;
107d7d03dceae92dc32a9b84dee665a34c300017a7Sam Juddimport com.bumptech.glide.load.Key;
11be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.ResourceDecoder;
12be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.ResourceEncoder;
13be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.Transformation;
14f59f35a759798ea0a5751e34a2585606fc9796afSam Juddimport com.bumptech.glide.load.engine.DiskCacheStrategy;
15be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.model.ImageVideoWrapper;
161614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
175c3697fff7866246e107030b8c92359d4ebc1cf3Sam Juddimport com.bumptech.glide.load.resource.drawable.GlideDrawable;
18fc3f03260933d96fae33a43846860f226dd661feSam Juddimport com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapper;
19fc3f03260933d96fae33a43846860f226dd661feSam Juddimport com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperTransformation;
20be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
21d8eac4cec0fe1fa9b496998cfac858fd603f4f32Sam Juddimport com.bumptech.glide.manager.Lifecycle;
22667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Juddimport com.bumptech.glide.manager.RequestTracker;
23be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.provider.LoadProvider;
241a0d2f25951a536b465c5b2a1dfa5d3c076de912Sam Juddimport com.bumptech.glide.request.RequestListener;
2569aee75208194b4b6d4fca4aa7a4ec8c2dfec486Sam Juddimport com.bumptech.glide.request.animation.DrawableCrossFadeFactory;
265f4610b54d517be58105bcf73ce3291ba79f9f40Sam Juddimport com.bumptech.glide.request.animation.ViewPropertyAnimation;
27e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Juddimport com.bumptech.glide.request.target.Target;
28be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
290db3c45b412be1a5bfcb1da046836e89d3ffd0b4Sam Juddimport java.io.File;
30be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
315f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd/**
325c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd * A class for creating a request to load a {@link GlideDrawable}.
335f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd *
34c32f00a2aca81ee641955bda36cf3e985d628df6Sam Judd * <p>
35c32f00a2aca81ee641955bda36cf3e985d628df6Sam Judd *     Warning - It is <em>not</em> safe to use this builder after calling <code>into()</code>, it may be pooled and
36c32f00a2aca81ee641955bda36cf3e985d628df6Sam Judd *     reused.
37c32f00a2aca81ee641955bda36cf3e985d628df6Sam Judd * </p>
38c32f00a2aca81ee641955bda36cf3e985d628df6Sam Judd *
395f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd * @param  The type of model that will be loaded into the target.
405f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd */
415f4610b54d517be58105bcf73ce3291ba79f9f40Sam Juddpublic class DrawableRequestBuilder<ModelType>
425c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd        extends GenericRequestBuilder<ModelType, ImageVideoWrapper, GifBitmapWrapper, GlideDrawable>
43d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd        implements BitmapOptions, DrawableOptions {
44be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
45b01082225896132431da0ee9a85028d610ae4abfSam Judd    DrawableRequestBuilder(Context context, Class<ModelType> modelClass,
465c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd            LoadProvider<ModelType, ImageVideoWrapper, GifBitmapWrapper, GlideDrawable> loadProvider, Glide glide,
47d8eac4cec0fe1fa9b496998cfac858fd603f4f32Sam Judd            RequestTracker requestTracker, Lifecycle lifecycle) {
48b01082225896132431da0ee9a85028d610ae4abfSam Judd        super(context, modelClass, loadProvider, GlideDrawable.class, glide, requestTracker, lifecycle);
49c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd        // Default to animating.
50c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd        crossFade();
51be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
52be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
535f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
545c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * Loads and displays the {@link GlideDrawable} retrieved by the given thumbnail request if it finishes before this
555c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * request. Best used for loading thumbnail {@link GlideDrawable}s that are smaller and will be loaded more quickly
565c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * than the fullsize {@link GlideDrawable}. There are no guarantees about the order in which the requests will
575c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * actually finish. However, if the thumb request completes after the full request, the thumb {@link GlideDrawable}
585c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * will never replace the full image.
595f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
605f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @see #thumbnail(float)
615f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
625f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * <p>
635f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *     Note - Any options on the main request will not be passed on to the thumbnail request. For example, if
645c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     *     you want an animation to occur when either the full {@link GlideDrawable} loads or the thumbnail loads,
655f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *     you need to call {@link #animate(int)} on both the thumb and the full request. For a simpler thumbnail
665f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *     option where these options are applied to the humbnail as well, see {@link #thumbnail(float)}.
675f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * </p>
685f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
695f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * <p>
705f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *     Only the thumbnail call on the main request will be obeyed, recursive calls to this method are ignored.
715f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * </p>
725f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
735f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @param thumbnailRequest The request to use to load the thumbnail.
745f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @return This builder object.
755f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
76be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> thumbnail(
77f08ab536741266de5ed3887a2b3d5469299e89e9Sam Judd            DrawableRequestBuilder<?> thumbnailRequest) {
78be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.thumbnail(thumbnailRequest);
79be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
80be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
81be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
825f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
835f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
845f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
85be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
86be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> thumbnail(
87f08ab536741266de5ed3887a2b3d5469299e89e9Sam Judd            GenericRequestBuilder<?, ?, ?, GlideDrawable> thumbnailRequest) {
88be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.thumbnail(thumbnailRequest);
89be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
90be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
91be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
925f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
935f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
945f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
95be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
96be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> thumbnail(float sizeMultiplier) {
97be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.thumbnail(sizeMultiplier);
98be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
99be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
100be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1015f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1025f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
1035f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
104be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
1051614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    public DrawableRequestBuilder<ModelType> sizeMultiplier(float sizeMultiplier) {
106be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.sizeMultiplier(sizeMultiplier);
107be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
108be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
109be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1105f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1115f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
1125f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
113be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
1141614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    public DrawableRequestBuilder<ModelType> decoder(ResourceDecoder<ImageVideoWrapper, GifBitmapWrapper> decoder) {
115be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.decoder(decoder);
116be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
117be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
118be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1195f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1205f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
1215f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
122be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
1231614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    public DrawableRequestBuilder<ModelType> cacheDecoder(ResourceDecoder<File, GifBitmapWrapper> cacheDecoder) {
124be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.cacheDecoder(cacheDecoder);
125be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
126be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
127be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1285f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1295f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
1305f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
131be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
1321614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    public DrawableRequestBuilder<ModelType> encoder(ResourceEncoder<GifBitmapWrapper> encoder) {
133be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.encoder(encoder);
134be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
135be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
136be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1375f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1385f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
1395f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
140be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
141be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> priority(Priority priority) {
142be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.priority(priority);
143be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
144be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
145be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1465f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1475c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * Transform {@link GlideDrawable}s using the given
1481614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * {@link com.bumptech.glide.load.resource.bitmap.BitmapTransformation}s.
1491614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     *
1501614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * <p>
1511614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     *     Note - Bitmap transformations will apply individually to each frame of animated GIF images and also to
1521614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     *     individual {@link Bitmap}s.
1531614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * </p>
1541614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     *
1551614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #centerCrop()
1561614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #fitCenter()
1571614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #bitmapTransform(com.bumptech.glide.load.Transformation[])
1581614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #transform(com.bumptech.glide.load.Transformation[])
1591614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     *
1601614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @param transformations The transformations to apply in order.
1611614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @return This request builder.
1621614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     */
1631614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    public DrawableRequestBuilder<ModelType> transform(BitmapTransformation... transformations) {
1641614d6b4169b2930d3d2c17210c438708bb1117dSam Judd        return bitmapTransform(transformations);
1651614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    }
1661614d6b4169b2930d3d2c17210c438708bb1117dSam Judd
1671614d6b4169b2930d3d2c17210c438708bb1117dSam Judd    /**
1685c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * Transform {@link GlideDrawable}s using {@link com.bumptech.glide.load.resource.bitmap.CenterCrop}.
1695f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
170876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #fitCenter()
1711614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #transform(com.bumptech.glide.load.resource.bitmap.BitmapTransformation...)
172876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #bitmapTransform(com.bumptech.glide.load.Transformation[])
173876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #transform(com.bumptech.glide.load.Transformation[])
174876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     *
1755f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @return This request builder.
1765f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
1778acb4cc63588cdf595357bb60ac1ac79d3985893Robert Papp    @SuppressWarnings("unchecked")
178be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> centerCrop() {
17970db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd        return transform(glide.getDrawableCenterCrop());
180be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
181be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1825f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1835c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * Transform {@link GlideDrawable}s using {@link com.bumptech.glide.load.resource.bitmap.FitCenter}.
1845f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
185876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #centerCrop()
1861614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #transform(com.bumptech.glide.load.resource.bitmap.BitmapTransformation...)
187876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #bitmapTransform(com.bumptech.glide.load.Transformation[])
188876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #transform(com.bumptech.glide.load.Transformation[])
189876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     *
1905f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @return This request builder.
1915f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
1928acb4cc63588cdf595357bb60ac1ac79d3985893Robert Papp    @SuppressWarnings("unchecked")
193be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> fitCenter() {
19470db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd        return transform(glide.getDrawableFitCenter());
195be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
196be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
1975f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
1985c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * Transform {@link GlideDrawable}s using the given {@link android.graphics.Bitmap} transformations. Replaces any
1995c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd     * previous transformations.
200876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     *
201876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #fitCenter()
202876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #centerCrop()
2031614d6b4169b2930d3d2c17210c438708bb1117dSam Judd     * @see #transform(com.bumptech.glide.load.resource.bitmap.BitmapTransformation...)
204876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #transform(com.bumptech.glide.load.Transformation[])
2055f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     *
2065f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * @return This request builder.
2075f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
208876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd    public DrawableRequestBuilder<ModelType> bitmapTransform(Transformation<Bitmap>... bitmapTransformations) {
209876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd        GifBitmapWrapperTransformation[] transformations =
210876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd                new GifBitmapWrapperTransformation[bitmapTransformations.length];
211876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd        for (int i = 0; i < bitmapTransformations.length; i++) {
21221c2822985058df655ee4874798297f74c5e367eSam Judd            transformations[i] = new GifBitmapWrapperTransformation(glide.getBitmapPool(), bitmapTransformations[i]);
213876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd        }
214876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd        return transform(transformations);
215be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
216be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
217f7b3e5d7a4893fd55b3fd36be56bb37319d8aa24Sam Judd
218f7b3e5d7a4893fd55b3fd36be56bb37319d8aa24Sam Judd
2195f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
2205f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
221876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     *
222876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #bitmapTransform(com.bumptech.glide.load.Transformation[])
223876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #centerCrop()
224876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd     * @see #fitCenter()
2255f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
226be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
227876b9f6ad347c12636d14b9196d08958b1310bc1Sam Judd    public DrawableRequestBuilder<ModelType> transform(Transformation<GifBitmapWrapper>... transformation) {
228be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.transform(transformation);
229be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
230be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
231be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
2325f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
2335f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
2345f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
235be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
2365c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd    public DrawableRequestBuilder<ModelType> transcoder(
2375c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd            ResourceTranscoder<GifBitmapWrapper, GlideDrawable> transcoder) {
238be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.transcoder(transcoder);
239be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
240be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
241be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
2425f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
243d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd     * {@inheritDoc}
2445f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
2455ba19a0e69ad3a651b8f13ba45de48a56b56ce36Sam Judd    public final DrawableRequestBuilder<ModelType> crossFade() {
24669aee75208194b4b6d4fca4aa7a4ec8c2dfec486Sam Judd        super.animate(new DrawableCrossFadeFactory<GlideDrawable>());
247531667420f0cb59e01e0ae5928392469006148ddSam Judd        return this;
248531667420f0cb59e01e0ae5928392469006148ddSam Judd    }
249531667420f0cb59e01e0ae5928392469006148ddSam Judd
2505f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
251d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd     * {@inheritDoc}
2525f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
253531667420f0cb59e01e0ae5928392469006148ddSam Judd    public DrawableRequestBuilder<ModelType> crossFade(int duration) {
25469aee75208194b4b6d4fca4aa7a4ec8c2dfec486Sam Judd        super.animate(new DrawableCrossFadeFactory<GlideDrawable>(duration));
255531667420f0cb59e01e0ae5928392469006148ddSam Judd        return this;
256531667420f0cb59e01e0ae5928392469006148ddSam Judd    }
257531667420f0cb59e01e0ae5928392469006148ddSam Judd
2585f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
259d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd     * {@inheritDoc}
2605f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
2614c0c22e7f5fa76d9f44d79b06866f1d09f305d82Sam Judd    @Deprecated
262531667420f0cb59e01e0ae5928392469006148ddSam Judd    public DrawableRequestBuilder<ModelType> crossFade(Animation animation, int duration) {
26369aee75208194b4b6d4fca4aa7a4ec8c2dfec486Sam Judd        super.animate(new DrawableCrossFadeFactory<GlideDrawable>(animation, duration));
264531667420f0cb59e01e0ae5928392469006148ddSam Judd        return this;
265531667420f0cb59e01e0ae5928392469006148ddSam Judd    }
266531667420f0cb59e01e0ae5928392469006148ddSam Judd
2675f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
268d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd     * {@inheritDoc}
2695f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
270531667420f0cb59e01e0ae5928392469006148ddSam Judd    public DrawableRequestBuilder<ModelType> crossFade(int animationId, int duration) {
27169aee75208194b4b6d4fca4aa7a4ec8c2dfec486Sam Judd        super.animate(new DrawableCrossFadeFactory<GlideDrawable>(context, animationId,
272d2c42cb991e9395f4560cb433ce796082d15e3daSam Judd                duration));
273531667420f0cb59e01e0ae5928392469006148ddSam Judd        return this;
274531667420f0cb59e01e0ae5928392469006148ddSam Judd    }
275531667420f0cb59e01e0ae5928392469006148ddSam Judd
2765f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
2775f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
2785f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
279531667420f0cb59e01e0ae5928392469006148ddSam Judd    @Override
280c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd    public DrawableRequestBuilder<ModelType> dontAnimate() {
281c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd        super.dontAnimate();
282c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd        return this;
283c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd    }
284c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd
285c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd    /**
286c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd     * {@inheritDoc}
287c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd     */
288c85c5fe1ee57a14cb7585b77bd4ab81d97ad45c8Sam Judd    @Override
289531667420f0cb59e01e0ae5928392469006148ddSam Judd    public DrawableRequestBuilder<ModelType> animate(ViewPropertyAnimation.Animator animator) {
290531667420f0cb59e01e0ae5928392469006148ddSam Judd        super.animate(animator);
291531667420f0cb59e01e0ae5928392469006148ddSam Judd        return this;
292531667420f0cb59e01e0ae5928392469006148ddSam Judd    }
293531667420f0cb59e01e0ae5928392469006148ddSam Judd
2945f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
2955f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
2965f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
297be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
298be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> animate(int animationId) {
299be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.animate(animationId);
300be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
301be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
302be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3035f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3045f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3055f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
3064c0c22e7f5fa76d9f44d79b06866f1d09f305d82Sam Judd    @Deprecated
3074c0c22e7f5fa76d9f44d79b06866f1d09f305d82Sam Judd    @SuppressWarnings("deprecation")
308be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
309be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> animate(Animation animation) {
310be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.animate(animation);
311be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
312be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
313be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3145f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3155f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3165f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
317be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
318be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> placeholder(int resourceId) {
319be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.placeholder(resourceId);
320be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
321be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
322be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3235f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3245f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3255f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
326be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
327be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> placeholder(Drawable drawable) {
328be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.placeholder(drawable);
329be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
330be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
331be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3325f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3335f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3345f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
335be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
336be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> error(int resourceId) {
337be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.error(resourceId);
338be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
339be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
340be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3415f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3425f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3435f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
344be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
345be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    public DrawableRequestBuilder<ModelType> error(Drawable drawable) {
346be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.error(drawable);
347be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
348be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
349be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3505f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3515f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3525f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
353be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
354688909efa77b8effea7dc02424362706af57048cSam Judd    public DrawableRequestBuilder<ModelType> listener(
355688909efa77b8effea7dc02424362706af57048cSam Judd            RequestListener<? super ModelType, GlideDrawable> requestListener) {
356be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        super.listener(requestListener);
357be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
358be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
359be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3605f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3615f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3625f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
363be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
364f59f35a759798ea0a5751e34a2585606fc9796afSam Judd    public DrawableRequestBuilder<ModelType> diskCacheStrategy(DiskCacheStrategy strategy) {
365f59f35a759798ea0a5751e34a2585606fc9796afSam Judd        super.diskCacheStrategy(strategy);
366be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
367be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
368be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd
3695f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3705f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3715f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
372be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    @Override
373f59f35a759798ea0a5751e34a2585606fc9796afSam Judd    public DrawableRequestBuilder<ModelType> skipMemoryCache(boolean skip) {
374f59f35a759798ea0a5751e34a2585606fc9796afSam Judd        super.skipMemoryCache(skip);
375be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return this;
376be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd    }
377985687813fcdda9136dcf255784409f65317b280Sam Judd
3785f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3795f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3805f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
381985687813fcdda9136dcf255784409f65317b280Sam Judd    @Override
382985687813fcdda9136dcf255784409f65317b280Sam Judd    public DrawableRequestBuilder<ModelType> override(int width, int height) {
383985687813fcdda9136dcf255784409f65317b280Sam Judd        super.override(width, height);
384985687813fcdda9136dcf255784409f65317b280Sam Judd        return this;
385985687813fcdda9136dcf255784409f65317b280Sam Judd    }
386cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd
3875f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd    /**
3885f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     * {@inheritDoc}
3895f4610b54d517be58105bcf73ce3291ba79f9f40Sam Judd     */
390cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd    @Override
391cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd    public DrawableRequestBuilder<ModelType> sourceEncoder(Encoder<ImageVideoWrapper> sourceEncoder) {
392cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd        super.sourceEncoder(sourceEncoder);
393cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd        return this;
394cf1e05bf226ce4e7a510a5f7cac0661b9b2e90e9Sam Judd    }
39509a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd
39609a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd    /**
39709a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd     * {@inheritDoc}
39809a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd     */
39909a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd    @Override
40009a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd    public DrawableRequestBuilder<ModelType> dontTransform() {
40109a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd        super.dontTransform();
40209a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd        return this;
40309a5b320544ce6eefe54e42f6462ddbbe73b8418Sam Judd    }
404e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd
4057d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd    @Override
4067d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd    public DrawableRequestBuilder<ModelType> signature(Key signature) {
4077d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd        super.signature(signature);
4087d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd        return this;
4097d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd    }
4107d7d03dceae92dc32a9b84dee665a34c300017a7Sam Judd
411b01082225896132431da0ee9a85028d610ae4abfSam Judd    @Override
412b01082225896132431da0ee9a85028d610ae4abfSam Judd    public DrawableRequestBuilder<ModelType> load(ModelType model) {
413b01082225896132431da0ee9a85028d610ae4abfSam Judd        super.load(model);
414b01082225896132431da0ee9a85028d610ae4abfSam Judd        return this;
415b01082225896132431da0ee9a85028d610ae4abfSam Judd    }
416b01082225896132431da0ee9a85028d610ae4abfSam Judd
4177392026b13c2265081d2f467d072d5eb6011720eSam Judd    @Override
4187392026b13c2265081d2f467d072d5eb6011720eSam Judd    public DrawableRequestBuilder<ModelType> clone() {
4197392026b13c2265081d2f467d072d5eb6011720eSam Judd        return (DrawableRequestBuilder<ModelType>) super.clone();
4207392026b13c2265081d2f467d072d5eb6011720eSam Judd    }
4217392026b13c2265081d2f467d072d5eb6011720eSam Judd
422e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    /**
423e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     * {@inheritDoc}
424e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     *
425e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     * <p>
426e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     *     Note - If no transformation is set for this load, a default transformation will be applied based on the
427e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     *     value returned from {@link android.widget.ImageView#getScaleType()}. To avoid this default transformation,
428e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     *     use {@link #dontTransform()}.
429e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     * </p>
430e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     *
431e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     * @param view {@inheritDoc}
432e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     * @return {@inheritDoc}
433e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd     */
434e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    @Override
4355c3697fff7866246e107030b8c92359d4ebc1cf3Sam Judd    public Target<GlideDrawable> into(ImageView view) {
436e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd        return super.into(view);
437e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    }
438e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd
439e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    @Override
440e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    void applyFitCenter() {
441e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd        fitCenter();
442e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    }
443e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd
444e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    @Override
445e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    void applyCenterCrop() {
446e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd        centerCrop();
447e1d45b25cb006ab0a85bc3e15ce3454b12a23235Sam Judd    }
448be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd}
449