Refactors space backstack handling
This commit is contained in:
parent
7ee58ccc88
commit
5012f37e6f
@ -51,11 +51,11 @@ interface SpaceStateHandler : DefaultLifecycleObserver {
|
|||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current backstack of spaces (via their id).
|
* Gets the Space ID of the space on top of the backstack
|
||||||
*
|
*
|
||||||
* null may be an entry in the ArrayDeque to indicate the root space (All Chats)
|
* May return null to indicate the All Chats space
|
||||||
*/
|
*/
|
||||||
fun getSpaceBackstack(): ArrayDeque<String?>
|
fun popSpaceBackstack(): String?
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a flow of the selected space for clients to react immediately to space changes.
|
* Gets a flow of the selected space for clients to react immediately to space changes.
|
||||||
|
@ -138,7 +138,14 @@ class SpaceStateHandlerImpl @Inject constructor(
|
|||||||
}.launchIn(session.coroutineScope)
|
}.launchIn(session.coroutineScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSpaceBackstack() = spaceBackstack
|
override fun popSpaceBackstack(): String? {
|
||||||
|
val poppedSpaceId = spaceBackstack.removeLast()
|
||||||
|
vectorPreferences.getPersistedSpaceBackstack().toMutableList().apply {
|
||||||
|
removeLast()
|
||||||
|
vectorPreferences.setPersistedSpaceBackstack(this)
|
||||||
|
}
|
||||||
|
return poppedSpaceId
|
||||||
|
}
|
||||||
|
|
||||||
override fun getSelectedSpaceFlow() = selectedSpaceFlow
|
override fun getSelectedSpaceFlow() = selectedSpaceFlow
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ class HomeDetailFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateBack() {
|
private fun navigateBack() {
|
||||||
val previousSpaceId = spaceStateHandler.getSpaceBackstack().removeLastOrNull()
|
val previousSpaceId = spaceStateHandler.popSpaceBackstack()
|
||||||
val parentSpaceId = spaceStateHandler.getCurrentSpace()?.flattenParentIds?.lastOrNull()
|
val parentSpaceId = spaceStateHandler.getCurrentSpace()?.flattenParentIds?.lastOrNull()
|
||||||
setCurrentSpace(previousSpaceId ?: parentSpaceId)
|
setCurrentSpace(previousSpaceId ?: parentSpaceId)
|
||||||
}
|
}
|
||||||
|
@ -178,10 +178,8 @@ class NewHomeDetailFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateBack() {
|
private fun navigateBack() {
|
||||||
val spaceBackstack = spaceStateHandler.getSpaceBackstack()
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val previousSpaceId = spaceBackstack.removeLast()
|
val previousSpaceId = spaceStateHandler.popSpaceBackstack()
|
||||||
setCurrentSpace(previousSpaceId)
|
setCurrentSpace(previousSpaceId)
|
||||||
} catch (e: NoSuchElementException) {
|
} catch (e: NoSuchElementException) {
|
||||||
requireActivity().finish()
|
requireActivity().finish()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user