Last minute bug related to sending the active character from the main screen.

This commit is contained in:
Nacho 2025-07-29 19:22:23 +02:00
parent ac05dfc541
commit 36c3e25fd3
2 changed files with 40 additions and 26 deletions

View File

@ -1,15 +1,23 @@
package com.github.nacabaro.vbhelper.navigation package com.github.nacabaro.vbhelper.navigation
import android.util.Log
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.screens.BattlesScreen import com.github.nacabaro.vbhelper.screens.BattlesScreen
import com.github.nacabaro.vbhelper.screens.DexScreen import com.github.nacabaro.vbhelper.screens.DexScreen
import com.github.nacabaro.vbhelper.screens.DiMScreen import com.github.nacabaro.vbhelper.screens.DiMScreen
@ -29,6 +37,7 @@ import com.github.nacabaro.vbhelper.screens.adventureScreen.AdventureScreenContr
import com.github.nacabaro.vbhelper.screens.settingsScreen.CreditsScreen import com.github.nacabaro.vbhelper.screens.settingsScreen.CreditsScreen
import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewerControllerImpl import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewerControllerImpl
import com.github.nacabaro.vbhelper.screens.storageScreen.StorageScreenControllerImpl import com.github.nacabaro.vbhelper.screens.storageScreen.StorageScreenControllerImpl
import com.github.nacabaro.vbhelper.source.StorageRepository
data class AppNavigationHandlers( data class AppNavigationHandlers(
val settingsScreenController: SettingsScreenControllerImpl, val settingsScreenController: SettingsScreenControllerImpl,
@ -86,12 +95,29 @@ fun AppNavigation(
} }
composable(NavigationItems.Scan.route) { composable(NavigationItems.Scan.route) {
val characterIdString = it.arguments?.getString("characterId") val characterIdString = it.arguments?.getString("characterId")
val characterId = characterIdString?.toLongOrNull() var characterId by remember { mutableStateOf(characterIdString?.toLongOrNull()) }
Log.d("ScanScreen", "characterId: $characterId")
val launchedFromHomeScreen = (characterIdString?.toLongOrNull() == null)
if (characterId == null) {
val context = LocalContext.current.applicationContext as VBHelper
val storageRepository = StorageRepository(context.container.db)
LaunchedEffect(characterId) {
if (characterId == null) {
val characterData = storageRepository.getActiveCharacter()
if (characterData != null) {
characterId = characterData.id
}
}
}
}
ScanScreen( ScanScreen(
navController = navController, navController = navController,
scanScreenController = applicationNavigationHandlers.scanScreenController, scanScreenController = applicationNavigationHandlers.scanScreenController,
characterId = characterId characterId = characterId,
launchedFromHomeScreen = launchedFromHomeScreen
) )
} }
composable(NavigationItems.Dex.route) { composable(NavigationItems.Dex.route) {

View File

@ -45,25 +45,14 @@ fun ScanScreen(
navController: NavController, navController: NavController,
characterId: Long?, characterId: Long?,
scanScreenController: ScanScreenController, scanScreenController: ScanScreenController,
launchedFromHomeScreen: Boolean
) { ) {
val secrets by scanScreenController.secretsFlow.collectAsState(null) val secrets by scanScreenController.secretsFlow.collectAsState(null)
var readingScreen by remember { mutableStateOf(false) }
var writingScreen by remember { mutableStateOf(false) }
var isDoneReadingCharacter by remember { mutableStateOf(false) }
var isDoneSendingCard by remember { mutableStateOf(false) }
var isDoneWritingCharacter by remember { mutableStateOf(false) }
val application = LocalContext.current.applicationContext as VBHelper val application = LocalContext.current.applicationContext as VBHelper
val storageRepository = StorageRepository(application.container.db) val storageRepository = StorageRepository(application.container.db)
var nfcCharacter by remember { mutableStateOf<NfcCharacter?>(null) } var nfcCharacter by remember { mutableStateOf<NfcCharacter?>(null) }
/*
This is in the case there is an active character,
that way active characters are quicker to send.
*/
var selectedCharacterId by remember { mutableStateOf<Long?>(null) }
selectedCharacterId = characterId
val context = LocalContext.current val context = LocalContext.current
LaunchedEffect(storageRepository) { LaunchedEffect(storageRepository) {
@ -75,19 +64,17 @@ fun ScanScreen(
an active character. an active character.
*/ */
if (characterId != null && nfcCharacter == null) { if (characterId != null && nfcCharacter == null) {
selectedCharacterId = characterId nfcCharacter = scanScreenController.characterToNfc(characterId)
nfcCharacter = scanScreenController.characterToNfc(selectedCharacterId!!)
}
else if (characterId == null && nfcCharacter == null) {
val activeCharacter = storageRepository.getActiveCharacter()
if (activeCharacter != null) {
selectedCharacterId = activeCharacter.id
nfcCharacter = scanScreenController.characterToNfc(selectedCharacterId!!)
}
} }
} }
} }
var readingScreen by remember { mutableStateOf(false) }
var writingScreen by remember { mutableStateOf(false) }
var isDoneReadingCharacter by remember { mutableStateOf(false) }
var isDoneSendingCard by remember { mutableStateOf(false) }
var isDoneWritingCharacter by remember { mutableStateOf(false) }
DisposableEffect(readingScreen) { DisposableEffect(readingScreen) {
if(readingScreen) { if(readingScreen) {
scanScreenController.registerActivityLifecycleListener( scanScreenController.registerActivityLifecycleListener(
@ -171,7 +158,7 @@ fun ScanScreen(
LaunchedEffect(storageRepository) { LaunchedEffect(storageRepository) {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
storageRepository storageRepository
.deleteCharacter(selectedCharacterId!!) .deleteCharacter(characterId!!)
} }
} }
} }
@ -197,7 +184,7 @@ fun ScanScreen(
} else { } else {
ChooseConnectOption( ChooseConnectOption(
onClickRead = when { onClickRead = when {
selectedCharacterId != null -> null !launchedFromHomeScreen -> null
else -> { else -> {
{ {
if(secrets == null) { if(secrets == null) {
@ -310,6 +297,7 @@ fun ScanScreenPreview() {
override fun characterFromNfc(nfcCharacter: NfcCharacter): String { return "" } override fun characterFromNfc(nfcCharacter: NfcCharacter): String { return "" }
override suspend fun characterToNfc(characterId: Long): NfcCharacter? { return null } override suspend fun characterToNfc(characterId: Long): NfcCharacter? { return null }
}, },
characterId = null characterId = null,
launchedFromHomeScreen = false
) )
} }