From 7392026b13c2265081d2f467d072d5eb6011720e Mon Sep 17 00:00:00 2001
From: Sam Judd
Date: Sun, 12 Oct 2014 15:36:13 -0700
Subject: Add a clone() API to create copies of builders.
---
.../com/bumptech/glide/BitmapRequestBuilder.java | 6 ++++
.../com/bumptech/glide/DrawableRequestBuilder.java | 5 ++++
.../com/bumptech/glide/GenericRequestBuilder.java | 35 +++++++++++++++++-----
.../java/com/bumptech/glide/GifRequestBuilder.java | 5 ++++
.../bumptech/glide/provider/ChildLoadProvider.java | 12 +++++++-
5 files changed, 55 insertions(+), 8 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 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
extends GenericRequestBuilder implements BitmapOptions {
private final BitmapPool bitmapPool;
+
private Downsampler downsampler = Downsampler.AT_LEAST;
private DecodeFormat decodeFormat = DecodeFormat.PREFER_RGB_565;
private ResourceDecoder imageDecoder;
@@ -461,6 +462,11 @@ public class BitmapRequestBuilder
return this;
}
+ @Override
+ public BitmapRequestBuilder clone() {
+ return (BitmapRequestBuilder) 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
return this;
}
+ @Override
+ public DrawableRequestBuilder clone() {
+ return (DrawableRequestBuilder) 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 The type of the resource that will be loaded.
* @param The type of resource the decoded resource will be transcoded to.
*/
-public class GenericRequestBuilder {
+public class GenericRequestBuilder implements Cloneable {
protected final Class modelClass;
protected final Context context;
protected final Glide glide;
protected final Class transcodeClass;
protected final RequestTracker requestTracker;
protected final Lifecycle lifecycle;
- private final ChildLoadProvider loadProvider;
-
- private Key signature = EmptySignature.obtain();
+ private ChildLoadProvider 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 transcodeClass, GenericRequestBuilder 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 modelClass,
@@ -559,6 +558,28 @@ public class GenericRequestBuilder
+ * 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.
+ *
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public GenericRequestBuilder clone() {
+ try {
+ GenericRequestBuilder clone =
+ (GenericRequestBuilder) 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.
*
@@ -729,7 +750,7 @@ public class GenericRequestBuilder Request obtainRequest(Target target, float sizeMultiplier, Priority priority,
+ private Request obtainRequest(Target 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
@@ -403,6 +403,11 @@ public class GifRequestBuilder
return this;
}
+ @Override
+ public GifRequestBuilder clone() {
+ return (GifRequestBuilder) 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 The type of the resource that will be decoded from the data.
* @param The type of the resource that will be transcoded from the decoded resource.
*/
-public class ChildLoadProvider implements LoadProvider {
+public class ChildLoadProvider implements LoadProvider, Cloneable {
private final LoadProvider parent;
private ResourceDecoder cacheDecoder;
@@ -141,4 +141,14 @@ public class ChildLoadProvider implements LoadProvider {
return parent.getTranscoder();
}
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public ChildLoadProvider clone() {
+ try {
+ return (ChildLoadProvider) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
--
cgit v1.2.3