fix(chat): route back navigation to history (#809)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.m57.hermescontrol
|
package com.m57.hermescontrol
|
||||||
|
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@@ -156,6 +157,10 @@ fun MainNavigation(sessionId: String? = null) {
|
|||||||
|
|
||||||
val openDrawer: () -> Unit = { scope.launch { drawerState.open() } }
|
val openDrawer: () -> Unit = { scope.launch { drawerState.open() } }
|
||||||
|
|
||||||
|
BackHandler(enabled = currentScreen == ChatScreen && backStack.size == 1) {
|
||||||
|
NavigationController.goBack()
|
||||||
|
}
|
||||||
|
|
||||||
CompositionLocalProvider(LocalDrawerGestureController provides gestureController) {
|
CompositionLocalProvider(LocalDrawerGestureController provides gestureController) {
|
||||||
ModalNavigationDrawer(
|
ModalNavigationDrawer(
|
||||||
drawerState = drawerState,
|
drawerState = drawerState,
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ object NavigationController {
|
|||||||
*/
|
*/
|
||||||
fun goBack(fallback: NavKey = ChatScreen) {
|
fun goBack(fallback: NavKey = ChatScreen) {
|
||||||
val stack = backStack ?: return
|
val stack = backStack ?: return
|
||||||
|
if (stack.lastOrNull() == ChatScreen) {
|
||||||
|
resetTo(HistoryScreen)
|
||||||
|
return
|
||||||
|
}
|
||||||
if (stack.size > 1) {
|
if (stack.size > 1) {
|
||||||
stack.removeLastOrNull()
|
stack.removeLastOrNull()
|
||||||
} else if (stack.size == 1) {
|
} else if (stack.size == 1) {
|
||||||
|
|||||||
@@ -161,6 +161,17 @@ class NavigationControllerTest {
|
|||||||
assertEquals(ChatScreen, backStack.lastOrNull())
|
assertEquals(ChatScreen, backStack.lastOrNull())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `goBack from chat opens history`() {
|
||||||
|
val backStack = NavBackStack<NavKey>(ChatScreen)
|
||||||
|
NavigationController.backStack = backStack
|
||||||
|
|
||||||
|
NavigationController.goBack()
|
||||||
|
|
||||||
|
assertEquals(1, backStack.size)
|
||||||
|
assertEquals(HistoryScreen, backStack.lastOrNull())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `goBack falls back to default screen when stack has one item`() {
|
fun `goBack falls back to default screen when stack has one item`() {
|
||||||
val backStack = NavBackStack<NavKey>(ProfilesScreen)
|
val backStack = NavBackStack<NavKey>(ProfilesScreen)
|
||||||
|
|||||||
Reference in New Issue
Block a user