Make links in messages clickable again (#1115)

This commit is contained in:
Jorge Martin Espinosa 2023-08-22 15:21:43 +02:00 committed by GitHub
parent 3a476f5130
commit e45b15165a
4 changed files with 9 additions and 7 deletions

1
changelog.d/1111.bugfix Normal file
View file

@ -0,0 +1 @@
Make links in messages clickable again.

View file

@ -66,7 +66,6 @@ fun TimelineItemTextView(
} }
ClickableLinkText( ClickableLinkText(
text = textWithPadding, text = textWithPadding,
linkAnnotationTag = "URL",
onClick = onTextClicked, onClick = onTextClicked,
onLongClick = onTextLongClicked, onLongClick = onTextLongClicked,
interactionSource = interactionSource interactionSource = interactionSource

View file

@ -582,7 +582,6 @@ private fun HtmlText(
val inlineContentMap = persistentMapOf<String, InlineTextContent>() val inlineContentMap = persistentMapOf<String, InlineTextContent>()
ClickableLinkText( ClickableLinkText(
annotatedString = text, annotatedString = text,
linkAnnotationTag = "URL",
style = style, style = style,
modifier = modifier, modifier = modifier,
inlineContent = inlineContentMap, inlineContent = inlineContentMap,

View file

@ -48,13 +48,15 @@ import io.element.android.libraries.theme.LinkColor
import kotlinx.collections.immutable.ImmutableMap import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.persistentMapOf
const val LINK_TAG = "URL"
@Composable @Composable
fun ClickableLinkText( fun ClickableLinkText(
text: String, text: String,
interactionSource: MutableInteractionSource, interactionSource: MutableInteractionSource,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
linkify: Boolean = true, linkify: Boolean = true,
linkAnnotationTag: String = "", linkAnnotationTag: String = LINK_TAG,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
onLongClick: () -> Unit = {}, onLongClick: () -> Unit = {},
style: TextStyle = LocalTextStyle.current, style: TextStyle = LocalTextStyle.current,
@ -80,13 +82,14 @@ fun ClickableLinkText(
interactionSource: MutableInteractionSource, interactionSource: MutableInteractionSource,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
linkify: Boolean = true, linkify: Boolean = true,
linkAnnotationTag: String = "", linkAnnotationTag: String = LINK_TAG,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
onLongClick: () -> Unit = {}, onLongClick: () -> Unit = {},
style: TextStyle = LocalTextStyle.current, style: TextStyle = LocalTextStyle.current,
inlineContent: ImmutableMap<String, InlineTextContent> = persistentMapOf(), inlineContent: ImmutableMap<String, InlineTextContent> = persistentMapOf(),
) { ) {
val processedText = remember(annotatedString) { @Suppress("NAME_SHADOWING")
val annotatedString = remember(annotatedString) {
if (linkify) { if (linkify) {
annotatedString.linkify(SpanStyle(color = LinkColor)) annotatedString.linkify(SpanStyle(color = LinkColor))
} else { } else {
@ -126,7 +129,7 @@ fun ClickableLinkText(
} }
} }
Text( Text(
text = processedText, text = annotatedString,
modifier = modifier.then(pressIndicator), modifier = modifier.then(pressIndicator),
style = style, style = style,
onTextLayout = { onTextLayout = {
@ -158,7 +161,7 @@ fun AnnotatedString.linkify(linkStyle: SpanStyle): AnnotatedString {
style = linkStyle, style = linkStyle,
) )
addStringAnnotation( addStringAnnotation(
tag = "URL", tag = LINK_TAG,
annotation = span.url, annotation = span.url,
start = start, start = start,
end = end end = end