diff --git a/app/src/main/java/com/m57/hermescontrol/Navigation.kt b/app/src/main/java/com/m57/hermescontrol/Navigation.kt index 59098ff7..66db646c 100644 --- a/app/src/main/java/com/m57/hermescontrol/Navigation.kt +++ b/app/src/main/java/com/m57/hermescontrol/Navigation.kt @@ -1,5 +1,6 @@ package com.m57.hermescontrol +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -156,6 +157,10 @@ fun MainNavigation(sessionId: String? = null) { val openDrawer: () -> Unit = { scope.launch { drawerState.open() } } + BackHandler(enabled = currentScreen == ChatScreen && backStack.size == 1) { + NavigationController.goBack() + } + CompositionLocalProvider(LocalDrawerGestureController provides gestureController) { ModalNavigationDrawer( drawerState = drawerState, diff --git a/app/src/main/java/com/m57/hermescontrol/NavigationController.kt b/app/src/main/java/com/m57/hermescontrol/NavigationController.kt index 3ea94ac8..db000718 100644 --- a/app/src/main/java/com/m57/hermescontrol/NavigationController.kt +++ b/app/src/main/java/com/m57/hermescontrol/NavigationController.kt @@ -58,6 +58,10 @@ object NavigationController { */ fun goBack(fallback: NavKey = ChatScreen) { val stack = backStack ?: return + if (stack.lastOrNull() == ChatScreen) { + resetTo(HistoryScreen) + return + } if (stack.size > 1) { stack.removeLastOrNull() } else if (stack.size == 1) { diff --git a/app/src/test/java/com/m57/hermescontrol/NavigationControllerTest.kt b/app/src/test/java/com/m57/hermescontrol/NavigationControllerTest.kt index 0cbdcc73..884c28f3 100644 --- a/app/src/test/java/com/m57/hermescontrol/NavigationControllerTest.kt +++ b/app/src/test/java/com/m57/hermescontrol/NavigationControllerTest.kt @@ -161,6 +161,17 @@ class NavigationControllerTest { assertEquals(ChatScreen, backStack.lastOrNull()) } + @Test + fun `goBack from chat opens history`() { + val backStack = NavBackStack(ChatScreen) + NavigationController.backStack = backStack + + NavigationController.goBack() + + assertEquals(1, backStack.size) + assertEquals(HistoryScreen, backStack.lastOrNull()) + } + @Test fun `goBack falls back to default screen when stack has one item`() { val backStack = NavBackStack(ProfilesScreen)