From 5068ae06decdf2a5fe16f03627e5e09cb820f765 Mon Sep 17 00:00:00 2001 From: Antoine Jaury Date: Fri, 19 Jun 2026 09:43:59 +0200 Subject: [PATCH] new: add TopAppBar with back navigation support in PlayerScreen --- .../kotlin/fr/ajaury/gwenedeg/App.kt | 1 + .../ajaury/gwenedeg/player/ui/PlayerScreen.kt | 27 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt index 99204e1..b484d28 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt @@ -49,6 +49,7 @@ fun App() { is Route.Player -> NavEntry(key) { PlayerScreen( recordTitle = key.title, + onBackClicked = { backStack.removeLastOrNull() }, ) } } diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt index db3ccc6..b71b253 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt @@ -8,14 +8,18 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Pause import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.Replay import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue @@ -34,6 +38,7 @@ import org.koin.compose.viewmodel.koinViewModel @Composable fun PlayerScreen( recordTitle: String, + onBackClicked: () -> Unit, viewModel: PlayerViewModel = koinViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -49,16 +54,33 @@ fun PlayerScreen( recordTitle = recordTitle, uiState = uiState, onMainPlayActionButtonClicked = viewModel::performMainPlayAction, + onBackClicked = onBackClicked, ) } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun PlayerScreen( recordTitle: String, uiState: PlayerUiState, onMainPlayActionButtonClicked: () -> Unit, + onBackClicked: () -> Unit, ) { - Scaffold { innerPadding -> + Scaffold( + topBar = { + TopAppBar( + title = {}, + navigationIcon = { + IconButton(onClick = onBackClicked) { + Icon( + imageVector = Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = "Back", + ) + } + }, + ) + }, + ) { innerPadding -> Box( modifier = Modifier .padding(innerPadding) @@ -111,6 +133,7 @@ private fun PlayerScreenPlayingPreview() { recordTitle = "Demat", uiState = PlayerUiState(playbackState = PlaybackState.PLAYING), onMainPlayActionButtonClicked = {}, + onBackClicked = {}, ) } } @@ -123,6 +146,7 @@ private fun PlayerScreenPausedPreview() { recordTitle = "Demat", uiState = PlayerUiState(playbackState = PlaybackState.PAUSED), onMainPlayActionButtonClicked = {}, + onBackClicked = {}, ) } } @@ -135,6 +159,7 @@ private fun PlayerScreenEndedPreview() { recordTitle = "Demat", uiState = PlayerUiState(playbackState = PlaybackState.ENDED), onMainPlayActionButtonClicked = {}, + onBackClicked = {}, ) } }