diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 94e8b87..9c3bdf7 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -60,4 +60,7 @@ dependencies {
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
+ implementation("androidx.navigation:navigation-compose:2.7.0")
+ implementation("com.google.android.material:material:1.2.0")
+ implementation("androidx.compose.material:material")
}
\ No newline at end of file
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 4c98062..e097b1a 100644
--- a/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt
@@ -10,18 +10,10 @@ import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.tooling.preview.Preview
-import com.github.nacabaro.vbhelper.R
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.nacabaro.vbhelper.ui.theme.VBHelperTheme
class MainActivity : ComponentActivity() {
@@ -45,7 +37,7 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge()
setContent {
VBHelperTheme {
-
+ AppNavigation()
}
}
}
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt b/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt
new file mode 100644
index 0000000..f5fc3d0
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt
@@ -0,0 +1,25 @@
+package com.github.nacabaro.vbhelper.components
+
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+@Composable
+fun TopBanner(
+ text: String,
+ modifier: Modifier = Modifier
+) {
+ Text(
+ text = text,
+ textAlign = TextAlign.Center,
+ fontSize = 24.sp,
+ modifier = modifier
+ .fillMaxWidth()
+ .padding(16.dp)
+ )
+}
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
new file mode 100644
index 0000000..cd2f9cc
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt
@@ -0,0 +1,48 @@
+package com.github.nacabaro.vbhelper.navigation
+
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Scaffold
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
+import com.github.nacabaro.vbhelper.screens.BattlesScreen
+import com.github.nacabaro.vbhelper.screens.DexScreen
+import com.github.nacabaro.vbhelper.screens.HomeScreen
+import com.github.nacabaro.vbhelper.screens.ScanScreen
+import com.github.nacabaro.vbhelper.screens.StorageScreen
+
+@Composable
+fun AppNavigation() {
+ val navController = rememberNavController()
+
+ Scaffold(
+ bottomBar = {
+ BottomNavigationBar(navController = navController)
+ }
+ ) { contentPadding ->
+ NavHost(
+ navController = navController,
+ startDestination = BottomNavItem.Home.route,
+ modifier = Modifier
+ .padding(contentPadding)
+ ) {
+ composable(BottomNavItem.Battles.route) {
+ BattlesScreen()
+ }
+ composable(BottomNavItem.Home.route) {
+ HomeScreen()
+ }
+ composable(BottomNavItem.Storage.route) {
+ StorageScreen()
+ }
+ composable(BottomNavItem.Scan.route) {
+ ScanScreen()
+ }
+ composable(BottomNavItem.Dex.route) {
+ DexScreen()
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavItem.kt b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavItem.kt
new file mode 100644
index 0000000..dad62ff
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavItem.kt
@@ -0,0 +1,15 @@
+package com.github.nacabaro.vbhelper.navigation
+
+import com.github.nacabaro.vbhelper.R
+
+sealed class BottomNavItem (
+ var route: String,
+ var icon: Int,
+ var label: String
+) {
+ object Scan : BottomNavItem("Scan", R.drawable.baseline_nfc_24, "Scan")
+ object Battles : BottomNavItem("Battles", R.drawable.baseline_swords_24, "Battles")
+ object Home : BottomNavItem("Home", R.drawable.baseline_cottage_24, "Home")
+ object Dex : BottomNavItem("Dex", R.drawable.baseline_menu_book_24, "Dex")
+ object Storage : BottomNavItem("Storage", R.drawable.baseline_catching_pokemon_24, "Storage")
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..24eb230
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt
@@ -0,0 +1,41 @@
+package com.github.nacabaro.vbhelper.navigation
+
+import androidx.compose.material3.NavigationBar
+import androidx.compose.material3.NavigationBarItem
+import androidx.compose.material3.Text
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.res.painterResource
+import androidx.navigation.NavController
+import androidx.navigation.compose.currentBackStackEntryAsState
+
+
+@Composable
+fun BottomNavigationBar(navController: NavController) {
+ val items = listOf(
+ BottomNavItem.Scan,
+ BottomNavItem.Battles,
+ BottomNavItem.Home,
+ BottomNavItem.Dex,
+ BottomNavItem.Storage,
+ )
+ NavigationBar {
+ val currentBackStackEntry = navController.currentBackStackEntryAsState()
+ val currentRoute = currentBackStackEntry.value?.destination?.route
+
+ items.forEach { item ->
+ NavigationBarItem (
+ icon = { Icon(painter = painterResource(item.icon), contentDescription = item.label) },
+ label = { Text(item.label) },
+ selected = currentRoute == item.route,
+ onClick = {
+ navController.navigate(item.route) {
+ popUpTo(navController.graph.startDestinationId) { saveState = true }
+ launchSingleTop = true
+ restoreState = true
+ }
+ }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt
new file mode 100644
index 0000000..c9543c8
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt
@@ -0,0 +1,9 @@
+package com.github.nacabaro.vbhelper.screens
+
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+
+@Composable
+fun BattlesScreen() {
+ Text("Battles Screen")
+}
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt
new file mode 100644
index 0000000..655b58d
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt
@@ -0,0 +1,80 @@
+package com.github.nacabaro.vbhelper.screens
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.material3.Card
+import androidx.compose.material3.MaterialTheme
+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.res.painterResource
+import androidx.compose.ui.unit.dp
+import com.github.nacabaro.vbhelper.R
+import com.github.nacabaro.vbhelper.components.TopBanner
+
+@Composable
+fun DexScreen() {
+ Scaffold (
+ topBar = { TopBanner("Discovered Digimon") }
+ ) { contentPadding ->
+ LazyColumn (
+ modifier = Modifier
+ .padding(top = contentPadding.calculateTopPadding())
+ ) {
+ items(100) { i ->
+ DexDiMEntry(
+ name = "Digimon $i",
+ icon = R.drawable.baseline_egg_24,
+ onClick = {},
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(
+ vertical = 8.dp,
+ horizontal = 16.dp
+ )
+ )
+ }
+ }
+ }
+}
+
+@Composable
+fun DexDiMEntry(
+ name: String,
+ icon: Int,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Card (
+ shape = MaterialTheme.shapes.medium,
+ modifier = modifier,
+ onClick = onClick
+ ) {
+ Row (
+ horizontalArrangement = Arrangement.Start,
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier
+ .padding(8.dp)
+ ) {
+ Image (
+ painter = painterResource(id = icon),
+ contentDescription = name,
+ modifier = Modifier
+ .padding(8.dp)
+ .size(64.dp)
+ )
+ Text(
+ text = name,
+ modifier = Modifier
+ .padding(8.dp)
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/HomeScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/HomeScreen.kt
new file mode 100644
index 0000000..97ec094
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/HomeScreen.kt
@@ -0,0 +1,9 @@
+package com.github.nacabaro.vbhelper.screens
+
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+
+@Composable
+fun HomeScreen() {
+ Text("Home Screen")
+}
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
new file mode 100644
index 0000000..0f1d69b
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt
@@ -0,0 +1,68 @@
+package com.github.nacabaro.vbhelper.screens
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+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.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.github.nacabaro.vbhelper.components.TopBanner
+
+@Composable
+fun ScanScreen() {
+ Scaffold (
+ topBar = { TopBanner(text = "Scan a Vital Bracelet") }
+ ) { contentPadding ->
+ Column(
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(contentPadding)
+ ) {
+ ScanButton(
+ text = "Vital Bracelet to App",
+ onClick = {}
+ )
+ Spacer(modifier = Modifier.height(16.dp))
+ ScanButton(
+ text = "App to Vital Bracelet",
+ onClick = {}
+ )
+ }
+ }
+}
+
+@Composable
+fun ScanButton(
+ text: String,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Button(
+ onClick = onClick,
+ modifier = modifier
+ ) {
+ Text(
+ text = text,
+ fontSize = 16.sp,
+ modifier = Modifier
+ .padding(4.dp)
+ )
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+fun ScanScreenPreview() {
+ ScanScreen()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/StorageScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/StorageScreen.kt
new file mode 100644
index 0000000..d0bc9b2
--- /dev/null
+++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/StorageScreen.kt
@@ -0,0 +1,78 @@
+package com.github.nacabaro.vbhelper.screens
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.scrollable
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.material3.Card
+import androidx.compose.material3.MaterialTheme
+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.res.painterResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import com.github.nacabaro.vbhelper.R
+import com.github.nacabaro.vbhelper.components.TopBanner
+
+@Composable
+fun StorageScreen() {
+ Scaffold (
+ topBar = { TopBanner(text = "My Digimon") }
+ ) { contentPadding ->
+ LazyVerticalGrid(
+ columns = GridCells.Fixed(3),
+ modifier = Modifier
+ .scrollable(state = rememberScrollState(), orientation = Orientation.Vertical)
+ .padding(top = contentPadding.calculateTopPadding())
+ ) {
+ items(100) { i ->
+ StorageEntry(
+ name = "Digimon $i",
+ icon = R.drawable.baseline_question_mark_24
+ )
+ }
+ }
+ }
+}
+
+@Composable
+fun StorageEntry(
+ name: String,
+ icon: Int,
+ modifier: Modifier = Modifier
+) {
+ Card (
+ shape = MaterialTheme.shapes.medium,
+ modifier = modifier
+ .padding(8.dp)
+ ) {
+ Column (
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .fillMaxSize()
+ ) {
+ Image(
+ painter = painterResource(id = icon),
+ contentDescription = name,
+ modifier = Modifier
+ .padding(8.dp)
+ .size(64.dp)
+ )
+ Text(
+ text = name,
+ textAlign = TextAlign.Center,
+ modifier = Modifier
+ .padding(8.dp)
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/baseline_catching_pokemon_24.xml b/app/src/main/res/drawable/baseline_catching_pokemon_24.xml
new file mode 100644
index 0000000..3f0c28f
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_catching_pokemon_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_cottage_24.xml b/app/src/main/res/drawable/baseline_cottage_24.xml
new file mode 100644
index 0000000..1985ffd
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_cottage_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_egg_24.xml b/app/src/main/res/drawable/baseline_egg_24.xml
new file mode 100644
index 0000000..0f2ad60
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_egg_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_menu_book_24.xml b/app/src/main/res/drawable/baseline_menu_book_24.xml
new file mode 100644
index 0000000..10d9f76
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_menu_book_24.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_nfc_24.xml b/app/src/main/res/drawable/baseline_nfc_24.xml
new file mode 100644
index 0000000..23e8f68
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_nfc_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_question_mark_24.xml b/app/src/main/res/drawable/baseline_question_mark_24.xml
new file mode 100644
index 0000000..9dde6fa
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_question_mark_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_swords_24.xml b/app/src/main/res/drawable/baseline_swords_24.xml
new file mode 100644
index 0000000..d5da3b3
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_swords_24.xml
@@ -0,0 +1,9 @@
+
+
+