Parse permalink using parseMatrixEntityFrom.

Create new PermalinkData type for link to Events.
Keep matrixToConverter for now to first convert to matrix.to link. At some point it may be done by the SDK.
Remove parse(Uri)
This commit is contained in:
Benoit Marty 2024-04-15 17:46:06 +02:00
parent 89d2f43b1a
commit 3df328b1ab
14 changed files with 125 additions and 241 deletions

View file

@ -914,7 +914,6 @@ private fun ATextComposer(
voiceMessageState = voiceMessageState,
permalinkParser = object : PermalinkParser {
override fun parse(uriString: String): PermalinkData = TODO("Not yet implemented")
override fun parse(uri: Uri): PermalinkData = TODO("Not yet implemented")
},
composerMode = composerMode,
enableTextFormatting = enableTextFormatting,

View file

@ -18,7 +18,6 @@ package io.element.android.libraries.textcomposer.mentions
import android.graphics.Color
import android.graphics.Typeface
import android.net.Uri
import android.view.ViewGroup
import android.widget.TextView
import androidx.compose.foundation.layout.PaddingValues
@ -41,6 +40,7 @@ import io.element.android.libraries.designsystem.theme.currentUserMentionPillTex
import io.element.android.libraries.designsystem.theme.mentionPillBackground
import io.element.android.libraries.designsystem.theme.mentionPillText
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
import kotlinx.collections.immutable.persistentListOf
@ -80,7 +80,7 @@ class MentionSpanProvider(
val (startPaddingPx, endPaddingPx) = paddingValuesPx.value
return when {
permalinkData is PermalinkData.UserLink -> {
val isCurrentUser = permalinkData.userId == currentSessionId.value
val isCurrentUser = permalinkData.userId == currentSessionId
MentionSpan(
type = MentionSpan.Type.USER,
backgroundColor = if (isCurrentUser) currentUserBackgroundColor else otherBackgroundColor,
@ -137,19 +137,15 @@ internal fun MentionSpanPreview() {
permalinkParser = object : PermalinkParser {
override fun parse(uriString: String): PermalinkData {
return when (uriString) {
"https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink("@me:matrix.org")
"https://matrix.to/#/@other:matrix.org" -> PermalinkData.UserLink("@other:matrix.org")
"https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomLink(
roomIdOrAlias = "#room:matrix.org",
isRoomAlias = true,
eventId = null,
"https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink(UserId("@me:matrix.org"))
"https://matrix.to/#/@other:matrix.org" -> PermalinkData.UserLink(UserId("@other:matrix.org"))
"https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomAliasLink(
roomAlias = "#room:matrix.org",
viaParameters = persistentListOf(),
)
else -> TODO()
}
}
override fun parse(uri: Uri): PermalinkData = TODO()
},
)
ElementPreview {

View file

@ -18,6 +18,7 @@ package io.element.android.libraries.textcomposer.impl.mentions
import android.graphics.Color
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
@ -50,7 +51,7 @@ class MentionSpanProviderTest {
@Test
fun `getting mention span for current user should return a MentionSpan with custom colors`() {
permalinkParser.givenResult(PermalinkData.UserLink(currentUserId.value))
permalinkParser.givenResult(PermalinkData.UserLink(currentUserId))
val mentionSpan = mentionSpanProvider.getMentionSpanFor("@me:matrix.org", "https://matrix.to/#/${currentUserId.value}")
assertThat(mentionSpan.backgroundColor).isEqualTo(myUserColor)
assertThat(mentionSpan.textColor).isEqualTo(myUserColor)
@ -58,7 +59,7 @@ class MentionSpanProviderTest {
@Test
fun `getting mention span for other user should return a MentionSpan with normal colors`() {
permalinkParser.givenResult(PermalinkData.UserLink("@other:matrix.org"))
permalinkParser.givenResult(PermalinkData.UserLink(UserId("@other:matrix.org")))
val mentionSpan = mentionSpanProvider.getMentionSpanFor("@other:matrix.org", "https://matrix.to/#/@other:matrix.org")
assertThat(mentionSpan.backgroundColor).isEqualTo(otherColor)
assertThat(mentionSpan.textColor).isEqualTo(otherColor)
@ -67,10 +68,8 @@ class MentionSpanProviderTest {
@Test
fun `getting mention span for a room should return a MentionSpan with normal colors`() {
permalinkParser.givenResult(
PermalinkData.RoomLink(
roomIdOrAlias = "#room:matrix.org",
isRoomAlias = true,
eventId = null,
PermalinkData.RoomAliasLink(
roomAlias = "#room:matrix.org",
viaParameters = persistentListOf(),
)
)
@ -82,10 +81,8 @@ class MentionSpanProviderTest {
@Test
fun `getting mention span for @room should return a MentionSpan with normal colors`() {
permalinkParser.givenResult(
PermalinkData.RoomLink(
roomIdOrAlias = "#",
isRoomAlias = true,
eventId = null,
PermalinkData.RoomAliasLink(
roomAlias = "#",
viaParameters = persistentListOf(),
)
)