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 f211e9f..ba2f907 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 66dcfe1..a4f5491 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 f54b299..2e5865a 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 1113511..98f67cf 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 1f77db6..7f01c9f 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 fe29f8e..a38bf0b 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 1f27b23..4473d4d 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,