GenericRequestBuilder.java revision 7260e7b8e840ae9e03cc20df73accfc4121cb190
1b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddpackage com.bumptech.glide; 2b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 3b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.content.Context; 4a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Juddimport android.graphics.drawable.Drawable; 5785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Juddimport android.view.View; 6a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Juddimport android.view.animation.Animation; 7b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.widget.ImageView; 89bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.MultiTransformation; 99fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.ResourceDecoder; 10d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Juddimport com.bumptech.glide.load.ResourceEncoder; 1180b7691daac313059e4311214249fa6da53451edSam Juddimport com.bumptech.glide.load.SkipCache; 129bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.Transformation; 137260e7b8e840ae9e03cc20df73accfc4121cb190Sam Juddimport com.bumptech.glide.load.model.ModelLoader; 14bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddimport com.bumptech.glide.load.resource.bitmap.BitmapDecoder; 15bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddimport com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 169bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.provider.ChildLoadProvider; 179fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.provider.LoadProvider; 18785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Juddimport com.bumptech.glide.request.Request; 199fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.RequestCoordinator; 209fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.ThumbnailRequestCoordinator; 2144e0516ee31912216c9e668c255f2d5baf86ac6dSam Juddimport com.bumptech.glide.request.bitmap.GenericRequest; 229bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.request.bitmap.RequestListener; 23785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Juddimport com.bumptech.glide.request.target.BitmapImageViewTarget; 249fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.target.Target; 25b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 26d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Juddimport java.io.InputStream; 27b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport java.util.ArrayList; 28b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport java.util.List; 29b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 30b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd/** 31b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * A generic class that can handle loading a bitmap either from an image or as a thumbnail from a video given 32b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * models loaders to translate a model into generic resources for either an image or a video and decoders that can 33b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * decode those resources into bitmaps. 34b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 35b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @paramThe type of model representing the image or video. 36dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd * @param The data type that the image {@link ModelLoader} will provide that can be decoded by the image 3744e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd * {@link BitmapDecoder}. 3844e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd * @param The type of the resource that will be loaded. 39b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 40dbb67f826b0e76645c809be6d589e9dcb8271324Sam Juddpublic class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> { 41d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd private final Context context; 4244e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd private final List<Transformation<ResourceType>> transformations = new ArrayList<Transformation<ResourceType>>(); 43b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private final ModelType model; 44dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd private final ChildLoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider; 4577e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd private final Class<TranscodeType> transcodeClass; 467260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd private final Glide glide; 47b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int animationId; 48a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Animation animation; 49b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int placeholderId; 50b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int errorId; 51b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private RequestListener<ModelType> requestListener; 52b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private Float thumbSizeMultiplier; 53dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd private GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> 54ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd thumbnailRequestBuilder; 55b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private Float sizeMultiplier = 1f; 56a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Drawable placeholderDrawable; 57a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Drawable errorPlaceholder; 5808b61677e60069ba681b56cf6312fc0b92020962Sam Judd private Priority priority = null; 5980b7691daac313059e4311214249fa6da53451edSam Judd private boolean isCacheable = true; 6080b7691daac313059e4311214249fa6da53451edSam Judd private ResourceEncoder<ResourceType> preSkipEncoder; 61b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 627260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd GenericRequestBuilder(Context context, ModelType model, 63dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd LoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider, 64d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Class<TranscodeType> transcodeClass, Glide glide) { 6577e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd this.transcodeClass = transcodeClass; 66d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd this.glide = glide; 67dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd this.loadProvider = loadProvider != null ? 68dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd new ChildLoadProvider<ModelType, DataType, ResourceType, TranscodeType>(loadProvider) : null; 6980b7691daac313059e4311214249fa6da53451edSam Judd preSkipEncoder = loadProvider != null ? loadProvider.getEncoder() : null; 70c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd 7127eb05702fd4531d6974640c62df1d569629edb6Sam Judd if (context == null) { 72b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new NullPointerException("Context can't be null"); 73b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 74dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd if (model != null && loadProvider == null) { 75dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd throw new NullPointerException("LoadProvider must not be null"); 76b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd } 77c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd this.context = context; 78b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.model = model; 79b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 80b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 81b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 82b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads and displays the image retrieved by the given thumbnail request if it finishes before this request. 83b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Best used for loading thumbnail images that are smaller and will be loaded more quickly than the fullsize 84b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * image. There are no guarantees about the order in which the requests will actually finish. However, if the 85b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * thumb request completes after the full request, the thumb image will never replace the full image. 86b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 87b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see #thumbnail(float) 88b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 89b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 90b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Note - Any options on the main request will not be passed on to the thumbnail request. For example, if 91b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * you want an animation to occur when either the full image loads or the thumbnail loads, you need to call 92b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #animate(int)} on both the thumb and the full request. For a simpler thumbnail option, see 93b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #thumbnail(float)}. 94b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 95b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 96b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 97b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Only the thumbnail call on the main request will be obeyed. 98b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 99b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 100b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param thumbnailRequest The request to use to load the thumbnail. 101b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 102b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 103dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> thumbnail( 104dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> 10577e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd thumbnailRequest) { 106b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.thumbnailRequestBuilder = thumbnailRequest; 107b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 108b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 109b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 110b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 111b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 112b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads an image in an identical manner to this request except with the dimensions of the target multiplied 113b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * by the given size multiplier. If the thumbnail load completes before the fullsize load, the thumbnail will 114b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * be shown. If the thumbnail load completes afer the fullsize load, the thumbnail will not be shown. 115b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 116b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 117b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Note - The thumbnail image will be smaller than the size requested so the target (or {@link ImageView}) 118b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * must be able to scale the thumbnail appropriately. See {@link ImageView.ScaleType}. 119b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 120b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 121b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 122b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Almost all options will be copied from the original load, including the {@link ModelLoader}, 123b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link BitmapDecoder}, and {@link Transformation}s. However, {@link #placeholder(int)} and 124b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #error(int)}, and {@link #listener(RequestListener)} will only be used on the fullsize load and 125b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * will not be copied for the thumbnail load. 126b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 127b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 128b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 129b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Only the thumbnail call on the main request will be obeyed. 130b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 131b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 132b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param sizeMultiplier The multiplier to apply to the {@link Target}'s dimensions when loading the thumbnail. 133b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 134b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 135dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> thumbnail( 13677e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd float sizeMultiplier) { 137b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (sizeMultiplier < 0f || sizeMultiplier > 1f) { 138b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new IllegalArgumentException("sizeMultiplier must be between 0 and 1"); 139b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 140b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.thumbSizeMultiplier = sizeMultiplier; 141b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 142b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 143b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 144b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 145b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 146b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Applies a multiplier to the {@link Target}'s size before loading the image. Useful for loading thumbnails 147b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * or trying to avoid loading huge bitmaps on devices with overly dense screens. 148b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 149b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param sizeMultiplier The multiplier to apply to the {@link Target}'s dimensions when loading the image. 150b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 151b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 152dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> sizeMultiplier( 153b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd float sizeMultiplier) { 154b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (sizeMultiplier < 0f || sizeMultiplier > 1f) { 155b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new IllegalArgumentException("sizeMultiplier must be between 0 and 1"); 156b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 157b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.sizeMultiplier = sizeMultiplier; 158b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 159b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 160b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 161b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 162b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 163dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd * Loads the resource from the given data type using the given {@link BitmapDecoder}. 164b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 165b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 166b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Will be ignored if the data represented by the given model is not a video. 167b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 168b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 169b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param decoder The {@link BitmapDecoder} to use to decode the video resource. 17076fbad3dbce72240e9f5b82c826e3229c1176fb6Sam Judd * @return This request builder. 171b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 172dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> decoder( 173dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd ResourceDecoder<DataType, ResourceType> decoder) { 1747260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // loadProvider will be null if model is null, in which case we're not going to load anything so it's ok to 1757260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // ignore the decoder. 1767260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd if (loadProvider != null) { 1777260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd loadProvider.setSourceDecoder(decoder); 1787260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd } 179b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 180b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 181b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 182b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 183dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> cacheDecoder( 1847260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd ResourceDecoder <InputStream, ResourceType> cacheDecoder) { 1857260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // loadProvider will be null if model is null, in which case we're not going to load anything so it's ok to 1867260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // ignore the decoder. 1877260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd if (loadProvider != null) { 1887260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd loadProvider.setCacheDecoder(cacheDecoder); 1897260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd } 190d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 191d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return this; 192d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 193d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 194dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> encoder( 195d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd ResourceEncoder<ResourceType> encoder) { 1967260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // loadProvider will be null if model is null, in which case we're not going to load anything so it's ok to 1977260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd // ignore the encoder. 1987260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd if (loadProvider != null) { 1997260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd loadProvider.setEncoder(encoder); 2007260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd preSkipEncoder = encoder; 2017260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd } 202d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 203d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return this; 204d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 205d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 206b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 20708b61677e60069ba681b56cf6312fc0b92020962Sam Judd * Sets the priority for this load. 20808b61677e60069ba681b56cf6312fc0b92020962Sam Judd * 20908b61677e60069ba681b56cf6312fc0b92020962Sam Judd * @param priority A priority. 21008b61677e60069ba681b56cf6312fc0b92020962Sam Judd * @return This request builder. 21108b61677e60069ba681b56cf6312fc0b92020962Sam Judd */ 212dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> priority( 213d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Priority priority) { 21408b61677e60069ba681b56cf6312fc0b92020962Sam Judd this.priority = priority; 21508b61677e60069ba681b56cf6312fc0b92020962Sam Judd 21608b61677e60069ba681b56cf6312fc0b92020962Sam Judd return this; 21708b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 21808b61677e60069ba681b56cf6312fc0b92020962Sam Judd 219b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 220b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Transform images with the given {@link Transformation}. Appends this transformation onto any existing 221b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * transformations 222b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 223b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param transformation the transformation to apply. 224b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 225b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 226dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> transform( 22744e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd Transformation<ResourceType> transformation) { 228b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd transformations.add(transformation); 229b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 230b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 231b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 232b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 233dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> transcoder( 234d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd ResourceTranscoder<ResourceType, TranscodeType> transcoder) { 235dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd if (loadProvider != null) { 236dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd loadProvider.setTranscoder(transcoder); 237d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 238d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 239d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return this; 240d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 241d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 242b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 243b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets an animation to run on the wrapped target when an image load finishes. Will only be run if the image 244b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * was loaded asynchronously (ie was not in the memory cache) 245b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 246b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param animationId The resource id of the animation to run 247b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 248b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 249dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> animate( 250d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd int animationId) { 251b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.animationId = animationId; 252b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 253b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 254b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 255b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 256b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 257a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets an animation to run on the wrapped target when an image load finishes. Will only be run if the image 258a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * was loaded asynchronously (ie was not in the memory cache) 259a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 260a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param animation The animation to run 261a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder 262a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 263dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> animate( 264d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Animation animation) { 265a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.animation = animation; 266a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 267a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 268a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 269a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 270a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 271b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a resource to display while an image is loading 272b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 273b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param resourceId The id of the resource to use as a placeholder 274b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 275b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 276dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> placeholder( 277d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd int resourceId) { 278b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.placeholderId = resourceId; 279b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 280b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 281b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 282b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 283b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 284a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets a drawable to display while an image is loading. 285a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 286a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param drawable The drawable to display as a placeholder. 287a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder. 288a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 289dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> placeholder( 290d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Drawable drawable) { 291a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.placeholderDrawable = drawable; 292a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 293a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 294a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 295a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 296a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 297b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a resource to display if a load fails 298b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 299b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param resourceId The id of the resource to use as a placeholder 300b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This request 301b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 302dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> error( 303d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd int resourceId) { 304b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.errorId = resourceId; 305b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 306b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 307b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 308b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 309b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 310a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets a {@link Drawable} to display if a load fails. 311a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 312a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param drawable The drawable to display. 313a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder. 314a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 315dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> error( 316d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Drawable drawable) { 317a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.errorPlaceholder = drawable; 318a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 319a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 320a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 321a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 322a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 323b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a RequestBuilder listener to monitor the image load. It's best to create a single instance of an 324b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * exception handler per type of request (usually activity/fragment) rather than pass one in per request to 325b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * avoid some redundant object allocation. 326b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 32780b7691daac313059e4311214249fa6da53451edSam Judd * @param requestListener The request listener to use. 32880b7691daac313059e4311214249fa6da53451edSam Judd * @return This RequestBuilder. 329b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 330dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> listener( 331b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd RequestListener<ModelType> requestListener) { 332b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.requestListener = requestListener; 333b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 334b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 335b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 336b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 337b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 33880b7691daac313059e4311214249fa6da53451edSam Judd * Allows the loaded resource to skip the memory cache. 33980b7691daac313059e4311214249fa6da53451edSam Judd * 34080b7691daac313059e4311214249fa6da53451edSam Judd * <p> 34180b7691daac313059e4311214249fa6da53451edSam Judd * Note - this is not a guarantee. If a request is already pending for this resource and that request is not 34280b7691daac313059e4311214249fa6da53451edSam Judd * also skipping the memory cache, the resource will be cached in memory. 34380b7691daac313059e4311214249fa6da53451edSam Judd * </p> 34480b7691daac313059e4311214249fa6da53451edSam Judd * 34580b7691daac313059e4311214249fa6da53451edSam Judd * @param skip True to allow the resource to skip the memory cache. 34680b7691daac313059e4311214249fa6da53451edSam Judd * @return This RequestBuilder. 34780b7691daac313059e4311214249fa6da53451edSam Judd */ 34880b7691daac313059e4311214249fa6da53451edSam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> skipMemoryCache(boolean skip) { 34980b7691daac313059e4311214249fa6da53451edSam Judd this.isCacheable = !skip; 35080b7691daac313059e4311214249fa6da53451edSam Judd 35180b7691daac313059e4311214249fa6da53451edSam Judd return this; 35280b7691daac313059e4311214249fa6da53451edSam Judd } 35380b7691daac313059e4311214249fa6da53451edSam Judd 35480b7691daac313059e4311214249fa6da53451edSam Judd /** 35580b7691daac313059e4311214249fa6da53451edSam Judd * Allows the loaded resource to skip the disk cache. 35680b7691daac313059e4311214249fa6da53451edSam Judd * 35780b7691daac313059e4311214249fa6da53451edSam Judd * <p> 35880b7691daac313059e4311214249fa6da53451edSam Judd * Note - this is not a guarantee. If a request is already pending for this resource and that request is not 35980b7691daac313059e4311214249fa6da53451edSam Judd * also skipping the disk cache, the resource will be cached on disk. 36080b7691daac313059e4311214249fa6da53451edSam Judd * </p> 36180b7691daac313059e4311214249fa6da53451edSam Judd * 36280b7691daac313059e4311214249fa6da53451edSam Judd * @param skip True to allow the resource to skip the disk cache. 36380b7691daac313059e4311214249fa6da53451edSam Judd * @return This RequestBuilder. 36480b7691daac313059e4311214249fa6da53451edSam Judd */ 36580b7691daac313059e4311214249fa6da53451edSam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> skipDiskCache(boolean skip) { 36680b7691daac313059e4311214249fa6da53451edSam Judd if (skip) { 3677260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd if (loadProvider != null) { 3687260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd preSkipEncoder = loadProvider.getEncoder(); 3697260e7b8e840ae9e03cc20df73accfc4121cb190Sam Judd } 37080b7691daac313059e4311214249fa6da53451edSam Judd final SkipCache<ResourceType> skipCache = SkipCache.get(); 37180b7691daac313059e4311214249fa6da53451edSam Judd return encoder(skipCache); 37280b7691daac313059e4311214249fa6da53451edSam Judd } else { 37380b7691daac313059e4311214249fa6da53451edSam Judd return encoder(preSkipEncoder); 37480b7691daac313059e4311214249fa6da53451edSam Judd } 37580b7691daac313059e4311214249fa6da53451edSam Judd } 37680b7691daac313059e4311214249fa6da53451edSam Judd 37780b7691daac313059e4311214249fa6da53451edSam Judd /** 37880b7691daac313059e4311214249fa6da53451edSam Judd * Allows the resource to skip both the memory and the disk cache. 37980b7691daac313059e4311214249fa6da53451edSam Judd * 38080b7691daac313059e4311214249fa6da53451edSam Judd * @see #skipDiskCache(boolean) 38180b7691daac313059e4311214249fa6da53451edSam Judd * @see #skipMemoryCache(boolean) 38280b7691daac313059e4311214249fa6da53451edSam Judd * 38380b7691daac313059e4311214249fa6da53451edSam Judd * @param skip True to allow the resource to skip both the memory and the disk cache. 38480b7691daac313059e4311214249fa6da53451edSam Judd * @return This RequestBuilder. 38580b7691daac313059e4311214249fa6da53451edSam Judd */ 38680b7691daac313059e4311214249fa6da53451edSam Judd public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> skipCache(boolean skip) { 38780b7691daac313059e4311214249fa6da53451edSam Judd skipMemoryCache(skip); 38880b7691daac313059e4311214249fa6da53451edSam Judd skipDiskCache(skip); 38980b7691daac313059e4311214249fa6da53451edSam Judd 39080b7691daac313059e4311214249fa6da53451edSam Judd return this; 39180b7691daac313059e4311214249fa6da53451edSam Judd } 39280b7691daac313059e4311214249fa6da53451edSam Judd 39380b7691daac313059e4311214249fa6da53451edSam Judd /** 394b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Set the target the image will be loaded into. 395b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 396b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param target The target to load te image for 397b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return The given target. 398b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 39977e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd public <Y extends Target<TranscodeType>> Y into(Y target) { 400785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request previous = target.getRequest(); 401b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (previous != null) { 402b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd previous.clear(); 403b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 404b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 405785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request request = buildRequest(target); 406b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd target.setRequest(request); 407e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd if (request != null) { 408e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd request.run(); 409e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd } 410b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return target; 411b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 412b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 413785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd /** 414785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * Sets the {@link ImageView} the image will be loaded into, cancels any existing loads into the view, and frees 415785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * any resources Glide has loaded into the view so they may be reused. 416785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * 417785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * @see Glide#clear(View) 418785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * 419785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * @param view The view to cancel previous loads for and load the new image into. 420785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd * @return The {@link BitmapImageViewTarget} used to wrap the given {@link ImageView}. 421785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd */ 42277e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd public Target<TranscodeType> into(ImageView view) { 423d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return into(glide.buildImageViewTarget(view, transcodeClass)); 424785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd } 425785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd 42677e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd private Request buildRequest(Target<TranscodeType> target) { 427785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd final Request result; 428f9ccb9c6c3f50832993459b83746567dfeb6acbaSam Judd 42908b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (priority == null) { 4309bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd priority = Priority.NORMAL; 43108b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 432e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd 433b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (thumbnailRequestBuilder != null) { 434b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd ThumbnailRequestCoordinator requestCoordinator = new ThumbnailRequestCoordinator(); 435785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request fullRequest = buildRequest(target, sizeMultiplier, priority, requestCoordinator); 436b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 437bcd0ac8b8367f88ca502e0540cfa871ee4eb07b2Sam Judd if (thumbnailRequestBuilder.animationId <= 0) { 438b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd thumbnailRequestBuilder.animationId = animationId; 439b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 440b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 441a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd if (thumbnailRequestBuilder.animation == null) { 442a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd thumbnailRequestBuilder.animation = animation; 443a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 444a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 445b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (thumbnailRequestBuilder.requestListener == null && requestListener != null) { 446b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd thumbnailRequestBuilder.requestListener = requestListener; 447b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 44808b61677e60069ba681b56cf6312fc0b92020962Sam Judd 44908b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (thumbnailRequestBuilder.priority == null) { 45008b61677e60069ba681b56cf6312fc0b92020962Sam Judd thumbnailRequestBuilder.priority = getThumbnailPriority(); 45108b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 45208b61677e60069ba681b56cf6312fc0b92020962Sam Judd 453785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request thumbnailRequest = thumbnailRequestBuilder.buildRequest(target, 45427eb05702fd4531d6974640c62df1d569629edb6Sam Judd thumbnailRequestBuilder.sizeMultiplier, thumbnailRequestBuilder.priority, requestCoordinator); 455b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 456b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd requestCoordinator.setRequests(fullRequest, thumbnailRequest); 457b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd result = requestCoordinator; 458b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } else if (thumbSizeMultiplier != null) { 459b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd ThumbnailRequestCoordinator requestCoordinator = new ThumbnailRequestCoordinator(); 460785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request fullRequest = buildRequest(target, sizeMultiplier, priority, requestCoordinator); 461785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Judd Request thumbnailRequest = buildRequest(target, thumbSizeMultiplier, getThumbnailPriority(), 46227eb05702fd4531d6974640c62df1d569629edb6Sam Judd requestCoordinator); 463b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd requestCoordinator.setRequests(fullRequest, thumbnailRequest); 464b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd result = requestCoordinator; 465b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } else { 46644e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd result = buildRequest(target, sizeMultiplier, priority, null); 467b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 468b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return result; 469b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 470b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 47108b61677e60069ba681b56cf6312fc0b92020962Sam Judd private Priority getThumbnailPriority() { 47208b61677e60069ba681b56cf6312fc0b92020962Sam Judd final Priority result; 47308b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (priority == Priority.LOW) { 47408b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.NORMAL; 47508b61677e60069ba681b56cf6312fc0b92020962Sam Judd } else if (priority == Priority.NORMAL) { 47608b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.HIGH; 47708b61677e60069ba681b56cf6312fc0b92020962Sam Judd } else { 47808b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.IMMEDIATE; 47908b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 48008b61677e60069ba681b56cf6312fc0b92020962Sam Judd return result; 48108b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 48208b61677e60069ba681b56cf6312fc0b92020962Sam Judd 48377e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd private Request buildRequest(Target<TranscodeType> target, float sizeMultiplier, Priority priority, 48427eb05702fd4531d6974640c62df1d569629edb6Sam Judd RequestCoordinator requestCoordinator) { 485f9ccb9c6c3f50832993459b83746567dfeb6acbaSam Judd if (model == null) { 486dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd return buildRequestForDataType(target, loadProvider, sizeMultiplier, priority, null); 48727eb05702fd4531d6974640c62df1d569629edb6Sam Judd } else { 488dbb67f826b0e76645c809be6d589e9dcb8271324Sam Judd return buildRequestForDataType(target, loadProvider, sizeMultiplier, priority, requestCoordinator); 48927eb05702fd4531d6974640c62df1d569629edb6Sam Judd } 49027eb05702fd4531d6974640c62df1d569629edb6Sam Judd } 49127eb05702fd4531d6974640c62df1d569629edb6Sam Judd 49277e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd private <Z> Request buildRequestForDataType(Target<TranscodeType> target, 493ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd LoadProvider<ModelType, Z, ResourceType, TranscodeType> loadProvider, float sizeMultiplier, 494ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd Priority priority, RequestCoordinator requestCoordinator) { 495ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd return new GenericRequest<ModelType, Z, ResourceType, TranscodeType>(loadProvider, model, context, priority, 496ad7119b91370d7418b24f5646b35190aa76e5e66Sam Judd target, sizeMultiplier, placeholderDrawable, placeholderId, errorPlaceholder, errorId, requestListener, 497d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd animationId, animation, requestCoordinator, glide.getEngine(), getFinalTransformation(), 49880b7691daac313059e4311214249fa6da53451edSam Judd transcodeClass, isCacheable); 499e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd } 500e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd 50131b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd @SuppressWarnings("unchecked") 50244e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd private Transformation<ResourceType> getFinalTransformation() { 503b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd switch (transformations.size()) { 504b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd case 0: 505b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return Transformation.NONE; 506b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd case 1: 507b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return transformations.get(0); 508b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd default: 50944e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd return new MultiTransformation<ResourceType>(transformations); 510b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 511b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 512b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd} 513