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