new: add TopAppBar with back navigation support in PlayerScreen

This commit is contained in:
2026-06-19 09:43:59 +02:00
parent d1ee995a24
commit 5068ae06de
2 changed files with 27 additions and 1 deletions
@@ -49,6 +49,7 @@ fun App() {
is Route.Player -> NavEntry(key) { is Route.Player -> NavEntry(key) {
PlayerScreen( PlayerScreen(
recordTitle = key.title, recordTitle = key.title,
onBackClicked = { backStack.removeLastOrNull() },
) )
} }
} }
@@ -8,14 +8,18 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons 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.Pause
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Replay import androidx.compose.material.icons.filled.Replay
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@@ -34,6 +38,7 @@ import org.koin.compose.viewmodel.koinViewModel
@Composable @Composable
fun PlayerScreen( fun PlayerScreen(
recordTitle: String, recordTitle: String,
onBackClicked: () -> Unit,
viewModel: PlayerViewModel = koinViewModel(), viewModel: PlayerViewModel = koinViewModel(),
) { ) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle() val uiState by viewModel.uiState.collectAsStateWithLifecycle()
@@ -49,16 +54,33 @@ fun PlayerScreen(
recordTitle = recordTitle, recordTitle = recordTitle,
uiState = uiState, uiState = uiState,
onMainPlayActionButtonClicked = viewModel::performMainPlayAction, onMainPlayActionButtonClicked = viewModel::performMainPlayAction,
onBackClicked = onBackClicked,
) )
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun PlayerScreen( fun PlayerScreen(
recordTitle: String, recordTitle: String,
uiState: PlayerUiState, uiState: PlayerUiState,
onMainPlayActionButtonClicked: () -> Unit, onMainPlayActionButtonClicked: () -> Unit,
onBackClicked: () -> Unit,
) { ) {
Scaffold { innerPadding -> Scaffold(
topBar = {
TopAppBar(
title = {},
navigationIcon = {
IconButton(onClick = onBackClicked) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Back",
)
}
},
)
},
) { innerPadding ->
Box( Box(
modifier = Modifier modifier = Modifier
.padding(innerPadding) .padding(innerPadding)
@@ -111,6 +133,7 @@ private fun PlayerScreenPlayingPreview() {
recordTitle = "Demat", recordTitle = "Demat",
uiState = PlayerUiState(playbackState = PlaybackState.PLAYING), uiState = PlayerUiState(playbackState = PlaybackState.PLAYING),
onMainPlayActionButtonClicked = {}, onMainPlayActionButtonClicked = {},
onBackClicked = {},
) )
} }
} }
@@ -123,6 +146,7 @@ private fun PlayerScreenPausedPreview() {
recordTitle = "Demat", recordTitle = "Demat",
uiState = PlayerUiState(playbackState = PlaybackState.PAUSED), uiState = PlayerUiState(playbackState = PlaybackState.PAUSED),
onMainPlayActionButtonClicked = {}, onMainPlayActionButtonClicked = {},
onBackClicked = {},
) )
} }
} }
@@ -135,6 +159,7 @@ private fun PlayerScreenEndedPreview() {
recordTitle = "Demat", recordTitle = "Demat",
uiState = PlayerUiState(playbackState = PlaybackState.ENDED), uiState = PlayerUiState(playbackState = PlaybackState.ENDED),
onMainPlayActionButtonClicked = {}, onMainPlayActionButtonClicked = {},
onBackClicked = {},
) )
} }
} }