diff --git a/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt b/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt index cdadbcad6..9b8665606 100644 --- a/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt +++ b/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt @@ -104,15 +104,31 @@ class ParametrizedStyles(private val view: EnrichedTextInputView) { return Triple(result, start, end) } + private fun canLinkBeApplied(): Boolean { + val mergingConfig = EnrichedSpans.getMergingConfigForStyle(EnrichedSpans.LINK, view.htmlStyle)?: return true + val conflictingStyles = mergingConfig.conflictingStyles + val blockingStyles = mergingConfig.blockingStyles + + for (style in blockingStyles) { + if (view.spanState?.getStart(style) != null) return false + } + + for (style in conflictingStyles) { + if (view.spanState?.getStart(style) != null) return false + } + + return true + } + private fun afterTextChangedLinks(result: Triple) { // Do not detect link if it's applied manually - if (isSettingLinkSpan) return + if (isSettingLinkSpan || !canLinkBeApplied()) return + val spannable = view.text as Spannable val (word, start, end) = result // TODO: Consider using more reliable regex, this one matches almost anything val urlPattern = android.util.Patterns.WEB_URL.matcher(word) - val spans = spannable.getSpans(start, end, EnrichedLinkSpan::class.java) for (span in spans) { spannable.removeSpan(span)