From 43fd0f6f40cee9b9e890e4fafc53e7d62a878861 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 3 Apr 2020 13:04:31 +0300 Subject: [PATCH] fix line breaks abscence in spanned text --- .../touchin/roboswag/components/utils/spans/SpanUtils.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt b/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt index 5ad792f..25b6fec 100644 --- a/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt +++ b/utils/src/main/java/ru/touchin/roboswag/components/utils/spans/SpanUtils.kt @@ -13,8 +13,9 @@ fun String.getSpannedTextWithUrls( removeUnderline: Boolean = true, flags: Int = HtmlCompat.FROM_HTML_MODE_COMPACT ): Spanned { - - val spannableText = SpannableString(HtmlCompat.fromHtml(this, flags)) + // HtmlCompat.fromHtml doesn't respect line breaks + val text = this.replace(lineBreakRegex, "
") + val spannableText = SpannableString(HtmlCompat.fromHtml(text, flags)) // Linkify removes all previous URLSpan's, we need to save all created spans for reapply after Linkify val spans = spannableText.getUrlSpans() @@ -38,6 +39,10 @@ fun String.getSpannedTextWithUrls( return spannableText } +private val lineBreakRegex by lazy(LazyThreadSafetyMode.NONE) { + "\r?\n".toRegex() +} + private fun SpannableString.getUrlSpans() = getSpans(0, length, URLSpan::class.java) .map { UrlSpanWithBorders(it, this.getSpanStart(it), this.getSpanEnd(it)) }