diff --git a/AGENTS.md b/AGENTS.md index 6238ac25..b9649fed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ - When modifying or adding UI, add screenshot tests in `androidApp/src/androidTest` following existing patterns to keep visual coverage current. - Run `./gradlew :shared:check` for KMP unit coverage; - Name tests with intent (e.g., `shouldReturnZeroBalanceWhenEmptyWallet`); group by feature or use-case. +- When you change the API surface of composables, search for related tests and update them so snapshots and unit coverage stay in sync. ## Commit & Pull Request Guidelines - Commit messages: concise, imperative. Conventional prefixes (`feat:`, `fix:`, `chore:`, `docs:`) are welcome and match existing history. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 970f1887..258cc370 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ android-compileSdk = "36" android-minSdk = "26" android-targetSdk = "36" androidx-test = "1.7.0" -androidx-test-runner = "1.6.2" +androidx-test-runner = "1.7.0" androidx-test-ext = "1.3.0" biometric = "1.2.0-alpha05" compose = "1.10.0-beta02" @@ -13,7 +13,7 @@ immutable-collections = "0.4.0" coroutines = "1.10.2" agp = "8.10.1" detekt = "1.23.8" -detekt-compose-rules = "0.4.27" +detekt-compose-rules = "0.4.28" java = "21" kermit = "2.0.8" koin = "4.1.1" @@ -25,10 +25,10 @@ lifecycle-navigation3 = "2.10.0-alpha05" navigation3 = "1.0.0-alpha05" kotlinx-serialization = "1.7.3" lifecycle = "2.10.0" -sqlDelight = "2.1.0" +sqlDelight = "2.2.1" turbine = "1.2.1" -triplet-play = "3.12.1" -roborazzi = "1.44.0-alpha03" +triplet-play = "3.12.2" +roborazzi = "1.52.0" robolectric = "4.12.2" [libraries] diff --git a/image/roborazzi/home_screen.png b/image/roborazzi/home_screen.png index 25ffefe4..2ce95731 100644 Binary files a/image/roborazzi/home_screen.png and b/image/roborazzi/home_screen.png differ diff --git a/settings.gradle.kts b/settings.gradle.kts index 680ed6e7..215596b8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,7 @@ dependencyResolutionManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "0.10.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } rootProject.name = "money-flow" diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 085917dd..7455a601 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,3 +1,5 @@ +import java.net.URI + import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget @@ -147,6 +149,23 @@ dependencies { tasks.withType().configureEach { systemProperty("roborazzi.test.record.dir", rootProject.layout.projectDirectory.dir("image/roborazzi").asFile.path) + + listOf( + "http" to System.getenv("http_proxy"), + "https" to System.getenv("https_proxy"), + ).forEach { (scheme, proxyValue) -> + proxyValue + ?.takeIf { it.isNotBlank() } + ?.let(::URI) + ?.let { proxyUri -> + proxyUri.host?.let { host -> + systemProperty("$scheme.proxyHost", host) + } + proxyUri.port.takeIf { it != -1 }?.let { port -> + systemProperty("$scheme.proxyPort", port) + } + } + } } sqldelight { diff --git a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AddTransactionRoborazziTest.kt b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AddTransactionRoborazziTest.kt index 0aee3b7a..37ba9a7c 100644 --- a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AddTransactionRoborazziTest.kt +++ b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AddTransactionRoborazziTest.kt @@ -1,5 +1,6 @@ package com.prof18.moneyflow +import androidx.compose.material.Scaffold import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -24,25 +25,28 @@ class AddTransactionRoborazziTest : RoborazziTestBase() { fun captureAddTransactionScreen() { composeRule.setContent { MoneyFlowTheme { - AddTransactionScreen( - categoryState = remember { mutableStateOf(RoborazziSampleData.sampleCategory) }, - navigateUp = {}, - navigateToCategoryList = {}, - addTransaction = {}, - amountText = "10.00", - updateAmountText = {}, - descriptionText = "Pizza 🍕", - updateDescriptionText = {}, - selectedTransactionType = TransactionType.OUTCOME, - updateTransactionType = {}, - updateYear = {}, - updateMonth = {}, - updateDay = {}, - saveDate = {}, - dateLabel = "11 July 2021", - addTransactionAction = null, - resetAction = {}, - ) + Scaffold { + AddTransactionScreen( + categoryState = remember { mutableStateOf(RoborazziSampleData.sampleCategory) }, + navigateUp = {}, + navigateToCategoryList = {}, + addTransaction = {}, + amountText = "10.00", + updateAmountText = {}, + descriptionText = "Pizza 🍕", + updateDescriptionText = {}, + selectedTransactionType = TransactionType.OUTCOME, + updateTransactionType = {}, + updateYear = {}, + updateMonth = {}, + updateDay = {}, + saveDate = {}, + dateLabel = "11 July 2021", + addTransactionAction = null, + resetAction = {}, + paddingValues = it, + ) + } } } diff --git a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AllTransactionsRoborazziTest.kt b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AllTransactionsRoborazziTest.kt index 0fdf2730..a8370759 100644 --- a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AllTransactionsRoborazziTest.kt +++ b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/AllTransactionsRoborazziTest.kt @@ -1,5 +1,6 @@ package com.prof18.moneyflow +import androidx.compose.material.Scaffold import androidx.test.ext.junit.runners.AndroidJUnit4 import com.prof18.moneyflow.features.alltransactions.AllTransactionsUiState import com.prof18.moneyflow.presentation.alltransactions.AllTransactionsScreen @@ -19,14 +20,17 @@ class AllTransactionsRoborazziTest : RoborazziTestBase() { fun captureAllTransactionsScreen() { composeRule.setContent { MoneyFlowTheme { - AllTransactionsScreen( - stateFlow = MutableStateFlow( - AllTransactionsUiState( - transactions = RoborazziSampleData.sampleTransactions, + Scaffold { + AllTransactionsScreen( + stateFlow = MutableStateFlow( + AllTransactionsUiState( + transactions = RoborazziSampleData.sampleTransactions, + ), ), - ), - loadNextPage = {}, - ) + loadNextPage = {}, + paddingValues = it, + ) + } } } diff --git a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/CategoriesRoborazziTest.kt b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/CategoriesRoborazziTest.kt index a090ba1f..75d3687b 100644 --- a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/CategoriesRoborazziTest.kt +++ b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/CategoriesRoborazziTest.kt @@ -1,5 +1,6 @@ package com.prof18.moneyflow +import androidx.compose.material.Scaffold import androidx.test.ext.junit.runners.AndroidJUnit4 import com.prof18.moneyflow.domain.entities.Category import com.prof18.moneyflow.presentation.categories.CategoriesScreen @@ -20,25 +21,28 @@ class CategoriesRoborazziTest : RoborazziTestBase() { fun captureCategoriesScreen() { composeRule.setContent { MoneyFlowTheme { - CategoriesScreen( - navigateUp = {}, - sendCategoryBack = {}, - isFromAddTransaction = true, - categoryModel = CategoryModel.CategoryState( - categories = listOf( - Category( - id = 0, - name = "Food", - icon = CategoryIcon.IC_HAMBURGER_SOLID, - ), - Category( - id = 1, - name = "Drinks", - icon = CategoryIcon.IC_COCKTAIL_SOLID, + Scaffold { + CategoriesScreen( + navigateUp = {}, + sendCategoryBack = {}, + isFromAddTransaction = true, + categoryModel = CategoryModel.CategoryState( + categories = listOf( + Category( + id = 0, + name = "Food", + icon = CategoryIcon.IC_HAMBURGER_SOLID, + ), + Category( + id = 1, + name = "Drinks", + icon = CategoryIcon.IC_COCKTAIL_SOLID, + ), ), ), - ), - ) + paddingValues = it, + ) + } } } diff --git a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/HomeRoborazziTest.kt b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/HomeRoborazziTest.kt index abb663eb..c5cfa0c9 100644 --- a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/HomeRoborazziTest.kt +++ b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/HomeRoborazziTest.kt @@ -1,5 +1,6 @@ package com.prof18.moneyflow +import androidx.compose.material.Scaffold import androidx.test.ext.junit.runners.AndroidJUnit4 import com.prof18.moneyflow.domain.entities.BalanceRecap import com.prof18.moneyflow.presentation.home.HomeModel @@ -19,18 +20,21 @@ class HomeRoborazziTest : RoborazziTestBase() { fun captureHomeScreen() { composeRule.setContent { MoneyFlowTheme { - HomeScreen( - homeModel = HomeModel.HomeState( - balanceRecap = BalanceRecap( - totalBalance = 5000.0, - monthlyIncome = 1000.0, - monthlyExpenses = 50.0, + Scaffold { + HomeScreen( + homeModel = HomeModel.HomeState( + balanceRecap = BalanceRecap( + totalBalance = 5000.0, + monthlyIncome = 1000.0, + monthlyExpenses = 50.0, + ), + latestTransactions = RoborazziSampleData.sampleTransactions, ), - latestTransactions = RoborazziSampleData.sampleTransactions, - ), - hideSensitiveDataState = false, - navigateToAllTransactions = {}, - ) + hideSensitiveDataState = false, + navigateToAllTransactions = {}, + paddingValues = it, + ) + } } } diff --git a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/SettingsRoborazziTest.kt b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/SettingsRoborazziTest.kt index 17a08257..069590b3 100644 --- a/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/SettingsRoborazziTest.kt +++ b/shared/src/androidUnitTest/kotlin/com/prof18/moneyflow/SettingsRoborazziTest.kt @@ -1,5 +1,6 @@ package com.prof18.moneyflow +import androidx.compose.material.Scaffold import androidx.test.ext.junit.runners.AndroidJUnit4 import com.prof18.moneyflow.features.settings.BiometricAvailabilityChecker import com.prof18.moneyflow.presentation.settings.SettingsScreen @@ -18,15 +19,18 @@ class SettingsRoborazziTest : RoborazziTestBase() { fun captureSettingsScreen() { composeRule.setContent { MoneyFlowTheme { - SettingsScreen( - biometricAvailabilityChecker = object : BiometricAvailabilityChecker { - override fun isBiometricSupported(): Boolean = true - }, - biometricState = true, - onBiometricEnabled = {}, - hideSensitiveDataState = true, - onHideSensitiveDataEnabled = {}, - ) + Scaffold { + SettingsScreen( + biometricAvailabilityChecker = object : BiometricAvailabilityChecker { + override fun isBiometricSupported(): Boolean = true + }, + biometricState = true, + onBiometricEnabled = {}, + hideSensitiveDataState = true, + onHideSensitiveDataEnabled = {}, + paddingValues = it, + ) + } } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/navigation/MoneyFlowNavHost.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/navigation/MoneyFlowNavHost.kt index 86d36ae6..a2d0697c 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/navigation/MoneyFlowNavHost.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/navigation/MoneyFlowNavHost.kt @@ -133,13 +133,13 @@ private fun EntryProviderScope.screens( val hideSensitiveData by homeViewModel.hideSensitiveDataState.collectAsState() HomeScreen( - navigateToAddTransaction = { backStack.add(AddTransactionRoute) }, - paddingValues = paddingValues, - deleteTransaction = { id -> homeViewModel.deleteTransaction(id) }, homeModel = homeModel, hideSensitiveDataState = hideSensitiveData, - changeSensitiveDataVisibility = { homeViewModel.changeSensitiveDataVisibility(it) }, navigateToAllTransactions = { backStack.add(AllTransactionsRoute) }, + paddingValues = paddingValues, + navigateToAddTransaction = { backStack.add(AddTransactionRoute) }, + deleteTransaction = { id -> homeViewModel.deleteTransaction(id) }, + changeSensitiveDataVisibility = { homeViewModel.changeSensitiveDataVisibility(it) }, ) } @@ -165,6 +165,7 @@ private fun EntryProviderScope.screens( dateLabel = uiState.dateLabel, addTransactionAction = uiState.addTransactionAction, resetAction = viewModel::resetAction, + paddingValues = paddingValues, ) } @@ -182,15 +183,17 @@ private fun EntryProviderScope.screens( }, isFromAddTransaction = route.fromAddTransaction, categoryModel = categoryModel, + paddingValues = paddingValues, ) } entry { val viewModel = koinViewModel() AllTransactionsScreen( - navigateUp = { backStack.removeLastOrNull() }, stateFlow = viewModel.state, loadNextPage = viewModel::loadNextPage, + paddingValues = paddingValues, + navigateUp = { backStack.removeLastOrNull() }, ) } @@ -206,6 +209,7 @@ private fun EntryProviderScope.screens( onBiometricEnabled = viewModel::updateBiometricState, hideSensitiveDataState = hideDataState, onHideSensitiveDataEnabled = viewModel::updateHideSensitiveDataState, + paddingValues = paddingValues, ) } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/addtransaction/AddTransactionScreen.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/addtransaction/AddTransactionScreen.kt index 696f8859..416c2964 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/addtransaction/AddTransactionScreen.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/addtransaction/AddTransactionScreen.kt @@ -1,6 +1,7 @@ package com.prof18.moneyflow.presentation.addtransaction import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.Icon @@ -61,6 +62,7 @@ internal fun AddTransactionScreen( dateLabel: String?, addTransactionAction: AddTransactionAction?, resetAction: () -> Unit, + paddingValues: PaddingValues, ) { val (showDatePickerDialog, setShowedDatePickerDialog) = remember { mutableStateOf(false) } @@ -102,6 +104,7 @@ internal fun AddTransactionScreen( val keyboardController = LocalSoftwareKeyboardController.current Scaffold( + modifier = Modifier.padding(paddingValues), scaffoldState = scaffoldState, topBar = { MFTopBar( @@ -115,8 +118,8 @@ internal fun AddTransactionScreen( actionEnabled = categoryState.value?.id != null && amountText.isNotEmpty(), ) }, - content = { - Column { + content = { innerPadding -> + Column(modifier = Modifier.padding(innerPadding)) { DatePickerDialog( showDatePickerDialog, setShowedDatePickerDialog, @@ -239,6 +242,7 @@ private fun AddTransactionScreenPreview() { dateLabel = "11 July 2021", addTransactionAction = null, resetAction = {}, + paddingValues = PaddingValues(), ) } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/alltransactions/AllTransactionsScreen.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/alltransactions/AllTransactionsScreen.kt index f0fb2ec6..0f911536 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/alltransactions/AllTransactionsScreen.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/alltransactions/AllTransactionsScreen.kt @@ -1,10 +1,13 @@ package com.prof18.moneyflow.presentation.alltransactions +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.Divider import androidx.compose.material.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.prof18.moneyflow.domain.entities.MoneyTransaction import com.prof18.moneyflow.domain.entities.TransactionTypeUI @@ -25,19 +28,21 @@ import org.jetbrains.compose.resources.stringResource internal fun AllTransactionsScreen( stateFlow: StateFlow, loadNextPage: () -> Unit, + paddingValues: PaddingValues, navigateUp: () -> Unit = {}, ) { Scaffold( + modifier = Modifier.padding(paddingValues), topBar = { MFTopBar( topAppBarText = stringResource(Res.string.all_transactions), onBackPressed = { navigateUp() }, ) }, - content = { + content = { innerPadding -> val uiState = stateFlow.collectAsState().value - LazyColumn { + LazyColumn(modifier = Modifier.padding(innerPadding)) { when { uiState.error != null -> { item { ErrorView(uiErrorMessage = uiState.error) } @@ -81,7 +86,6 @@ internal fun AllTransactionsScreen( private fun AllTransactionsScreenPreviews() { MoneyFlowTheme { AllTransactionsScreen( - navigateUp = {}, stateFlow = MutableStateFlow( AllTransactionsUiState( transactions = listOf( @@ -91,6 +95,8 @@ private fun AllTransactionsScreenPreviews() { ), ), loadNextPage = {}, + paddingValues = PaddingValues(), + navigateUp = {}, ) } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/categories/CategoriesScreen.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/categories/CategoriesScreen.kt index f353584f..aab5e74b 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/categories/CategoriesScreen.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/categories/CategoriesScreen.kt @@ -1,11 +1,14 @@ package com.prof18.moneyflow.presentation.categories +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material.Divider import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.prof18.moneyflow.domain.entities.Category import com.prof18.moneyflow.presentation.categories.components.CategoryCard @@ -30,8 +33,10 @@ internal fun CategoriesScreen( sendCategoryBack: (CategoryUIData) -> Unit, isFromAddTransaction: Boolean, categoryModel: CategoryModel, + paddingValues: PaddingValues, ) { Scaffold( + modifier = Modifier.padding(paddingValues), topBar = { MFTopBar( topAppBarText = stringResource(Res.string.categories_screen), @@ -43,14 +48,14 @@ internal fun CategoriesScreen( actionEnabled = true, ) }, - content = { + content = { innerPadding -> when (categoryModel) { CategoryModel.Loading -> Loader() is CategoryModel.Error -> { ErrorView(uiErrorMessage = categoryModel.uiErrorMessage) } is CategoryModel.CategoryState -> { - LazyColumn { + LazyColumn(modifier = Modifier.padding(innerPadding)) { items(categoryModel.categories) { CategoryCard( category = it, @@ -93,6 +98,7 @@ private fun CategoriesScreenPreview() { ), ), ), + paddingValues = PaddingValues(), ) } } @@ -116,6 +122,7 @@ private fun CategoriesScreenErrorPreview() { nerdMessageArgs = listOf("101"), ), ), + paddingValues = PaddingValues(), ) } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/home/HomeScreen.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/home/HomeScreen.kt index 2f107df8..9ffcccfb 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/home/HomeScreen.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/home/HomeScreen.kt @@ -29,7 +29,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp import co.touchlab.kermit.Logger import com.prof18.moneyflow.domain.entities.BalanceRecap import com.prof18.moneyflow.domain.entities.MoneyTransaction @@ -61,15 +60,19 @@ internal fun HomeScreen( homeModel: HomeModel, hideSensitiveDataState: Boolean, navigateToAllTransactions: () -> Unit, + paddingValues: PaddingValues, navigateToAddTransaction: () -> Unit = {}, - paddingValues: PaddingValues = PaddingValues(0.dp), deleteTransaction: (Long) -> Unit = {}, changeSensitiveDataVisibility: (Boolean) -> Unit = {}, ) { when (homeModel) { is HomeModel.Loading -> Loader() is HomeModel.HomeState -> { - Column(modifier = Modifier.padding(Margins.small)) { + Column( + modifier = Modifier + .padding(paddingValues) + .padding(Margins.small), + ) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, @@ -230,6 +233,7 @@ private fun HomeScreenPreview() { ), hideSensitiveDataState = true, navigateToAllTransactions = {}, + paddingValues = PaddingValues(), ) } } @@ -252,6 +256,7 @@ private fun HomeScreenErrorPreview() { ), hideSensitiveDataState = true, navigateToAllTransactions = {}, + paddingValues = PaddingValues(), ) } } diff --git a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/settings/SettingsScreen.kt b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/settings/SettingsScreen.kt index 8961cf24..8508db56 100644 --- a/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/settings/SettingsScreen.kt +++ b/shared/src/commonMain/kotlin/com/prof18/moneyflow/presentation/settings/SettingsScreen.kt @@ -1,6 +1,7 @@ package com.prof18.moneyflow.presentation.settings import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.material.MaterialTheme import androidx.compose.material.Scaffold @@ -27,6 +28,7 @@ internal fun SettingsScreen( onBiometricEnabled: (Boolean) -> Unit, hideSensitiveDataState: Boolean, onHideSensitiveDataEnabled: (Boolean) -> Unit, + paddingValues: PaddingValues, ) { SettingsScreenContent( isBiometricSupported = biometricAvailabilityChecker.isBiometricSupported(), @@ -34,6 +36,7 @@ internal fun SettingsScreen( onBiometricEnabled = onBiometricEnabled, hideSensitiveDataState = hideSensitiveDataState, onHideSensitiveDataEnabled = onHideSensitiveDataEnabled, + paddingValues = paddingValues, ) } @@ -45,20 +48,25 @@ private fun SettingsScreenContent( onBiometricEnabled: (Boolean) -> Unit, hideSensitiveDataState: Boolean, onHideSensitiveDataEnabled: (Boolean) -> Unit, + paddingValues: PaddingValues, ) { Scaffold( + modifier = Modifier.padding(paddingValues), topBar = { Text( text = stringResource(Res.string.settings_screen), style = MaterialTheme.typography.h4, modifier = Modifier + .padding(paddingValues) .padding(horizontal = Margins.regular) .padding(top = Margins.regular), ) }, - content = { + content = { innerPadding -> Column( modifier = Modifier + .padding(paddingValues) + .padding(innerPadding) .padding(top = Margins.regular), ) { Text( @@ -96,6 +104,7 @@ private fun SettingsScreenPreview() { onBiometricEnabled = {}, hideSensitiveDataState = true, onHideSensitiveDataEnabled = {}, + paddingValues = PaddingValues(), ) } }