diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt index e002b6aa431..b9fba5fc1a3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt @@ -94,8 +94,10 @@ private fun updateMentionSpans(text: CharSequence?, cache: RoomMemberProfilesCac mentionSpan.text = displayName } } + // There's no need to do anything for `@room` pills + MentionSpan.Type.EVERYONE -> Unit // Nothing yet for room mentions - else -> Unit + MentionSpan.Type.ROOM -> Unit } } } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt index 5cb58a44cb4..286c45684e9 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt @@ -87,6 +87,7 @@ class MentionSpan( append("#") } } + Type.EVERYONE -> Unit } append(mentionText.substring(0, min(mentionText.length, MAX_LENGTH))) if (mentionText.length > MAX_LENGTH) { @@ -98,6 +99,7 @@ class MentionSpan( enum class Type { USER, ROOM, + EVERYONE, } } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index e429d12b7ae..4e33a461b81 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -108,7 +108,7 @@ class MentionSpanProvider @AssistedInject constructor( MentionSpan( text = text, rawValue = "@room", - type = MentionSpan.Type.USER, + type = MentionSpan.Type.EVERYONE, backgroundColor = otherBackgroundColor, textColor = otherTextColor, startPadding = startPaddingPx, diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/model/MarkdownTextEditorState.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/model/MarkdownTextEditorState.kt index 2f85832c32a..0d3bb5fdda2 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/model/MarkdownTextEditorState.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/model/MarkdownTextEditorState.kt @@ -93,13 +93,16 @@ class MarkdownTextEditorState( for (mention in mentions.reversed()) { val start = charSequence.getSpanStart(mention) val end = charSequence.getSpanEnd(mention) - if (mention.type == MentionSpan.Type.USER) { - if (mention.rawValue == "@room") { - replace(start, end, "@room") - } else { + when (mention.type) { + MentionSpan.Type.USER -> { val link = permalinkBuilder.permalinkForUser(UserId(mention.rawValue)).getOrNull() ?: continue replace(start, end, "[${mention.rawValue}]($link)") } + MentionSpan.Type.EVERYONE -> { + replace(start, end, "@room") + } + // Nothing to do here yet + MentionSpan.Type.ROOM -> Unit } } } @@ -114,14 +117,9 @@ class MarkdownTextEditorState( val mentionSpans = text.getSpans(0, text.length) return mentionSpans.mapNotNull { mentionSpan -> when (mentionSpan.type) { - MentionSpan.Type.USER -> { - if (mentionSpan.rawValue == "@room") { - Mention.AtRoom - } else { - Mention.User(UserId(mentionSpan.rawValue)) - } - } - else -> null + MentionSpan.Type.USER -> Mention.User(UserId(mentionSpan.rawValue)) + MentionSpan.Type.EVERYONE -> Mention.AtRoom + MentionSpan.Type.ROOM -> null } } } diff --git a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/model/MarkdownTextEditorStateTest.kt b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/model/MarkdownTextEditorStateTest.kt index c0e6756175a..02c98da423f 100644 --- a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/model/MarkdownTextEditorStateTest.kt +++ b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/model/MarkdownTextEditorStateTest.kt @@ -156,7 +156,7 @@ class MarkdownTextEditorStateTest { private fun aMarkdownTextWithMentions(): CharSequence { val userMentionSpan = MentionSpan("@Alice", "@alice:matrix.org", MentionSpan.Type.USER, 0, 0, 0, 0) - val atRoomMentionSpan = MentionSpan("@room", "@room", MentionSpan.Type.USER, 0, 0, 0, 0) + val atRoomMentionSpan = MentionSpan("@room", "@room", MentionSpan.Type.EVERYONE, 0, 0, 0, 0) return buildSpannedString { append("Hello ") inSpans(userMentionSpan) {