From 50c46832b71de76dd5142112b9ef76fc13238d6d Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Wed, 8 Oct 2014 12:04:14 -0700 Subject: [PATCH] Add default signatures and cache strategies. Work toward #174. --- .../bumptech/glide/GenericRequestBuilder.java | 2 + .../main/java/com/bumptech/glide/Glide.java | 2 + .../com/bumptech/glide/RequestManager.java | 37 ++++++++++++++----- .../model/stream/StreamByteArrayLoader.java | 30 +++++++++++++-- .../ApplicationVersionSignature.java | 1 - 5 files changed, 59 insertions(+), 13 deletions(-) diff --git a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java index 1d3fc690d..50cfc76d3 100644 --- a/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/GenericRequestBuilder.java @@ -82,6 +82,8 @@ public class GenericRequestBuilder loadFromMediaStore(Uri uri, String mimeType, long dateModified, int orientation) { - // TODO: create a signature from the given arguments. - return loadFromMediaStore(uri); + Key signature = new MediaStoreSignature(mimeType, dateModified, orientation); + return (DrawableTypeRequest) loadFromMediaStore(uri) + .signature(signature); } /** @@ -370,11 +376,14 @@ public class RequestManager implements LifecycleListener { * * @see #load(Integer) * @see #using(StreamModelLoader) + * @see com.bumptech.glide.signature.ApplicationVersionSignature + * @see com.bumptech.glide.GenericRequestBuilder#signature(com.bumptech.glide.load.Key) * * @param resourceId the id of the resource containing the image */ public DrawableTypeRequest load(Integer resourceId) { - return loadGeneric(resourceId); + return (DrawableTypeRequest) loadGeneric(resourceId) + .signature(ApplicationVersionSignature.obtain(context)); } /** @@ -394,6 +403,13 @@ public class RequestManager implements LifecycleListener { /** * Returns a request builder that uses a {@link StreamByteArrayLoader} to load an image from the given byte array. * + * @deprecated Use {@link #load(byte[])} along with + * {@link com.bumptech.glide.GenericRequestBuilder#signature(com.bumptech.glide.load.Key)}} instead. + * + *

+ * Note - This method does not cache results in either the disk cache or the memory cache. + *

+ * * @see #load(byte[]) * * @param model The data to load. @@ -402,12 +418,12 @@ public class RequestManager implements LifecycleListener { * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image * into. */ + @Deprecated public DrawableTypeRequest load(byte[] model, final String id) { - final StreamByteArrayLoader loader = new StreamByteArrayLoader(id); - // TODO: just use signature instead of id here? - return optionsApplier.apply(model, - new DrawableTypeRequest(model, loader, null, context, glide, requestTracker, lifecycle, - optionsApplier)); + return (DrawableTypeRequest) loadGeneric(model) + .signature(new StringSignature(id)) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .skipMemoryCache(true /*skipMemoryCache*/); } /** @@ -421,7 +437,10 @@ public class RequestManager implements LifecycleListener { * into. */ public DrawableTypeRequest load(byte[] model) { - return load(model, UUID.randomUUID().toString()); + return (DrawableTypeRequest) loadGeneric(model) + .signature(new StringSignature(UUID.randomUUID().toString())) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .skipMemoryCache(true /*skipMemoryCache*/); } /** diff --git a/library/src/main/java/com/bumptech/glide/load/model/stream/StreamByteArrayLoader.java b/library/src/main/java/com/bumptech/glide/load/model/stream/StreamByteArrayLoader.java index 7b741edbc..a323d0c3c 100644 --- a/library/src/main/java/com/bumptech/glide/load/model/stream/StreamByteArrayLoader.java +++ b/library/src/main/java/com/bumptech/glide/load/model/stream/StreamByteArrayLoader.java @@ -1,22 +1,30 @@ package com.bumptech.glide.load.model.stream; +import android.content.Context; import com.bumptech.glide.load.data.ByteArrayFetcher; import com.bumptech.glide.load.data.DataFetcher; +import com.bumptech.glide.load.model.GenericLoaderFactory; +import com.bumptech.glide.load.model.ModelLoader; +import com.bumptech.glide.load.model.ModelLoaderFactory; import java.io.InputStream; -import java.util.UUID; /** * A base class to convert byte arrays to input streams so they can be decoded. This class is abstract because there is * no simple/quick way to generate an id from the bytes themselves, so subclass must include an id. */ public class StreamByteArrayLoader implements StreamModelLoader { - private String id; + private final String id; public StreamByteArrayLoader() { - this(UUID.randomUUID().toString()); + this(""); } + /** + * @deprecated Use {@link com.bumptech.glide.GenericRequestBuilder#signature(com.bumptech.glide.load.Key)} + * and the empty constructor instead. + */ + @Deprecated public StreamByteArrayLoader(String id) { this.id = id; } @@ -25,4 +33,20 @@ public class StreamByteArrayLoader implements StreamModelLoader { public DataFetcher getResourceFetcher(byte[] model, int width, int height) { return new ByteArrayFetcher(model, id); } + + /** + * Factory for {@link com.bumptech.glide.load.model.stream.StreamByteArrayLoader}. + */ + public static class Factory implements ModelLoaderFactory { + + @Override + public ModelLoader build(Context context, GenericLoaderFactory factories) { + return new StreamByteArrayLoader(); + } + + @Override + public void teardown() { + // Do nothing. + } + } } diff --git a/library/src/main/java/com/bumptech/glide/signature/ApplicationVersionSignature.java b/library/src/main/java/com/bumptech/glide/signature/ApplicationVersionSignature.java index f51736d03..667b3dff8 100644 --- a/library/src/main/java/com/bumptech/glide/signature/ApplicationVersionSignature.java +++ b/library/src/main/java/com/bumptech/glide/signature/ApplicationVersionSignature.java @@ -47,7 +47,6 @@ public final class ApplicationVersionSignature { // Should never happen. e.printStackTrace(); } - final String versionCode; if (pInfo != null) { versionCode = String.valueOf(pInfo.versionCode); -- GitLab