fix(chat): route back navigation to history (#809)

This commit is contained in:
AlexDev_
2026-08-04 18:09:26 +03:00
committed by GitHub
parent d1dac57ccb
commit 5a15ccc524
3 changed files with 20 additions and 0 deletions
@@ -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)