DeveloperSettingsEvents -> DeveloperSettingsEvent

This commit is contained in:
Benoit Marty
2026-08-25 10:09:09 +02:00
parent d8e7031709
commit 7952721ffe
7 changed files with 38 additions and 38 deletions
@@ -10,11 +10,11 @@ package io.element.android.features.preferences.impl.developer
import androidx.compose.ui.graphics.Color
sealed interface DeveloperSettingsEvents {
data class SetShowColorPicker(val show: Boolean) : DeveloperSettingsEvents
data class ChangeBrandColor(val color: Color?) : DeveloperSettingsEvents
data object ClearCache : DeveloperSettingsEvents
data object VacuumStores : DeveloperSettingsEvents
data class MarkAllRoomsAsRead(val needsConfirmation: Boolean) : DeveloperSettingsEvents
data object DismissMarkAllRoomsAsReadConfirmation : DeveloperSettingsEvents
sealed interface DeveloperSettingsEvent {
data class SetShowColorPicker(val show: Boolean) : DeveloperSettingsEvent
data class ChangeBrandColor(val color: Color?) : DeveloperSettingsEvent
data object ClearCache : DeveloperSettingsEvent
data object VacuumStores : DeveloperSettingsEvent
data class MarkAllRoomsAsRead(val needsConfirmation: Boolean) : DeveloperSettingsEvent
data object DismissMarkAllRoomsAsReadConfirmation : DeveloperSettingsEvent
}
@@ -79,10 +79,10 @@ class DeveloperSettingsPresenter(
computeCacheSize(cacheSize)
}
fun handleEvent(event: DeveloperSettingsEvents) {
fun handleEvent(event: DeveloperSettingsEvent) {
when (event) {
DeveloperSettingsEvents.ClearCache -> coroutineScope.clearCache(clearCacheAction)
is DeveloperSettingsEvents.ChangeBrandColor -> coroutineScope.launch {
DeveloperSettingsEvent.ClearCache -> coroutineScope.clearCache(clearCacheAction)
is DeveloperSettingsEvent.ChangeBrandColor -> coroutineScope.launch {
showColorPicker = false
val color = event.color
?.toArgb()
@@ -91,13 +91,13 @@ class DeveloperSettingsPresenter(
?.padStart(7, '#')
enterpriseService.overrideBrandColor(sessionId, color)
}
is DeveloperSettingsEvents.SetShowColorPicker -> {
is DeveloperSettingsEvent.SetShowColorPicker -> {
showColorPicker = event.show
}
DeveloperSettingsEvents.VacuumStores -> coroutineScope.launch {
DeveloperSettingsEvent.VacuumStores -> coroutineScope.launch {
vacuumStoresUseCase()
}
is DeveloperSettingsEvents.MarkAllRoomsAsRead -> {
is DeveloperSettingsEvent.MarkAllRoomsAsRead -> {
if (event.needsConfirmation) {
markAllRoomsAsReadAction.value = AsyncAction.ConfirmingNoParams
} else {
@@ -106,7 +106,7 @@ class DeveloperSettingsPresenter(
)
}
}
DeveloperSettingsEvents.DismissMarkAllRoomsAsReadConfirmation -> {
DeveloperSettingsEvent.DismissMarkAllRoomsAsReadConfirmation -> {
markAllRoomsAsReadAction.value = AsyncAction.Uninitialized
}
}
@@ -23,7 +23,7 @@ data class DeveloperSettingsState(
val isEnterpriseBuild: Boolean,
val showColorPicker: Boolean,
val deviceId: DeviceId,
val eventSink: (DeveloperSettingsEvents) -> Unit
val eventSink: (DeveloperSettingsEvent) -> Unit
) {
val showLoader = clearCacheAction is AsyncAction.Loading || markAllRoomsAsReadAction is AsyncAction.Loading
}
@@ -42,7 +42,7 @@ fun aDeveloperSettingsState(
isEnterpriseBuild: Boolean = false,
showColorPicker: Boolean = false,
deviceId: DeviceId = DeviceId("ILAKNDNASDLK"),
eventSink: (DeveloperSettingsEvents) -> Unit = {},
eventSink: (DeveloperSettingsEvent) -> Unit = {},
) = DeveloperSettingsState(
appDeveloperSettingsState = appDeveloperSettingsState,
cacheSize = AsyncData.Success("1.2 MB"),
@@ -56,8 +56,8 @@ fun DeveloperSettingsView(
title = "Are you sure you want to mark all the rooms as read?",
content = "",
submitText = stringResource(CommonStrings.action_yes),
onSubmitClick = { state.eventSink(DeveloperSettingsEvents.MarkAllRoomsAsRead(needsConfirmation = false)) },
onDismiss = { state.eventSink(DeveloperSettingsEvents.DismissMarkAllRoomsAsReadConfirmation) },
onSubmitClick = { state.eventSink(DeveloperSettingsEvent.MarkAllRoomsAsRead(needsConfirmation = false)) },
onDismiss = { state.eventSink(DeveloperSettingsEvent.DismissMarkAllRoomsAsReadConfirmation) },
)
}
BackHandler(
@@ -89,7 +89,7 @@ fun DeveloperSettingsView(
Text("Change brand color")
},
onClick = {
state.eventSink(DeveloperSettingsEvents.SetShowColorPicker(true))
state.eventSink(DeveloperSettingsEvent.SetShowColorPicker(true))
}
)
ListItem(
@@ -97,7 +97,7 @@ fun DeveloperSettingsView(
Text("Reset brand color")
},
onClick = {
state.eventSink(DeveloperSettingsEvents.ChangeBrandColor(null))
state.eventSink(DeveloperSettingsEvent.ChangeBrandColor(null))
}
)
}
@@ -131,7 +131,7 @@ fun DeveloperSettingsView(
Text("Vacuum stores")
},
onClick = {
state.eventSink(DeveloperSettingsEvents.VacuumStores)
state.eventSink(DeveloperSettingsEvent.VacuumStores)
}
)
ListItem(
@@ -152,7 +152,7 @@ fun DeveloperSettingsView(
},
onClick = {
if (state.clearCacheAction.isLoading().not()) {
state.eventSink(DeveloperSettingsEvents.ClearCache)
state.eventSink(DeveloperSettingsEvent.ClearCache)
}
}
)
@@ -164,10 +164,10 @@ fun DeveloperSettingsView(
showAlphaBar = false,
),
onDismissRequest = {
state.eventSink(DeveloperSettingsEvents.SetShowColorPicker(false))
state.eventSink(DeveloperSettingsEvent.SetShowColorPicker(false))
},
onPickedColor = {
state.eventSink(DeveloperSettingsEvents.ChangeBrandColor(it))
state.eventSink(DeveloperSettingsEvent.ChangeBrandColor(it))
},
)
}
@@ -210,7 +210,7 @@ private fun MarkAllRoomsAsReadCategory(state: DeveloperSettingsState) {
},
enabled = !state.showLoader,
onClick = {
state.eventSink(DeveloperSettingsEvents.MarkAllRoomsAsRead(needsConfirmation = true))
state.eventSink(DeveloperSettingsEvent.MarkAllRoomsAsRead(needsConfirmation = true))
},
)
}
@@ -88,7 +88,7 @@ class DeveloperSettingsPresenterTest {
skipItems(2)
assertThat(clearCacheUseCase.executeHasBeenCalled).isFalse()
awaitItem().also { state ->
state.eventSink(DeveloperSettingsEvents.ClearCache)
state.eventSink(DeveloperSettingsEvent.ClearCache)
}
awaitItem().also { state ->
assertThat(state.clearCacheAction).isInstanceOf(AsyncAction.Loading::class.java)
@@ -117,13 +117,13 @@ class DeveloperSettingsPresenterTest {
skipItems(1)
val initialState = awaitItem()
assertThat(initialState.isEnterpriseBuild).isTrue()
initialState.eventSink(DeveloperSettingsEvents.SetShowColorPicker(true))
initialState.eventSink(DeveloperSettingsEvent.SetShowColorPicker(true))
assertThat(awaitItem().showColorPicker).isTrue()
initialState.eventSink(DeveloperSettingsEvents.SetShowColorPicker(false))
initialState.eventSink(DeveloperSettingsEvent.SetShowColorPicker(false))
assertThat(awaitItem().showColorPicker).isFalse()
initialState.eventSink(DeveloperSettingsEvents.SetShowColorPicker(true))
initialState.eventSink(DeveloperSettingsEvent.SetShowColorPicker(true))
assertThat(awaitItem().showColorPicker).isTrue()
initialState.eventSink(DeveloperSettingsEvents.ChangeBrandColor(Color.Green))
initialState.eventSink(DeveloperSettingsEvent.ChangeBrandColor(Color.Green))
assertThat(awaitItem().showColorPicker).isFalse()
skipItems(1)
overrideBrandColorResult.assertions().isCalledOnce()
@@ -138,10 +138,10 @@ class DeveloperSettingsPresenterTest {
presenter.test {
skipItems(2)
val initialState = awaitItem()
initialState.eventSink(DeveloperSettingsEvents.MarkAllRoomsAsRead(needsConfirmation = true))
initialState.eventSink(DeveloperSettingsEvent.MarkAllRoomsAsRead(needsConfirmation = true))
val stateWithConfirmation = awaitItem()
assertThat(stateWithConfirmation.markAllRoomsAsReadAction.isConfirming()).isTrue()
stateWithConfirmation.eventSink(DeveloperSettingsEvents.MarkAllRoomsAsRead(needsConfirmation = false))
stateWithConfirmation.eventSink(DeveloperSettingsEvent.MarkAllRoomsAsRead(needsConfirmation = false))
awaitItem().also { state ->
assertThat(state.markAllRoomsAsReadAction.isConfirming()).isFalse()
assertThat(state.markAllRoomsAsReadAction).isInstanceOf(AsyncAction.Loading::class.java)
@@ -164,7 +164,7 @@ class DeveloperSettingsPresenterTest {
presenter.test {
val state = awaitItem()
assertThat(vacuumCalled).isFalse()
state.eventSink(DeveloperSettingsEvents.VacuumStores)
state.eventSink(DeveloperSettingsEvent.VacuumStores)
skipItems(1)
assertThat(vacuumCalled).isTrue()
}
@@ -30,7 +30,7 @@ import org.robolectric.annotation.Config
class DeveloperSettingsViewTest : RobolectricTest() {
@Test
fun `clicking on back invokes the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<DeveloperSettingsEvent>(expectEvents = false)
ensureCalledOnce {
setDeveloperSettingsView(
state = aDeveloperSettingsState(
@@ -45,7 +45,7 @@ class DeveloperSettingsViewTest : RobolectricTest() {
@Config(qualifiers = "h2400dp")
@Test
fun `clicking on push history notification invokes the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<DeveloperSettingsEvent>(expectEvents = false)
ensureCalledOnce {
setDeveloperSettingsView(
state = aDeveloperSettingsState(
@@ -60,7 +60,7 @@ class DeveloperSettingsViewTest : RobolectricTest() {
@Config(qualifiers = "h2000dp")
@Test
fun `clicking on open showkase invokes the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<DeveloperSettingsEvent>(expectEvents = false)
ensureCalledOnce {
setDeveloperSettingsView(
state = aDeveloperSettingsState(
@@ -75,14 +75,14 @@ class DeveloperSettingsViewTest : RobolectricTest() {
@Config(qualifiers = "h2400dp")
@Test
fun `clicking on clear cache emits the expected event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>()
val eventsRecorder = EventsRecorder<DeveloperSettingsEvent>()
setDeveloperSettingsView(
state = aDeveloperSettingsState(
eventSink = eventsRecorder
),
)
onNodeWithText("Clear cache").performScrollTo().performClick()
eventsRecorder.assertSingle(DeveloperSettingsEvents.ClearCache)
eventsRecorder.assertSingle(DeveloperSettingsEvent.ClearCache)
}
}