From b01082225896132431da0ee9a85028d610ae4abf Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Sat, 11 Oct 2014 21:12:54 -0700 Subject: Allow request builder re-use. --- .../com/bumptech/glide/BitmapRequestBuilder.java | 6 ++++ .../java/com/bumptech/glide/BitmapTypeRequest.java | 4 +-- .../com/bumptech/glide/DrawableRequestBuilder.java | 10 ++++-- .../com/bumptech/glide/DrawableTypeRequest.java | 10 +++--- .../com/bumptech/glide/GenericRequestBuilder.java | 42 ++++++++++++++++------ .../bumptech/glide/GenericTranscodeRequest.java | 17 +++++---- .../java/com/bumptech/glide/GifRequestBuilder.java | 6 ++++ .../java/com/bumptech/glide/GifTypeRequest.java | 4 +-- .../java/com/bumptech/glide/RequestManager.java | 41 +++++++++++++-------- 9 files changed, 95 insertions(+), 45 deletions(-) (limited to 'library/src/main/java/com') diff --git a/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java b/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java index b15819cf..d48d0606 100644 --- a/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java @@ -455,6 +455,12 @@ public class BitmapRequestBuilder return this; } + @Override + public BitmapRequestBuilder load(ModelType model) { + super.load(model); + return this; + } + /** * {@inheritDoc} * diff --git a/library/src/main/java/com/bumptech/glide/BitmapTypeRequest.java b/library/src/main/java/com/bumptech/glide/BitmapTypeRequest.java index 2812e5d6..485b10fd 100644 --- a/library/src/main/java/com/bumptech/glide/BitmapTypeRequest.java +++ b/library/src/main/java/com/bumptech/glide/BitmapTypeRequest.java @@ -20,7 +20,6 @@ import java.io.InputStream; * @param The type of model to load the {@link Bitmap} or transcoded class from. */ public class BitmapTypeRequest extends BitmapRequestBuilder { - private final ModelType model; private final ModelLoader streamModelLoader; private final ModelLoader fileDescriptorModelLoader; private final Glide glide; @@ -53,7 +52,6 @@ public class BitmapTypeRequest extends BitmapRequestBuilder extends BitmapRequestBuilder BitmapRequestBuilder transcode(ResourceTranscoder transcoder, Class transcodeClass) { - return optionsApplier.apply(model, new BitmapRequestBuilder( + return optionsApplier.apply(new BitmapRequestBuilder( buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, transcodeClass, transcoder), transcodeClass, this)); } diff --git a/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java b/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java index 187aebd9..0a7b9bce 100644 --- a/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java @@ -41,10 +41,10 @@ public class DrawableRequestBuilder extends GenericRequestBuilder implements BitmapOptions, DrawableOptions { - DrawableRequestBuilder(Context context, ModelType model, + DrawableRequestBuilder(Context context, Class modelClass, LoadProvider loadProvider, Glide glide, RequestTracker requestTracker, Lifecycle lifecycle) { - super(context, model, loadProvider, GlideDrawable.class, glide, requestTracker, lifecycle); + super(context, modelClass, loadProvider, GlideDrawable.class, glide, requestTracker, lifecycle); // Default to animating. crossFade(); } @@ -406,6 +406,12 @@ public class DrawableRequestBuilder return this; } + @Override + public DrawableRequestBuilder load(ModelType model) { + super.load(model); + return this; + } + /** * {@inheritDoc} * diff --git a/library/src/main/java/com/bumptech/glide/DrawableTypeRequest.java b/library/src/main/java/com/bumptech/glide/DrawableTypeRequest.java index 21c1139f..84d3a273 100644 --- a/library/src/main/java/com/bumptech/glide/DrawableTypeRequest.java +++ b/library/src/main/java/com/bumptech/glide/DrawableTypeRequest.java @@ -50,10 +50,10 @@ public class DrawableTypeRequest extends DrawableRequestBuilder(modelLoader, transcoder, dataLoadProvider); } - DrawableTypeRequest(ModelType model, ModelLoader streamModelLoader, + DrawableTypeRequest(Class modelClass, ModelLoader streamModelLoader, ModelLoader fileDescriptorModelLoader, Context context, Glide glide, RequestTracker requestTracker, Lifecycle lifecycle, RequestManager.OptionsApplier optionsApplier) { - super(context, model, + super(context, modelClass, buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, GifBitmapWrapper.class, GlideDrawable.class, null), glide, requestTracker, lifecycle); @@ -68,7 +68,7 @@ public class DrawableTypeRequest extends DrawableRequestBuilder asBitmap() { - return optionsApplier.apply(model, new BitmapTypeRequest(this, streamModelLoader, + return optionsApplier.apply(new BitmapTypeRequest(this, streamModelLoader, fileDescriptorModelLoader, optionsApplier)); } @@ -85,7 +85,7 @@ public class DrawableTypeRequest extends DrawableRequestBuilder asGif() { - return optionsApplier.apply(model, new GifTypeRequest(this, streamModelLoader, optionsApplier)); + return optionsApplier.apply(new GifTypeRequest(this, streamModelLoader, optionsApplier)); } /** @@ -103,7 +103,7 @@ public class DrawableTypeRequest extends DrawableRequestBuilder getDownloadOnlyRequest() { - return optionsApplier.apply(model, new GenericTranscodeRequest(File.class, this, + return optionsApplier.apply(new GenericTranscodeRequest(File.class, this, streamModelLoader, InputStream.class, File.class, optionsApplier)); } } diff --git a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java index 698d58e0..12da07eb 100644 --- a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java @@ -38,11 +38,6 @@ import java.io.File; /** * A generic class that can handle setting options and staring loads for generic resource types. * - *

- * Warning - It is not safe to use this builder after calling into(), it may be pooled and - * reused. - *

- * * @param The type of model representing the resource. * @param The data type that the resource {@link com.bumptech.glide.load.model.ModelLoader} will provide that * can be decoded by the {@link com.bumptech.glide.load.ResourceDecoder}. @@ -50,9 +45,9 @@ import java.io.File; * @param The type of resource the decoded resource will be transcoded to. */ public class GenericRequestBuilder { + protected final Class modelClass; protected final Context context; protected final Glide glide; - protected final ModelType model; protected final Class transcodeClass; protected final RequestTracker requestTracker; protected final Lifecycle lifecycle; @@ -60,6 +55,10 @@ public class GenericRequestBuilder requestListener; @@ -79,18 +78,20 @@ public class GenericRequestBuilder loadProvider, Class transcodeClass, GenericRequestBuilder other) { - this(other.context, other.model, loadProvider, transcodeClass, other.glide, other.requestTracker, + this(other.context, other.modelClass, loadProvider, transcodeClass, other.glide, other.requestTracker, other.lifecycle); this.signature = other.signature; this.diskCacheStrategy = other.diskCacheStrategy; this.isCacheable = other.isCacheable; + this.model = other.model; + this.isModelSet = other.isModelSet; } - GenericRequestBuilder(Context context, ModelType model, + GenericRequestBuilder(Context context, Class modelClass, LoadProvider loadProvider, Class transcodeClass, Glide glide, RequestTracker requestTracker, Lifecycle lifecycle) { this.context = context; - this.model = model; + this.modelClass = modelClass; this.transcodeClass = transcodeClass; this.glide = glide; this.requestTracker = requestTracker; @@ -101,7 +102,7 @@ public class GenericRequestBuilder + * This method must be called at least once before {@link #into(com.bumptech.glide.request.target.Target)} is + * called. + *

+ * + * @param model The model to load data for, or null. + * @return This request builder. + */ + public GenericRequestBuilder load(ModelType model) { + this.model = model; + isModelSet = true; + return this; + } + + /** * Set the target the resource will be loaded into. * @@ -554,6 +573,9 @@ public class GenericRequestBuilder this.optionsApplier = optionsApplier; } - GenericTranscodeRequest(Context context, Glide glide, ModelType model, ModelLoader modelLoader, - Class dataClass, Class resourceClass, RequestTracker requestTracker, - Lifecycle lifecycle, RequestManager.OptionsApplier optionsApplier) { - super(context, model, build(glide, modelLoader, dataClass, resourceClass, UnitTranscoder.get()), - resourceClass, glide, requestTracker, lifecycle); + GenericTranscodeRequest(Context context, Glide glide, Class modelClass, + ModelLoader modelLoader, Class dataClass, Class resourceClass, + RequestTracker requestTracker, Lifecycle lifecycle, RequestManager.OptionsApplier optionsApplier) { + super(context, modelClass, build(glide, modelLoader, dataClass, resourceClass, + UnitTranscoder.get()), resourceClass, glide, requestTracker, lifecycle); this.modelLoader = modelLoader; this.dataClass = dataClass; this.resourceClass = resourceClass; @@ -77,9 +77,8 @@ public class GenericTranscodeRequest LoadProvider loadProvider = build(glide, modelLoader, dataClass, resourceClass, transcoder); - return optionsApplier.apply(model, - new GenericRequestBuilder(loadProvider, - transcodeClass, this)); + return optionsApplier.apply(new GenericRequestBuilder( + loadProvider, transcodeClass, this)); } /** @@ -101,7 +100,7 @@ public class GenericTranscodeRequest DataLoadProvider dataLoadProvider = glide.buildDataProvider(dataClass, File.class); FixedLoadProvider fixedLoadProvider = new FixedLoadProvider(modelLoader, transcoder, dataLoadProvider); - return optionsApplier.apply(model, new GenericRequestBuilder(fixedLoadProvider, + return optionsApplier.apply(new GenericRequestBuilder(fixedLoadProvider, File.class, this)) .priority(Priority.LOW) .diskCacheStrategy(DiskCacheStrategy.SOURCE) diff --git a/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java b/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java index de9330f5..5e63549d 100644 --- a/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java @@ -397,6 +397,12 @@ public class GifRequestBuilder return this; } + @Override + public GifRequestBuilder load(ModelType model) { + super.load(model); + return this; + } + @Override void applyFitCenter() { fitCenter(); diff --git a/library/src/main/java/com/bumptech/glide/GifTypeRequest.java b/library/src/main/java/com/bumptech/glide/GifTypeRequest.java index bded0f99..7fd20898 100644 --- a/library/src/main/java/com/bumptech/glide/GifTypeRequest.java +++ b/library/src/main/java/com/bumptech/glide/GifTypeRequest.java @@ -62,8 +62,8 @@ public class GifTypeRequest extends GifRequestBuilder { ResourceTranscoder transcoder, Class transcodeClass) { FixedLoadProvider provider = buildProvider(glide, streamModelLoader, transcodeClass, transcoder); - return optionsApplier.apply(model, - new GenericRequestBuilder(provider, transcodeClass, this)); + return optionsApplier.apply(new GenericRequestBuilder(provider, + transcodeClass, this)); } /** diff --git a/library/src/main/java/com/bumptech/glide/RequestManager.java b/library/src/main/java/com/bumptech/glide/RequestManager.java index 65d216c6..80853404 100644 --- a/library/src/main/java/com/bumptech/glide/RequestManager.java +++ b/library/src/main/java/com/bumptech/glide/RequestManager.java @@ -85,11 +85,10 @@ public class RequestManager implements LifecycleListener { /** * Allows the implementor to apply some options to the given request. * - * @param model The model that is being loaded. * @param requestBuilder The request builder being used to construct the load. * @param The type of the model. */ - void apply(T model, GenericRequestBuilder requestBuilder); + void apply(GenericRequestBuilder requestBuilder); } /** @@ -328,8 +327,9 @@ public class RequestManager implements LifecycleListener { ModelLoader fileDescriptorModelLoader = Glide.buildFileDescriptorModelLoader(uri, context); - return optionsApplier.apply(uri, new DrawableTypeRequest(uri, mediaStoreLoader, - fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier)); + return (DrawableTypeRequest) optionsApplier.apply(new DrawableTypeRequest(Uri.class, mediaStoreLoader, + fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier)) + .load(uri); } /** @@ -461,6 +461,7 @@ public class RequestManager implements LifecycleListener { return loadGeneric(model); } + @SuppressWarnings("unchecked") private DrawableTypeRequest loadGeneric(T model) { ModelLoader streamModelLoader = Glide.buildStreamModelLoader(model, context); ModelLoader fileDescriptorModelLoader = @@ -470,8 +471,16 @@ public class RequestManager implements LifecycleListener { + " which there is a registered ModelLoader, if you are using a custom model, you must first call" + " Glide#register with a ModelLoaderFactory for your custom model class"); } - return optionsApplier.apply(model, new DrawableTypeRequest(model, streamModelLoader, - fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier)); + + return (DrawableTypeRequest) optionsApplier.apply( + new DrawableTypeRequest(getSafeClass(model), streamModelLoader, fileDescriptorModelLoader, context, + glide, requestTracker, lifecycle, optionsApplier)) + .load(model); + } + + @SuppressWarnings("unchecked") + private static Class getSafeClass(T model) { + return model != null ? (Class) model.getClass() : null; } /** @@ -488,8 +497,9 @@ public class RequestManager implements LifecycleListener { } public DrawableTypeRequest load(T model) { - return optionsApplier.apply(model, new DrawableTypeRequest(model, null, loader, context, - glide, requestTracker, lifecycle, optionsApplier)); + return (DrawableTypeRequest) optionsApplier.apply(new DrawableTypeRequest(getSafeClass(model), null, + loader, context, glide, requestTracker, lifecycle, optionsApplier)) + .load(model); } } @@ -507,8 +517,9 @@ public class RequestManager implements LifecycleListener { } public DrawableTypeRequest load(T model) { - return optionsApplier.apply(model, new DrawableTypeRequest(model, loader, null, context, - glide, requestTracker, lifecycle, optionsApplier)); + return (DrawableTypeRequest) optionsApplier.apply(new DrawableTypeRequest(getSafeClass(model), loader, + null, context, glide, requestTracker, lifecycle, optionsApplier)) + .load(model); } } @@ -559,17 +570,19 @@ public class RequestManager implements LifecycleListener { * @return This request builder. */ public GenericTranscodeRequest as(Class resourceClass) { - return optionsApplier.apply(model, new GenericTranscodeRequest(context, glide, model, - modelLoader, dataClass, resourceClass, requestTracker, lifecycle, optionsApplier)); + return (GenericTranscodeRequest) optionsApplier.apply( + new GenericTranscodeRequest(context, glide, getSafeClass(model), modelLoader, + dataClass, resourceClass, requestTracker, lifecycle, optionsApplier)) + .load(model); } } } class OptionsApplier { - public > X apply(A model, X builder) { + public > X apply(X builder) { if (options != null) { - options.apply(model, builder); + options.apply(builder); } return builder; } -- cgit v1.2.3