@@ -25,6 +25,7 @@ import androidx.compose.runtime.Composable
2525import androidx.compose.runtime.remember
2626import androidx.compose.ui.Alignment
2727import androidx.compose.ui.Modifier
28+ import androidx.compose.ui.draw.clip
2829import androidx.compose.ui.graphics.Color
2930import androidx.compose.ui.platform.LocalContext
3031import androidx.compose.ui.platform.LocalDensity
@@ -34,7 +35,6 @@ import androidx.compose.ui.res.stringResource
3435import androidx.compose.ui.semantics.Role
3536import androidx.compose.ui.semantics.contentDescription
3637import androidx.compose.ui.semantics.role
37- import androidx.compose.ui.draw.clip
3838import androidx.compose.ui.semantics.semantics
3939import androidx.compose.ui.text.AnnotatedString
4040import androidx.compose.ui.text.Placeholder
@@ -88,7 +88,8 @@ fun parseMentionChipModel(
8888 messageParameters : Map <String , Map <String , String >>,
8989 activeUserId : String? ,
9090 activeUserBaseUrl : String? ,
91- roomToken : String?
91+ roomToken : String? ,
92+ enableMentionClicks : Boolean = true
9293): MentionChipModel ? =
9394 messageParameters[key]
9495 ?.takeIf { it[" type" ] in mentionParameterTypes }
@@ -117,7 +118,7 @@ fun parseMentionChipModel(
117118 type = type,
118119 isFederated = isFederated,
119120 isSelfMention = isSelfMention,
120- isClickableUserMention = type == " user" && ! isSelfMention && ! isFederated,
121+ isClickableUserMention = enableMentionClicks && type == " user" && ! isSelfMention && ! isFederated,
121122 avatarUrl = avatarUrl
122123 )
123124 }
@@ -170,7 +171,8 @@ fun estimateMentionChipWidthInEm(label: String, fontSizeSp: Float): Float {
170171fun buildMentionInlineContent (
171172 mention : MentionChipModel ,
172173 textStyle : TextStyle ,
173- isMultilineLayout : Boolean
174+ isMultilineLayout : Boolean ,
175+ onDisabledMentionClick : (() -> Unit )? = null
174176): InlineTextContent {
175177 val fontSizeSp = if (textStyle.fontSize.isSpecified) textStyle.fontSize.value else CHIP_FALLBACK_FONT_SIZE_SP
176178 val width = estimateMentionChipWidthInEm(mention.name, fontSizeSp)
@@ -192,7 +194,8 @@ fun buildMentionInlineContent(
192194 MentionChip (
193195 mention = mention,
194196 textStyle = textStyle,
195- isMultilineLayout = isMultilineLayout
197+ isMultilineLayout = isMultilineLayout,
198+ onDisabledMentionClick = onDisabledMentionClick
196199 )
197200 }
198201 }
@@ -203,9 +206,10 @@ fun AnnotatedString.Builder.appendMentionChip(
203206 mention : MentionChipModel ,
204207 inlineContent : MutableMap <String , InlineTextContent >,
205208 textStyle : TextStyle ,
206- isMultilineLayout : Boolean
209+ isMultilineLayout : Boolean ,
210+ onDisabledMentionClick : (() -> Unit )? = null
207211) {
208- inlineContent[inlineId] = buildMentionInlineContent(mention, textStyle, isMultilineLayout)
212+ inlineContent[inlineId] = buildMentionInlineContent(mention, textStyle, isMultilineLayout, onDisabledMentionClick )
209213 appendInlineContent(inlineId, " @${mention.name} " )
210214}
211215
@@ -215,8 +219,9 @@ fun AnnotatedString.Builder.appendBoldToken(text: String) {
215219 addStyle(SpanStyle (fontWeight = FontWeight .Bold ), start, length)
216220}
217221
222+
218223@Composable
219- fun MentionChip (mention : MentionChipModel , textStyle : TextStyle , isMultilineLayout : Boolean ) {
224+ fun MentionChip (mention : MentionChipModel , textStyle : TextStyle , isMultilineLayout : Boolean , onDisabledMentionClick : (() -> Unit ) ? = null ) {
220225 val context = LocalContext .current
221226 val viewThemeUtils = LocalViewThemeUtils .current
222227 val density = LocalDensity .current
@@ -246,6 +251,19 @@ fun MentionChip(mention: MentionChipModel, textStyle: TextStyle, isMultilineLayo
246251 mention.name
247252 }
248253
254+
255+ val clickModifier = when {
256+ mention.isClickableUserMention -> Modifier .clickable {
257+ EventBus .getDefault().post(UserMentionClickEvent (mention.id))
258+ }
259+
260+ onDisabledMentionClick != null -> Modifier .clickable {
261+ onDisabledMentionClick()
262+ }
263+
264+ else -> Modifier
265+ }
266+
249267 Row (
250268 modifier = Modifier
251269 .semantics {
@@ -254,9 +272,7 @@ fun MentionChip(mention: MentionChipModel, textStyle: TextStyle, isMultilineLayo
254272 }
255273 .clip(RoundedCornerShape (chipCornerRadius))
256274 .background(backgroundColor)
257- .clickable(enabled = mention.isClickableUserMention) {
258- EventBus .getDefault().post(UserMentionClickEvent (mention.id))
259- }
275+ .then(clickModifier)
260276 .padding(start = verticalPadding, top = verticalPadding, end = 4 .dp, bottom = verticalPadding),
261277 verticalAlignment = Alignment .CenterVertically ,
262278 horizontalArrangement = Arrangement .spacedBy(4 .dp)
0 commit comments