GenericRequestBuilder.java revision 9bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38
1b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddpackage com.bumptech.glide; 2b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 3b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.content.Context; 4b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.graphics.Bitmap; 5a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Juddimport android.graphics.drawable.Drawable; 6b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.view.View; 7a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Juddimport android.view.animation.Animation; 8b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport android.widget.ImageView; 99bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.MultiTransformation; 109fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.ResourceDecoder; 119bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.Transformation; 129fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.data.bitmap.BitmapDecoder; 139bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.data.bitmap.CenterCrop; 149fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.data.bitmap.Downsampler; 159bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.data.bitmap.FitCenter; 169fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.data.bitmap.VideoBitmapDecoder; 179bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.load.model.ModelLoader; 189bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.provider.ChildLoadProvider; 199fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.provider.LoadProvider; 209fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.MultiTypeRequestCoordinator; 219fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.Request; 229fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.RequestCoordinator; 239fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.ThumbnailRequestCoordinator; 249bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.request.bitmap.BitmapRequestBuilder; 259bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.request.bitmap.RequestListener; 269fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.target.ImageViewTarget; 279fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.target.Target; 28b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 29b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport java.util.ArrayList; 30b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddimport java.util.List; 31b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 32b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd/** 33b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * A generic class that can handle loading a bitmap either from an image or as a thumbnail from a video given 34b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * models loaders to translate a model into generic resources for either an image or a video and decoders that can 35b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * decode those resources into bitmaps. 36b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 37b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @paramThe type of model representing the image or video. 38b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param The resource type that the image {@link ModelLoader} will provide that can be decoded 39b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * by the image {@link BitmapDecoder}. 40b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param The resource type that the video {@link ModelLoader} will provide that can be decoded 41b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * by the video {@link BitmapDecoder}. 42b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 43b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Juddpublic class GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> { 4427eb05702fd4531d6974640c62df1d569629edb6Sam Judd protected final Context context; 4531b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd private final List<Transformation<Bitmap>> transformations = new ArrayList<Transformation<Bitmap>>(); 46b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private final ModelType model; 47c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd private final ChildLoadProvider<ModelType, ImageResourceType, Bitmap> imageLoadProvider; 48c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd private final ChildLoadProvider<ModelType, VideoResourceType, Bitmap> videoLoadProvider; 49b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int animationId; 50a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Animation animation; 51b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int placeholderId; 52b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private int errorId; 53b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private RequestListener<ModelType> requestListener; 54b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private Float thumbSizeMultiplier; 55b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> thumbnailRequestBuilder; 56b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private Float sizeMultiplier = 1f; 57a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Drawable placeholderDrawable; 58a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd private Drawable errorPlaceholder; 5908b61677e60069ba681b56cf6312fc0b92020962Sam Judd private Priority priority = null; 60b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 61c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd public GenericRequestBuilder(Context context, ModelType model, 62c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd LoadProvider<ModelType, ImageResourceType, Bitmap> imageLoadProvider, 63c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd LoadProvider<ModelType, VideoResourceType, Bitmap> videoLoadProvider) { 64c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd this.imageLoadProvider = imageLoadProvider != null ? 65c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd new ChildLoadProvider<ModelType, ImageResourceType, Bitmap>(imageLoadProvider) : null; 66c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd this.videoLoadProvider = videoLoadProvider != null ? 67c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd new ChildLoadProvider<ModelType, VideoResourceType, Bitmap>(videoLoadProvider) : null; 68c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd 6927eb05702fd4531d6974640c62df1d569629edb6Sam Judd if (context == null) { 70b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new NullPointerException("Context can't be null"); 71b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 72c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd if (model != null && imageLoadProvider == null && videoLoadProvider == null) { 73c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd throw new NullPointerException("At least one of imageLoadProvider and videoLoadProvider must not be null"); 74b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd } 75c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd this.context = context; 76b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd 77b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.model = model; 78b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 79b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 80b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 81b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads and displays the image retrieved by the given thumbnail request if it finishes before this request. 82b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Best used for loading thumbnail images that are smaller and will be loaded more quickly than the fullsize 83b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * image. There are no guarantees about the order in which the requests will actually finish. However, if the 84b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * thumb request completes after the full request, the thumb image will never replace the full image. 85b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 86b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see #thumbnail(float) 87b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 88b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 89b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Note - Any options on the main request will not be passed on to the thumbnail request. For example, if 90b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * you want an animation to occur when either the full image loads or the thumbnail loads, you need to call 91b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #animate(int)} on both the thumb and the full request. For a simpler thumbnail option, see 92b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #thumbnail(float)}. 93b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 94b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 95b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 96b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Only the thumbnail call on the main request will be obeyed. 97b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 98b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 99b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param thumbnailRequest The request to use to load the thumbnail. 100b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 101b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 102b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> thumbnail( 103b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> thumbnailRequest) { 104b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.thumbnailRequestBuilder = thumbnailRequest; 105b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 106b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 107b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 108b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 109b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 110b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads an image in an identical manner to this request except with the dimensions of the target multiplied 111b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * by the given size multiplier. If the thumbnail load completes before the fullsize load, the thumbnail will 112b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * be shown. If the thumbnail load completes afer the fullsize load, the thumbnail will not be shown. 113b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 114b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 115b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Note - The thumbnail image will be smaller than the size requested so the target (or {@link ImageView}) 116b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * must be able to scale the thumbnail appropriately. See {@link ImageView.ScaleType}. 117b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 118b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 119b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 120b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Almost all options will be copied from the original load, including the {@link ModelLoader}, 121b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link BitmapDecoder}, and {@link Transformation}s. However, {@link #placeholder(int)} and 122b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * {@link #error(int)}, and {@link #listener(RequestListener)} will only be used on the fullsize load and 123b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * will not be copied for the thumbnail load. 124b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 125b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 126b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 127b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Only the thumbnail call on the main request will be obeyed. 128b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 129b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 130b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param sizeMultiplier The multiplier to apply to the {@link Target}'s dimensions when loading the thumbnail. 131b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 132b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 133b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> thumbnail(float sizeMultiplier) { 134b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (sizeMultiplier < 0f || sizeMultiplier > 1f) { 135b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new IllegalArgumentException("sizeMultiplier must be between 0 and 1"); 136b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 137b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.thumbSizeMultiplier = sizeMultiplier; 138b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 139b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 140b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 141b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 142b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 143b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Applies a multiplier to the {@link Target}'s size before loading the image. Useful for loading thumbnails 144b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * or trying to avoid loading huge bitmaps on devices with overly dense screens. 145b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 146b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param sizeMultiplier The multiplier to apply to the {@link Target}'s dimensions when loading the image. 147b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This builder object. 148b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 149b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> sizeMultiplier( 150b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd float sizeMultiplier) { 151b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (sizeMultiplier < 0f || sizeMultiplier > 1f) { 152b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd throw new IllegalArgumentException("sizeMultiplier must be between 0 and 1"); 153b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 154b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.sizeMultiplier = sizeMultiplier; 155b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 156b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 157b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 158b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 159b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 160b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads the image from the given resource type into an {@link Bitmap} using the given {@link BitmapDecoder}. 161b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 162b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 163b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Will be ignored if the data represented by the given model is not an image. 164b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 165b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 166b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see Downsampler 167b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 168b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param decoder The {@link BitmapDecoder} to use to decode the image resource. 169b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder. 170b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 171b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> imageDecoder( 17227eb05702fd4531d6974640c62df1d569629edb6Sam Judd ResourceDecoder<ImageResourceType, Bitmap> decoder) { 173c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd imageLoadProvider.setSourceDecoder(decoder); 174b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 175b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 176b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 177b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 178b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 179b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Loads the video from the given resource type into an {@link Bitmap} using the given {@link BitmapDecoder}. 180b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 181b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 182b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Will be ignored if the data represented by the given model is not a video. 183b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 184b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 185b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see VideoBitmapDecoder 186b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 187b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param decoder The {@link BitmapDecoder} to use to decode the video resource. 18876fbad3dbce72240e9f5b82c826e3229c1176fb6Sam Judd * @return This request builder. 189b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 190b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> videoDecoder( 19127eb05702fd4531d6974640c62df1d569629edb6Sam Judd ResourceDecoder<VideoResourceType, Bitmap> decoder) { 192c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd videoLoadProvider.setSourceDecoder(decoder); 193b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 194b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 195b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 196b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 197b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 19808b61677e60069ba681b56cf6312fc0b92020962Sam Judd * Sets the priority for this load. 19908b61677e60069ba681b56cf6312fc0b92020962Sam Judd * 20008b61677e60069ba681b56cf6312fc0b92020962Sam Judd * @param priority A priority. 20108b61677e60069ba681b56cf6312fc0b92020962Sam Judd * @return This request builder. 20208b61677e60069ba681b56cf6312fc0b92020962Sam Judd */ 20308b61677e60069ba681b56cf6312fc0b92020962Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> priority(Priority priority) { 20408b61677e60069ba681b56cf6312fc0b92020962Sam Judd this.priority = priority; 20508b61677e60069ba681b56cf6312fc0b92020962Sam Judd 20608b61677e60069ba681b56cf6312fc0b92020962Sam Judd return this; 20708b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 20808b61677e60069ba681b56cf6312fc0b92020962Sam Judd 20908b61677e60069ba681b56cf6312fc0b92020962Sam Judd /** 21031b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd * Transform images using {@link CenterCrop}. 211b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 212b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 213b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 214b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> centerCrop() { 21531b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd return transform(new CenterCrop(Glide.get(context).getBitmapPool())); 216b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 217b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 218b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 21931b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd * Transform images using {@link FitCenter}. 220b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 221b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 222b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 223b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> fitCenter() { 22431b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd return transform(new FitCenter(Glide.get(context).getBitmapPool())); 225b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 226b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 227b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 228b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Transform images with the given {@link Transformation}. Appends this transformation onto any existing 229b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * transformations 230b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 231b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param transformation the transformation to apply. 232b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 233b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 234b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> transform( 23531b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd Transformation<Bitmap> transformation) { 236b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd transformations.add(transformation); 237b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 238b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 239b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 240b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 241b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 242b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets an animation to run on the wrapped target when an image load finishes. Will only be run if the image 243b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * was loaded asynchronously (ie was not in the memory cache) 244b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 245b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param animationId The resource id of the animation to run 246b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 247b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 248b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> animate(int animationId) { 249b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.animationId = animationId; 250b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 251b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 252b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 253b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 254b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 255a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets an animation to run on the wrapped target when an image load finishes. Will only be run if the image 256a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * was loaded asynchronously (ie was not in the memory cache) 257a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 258a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param animation The animation to run 259a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder 260a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 261a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> animate(Animation animation) { 262a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.animation = animation; 263a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 264a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 265a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 266a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 267a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 268b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a resource to display while an image is loading 269b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 270b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param resourceId The id of the resource to use as a placeholder 271b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This RequestBuilder 272b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 273b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> placeholder(int resourceId) { 274b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.placeholderId = resourceId; 275b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 276b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 277b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 278b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 279b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 280a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets a drawable to display while an image is loading. 281a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 282a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param drawable The drawable to display as a placeholder. 283a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder. 284a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 285a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> placeholder(Drawable drawable) { 286a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.placeholderDrawable = drawable; 287a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 288a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 289a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 290a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 291a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 292b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a resource to display if a load fails 293b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 294b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param resourceId The id of the resource to use as a placeholder 295b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This request 296b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 297b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> error(int resourceId) { 298b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.errorId = resourceId; 299b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 300b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 301b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 302b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 303b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 304a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * Sets a {@link Drawable} to display if a load fails. 305a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * 306a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @param drawable The drawable to display. 307a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd * @return This RequestBuilder. 308a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd */ 309a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> error(Drawable drawable) { 310a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd this.errorPlaceholder = drawable; 311a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 312a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd return this; 313a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 314a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 315a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd /** 316b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets a RequestBuilder listener to monitor the image load. It's best to create a single instance of an 317b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * exception handler per type of request (usually activity/fragment) rather than pass one in per request to 318b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * avoid some redundant object allocation. 319b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 320b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param requestListener The request listener to use 321b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return This request 322b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 323b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public GenericRequestBuilder<ModelType, ImageResourceType, VideoResourceType> listener( 324b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd RequestListener<ModelType> requestListener) { 325b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd this.requestListener = requestListener; 326b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 327b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return this; 328b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 329b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 330b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 331b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Set the target the image will be loaded into. 332b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 333b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param target The target to load te image for 334b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return The given target. 335b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 336b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public <Y extends Target> Y into(Y target) { 337b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd Request previous = target.getRequest(); 338b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (previous != null) { 339b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd previous.clear(); 340b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 341b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 342b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd Request request = buildRequest(target); 343b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd target.setRequest(request); 344e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd if (request != null) { 345e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd request.run(); 346e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd } 347b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return target; 348b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 349b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 350b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 351b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Sets the {@link ImageView} the image will be loaded into, cancels any existing loads into the view, and frees 352b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * any resources Glide has loaded into the view so they may be reused. 353b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 354b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see Glide#clear(View) 355b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 356b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param view The view to cancel previous loads for and load the new image into. 357b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @return The {@link ImageViewTarget} used to wrap the given {@link ImageView}. 358b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 359b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public ImageViewTarget into(ImageView view) { 360b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return into(new ImageViewTarget(view)); 361b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 362b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 363b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd private <Y extends Target> Request buildRequest(Y target) { 364b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd final Request result; 365f9ccb9c6c3f50832993459b83746567dfeb6acbaSam Judd 36608b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (priority == null) { 3679bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd priority = Priority.NORMAL; 36808b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 369e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd 370b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (thumbnailRequestBuilder != null) { 371b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd ThumbnailRequestCoordinator requestCoordinator = new ThumbnailRequestCoordinator(); 37227eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request fullRequest = buildBitmapRequest(target, sizeMultiplier, priority, requestCoordinator); 373b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 374bcd0ac8b8367f88ca502e0540cfa871ee4eb07b2Sam Judd if (thumbnailRequestBuilder.animationId <= 0) { 375b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd thumbnailRequestBuilder.animationId = animationId; 376b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 377b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 378a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd if (thumbnailRequestBuilder.animation == null) { 379a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd thumbnailRequestBuilder.animation = animation; 380a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd } 381a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd 382b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (thumbnailRequestBuilder.requestListener == null && requestListener != null) { 383b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd thumbnailRequestBuilder.requestListener = requestListener; 384b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 38508b61677e60069ba681b56cf6312fc0b92020962Sam Judd 38608b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (thumbnailRequestBuilder.priority == null) { 38708b61677e60069ba681b56cf6312fc0b92020962Sam Judd thumbnailRequestBuilder.priority = getThumbnailPriority(); 38808b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 38908b61677e60069ba681b56cf6312fc0b92020962Sam Judd 39027eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request thumbnailRequest = thumbnailRequestBuilder.buildBitmapRequest(target, 39127eb05702fd4531d6974640c62df1d569629edb6Sam Judd thumbnailRequestBuilder.sizeMultiplier, thumbnailRequestBuilder.priority, requestCoordinator); 392b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 393b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd requestCoordinator.setRequests(fullRequest, thumbnailRequest); 394b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd result = requestCoordinator; 395b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } else if (thumbSizeMultiplier != null) { 396b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd ThumbnailRequestCoordinator requestCoordinator = new ThumbnailRequestCoordinator(); 39727eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request fullRequest = buildBitmapRequest(target, sizeMultiplier, priority, requestCoordinator); 39827eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request thumbnailRequest = buildBitmapRequest(target, thumbSizeMultiplier, getThumbnailPriority(), 39927eb05702fd4531d6974640c62df1d569629edb6Sam Judd requestCoordinator); 400b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd requestCoordinator.setRequests(fullRequest, thumbnailRequest); 401b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd result = requestCoordinator; 402b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } else { 40327eb05702fd4531d6974640c62df1d569629edb6Sam Judd result = buildBitmapRequest(target, sizeMultiplier, priority, null); 404b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 405b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return result; 406b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 407b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 40808b61677e60069ba681b56cf6312fc0b92020962Sam Judd private Priority getThumbnailPriority() { 40908b61677e60069ba681b56cf6312fc0b92020962Sam Judd final Priority result; 41008b61677e60069ba681b56cf6312fc0b92020962Sam Judd if (priority == Priority.LOW) { 41108b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.NORMAL; 41208b61677e60069ba681b56cf6312fc0b92020962Sam Judd } else if (priority == Priority.NORMAL) { 41308b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.HIGH; 41408b61677e60069ba681b56cf6312fc0b92020962Sam Judd } else { 41508b61677e60069ba681b56cf6312fc0b92020962Sam Judd result = Priority.IMMEDIATE; 41608b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 41708b61677e60069ba681b56cf6312fc0b92020962Sam Judd return result; 41808b61677e60069ba681b56cf6312fc0b92020962Sam Judd } 41908b61677e60069ba681b56cf6312fc0b92020962Sam Judd 42027eb05702fd4531d6974640c62df1d569629edb6Sam Judd private <Y extends Target> Request buildBitmapRequest(Y target, float sizeMultiplier, Priority priority, 42127eb05702fd4531d6974640c62df1d569629edb6Sam Judd RequestCoordinator requestCoordinator) { 422f9ccb9c6c3f50832993459b83746567dfeb6acbaSam Judd if (model == null) { 423c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd return buildBitmapRequestForType(target, imageLoadProvider, sizeMultiplier, priority, null).build(); 424f9ccb9c6c3f50832993459b83746567dfeb6acbaSam Judd } 425c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd if (imageLoadProvider == null) { 426c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd return buildBitmapRequestForType(target, videoLoadProvider, sizeMultiplier, priority, requestCoordinator) 427c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .build(); 428c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd } else if (videoLoadProvider == null) { 429c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd return buildBitmapRequestForType(target, imageLoadProvider, sizeMultiplier, priority, requestCoordinator) 430c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .build(); 43127eb05702fd4531d6974640c62df1d569629edb6Sam Judd } else { 43227eb05702fd4531d6974640c62df1d569629edb6Sam Judd MultiTypeRequestCoordinator typeCoordinator = new MultiTypeRequestCoordinator(requestCoordinator); 43327eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request imageRequest = 434c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd buildBitmapRequestForType(target, imageLoadProvider, sizeMultiplier, priority, typeCoordinator) 435c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .build(); 43627eb05702fd4531d6974640c62df1d569629edb6Sam Judd Request videoRequest = 437c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd buildBitmapRequestForType(target, videoLoadProvider, sizeMultiplier, priority, typeCoordinator) 438c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .build(); 43927eb05702fd4531d6974640c62df1d569629edb6Sam Judd typeCoordinator.setRequests(imageRequest, videoRequest); 44027eb05702fd4531d6974640c62df1d569629edb6Sam Judd return typeCoordinator; 44127eb05702fd4531d6974640c62df1d569629edb6Sam Judd } 44227eb05702fd4531d6974640c62df1d569629edb6Sam Judd } 44327eb05702fd4531d6974640c62df1d569629edb6Sam Judd 44427eb05702fd4531d6974640c62df1d569629edb6Sam Judd private <Y extends Target, Z> BitmapRequestBuilder<ModelType, Z> buildBitmapRequestForType(Y target, 445c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd LoadProvider<ModelType, Z, Bitmap> loadProvider, float sizeMultiplier, Priority priority, 446c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd RequestCoordinator requestCoordinator) { 4479bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd 448c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd return new BitmapRequestBuilder<ModelType, Z>() 449b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setContext(context) 450c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .setLoadProvider(loadProvider) 45108b61677e60069ba681b56cf6312fc0b92020962Sam Judd .setPriority(priority) 452c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd .setEngine(Glide.get(context).getEngine()) 453b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setModel(model) 454b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setTarget(target) 455b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setAnimation(animationId) 456a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd .setAnimation(animation) 457b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setRequestListener(requestListener) 458b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setPlaceholderResource(placeholderId) 459a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd .setPlaceholderDrawable(placeholderDrawable) 460b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd .setErrorResource(errorId) 461a76c1d39daf35a8375fea219cdd69c1dd56a276fSam Judd .setErrorDrawable(errorPlaceholder) 46227eb05702fd4531d6974640c62df1d569629edb6Sam Judd .setSizeMultiplier(sizeMultiplier) 46327eb05702fd4531d6974640c62df1d569629edb6Sam Judd .setPriority(priority) 46431b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd .setTransformation(getFinalTransformation()) 46527eb05702fd4531d6974640c62df1d569629edb6Sam Judd .setRequestCoordinator(requestCoordinator); 466e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd } 467e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd 46831b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd @SuppressWarnings("unchecked") 46931b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd private Transformation<Bitmap> getFinalTransformation() { 470b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd switch (transformations.size()) { 471b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd case 0: 472b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return Transformation.NONE; 473b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd case 1: 474b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd return transformations.get(0); 475b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd default: 47631b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd return new MultiTransformation<Bitmap>(transformations); 477b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 478b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 479b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd} 480