Compare commits

..
Author SHA1 Message Date
nacabaro c8e035aee1 Fixes 2026-06-24 21:28:22 +00:00
nacabaro 5787069761 Revert 457R0 work, merged wrong branch
Revert "Merge pull request #53 from 457R0/main"

This reverts commit 8aa31e819b, reversing
changes made to af27fc4933.
2026-06-22 14:55:12 +00:00
nacabaroandGitHub c67dc4bd02 Merge pull request #52 from shiki8826/main
Japanese Translation
2026-06-13 00:51:40 +02:00
nacabaroandGitHub 8aa31e819b Merge pull request #53 from 457R0/main
This should be the correct one without problem-report
2026-06-13 00:50:49 +02:00
shiki8826 bd8883e5d1 日本語翻訳追加 2026-06-09 23:11:30 +09:00
shiki8826 b094d6ccd3 日本語翻訳追加 2026-06-09 22:57:47 +09:00
Taveon Nelson 6c257b2080 HCE Savepoint
This is HCE before companion merge
2026-05-26 03:36:45 -05:00
Taveon Nelson 04ea584c4f Delete problems-report.html
removing useless files
2026-05-26 03:20:04 -05:00
Taveon Nelson 1a83527590 speeding up HCE 2026-05-18 17:28:24 -05:00
Taveon Nelson 431be5faea Battlescreen login loop fix 2026-05-18 05:46:40 -05:00
Taveon Nelson 9aa62f0d81 companion reup 2026-05-18 05:17:08 -05:00
Taveon Nelson 8fd4f6c414 VBH is the companion app now
Got tired of having to reinstall all three apps so i ported the companion apps features to vitalwear, now you only need VBH and Vitalwear.

