Pinned events : minor code quality changes

This commit is contained in:
ganfra 2024-08-08 14:51:49 +02:00
parent 9334ba6ed5
commit ad85732427
4 changed files with 18 additions and 22 deletions

View file

@ -53,7 +53,7 @@ class PinnedMessagesBannerPresenter @Inject constructor(
@Composable @Composable
override fun present(): PinnedMessagesBannerState { override fun present(): PinnedMessagesBannerState {
val isFeatureEnabled = isFeatureEnabled() val isFeatureEnabled = isFeatureEnabled()
val knownPinnedMessagesCount by remember { val expectedPinnedMessagesCount by remember {
room.roomInfoFlow.map { roomInfo -> roomInfo.pinnedEventIds.size } room.roomInfoFlow.map { roomInfo -> roomInfo.pinnedEventIds.size }
}.collectAsState(initial = 0) }.collectAsState(initial = 0)
@ -77,11 +77,7 @@ class PinnedMessagesBannerPresenter @Inject constructor(
fun handleEvent(event: PinnedMessagesBannerEvents) { fun handleEvent(event: PinnedMessagesBannerEvents) {
when (event) { when (event) {
is PinnedMessagesBannerEvents.MoveToNextPinned -> { is PinnedMessagesBannerEvents.MoveToNextPinned -> {
if (currentPinnedMessageIndex > 0) { currentPinnedMessageIndex = (currentPinnedMessageIndex - 1).mod(pinnedItems.value.size)
currentPinnedMessageIndex--
} else {
currentPinnedMessageIndex = pinnedItems.value.size - 1
}
} }
} }
} }
@ -89,7 +85,7 @@ class PinnedMessagesBannerPresenter @Inject constructor(
return pinnedMessagesBannerState( return pinnedMessagesBannerState(
isFeatureEnabled = isFeatureEnabled, isFeatureEnabled = isFeatureEnabled,
hasTimelineFailed = hasTimelineFailedToLoad, hasTimelineFailed = hasTimelineFailedToLoad,
realPinnedMessagesCount = knownPinnedMessagesCount, expectedPinnedMessagesCount = expectedPinnedMessagesCount,
pinnedItems = pinnedItems.value, pinnedItems = pinnedItems.value,
currentPinnedMessageIndex = currentPinnedMessageIndex, currentPinnedMessageIndex = currentPinnedMessageIndex,
eventSink = ::handleEvent eventSink = ::handleEvent
@ -100,7 +96,7 @@ class PinnedMessagesBannerPresenter @Inject constructor(
private fun pinnedMessagesBannerState( private fun pinnedMessagesBannerState(
isFeatureEnabled: Boolean, isFeatureEnabled: Boolean,
hasTimelineFailed: Boolean, hasTimelineFailed: Boolean,
realPinnedMessagesCount: Int, expectedPinnedMessagesCount: Int,
pinnedItems: ImmutableList<PinnedMessagesBannerItem>, pinnedItems: ImmutableList<PinnedMessagesBannerItem>,
currentPinnedMessageIndex: Int, currentPinnedMessageIndex: Int,
eventSink: (PinnedMessagesBannerEvents) -> Unit eventSink: (PinnedMessagesBannerEvents) -> Unit
@ -112,11 +108,11 @@ class PinnedMessagesBannerPresenter @Inject constructor(
currentPinnedMessage != null -> PinnedMessagesBannerState.Loaded( currentPinnedMessage != null -> PinnedMessagesBannerState.Loaded(
currentPinnedMessage = currentPinnedMessage, currentPinnedMessage = currentPinnedMessage,
currentPinnedMessageIndex = currentPinnedMessageIndex, currentPinnedMessageIndex = currentPinnedMessageIndex,
knownPinnedMessagesCount = pinnedItems.size, loadedPinnedMessagesCount = pinnedItems.size,
eventSink = eventSink eventSink = eventSink
) )
realPinnedMessagesCount == 0 -> PinnedMessagesBannerState.Hidden expectedPinnedMessagesCount == 0 -> PinnedMessagesBannerState.Hidden
else -> PinnedMessagesBannerState.Loading(realPinnedMessagesCount = realPinnedMessagesCount) else -> PinnedMessagesBannerState.Loading(expectedPinnedMessagesCount = expectedPinnedMessagesCount)
} }
} }

View file

@ -27,23 +27,23 @@ import io.element.android.libraries.ui.strings.CommonStrings
sealed interface PinnedMessagesBannerState { sealed interface PinnedMessagesBannerState {
data object Hidden : PinnedMessagesBannerState data object Hidden : PinnedMessagesBannerState
sealed interface Visible : PinnedMessagesBannerState sealed interface Visible : PinnedMessagesBannerState
data class Loading(val realPinnedMessagesCount: Int) : Visible data class Loading(val expectedPinnedMessagesCount: Int) : Visible
data class Loaded( data class Loaded(
val currentPinnedMessage: PinnedMessagesBannerItem, val currentPinnedMessage: PinnedMessagesBannerItem,
val currentPinnedMessageIndex: Int, val currentPinnedMessageIndex: Int,
val knownPinnedMessagesCount: Int, val loadedPinnedMessagesCount: Int,
val eventSink: (PinnedMessagesBannerEvents) -> Unit val eventSink: (PinnedMessagesBannerEvents) -> Unit
) : Visible ) : Visible
fun pinnedMessagesCount() = when (this) { fun pinnedMessagesCount() = when (this) {
is Hidden -> 0 is Hidden -> 0
is Loading -> realPinnedMessagesCount is Loading -> expectedPinnedMessagesCount
is Loaded -> knownPinnedMessagesCount is Loaded -> loadedPinnedMessagesCount
} }
fun currentPinnedMessageIndex() = when (this) { fun currentPinnedMessageIndex() = when (this) {
is Hidden -> 0 is Hidden -> 0
is Loading -> realPinnedMessagesCount - 1 is Loading -> expectedPinnedMessagesCount - 1
is Loaded -> currentPinnedMessageIndex is Loaded -> currentPinnedMessageIndex
} }

View file

@ -42,7 +42,7 @@ internal fun aHiddenPinnedMessagesBannerState() = PinnedMessagesBannerState.Hidd
internal fun aLoadingPinnedMessagesBannerState( internal fun aLoadingPinnedMessagesBannerState(
knownPinnedMessagesCount: Int = 4 knownPinnedMessagesCount: Int = 4
) = PinnedMessagesBannerState.Loading( ) = PinnedMessagesBannerState.Loading(
realPinnedMessagesCount = knownPinnedMessagesCount expectedPinnedMessagesCount = knownPinnedMessagesCount
) )
internal fun aLoadedPinnedMessagesBannerState( internal fun aLoadedPinnedMessagesBannerState(
@ -56,6 +56,6 @@ internal fun aLoadedPinnedMessagesBannerState(
) = PinnedMessagesBannerState.Loaded( ) = PinnedMessagesBannerState.Loaded(
currentPinnedMessage = currentPinnedMessage, currentPinnedMessage = currentPinnedMessage,
currentPinnedMessageIndex = currentPinnedMessageIndex, currentPinnedMessageIndex = currentPinnedMessageIndex,
knownPinnedMessagesCount = knownPinnedMessagesCount, loadedPinnedMessagesCount = knownPinnedMessagesCount,
eventSink = eventSink eventSink = eventSink
) )

View file

@ -99,7 +99,7 @@ class PinnedMessagesBannerPresenterTest {
skipItems(2) skipItems(2)
val loadedState = awaitItem() as PinnedMessagesBannerState.Loaded val loadedState = awaitItem() as PinnedMessagesBannerState.Loaded
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0)
assertThat(loadedState.knownPinnedMessagesCount).isEqualTo(1) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(1)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent.toString())
} }
} }
@ -139,7 +139,7 @@ class PinnedMessagesBannerPresenterTest {
awaitItem().also { loadedState -> awaitItem().also { loadedState ->
loadedState as PinnedMessagesBannerState.Loaded loadedState as PinnedMessagesBannerState.Loaded
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1)
assertThat(loadedState.knownPinnedMessagesCount).isEqualTo(2) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString())
loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned) loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned)
} }
@ -147,7 +147,7 @@ class PinnedMessagesBannerPresenterTest {
awaitItem().also { loadedState -> awaitItem().also { loadedState ->
loadedState as PinnedMessagesBannerState.Loaded loadedState as PinnedMessagesBannerState.Loaded
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(0)
assertThat(loadedState.knownPinnedMessagesCount).isEqualTo(2) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent1.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent1.toString())
loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned) loadedState.eventSink(PinnedMessagesBannerEvents.MoveToNextPinned)
} }
@ -155,7 +155,7 @@ class PinnedMessagesBannerPresenterTest {
awaitItem().also { loadedState -> awaitItem().also { loadedState ->
loadedState as PinnedMessagesBannerState.Loaded loadedState as PinnedMessagesBannerState.Loaded
assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1) assertThat(loadedState.currentPinnedMessageIndex).isEqualTo(1)
assertThat(loadedState.knownPinnedMessagesCount).isEqualTo(2) assertThat(loadedState.loadedPinnedMessagesCount).isEqualTo(2)
assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString()) assertThat(loadedState.currentPinnedMessage.formatted.text).isEqualTo(messageContent2.toString())
} }
} }