From e787ea4a19890d01bca2a2c1413634686fe1fd2e Mon Sep 17 00:00:00 2001
From: Taveon Nelson <74945303+457R0@users.noreply.github.com>
Date: Sat, 18 Apr 2026 17:19:34 -0500
Subject: [PATCH] Initial commit of VBHelper
---
.../github/nacabaro/vbhelper/MainActivity.kt | 25 +-
.../vbhelper/navigation/AppNavigation.kt | 3 +-
.../navigation/BottomNavigationBar.kt | 15 +-
.../scanScreen/ScanScreenControllerImpl.kt | 22 +-
.../screens/settingsScreen/CreditsScreen.kt | 2 +
.../screens/storageScreen/StorageDialog.kt | 52 +-
.../screens/storageScreen/StorageScreen.kt | 15 -
app/src/main/res/values/strings.xml | 14 +-
build/reports/problems/problems-report.html | 663 ++++++++++++++++++
9 files changed, 745 insertions(+), 66 deletions(-)
create mode 100644 build/reports/problems/problems-report.html
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...
+
+
+
+
+
+
+