Simplify PermalinkData, now that we have RoomIdOrAlias interface.

This commit is contained in:
Benoit Marty 2024-04-16 12:45:24 +02:00 committed by Benoit Marty
parent c1188ebb2d
commit c1bb910dbd
6 changed files with 32 additions and 71 deletions

View file

@ -280,25 +280,12 @@ class LoggedInFlowNode @AssistedInject constructor(
// FIXME: Add a user profile screen. // FIXME: Add a user profile screen.
Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen")
} }
is PermalinkData.RoomIdLink -> { is PermalinkData.RoomLink -> {
backstack.push(NavTarget.Room(data.roomId.toRoomIdOrAlias()))
}
is PermalinkData.RoomAliasLink -> {
backstack.push(NavTarget.Room(data.roomAlias.toRoomIdOrAlias()))
}
is PermalinkData.EventIdAliasLink -> {
backstack.push( backstack.push(
NavTarget.Room( NavTarget.Room(
data.roomAlias.toRoomIdOrAlias(), data.roomIdOrAlias,
initialElement = RoomNavigationTarget.Messages(data.eventId) initialElement = RoomNavigationTarget.Messages(data.eventId),
) // TODO Use the viaParameters
)
}
is PermalinkData.EventIdLink -> {
backstack.push(
NavTarget.Room(
data.roomId.toRoomIdOrAlias(),
initialElement = RoomNavigationTarget.Messages(data.eventId)
) )
) )
} }

View file

@ -123,10 +123,7 @@ class MessagesNode @AssistedInject constructor(
callback?.onPermalinkClicked(permalink) callback?.onPermalinkClicked(permalink)
} }
} }
is PermalinkData.RoomIdLink, is PermalinkData.RoomLink -> {
is PermalinkData.RoomAliasLink,
is PermalinkData.EventIdAliasLink,
is PermalinkData.EventIdLink -> {
callback?.onPermalinkClicked(permalink) callback?.onPermalinkClicked(permalink)
} }
is PermalinkData.FallbackLink, is PermalinkData.FallbackLink,

View file

@ -19,10 +19,11 @@ package io.element.android.libraries.matrix.api.permalink
import android.net.Uri import android.net.Uri
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
/** /**
* This sealed class represents all the permalink cases. * This sealed class represents all the permalink cases.
@ -30,36 +31,11 @@ import kotlinx.collections.immutable.ImmutableList
*/ */
@Immutable @Immutable
sealed interface PermalinkData { sealed interface PermalinkData {
sealed interface RoomLink : PermalinkData { data class RoomLink(
val viaParameters: ImmutableList<String> val roomIdOrAlias: RoomIdOrAlias,
} val eventId: EventId? = null,
val viaParameters: ImmutableList<String> = persistentListOf()
data class RoomIdLink( ) : PermalinkData
val roomId: RoomId,
override val viaParameters: ImmutableList<String>
) : RoomLink
data class RoomAliasLink(
val roomAlias: RoomAlias,
override val viaParameters: ImmutableList<String>
) : RoomLink
sealed interface EventLink : PermalinkData {
val eventId: EventId
val viaParameters: ImmutableList<String>
}
data class EventIdLink(
val roomId: RoomId,
override val eventId: EventId,
override val viaParameters: ImmutableList<String>
) : EventLink
data class EventIdAliasLink(
val roomAlias: RoomAlias,
override val eventId: EventId,
override val viaParameters: ImmutableList<String>
) : EventLink
/* /*
* &room_name=Team2 * &room_name=Team2

View file

@ -23,6 +23,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
import io.element.android.libraries.matrix.api.permalink.MatrixToConverter import io.element.android.libraries.matrix.api.permalink.MatrixToConverter
import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.permalink.PermalinkParser
@ -60,24 +61,24 @@ class DefaultPermalinkParser @Inject constructor(
} else { } else {
val viaParameters = result.via.toImmutableList() val viaParameters = result.via.toImmutableList()
when (val id = result.id) { when (val id = result.id) {
is MatrixId.Room -> PermalinkData.RoomIdLink(
roomId = RoomId(id.id),
viaParameters = viaParameters,
)
is MatrixId.User -> PermalinkData.UserLink( is MatrixId.User -> PermalinkData.UserLink(
userId = UserId(id.id), userId = UserId(id.id),
) )
is MatrixId.RoomAlias -> PermalinkData.RoomAliasLink( is MatrixId.Room -> PermalinkData.RoomLink(
roomAlias = RoomAlias(id.alias), roomIdOrAlias = RoomId(id.id).toRoomIdOrAlias(),
viaParameters = viaParameters, viaParameters = viaParameters,
) )
is MatrixId.EventOnRoomId -> PermalinkData.EventIdLink( is MatrixId.RoomAlias -> PermalinkData.RoomLink(
roomId = RoomId(id.roomId), roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(),
viaParameters = viaParameters,
)
is MatrixId.EventOnRoomId -> PermalinkData.RoomLink(
roomIdOrAlias = RoomId(id.roomId).toRoomIdOrAlias(),
eventId = EventId(id.eventId), eventId = EventId(id.eventId),
viaParameters = viaParameters, viaParameters = viaParameters,
) )
is MatrixId.EventOnRoomAlias -> PermalinkData.EventIdAliasLink( is MatrixId.EventOnRoomAlias -> PermalinkData.RoomLink(
roomAlias = RoomAlias(id.alias), roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(),
eventId = EventId(id.eventId), eventId = EventId(id.eventId),
viaParameters = viaParameters, viaParameters = viaParameters,
) )

View file

@ -42,6 +42,7 @@ import io.element.android.libraries.designsystem.theme.mentionPillText
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.SessionId 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.core.UserId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.permalink.PermalinkParser
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
@ -140,8 +141,9 @@ internal fun MentionSpanPreview() {
return when (uriString) { return when (uriString) {
"https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink(UserId("@me:matrix.org")) "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/#/@other:matrix.org" -> PermalinkData.UserLink(UserId("@other:matrix.org"))
"https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomAliasLink( "https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomLink(
roomAlias = RoomAlias("#room:matrix.org"), roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(),
eventId = null,
viaParameters = persistentListOf(), viaParameters = persistentListOf(),
) )
else -> TODO() else -> TODO()

View file

@ -20,12 +20,12 @@ import android.graphics.Color
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
import io.element.android.libraries.matrix.api.permalink.PermalinkData 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.A_SESSION_ID
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import kotlinx.collections.immutable.persistentListOf
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -69,9 +69,8 @@ class MentionSpanProviderTest {
@Test @Test
fun `getting mention span for a room should return a MentionSpan with normal colors`() { fun `getting mention span for a room should return a MentionSpan with normal colors`() {
permalinkParser.givenResult( permalinkParser.givenResult(
PermalinkData.RoomAliasLink( PermalinkData.RoomLink(
roomAlias = RoomAlias("#room:matrix.org"), roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(),
viaParameters = persistentListOf(),
) )
) )
val mentionSpan = mentionSpanProvider.getMentionSpanFor("#room:matrix.org", "https://matrix.to/#/#room:matrix.org") val mentionSpan = mentionSpanProvider.getMentionSpanFor("#room:matrix.org", "https://matrix.to/#/#room:matrix.org")
@ -82,9 +81,8 @@ class MentionSpanProviderTest {
@Test @Test
fun `getting mention span for @room should return a MentionSpan with normal colors`() { fun `getting mention span for @room should return a MentionSpan with normal colors`() {
permalinkParser.givenResult( permalinkParser.givenResult(
PermalinkData.RoomAliasLink( PermalinkData.RoomLink(
roomAlias = RoomAlias("#"), roomIdOrAlias = RoomAlias("#").toRoomIdOrAlias(),
viaParameters = persistentListOf(),
) )
) )
val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#") val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#")