Migrate EmojiPickerPresenter to assisted-factory pattern with EmptyGetRecentEmojis

This commit is contained in:
ganfra
2026-07-22 15:31:40 +02:00
parent 5d8290b240
commit 93d6d5c84c
7 changed files with 38 additions and 15 deletions
@@ -37,7 +37,6 @@ fun CustomReactionBottomSheet(
CustomReactionState.Target.None,
is CustomReactionState.Target.Loading -> Unit
is CustomReactionState.Target.Success -> {
fun onEmojiSelectedDismiss(emoji: Emoji) {
sheetState.hide(coroutineScope) {
state.eventSink(CustomReactionEvent.DismissCustomReactionSheet)
@@ -49,7 +48,6 @@ fun CustomReactionBottomSheet(
state.eventSink(CustomReactionEvent.DismissCustomReactionSheet)
}
ModalBottomSheet(
onDismissRequest = ::onDismiss,
sheetState = sheetState,
@@ -17,12 +17,15 @@ import dev.zacsweers.metro.Inject
import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.emoji.api.picker.EmojiPickerPresenter
import io.element.android.libraries.emoji.api.recentemojis.GetRecentEmojis
import kotlinx.collections.immutable.toImmutableSet
@Inject
class CustomReactionPresenter(
private val emojiPickerPresenter: EmojiPickerPresenter,
emojiPickerPresenterFactory: EmojiPickerPresenter.Factory,
getRecentEmojis: GetRecentEmojis,
) : Presenter<CustomReactionState> {
private val emojiPickerPresenter = emojiPickerPresenterFactory.create(getRecentEmojis)
@Composable
override fun present(): CustomReactionState {
var internalTarget by remember { mutableStateOf<InternalTarget>(InternalTarget.None) }
@@ -11,6 +11,8 @@ package io.element.android.features.messages.impl.timeline.components.customreac
import com.google.common.truth.Truth.assertThat
import io.element.android.features.messages.impl.timeline.aTimelineItemEvent
import io.element.android.features.messages.impl.timeline.aTimelineItemReactions
import io.element.android.libraries.emoji.api.picker.EmojiPickerPresenter
import io.element.android.libraries.emoji.api.recentemojis.EmptyGetRecentEmojis
import io.element.android.libraries.emoji.impl.picker.anEmojiPickerState
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.tests.testutils.WarmUpRule
@@ -24,7 +26,8 @@ class CustomReactionPresenterTest {
val warmUpRule = WarmUpRule()
private val presenter = CustomReactionPresenter(
emojiPickerPresenter = { anEmojiPickerState() },
emojiPickerPresenterFactory = EmojiPickerPresenter.Factory { EmojiPickerPresenter { anEmojiPickerState() } },
getRecentEmojis = EmptyGetRecentEmojis,
)
@Test
@@ -36,8 +39,6 @@ class CustomReactionPresenterTest {
initialState.eventSink(CustomReactionEvent.ShowCustomReactionSheet(event))
assertThat(awaitItem().target).isEqualTo(CustomReactionState.Target.Loading(event))
val eventId = (awaitItem().target as? CustomReactionState.Target.Success)?.event?.eventId
assertThat(eventId).isEqualTo(AN_EVENT_ID)
@@ -57,8 +58,6 @@ class CustomReactionPresenterTest {
val key = reactions.reactions.first().key
initialState.eventSink(CustomReactionEvent.ShowCustomReactionSheet(event))
assertThat(awaitItem().target).isEqualTo(CustomReactionState.Target.Loading(event))
val stateWithSelectedEmojis = awaitItem()
val eventId = (stateWithSelectedEmojis.target as? CustomReactionState.Target.Success)?.event?.eventId
assertThat(eventId).isEqualTo(AN_EVENT_ID)