Skip to content

Commit 8abc4b0

Browse files
fix: use spanState variable
1 parent aee9b96 commit 8abc4b0

2 files changed

Lines changed: 10 additions & 17 deletions

File tree

android/src/main/java/com/swmansion/enriched/spans/EnrichedSpans.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
package com.swmansion.enriched.spans
22

3-
interface ISpanConfig {
4-
val clazz: Class<*>
5-
}
6-
7-
data class BaseSpanConfig(override val clazz: Class<*>): ISpanConfig
8-
data class ParagraphSpanConfig(override val clazz: Class<*>, val isContinuous: Boolean): ISpanConfig
9-
data class ListSpanConfig(override val clazz: Class<*>, val shortcut: String) : ISpanConfig
3+
data class BaseSpanConfig(val clazz: Class<*>)
4+
data class ParagraphSpanConfig(val clazz: Class<*>, val isContinuous: Boolean)
5+
data class ListSpanConfig(val clazz: Class<*>, val shortcut: String)
106

117

128
data class StylesMergingConfig(
@@ -67,7 +63,6 @@ object EnrichedSpans {
6763
MENTION to BaseSpanConfig(EnrichedMentionSpan::class.java),
6864
)
6965

70-
val allSpans: Map<String, ISpanConfig> = inlineSpans + paragraphSpans + listSpans + parametrizedStyles
7166
val mergingConfig: Map<String, StylesMergingConfig> = mapOf(
7267
BOLD to StylesMergingConfig(
7368
blockingStyles = arrayOf(CODE_BLOCK)

android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,34 +104,32 @@ class ParametrizedStyles(private val view: EnrichedTextInputView) {
104104
return Triple(result, start, end)
105105
}
106106

107-
private fun detectLinkConflicts(spannable: Spannable, start: Int, end: Int): Boolean {
107+
private fun detectLinkConflicts(): Boolean {
108108
val mergingConfig = EnrichedSpans.mergingConfig[EnrichedSpans.LINK] ?: return false
109109
val conflictingStyles = mergingConfig.conflictingStyles
110110
val blockingStyles = mergingConfig.blockingStyles
111111

112112
for (style in blockingStyles) {
113-
val spans = spannable.getSpans(start, end, EnrichedSpans.allSpans[style]?.clazz)
114-
if (spans.isNotEmpty()) return true
113+
if (view.spanState?.getStart(style) != null) return true
115114
}
116115

117116
for (style in conflictingStyles) {
118-
val spans = spannable.getSpans(start, end, EnrichedSpans.allSpans[style]?.clazz)
119-
if (spans.isNotEmpty()) return true
117+
if (view.spanState?.getStart(style) != null) return true
120118
}
121119

122120
return false
123121
}
124122

125123
private fun afterTextChangedLinks(result: Triple<String, Int, Int>) {
124+
if (detectLinkConflicts()) {
125+
return
126+
}
127+
126128
// Do not detect link if it's applied manually
127129
if (isSettingLinkSpan) return
128130
val spannable = view.text as Spannable
129131
val (word, start, end) = result
130132

131-
if (detectLinkConflicts(spannable, start, end)) {
132-
return
133-
}
134-
135133
// TODO: Consider using more reliable regex, this one matches almost anything
136134
val urlPattern = android.util.Patterns.WEB_URL.matcher(word)
137135
val spans = spannable.getSpans(start, end, EnrichedLinkSpan::class.java)

0 commit comments

Comments
 (0)