aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-11 21:12:54 -0700
committerSam Judd <judds@google.com>2014-10-14 07:21:13 -0700
commitb01082225896132431da0ee9a85028d610ae4abf (patch)
tree6c2c45e0ebd207f11343a7abc11fcd2aed949197 /library/src/main/java/com
parent4c0c22e7f5fa76d9f44d79b06866f1d09f305d82 (diff)
downloadglide-b01082225896132431da0ee9a85028d610ae4abf.tar.gz
Allow request builder re-use.
Diffstat (limited to 'library/src/main/java/com')
-rw-r--r--library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java6
-rw-r--r--library/src/main/java/com/bumptech/glide/BitmapTypeRequest.java4
-rw-r--r--library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java10
-rw-r--r--library/src/main/java/com/bumptech/glide/DrawableTypeRequest.java10
-rw-r--r--library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java42
-rw-r--r--library/src/main/java/com/bumptech/glide/GenericTranscodeRequest.java17
-rw-r--r--library/src/main/java/com/bumptech/glide/GifRequestBuilder.java6
-rw-r--r--library/src/main/java/com/bumptech/glide/GifTypeRequest.java4
-rw-r--r--library/src/main/java/com/bumptech/glide/RequestManager.java41
9 files changed, 95 insertions, 45 deletions
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<ModelType, TranscodeType>
return this;
}
+ @Override
+ public BitmapRequestBuilder<ModelType, TranscodeType> 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 <ModelType> The type of model to load the {@link Bitmap} or transcoded class from.
*/
public class BitmapTypeRequest<ModelType> extends BitmapRequestBuilder<ModelType, Bitmap> {
- private final ModelType model;
private final ModelLoader<ModelType, InputStream> streamModelLoader;
private final ModelLoader<ModelType, ParcelFileDescriptor> fileDescriptorModelLoader;
private final Glide glide;
@@ -53,7 +52,6 @@ public class BitmapTypeRequest<ModelType> extends BitmapRequestBuilder<ModelType
Bitmap.class, other);
this.streamModelLoader = streamModelLoader;
this.fileDescriptorModelLoader = fileDescriptorModelLoader;
- this.model = other.model;
this.glide = other.glide;
this.optionsApplier = optionsApplier;
}
@@ -68,7 +66,7 @@ public class BitmapTypeRequest<ModelType> extends BitmapRequestBuilder<ModelType
*/
public <R> BitmapRequestBuilder<ModelType, R> transcode(ResourceTranscoder<Bitmap, R> transcoder,
Class<R> transcodeClass) {
- return optionsApplier.apply(model, new BitmapRequestBuilder<ModelType, R>(
+ return optionsApplier.apply(new BitmapRequestBuilder<ModelType, R>(
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<ModelType>
extends GenericRequestBuilder<ModelType, ImageVideoWrapper, GifBitmapWrapper, GlideDrawable>
implements BitmapOptions, DrawableOptions {
- DrawableRequestBuilder(Context context, ModelType model,
+ DrawableRequestBuilder(Context context, Class<ModelType> modelClass,
LoadProvider<ModelType, ImageVideoWrapper, GifBitmapWrapper, GlideDrawable> 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<ModelType>
return this;
}
+ @Override
+ public DrawableRequestBuilder<ModelType> 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<ModelType> extends DrawableRequestBuilder<Model
return new FixedLoadProvider<A, ImageVideoWrapper, Z, R>(modelLoader, transcoder, dataLoadProvider);
}
- DrawableTypeRequest(ModelType model, ModelLoader<ModelType, InputStream> streamModelLoader,
+ DrawableTypeRequest(Class<ModelType> modelClass, ModelLoader<ModelType, InputStream> streamModelLoader,
ModelLoader<ModelType, ParcelFileDescriptor> 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<ModelType> extends DrawableRequestBuilder<Model
* @return A new request builder for loading a {@link android.graphics.Bitmap}
*/
public BitmapTypeRequest<ModelType> asBitmap() {
- return optionsApplier.apply(model, new BitmapTypeRequest<ModelType>(this, streamModelLoader,
+ return optionsApplier.apply(new BitmapTypeRequest<ModelType>(this, streamModelLoader,
fileDescriptorModelLoader, optionsApplier));
}
@@ -85,7 +85,7 @@ public class DrawableTypeRequest<ModelType> extends DrawableRequestBuilder<Model
* @return A new request builder for loading a {@link com.bumptech.glide.load.resource.gif.GifDrawable}.
*/
public GifTypeRequest<ModelType> asGif() {
- return optionsApplier.apply(model, new GifTypeRequest<ModelType>(this, streamModelLoader, optionsApplier));
+ return optionsApplier.apply(new GifTypeRequest<ModelType>(this, streamModelLoader, optionsApplier));
}
/**
@@ -103,7 +103,7 @@ public class DrawableTypeRequest<ModelType> extends DrawableRequestBuilder<Model
}
private GenericTranscodeRequest<ModelType, InputStream, File> getDownloadOnlyRequest() {
- return optionsApplier.apply(model, new GenericTranscodeRequest<ModelType, InputStream, File>(File.class, this,
+ return optionsApplier.apply(new GenericTranscodeRequest<ModelType, InputStream, File>(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.
*
- * <p>
- * Warning - It is <em>not</em> safe to use this builder after calling <code>into()</code>, it may be pooled and
- * reused.
- * </p>
- *
* @param <ModelType> The type of model representing the resource.
* @param <DataType> 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 <TranscodeType> The type of resource the decoded resource will be transcoded to.
*/
public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> {
+ protected final Class<ModelType> modelClass;
protected final Context context;
protected final Glide glide;
- protected final ModelType model;
protected final Class<TranscodeType> transcodeClass;
protected final RequestTracker requestTracker;
protected final Lifecycle lifecycle;
@@ -60,6 +55,10 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
private Key signature = EmptySignature.obtain();
+ private ModelType model;
+ // model may occasionally be null, so to enforce that load() was called, set a boolean rather than relying on model
+ // not to be null.
+ private boolean isModelSet;
private int placeholderId;
private int errorId;
private RequestListener<ModelType, TranscodeType> requestListener;
@@ -79,18 +78,20 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
GenericRequestBuilder(LoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider,
Class<TranscodeType> transcodeClass, GenericRequestBuilder<ModelType, ?, ?, ?> 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<ModelType> modelClass,
LoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider,
Class<TranscodeType> 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<ModelType, DataType, ResourceType, TranscodeT
if (context == null) {
throw new NullPointerException("Context can't be null");
}
- if (model != null && loadProvider == null) {
+ if (modelClass != null && loadProvider == null) {
throw new NullPointerException("LoadProvider must not be null");
}
}
@@ -542,6 +543,24 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
}
/**
+ * Sets the specific model to load data for.
+ *
+ * <p>
+ * This method must be called at least once before {@link #into(com.bumptech.glide.request.target.Target)} is
+ * called.
+ * </p>
+ *
+ * @param model The model to load data for, or null.
+ * @return This request builder.
+ */
+ public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> load(ModelType model) {
+ this.model = model;
+ isModelSet = true;
+ return this;
+ }
+
+
+ /**
* Set the target the resource will be loaded into.
*
* @see Glide#clear(com.bumptech.glide.request.target.Target)
@@ -554,6 +573,9 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
if (target == null) {
throw new IllegalArgumentException("You must pass in a non null Target");
}
+ if (!isModelSet) {
+ throw new IllegalArgumentException("You must first set a model (try #load())");
+ }
Request previous = target.getRequest();
diff --git a/library/src/main/java/com/bumptech/glide/GenericTranscodeRequest.java b/library/src/main/java/com/bumptech/glide/GenericTranscodeRequest.java
index 4274cb6e..9c0b4efa 100644
--- a/library/src/main/java/com/bumptech/glide/GenericTranscodeRequest.java
+++ b/library/src/main/java/com/bumptech/glide/GenericTranscodeRequest.java
@@ -53,11 +53,11 @@ public class GenericTranscodeRequest<ModelType, DataType, ResourceType>
this.optionsApplier = optionsApplier;
}
- GenericTranscodeRequest(Context context, Glide glide, ModelType model, ModelLoader<ModelType, DataType> modelLoader,
- Class<DataType> dataClass, Class<ResourceType> resourceClass, RequestTracker requestTracker,
- Lifecycle lifecycle, RequestManager.OptionsApplier optionsApplier) {
- super(context, model, build(glide, modelLoader, dataClass, resourceClass, UnitTranscoder.<ResourceType>get()),
- resourceClass, glide, requestTracker, lifecycle);
+ GenericTranscodeRequest(Context context, Glide glide, Class<ModelType> modelClass,
+ ModelLoader<ModelType, DataType> modelLoader, Class<DataType> dataClass, Class<ResourceType> resourceClass,
+ RequestTracker requestTracker, Lifecycle lifecycle, RequestManager.OptionsApplier optionsApplier) {
+ super(context, modelClass, build(glide, modelLoader, dataClass, resourceClass,
+ UnitTranscoder.<ResourceType>get()), resourceClass, glide, requestTracker, lifecycle);
this.modelLoader = modelLoader;
this.dataClass = dataClass;
this.resourceClass = resourceClass;
@@ -77,9 +77,8 @@ public class GenericTranscodeRequest<ModelType, DataType, ResourceType>
LoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider = build(glide, modelLoader,
dataClass, resourceClass, transcoder);
- return optionsApplier.apply(model,
- new GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType>(loadProvider,
- transcodeClass, this));
+ return optionsApplier.apply(new GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType>(
+ loadProvider, transcodeClass, this));
}
/**
@@ -101,7 +100,7 @@ public class GenericTranscodeRequest<ModelType, DataType, ResourceType>
DataLoadProvider<DataType, File> dataLoadProvider = glide.buildDataProvider(dataClass, File.class);
FixedLoadProvider<ModelType, DataType, File, File> fixedLoadProvider =
new FixedLoadProvider<ModelType, DataType, File, File>(modelLoader, transcoder, dataLoadProvider);
- return optionsApplier.apply(model, new GenericRequestBuilder<ModelType, DataType, File, File>(fixedLoadProvider,
+ return optionsApplier.apply(new GenericRequestBuilder<ModelType, DataType, File, File>(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
@@ -398,6 +398,12 @@ public class GifRequestBuilder<ModelType>
}
@Override
+ public GifRequestBuilder<ModelType> 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<ModelType> extends GifRequestBuilder<ModelType> {
ResourceTranscoder<GifDrawable, R> transcoder, Class<R> transcodeClass) {
FixedLoadProvider<ModelType, InputStream, GifDrawable, R> provider = buildProvider(glide, streamModelLoader,
transcodeClass, transcoder);
- return optionsApplier.apply(model,
- new GenericRequestBuilder<ModelType, InputStream, GifDrawable, R>(provider, transcodeClass, this));
+ return optionsApplier.apply(new GenericRequestBuilder<ModelType, InputStream, GifDrawable, R>(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 <T> The type of the model.
*/
- <T> void apply(T model, GenericRequestBuilder<T, ?, ?, ?> requestBuilder);
+ <T> void apply(GenericRequestBuilder<T, ?, ?, ?> requestBuilder);
}
/**
@@ -328,8 +327,9 @@ public class RequestManager implements LifecycleListener {
ModelLoader<Uri, ParcelFileDescriptor> fileDescriptorModelLoader = Glide.buildFileDescriptorModelLoader(uri,
context);
- return optionsApplier.apply(uri, new DrawableTypeRequest<Uri>(uri, mediaStoreLoader,
- fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier));
+ return (DrawableTypeRequest<Uri>) optionsApplier.apply(new DrawableTypeRequest<Uri>(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 <T> DrawableTypeRequest<T> loadGeneric(T model) {
ModelLoader<T, InputStream> streamModelLoader = Glide.buildStreamModelLoader(model, context);
ModelLoader<T, ParcelFileDescriptor> 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<T>(model, streamModelLoader,
- fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier));
+
+ return (DrawableTypeRequest<T>) optionsApplier.apply(
+ new DrawableTypeRequest<T>(getSafeClass(model), streamModelLoader, fileDescriptorModelLoader, context,
+ glide, requestTracker, lifecycle, optionsApplier))
+ .load(model);
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> Class<T> getSafeClass(T model) {
+ return model != null ? (Class<T>) model.getClass() : null;
}
/**
@@ -488,8 +497,9 @@ public class RequestManager implements LifecycleListener {
}
public DrawableTypeRequest<T> load(T model) {
- return optionsApplier.apply(model, new DrawableTypeRequest<T>(model, null, loader, context,
- glide, requestTracker, lifecycle, optionsApplier));
+ return (DrawableTypeRequest<T>) optionsApplier.apply(new DrawableTypeRequest<T>(getSafeClass(model), null,
+ loader, context, glide, requestTracker, lifecycle, optionsApplier))
+ .load(model);
}
}
@@ -507,8 +517,9 @@ public class RequestManager implements LifecycleListener {
}
public DrawableTypeRequest<T> load(T model) {
- return optionsApplier.apply(model, new DrawableTypeRequest<T>(model, loader, null, context,
- glide, requestTracker, lifecycle, optionsApplier));
+ return (DrawableTypeRequest<T>) optionsApplier.apply(new DrawableTypeRequest<T>(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 <Z> GenericTranscodeRequest<A, T, Z> as(Class<Z> resourceClass) {
- return optionsApplier.apply(model, new GenericTranscodeRequest<A, T, Z>(context, glide, model,
- modelLoader, dataClass, resourceClass, requestTracker, lifecycle, optionsApplier));
+ return (GenericTranscodeRequest<A, T, Z>) optionsApplier.apply(
+ new GenericTranscodeRequest<A, T, Z>(context, glide, getSafeClass(model), modelLoader,
+ dataClass, resourceClass, requestTracker, lifecycle, optionsApplier))
+ .load(model);
}
}
}
class OptionsApplier {
- public <A, X extends GenericRequestBuilder<A, ?, ?, ?>> X apply(A model, X builder) {
+ public <A, X extends GenericRequestBuilder<A, ?, ?, ?>> X apply(X builder) {
if (options != null) {
- options.apply(model, builder);
+ options.apply(builder);
}
return builder;
}