From 67b01f62c0e98bb4f517708128be3107b22367cb Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Tue, 7 Jul 2020 14:19:13 -0700 Subject: [PATCH] Add thumbnail method that takes in a list PiperOrigin-RevId: 320059478 --- .../EmptyAppGlideModuleTest/GlideRequest.java | 8 ++++ .../MemoizeStaticMethod/GlideRequest.java | 8 ++++ .../OverrideExtend/GlideRequest.java | 8 ++++ .../GlideRequest.java | 8 ++++ .../OverrideReplace/GlideRequest.java | 8 ++++ .../SkipStaticMethod/GlideRequest.java | 8 ++++ .../StaticMethodName/GlideRequest.java | 8 ++++ .../GlideRequest.java | 8 ++++ .../com/bumptech/glide/RequestBuilder.java | 43 ++++++++++++++++++- 9 files changed, 105 insertions(+), 2 deletions(-) diff --git a/annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java b/annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java index d36a6ab8f1..f6b0062749 100644 --- a/annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -499,6 +500,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java index 27d73e3c7b..9c86b0097c 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -499,6 +500,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java index 9380cb30cd..2c886219e6 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -490,6 +491,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java index 242845fdce..1d8c2cd55d 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -490,6 +491,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java index 09983c84d0..8daa6e164c 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -490,6 +491,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java index 27d73e3c7b..9c86b0097c 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -499,6 +500,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java index 27d73e3c7b..9c86b0097c 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -499,6 +500,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java b/annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java index 223012ce98..100a7f974b 100644 --- a/annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java +++ b/annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.RequestListener; import java.io.File; import java.net.URL; +import java.util.List; /** * Contains all public methods from {@link RequestBuilder}, all options from @@ -499,6 +500,13 @@ public final GlideRequest thumbnail(@Nullable RequestBuilder) super.thumbnail(builders); } + @Override + @NonNull + @CheckResult + public GlideRequest thumbnail(@Nullable List> list) { + return (GlideRequest) super.thumbnail(list); + } + @Override @NonNull @CheckResult diff --git a/library/src/main/java/com/bumptech/glide/RequestBuilder.java b/library/src/main/java/com/bumptech/glide/RequestBuilder.java index c4c914fde1..366478eb3a 100644 --- a/library/src/main/java/com/bumptech/glide/RequestBuilder.java +++ b/library/src/main/java/com/bumptech/glide/RequestBuilder.java @@ -38,6 +38,7 @@ import java.io.File; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.Executor; @@ -286,14 +287,52 @@ public RequestBuilder thumbnail( return thumbnail((RequestBuilder) null); } + return thumbnail(Arrays.asList(thumbnails)); + } + + /** + * Recursively applies {@link #thumbnail(RequestBuilder)} so that the {@link RequestBuilder}s are + * loaded as thumbnails in the given priority order. + * + *

{@link #thumbnail(RequestBuilder)} is applied in the order given so that the {@link + * RequestBuilder} at position 0 has the {@link RequestBuilder} at position 1 applied as using its + * thumbnail method, the {@link RequestBuilder} at position 1 has the {@link RequestBuilder} at + * position 2 applied using its thumbnail method and so on. + * + *

Calling this method with a {@code null} list of {@link RequestBuilder} thumbnails or an + * empty list of {@link RequestBuilder} thumbnails is equivalent to calling {@link + * #thumbnail(RequestBuilder)} with {@code null}. + * + *

Any individual {@link RequestBuilder} in the list of thumbnails provided here may be {@code + * null}. {@code null} {@link RequestBuilder}s are ignored and excluded from the recursive chain. + * + *

The {@link RequestBuilder} objects provided here may be mutated and have any previous calls + * to this method or {@link #thumbnail(RequestBuilder)} methods overridden. + * + *

Overrides any previous calls to {@link #thumbnail(RequestBuilder)}, {@link + * #thumbnail(float)} and this method. + * + * @see #thumbnail(float) + * @see #thumbnail(RequestBuilder) + * @return This request builder. + */ + @SuppressWarnings({"CheckResult", "unchecked"}) + @NonNull + @CheckResult + public RequestBuilder thumbnail( + @Nullable List> thumbnails) { + if (thumbnails == null || thumbnails.isEmpty()) { + return thumbnail((RequestBuilder) null); + } + RequestBuilder previous = null; // Start with the lowest priority thumbnail so that we can safely handle mutations if // autoClone() is enabled by assigning the result of calling thumbnail() during the iteration. // Starting with the highest priority thumbnail would prevent us from assigning the result of // thumbnail because the mutated request wouldn't be used in the next iteration. - for (int i = thumbnails.length - 1; i >= 0; i--) { - RequestBuilder current = thumbnails[i]; + for (int i = thumbnails.size() - 1; i >= 0; i--) { + RequestBuilder current = thumbnails.get(i); // Ignore null thumbnails. if (current == null) { continue;