From 7de7e3dfd2dc0b496571d8bc3d5fda7331272903 Mon Sep 17 00:00:00 2001 From: kaajjo Date: Wed, 11 Dec 2024 20:31:24 +0300 Subject: [PATCH] fix: ending a game does not stop timer (closes #119) * also fixes a potential crash and pause icon visibility --- .../com/kaajjo/libresudoku/data/database/dao/RecordDao.kt | 7 ++++--- .../main/java/com/kaajjo/libresudoku/ui/game/GameScreen.kt | 3 +-- .../java/com/kaajjo/libresudoku/ui/game/GameViewModel.kt | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/kaajjo/libresudoku/data/database/dao/RecordDao.kt b/app/src/main/java/com/kaajjo/libresudoku/data/database/dao/RecordDao.kt index 65f683db..601963b3 100644 --- a/app/src/main/java/com/kaajjo/libresudoku/data/database/dao/RecordDao.kt +++ b/app/src/main/java/com/kaajjo/libresudoku/data/database/dao/RecordDao.kt @@ -3,6 +3,7 @@ package com.kaajjo.libresudoku.data.database.dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query import com.kaajjo.libresudoku.core.qqwing.GameDifficulty import com.kaajjo.libresudoku.core.qqwing.GameType @@ -30,9 +31,9 @@ interface RecordDao { @Delete suspend fun delete(record: Record) - @Insert + @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(record: Record) - @Insert - suspend fun insert(recrods: List) + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insert(records: List) } \ No newline at end of file diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameScreen.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameScreen.kt index e3a93885..32569403 100644 --- a/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameScreen.kt +++ b/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameScreen.kt @@ -319,7 +319,7 @@ fun GameScreen( modifier = Modifier.align(Alignment.Center) ) { AnimatedVisibility( - visible = !viewModel.gamePlaying, + visible = !viewModel.gamePlaying && !viewModel.endGame, enter = expandVertically(clip = false) + fadeIn(), exit = shrinkVertically(clip = false) + fadeOut() ) { @@ -615,7 +615,6 @@ fun GameScreen( LaunchedEffect(viewModel.gameCompleted) { if (viewModel.gameCompleted) { - viewModel.endGame = true viewModel.onGameComplete() } } diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameViewModel.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameViewModel.kt index 36d2fa20..48dd8caf 100644 --- a/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameViewModel.kt +++ b/app/src/main/java/com/kaajjo/libresudoku/ui/game/GameViewModel.kt @@ -692,6 +692,9 @@ class GameViewModel @Inject constructor( fun onGameComplete() { if (endGame) return + + pauseTimer() + currCell = Cell(-1, -1, 0) viewModelScope.launch(Dispatchers.IO) { saveGame() recordRepository.insert( @@ -704,8 +707,7 @@ class GameViewModel @Inject constructor( ) ) } - pauseTimer() - currCell = Cell(-1, -1, 0) + endGame = true } fun getFontSize(type: GameType = gameType, factor: Int): TextUnit {