Improve SignedOutPresenter.

We can now provide a SessionId in the Factory.
This commit is contained in:
Benoit Marty 2025-10-02 09:37:56 +02:00
parent 7dd081f0ed
commit 8d476b5f98
3 changed files with 11 additions and 12 deletions

View file

@ -32,7 +32,7 @@ class SignedOutNode(
) : NodeInputs
private val inputs: Inputs = inputs()
private val presenter = presenterFactory.create(inputs.sessionId.value)
private val presenter = presenterFactory.create(inputs.sessionId)
@Composable
override fun View(modifier: Modifier) {

View file

@ -9,7 +9,6 @@ package io.element.android.features.signedout.impl
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@ -18,35 +17,35 @@ import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.sessionstorage.api.SessionStore
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
@AssistedInject
class SignedOutPresenter(
// Cannot inject SessionId
@Assisted private val sessionId: String,
@Assisted private val sessionId: SessionId,
private val sessionStore: SessionStore,
private val buildMeta: BuildMeta,
) : Presenter<SignedOutState> {
@AssistedFactory
fun interface Factory {
fun create(sessionId: String): SignedOutPresenter
fun create(sessionId: SessionId): SignedOutPresenter
}
@Composable
override fun present(): SignedOutState {
val sessions by remember {
sessionStore.sessionsFlow()
}.collectAsState(initial = emptyList())
val signedOutSession by remember {
derivedStateOf { sessions.firstOrNull { it.userId == sessionId } }
}
sessionStore.sessionsFlow().map { sessions ->
sessions.firstOrNull { it.userId == sessionId.value }
}
}.collectAsState(initial = null)
val coroutineScope = rememberCoroutineScope()
fun handleEvents(event: SignedOutEvents) {
when (event) {
SignedOutEvents.SignInAgain -> coroutineScope.launch {
sessionStore.removeSession(sessionId)
sessionStore.removeSession(sessionId.value)
}
}
}

View file

@ -70,7 +70,7 @@ internal fun createSignedOutPresenter(
sessionStore: SessionStore = InMemorySessionStore(),
): SignedOutPresenter {
return SignedOutPresenter(
sessionId = sessionId.value,
sessionId = sessionId,
sessionStore = sessionStore,
buildMeta = aBuildMeta(applicationName = AN_APPLICATION_NAME),
)