diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 1fb3c5648e..2e71759269 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -280,25 +280,12 @@ class LoggedInFlowNode @AssistedInject constructor( // FIXME: Add a user profile screen. Timber.e("User link clicked: ${data.userId}. TODO Add a user profile screen") } - is PermalinkData.RoomIdLink -> { - backstack.push(NavTarget.Room(data.roomId.toRoomIdOrAlias())) - } - is PermalinkData.RoomAliasLink -> { - backstack.push(NavTarget.Room(data.roomAlias.toRoomIdOrAlias())) - } - is PermalinkData.EventIdAliasLink -> { + is PermalinkData.RoomLink -> { backstack.push( NavTarget.Room( - data.roomAlias.toRoomIdOrAlias(), - initialElement = RoomNavigationTarget.Messages(data.eventId) - ) - ) - } - is PermalinkData.EventIdLink -> { - backstack.push( - NavTarget.Room( - data.roomId.toRoomIdOrAlias(), - initialElement = RoomNavigationTarget.Messages(data.eventId) + data.roomIdOrAlias, + initialElement = RoomNavigationTarget.Messages(data.eventId), + // TODO Use the viaParameters ) ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 0a4d1f039d..b87e1cb343 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -123,10 +123,7 @@ class MessagesNode @AssistedInject constructor( callback?.onPermalinkClicked(permalink) } } - is PermalinkData.RoomIdLink, - is PermalinkData.RoomAliasLink, - is PermalinkData.EventIdAliasLink, - is PermalinkData.EventIdLink -> { + is PermalinkData.RoomLink -> { callback?.onPermalinkClicked(permalink) } is PermalinkData.FallbackLink, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt index fff7e22380..ab979320d7 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkData.kt @@ -19,10 +19,11 @@ package io.element.android.libraries.matrix.api.permalink import android.net.Uri import androidx.compose.runtime.Immutable 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.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf /** * This sealed class represents all the permalink cases. @@ -30,36 +31,11 @@ import kotlinx.collections.immutable.ImmutableList */ @Immutable sealed interface PermalinkData { - sealed interface RoomLink : PermalinkData { - val viaParameters: ImmutableList - } - - data class RoomIdLink( - val roomId: RoomId, - override val viaParameters: ImmutableList - ) : RoomLink - - data class RoomAliasLink( - val roomAlias: RoomAlias, - override val viaParameters: ImmutableList - ) : RoomLink - - sealed interface EventLink : PermalinkData { - val eventId: EventId - val viaParameters: ImmutableList - } - - data class EventIdLink( - val roomId: RoomId, - override val eventId: EventId, - override val viaParameters: ImmutableList - ) : EventLink - - data class EventIdAliasLink( - val roomAlias: RoomAlias, - override val eventId: EventId, - override val viaParameters: ImmutableList - ) : EventLink + data class RoomLink( + val roomIdOrAlias: RoomIdOrAlias, + val eventId: EventId? = null, + val viaParameters: ImmutableList = persistentListOf() + ) : PermalinkData /* * &room_name=Team2 diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index f47247c0f5..b3b7d1fe38 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -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.RoomId 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.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser @@ -60,24 +61,24 @@ class DefaultPermalinkParser @Inject constructor( } else { val viaParameters = result.via.toImmutableList() when (val id = result.id) { - is MatrixId.Room -> PermalinkData.RoomIdLink( - roomId = RoomId(id.id), - viaParameters = viaParameters, - ) is MatrixId.User -> PermalinkData.UserLink( userId = UserId(id.id), ) - is MatrixId.RoomAlias -> PermalinkData.RoomAliasLink( - roomAlias = RoomAlias(id.alias), + is MatrixId.Room -> PermalinkData.RoomLink( + roomIdOrAlias = RoomId(id.id).toRoomIdOrAlias(), viaParameters = viaParameters, ) - is MatrixId.EventOnRoomId -> PermalinkData.EventIdLink( - roomId = RoomId(id.roomId), + is MatrixId.RoomAlias -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(), + viaParameters = viaParameters, + ) + is MatrixId.EventOnRoomId -> PermalinkData.RoomLink( + roomIdOrAlias = RoomId(id.roomId).toRoomIdOrAlias(), eventId = EventId(id.eventId), viaParameters = viaParameters, ) - is MatrixId.EventOnRoomAlias -> PermalinkData.EventIdAliasLink( - roomAlias = RoomAlias(id.alias), + is MatrixId.EventOnRoomAlias -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias(id.alias).toRoomIdOrAlias(), eventId = EventId(id.eventId), viaParameters = viaParameters, ) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index 7972b4d6a4..7d8bfd34ce 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -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.SessionId 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.PermalinkParser import kotlinx.collections.immutable.persistentListOf @@ -140,8 +141,9 @@ internal fun MentionSpanPreview() { return when (uriString) { "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 = RoomAlias("#room:matrix.org"), + "https://matrix.to/#/#room:matrix.org" -> PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(), + eventId = null, viaParameters = persistentListOf(), ) else -> TODO() diff --git a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt index d7e2bff7b1..a3a4ee7884 100644 --- a/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt +++ b/libraries/textcomposer/impl/src/test/kotlin/io/element/android/libraries/textcomposer/impl/mentions/MentionSpanProviderTest.kt @@ -20,12 +20,12 @@ import android.graphics.Color import com.google.common.truth.Truth.assertThat 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.toRoomIdOrAlias 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 import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.tests.testutils.WarmUpRule -import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -69,9 +69,8 @@ class MentionSpanProviderTest { @Test fun `getting mention span for a room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( - PermalinkData.RoomAliasLink( - roomAlias = RoomAlias("#room:matrix.org"), - viaParameters = persistentListOf(), + PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#room:matrix.org").toRoomIdOrAlias(), ) ) val mentionSpan = mentionSpanProvider.getMentionSpanFor("#room:matrix.org", "https://matrix.to/#/#room:matrix.org") @@ -82,9 +81,8 @@ class MentionSpanProviderTest { @Test fun `getting mention span for @room should return a MentionSpan with normal colors`() { permalinkParser.givenResult( - PermalinkData.RoomAliasLink( - roomAlias = RoomAlias("#"), - viaParameters = persistentListOf(), + PermalinkData.RoomLink( + roomIdOrAlias = RoomAlias("#").toRoomIdOrAlias(), ) ) val mentionSpan = mentionSpanProvider.getMentionSpanFor("@room", "#")