Make links in messages clickable again (#1115)
This commit is contained in:
parent
3a476f5130
commit
e45b15165a
4 changed files with 9 additions and 7 deletions
1
changelog.d/1111.bugfix
Normal file
1
changelog.d/1111.bugfix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Make links in messages clickable again.
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue