From 48374c5980dafde4d89d3b4c3a00daed347d9576 Mon Sep 17 00:00:00 2001 From: Fabian Zobrist Date: Sat, 28 Jan 2023 00:18:26 +0100 Subject: [PATCH] Move new game back to app bar. --- .../me/zobrist/tichucounter/MainActivity.kt | 57 +++++++++---------- .../tichucounter/domain/TopBarAction.kt | 3 +- .../zobrist/tichucounter/ui/MainViewModel.kt | 6 ++ .../java/me/zobrist/tichucounter/ui/TopBar.kt | 1 + 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt index b9d39c2..ca1a9d1 100644 --- a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt +++ b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt @@ -33,6 +33,7 @@ import me.zobrist.tichucounter.repository.GameRepository import me.zobrist.tichucounter.ui.AppTheme import me.zobrist.tichucounter.ui.MainViewModel import me.zobrist.tichucounter.ui.TopBar +import me.zobrist.tichucounter.ui.composables.DropDownMenu import me.zobrist.tichucounter.ui.counter.* import me.zobrist.tichucounter.ui.history.HistoryList import me.zobrist.tichucounter.ui.history.HistoryViewModel @@ -126,24 +127,45 @@ class MainActivity : AppCompatActivity(), ISettingsChangeListener { { topBarNavigationAction.action() }, topBarActions ) - }) { + }) { paddings -> NavHost( navController = navController, startDestination = "counter", - modifier = Modifier.padding(it) + modifier = Modifier.padding(paddings) ) { composable("counter") { + + var expanded by remember { mutableStateOf(false) } + Counter(counterViewModel) topBarActions = (listOf( TopBarAction( Icons.Outlined.Undo, - mainViewModel.isUndoActionActive - ) { mainViewModel.undoLastRound() }, + mainViewModel.isUndoActionActive, + { mainViewModel.undoLastRound() }), TopBarAction( Icons.Outlined.Redo, - mainViewModel.isRedoActionActive - ) { mainViewModel.redoLastRound() } + mainViewModel.isRedoActionActive, + { mainViewModel.redoLastRound() }), + TopBarAction( + Icons.Outlined.MoreVert, + mainViewModel.activeGameHasRounds, + { expanded = true } + ) { + DropDownMenu( + mapOf("new" to R.string.newGame), + "", + expanded, + ) { + expanded = false + it?.let { + when (it) { + "new" -> mainViewModel.newGame() + } + } + } + }, )) topBarIcon = Icons.Outlined.Menu @@ -198,29 +220,6 @@ class MainActivity : AppCompatActivity(), ISettingsChangeListener { Spacer(Modifier.height(20.dp)) - NavigationDrawerItem( - icon = { Icon(Icons.Outlined.RestartAlt, contentDescription = null) }, - colors = NavigationDrawerItemDefaults.colors( - unselectedContainerColor = MaterialTheme.colorScheme.primaryContainer - ), - label = { Text(stringResource(R.string.newGame)) }, - selected = false, - onClick = { - scope.launch { drawerState.close() } - mainViewModel.newGame() - navController.navigate("counter") { - popUpTo(navController.graph.findStartDestination().id) { - saveState = true - } - launchSingleTop = true - restoreState = true - } - }, - modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding) - ) - - Divider(Modifier.padding(top = 20.dp, bottom = 20.dp)) - items.forEach { screen -> NavigationDrawerItem( icon = { Icon(screen.icon, contentDescription = null) }, diff --git a/app/src/main/java/me/zobrist/tichucounter/domain/TopBarAction.kt b/app/src/main/java/me/zobrist/tichucounter/domain/TopBarAction.kt index 02ce8c4..4820f71 100644 --- a/app/src/main/java/me/zobrist/tichucounter/domain/TopBarAction.kt +++ b/app/src/main/java/me/zobrist/tichucounter/domain/TopBarAction.kt @@ -1,5 +1,6 @@ package me.zobrist.tichucounter.domain +import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.vector.ImageVector -class TopBarAction(val imageVector: ImageVector, val isActive: Boolean, val action: () -> Unit) \ No newline at end of file +class TopBarAction(val imageVector: ImageVector, val isActive: Boolean, val action: () -> Unit, val composeCode: @Composable () -> Unit = {}) \ No newline at end of file diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/MainViewModel.kt b/app/src/main/java/me/zobrist/tichucounter/ui/MainViewModel.kt index f8a9b91..53fde44 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/MainViewModel.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/MainViewModel.kt @@ -17,6 +17,7 @@ class MainViewModel @Inject constructor( private val gameRepository: GameRepository ) : ViewModel() { + private var redoRounds = mutableStateListOf() private var expectedRoundCount = 0 @@ -25,11 +26,16 @@ class MainViewModel @Inject constructor( val isRedoActionActive: Boolean get() = redoRounds.isNotEmpty() + var activeGameHasRounds by mutableStateOf(false) + private set + init { viewModelScope.launch { gameRepository.getActiveGameFlow().collect { + activeGameHasRounds = it?.rounds?.isNotEmpty() == true + if (it != null) { isUndoActionActive = it.rounds.isNotEmpty() diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/TopBar.kt b/app/src/main/java/me/zobrist/tichucounter/ui/TopBar.kt index 2a8a473..ecfcb4e 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/TopBar.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/TopBar.kt @@ -37,6 +37,7 @@ fun TopBar( imageVector = it.imageVector, contentDescription = null, ) + it.composeCode() } } }