mirror of
https://github.com/nacabaro/vbhelper.git
synced 2026-01-28 00:15:32 +00:00
Added ability to scan mons
This commit is contained in:
parent
187ac970de
commit
d40758dc02
@ -10,16 +10,25 @@ import android.widget.Toast
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import com.github.nacabaro.vbhelper.navigation.AppNavigation
|
||||||
import com.github.cfogrady.vbnfc.CryptographicTransformer
|
import com.github.cfogrady.vbnfc.CryptographicTransformer
|
||||||
import com.github.cfogrady.vbnfc.TagCommunicator
|
import com.github.cfogrady.vbnfc.TagCommunicator
|
||||||
import com.github.cfogrady.vbnfc.data.DeviceType
|
import com.github.cfogrady.vbnfc.data.DeviceType
|
||||||
import com.github.nacabaro.vbhelper.navigation.AppNavigation
|
import com.github.cfogrady.vbnfc.data.NfcCharacter
|
||||||
import com.github.nacabaro.vbhelper.ui.theme.VBHelperTheme
|
import com.github.nacabaro.vbhelper.ui.theme.VBHelperTheme
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
private lateinit var nfcAdapter: NfcAdapter
|
private lateinit var nfcAdapter: NfcAdapter
|
||||||
private lateinit var deviceToCryptographicTransformers: Map<UShort, CryptographicTransformer>
|
private lateinit var deviceToCryptographicTransformers: Map<UShort, CryptographicTransformer>
|
||||||
|
|
||||||
|
private var nfcCharacter = MutableStateFlow<NfcCharacter?>(null)
|
||||||
|
|
||||||
// EXTRACTED DIRECTLY FROM EXAMPLE APP
|
// EXTRACTED DIRECTLY FROM EXAMPLE APP
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
deviceToCryptographicTransformers = getMapOfCryptographicTransformers()
|
deviceToCryptographicTransformers = getMapOfCryptographicTransformers()
|
||||||
@ -37,11 +46,27 @@ class MainActivity : ComponentActivity() {
|
|||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
setContent {
|
setContent {
|
||||||
VBHelperTheme {
|
VBHelperTheme {
|
||||||
AppNavigation()
|
MainApplication()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun MainApplication() {
|
||||||
|
var isDoneReadingCharacter by remember { mutableStateOf(false) }
|
||||||
|
AppNavigation(
|
||||||
|
isDoneReadingCharacter = isDoneReadingCharacter,
|
||||||
|
onClickRead = {
|
||||||
|
handleTag {
|
||||||
|
val character = it.receiveCharacter()
|
||||||
|
nfcCharacter.value = character
|
||||||
|
isDoneReadingCharacter = true
|
||||||
|
"Done reading character"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// EXTRACTED DIRECTLY FROM EXAMPLE APP
|
// EXTRACTED DIRECTLY FROM EXAMPLE APP
|
||||||
private fun getMapOfCryptographicTransformers(): Map<UShort, CryptographicTransformer> {
|
private fun getMapOfCryptographicTransformers(): Map<UShort, CryptographicTransformer> {
|
||||||
return mapOf(
|
return mapOf(
|
||||||
|
|||||||
@ -14,7 +14,10 @@ import com.github.nacabaro.vbhelper.screens.ScanScreen
|
|||||||
import com.github.nacabaro.vbhelper.screens.StorageScreen
|
import com.github.nacabaro.vbhelper.screens.StorageScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AppNavigation() {
|
fun AppNavigation(
|
||||||
|
onClickRead: () -> Unit,
|
||||||
|
isDoneReadingCharacter: Boolean
|
||||||
|
) {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
@ -38,7 +41,11 @@ fun AppNavigation() {
|
|||||||
StorageScreen()
|
StorageScreen()
|
||||||
}
|
}
|
||||||
composable(BottomNavItem.Scan.route) {
|
composable(BottomNavItem.Scan.route) {
|
||||||
ScanScreen()
|
ScanScreen(
|
||||||
|
navController = navController,
|
||||||
|
onClickRead = onClickRead,
|
||||||
|
isDoneReadingCharacter = isDoneReadingCharacter
|
||||||
|
)
|
||||||
}
|
}
|
||||||
composable(BottomNavItem.Dex.route) {
|
composable(BottomNavItem.Dex.route) {
|
||||||
DexScreen()
|
DexScreen()
|
||||||
|
|||||||
@ -10,15 +10,50 @@ import androidx.compose.material3.Button
|
|||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.github.nacabaro.vbhelper.components.TopBanner
|
import com.github.nacabaro.vbhelper.components.TopBanner
|
||||||
|
import com.github.nacabaro.vbhelper.navigation.BottomNavItem
|
||||||
|
import com.github.nacabaro.vbhelper.screens.scanScreen.ReadingCharacterScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ScanScreen() {
|
fun ScanScreen(
|
||||||
|
navController: NavController,
|
||||||
|
onClickRead: () -> Unit,
|
||||||
|
isDoneReadingCharacter: Boolean
|
||||||
|
) {
|
||||||
|
var readingScreen by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
if (isDoneReadingCharacter) {
|
||||||
|
readingScreen = false
|
||||||
|
navController.navigate(BottomNavItem.Home.route)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readingScreen) {
|
||||||
|
ReadingCharacterScreen { readingScreen = false }
|
||||||
|
} else {
|
||||||
|
ChooseConnectOption(
|
||||||
|
onClickRead = {
|
||||||
|
readingScreen = true
|
||||||
|
onClickRead()
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ChooseConnectOption(
|
||||||
|
onClickRead: () -> Unit,
|
||||||
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { TopBanner(text = "Scan a Vital Bracelet") }
|
topBar = { TopBanner(text = "Scan a Vital Bracelet") }
|
||||||
) { contentPadding ->
|
) { contentPadding ->
|
||||||
@ -31,7 +66,7 @@ fun ScanScreen() {
|
|||||||
) {
|
) {
|
||||||
ScanButton(
|
ScanButton(
|
||||||
text = "Vital Bracelet to App",
|
text = "Vital Bracelet to App",
|
||||||
onClick = {}
|
onClick = onClickRead
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
ScanButton(
|
ScanButton(
|
||||||
@ -42,6 +77,7 @@ fun ScanScreen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ScanButton(
|
fun ScanButton(
|
||||||
text: String,
|
text: String,
|
||||||
@ -64,5 +100,9 @@ fun ScanButton(
|
|||||||
@Preview(showBackground = true)
|
@Preview(showBackground = true)
|
||||||
@Composable
|
@Composable
|
||||||
fun ScanScreenPreview() {
|
fun ScanScreenPreview() {
|
||||||
ScanScreen()
|
ScanScreen(
|
||||||
|
navController = rememberNavController(),
|
||||||
|
onClickRead = { },
|
||||||
|
isDoneReadingCharacter = false
|
||||||
|
)
|
||||||
}
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package com.github.nacabaro.vbhelper.screens.scanScreen
|
||||||
|
|
||||||
|
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.material3.Button
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.github.nacabaro.vbhelper.components.TopBanner
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun ReadingCharacterScreen(
|
||||||
|
onClickCancel: () -> Unit,
|
||||||
|
) {
|
||||||
|
Scaffold (
|
||||||
|
topBar = {
|
||||||
|
TopBanner("Reading Character")
|
||||||
|
}
|
||||||
|
) { innerPadding ->
|
||||||
|
Column (
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
verticalArrangement = Arrangement.Center,
|
||||||
|
modifier = Modifier
|
||||||
|
.padding(innerPadding)
|
||||||
|
.fillMaxSize()
|
||||||
|
) {
|
||||||
|
Text("Place your Vital Bracelet near the reader...")
|
||||||
|
Button(
|
||||||
|
onClick = onClickCancel,
|
||||||
|
modifier = Modifier.padding(16.dp)
|
||||||
|
) {
|
||||||
|
Text("Cancel")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -69,8 +69,9 @@ class TagCommunicator(
|
|||||||
checksumCalculator.checkChecksums(decryptedCharacterData)
|
checksumCalculator.checkChecksums(decryptedCharacterData)
|
||||||
val nfcCharacter = translator.parseNfcCharacter(decryptedCharacterData)
|
val nfcCharacter = translator.parseNfcCharacter(decryptedCharacterData)
|
||||||
Log.i(TAG, "Known Character Stats: $nfcCharacter")
|
Log.i(TAG, "Known Character Stats: $nfcCharacter")
|
||||||
Log.i(TAG, "Signaling operation complete")
|
// Not ready to lose any of my mons in this...
|
||||||
nfcData.transceive(translator.getOperationCommandBytes(header, OPERATION_TRANSFERRED_TO_APP))
|
//Log.i(TAG, "Signaling operation complete")
|
||||||
|
//nfcData.transceive(translator.getOperationCommandBytes(header, OPERATION_TRANSFERRED_TO_APP))
|
||||||
return nfcCharacter
|
return nfcCharacter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user