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