diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt b/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt index fc13bae..9d178a1 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt @@ -30,6 +30,7 @@ import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { private val onActivityLifecycleListeners = HashMap() + private var initialRoute: String? = null private fun registerActivityLifecycleListener(key: String, activityLifecycleListener: ActivityLifecycleListener) { if( onActivityLifecycleListeners[key] != null) { @@ -62,6 +63,8 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() + initialRoute = getInitialRouteFromIntent(intent) + setContent { VBHelperTheme { MainApplication( @@ -72,7 +75,8 @@ class MainActivity : ComponentActivity() { homeScreenController = homeScreenController, storageScreenController = storageScreenController, spriteViewerController = spriteViewerController, - cardScreenController = cardScreenController + cardScreenController = cardScreenController, + initialRoute = initialRoute ) } } @@ -100,6 +104,8 @@ class MainActivity : ComponentActivity() { override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) + initialRoute = getInitialRouteFromIntent(intent) + // Optionally, you may want to trigger navigation here if needed handleImportIntent(intent) } @@ -149,6 +155,17 @@ class MainActivity : ComponentActivity() { } } + private fun getInitialRouteFromIntent(intent: Intent?): String? { + if (intent == null) return null + val data = intent.data + if (intent.action == Intent.ACTION_VIEW && data != null) { + if (data.scheme == "vbhelper" && data.host == "auth") { + return "Battle" + } + } + return null + } + @Composable private fun MainApplication( scanScreenController: ScanScreenControllerImpl, @@ -158,7 +175,8 @@ class MainActivity : ComponentActivity() { storageScreenController: StorageScreenControllerImpl, homeScreenController: HomeScreenControllerImpl, spriteViewerController: SpriteViewerControllerImpl, - cardScreenController: CardScreenControllerImpl + cardScreenController: CardScreenControllerImpl, + initialRoute: String? = null ) { AppNavigation( applicationNavigationHandlers = AppNavigationHandlers( @@ -170,7 +188,8 @@ class MainActivity : ComponentActivity() { homeScreenController, spriteViewerController, cardScreenController - ) + ), + initialRoute = initialRoute ) } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt index 7d207b2..86b474d 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt @@ -54,6 +54,7 @@ data class AppNavigationHandlers( @Composable fun AppNavigation( applicationNavigationHandlers: AppNavigationHandlers, + initialRoute: String? = null ) { val navController = rememberNavController() @@ -64,7 +65,7 @@ fun AppNavigation( ) { contentPadding -> NavHost( navController = navController, - startDestination = NavigationItems.Home.route, + startDestination = initialRoute ?: NavigationItems.Home.route, enterTransition = { fadeIn( animationSpec = tween(200) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt index 96f4275..16e6728 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt @@ -30,10 +30,17 @@ fun BottomNavigationBar(navController: NavController) { label = { Text(text = stringResource(item.label)) }, selected = currentRoute == item.route, onClick = { - navController.navigate(item.route) { - popUpTo(navController.graph.startDestinationId) { saveState = true } - launchSingleTop = true - restoreState = true + if (item == NavigationItems.Home) { + navController.navigate(NavigationItems.Home.route) { + popUpTo(0) { inclusive = false } + launchSingleTop = true + } + } else { + navController.navigate(item.route) { + popUpTo(navController.graph.startDestinationId) { saveState = true } + launchSingleTop = true + restoreState = true + } } } ) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt index 487ab2d..eb52382 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt @@ -47,14 +47,22 @@ class ScanScreenControllerImpl( override fun onClickRead(secrets: Secrets, onComplete: ()->Unit, onMultipleCards: (List) -> Unit) { handleTag(secrets) { tagCommunicator -> - val character = tagCommunicator.receiveCharacter() - val resultMessage = characterFromNfc(character) { cards, nfcCharacter -> - lastScannedCharacter = nfcCharacter - onMultipleCards(cards) - + try { + val character = tagCommunicator.receiveCharacter() + val resultMessage = characterFromNfc(character) { cards, nfcCharacter -> + lastScannedCharacter = nfcCharacter + onMultipleCards(cards) + } + onComplete.invoke() + resultMessage + } catch (e: Exception) { + Log.e("NFC_READ", "Error reading character from NFC", e) + componentActivity.runOnUiThread { + Toast.makeText(componentActivity, componentActivity.getString(R.string.scan_error_generic) + ": " + (e.message ?: e.javaClass.simpleName), Toast.LENGTH_LONG).show() + } + onComplete.invoke() + componentActivity.getString(R.string.scan_error_generic) } - onComplete.invoke() - resultMessage } } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt index ad09456..8350a90 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt @@ -38,6 +38,8 @@ fun CreditsScreen( SettingsEntry(title = "nacabaro", description = stringResource(R.string.credits_nacabaro_description)) { } SettingsEntry(title = "lightheel", description = stringResource(R.string.credits_lightheel_description)) { } SettingsEntry(title = "shvstrz", description = stringResource(R.string.credits_shvstrz_description)) { } + + SettingsEntry(title = "redeyez", description = stringResource(R.string.credits_RedEyez_description)) { } } } } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt index 979f47d..ec0173d 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt @@ -43,7 +43,6 @@ fun StorageDialog( onDismissRequest: () -> Unit, onClickDelete: () -> Unit, onSendToBracelet: () -> Unit, - onSendToVitalWear: () -> Unit, onClickSetActive: () -> Unit, onClickSendToAdventure: (time: Long) -> Unit ) { @@ -115,35 +114,28 @@ fun StorageDialog( ) } } - Row( - horizontalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxWidth() - ) { - Button( - onClick = onSendToBracelet, - modifier = Modifier - .weight(1f) - ) { - Text(text = stringResource(R.string.storage_send_to_watch)) - } - Spacer( - modifier = Modifier - .padding(4.dp) - ) - Button( - onClick = onClickSetActive, - ) { - Text(text = stringResource(R.string.storage_set_active)) - } - } - Button( - onClick = onSendToVitalWear, - modifier = Modifier - .fillMaxWidth() - ) { - Text(text = stringResource(R.string.storage_send_to_vitalwear)) - } + Row( + horizontalArrangement = Arrangement.Center, + modifier = Modifier + .fillMaxWidth() + ) { + Button( + onClick = onSendToBracelet, + modifier = Modifier + .weight(1f) + ) { + Text(text = stringResource(R.string.storage_send_to_watch)) + } + Spacer( + modifier = Modifier + .padding(4.dp) + ) + Button( + onClick = onClickSetActive, + ) { + Text(text = stringResource(R.string.storage_set_active)) + } + } Button( onClick = { onSendToAdventureClicked = true diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt index e5e770d..cc9d3d0 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt @@ -137,21 +137,6 @@ fun StorageScreen( ) ) }, - onSendToVitalWear = { - try { - val intent = VitalWearCharacterExporter(application, application.container.db) - .buildShareIntent(selectedCharacter!!) - .addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK) - application.startActivity(intent) - selectedCharacter = null - } catch (e: Exception) { - Toast.makeText( - application, - "Could not send character to VitalWear: ${e.message}", - Toast.LENGTH_LONG - ).show() - } - }, onClickSendToAdventure = { time -> adventureScreenController .sendCharacterToAdventure( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 886fb53..e5221ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,8 +48,8 @@ Scan a Vital Bracelet - Vital Bracelet to App (Receive Digimon from Bandai Toys: Vital Bracelet, Vital Hero, BE Bracelet) - App to Vital Bracelet (Send Digimon from VBHelper to Bandai Toys: Vital Bracelet, Vital Hero, BE Bracelet) + Watch to VBH + VBH to Watch No NFC on device! Tag detected is not VB @@ -71,12 +71,12 @@ Import APK - Import Secrets From Vital Arena 2.1.0 APK + Import Secrets From Vital Arena APK Import card - Import DiM/BEm card file + Import DiM/BEm Credits @@ -114,7 +114,9 @@ Designing the app icon in SVG. - + + Devout Debugger. + Place your Vital Bracelet near the reader... Cancel @@ -194,7 +196,7 @@ Delete card My characters - Nothing to see here + Storage is Empty This character is in an adventure Character image diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html new file mode 100644 index 0000000..9288671 --- /dev/null +++ b/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + +