From 4905433a3bb9c5a56496db606307e92884abf135 Mon Sep 17 00:00:00 2001 From: Xaver Date: Tue, 14 Jan 2025 09:22:05 +0100 Subject: [PATCH] home ui start --- Ledger/app/build.gradle.kts | 1 + .../java/at/xaxa/ledger/LedgerApplication.kt | 4 +- .../main/java/at/xaxa/ledger/MainActivity.kt | 4 +- .../at/xaxa/ledger/data/EntryRepository.kt | 4 +- .../at/xaxa/ledger/data/db/LedgerDatabase.kt | 4 +- .../main/java/at/xaxa/ledger/ui/LedgerApp.kt | 56 +++++++++++++++++++ .../main/java/at/xaxa/ledger/ui/LedgerUI.kt | 44 +++++++++------ .../java/at/xaxa/ledger/ui/home/HomeUI.kt | 45 +++++++++++++++ Ledger/gradle/libs.versions.toml | 2 + 9 files changed, 140 insertions(+), 24 deletions(-) create mode 100644 Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt diff --git a/Ledger/app/build.gradle.kts b/Ledger/app/build.gradle.kts index 8e4824d..63bb144 100644 --- a/Ledger/app/build.gradle.kts +++ b/Ledger/app/build.gradle.kts @@ -61,6 +61,7 @@ dependencies { implementation(libs.androidx.material3) implementation(libs.androidx.room.common) implementation(libs.androidx.room.ktx) + implementation(libs.androidx.navigation.compose) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/LedgerApplication.kt b/Ledger/app/src/main/java/at/xaxa/ledger/LedgerApplication.kt index ac08f41..09998c1 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/LedgerApplication.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/LedgerApplication.kt @@ -6,8 +6,8 @@ import at.xaxa.ledger.data.db.LedgerDatabase class LedgerApplication : Application(){ val entryRepository by lazy { - EntryRepository( + /*EntryRepository( DatabaseInstance.getDatabase(this).LedgerDao() - ) + )*/ } } \ No newline at end of file diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/MainActivity.kt b/Ledger/app/src/main/java/at/xaxa/ledger/MainActivity.kt index 6a2c0fe..183fe4b 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/MainActivity.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/MainActivity.kt @@ -11,6 +11,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import at.xaxa.ledger.ui.LedgerApp import at.xaxa.ledger.ui.theme.LedgerTheme class MainActivity : ComponentActivity() { @@ -20,8 +21,7 @@ class MainActivity : ComponentActivity() { setContent { LedgerTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", + LedgerApp( modifier = Modifier.padding(innerPadding) ) } diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt b/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt index 27b5128..3bf5964 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/data/EntryRepository.kt @@ -8,7 +8,7 @@ import kotlinx.coroutines.flow.map class EntryRepository(private val ledgerDao: LedgerDao){ - +/* fun getAllEntries(): Flow> { return ledgerDao.getAllEntries().map { it.map {entry -> Entry(entry._id, entry.name, entry.amount, entry.date, entry.categoryName) } @@ -30,6 +30,6 @@ class EntryRepository(private val ledgerDao: LedgerDao){ } suspend fun deletePokemon(entry: Entry) { LedgerDao.deleteEntry(EntryEntity(_id = entry.id, entry.name, entry.amount, entry.date, entry.categoryName)) - } + }*/ } \ No newline at end of file diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/data/db/LedgerDatabase.kt b/Ledger/app/src/main/java/at/xaxa/ledger/data/db/LedgerDatabase.kt index f3744fd..5268408 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/data/db/LedgerDatabase.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/data/db/LedgerDatabase.kt @@ -7,6 +7,6 @@ import at.xaxa.ledger.data.db.Entry.EntryEntity @Database(entities = [EntryEntity::class, CategoryEntity::class], version = 1, exportSchema = false) abstract class LedgerDatabase : RoomDatabase() { - abstract fun entryDao(): EntryDao - abstract fun categoryDao(): CategoryDao + /*abstract fun entryDao(): EntryDao + abstract fun categoryDao(): CategoryDao*/ } \ No newline at end of file diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt new file mode 100644 index 0000000..5f6964f --- /dev/null +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerApp.kt @@ -0,0 +1,56 @@ +package at.xaxa.ledger.ui + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import at.xaxa.ledger.ui.home.Home + +enum class AppRoutes(val route: String) { + Home("home"), + Add("add"), + Edit("edit/{gameId}") +} + +@Composable +fun LedgerApp(modifier: Modifier = Modifier){ + val navController = rememberNavController() + val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route + + Scaffold() { innerPadding -> + NavHost( + navController = navController, + startDestination = AppRoutes.Home.route, + modifier = Modifier.padding(innerPadding), + contentAlignment = Alignment.Center + ) { + composable(AppRoutes.Home.route){ + Home(onCardClick = { + navController.navigate("home") + }) + } + /* + composable(AppRoutes.Add.route) { + SearchList(onCardClick = { + navController.navigate("add/$it") + }) + } + composable( + route = AppRoutes.Edit.route, + arguments = listOf(navArgument("gameId") { + type = NavType.IntType + }) + ) { + backStackEntry -> + DetailView( + modifier = Modifier + ) + }*/ + } + } +} \ No newline at end of file diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerUI.kt index f680e4a..5c3e7bb 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/LedgerUI.kt @@ -1,6 +1,8 @@ package at.xaxa.ledger.ui import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -25,6 +27,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight @@ -37,22 +40,30 @@ import androidx.compose.ui.unit.sp // region Header Card @Composable fun HeaderCard(modifier: Modifier = Modifier, balance: String) { - Surface( - shape = RoundedCornerShape(12.dp), - color = Color(0xfff9f9f9), - border = BorderStroke(1.dp, Color(0xffc6c6c6)), - modifier = modifier - .requiredWidth(width = 360.dp) - .clip(shape = RoundedCornerShape(12.dp)) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) + + Surface( + shape = RoundedCornerShape(12.dp), + color = Color(0xfff9f9f9), + border = BorderStroke(1.dp, Color(0xffc6c6c6)), + modifier = modifier + .requiredWidth(width = 360.dp) + .clip(shape = RoundedCornerShape(12.dp)) + .shadow( + elevation = 8.dp, + shape = RoundedCornerShape(16.dp), + clip = true + ) + ) { - LayoutMediaTextHeader(modifier, balance) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + LayoutMediaTextHeader(modifier, balance) + } } - } + } @Composable @@ -100,8 +111,9 @@ private fun HeaderCardPreview() { // region Horizontal Card @Composable -fun HorizontalCard(modifier: Modifier = Modifier, name: String, date: String, amount:String) { +fun HorizontalCard(modifier: Modifier = Modifier, name: String, date: String, amount:String, onClick: () -> Unit ) { Surface( + onClick = onClick, shape = RoundedCornerShape(12.dp), color = Color(0xfff9f9f9), border = BorderStroke(1.dp, Color(0xffc6c6c6)), @@ -171,7 +183,7 @@ fun LayoutMediaText(modifier: Modifier = Modifier, name: String, date: String, a @Preview(widthDp = 360, heightDp = 80) @Composable private fun HorizontalCardPreview() { - HorizontalCard(Modifier, "McDonald's", "12th Feb, 23:32", "-124234.00€") + HorizontalCard(Modifier, "McDonald's", "12th Feb, 23:32", "-124234.00€", onClick = { println("success") }) } // endregion diff --git a/Ledger/app/src/main/java/at/xaxa/ledger/ui/home/HomeUI.kt b/Ledger/app/src/main/java/at/xaxa/ledger/ui/home/HomeUI.kt index 1928f38..28e25df 100644 --- a/Ledger/app/src/main/java/at/xaxa/ledger/ui/home/HomeUI.kt +++ b/Ledger/app/src/main/java/at/xaxa/ledger/ui/home/HomeUI.kt @@ -1,2 +1,47 @@ package at.xaxa.ledger.ui.home +import androidx.compose.foundation.ExperimentalFoundationApi +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.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +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 at.xaxa.ledger.ui.HeaderCard +import at.xaxa.ledger.ui.HorizontalCard + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun Home(modifier: Modifier = Modifier, onCardClick: (Int) -> Unit) { + + + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally) { + + val items = (1..20).toList() + LazyColumn() { + stickyHeader { + HeaderCard(modifier = modifier, "-13563.00€") + } + items(items) { index -> + Column( + modifier = Modifier.padding(vertical = 4.dp) // Add vertical padding + ) { + HorizontalCard( + modifier = modifier, + name = "McDonald's $index", + date = "12th Feb, 23:32", + amount = "-12.99", + onClick = { onCardClick(index) } + ) + } + } + } + } +} \ No newline at end of file diff --git a/Ledger/gradle/libs.versions.toml b/Ledger/gradle/libs.versions.toml index 426c4de..e9314ca 100644 --- a/Ledger/gradle/libs.versions.toml +++ b/Ledger/gradle/libs.versions.toml @@ -10,6 +10,7 @@ activityCompose = "1.9.3" composeBom = "2024.04.01" roomCommon = "2.6.1" roomKtx = "2.6.1" +navigationCompose = "2.8.5" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -28,6 +29,7 @@ androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit androidx-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-room-common = { group = "androidx.room", name = "room-common", version.ref = "roomCommon" } androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "roomKtx" } +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }