Simplify PermalinkData, now that we have RoomIdOrAlias interface.
This commit is contained in:
parent
c1188ebb2d
commit
c1bb910dbd
6 changed files with 32 additions and 71 deletions
|
|
@ -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)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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", "#")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue