From 187ac970dec02d206ef9177bdf1f26a7ff685ce7 Mon Sep 17 00:00:00 2001 From: Nacho Date: Sat, 4 Jan 2025 01:20:03 +0100 Subject: [PATCH] Added dummy screens plus icons --- app/build.gradle.kts | 3 + .../github/nacabaro/vbhelper/MainActivity.kt | 12 +-- .../nacabaro/vbhelper/components/TopBanner.kt | 25 ++++++ .../vbhelper/navigation/AppNavigation.kt | 48 +++++++++++ .../vbhelper/navigation/BottomNavItem.kt | 15 ++++ .../navigation/BottomNavigationBar.kt | 41 ++++++++++ .../vbhelper/screens/BattlesScreen.kt | 9 +++ .../nacabaro/vbhelper/screens/DexScreen.kt | 80 +++++++++++++++++++ .../nacabaro/vbhelper/screens/HomeScreen.kt | 9 +++ .../nacabaro/vbhelper/screens/ScanScreen.kt | 68 ++++++++++++++++ .../vbhelper/screens/StorageScreen.kt | 78 ++++++++++++++++++ .../drawable/baseline_catching_pokemon_24.xml | 5 ++ .../main/res/drawable/baseline_cottage_24.xml | 5 ++ app/src/main/res/drawable/baseline_egg_24.xml | 5 ++ .../res/drawable/baseline_menu_book_24.xml | 11 +++ app/src/main/res/drawable/baseline_nfc_24.xml | 5 ++ .../drawable/baseline_question_mark_24.xml | 5 ++ .../main/res/drawable/baseline_swords_24.xml | 9 +++ 18 files changed, 423 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavItem.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/HomeScreen.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/ScanScreen.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/StorageScreen.kt create mode 100644 app/src/main/res/drawable/baseline_catching_pokemon_24.xml create mode 100644 app/src/main/res/drawable/baseline_cottage_24.xml create mode 100644 app/src/main/res/drawable/baseline_egg_24.xml create mode 100644 app/src/main/res/drawable/baseline_menu_book_24.xml create mode 100644 app/src/main/res/drawable/baseline_nfc_24.xml create mode 100644 app/src/main/res/drawable/baseline_question_mark_24.xml create mode 100644 app/src/main/res/drawable/baseline_swords_24.xml 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 @@ + + +