diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-12-19 18:29:47 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2020-12-21 13:49:02 +0300 |
commit | 26356d7c2433084b8678e5ce04f5825e218b886d (patch) | |
tree | d4c9f7e76c6b03ed5c20119c33ba1d194214647b | |
parent | cf2b67de73f0f7a5f28f93da6427897c969ce9a0 (diff) |
Enhance search highlighting
Signed-off-by: Stefan Niedermann <info@niedermann.it>
2 files changed, 16 insertions, 19 deletions
diff --git a/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java b/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java index 86629bb0e..2e4b2250a 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java @@ -257,28 +257,26 @@ public class MarkwonMarkdownUtil { } public static void searchAndColor(@NonNull Editable editable, @Nullable CharSequence searchText, @NonNull Context context, @Nullable Integer current, @ColorInt int mainColor, @ColorInt int textColor) { - resetSearchSpans(editable); - if (TextUtils.isEmpty(searchText)) { - return; - } - - //noinspection ConstantConditions - final Matcher m = Pattern.compile(searchText.toString(), Pattern.CASE_INSENSITIVE | Pattern.LITERAL) - .matcher(editable); + removeSpans(editable, SearchSpan.class); + if (searchText != null) { + final Matcher m = Pattern + .compile(searchText.toString(), Pattern.CASE_INSENSITIVE | Pattern.LITERAL) + .matcher(editable); - int i = 1; - while (m.find()) { - int start = m.start(); - int end = m.end(); - editable.setSpan(new SearchSpan(context, mainColor, textColor, (current != null && i == current)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - i++; + int i = 1; + while (m.find()) { + int start = m.start(); + int end = m.end(); + editable.setSpan(new SearchSpan(context, mainColor, textColor, (current != null && i == current)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + i++; + } } } - private static void resetSearchSpans(@NonNull Editable editable) { + private static void removeSpans(@NonNull Editable editable, @SuppressWarnings("SameParameterValue") @NonNull Class<?> clazz) { final Object[] spansToRemove = editable.getSpans(0, editable.length(), Object.class); for (Object span : spansToRemove) { - if (span.getClass() == SearchSpan.class) + if (span.getClass() == clazz) editable.removeSpan(span); } } diff --git a/markdown/src/main/java/it/niedermann/android/markdown/markwon/plugins/SearchHighlightPlugin.java b/markdown/src/main/java/it/niedermann/android/markdown/markwon/plugins/SearchHighlightPlugin.java index 93ca39ff2..cc9c5f27e 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/markwon/plugins/SearchHighlightPlugin.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/markwon/plugins/SearchHighlightPlugin.java @@ -10,8 +10,7 @@ import androidx.annotation.Nullable; import io.noties.markwon.AbstractMarkwonPlugin; import io.noties.markwon.MarkwonPlugin; - -import static it.niedermann.android.markdown.markwon.MarkwonMarkdownUtil.searchAndColor; +import it.niedermann.android.markdown.markwon.MarkwonMarkdownUtil; public class SearchHighlightPlugin extends AbstractMarkwonPlugin { @@ -34,7 +33,7 @@ public class SearchHighlightPlugin extends AbstractMarkwonPlugin { public void afterSetText(@NonNull TextView textView) { super.afterSetText(textView); final Editable coloredContent = new SpannableStringBuilder(textView.getText()); - searchAndColor(coloredContent, searchText, textView.getContext(), current, Color.BLUE, Color.YELLOW); + MarkwonMarkdownUtil.searchAndColor(coloredContent, searchText, textView.getContext(), current, Color.BLUE, Color.YELLOW); textView.setText(coloredContent, TextView.BufferType.SPANNABLE); } } |