From d7f52607ab711e653c79f0ea89dd26cec4597aad Mon Sep 17 00:00:00 2001 From: Drakeet Date: Sat, 29 Feb 2020 20:50:30 +0800 Subject: [PATCH 1/4] Allow LinkifyPlugin to use LinkifyCompat through config --- markwon-linkify/build.gradle | 8 ++++- .../noties/markwon/linkify/LinkifyPlugin.java | 36 +++++++++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/markwon-linkify/build.gradle b/markwon-linkify/build.gradle index 764113ab..39f8eecf 100644 --- a/markwon-linkify/build.gradle +++ b/markwon-linkify/build.gradle @@ -14,7 +14,13 @@ android { } dependencies { + deps.with { + // To use LinkifyCompat + // note that this dependency must be added on a client side explicitly + compileOnly it['x-core'] + } + api project(':markwon-core') } -registerArtifact(this) \ No newline at end of file +registerArtifact(this) diff --git a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java index cb5c889e..b1bf826a 100644 --- a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java +++ b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java @@ -1,11 +1,13 @@ package io.noties.markwon.linkify; +import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.URLSpan; import android.text.util.Linkify; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.core.text.util.LinkifyCompat; import org.commonmark.node.Link; @@ -33,19 +35,31 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { @NonNull public static LinkifyPlugin create() { - return create(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS); + return create(false); + } + + @NonNull + public static LinkifyPlugin create(boolean useCompat) { + return create(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS, useCompat); } @NonNull public static LinkifyPlugin create(@LinkifyMask int mask) { - return new LinkifyPlugin(mask); + return new LinkifyPlugin(mask, false); + } + + @NonNull + public static LinkifyPlugin create(@LinkifyMask int mask, boolean useCompat) { + return new LinkifyPlugin(mask, useCompat); } private final int mask; + private final boolean useCompat; @SuppressWarnings("WeakerAccess") - LinkifyPlugin(@LinkifyMask int mask) { + LinkifyPlugin(@LinkifyMask int mask, boolean useCompat) { this.mask = mask; + this.useCompat = useCompat; } @Override @@ -53,7 +67,7 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { registry.require(CorePlugin.class, new Action() { @Override public void apply(@NonNull CorePlugin corePlugin) { - corePlugin.addOnTextAddedListener(new LinkifyTextAddedListener(mask)); + corePlugin.addOnTextAddedListener(new LinkifyTextAddedListener(mask, useCompat)); } }); } @@ -61,9 +75,11 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { private static class LinkifyTextAddedListener implements CorePlugin.OnTextAddedListener { private final int mask; + private final boolean useCompat; - LinkifyTextAddedListener(int mask) { + LinkifyTextAddedListener(int mask, boolean useCompat) { this.mask = mask; + this.useCompat = useCompat; } @Override @@ -80,7 +96,7 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { // render calls from different threads and ... better performance) final SpannableStringBuilder builder = new SpannableStringBuilder(text); - if (Linkify.addLinks(builder, mask)) { + if (addLinks(builder, mask)) { // target URL span specifically final URLSpan[] spans = builder.getSpans(0, builder.length(), URLSpan.class); if (spans != null @@ -101,5 +117,13 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { } } } + + private boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) { + if (useCompat) { + return LinkifyCompat.addLinks(text, mask); + } else { + return Linkify.addLinks(text, mask); + } + } } } From f887cb132bd6ee3be43e1a7ebfee52c3ac113f3a Mon Sep 17 00:00:00 2001 From: Drakeet Date: Sat, 29 Feb 2020 21:05:42 +0800 Subject: [PATCH 2/4] Add java doc notes for the useCompat --- .../java/io/noties/markwon/linkify/LinkifyPlugin.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java index b1bf826a..47347ed3 100644 --- a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java +++ b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java @@ -38,6 +38,11 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { return create(false); } + /** + * @param useCompat If true, use {@link LinkifyCompat} to handle links. + * Note that the {@link LinkifyCompat} depends on androidx.core:core, + * the dependency must be added on a client side explicitly. + */ @NonNull public static LinkifyPlugin create(boolean useCompat) { return create(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS, useCompat); @@ -48,6 +53,11 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { return new LinkifyPlugin(mask, false); } + /** + * @param useCompat If true, use {@link LinkifyCompat} to handle links. + * Note that the {@link LinkifyCompat} depends on androidx.core:core, + * the dependency must be added on a client side explicitly. + */ @NonNull public static LinkifyPlugin create(@LinkifyMask int mask, boolean useCompat) { return new LinkifyPlugin(mask, useCompat); From b047f8131b95e9912761e7d39dadc87ce2a36a17 Mon Sep 17 00:00:00 2001 From: Drakeet Date: Wed, 4 Mar 2020 23:05:40 +0800 Subject: [PATCH 3/4] LinkifyCompatTextAddedListener --- .../noties/markwon/linkify/LinkifyPlugin.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java index 47347ed3..07fdf4db 100644 --- a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java +++ b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java @@ -77,7 +77,13 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { registry.require(CorePlugin.class, new Action() { @Override public void apply(@NonNull CorePlugin corePlugin) { - corePlugin.addOnTextAddedListener(new LinkifyTextAddedListener(mask, useCompat)); + final LinkifyTextAddedListener listener; + if (useCompat) { + listener = new LinkifyCompatTextAddedListener(mask); + } else { + listener = new LinkifyTextAddedListener(mask); + } + corePlugin.addOnTextAddedListener(listener); } }); } @@ -85,11 +91,9 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { private static class LinkifyTextAddedListener implements CorePlugin.OnTextAddedListener { private final int mask; - private final boolean useCompat; - LinkifyTextAddedListener(int mask, boolean useCompat) { + LinkifyTextAddedListener(int mask) { this.mask = mask; - this.useCompat = useCompat; } @Override @@ -128,12 +132,20 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { } } - private boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) { - if (useCompat) { - return LinkifyCompat.addLinks(text, mask); - } else { - return Linkify.addLinks(text, mask); - } + protected boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) { + return Linkify.addLinks(text, mask); + } + } + + private static class LinkifyCompatTextAddedListener extends LinkifyTextAddedListener { + + LinkifyCompatTextAddedListener(int mask) { + super(mask); + } + + @Override + protected boolean addLinks(@NonNull Spannable text, int mask) { + return LinkifyCompat.addLinks(text, mask); } } } From 8c04748597a7040167be8e77bfa161634b06eab4 Mon Sep 17 00:00:00 2001 From: Drakeet Date: Wed, 4 Mar 2020 23:10:31 +0800 Subject: [PATCH 4/4] Small change: add @LinkifyMask to LinkifyCompatTextAddedListener --- .../src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java index 07fdf4db..a910d970 100644 --- a/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java +++ b/markwon-linkify/src/main/java/io/noties/markwon/linkify/LinkifyPlugin.java @@ -144,7 +144,7 @@ public class LinkifyPlugin extends AbstractMarkwonPlugin { } @Override - protected boolean addLinks(@NonNull Spannable text, int mask) { + protected boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) { return LinkifyCompat.addLinks(text, mask); } }