diff --git a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/AmountSummaryView.kt b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/AmountSummaryView.kt index 152327cf..e15b1030 100644 --- a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/AmountSummaryView.kt +++ b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/AmountSummaryView.kt @@ -16,7 +16,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.material.icons.filled.ArrowUpward -import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -129,7 +129,7 @@ fun AmountInfoWidget( .fillMaxWidth(), title = stringResource(id = R.string.income), ) - Divider() + HorizontalDivider() ColorIconAmountView( color = null, icon = null, diff --git a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/ColorSelectionScreen.kt b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/ColorSelectionScreen.kt index 58631859..11b93f0a 100644 --- a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/ColorSelectionScreen.kt +++ b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/ColorSelectionScreen.kt @@ -129,7 +129,7 @@ fun ColorSelectionScreen(onColorPicked: ((Int) -> Unit)? = null) { .padding(start = 16.dp, end = 16.dp, bottom = 4.dp), ) } - items(colors) { color -> + items(colors, key = { it }) { color -> val parsedColor = color.toColorInt() Box( modifier = ColorIconSpecModifier diff --git a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/IconSelectionScreen.kt b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/IconSelectionScreen.kt index f5c17d85..4b1bb40e 100644 --- a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/IconSelectionScreen.kt +++ b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/components/IconSelectionScreen.kt @@ -55,7 +55,7 @@ fun IconSelectionScreen( .padding(start = 16.dp, end = 16.dp, bottom = 4.dp), ) } - items(icons) { icon -> + items(icons, key = { it }) { icon -> Box( modifier = ColorIconSpecModifier .aspectRatio(1f) diff --git a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/ui/components/MonthPicker.kt b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/ui/components/MonthPicker.kt index fbbe3ce9..928924ef 100644 --- a/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/ui/components/MonthPicker.kt +++ b/core/designsystem/src/main/kotlin/com/naveenapps/expensemanager/core/designsystem/ui/components/MonthPicker.kt @@ -130,7 +130,7 @@ fun MonthPicker( .fillMaxWidth(), columns = GridCells.Adaptive(minSize = 96.dp), ) { - items(months) { + items(months, key = { it }) { Box( modifier = Modifier .size(60.dp) diff --git a/feature/account/src/main/kotlin/com/naveenapps/expensemanager/feature/account/selection/AccountSelectionScreen.kt b/feature/account/src/main/kotlin/com/naveenapps/expensemanager/feature/account/selection/AccountSelectionScreen.kt index ba217574..0fb05fb9 100644 --- a/feature/account/src/main/kotlin/com/naveenapps/expensemanager/feature/account/selection/AccountSelectionScreen.kt +++ b/feature/account/src/main/kotlin/com/naveenapps/expensemanager/feature/account/selection/AccountSelectionScreen.kt @@ -58,7 +58,7 @@ fun AccountSelectionScreen( ) } } - items(accounts) { account -> + items(accounts, key = { it.id }) { account -> val isSelected = selectedAccount?.id == account.id Box( modifier = Modifier diff --git a/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/create/BudgetCreateScreen.kt b/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/create/BudgetCreateScreen.kt index 22ac6b5f..66154f42 100644 --- a/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/create/BudgetCreateScreen.kt +++ b/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/create/BudgetCreateScreen.kt @@ -15,9 +15,9 @@ import androidx.compose.material.icons.filled.AccountBalance import androidx.compose.material.icons.filled.Done import androidx.compose.material.icons.filled.EditCalendar import androidx.compose.material.icons.filled.FilterList -import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet @@ -290,9 +290,7 @@ fun BudgetCreateScreen( label = R.string.budget_amount, ) - Divider( - modifier = Modifier.padding(top = 16.dp), - ) + HorizontalDivider(modifier = Modifier.padding(top = 16.dp)) SelectedItemView( modifier = Modifier @@ -318,7 +316,7 @@ fun BudgetCreateScreen( selectedCount = categoriesCount.asString(context), ) - Divider() + HorizontalDivider() Spacer( modifier = Modifier diff --git a/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/details/BudgetDetailScreen.kt b/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/details/BudgetDetailScreen.kt index 2d3747e8..4ac4e03d 100644 --- a/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/details/BudgetDetailScreen.kt +++ b/feature/budget/src/main/kotlin/com/naveenapps/expensemanager/feature/budget/details/BudgetDetailScreen.kt @@ -149,7 +149,7 @@ private fun BudgetDetailContent( val transactions = budget?.transactions if (transactions?.isNotEmpty() == true) { LazyColumn(modifier = Modifier.padding(top = 16.dp)) { - items(transactions) { item -> + items(transactions, key = { it.id }) { item -> TransactionItem( modifier = Modifier .fillMaxWidth() diff --git a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/list/CategoryListScreen.kt b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/list/CategoryListScreen.kt index 519ba6be..7c80ece4 100644 --- a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/list/CategoryListScreen.kt +++ b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/list/CategoryListScreen.kt @@ -123,7 +123,7 @@ private fun CategoryListScreenContentView( }, text = { Text( - text = stringResource(id = items.labelResourceID), + text = stringResource(id = items.labelResourceID).uppercase(), maxLines = 1, overflow = TextOverflow.Ellipsis, ) @@ -167,7 +167,7 @@ private fun CategoryListScreenContent( val items = categoryUiState.data LazyColumn { - items(items) { category -> + items(items, key = { it.id }) { category -> CategoryItem( name = category.name, icon = category.storedIcon.name, diff --git a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/CategorySelectionScreen.kt b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/CategorySelectionScreen.kt index 160406c4..cbdbd58f 100644 --- a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/CategorySelectionScreen.kt +++ b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/CategorySelectionScreen.kt @@ -40,7 +40,7 @@ fun CategorySelectionScreen( Row( modifier = Modifier .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp, bottom = 4.dp), + .padding(16.dp), ) { SelectionTitle( title = stringResource(id = R.string.select_category), @@ -57,7 +57,7 @@ fun CategorySelectionScreen( ) } } - items(categories) { category -> + items(categories, key = { it.id }) { category -> val isSelected = selectedCategory?.id == category.id Box( modifier = Modifier diff --git a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/MultipleCategoriesSelectionScreen.kt b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/MultipleCategoriesSelectionScreen.kt index 0844c116..edd77a7f 100644 --- a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/MultipleCategoriesSelectionScreen.kt +++ b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/selection/MultipleCategoriesSelectionScreen.kt @@ -11,7 +11,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable @@ -95,7 +95,7 @@ fun MultipleCategoriesSelectionScreen( .padding(start = 16.dp, end = 16.dp, bottom = 4.dp), ) } - items(categories) { category -> + items(categories, key = { it.id }) { category -> val isSelected = selectedCategories.fastAny { it.id == category.id } CategoryCheckedItem( modifier = Modifier @@ -114,7 +114,7 @@ fun MultipleCategoriesSelectionScreen( } item { Column { - Divider(modifier = Modifier.padding(top = 8.dp)) + HorizontalDivider(modifier = Modifier.padding(top = 8.dp)) Row( modifier = Modifier .padding(start = 16.dp, end = 16.dp) diff --git a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/transaction/CategoryTransactionListScreen.kt b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/transaction/CategoryTransactionListScreen.kt index 36f76896..8c0d253b 100644 --- a/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/transaction/CategoryTransactionListScreen.kt +++ b/feature/category/src/main/kotlin/com/naveenapps/expensemanager/feature/category/transaction/CategoryTransactionListScreen.kt @@ -187,7 +187,10 @@ private fun CategoryTransactionListScreenContent( ) } } else { - items(uiState.data.categoryTransactions) { categoryTransaction -> + items( + uiState.data.categoryTransactions, + key = { it.category.id } + ) { categoryTransaction -> CategoryTransactionItem( modifier = Modifier .clickable { diff --git a/feature/dashboard/src/main/kotlin/com/naveenapps/expensemanager/feature/dashboard/DashboardScreen.kt b/feature/dashboard/src/main/kotlin/com/naveenapps/expensemanager/feature/dashboard/DashboardScreen.kt index 2d1cef12..77bb4ed2 100644 --- a/feature/dashboard/src/main/kotlin/com/naveenapps/expensemanager/feature/dashboard/DashboardScreen.kt +++ b/feature/dashboard/src/main/kotlin/com/naveenapps/expensemanager/feature/dashboard/DashboardScreen.kt @@ -135,7 +135,7 @@ private fun DashboardScreenContent( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), ) { - items(accounts) { + items(accounts, key = { it.id }) { DashBoardAccountItem( modifier = Modifier .wrapContentWidth() @@ -187,7 +187,7 @@ private fun DashboardScreenContent( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), ) { - items(budgets) { budget -> + items(budgets, key = { it.id }) { budget -> DashBoardBudgetItem( modifier = Modifier .clickable { @@ -225,7 +225,7 @@ private fun DashboardScreenContent( ) } if (transactions.isNotEmpty()) { - items(transactions) { transaction -> + items(transactions, key = { it.id }) { transaction -> TransactionItem( modifier = Modifier .fillMaxWidth() diff --git a/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/list/TransactionListScreen.kt b/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/list/TransactionListScreen.kt index 254608ca..1442895f 100644 --- a/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/list/TransactionListScreen.kt +++ b/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/list/TransactionListScreen.kt @@ -15,8 +15,8 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add -import androidx.compose.material3.Divider import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -173,7 +173,7 @@ fun TransactionGroupItem( ) } if (isLastItem.not()) { - Divider(modifier = Modifier.padding(top = 8.dp, bottom = 8.dp)) + HorizontalDivider(modifier = Modifier.padding(top = 8.dp, bottom = 8.dp)) } } } diff --git a/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/numberpad/NumberPadScreenView.kt b/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/numberpad/NumberPadScreenView.kt index b37e61d2..f31cefdb 100644 --- a/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/numberpad/NumberPadScreenView.kt +++ b/feature/transaction/src/main/kotlin/com/naveenapps/expensemanager/feature/transaction/numberpad/NumberPadScreenView.kt @@ -1,6 +1,5 @@ package com.naveenapps.expensemanager.feature.transaction.numberpad -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -10,30 +9,26 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Backspace -import androidx.compose.material3.DividerDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog @@ -301,24 +296,6 @@ private fun NumberPadScreenView( } } -@Composable -fun VerticalDivider( - modifier: Modifier = Modifier, - thickness: Dp = DividerDefaults.Thickness, - color: Color = DividerDefaults.color, -) { - val targetThickness = if (thickness == Dp.Hairline) { - (1f / LocalDensity.current.density).dp - } else { - thickness - } - Box( - modifier - .width(targetThickness) - .background(color = color), - ) -} - @Composable fun RowScope.NumberPadActionText( text: String, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b4b17719..3ac734e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,16 +42,15 @@ opencsv = "4.6" review = "2.0.1" googleOssPlugin = "0.10.6" spotless = "6.23.0" -hilt = "2.48.1" +hilt = "2.49" hiltExt = "1.2.0" jacoco = "0.8.8" junit4 = "4.13.2" kotlin = "1.9.21" -kotlinKsp = "1.8.10-1.0.9" kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.4.1" kotlinxSerializationJson = "1.6.0" -ksp = "1.9.10-1.0.13" +ksp = "1.9.21-1.0.16" lint = "31.2.2" okhttp = "4.12.0" protobuf = "3.24.4"