diff options
author | Sam Judd <judds@google.com> | 2014-10-12 15:36:13 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-10-14 07:24:32 -0700 |
commit | 7392026b13c2265081d2f467d072d5eb6011720e (patch) | |
tree | 45081de8b557f2a9fb2e85c460db17ce3a5ee7bf /library/src/main/java/com | |
parent | 7ace7e959b5d44fde04526eed4f5e0abb5a33980 (diff) | |
download | glide-7392026b13c2265081d2f467d072d5eb6011720e.tar.gz |
Add a clone() API to create copies of builders.
Diffstat (limited to 'library/src/main/java/com')
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); + } + } } |