Skip to content

Commit 4e34300

Browse files
committed
Multi accounts - handle account switch when coming from a notification
1 parent 6e6722a commit 4e34300

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData
5454
import io.element.android.libraries.oidc.api.OidcAction
5555
import io.element.android.libraries.oidc.api.OidcActionFlow
5656
import io.element.android.libraries.sessionstorage.api.LoggedInState
57+
import io.element.android.libraries.sessionstorage.api.SessionStore
5758
import kotlinx.coroutines.flow.distinctUntilChanged
5859
import kotlinx.coroutines.flow.launchIn
5960
import kotlinx.coroutines.flow.onEach
@@ -76,6 +77,7 @@ class RootFlowNode(
7677
private val intentResolver: IntentResolver,
7778
private val oidcActionFlow: OidcActionFlow,
7879
private val bugReporter: BugReporter,
80+
private val sessionStore: SessionStore,
7981
) : BaseFlowNode<RootFlowNode.NavTarget>(
8082
backstack = BackStack(
8183
initialElement = NavTarget.SplashScreen,
@@ -365,7 +367,8 @@ class RootFlowNode(
365367

366368
// [sessionId] will be null for permalink.
367369
private suspend fun attachSession(sessionId: SessionId?): LoggedInFlowNode {
368-
// TODO handle multi-session
370+
// Ensure that the session is the latest one
371+
sessionId?.let { sessionStore.setLatestSession(it.value) }
369372
return waitForChildAttached<LoggedInAppScopeFlowNode, NavTarget> { navTarget ->
370373
navTarget is NavTarget.LoggedInFlow && (sessionId == null || navTarget.sessionId == sessionId)
371374
}

libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ class DatabaseSessionStore(
108108
}
109109

110110
override suspend fun setLatestSession(sessionId: String) {
111+
val latestSession = getLatestSession()
112+
if (latestSession?.userId == sessionId) {
113+
// Already the latest session
114+
return
115+
}
111116
val lastUsageIndex = getLatestSession()?.lastUsageIndex ?: 0
112117
val result = database.sessionDataQueries.selectByUserId(sessionId)
113118
.executeAsOneOrNull()

0 commit comments

Comments
 (0)