From e17f6c23e43f4f27bfb2ea1c49e2218695e5da7b Mon Sep 17 00:00:00 2001 From: Nacho Date: Sun, 26 Jan 2025 01:40:32 +0100 Subject: [PATCH] Renaming terms and other bits and bobs - Changed adventure database so that the original intended time is also stored with the final time. This will come useful once the algorithm for determining which object to give is made. --- .../nacabaro/vbhelper/daos/AdventureDao.kt | 9 +-- .../vbhelper/domain/characters/Adventure.kt | 1 + .../nacabaro/vbhelper/dtos/CharacterDtos.kt | 3 +- .../adventureScreen/AdventureScreen.kt | 61 ++++++++++++------- .../AdventureScreenControllerImpl.kt | 4 +- .../homeScreens/HomeScreenControllerImpl.kt | 2 +- .../StorageScreenControllerImpl.kt | 5 +- 7 files changed, 54 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt index f211e9f906527b0254d7b72010e98d47aaa9afe9..ba2f907c02ca4463c2556cde149a34d61b6845af 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt @@ -8,10 +8,10 @@ import com.github.nacabaro.vbhelper.dtos.CharacterDtos @Dao interface AdventureDao { @Query(""" - INSERT INTO Adventure (characterId, finishesAdventure) - VALUES (:characterId, strftime('%s', 'now') + :timeInSeconds) + INSERT INTO Adventure (characterId, originalDuration, finishesAdventure) + VALUES (:characterId, :originalDuration, strftime('%s', 'now') + :timeInSeconds) """) - fun insertNewAdventure(characterId: Long, timeInSeconds: Long) + fun insertNewAdventure(characterId: Long, originalDuration: Long, timeInSeconds: Long) @Query(""" SELECT COUNT(*) FROM Adventure @@ -25,7 +25,8 @@ interface AdventureDao { c.spritesWidth AS spriteWidth, c.spritesHeight AS spriteHeight, d.isBEm as isBemCard, - a.finishesAdventure AS timeLeft + a.finishesAdventure AS finishesAdventure, + a.originalDuration AS originalTimeInMinutes FROM UserCharacter uc JOIN Character c ON uc.charId = c.id JOIN Card d ON c.dimId = d.id diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Adventure.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Adventure.kt index 66dcfe143d20cbf17bb7997b6ec09b06c0111521..a4f54915c037b5c836ce16ff417dc92f77da242c 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Adventure.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Adventure.kt @@ -17,5 +17,6 @@ import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter ) data class Adventure( @PrimaryKey val characterId: Long, + val originalDuration: Long, val finishesAdventure: Long ) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt index f54b2991047448732ee7ce7b8d44c0fdf16d996d..2e5865aad102f4d2d223405511e18b8f2bd3c722 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt @@ -79,6 +79,7 @@ object CharacterDtos { val spriteWidth: Int, val spriteHeight: Int, val isBemCard: Boolean, - val timeLeft: Long + val finishesAdventure: Long, + val originalTimeInMinutes: Long ) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreen.kt index 1113511783bfd25ec5e839e8d41a2ad3523992a1..98f67cf46b1f62a72acefcdd369897c791da3c1a 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreen.kt @@ -1,9 +1,13 @@ package com.github.nacabaro.vbhelper.screens.adventureScreen +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -12,6 +16,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavController @@ -71,29 +76,41 @@ fun AdventureScreen( ) } ) { contentPadding -> - LazyColumn( - modifier = Modifier - .padding(top = contentPadding.calculateTopPadding()) - ) { - items(characterList.value) { - AdventureEntry( - icon = BitmapData( - bitmap = it.spriteIdle, - width = it.spriteWidth, - height = it.spriteHeight - ), - timeLeft = it.timeLeft - currentTime, - onClick = { - if (it.timeLeft < currentTime) { - storageScreenController - .getItemFromAdventure(it.id) { adventureResult -> - obtainedItem = adventureResult - } - } else { - cancelAdventureDialog = it + if (characterList.value.isEmpty()) { + Column( + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .padding(top = contentPadding.calculateTopPadding()) + .fillMaxSize() + ) { + Text(text = "Nothing to see here") + } + } else { + LazyColumn( + modifier = Modifier + .padding(top = contentPadding.calculateTopPadding()) + ) { + items(characterList.value) { + AdventureEntry( + icon = BitmapData( + bitmap = it.spriteIdle, + width = it.spriteWidth, + height = it.spriteHeight + ), + timeLeft = it.finishesAdventure - currentTime, + onClick = { + if (it.finishesAdventure < currentTime) { + storageScreenController + .getItemFromAdventure(it.id) { adventureResult -> + obtainedItem = adventureResult + } + } else { + cancelAdventureDialog = it + } } - } - ) + ) + } } } } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt index 1f77db66364854b84c90a81dc32a62b5d54c9d0d..7f01c9f27a8d756b8fe23f3069c8a2b9f408860f 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt @@ -17,7 +17,7 @@ class AdventureScreenControllerImpl( private val database = application.container.db override fun sendCharacterToAdventure(characterId: Long, timeInMinutes: Long) { - val timeInSeconds = timeInMinutes * 60 + val finishesAdventureAt = timeInMinutes * 60 componentActivity.lifecycleScope.launch(Dispatchers.IO) { val characterData = database .userCharacterDao() @@ -31,7 +31,7 @@ class AdventureScreenControllerImpl( database .adventureDao() - .insertNewAdventure(characterId, timeInSeconds) + .insertNewAdventure(characterId, timeInMinutes, finishesAdventureAt) } } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt index fe29f8e26e4df676d26bebd9a04e93422658c9fb..a38bf0b3436ace6f04393bb8ea6246f413173225 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt @@ -20,7 +20,7 @@ class HomeScreenControllerImpl( .getAdventureCharacters() val finishedAdventureCharacters = adventureCharacters.filter { character -> - character.timeLeft <= currentTime + character.finishesAdventure <= currentTime } onCompletion(finishedAdventureCharacters.isNotEmpty()) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreenControllerImpl.kt index 1f27b230c10e01f04f6fb28ccac4fefa76fcf08f..4473d4d40df6482f971aaf43686906affd6af9ca 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreenControllerImpl.kt @@ -4,6 +4,7 @@ import android.widget.Toast import androidx.activity.ComponentActivity import androidx.lifecycle.lifecycleScope import com.github.nacabaro.vbhelper.di.VBHelper +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class StorageScreenControllerImpl( @@ -13,8 +14,10 @@ class StorageScreenControllerImpl( private val database = application.container.db override fun setActive(characterId: Long, onCompletion: () -> Unit) { - componentActivity.lifecycleScope.launch { + componentActivity.lifecycleScope.launch(Dispatchers.IO) { + database.userCharacterDao().clearActiveCharacter() database.userCharacterDao().setActiveCharacter(characterId) + componentActivity.runOnUiThread { Toast.makeText( componentActivity,