aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-12 15:36:13 -0700
committerSam Judd <judds@google.com>2014-10-14 07:24:32 -0700
commit7392026b13c2265081d2f467d072d5eb6011720e (patch)
tree45081de8b557f2a9fb2e85c460db17ce3a5ee7bf /library/src/main/java/com
parent7ace7e959b5d44fde04526eed4f5e0abb5a33980 (diff)
downloadglide-7392026b13c2265081d2f467d072d5eb6011720e.tar.gz
Add a clone() API to create copies of builders.
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/DrawableRequestBuilder.java5
-rw-r--r--library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java35
-rw-r--r--library/src/main/java/com/bumptech/glide/GifRequestBuilder.java5
-rw-r--r--library/src/main/java/com/bumptech/glide/provider/ChildLoadProvider.java12
5 files changed, 55 insertions, 8 deletions
diff --git a/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java b/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java
index d48d0606..c675ad28 100644
--- a/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java
+++ b/library/src/main/java/com/bumptech/glide/BitmapRequestBuilder.java
@@ -45,6 +45,7 @@ import java.io.InputStream;
public class BitmapRequestBuilder<ModelType, TranscodeType>
extends GenericRequestBuilder<ModelType, ImageVideoWrapper, Bitmap, TranscodeType> implements BitmapOptions {
private final BitmapPool bitmapPool;
+
private Downsampler downsampler = Downsampler.AT_LEAST;
private DecodeFormat decodeFormat = DecodeFormat.PREFER_RGB_565;
private ResourceDecoder<InputStream, Bitmap> imageDecoder;
@@ -461,6 +462,11 @@ public class BitmapRequestBuilder<ModelType, TranscodeType>
return this;
}
+ @Override
+ public BitmapRequestBuilder<ModelType, TranscodeType> clone() {
+ return (BitmapRequestBuilder<ModelType, TranscodeType>) super.clone();
+ }
+
/**
* {@inheritDoc}
*
diff --git a/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java b/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java
index 0a7b9bce..78802765 100644
--- a/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java
+++ b/library/src/main/java/com/bumptech/glide/DrawableRequestBuilder.java
@@ -412,6 +412,11 @@ public class DrawableRequestBuilder<ModelType>
return this;
}
+ @Override
+ public DrawableRequestBuilder<ModelType> clone() {
+ return (DrawableRequestBuilder<ModelType>) super.clone();
+ }
+
/**
* {@inheritDoc}
*
diff --git a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java
index 802b7842..84b1828f 100644
--- a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java
+++ b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java
@@ -44,18 +44,17 @@ import java.io.File;
* @param <ResourceType> The type of the resource that will be loaded.
* @param <TranscodeType> The type of resource the decoded resource will be transcoded to.
*/
-public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> {
+public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> implements Cloneable {
protected final Class<ModelType> modelClass;
protected final Context context;
protected final Glide glide;
protected final Class<TranscodeType> transcodeClass;
protected final RequestTracker requestTracker;
protected final Lifecycle lifecycle;
- private final ChildLoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider;
-
- private Key signature = EmptySignature.obtain();
+ private ChildLoadProvider<ModelType, DataType, ResourceType, TranscodeType> loadProvider;
private ModelType model;
+ private Key signature = EmptySignature.obtain();
// 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;
@@ -80,11 +79,11 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
Class<TranscodeType> transcodeClass, GenericRequestBuilder<ModelType, ?, ?, ?> other) {
this(other.context, other.modelClass, loadProvider, transcodeClass, other.glide, other.requestTracker,
other.lifecycle);
+ this.model = other.model;
+ this.isModelSet = other.isModelSet;
this.signature = other.signature;
this.diskCacheStrategy = other.diskCacheStrategy;
this.isCacheable = other.isCacheable;
- this.model = other.model;
- this.isModelSet = other.isModelSet;
}
GenericRequestBuilder(Context context, Class<ModelType> modelClass,
@@ -560,6 +559,28 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
}
/**
+ * Returns a copy of this request builder with all of the options set so far on this builder.
+ *
+ * <p>
+ * This method returns a "deep" copy in that all non-immutable arguments are copied such that changes to one
+ * builder will not affect the other builder. However, in addition to immutable arguments, the current model
+ * is not copied copied so changes to the model will affect both builders.
+ * </p>
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> clone() {
+ try {
+ GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> clone =
+ (GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType>) super.clone();
+ clone.loadProvider = loadProvider != null ? loadProvider.clone() : null;
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
* Set the target the resource will be loaded into.
*
* @see Glide#clear(com.bumptech.glide.request.target.Target)
@@ -729,7 +750,7 @@ public class GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeT
}
}
- private <Z> Request obtainRequest(Target<TranscodeType> target, float sizeMultiplier, Priority priority,
+ private Request obtainRequest(Target<TranscodeType> target, float sizeMultiplier, Priority priority,
RequestCoordinator requestCoordinator) {
return GenericRequest.obtain(
loadProvider,
diff --git a/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java b/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java
index 5e63549d..ffde6fe1 100644
--- a/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java
+++ b/library/src/main/java/com/bumptech/glide/GifRequestBuilder.java
@@ -404,6 +404,11 @@ public class GifRequestBuilder<ModelType>
}
@Override
+ public GifRequestBuilder<ModelType> clone() {
+ return (GifRequestBuilder<ModelType>) super.clone();
+ }
+
+ @Override
void applyFitCenter() {
fitCenter();
}
diff --git a/library/src/main/java/com/bumptech/glide/provider/ChildLoadProvider.java b/library/src/main/java/com/bumptech/glide/provider/ChildLoadProvider.java
index ee07f74c..5478eab2 100644
--- a/library/src/main/java/com/bumptech/glide/provider/ChildLoadProvider.java
+++ b/library/src/main/java/com/bumptech/glide/provider/ChildLoadProvider.java
@@ -17,7 +17,7 @@ import java.io.File;
* @param <Z> The type of the resource that will be decoded from the data.
* @param <R> The type of the resource that will be transcoded from the decoded resource.
*/
-public class ChildLoadProvider<A, T, Z, R> implements LoadProvider<A, T, Z, R> {
+public class ChildLoadProvider<A, T, Z, R> implements LoadProvider<A, T, Z, R>, Cloneable {
private final LoadProvider<A, T, Z, R> parent;
private ResourceDecoder<File, Z> cacheDecoder;
@@ -141,4 +141,14 @@ public class ChildLoadProvider<A, T, Z, R> implements LoadProvider<A, T, Z, R> {
return parent.getTranscoder();
}
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public ChildLoadProvider<A, T, Z, R> clone() {
+ try {
+ return (ChildLoadProvider<A, T, Z, R>) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeException(e);
+ }
+ }
}