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 80c1a06737..d1e3447570 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -67,6 +67,7 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MAIN_SPACE import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.roomlist.RoomList import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.push.api.notifications.NotificationDrawerManager import io.element.android.services.appnavstate.api.AppNavigationStateService @@ -149,6 +150,23 @@ class LoggedInFlowNode @AssistedInject constructor( } ) observeSyncStateAndNetworkStatus() + observeInvitesLoadingState() + } + + private fun observeInvitesLoadingState() { + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + matrixClient.roomListService.invites.loadingState + .collect { inviteState -> + when (inviteState) { + is RoomList.LoadingState.Loaded -> if (inviteState.numberOfRooms == 0) { + backstack.removeLast(NavTarget.InviteList) + } + RoomList.LoadingState.NotLoaded -> Unit + } + } + } + } } @OptIn(FlowPreview::class) diff --git a/changelog.d/2022.feature b/changelog.d/2022.feature new file mode 100644 index 0000000000..286fde741a --- /dev/null +++ b/changelog.d/2022.feature @@ -0,0 +1 @@ +Always close the invite list screen when there is no more invite.