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 e097b1a..7f947a0 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt @@ -10,16 +10,25 @@ import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent 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.TagCommunicator 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 kotlinx.coroutines.flow.MutableStateFlow class MainActivity : ComponentActivity() { private lateinit var nfcAdapter: NfcAdapter private lateinit var deviceToCryptographicTransformers: Map + private var nfcCharacter = MutableStateFlow(null) + // EXTRACTED DIRECTLY FROM EXAMPLE APP override fun onCreate(savedInstanceState: Bundle?) { deviceToCryptographicTransformers = getMapOfCryptographicTransformers() @@ -37,11 +46,27 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { 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 private fun getMapOfCryptographicTransformers(): Map { return mapOf( 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 cd2f9cc..b0b273d 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 @@ -14,7 +14,10 @@ import com.github.nacabaro.vbhelper.screens.ScanScreen import com.github.nacabaro.vbhelper.screens.StorageScreen @Composable -fun AppNavigation() { +fun AppNavigation( + onClickRead: () -> Unit, + isDoneReadingCharacter: Boolean +) { val navController = rememberNavController() Scaffold( @@ -38,7 +41,11 @@ fun AppNavigation() { StorageScreen() } composable(BottomNavItem.Scan.route) { - ScanScreen() + ScanScreen( + navController = navController, + onClickRead = onClickRead, + isDoneReadingCharacter = isDoneReadingCharacter + ) } composable(BottomNavItem.Dex.route) { DexScreen() diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt index 0f1d69b..98f5bba 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt @@ -10,17 +10,52 @@ import androidx.compose.material3.Button import androidx.compose.material3.Scaffold import androidx.compose.material3.Text 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.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp 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.navigation.BottomNavItem +import com.github.nacabaro.vbhelper.screens.scanScreen.ReadingCharacterScreen @Composable -fun ScanScreen() { - Scaffold ( - topBar = { TopBanner(text = "Scan a Vital Bracelet") } +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( + topBar = { TopBanner(text = "Scan a Vital Bracelet") } ) { contentPadding -> Column( verticalArrangement = Arrangement.Center, @@ -31,7 +66,7 @@ fun ScanScreen() { ) { ScanButton( text = "Vital Bracelet to App", - onClick = {} + onClick = onClickRead ) Spacer(modifier = Modifier.height(16.dp)) ScanButton( @@ -42,6 +77,7 @@ fun ScanScreen() { } } + @Composable fun ScanButton( text: String, @@ -64,5 +100,9 @@ fun ScanButton( @Preview(showBackground = true) @Composable fun ScanScreenPreview() { - ScanScreen() + ScanScreen( + navController = rememberNavController(), + onClickRead = { }, + isDoneReadingCharacter = false + ) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ReadingCharacter.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ReadingCharacter.kt new file mode 100644 index 0000000..9c7a2dc --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ReadingCharacter.kt @@ -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") + } + } + } +} \ No newline at end of file diff --git a/vb-nfc-reader/src/main/java/com/github/cfogrady/vbnfc/TagCommunicator.kt b/vb-nfc-reader/src/main/java/com/github/cfogrady/vbnfc/TagCommunicator.kt index 1e9860c..51c6ae9 100644 --- a/vb-nfc-reader/src/main/java/com/github/cfogrady/vbnfc/TagCommunicator.kt +++ b/vb-nfc-reader/src/main/java/com/github/cfogrady/vbnfc/TagCommunicator.kt @@ -69,8 +69,9 @@ class TagCommunicator( checksumCalculator.checkChecksums(decryptedCharacterData) val nfcCharacter = translator.parseNfcCharacter(decryptedCharacterData) Log.i(TAG, "Known Character Stats: $nfcCharacter") - Log.i(TAG, "Signaling operation complete") - nfcData.transceive(translator.getOperationCommandBytes(header, OPERATION_TRANSFERRED_TO_APP)) + // Not ready to lose any of my mons in this... + //Log.i(TAG, "Signaling operation complete") + //nfcData.transceive(translator.getOperationCommandBytes(header, OPERATION_TRANSFERRED_TO_APP)) return nfcCharacter }