From a1182e209a3575bdf1b86962544b9e2949abeff4 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 22:00:33 -0800 Subject: [PATCH 1/9] Add CoilImagesPlugin --- build.gradle | 3 +- docs/docs/v4/image-coil/README.md | 24 +++ markwon-image-coil/README.md | 3 + markwon-image-coil/build.gradle | 21 ++ markwon-image-coil/gradle.properties | 4 + .../src/main/AndroidManifest.xml | 1 + .../markwon/image/coil/CoilImagesPlugin.java | 186 ++++++++++++++++++ .../sample/recycler/RecyclerActivity.java | 1 + settings.gradle | 1 + 9 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 docs/docs/v4/image-coil/README.md create mode 100644 markwon-image-coil/README.md create mode 100644 markwon-image-coil/build.gradle create mode 100644 markwon-image-coil/gradle.properties create mode 100644 markwon-image-coil/src/main/AndroidManifest.xml create mode 100644 markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java diff --git a/build.gradle b/build.gradle index 9f065c7a..180abe37 100644 --- a/build.gradle +++ b/build.gradle @@ -72,7 +72,8 @@ ext { 'adapt' : 'io.noties:adapt:2.0.0', 'dagger' : "com.google.dagger:dagger:$daggerVersion", 'picasso' : 'com.squareup.picasso:picasso:2.71828', - 'glide' : 'com.github.bumptech.glide:glide:4.9.0' + 'glide' : 'com.github.bumptech.glide:glide:4.9.0', + 'coil' : 'io.coil-kt:coil:0.8.0' ] deps['annotationProcessor'] = [ diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md new file mode 100644 index 00000000..435ea408 --- /dev/null +++ b/docs/docs/v4/image-coil/README.md @@ -0,0 +1,24 @@ +# Image Coil + + + +Image loading based on `Coil` library + +```kt +val markwon = Markwon.builder(context) + // automatically create Coil instance + .usePlugin(CoilImagesPlugin.create(context)) + // if you need more control + .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore() { + override load(drawable: AsyncDrawable, target: Target): RequestDisposable { + return Coil.load(context, drawable.destination) { + target(target) + } + } + + override cancel(requestDisposable: RequestDisposable) { + requestDisposable.dispose() + } + })) + .build() +``` \ No newline at end of file diff --git a/markwon-image-coil/README.md b/markwon-image-coil/README.md new file mode 100644 index 00000000..74e61881 --- /dev/null +++ b/markwon-image-coil/README.md @@ -0,0 +1,3 @@ +# Images (Coil) + +https://noties.io/Markwon/docs/v4/image-coil/ \ No newline at end of file diff --git a/markwon-image-coil/build.gradle b/markwon-image-coil/build.gradle new file mode 100644 index 00000000..aa760dfb --- /dev/null +++ b/markwon-image-coil/build.gradle @@ -0,0 +1,21 @@ +apply plugin: 'com.android.library' + +android { + + compileSdkVersion config['compile-sdk'] + buildToolsVersion config['build-tools'] + + defaultConfig { + minSdkVersion config['min-sdk'] + targetSdkVersion config['target-sdk'] + versionCode 1 + versionName version + } +} + +dependencies { + api project(':markwon-core') + api deps['coil'] +} + +registerArtifact(this) diff --git a/markwon-image-coil/gradle.properties b/markwon-image-coil/gradle.properties new file mode 100644 index 00000000..489bbf6e --- /dev/null +++ b/markwon-image-coil/gradle.properties @@ -0,0 +1,4 @@ +POM_NAME=Image Coil +POM_ARTIFACT_ID=image-coil +POM_DESCRIPTION=Markwon image loading module (based on Coil library) +POM_PACKAGING=aar \ No newline at end of file diff --git a/markwon-image-coil/src/main/AndroidManifest.xml b/markwon-image-coil/src/main/AndroidManifest.xml new file mode 100644 index 00000000..b2f53ca9 --- /dev/null +++ b/markwon-image-coil/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java new file mode 100644 index 00000000..cae52f52 --- /dev/null +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -0,0 +1,186 @@ +package io.noties.markwon.image.coil; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.text.Spanned; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.commonmark.node.Image; + +import java.util.HashMap; +import java.util.Map; + +import coil.Coil; +import coil.ImageLoader; +import coil.api.ImageLoaders; +import coil.request.LoadRequest; +import coil.request.LoadRequestBuilder; +import coil.request.RequestDisposable; +import coil.target.Target; +import io.noties.markwon.AbstractMarkwonPlugin; +import io.noties.markwon.MarkwonConfiguration; +import io.noties.markwon.MarkwonSpansFactory; +import io.noties.markwon.image.AsyncDrawable; +import io.noties.markwon.image.AsyncDrawableLoader; +import io.noties.markwon.image.AsyncDrawableScheduler; +import io.noties.markwon.image.DrawableUtils; +import io.noties.markwon.image.ImageSpanFactory; + +/** + * @since 4.0.0 + */ +public class CoilImagesPlugin extends AbstractMarkwonPlugin { + + public interface CoilStore { + + @NonNull + RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target); + + void cancel(@NonNull RequestDisposable disposable); + } + + @NonNull + public static CoilImagesPlugin create(@NonNull final Context context) { + return create(new CoilStore() { + @NonNull + @Override + public RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target) { + ImageLoader imageLoader = Coil.loader(); + LoadRequest request = ImageLoaders.newLoadBuilder(imageLoader, context) + .data(drawable.getDestination()) + .target(target) + .build(); + return imageLoader.load(request); + } + + @Override + public void cancel(@NonNull RequestDisposable disposable) { + disposable.dispose(); + } + }); + } + + @NonNull + public static CoilImagesPlugin create(@NonNull final LoadRequestBuilder loadRequestBuilder) { + return create(new CoilStore() { + @NonNull + @Override + public RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target) { + ImageLoader imageLoader = Coil.loader(); + LoadRequest request = loadRequestBuilder + .data(drawable.getDestination()) + .target(target) + .build(); + return imageLoader.load(request); + } + + @Override + public void cancel(@NonNull RequestDisposable disposable) { + disposable.dispose(); + } + }); + } + + @NonNull + public static CoilImagesPlugin create(@NonNull CoilStore coilStore) { + return new CoilImagesPlugin(coilStore); + } + + private final CoilAsyncDrawableLoader coilAsyncDrawableLoader; + + @SuppressWarnings("WeakerAccess") + CoilImagesPlugin(@NonNull CoilStore coilStore) { + this.coilAsyncDrawableLoader = new CoilAsyncDrawableLoader(coilStore); + } + + @Override + public void configureSpansFactory(@NonNull MarkwonSpansFactory.Builder builder) { + builder.setFactory(Image.class, new ImageSpanFactory()); + } + + @Override + public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) { + builder.asyncDrawableLoader(coilAsyncDrawableLoader); + } + + @Override + public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) { + AsyncDrawableScheduler.unschedule(textView); + } + + @Override + public void afterSetText(@NonNull TextView textView) { + AsyncDrawableScheduler.schedule(textView); + } + + private static class CoilAsyncDrawableLoader extends AsyncDrawableLoader { + + private final CoilStore coilStore; + private final Map cache = new HashMap<>(2); + + CoilAsyncDrawableLoader(@NonNull CoilStore coilStore) { + this.coilStore = coilStore; + } + + @Override + public void load(@NonNull AsyncDrawable drawable) { + final Target target = new AsyncDrawableTarget(drawable); + RequestDisposable disposable = coilStore.load(drawable, target); + cache.put(drawable, disposable); + } + + @Override + public void cancel(@NonNull AsyncDrawable drawable) { + final RequestDisposable disposable = cache.remove(drawable); + if (disposable != null) { + coilStore.cancel(disposable); + } + } + + @Nullable + @Override + public Drawable placeholder(@NonNull AsyncDrawable drawable) { + return null; + } + + private class AsyncDrawableTarget implements Target { + + private final AsyncDrawable drawable; + + AsyncDrawableTarget(@NonNull AsyncDrawable drawable) { + this.drawable = drawable; + } + + @Override + public void onSuccess(@NonNull Drawable loadedDrawable) { + if (cache.remove(drawable) != null) { + if (drawable.isAttached()) { + DrawableUtils.applyIntrinsicBoundsIfEmpty(loadedDrawable); + drawable.setResult(loadedDrawable); + } + } + } + + @Override + public void onStart(@Nullable Drawable placeholder) { + if (placeholder != null && drawable.isAttached()) { + DrawableUtils.applyIntrinsicBoundsIfEmpty(placeholder); + drawable.setResult(placeholder); + } + } + + @Override + public void onError(@Nullable Drawable errorDrawable) { + if (cache.remove(drawable) != null) { + if (errorDrawable != null && drawable.isAttached()) { + DrawableUtils.applyIntrinsicBoundsIfEmpty(errorDrawable); + drawable.setResult(errorDrawable); + } + } + } + } + } +} diff --git a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java index bbd6f890..815e5b03 100644 --- a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java +++ b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java @@ -82,6 +82,7 @@ public class RecyclerActivity extends Activity { // })) .usePlugin(PicassoImagesPlugin.create(context)) // .usePlugin(GlideImagesPlugin.create(context)) +// .usePlugin(CoilImagesPlugin.create(context)) // important to use TableEntryPlugin instead of TablePlugin .usePlugin(TableEntryPlugin.create(context)) .usePlugin(HtmlPlugin.create()) diff --git a/settings.gradle b/settings.gradle index 45a92d52..87a9f3b3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,6 +7,7 @@ include ':app', ':sample', ':markwon-ext-tasklist', ':markwon-html', ':markwon-image', + ':markwon-image-coil', ':markwon-image-glide', ':markwon-image-picasso', ':markwon-linkify', From 1983b1b46e7ca8602a4fe741390c34637469a7de Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 22:08:14 -0800 Subject: [PATCH 2/9] Remove extra create function --- .../markwon/image/coil/CoilImagesPlugin.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index cae52f52..6443bd76 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -63,27 +63,6 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { }); } - @NonNull - public static CoilImagesPlugin create(@NonNull final LoadRequestBuilder loadRequestBuilder) { - return create(new CoilStore() { - @NonNull - @Override - public RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target) { - ImageLoader imageLoader = Coil.loader(); - LoadRequest request = loadRequestBuilder - .data(drawable.getDestination()) - .target(target) - .build(); - return imageLoader.load(request); - } - - @Override - public void cancel(@NonNull RequestDisposable disposable) { - disposable.dispose(); - } - }); - } - @NonNull public static CoilImagesPlugin create(@NonNull CoilStore coilStore) { return new CoilImagesPlugin(coilStore); From 0c305fa0baba40582555edf77ac132787f0b1138 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 23:23:28 -0800 Subject: [PATCH 3/9] Expose LoadRequestBuilder --- docs/docs/v4/image-coil/README.md | 2 +- .../markwon/image/coil/CoilImagesPlugin.java | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index 435ea408..8a15e66e 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -9,7 +9,7 @@ val markwon = Markwon.builder(context) // automatically create Coil instance .usePlugin(CoilImagesPlugin.create(context)) // if you need more control - .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore() { + .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore { override load(drawable: AsyncDrawable, target: Target): RequestDisposable { return Coil.load(context, drawable.destination) { target(target) diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index 6443bd76..3af8b919 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -14,7 +14,6 @@ import java.util.HashMap; import java.util.Map; import coil.Coil; -import coil.ImageLoader; import coil.api.ImageLoaders; import coil.request.LoadRequest; import coil.request.LoadRequestBuilder; @@ -37,7 +36,7 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { public interface CoilStore { @NonNull - RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target); + LoadRequestBuilder load(@NonNull AsyncDrawable drawable); void cancel(@NonNull RequestDisposable disposable); } @@ -47,13 +46,9 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { return create(new CoilStore() { @NonNull @Override - public RequestDisposable load(@NonNull AsyncDrawable drawable, @NonNull Target target) { - ImageLoader imageLoader = Coil.loader(); - LoadRequest request = ImageLoaders.newLoadBuilder(imageLoader, context) - .data(drawable.getDestination()) - .target(target) - .build(); - return imageLoader.load(request); + public LoadRequestBuilder load(@NonNull AsyncDrawable drawable) { + return ImageLoaders.newLoadBuilder(Coil.loader(), context) + .data(drawable.getDestination()); } @Override @@ -107,7 +102,10 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { @Override public void load(@NonNull AsyncDrawable drawable) { final Target target = new AsyncDrawableTarget(drawable); - RequestDisposable disposable = coilStore.load(drawable, target); + LoadRequest request = coilStore.load(drawable) + .target(target) + .build(); + RequestDisposable disposable = Coil.loader().load(request); cache.put(drawable, disposable); } From 5fe1e07b39f404f7c6ae7f2ec8fe8ad722de76a7 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 23:35:09 -0800 Subject: [PATCH 4/9] Expose LoadRequest instead --- docs/docs/v4/image-coil/README.md | 7 ++++--- .../io/noties/markwon/image/coil/CoilImagesPlugin.java | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index 8a15e66e..177f83d8 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -10,9 +10,10 @@ val markwon = Markwon.builder(context) .usePlugin(CoilImagesPlugin.create(context)) // if you need more control .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore { - override load(drawable: AsyncDrawable, target: Target): RequestDisposable { - return Coil.load(context, drawable.destination) { - target(target) + override fun load(drawable: AsyncDrawable): LoadRequest { + return LoadRequest(context, Coil.loader().defaults) { + crossfade(true) + transformations(CircleCropTransformation()) } } diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index 3af8b919..68b93cd3 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -16,7 +16,6 @@ import java.util.Map; import coil.Coil; import coil.api.ImageLoaders; import coil.request.LoadRequest; -import coil.request.LoadRequestBuilder; import coil.request.RequestDisposable; import coil.target.Target; import io.noties.markwon.AbstractMarkwonPlugin; @@ -36,7 +35,7 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { public interface CoilStore { @NonNull - LoadRequestBuilder load(@NonNull AsyncDrawable drawable); + LoadRequest load(@NonNull AsyncDrawable drawable); void cancel(@NonNull RequestDisposable disposable); } @@ -46,9 +45,10 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { return create(new CoilStore() { @NonNull @Override - public LoadRequestBuilder load(@NonNull AsyncDrawable drawable) { + public LoadRequest load(@NonNull AsyncDrawable drawable) { return ImageLoaders.newLoadBuilder(Coil.loader(), context) - .data(drawable.getDestination()); + .data(drawable.getDestination()) + .build(); } @Override @@ -102,7 +102,7 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { @Override public void load(@NonNull AsyncDrawable drawable) { final Target target = new AsyncDrawableTarget(drawable); - LoadRequest request = coilStore.load(drawable) + LoadRequest request = coilStore.load(drawable).newBuilder() .target(target) .build(); RequestDisposable disposable = Coil.loader().load(request); From bf61d8c627e5fb3f07e4eb6ee8ddc83ebe5c7800 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 23:37:28 -0800 Subject: [PATCH 5/9] Update docs --- docs/docs/v4/image-coil/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index 177f83d8..e94b72cc 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -17,8 +17,8 @@ val markwon = Markwon.builder(context) } } - override cancel(requestDisposable: RequestDisposable) { - requestDisposable.dispose() + override cancel(disposable: RequestDisposable) { + disposable.dispose() } })) .build() From 4fa1ac718fd3c924591b824420523f10e66f5916 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Tue, 12 Nov 2019 23:46:01 -0800 Subject: [PATCH 6/9] Add ImageLoader API --- docs/docs/v4/image-coil/README.md | 9 +++++++++ .../markwon/image/coil/CoilImagesPlugin.java | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index e94b72cc..643632be 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -8,6 +8,15 @@ Image loading based on `Coil` library val markwon = Markwon.builder(context) // automatically create Coil instance .usePlugin(CoilImagesPlugin.create(context)) + // use supplied ImageLoader instance + .usePlugin(CoilImagesPlugin.create( + context, + ImageLoader(context) { + availableMemoryPercentage(0.5) + bitmapPoolPercentage(0.5) + crossfade(true) + } + )) // if you need more control .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore { override fun load(drawable: AsyncDrawable): LoadRequest { diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index 68b93cd3..8e55d00d 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.Map; import coil.Coil; +import coil.ImageLoader; import coil.api.ImageLoaders; import coil.request.LoadRequest; import coil.request.RequestDisposable; @@ -58,6 +59,25 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { }); } + @NonNull + public static CoilImagesPlugin create(@NonNull final Context context, + @NonNull final ImageLoader imageLoader) { + return create(new CoilStore() { + @NonNull + @Override + public LoadRequest load(@NonNull AsyncDrawable drawable) { + return ImageLoaders.newLoadBuilder(imageLoader, context) + .data(drawable.getDestination()) + .build(); + } + + @Override + public void cancel(@NonNull RequestDisposable disposable) { + disposable.dispose(); + } + }); + } + @NonNull public static CoilImagesPlugin create(@NonNull CoilStore coilStore) { return new CoilImagesPlugin(coilStore); From fb4e2c089fed3435b0cf02c52df2b470491ef491 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Wed, 13 Nov 2019 00:16:19 -0800 Subject: [PATCH 7/9] Add more create functions --- docs/docs/v4/image-coil/README.md | 5 +++-- .../markwon/image/coil/CoilImagesPlugin.java | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index 643632be..7369fab7 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -20,7 +20,8 @@ val markwon = Markwon.builder(context) // if you need more control .usePlugin(CoilImagesPlugin.create(object : CoilImagesPlugin.CoilStore { override fun load(drawable: AsyncDrawable): LoadRequest { - return LoadRequest(context, Coil.loader().defaults) { + return LoadRequest(context, customImageLoader.defaults) { + data(drawable.destination) crossfade(true) transformations(CircleCropTransformation()) } @@ -29,6 +30,6 @@ val markwon = Markwon.builder(context) override cancel(disposable: RequestDisposable) { disposable.dispose() } - })) + }, customImageLoader)) .build() ``` \ No newline at end of file diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index 8e55d00d..8459cb81 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -56,7 +56,7 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { public void cancel(@NonNull RequestDisposable disposable) { disposable.dispose(); } - }); + }, Coil.loader()); } @NonNull @@ -75,19 +75,20 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { public void cancel(@NonNull RequestDisposable disposable) { disposable.dispose(); } - }); + }, imageLoader); } @NonNull - public static CoilImagesPlugin create(@NonNull CoilStore coilStore) { - return new CoilImagesPlugin(coilStore); + public static CoilImagesPlugin create(@NonNull final CoilStore coilStore, + @NonNull final ImageLoader imageLoader) { + return new CoilImagesPlugin(coilStore, imageLoader); } private final CoilAsyncDrawableLoader coilAsyncDrawableLoader; @SuppressWarnings("WeakerAccess") - CoilImagesPlugin(@NonNull CoilStore coilStore) { - this.coilAsyncDrawableLoader = new CoilAsyncDrawableLoader(coilStore); + CoilImagesPlugin(@NonNull CoilStore coilStore, @NonNull ImageLoader imageLoader) { + this.coilAsyncDrawableLoader = new CoilAsyncDrawableLoader(coilStore, imageLoader); } @Override @@ -113,10 +114,12 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { private static class CoilAsyncDrawableLoader extends AsyncDrawableLoader { private final CoilStore coilStore; + private final ImageLoader imageLoader; private final Map cache = new HashMap<>(2); - CoilAsyncDrawableLoader(@NonNull CoilStore coilStore) { + CoilAsyncDrawableLoader(@NonNull CoilStore coilStore, @NonNull ImageLoader imageLoader) { this.coilStore = coilStore; + this.imageLoader = imageLoader; } @Override @@ -125,7 +128,7 @@ public class CoilImagesPlugin extends AbstractMarkwonPlugin { LoadRequest request = coilStore.load(drawable).newBuilder() .target(target) .build(); - RequestDisposable disposable = Coil.loader().load(request); + RequestDisposable disposable = imageLoader.load(request); cache.put(drawable, disposable); } From de04e5069b6f31dae7051fb49ec98dd579c7d121 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Wed, 13 Nov 2019 10:21:32 -0800 Subject: [PATCH 8/9] Update to kotlin syntax highlighting --- docs/docs/v4/image-coil/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/v4/image-coil/README.md b/docs/docs/v4/image-coil/README.md index 7369fab7..5227ed7b 100644 --- a/docs/docs/v4/image-coil/README.md +++ b/docs/docs/v4/image-coil/README.md @@ -4,7 +4,7 @@ Image loading based on `Coil` library -```kt +```kotlin val markwon = Markwon.builder(context) // automatically create Coil instance .usePlugin(CoilImagesPlugin.create(context)) @@ -32,4 +32,4 @@ val markwon = Markwon.builder(context) } }, customImageLoader)) .build() -``` \ No newline at end of file +``` From d1d0876d6d73346986f486cd894486b80e0ceb75 Mon Sep 17 00:00:00 2001 From: Tyler Wong Date: Wed, 13 Nov 2019 10:22:28 -0800 Subject: [PATCH 9/9] Add author to javadoc --- .../main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java index 8459cb81..a52318df 100644 --- a/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java +++ b/markwon-image-coil/src/main/java/io/noties/markwon/image/coil/CoilImagesPlugin.java @@ -30,6 +30,7 @@ import io.noties.markwon.image.ImageSpanFactory; /** * @since 4.0.0 + * @author Tyler Wong */ public class CoilImagesPlugin extends AbstractMarkwonPlugin {