From af7d58c59ad746942663f6c03fd0e423c9fc1f06 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Sun, 15 Apr 2018 17:52:32 +0300 Subject: [PATCH] Change LinkSpan to extend URLSpan. Allow default linkColor (if not set explicitly) --- .../ru/noties/markwon/spans/LinkSpan.java | 4 +++- .../noties/markwon/spans/SpannableTheme.java | 22 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/ru/noties/markwon/spans/LinkSpan.java b/library/src/main/java/ru/noties/markwon/spans/LinkSpan.java index b96f4681..2359f9a4 100644 --- a/library/src/main/java/ru/noties/markwon/spans/LinkSpan.java +++ b/library/src/main/java/ru/noties/markwon/spans/LinkSpan.java @@ -3,9 +3,10 @@ package ru.noties.markwon.spans; import android.support.annotation.NonNull; import android.text.TextPaint; import android.text.style.ClickableSpan; +import android.text.style.URLSpan; import android.view.View; -public class LinkSpan extends ClickableSpan { +public class LinkSpan extends URLSpan { public interface Resolver { void resolve(View view, @NonNull String link); @@ -16,6 +17,7 @@ public class LinkSpan extends ClickableSpan { private final Resolver resolver; public LinkSpan(@NonNull SpannableTheme theme, @NonNull String link, @NonNull Resolver resolver) { + super(link); this.theme = theme; this.link = link; this.resolver = resolver; diff --git a/library/src/main/java/ru/noties/markwon/spans/SpannableTheme.java b/library/src/main/java/ru/noties/markwon/spans/SpannableTheme.java index c402e24f..ac706480 100644 --- a/library/src/main/java/ru/noties/markwon/spans/SpannableTheme.java +++ b/library/src/main/java/ru/noties/markwon/spans/SpannableTheme.java @@ -76,9 +76,11 @@ public class SpannableTheme { final int linkColor = resolve(context, android.R.attr.textColorLink); final int backgroundColor = resolve(context, android.R.attr.colorBackground); + // before 1.0.5 build had `linkColor` set, but in order for spans to use default link color + // set directly in widget (or any caller), we should not pass it here + final Dip dip = new Dip(context); return new Builder() - .linkColor(linkColor) .codeMultilineMargin(dip.toPx(8)) .blockMargin(dip.toPx(24)) .blockQuoteWidth(dip.toPx(4)) @@ -214,12 +216,30 @@ public class SpannableTheme { this.taskListDrawable = builder.taskListDrawable; } + /** + * @since 1.0.5 + */ + public void applyLinkStyle(@NonNull TextPaint paint) { + paint.setUnderlineText(true); + if (linkColor != 0) { + paint.setColor(linkColor); + } else { + // if linkColor is not specified during configuration -> use default one + paint.setColor(paint.linkColor); + } + } public void applyLinkStyle(@NonNull Paint paint) { paint.setUnderlineText(true); if (linkColor != 0) { // by default we will be using text color paint.setColor(linkColor); + } else { + // @since 1.0.5, if link color is specified during configuration, _try_ to use the + // default one (if provided paint is an instance of TextPaint) + if (paint instanceof TextPaint) { + paint.setColor(((TextPaint) paint).linkColor); + } } }