From 7c007806144d7481fbe1aa0b8ba72f16068405ee Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 25 Sep 2023 20:56:04 +0200 Subject: [PATCH] Navigation: put RoomList SingleTop when navigating from permalink --- .../android/appnav/LoggedInFlowNode.kt | 20 ++++++++++--------- .../io/element/android/appnav/RootFlowNode.kt | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 164c2ae2e4..d1a953ba09 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -54,6 +54,7 @@ import io.element.android.features.verifysession.api.VerifySessionEntryPoint import io.element.android.libraries.architecture.BackstackNode import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.architecture.waitForChildAttached import io.element.android.libraries.deeplink.DeeplinkData import io.element.android.libraries.designsystem.utils.SnackbarDispatcher import io.element.android.libraries.di.SessionScope @@ -68,6 +69,7 @@ import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize import timber.log.Timber @@ -304,6 +306,15 @@ class LoggedInFlowNode @AssistedInject constructor( } } + internal suspend fun attachInviteList(deeplinkData: DeeplinkData.InviteList) = withContext(lifecycleScope.coroutineContext) { + notificationDrawerManager.clearMembershipNotificationForSession(deeplinkData.sessionId) + backstack.singleTop(NavTarget.RoomList) + backstack.push(NavTarget.InviteList) + waitForChildAttached { navTarget -> + navTarget is NavTarget.InviteList + } + } + @Composable override fun View(modifier: Modifier) { Box(modifier = modifier) { @@ -321,13 +332,4 @@ class LoggedInFlowNode @AssistedInject constructor( } } } - - internal suspend fun attachRoom(deeplinkData: DeeplinkData.Room) { - backstack.push(NavTarget.Room(deeplinkData.roomId)) - } - - internal suspend fun attachInviteList(deeplinkData: DeeplinkData.InviteList) { - notificationDrawerManager.clearMembershipNotificationForSession(deeplinkData.sessionId) - backstack.push(NavTarget.InviteList) - } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 60095c17d0..94f344be7e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -234,7 +234,7 @@ class RootFlowNode @AssistedInject constructor( .apply { when (deeplinkData) { is DeeplinkData.Root -> attachRoot() - is DeeplinkData.Room -> attachRoom(deeplinkData) + is DeeplinkData.Room -> attachRoom(deeplinkData.roomId) is DeeplinkData.InviteList -> attachInviteList(deeplinkData) } }