diff --git a/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt b/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt index 6c70c3266a..c36b6de17b 100644 --- a/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt +++ b/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt @@ -60,7 +60,6 @@ class SpaceStateHandlerImpl @Inject constructor( private val coroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) private val selectedSpaceDataSource = BehaviorDataSource>(Option.empty()) private val selectedSpaceFlow = selectedSpaceDataSource.stream() - private val spaceBackstack = ArrayDeque() override fun getCurrentSpace(): RoomSummary? { return selectedSpaceDataSource.currentValue?.orNull()?.let { spaceSummary -> @@ -84,7 +83,7 @@ class SpaceStateHandlerImpl @Inject constructor( } if (isForwardNavigation) { - addToBackstacks(spaceToLeave, spaceToSet) + addToBackstack(spaceToLeave, spaceToSet) } if (persistNow) { @@ -106,15 +105,13 @@ class SpaceStateHandlerImpl @Inject constructor( } } - private fun addToBackstacks(spaceToLeave: RoomSummary?, spaceToSet: RoomSummary?) { - spaceBackstack.addLast(spaceToLeave?.roomId) - + private fun addToBackstack(spaceToLeave: RoomSummary?, spaceToSet: RoomSummary?) { // Only add to the persisted backstack if the space to set is not All Chats, else reset the persisted stack - if (spaceToSet != null && spaceToLeave != null) { + if (spaceToSet != null) { val currentPersistedBackstack = vectorPreferences.getPersistedSpaceBackstack().toMutableList() - currentPersistedBackstack.add(spaceToLeave.roomId) + currentPersistedBackstack.add(spaceToLeave?.roomId) vectorPreferences.setPersistedSpaceBackstack(currentPersistedBackstack) - } else if (spaceToSet == null) { + } else { vectorPreferences.setPersistedSpaceBackstack(emptyList()) } } @@ -143,12 +140,11 @@ class SpaceStateHandlerImpl @Inject constructor( } override fun popSpaceBackstack(): String? { - val poppedSpaceId = spaceBackstack.removeLast() vectorPreferences.getPersistedSpaceBackstack().toMutableList().apply { - removeLastOrNull() + val poppedSpaceId = removeLast() vectorPreferences.setPersistedSpaceBackstack(this) + return poppedSpaceId } - return poppedSpaceId } override fun getPersistedSpaceBackstack() = vectorPreferences.getPersistedSpaceBackstack() diff --git a/vector/src/main/java/im/vector/app/features/spaces/NewSpaceListHeaderItem.kt b/vector/src/main/java/im/vector/app/features/spaces/NewSpaceListHeaderItem.kt index 647b31084e..29538be16e 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/NewSpaceListHeaderItem.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/NewSpaceListHeaderItem.kt @@ -38,8 +38,11 @@ abstract class NewSpaceListHeaderItem : VectorEpoxyModel ") { it.second }}" + + val nonRootSpaceHistory = spaceHistory.filter { it.second.isNotEmpty() } + + if (nonRootSpaceHistory.isNotEmpty()) { + spaceHeaderText += " > ${nonRootSpaceHistory.joinToString(" > ") { it.second }}" } if (currentSpace != null) { spaceHeaderText += " > $currentSpace"