I've also added emblems to items in icons so user isnt confused.
2026-05-18 04:57:57 -05:00
457R0 f829efae68 Overwrite with local version 2026-05-03 18:07:07 -05:00
Taveon Nelson 895b704c8d Make VBH-VW transfer DB owner via provider and shared transfer DAO 2026-04-21 18:57:38 -05:00
Taveon Nelson d40428ccfd Reduce duplicate HCE scans and suppress NFC redispatch 2026-04-21 15:00:14 -05:00
Taveon Nelson cd9a6d5d80 Add VitalWear HCE reader client 2026-04-21 14:41:06 -05:00
Taveon Nelson e0a086d9aa This patch enables transfer between vitalwear and VBH 2026-04-21 14:36:27 -05:00
Taveon Nelson e787ea4a19 Initial commit of VBHelper 2026-04-18 17:19:34 -05:00
Taveon Nelson 5273bae7b6 Update: changes and new files from local development 2026-04-18 07:24:06 -05:00
11 changed files with 2020 additions and 49 deletions
+2
View File
@@ -17,3 +17,5 @@ app/src/main/assets/battle_sprites
app/src/main/assets/extracted_audio app/src/main/assets/extracted_audio
API-ACR122USAM-2.01.pdf API-ACR122USAM-2.01.pdf
build/
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.compose)
id("com.google.devtools.ksp") version "2.3.0" id("com.google.devtools.ksp") version "2.3.2"
id("com.google.protobuf") id("com.google.protobuf")
} }
File diff suppressed because it is too large Load Diff
@@ -9,6 +9,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
@@ -88,15 +89,18 @@ fun ScanScreen(
} }
) )
} else { } else {
val secretsNotInitialized = stringResource(id = R.string.scan_secrets_not_initialized)
val secretsNotImported = stringResource(id = R.string.scan_secrets_not_imported)
ChooseConnectOption( ChooseConnectOption(
onClickRead = when { onClickRead = when {
!launchedFromHomeScreen -> null !launchedFromHomeScreen -> null
else -> { else -> {
{ {
if (secrets == null) { if (secrets == null) {
Toast.makeText(context, context.getString(R.string.scan_secrets_not_initialized), Toast.LENGTH_SHORT).show() Toast.makeText(context, secretsNotInitialized, Toast.LENGTH_SHORT).show()
} else if (secrets?.isMissingSecrets() == true) { } else if (secrets?.isMissingSecrets() == true) {
Toast.makeText(context, context.getString(R.string.scan_secrets_not_imported), Toast.LENGTH_SHORT).show() Toast.makeText(context, secretsNotImported, Toast.LENGTH_SHORT).show()
} else { } else {
readingScreen = true // kicks off nfc adapter in DisposableEffect readingScreen = true // kicks off nfc adapter in DisposableEffect
} }
@@ -108,9 +112,9 @@ fun ScanScreen(
else -> { else -> {
{ {
if (secrets == null) { if (secrets == null) {
Toast.makeText(context, context.getString(R.string.scan_secrets_not_initialized), Toast.LENGTH_SHORT).show() Toast.makeText(context, secretsNotInitialized, Toast.LENGTH_SHORT).show()
} else if (secrets?.isMissingSecrets() == true) { } else if (secrets?.isMissingSecrets() == true) {
Toast.makeText(context, context.getString(R.string.scan_secrets_not_imported), Toast.LENGTH_SHORT).show() Toast.makeText(context, secretsNotImported, Toast.LENGTH_SHORT).show()
} else { } else {
writingScreen = true // kicks off nfc adapter in DisposableEffect writingScreen = true // kicks off nfc adapter in DisposableEffect
} }
+146
View File
@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">VBHelper</string>
<string name="beta_warning_button_dismiss">閉じる</string>
<string name="nav_scan">スキャン</string>
<string name="nav_battle">バトル</string>
<string name="nav_home">ホーム</string>
<string name="nav_card_adventure">アドベンチャー</string>
<string name="nav_storage">ストレージ</string>
<string name="nav_settings">設定</string>
<string name="nav_viewer">閲覧</string>
<string name="nav_card">カード</string>
<string name="nav_items">アイテム</string>
<string name="nav_my_items">所持アイテム</string>
<string name="nav_items_store">ストア</string>
<string name="nav_apply_item">使用</string>
<string name="nav_adventure">アドベンチャー</string>
<string name="nav_credits">クレジット</string>
<string name="adventure_title">アドベンチャー</string>
<string name="adventure_empty_state">何もありません。</string>
<string name="home_title">VB Helper</string>
<string name="scan_secrets_not_imported">" APKの読み込みがされていません。設定から読み込をして下さい。 "</string>
<string name="scan_title">デバイスをスキャン</string>
<string name="scan_sent_dim_success">DIMの転送に成功しました。</string>
<string name="scan_nfc_must_be_enabled">NFC機能を有効にして下さい。</string>
<string name="settings_title">設定</string>
<string name="scan_missing_secrets">必要なデータが不足しています。設定を開き、Vital ArenaのAPKを読み込んでください。</string>
<string name="scan_sent_character_success">転送が成功しました。</string>
<string name="scan_error_generic">エラー</string>
<string name="settings_about_desc">このアプリについて</string>
<string name="settings_export_data_title">データベースの書き出し</string>
<string name="settings_export_data_desc">" データベースを書き出します。"</string>
<string name="settings_import_data_title">データベースの読み込み</string>
<string name="settings_import_data_desc">" データベースを読み込みます。"</string>
<string name="credits_title">クレジット</string>
<string name="battles_coming_soon">Coming soon</string>
<string name="cards_my_cards_title">カードリスト</string>
<string name="writing_character_action_title">キャラクター情報書き込み中</string>
<string name="items_title">アイテム</string>
<string name="items_no_items">アイテムはありません。</string>
<string name="items_store_credits">%1$d クレジット</string>
<string name="scan_vb_to_app">デバイスからアプリへ</string>
<string name="scan_app_to_vb">アプリからデバイスへ</string>
<string name="read_character_title">キャラクターを読み込みます。</string>
<string name="read_character_prepare_device">バイタルブレスを準備してください。</string>
<string name="read_character_go_to_connect">準備が出来たら転送を押してください。</string>
<string name="read_character_confirm">転送</string>
<string name="card_adventure_missions_title">アドベンチャーミッション</string>
<string name="card_entry_characters_obtained">%1$d / %2$d のキャラクターを取得しました。</string>
<string name="card_entry_edit">編集</string>
<string name="card_entry_delete">削除</string>
<string name="home_vbdim_current_phase_win">フェーズ勝率 %</string>
<string name="home_vbdim_special_missions">スペシャルミッション</string>
<string name="storage_delete_character">削除</string>
<string name="storage_close">閉じる</string>
<string name="storage_character_image_description">キャラクター画像</string>
<string name="storage_send_to_watch">転送</string>
<string name="storage_set_active">選択</string>
<string name="storage_send_on_adventure">アドベンチャーへ出発</string>
<string name="scan_no_nfc_on_device">NFC機能が見つかりません。</string>
<string name="scan_tag_not_vb">検出されたタグはバイタルブレスでは使用出来ません。</string>
<string name="settings_section_nfc">NFC</string>
<string name="settings_section_dim_bem">DiM / BEm</string>
<string name="settings_section_data">データ管理</string>
<string name="settings_import_apk_title">アプリの読み込み</string>
<string name="settings_import_apk_desc">" Vital Arena 2.1.0のAPKファイルを読み込みします。"</string>
<string name="settings_import_card_title">カードの読み込み</string>
<string name="settings_section_about">概要 / クレジット</string>
<string name="dex_chara_fusions_button">ジョグレス</string>
<string name="dex_chara_close_button">閉じる</string>
<string name="settings_import_card_desc">" Dim / BEm カードファイルを読み込みます。"</string>
<string name="settings_credits_title">クレジット</string>
<string name="settings_credits_desc">開発者について</string>
<string name="settings_about_title">概要</string>
<string name="beta_warning_message_main">" このアプリは現在アルファ版です。今後のアップデートにより保存されているデータの全てが削除される可能性がある為、大切なデータの保存はしないようにお願い致します。ご不便をおかけして申し訳ございません。 "</string>
<string name="beta_warning_message_compatibility">" このアプリはオリジナルのVBおよびVHで動作するようになりました。 "</string>
<string name="beta_warning_message_thanks">" ご理解とご協力に感謝いたします。\n 開発チーム一同"</string>
<string name="home_vbdim_vitals">バイタル</string>
<string name="home_adventure_mission_finished">" 1人のキャラクターがアドベンチャーミッションを完了しました。 "</string>
<string name="scan_secrets_not_initialized">" 初期化が出来ませんでした。もう一度試して下さい。 "</string>
<string name="home_special_mission_delete_main">現在の進捗状況が失われますが、本当にこのスペシャルミッションを削除しますか?</string>
<string name="home_special_mission_delete_dismiss">閉じる</string>
<string name="home_special_mission_delete_remove">削除</string>
<string name="item_dialog_use">アイテム使用</string>
<string name="item_dialog_purchase">購入</string>
<string name="item_dialog_cancel">キャンセル</string>
<string name="dex_chara_stage_attribute">Stg: %1$s, Atr: %2$s</string>
<string name="dex_chara_unknown_name">\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?\\?</string>
<string name="battles_online_title">オンラインバトル</string>
<string name="obtained_item_you_also_got_credits">%1$d クレジットを獲得しました。</string>
<string name="obtained_item_dismiss">閉じる</string>
<string name="nav_dex">図鑑</string>
<string name="action_place_near_reader">バイタルブレス本体を近くに置いて下さい。</string>
<string name="action_cancel">キャンセル</string>
<string name="card_view_discovered_characters">解放済みキャラクター</string>
<string name="dex_chara_icon_description">キャラクターアイコン</string>
<string name="dex_chara_name_icon_description">名前</string>
<string name="credits_section_reverse_engineering">リバースエンジニアリング</string>
<string name="credits_section_app_development">アプリケーション開発</string>
<string name="credits_cyanic_description">" ファームウェアの解析を行い、開発をサポートしてくれました。"</string>
<string name="credits_cfogrady_description">" vb-lib-nfc開発およびアプリの開発に協力して頂きました。"</string>
<string name="credits_nacabaro_description">" アプリの開発をしました。"</string>
<string name="credits_lightheel_description">" アプリのサーバー含む対戦機能を開発して頂きました。現在も開発を継続して頂いています。"</string>
<string name="credits_shvstrz_description">" アプリのアイコンデザインをして頂きました。"</string>
<string name="write_card_title">カード情報書き込み中</string>
<string name="write_card_icon_description">カードアイコン</string>
<string name="write_card_device_ready">デバイスの準備をして下さい。</string>
<string name="write_card_required_card">%1$s カードが必要です。</string>
<string name="write_card_confirm">転送</string>
<string name="write_character_success">" カードの読み込みが完了しました。"</string>
<string name="write_character_wait_ready">" デバイスの準備をしてから確認を押して下さい。"</string>
<string name="write_character_confirm">確認</string>
<string name="home_vbdim_trophies">トロフィー</string>
<string name="items_purchase_success">購入しました。</string>
<string name="obtained_item_you_have">%1$d 個入手しました。</string>
<string name="choose_character_title">キャラクターを選択</string>
<string name="choose_character_item_applied">アイテムを使用しました。</string>
<string name="item_dialog_costs_credits">%1$d クレジット</string>
<string name="dex_chara_stats">HP: %1$d, BP: %2$d, AP: %3$d</string>
<string name="dex_chara_stage_attribute_unknown">Stg: -, Atr: -</string>
<string name="dex_chara_stats_unknown">HP: -, BP: -, AP: -</string>
<string name="dex_chara_requirements">" Tr: %1$d; Bt: %2$d; Vr: %3$d; Wr: %4$d%%; Ct: %5$dh "</string>
<string name="dex_chara_adventure_level">AdvLvl %1$d</string>
<string name="storage_my_characters_title">キャラクターリスト</string>
<string name="storage_nothing_to_see_here">表示するデータはありません。</string>
<string name="storage_in_adventure_toast">このキャラクターは冒険中です。</string>
<string name="home_vbdim_next_timer">次のタイマー</string>
<string name="home_vbdim_total_battle_win">総勝率 %</string>
<string name="special_mission_none">ミッションが選択されていません。</string>
<string name="special_mission_steps">%1$d 歩</string>
<string name="write_character_title">キャラクター情報書き込み中</string>
<string name="write_character_icon_description">キャラクターアイコン</string>
<string name="items_not_enough_credits">クレジットが足りません。</string>
<string name="special_mission_vitals_progress">獲得バイタル値 %1$d</string>
<string name="special_mission_icon_content_description">スペシャルミッションアイコン</string>
<string name="reading_character_title">キャラクター情報読み込み中</string>
<string name="sending_card_title">カード情報送信中</string>
<string name="item_dialog_you_have_quantity">所持数: %1$d</string>
<string name="home_vbdim_mood">メンタル</string>
<string name="special_mission_battles">バトル %1$d 回</string>
<string name="special_mission_wins">勝利 %1$d 回</string>
<string name="special_mission_vitals">バイタル値 %1$d</string>
<string name="special_mission_steps_progress">歩数 %1$d 歩</string>
<string name="special_mission_battles_progress">バトル %1$d 回</string>
<string name="special_mission_wins_progress">勝利 %1$d 回</string>
</resources>
+3 -9
View File
@@ -49,9 +49,7 @@
<string name="scan_no_nfc_on_device">O dispositivo não possui NFC!</string> <string name="scan_no_nfc_on_device">O dispositivo não possui NFC!</string>
<string name="scan_tag_not_vb">A tag detectada não é do Vital Bracelet.</string> <string name="scan_tag_not_vb">A tag detectada não é do Vital Bracelet.</string>
<string name="scan_missing_secrets"> <string name="scan_missing_secrets">" Segredos ausentes. Vá em Configurações e importe o APK do Vital Arena. "</string>
Segredos ausentes. Vá em Configurações e importe o APK do Vital Arena.
</string>
<string name="scan_sent_character_success">Personagem enviado com sucesso!</string> <string name="scan_sent_character_success">Personagem enviado com sucesso!</string>
<string name="scan_error_generic">Ops!</string> <string name="scan_error_generic">Ops!</string>
<string name="scan_sent_dim_success">DIM enviado com sucesso!</string> <string name="scan_sent_dim_success">DIM enviado com sucesso!</string>
@@ -94,9 +92,7 @@
<string name="credits_section_reverse_engineering">Engenharia reversa</string> <string name="credits_section_reverse_engineering">Engenharia reversa</string>
<string name="credits_section_app_development">Desenvolvimento do aplicativo</string> <string name="credits_section_app_development">Desenvolvimento do aplicativo</string>
<string name="credits_cyanic_description"> <string name="credits_cyanic_description">" Reverteu o firmware e nos ajudou durante o desenvolvimento. "</string>
Reverteu o firmware e nos ajudou durante o desenvolvimento.
</string>
<string name="credits_cfogrady_description"> <string name="credits_cfogrady_description">
Desenvolveu vb-lib-nfc e parte deste aplicativo. Desenvolveu vb-lib-nfc e parte deste aplicativo.
</string> </string>
@@ -128,9 +124,7 @@
<string name="write_character_title">Escrevendo personagem</string> <string name="write_character_title">Escrevendo personagem</string>
<string name="write_character_icon_description">Ícone do personagem</string> <string name="write_character_icon_description">Ícone do personagem</string>
<string name="write_character_success"> <string name="write_character_success">" Cartão instalado com sucesso!! "</string>
Cartão instalado com sucesso!!
</string>
<string name="write_character_wait_ready"> <string name="write_character_wait_ready">
Aguarde até que seu dispositivo esteja pronto e então toque em Confirmar Aguarde até que seu dispositivo esteja pronto e então toque em Confirmar
</string> </string>
+5 -15
View File
@@ -36,13 +36,9 @@
<string name="adventure_empty_state">Nothing to see here</string> <string name="adventure_empty_state">Nothing to see here</string>
<string name="home_title">VB Helper</string> <string name="home_title">VB Helper</string>
<string name="home_adventure_mission_finished"> <string name="home_adventure_mission_finished">" One of your characters has finished their adventure mission! "</string>
One of your characters has finished their adventure mission!
</string>
<string name="scan_secrets_not_initialized"> <string name="scan_secrets_not_initialized">" Secrets is not yet initialized. Try again. "</string>
Secrets is not yet initialized. Try again.
</string>
<string name="scan_secrets_not_imported"> <string name="scan_secrets_not_imported">
Secrets not yet imported. Go to Settings and Import APK. Secrets not yet imported. Go to Settings and Import APK.
</string> </string>
@@ -53,9 +49,7 @@
<string name="scan_no_nfc_on_device">No NFC on device!</string> <string name="scan_no_nfc_on_device">No NFC on device!</string>
<string name="scan_tag_not_vb">Tag detected is not VB</string> <string name="scan_tag_not_vb">Tag detected is not VB</string>
<string name="scan_missing_secrets"> <string name="scan_missing_secrets">" Missing Secrets. Go to settings and import Vital Arena APK. "</string>
Missing Secrets. Go to settings and import Vital Arena APK.
</string>
<string name="scan_sent_character_success">Sent character successfully!</string> <string name="scan_sent_character_success">Sent character successfully!</string>
<string name="scan_error_generic">Whoops</string> <string name="scan_error_generic">Whoops</string>
<string name="scan_sent_dim_success">Sent DIM successfully!</string> <string name="scan_sent_dim_success">Sent DIM successfully!</string>
@@ -99,9 +93,7 @@
<string name="credits_section_reverse_engineering">Reverse engineering</string> <string name="credits_section_reverse_engineering">Reverse engineering</string>
<string name="credits_section_app_development">Application development</string> <string name="credits_section_app_development">Application development</string>
<string name="credits_cyanic_description"> <string name="credits_cyanic_description">" Reversed the firmware and helped us during development. "</string>
Reversed the firmware and helped us during development.
</string>
<string name="credits_cfogrady_description"> <string name="credits_cfogrady_description">
Developed vb-lib-nfc and part of this application. Developed vb-lib-nfc and part of this application.
</string> </string>
@@ -134,9 +126,7 @@
<string name="write_character_title">Writing character</string> <string name="write_character_title">Writing character</string>
<string name="write_character_icon_description">Character icon</string> <string name="write_character_icon_description">Character icon</string>
<string name="write_character_success"> <string name="write_character_success">" Card installed successfully!! "</string>
Card installed successfully!!
</string>
<string name="write_character_wait_ready"> <string name="write_character_wait_ready">
Wait until your device is ready, then tap Confirm Wait until your device is ready, then tap Confirm
</string> </string>
+10
View File
@@ -21,3 +21,13 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies, # resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library # thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
android.defaults.buildfeatures.resvalues=true
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.enableAppCompileTimeRClass=false
android.usesSdkInManifest.disallowed=false
android.uniquePackageNames=false
android.dependency.useConstraints=true
android.r8.strictFullModeForKeepRules=false
android.r8.optimizedResourceShrinking=false
android.builtInKotlin=false
android.newDsl=false
+12 -12
View File
@@ -1,19 +1,19 @@
[versions] [versions]
agp = "8.13.2" agp = "9.2.1"
datastore = "1.2.0" datastore = "1.2.1"
datastorePreferences = "1.2.0" datastorePreferences = "1.2.1"
kotlin = "2.3.0" kotlin = "2.4.0"
coreKtx = "1.17.0" coreKtx = "1.19.0"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.3.0" junitVersion = "1.3.0"
espressoCore = "3.7.0" espressoCore = "3.7.0"
lifecycleRuntimeKtx = "2.10.0" lifecycleRuntimeKtx = "2.11.0"
activityCompose = "1.12.2" activityCompose = "1.13.0"
composeBom = "2026.01.00" composeBom = "2026.06.00"
material = "1.13.0" material = "1.14.0"
navigationCompose = "2.9.6" navigationCompose = "2.9.8"
protobufGradlePlugin = "0.9.6" protobufGradlePlugin = "0.10.0"
protobufJavalite = "4.33.4" protobufJavalite = "4.35.1"
roomRuntime = "2.8.4" roomRuntime = "2.8.4"
vbNfcReader = "0.2.0-SNAPSHOT" vbNfcReader = "0.2.0-SNAPSHOT"
dimReader = "2.1.0" dimReader = "2.1.0"
+1 -1
View File
@@ -1,6 +1,6 @@
#Tue Dec 24 10:55:57 UTC 2024 #Tue Dec 24 10:55:57 UTC 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists