LinkEvents -> LinkEvent

This commit is contained in:
Benoit Marty
2026-01-27 09:55:20 +01:00
parent 92a77fab18
commit c96f6036a3
9 changed files with 29 additions and 29 deletions

View File

@@ -57,7 +57,7 @@ import io.element.android.features.messages.impl.actionlist.ActionListView
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
import io.element.android.features.messages.impl.crypto.historyvisible.HistoryVisibleStateView
import io.element.android.features.messages.impl.crypto.identity.IdentityChangeStateView
import io.element.android.features.messages.impl.link.LinkEvents
import io.element.android.features.messages.impl.link.LinkEvent
import io.element.android.features.messages.impl.link.LinkView
import io.element.android.features.messages.impl.messagecomposer.AttachmentsBottomSheet
import io.element.android.features.messages.impl.messagecomposer.DisabledComposerView
@@ -252,7 +252,7 @@ fun MessagesView(
onLinkClick(link.url, true)
// Do not check those links, they are internal link only
} else {
state.linkState.eventSink(LinkEvents.OnLinkClick(link))
state.linkState.eventSink(LinkEvent.OnLinkClick(link))
}
},
onReactionClick = ::onEmojiReactionClick,

View File

@@ -10,8 +10,8 @@ package io.element.android.features.messages.impl.link
import io.element.android.wysiwyg.link.Link
sealed interface LinkEvents {
data class OnLinkClick(val link: Link) : LinkEvents
data object Confirm : LinkEvents
data object Cancel : LinkEvents
sealed interface LinkEvent {
data class OnLinkClick(val link: Link) : LinkEvent
data object Confirm : LinkEvent
data object Cancel : LinkEvent
}

View File

@@ -25,9 +25,9 @@ class LinkPresenter(
override fun present(): LinkState {
val linkClick: MutableState<AsyncAction<Link>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
fun handleEvent(event: LinkEvents) {
fun handleEvent(event: LinkEvent) {
when (event) {
is LinkEvents.OnLinkClick -> {
is LinkEvent.OnLinkClick -> {
linkClick.value = AsyncAction.Loading
val result = linkChecker.isSafe(event.link)
if (result) {
@@ -37,12 +37,12 @@ class LinkPresenter(
linkClick.value = ConfirmingLinkClick(event.link)
}
}
LinkEvents.Confirm -> {
LinkEvent.Confirm -> {
linkClick.value = (linkClick.value as? ConfirmingLinkClick)
?.let { AsyncAction.Success(it.link) }
?: AsyncAction.Uninitialized
}
LinkEvents.Cancel -> {
LinkEvent.Cancel -> {
linkClick.value = AsyncAction.Uninitialized
}
}

View File

@@ -13,5 +13,5 @@ import io.element.android.wysiwyg.link.Link
data class LinkState(
val linkClick: AsyncAction<Link>,
val eventSink: (LinkEvents) -> Unit,
val eventSink: (LinkEvent) -> Unit,
)

View File

@@ -29,7 +29,7 @@ open class LinkStateProvider : PreviewParameterProvider<LinkState> {
fun aLinkState(
linkClick: AsyncAction<Link> = AsyncAction.Uninitialized,
eventSink: (LinkEvents) -> Unit = {},
eventSink: (LinkEvent) -> Unit = {},
) = LinkState(
linkClick = linkClick,
eventSink = eventSink,

View File

@@ -46,10 +46,10 @@ fun LinkView(
),
submitText = stringResource(CommonStrings.action_continue),
onSubmitClick = {
state.eventSink(LinkEvents.Confirm)
state.eventSink(LinkEvent.Confirm)
},
onDismiss = {
state.eventSink(LinkEvents.Cancel)
state.eventSink(LinkEvent.Cancel)
},
)
}
@@ -58,7 +58,7 @@ fun LinkView(
val latestOnLinkValid by rememberUpdatedState(onLinkValid)
LaunchedEffect(state.linkClick.data) {
latestOnLinkValid(state.linkClick.data)
state.eventSink(LinkEvents.Cancel)
state.eventSink(LinkEvent.Cancel)
}
}
}

View File

@@ -28,7 +28,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.messages.impl.actionlist.ActionListEvent
import io.element.android.features.messages.impl.actionlist.ActionListView
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
import io.element.android.features.messages.impl.link.LinkEvents
import io.element.android.features.messages.impl.link.LinkEvent
import io.element.android.features.messages.impl.link.LinkView
import io.element.android.features.messages.impl.timeline.components.TimelineItemRow
import io.element.android.features.messages.impl.timeline.components.event.TimelineItemEventContentView
@@ -222,7 +222,7 @@ private fun PinnedMessagesListLoaded(
focusedEventId = null,
onUserDataClick = onUserDataClick,
onLinkClick = { link ->
state.linkState.eventSink(LinkEvents.OnLinkClick(link))
state.linkState.eventSink(LinkEvent.OnLinkClick(link))
},
onLinkLongClick = onLinkLongClick,
onContentClick = onEventClick,
@@ -243,7 +243,7 @@ private fun PinnedMessagesListLoaded(
onContentClick = { onEventClick(event) },
onLongClick = { onMessageLongClick(event) },
onLinkClick = { link ->
state.linkState.eventSink(LinkEvents.OnLinkClick(link))
state.linkState.eventSink(LinkEvent.OnLinkClick(link))
},
onLinkLongClick = onLinkLongClick,
modifier = contentModifier,

View File

@@ -45,7 +45,7 @@ class LinkPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.linkClick).isEqualTo(AsyncAction.Uninitialized)
initialState.eventSink(LinkEvents.OnLinkClick(aLink))
initialState.eventSink(LinkEvent.OnLinkClick(aLink))
assertThat(awaitItem().linkClick).isEqualTo(AsyncAction.Loading)
val state = awaitItem()
assertThat(state.linkClick).isEqualTo(AsyncAction.Success(aLink))
@@ -61,11 +61,11 @@ class LinkPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.linkClick).isEqualTo(AsyncAction.Uninitialized)
initialState.eventSink(LinkEvents.OnLinkClick(aLink))
initialState.eventSink(LinkEvent.OnLinkClick(aLink))
assertThat(awaitItem().linkClick).isEqualTo(AsyncAction.Loading)
val state = awaitItem()
assertThat(state.linkClick).isEqualTo(ConfirmingLinkClick(aLink))
state.eventSink(LinkEvents.Cancel)
state.eventSink(LinkEvent.Cancel)
val finalState = awaitItem()
assertThat(finalState.linkClick).isEqualTo(AsyncAction.Uninitialized)
}
@@ -79,11 +79,11 @@ class LinkPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.linkClick).isEqualTo(AsyncAction.Uninitialized)
initialState.eventSink(LinkEvents.OnLinkClick(aLink))
initialState.eventSink(LinkEvent.OnLinkClick(aLink))
assertThat(awaitItem().linkClick).isEqualTo(AsyncAction.Loading)
val state = awaitItem()
assertThat(state.linkClick).isEqualTo(ConfirmingLinkClick(aLink))
state.eventSink(LinkEvents.Confirm)
state.eventSink(LinkEvent.Confirm)
val finalState = awaitItem()
assertThat(finalState.linkClick).isEqualTo(AsyncAction.Success(aLink))
}

View File

@@ -31,7 +31,7 @@ class LinkViewTest {
@Test
fun `clicking on cancel emits the expected event`() {
val eventsRecorder = EventsRecorder<LinkEvents>()
val eventsRecorder = EventsRecorder<LinkEvent>()
rule.setLinkView(
aLinkState(
linkClick = ConfirmingLinkClick(aLink),
@@ -40,13 +40,13 @@ class LinkViewTest {
)
rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(
LinkEvents.Cancel
LinkEvent.Cancel
)
}
@Test
fun `clicking on continue emits the expected event`() {
val eventsRecorder = EventsRecorder<LinkEvents>()
val eventsRecorder = EventsRecorder<LinkEvent>()
rule.setLinkView(
aLinkState(
linkClick = ConfirmingLinkClick(aLink),
@@ -55,13 +55,13 @@ class LinkViewTest {
)
rule.clickOn(CommonStrings.action_continue)
eventsRecorder.assertSingle(
LinkEvents.Confirm
LinkEvent.Confirm
)
}
@Test
fun `success state invokes the callback and emits the expected event`() {
val eventsRecorder = EventsRecorder<LinkEvents>()
val eventsRecorder = EventsRecorder<LinkEvent>()
ensureCalledOnceWithParam(aLink) { callback ->
rule.setLinkView(
aLinkState(
@@ -72,7 +72,7 @@ class LinkViewTest {
)
}
eventsRecorder.assertSingle(
LinkEvents.Cancel
LinkEvent.Cancel
)
}
}