From cd8f1959af00fed585291c6ebb7d512fb4fa655a Mon Sep 17 00:00:00 2001 From: Fabian Zobrist Date: Fri, 27 Jan 2023 20:13:14 +0100 Subject: [PATCH] Simplify history page. Fix warnings. --- .../domain/GameWithScoresExtension.kt | 4 -- .../tichucounter/repository/GameRepository.kt | 6 +-- .../java/me/zobrist/tichucounter/ui/Color.kt | 2 + .../ui/composables/DropDownMenu.kt | 32 ++++++++++++++ .../ui/counter/CounterViewModel.kt | 12 +++--- .../tichucounter/ui/counter/KeyboardView.kt | 13 +++--- .../tichucounter/ui/history/HistoryView.kt | 43 +++++++++++++------ .../ui/history/HistoryViewModel.kt | 5 ++- .../tichucounter/ui/settings/SettingsView.kt | 23 +--------- app/src/main/res/values-de/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- 11 files changed, 86 insertions(+), 60 deletions(-) create mode 100644 app/src/main/java/me/zobrist/tichucounter/ui/composables/DropDownMenu.kt diff --git a/app/src/main/java/me/zobrist/tichucounter/domain/GameWithScoresExtension.kt b/app/src/main/java/me/zobrist/tichucounter/domain/GameWithScoresExtension.kt index b47834e..46154e7 100644 --- a/app/src/main/java/me/zobrist/tichucounter/domain/GameWithScoresExtension.kt +++ b/app/src/main/java/me/zobrist/tichucounter/domain/GameWithScoresExtension.kt @@ -1,10 +1,6 @@ package me.zobrist.tichucounter.domain import me.zobrist.tichucounter.data.GameWithScores - -class GameWithScoresExtension { -} - fun GameWithScores.getTotalPoints(): Pair { var scoreA = 0 var scoreB = 0 diff --git a/app/src/main/java/me/zobrist/tichucounter/repository/GameRepository.kt b/app/src/main/java/me/zobrist/tichucounter/repository/GameRepository.kt index e52893c..5716266 100644 --- a/app/src/main/java/me/zobrist/tichucounter/repository/GameRepository.kt +++ b/app/src/main/java/me/zobrist/tichucounter/repository/GameRepository.kt @@ -83,7 +83,7 @@ class GameRepository @Inject constructor( withContext(Dispatchers.IO) { val active = activeGame active.modified = Date() - val round = Round(active.uid!!, scoreA, scoreB) + val round = Round(active.uid, scoreA, scoreB) roundDao.insert(round) gameDao.update(active) } @@ -92,7 +92,7 @@ class GameRepository @Inject constructor( suspend fun deleteGame(uid: Long) { withContext(Dispatchers.IO) { try { - gameDao.getGameById(uid).take(1).collect() { + gameDao.getGameById(uid).take(1).collect { gameDao.delete(it) val rounds = roundDao.getAllForGame(it.uid) roundDao.delete(rounds) @@ -105,7 +105,7 @@ class GameRepository @Inject constructor( suspend fun deleteAllInactive() { withContext(Dispatchers.IO) { try { - gameDao.getAll().take(1).collect() { games -> + gameDao.getAll().take(1).collect { games -> val activeId = games.first { it.active }.uid val gamesToDelete = games.filter { !it.active } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/Color.kt b/app/src/main/java/me/zobrist/tichucounter/ui/Color.kt index ecc2897..4dea1c7 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/Color.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/Color.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package me.zobrist.tichucounter.ui import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/composables/DropDownMenu.kt b/app/src/main/java/me/zobrist/tichucounter/ui/composables/DropDownMenu.kt new file mode 100644 index 0000000..12a9700 --- /dev/null +++ b/app/src/main/java/me/zobrist/tichucounter/ui/composables/DropDownMenu.kt @@ -0,0 +1,32 @@ +package me.zobrist.tichucounter.ui.composables + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource + +@Composable +fun DropDownMenu(map: Map, selected: T, expanded: Boolean, onSelected: (T?) -> Unit) { + DropdownMenu( + expanded = expanded, + onDismissRequest = { onSelected(null) } + ) { + map.forEach { + DropdownMenuItem( + onClick = { + onSelected(it.key) + }, + trailingIcon = { + if (it.key == selected) { + Icon(Icons.Outlined.Check, null) + } + }, + text = { Text(stringResource(it.value)) }, + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt index cc8d3d1..e6ae019 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt @@ -46,7 +46,7 @@ interface IKeyBoardViewModel { } -interface ICounterViewModel: IKeyBoardViewModel { +interface ICounterViewModel : IKeyBoardViewModel { val roundScoreList: List val totalScoreA: Int val totalScoreB: Int @@ -156,9 +156,9 @@ class CounterViewModel @Inject constructor( } override fun focusLastInput() { - when(lastFocused){ - Focused.TEAM_A -> if(!isAFocused) requestFocusA.requestFocus() - Focused.TEAM_B -> if(!isBFocused) requestFocusB.requestFocus() + when (lastFocused) { + Focused.TEAM_A -> if (!isAFocused) requestFocusA.requestFocus() + Focused.TEAM_B -> if (!isBFocused) requestFocusB.requestFocus() } } @@ -261,14 +261,14 @@ class CounterViewModel @Inject constructor( override fun updateFocusStateA(state: Boolean) { isAFocused = state - if(state){ + if (state) { lastFocused = Focused.TEAM_A } } override fun updateFocusStateB(state: Boolean) { isBFocused = state - if(state){ + if (state) { lastFocused = Focused.TEAM_B } } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt index 600c62d..273cd8b 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt @@ -246,10 +246,9 @@ fun CenteredTextField( onFocusStateChanged: (FocusState) -> Unit ) { - val modifier = if(focusRequester != null) { + val modifier = if (focusRequester != null) { Modifier.focusRequester(focusRequester) - } else - { + } else { Modifier } @@ -258,7 +257,7 @@ fun CenteredTextField( value = value, onValueChange = { }, placeholder = { - if(!focused){ + if (!focused) { Text( placeholder, textAlign = TextAlign.Center, @@ -275,8 +274,7 @@ fun CenteredTextField( onFocusStateChanged(it) } ) - if(focused) - { + if (focused) { val cursorColor = MaterialTheme.colorScheme.onSurface val infiniteTransition = rememberInfiniteTransition() val alpha by infiniteTransition.animateFloat( @@ -295,7 +293,8 @@ fun CenteredTextField( .padding(start = 3.dp, top = 15.dp, bottom = 15.dp) .width(1.dp) .fillMaxHeight(), - color = cursorColor.copy(alpha = alpha)) + color = cursorColor.copy(alpha = alpha) + ) } } } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryView.kt index 14dc030..b110bf5 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryView.kt @@ -1,14 +1,14 @@ package me.zobrist.tichucounter.ui.history +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Delete -import androidx.compose.material.icons.outlined.OpenInFull +import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.* -import androidx.compose.runtime.Composable +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -19,6 +19,7 @@ import me.zobrist.tichucounter.data.GameWithScores import me.zobrist.tichucounter.data.entity.Game import me.zobrist.tichucounter.data.entity.Round import me.zobrist.tichucounter.domain.getTotalPoints +import me.zobrist.tichucounter.ui.composables.DropDownMenu import java.text.DateFormat import java.util.* @@ -103,7 +104,8 @@ fun HistoryListItem( Card( modifier = Modifier .fillMaxWidth() - .padding(all = 4.dp), + .padding(all = 4.dp) + .clickable { onOpenClicked(game.game.uid) }, colors = cardColor ) { Row( @@ -130,16 +132,33 @@ fun HistoryListItem( Column( Modifier .wrapContentSize() - .width(70.dp) + .width(40.dp) ) { - ElevatedButton(onClick = { onOpenClicked(game.game.uid) }, enabled = true) { - Icon(Icons.Outlined.OpenInFull, null) - } - ElevatedButton( - onClick = { onDeleteClicked(game.game.uid) }, enabled = !game.game.active - ) { - Icon(Icons.Outlined.Delete, null) + if (!game.game.active) { + var expanded by remember { mutableStateOf(false) } + + Icon( + modifier = Modifier + .padding(start = 20.dp, bottom = 20.dp) + .clickable { expanded = true }, + imageVector = Icons.Outlined.MoreVert, + contentDescription = null + ) + + + DropDownMenu( + mapOf("delete" to R.string.delete), + "", + expanded, + ) { + expanded = false + it?.let { + when (it) { + "delete" -> onDeleteClicked(game.game.uid) + } + } + } } } } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryViewModel.kt b/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryViewModel.kt index 55c9555..5f57b21 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryViewModel.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/history/HistoryViewModel.kt @@ -23,8 +23,9 @@ class HistoryViewModel @Inject constructor( init { viewModelScope.launch { - gameRepository.getAllWithRoundFlow().collect() { games -> - gameAndHistory = games + gameRepository.getAllWithRoundFlow().collect { games -> + gameAndHistory = + games.sortedBy { it.game.modified }.sortedBy { it.game.active }.reversed() } } } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/settings/SettingsView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/settings/SettingsView.kt index 28d5d3e..5df492a 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/settings/SettingsView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/settings/SettingsView.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowDropDown -import androidx.compose.material.icons.outlined.Check import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment.Companion.End @@ -22,6 +21,7 @@ import me.zobrist.tichucounter.domain.KeepScreenOn import me.zobrist.tichucounter.domain.Language import me.zobrist.tichucounter.domain.Theme import me.zobrist.tichucounter.ui.AppTheme +import me.zobrist.tichucounter.ui.composables.DropDownMenu val languageMap = mapOf( @@ -146,27 +146,6 @@ fun StringSetting(name: String, map: Map, selected: T, onSelected: ( } } -@Composable -fun DropDownMenu(map: Map, selected: T, expanded: Boolean, onSelected: (T?) -> Unit) { - DropdownMenu( - expanded = expanded, - onDismissRequest = { onSelected(null) } - ) { - map.forEach { - DropdownMenuItem( - onClick = { - onSelected(it.key) - }, - trailingIcon = { - if (it.key == selected) { - Icon(Icons.Outlined.Check, null) - } - }, - text = { Text(stringResource(it.value)) }, - ) - } - } -} @Preview(name = "Light Mode") @Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 05711ba..5a3e327 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -13,11 +13,10 @@ Ein Aus Neues Spiel - "Erstellt: %s " - Bearbeitet: %s Verlauf löschen Wirklich den gesamten Verlauf löschen? Diese Aktion kann nicht rückgängig gemacht werden. Abbrechen Ok + Löschen \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f8b7bbc..4e7cd38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,10 +16,9 @@ On Off New Game - Created: %s - Modified: %s Delete history You really want to delete the the history? This action can\'t be undone. Cancel Ok + Delete \ No newline at end of file