Use EventSink lambda in state instead of Flow in Presenter
This commit is contained in:
parent
e56ba5e315
commit
ad7bf21f6d
43 changed files with 277 additions and 490 deletions
|
|
@ -1,7 +0,0 @@
|
|||
package io.element.android.x.features.preferences.root
|
||||
|
||||
sealed interface PreferencesRootEvents {
|
||||
object Logout : PreferencesRootEvents
|
||||
data class SetRageshakeSensitivity(val sensitivity: Float) : PreferencesRootEvents
|
||||
data class SetRageshakeEnabled(val enabled: Boolean) : PreferencesRootEvents
|
||||
}
|
||||
|
|
@ -21,24 +21,12 @@ class PreferencesRootNode @AssistedInject constructor(
|
|||
private val presenter: PreferencesRootPresenter,
|
||||
) : Node(buildContext, plugins = plugins) {
|
||||
|
||||
public interface Callback : Plugin {
|
||||
interface Callback : Plugin {
|
||||
fun onOpenBugReport()
|
||||
}
|
||||
|
||||
private val presenterConnector = presenterConnector(presenter)
|
||||
|
||||
private fun onLogoutClicked() {
|
||||
presenterConnector.emitEvent(PreferencesRootEvents.Logout)
|
||||
}
|
||||
|
||||
private fun onRageshakeEnabledChanged(isEnabled: Boolean) {
|
||||
presenterConnector.emitEvent(PreferencesRootEvents.SetRageshakeEnabled(isEnabled))
|
||||
}
|
||||
|
||||
private fun onRageshakeSensitivityChanged(sensitivity: Float) {
|
||||
presenterConnector.emitEvent(PreferencesRootEvents.SetRageshakeSensitivity(sensitivity))
|
||||
}
|
||||
|
||||
private fun onOpenBugReport() {
|
||||
plugins<Callback>().forEach { it.onOpenBugReport() }
|
||||
}
|
||||
|
|
@ -48,10 +36,7 @@ class PreferencesRootNode @AssistedInject constructor(
|
|||
val state by presenterConnector.stateFlow.collectAsState()
|
||||
PreferencesRootView(
|
||||
state = state,
|
||||
onLogoutClicked = this::onLogoutClicked,
|
||||
onBackPressed = this::navigateUp,
|
||||
onRageshakeEnabledChanged = this::onRageshakeEnabledChanged,
|
||||
onRageshakeSensitivityChanged = this::onRageshakeSensitivityChanged,
|
||||
onOpenRageShake = this::onOpenBugReport
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,42 +1,26 @@
|
|||
package io.element.android.x.features.preferences.root
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import io.element.android.x.architecture.Async
|
||||
import io.element.android.x.architecture.Presenter
|
||||
import io.element.android.x.architecture.SharedFlowHolder
|
||||
import io.element.android.x.features.logout.LogoutPreferenceEvents
|
||||
import io.element.android.x.features.logout.LogoutPreferencePresenter
|
||||
import io.element.android.x.features.rageshake.preferences.RageshakePreferencesEvents
|
||||
import io.element.android.x.features.rageshake.preferences.RageshakePreferencesPresenter
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import javax.inject.Inject
|
||||
|
||||
class PreferencesRootPresenter @Inject constructor(
|
||||
private val logoutPresenter: LogoutPreferencePresenter,
|
||||
private val rageshakePresenter: RageshakePreferencesPresenter,
|
||||
) : Presenter<PreferencesRootState, PreferencesRootEvents> {
|
||||
|
||||
private val logoutEventsFlow = SharedFlowHolder<LogoutPreferenceEvents>()
|
||||
private val rageshakeEventsFlow = SharedFlowHolder<RageshakePreferencesEvents>()
|
||||
) : Presenter<PreferencesRootState> {
|
||||
|
||||
@Composable
|
||||
override fun present(events: Flow<PreferencesRootEvents>): PreferencesRootState {
|
||||
val logoutState = logoutPresenter.present(events = logoutEventsFlow.asSharedFlow())
|
||||
val rageshakeState = rageshakePresenter.present(events = rageshakeEventsFlow.asSharedFlow())
|
||||
LaunchedEffect(Unit) {
|
||||
events.collect { event ->
|
||||
when (event) {
|
||||
PreferencesRootEvents.Logout -> logoutEventsFlow.emit(LogoutPreferenceEvents.Logout)
|
||||
is PreferencesRootEvents.SetRageshakeEnabled -> rageshakeEventsFlow.emit(RageshakePreferencesEvents.SetIsEnabled(event.enabled))
|
||||
is PreferencesRootEvents.SetRageshakeSensitivity -> rageshakeEventsFlow.emit(RageshakePreferencesEvents.SetSensitivity(event.sensitivity))
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun present(): PreferencesRootState {
|
||||
val logoutState = logoutPresenter.present()
|
||||
val rageshakeState = rageshakePresenter.present()
|
||||
|
||||
return PreferencesRootState(
|
||||
logoutState = logoutState,
|
||||
rageshakeState = rageshakeState,
|
||||
myUser = Async.Uninitialized
|
||||
myUser = Async.Uninitialized,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import io.element.android.x.element.resources.R
|
|||
import io.element.android.x.features.logout.LogoutPreferenceState
|
||||
import io.element.android.x.features.logout.LogoutPreferenceView
|
||||
import io.element.android.x.features.preferences.user.UserPreferences
|
||||
import io.element.android.x.features.rageshake.preferences.RageshakePreferencesEvents
|
||||
import io.element.android.x.features.rageshake.preferences.RageshakePreferencesState
|
||||
import io.element.android.x.features.rageshake.preferences.RageshakePreferencesView
|
||||
|
||||
|
|
@ -18,10 +19,7 @@ fun PreferencesRootView(
|
|||
state: PreferencesRootState,
|
||||
modifier: Modifier = Modifier,
|
||||
onBackPressed: () -> Unit = {},
|
||||
onLogoutClicked: () -> Unit = {},
|
||||
onOpenRageShake: () -> Unit = {},
|
||||
onRageshakeEnabledChanged: (Boolean) -> Unit = {},
|
||||
onRageshakeSensitivityChanged: (Float) -> Unit = {},
|
||||
) {
|
||||
// TODO Hierarchy!
|
||||
// Include pref from other modules
|
||||
|
|
@ -34,12 +32,9 @@ fun PreferencesRootView(
|
|||
RageshakePreferencesView(
|
||||
state = state.rageshakeState,
|
||||
onOpenRageshake = onOpenRageShake,
|
||||
onSensitivityChanged = onRageshakeSensitivityChanged,
|
||||
onIsEnabledChanged = onRageshakeEnabledChanged,
|
||||
)
|
||||
LogoutPreferenceView(
|
||||
state = state.logoutState,
|
||||
onLogoutClicked = onLogoutClicked,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue