diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml index 3eea960..95986e5 100644 --- a/androidApp/src/main/AndroidManifest.xml +++ b/androidApp/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ null + is Screen.Game -> null + is Screen.Results -> Screen.Home + Screen.History -> Screen.Home +} + @Composable fun App( filesDirPath: String, @@ -48,6 +56,11 @@ fun App( HomeScreen(onPlay = {}, onHistory = {}, onLeaderboard = {}) } + screen.backTarget()?.let { target -> + @OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class) + BackHandler { screen = target } + } + when (val current = screen) { Screen.Home -> HomeScreen( onPlay = { config -> screen = Screen.Game(config) }, diff --git a/sharedUI/src/commonMain/kotlin/com/livrets/ui/GameScreen.kt b/sharedUI/src/commonMain/kotlin/com/livrets/ui/GameScreen.kt index 425ecb6..21d395d 100644 --- a/sharedUI/src/commonMain/kotlin/com/livrets/ui/GameScreen.kt +++ b/sharedUI/src/commonMain/kotlin/com/livrets/ui/GameScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.backhandler.BackHandler import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -52,6 +53,8 @@ fun GameScreen( LaunchedEffect(engine) { engine.start() } var showQuitDialog by remember { mutableStateOf(false) } + @OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class) + BackHandler { showQuitDialog = true } if (showQuitDialog) { AlertDialog( onDismissRequest = { showQuitDialog = false }, diff --git a/sharedUI/src/commonTest/kotlin/com/livrets/BackNavigationTest.kt b/sharedUI/src/commonTest/kotlin/com/livrets/BackNavigationTest.kt new file mode 100644 index 0000000..d544472 --- /dev/null +++ b/sharedUI/src/commonTest/kotlin/com/livrets/BackNavigationTest.kt @@ -0,0 +1,38 @@ +package com.livrets + +import com.livrets.game.GameConfig +import com.livrets.game.GameResult +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class BackNavigationTest { + + private val config = GameConfig(questionCount = 10, secondsPerQuestion = 5, maxTable = 10) + + private val result = GameResult( + date = kotlin.time.Instant.fromEpochMilliseconds(0L), + config = config, + records = emptyList(), + ) + + @Test + fun `back depuis l historique ramene a l accueil`() { + assertEquals(Screen.Home, Screen.History.backTarget()) + } + + @Test + fun `back depuis les resultats ramene a l accueil`() { + assertEquals(Screen.Home, Screen.Results(result).backTarget()) + } + + @Test + fun `pas de navigation back depuis l accueil`() { + assertNull(Screen.Home.backTarget()) + } + + @Test + fun `pas de navigation back depuis une partie`() { + assertNull(Screen.Game(config).backTarget()) + } +}