@@ -331,7 +331,7 @@ class LoggedInFlowNode(
331331 lifecycleScope.launch {
332332 attachRoom(
333333 roomIdOrAlias = roomId.toRoomIdOrAlias(),
334- joinedRoom = joinedRoom,
334+ initialElement = RoomNavigationTarget . Root ( joinedRoom = joinedRoom) ,
335335 clearBackstack = false ,
336336 )
337337 }
@@ -358,8 +358,12 @@ class LoggedInFlowNode(
358358 }
359359
360360 override fun navigateToRoomSettings (roomId : RoomId ) {
361- sessionCoroutineScope.launch {
362- backstack.push(NavTarget .Room (roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget .Details ))
361+ lifecycleScope.launch {
362+ attachRoom(
363+ roomIdOrAlias = roomId.toRoomIdOrAlias(),
364+ initialElement = RoomNavigationTarget .Details ,
365+ clearBackstack = false
366+ )
363367 }
364368 }
365369
@@ -388,24 +392,25 @@ class LoggedInFlowNode(
388392 Timber .e(" User link clicked: ${data.userId} ." )
389393 }
390394 is PermalinkData .RoomLink -> {
391- val target = NavTarget .Room (
392- roomIdOrAlias = data.roomIdOrAlias,
393- serverNames = data.viaParameters,
394- trigger = JoinedRoomAnalyticsEvent .Trigger .Timeline ,
395- initialElement = RoomNavigationTarget .Root (data.eventId),
396- )
397395 if (pushToBackstack) {
398396 lifecycleScope.launch {
399397 attachRoom(
400398 roomIdOrAlias = data.roomIdOrAlias,
401399 serverNames = data.viaParameters,
402400 trigger = JoinedRoomAnalyticsEvent .Trigger .Timeline ,
403- eventId = data.eventId,
401+ initialElement = RoomNavigationTarget . Root ( data.eventId) ,
404402 clearBackstack = false
405403 )
406404 }
407405 } else {
408- backstack.replace(target)
406+ backstack.replace(
407+ NavTarget .Room (
408+ roomIdOrAlias = data.roomIdOrAlias,
409+ serverNames = data.viaParameters,
410+ trigger = JoinedRoomAnalyticsEvent .Trigger .Timeline ,
411+ initialElement = RoomNavigationTarget .Root (data.eventId),
412+ )
413+ )
409414 }
410415 }
411416 is PermalinkData .FallbackLink ,
@@ -462,12 +467,21 @@ class LoggedInFlowNode(
462467 }
463468
464469 override fun navigateToRoomNotificationSettings (roomId : RoomId ) {
465- backstack.push(NavTarget .Room (roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget .NotificationSettings ))
470+ lifecycleScope.launch {
471+ attachRoom(
472+ roomIdOrAlias = roomId.toRoomIdOrAlias(),
473+ initialElement = RoomNavigationTarget .NotificationSettings ,
474+ )
475+ }
466476 }
467477
468478 override fun navigateToEvent (roomId : RoomId , eventId : EventId ) {
469479 sessionCoroutineScope.launch {
470- attachRoom(roomIdOrAlias = roomId.toRoomIdOrAlias(), eventId = eventId, clearBackstack = false )
480+ attachRoom(
481+ roomIdOrAlias = roomId.toRoomIdOrAlias(),
482+ initialElement = RoomNavigationTarget .Root (eventId),
483+ clearBackstack = false
484+ )
471485 }
472486 }
473487 }
@@ -499,7 +513,13 @@ class LoggedInFlowNode(
499513 is NavTarget .CreateSpace -> {
500514 val callback = object : CreateRoomEntryPoint .Callback {
501515 override fun onRoomCreated (roomId : RoomId ) {
502- backstack.replace(NavTarget .Room (roomIdOrAlias = RoomIdOrAlias .Id (roomId), serverNames = emptyList()))
516+ lifecycleScope.launch {
517+ attachRoom(
518+ roomIdOrAlias = roomId.toRoomIdOrAlias(),
519+ serverNames = emptyList(),
520+ clearBackstack = false ,
521+ )
522+ }
503523 }
504524 }
505525 createRoomEntryPoint
@@ -536,13 +556,13 @@ class LoggedInFlowNode(
536556 buildContext = buildContext,
537557 callback = object : RoomDirectoryEntryPoint .Callback {
538558 override fun navigateToRoom (roomDescription : RoomDescription ) {
539- backstack.push(
540- NavTarget . Room (
559+ lifecycleScope.launch {
560+ attachRoom (
541561 roomIdOrAlias = roomDescription.roomId.toRoomIdOrAlias(),
542562 roomDescription = roomDescription,
543563 trigger = JoinedRoomAnalyticsEvent .Trigger .RoomDirectory ,
544564 )
545- )
565+ }
546566 }
547567 },
548568 )
@@ -588,11 +608,11 @@ class LoggedInFlowNode(
588608
589609 suspend fun attachRoom (
590610 roomIdOrAlias : RoomIdOrAlias ,
591- joinedRoom : JoinedRoom ? = null,
592611 serverNames : List <String > = emptyList(),
593612 trigger : JoinedRoomAnalyticsEvent .Trigger ? = null,
594- eventId : EventId ? = null,
595- clearBackstack : Boolean ,
613+ roomDescription : RoomDescription ? = null,
614+ initialElement : RoomNavigationTarget = RoomNavigationTarget .Root (),
615+ clearBackstack : Boolean = false,
596616 ): RoomFlowNode {
597617 waitForNavTargetAttached { navTarget ->
598618 navTarget is NavTarget .Home
@@ -601,8 +621,9 @@ class LoggedInFlowNode(
601621 val roomNavTarget = NavTarget .Room (
602622 roomIdOrAlias = roomIdOrAlias,
603623 serverNames = serverNames,
624+ roomDescription = roomDescription,
604625 trigger = trigger,
605- initialElement = RoomNavigationTarget . Root (eventId = eventId, joinedRoom = joinedRoom)
626+ initialElement = initialElement,
606627 )
607628 backstack.accept(AttachRoomOperation (roomNavTarget, clearBackstack))
608629 }
@@ -612,8 +633,7 @@ class LoggedInFlowNode(
612633 return waitForChildAttached<RoomFlowNode , NavTarget > {
613634 it is NavTarget .Room &&
614635 it.roomIdOrAlias == roomIdOrAlias &&
615- it.initialElement is RoomNavigationTarget .Root &&
616- it.initialElement.eventId == eventId
636+ it.initialElement == initialElement
617637 }
618638 }
619639
0 commit comments