From 80f7197c2972112deb6d2b5573b5a588a31d63e1 Mon Sep 17 00:00:00 2001 From: shy-tangerine <177993073+shy-tangerine@users.noreply.github.com> Date: Thu, 8 Oct 2026 08:31:01 -0300 Subject: [PATCH 1/2] feat: add offline currency conversion for period totals Add display-only conversion with manual overrides, Frankfurter reference rates, persistent cache and paired current/historical period totals. Keep original transactions and budget calculations unchanged. Prepared with Instinct assistance. --- .../ui/currency/CurrencyConversionUiTest.kt | 30 +++++ app/src/main/AndroidManifest.xml | 2 + .../currency/CurrencyConversionRepository.kt | 103 +++++++++++++++ .../domain/currency/CurrencyConversion.kt | 44 +++++++ .../presentation/ui/analytics/Analytics.kt | 6 + .../ui/analytics/AnalyticsScreen.kt | 87 ++++++------- .../ui/currency/CurrencyConversionUi.kt | 118 ++++++++++++++++++ .../currency/CurrencyConversionViewModel.kt | 37 ++++++ .../ui/editor/sheets/BudgetPeriodSheet.kt | 7 ++ .../history/sections/BudgetDisplaySection.kt | 7 ++ .../minus/presentation/ui/home/MainScreen.kt | 91 +++++++------- .../presentation/ui/settings/Settings.kt | 2 + .../ui/settings/SettingsScreen.kt | 1 + .../res/values-es/currency_conversion.xml | 27 ++++ .../res/values-fr/currency_conversion.xml | 27 ++++ .../main/res/values/currency_conversion.xml | 27 ++++ .../minus/data/currency/CurrencyCacheTest.kt | 52 ++++++++ .../minus/data/currency/ReferenceRateTest.kt | 22 ++++ .../domain/currency/CurrencyConversionTest.kt | 25 ++++ .../CurrencyConversionScreenshotTest.kt | 33 +++++ ...cyConversionScreenshotTest_missingRate.png | Bin 0 -> 11357 bytes ...onScreenshotTest_pairedReferenceTotals.png | Bin 0 -> 54938 bytes 22 files changed, 662 insertions(+), 86 deletions(-) create mode 100644 app/src/androidTest/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUiTest.kt create mode 100644 app/src/main/java/com/serranoie/app/minus/data/currency/CurrencyConversionRepository.kt create mode 100644 app/src/main/java/com/serranoie/app/minus/domain/currency/CurrencyConversion.kt create mode 100644 app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt create mode 100644 app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionViewModel.kt create mode 100644 app/src/main/res/values-es/currency_conversion.xml create mode 100644 app/src/main/res/values-fr/currency_conversion.xml create mode 100644 app/src/main/res/values/currency_conversion.xml create mode 100644 app/src/test/java/com/serranoie/app/minus/data/currency/CurrencyCacheTest.kt create mode 100644 app/src/test/java/com/serranoie/app/minus/data/currency/ReferenceRateTest.kt create mode 100644 app/src/test/java/com/serranoie/app/minus/domain/currency/CurrencyConversionTest.kt create mode 100644 app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_missingRate.png create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_pairedReferenceTotals.png diff --git a/app/src/androidTest/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUiTest.kt b/app/src/androidTest/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUiTest.kt new file mode 100644 index 00000000..bc6e32b1 --- /dev/null +++ b/app/src/androidTest/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUiTest.kt @@ -0,0 +1,30 @@ +package com.serranoie.app.minus.presentation.ui.currency + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithText +import com.serranoie.app.minus.domain.currency.ConversionPreferences +import com.serranoie.app.minus.domain.currency.ExchangeRate +import com.serranoie.app.minus.presentation.ui.theme.MinusTheme +import org.junit.Rule +import org.junit.Test +import java.math.BigDecimal + +class CurrencyConversionUiTest { + @get:Rule val rule = createAndroidComposeRule() + private val prefs = ConversionPreferences("BRL", referenceRates = listOf(ExchangeRate("USD", "BRL", BigDecimal("5"), "2026-10-08", false))) + @Test fun showsPairedTotals() { + rule.setContent { MinusTheme { CurrencyPeriodSummaryContent("USD", BigDecimal("100"), BigDecimal("12.50"), prefs, false) } } + rule.onNodeWithText("Budget: USD 100.00 ≈ BRL 500.00").assertIsDisplayed() + rule.onNodeWithText("Spent: USD 12.50 ≈ BRL 62.50").assertIsDisplayed() + } + @Test fun missingRateIsExplicit() { + rule.setContent { MinusTheme { CurrencyPeriodSummaryContent("EUR", BigDecimal("100"), BigDecimal("12.50"), prefs, false) } } + rule.onNodeWithText("No saved EUR/BRL rate. Set a rate in Settings.").assertIsDisplayed() + } + @Test fun privacyHidesConversion() { + rule.setContent { MinusTheme { CurrencyPeriodSummaryContent("USD", BigDecimal("100"), BigDecimal("12.50"), prefs, true) } } + rule.onNodeWithText("Budget: USD 100.00 ≈ BRL 500.00").assertDoesNotExist() + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 326e8cf8..aca3043c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + diff --git a/app/src/main/java/com/serranoie/app/minus/data/currency/CurrencyConversionRepository.kt b/app/src/main/java/com/serranoie/app/minus/data/currency/CurrencyConversionRepository.kt new file mode 100644 index 00000000..122556dc --- /dev/null +++ b/app/src/main/java/com/serranoie/app/minus/data/currency/CurrencyConversionRepository.kt @@ -0,0 +1,103 @@ +package com.serranoie.app.minus.data.currency + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import com.serranoie.app.minus.domain.currency.ConversionPreferences +import com.serranoie.app.minus.domain.currency.ExchangeRate +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.withContext +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import java.math.BigDecimal +import java.net.URL +import java.time.LocalDate +import javax.inject.Inject +import javax.inject.Singleton +import javax.net.ssl.HttpsURLConnection + +@Serializable +internal data class RateRecord(val base: String, val quote: String, val rate: String, val date: String, val manual: Boolean) { + fun domain() = ExchangeRate(base, quote, rate.toBigDecimal(), date, manual) +} +@Serializable +internal data class ConversionRecord(val displayCurrency: String? = null, val manual: List = emptyList(), val reference: List = emptyList()) { + fun domain() = ConversionPreferences(displayCurrency, manual.map { it.domain() }, reference.map { it.domain() }) +} +@Serializable +internal data class FrankfurterRate(val date: String, val base: String, val quote: String, val rate: kotlinx.serialization.json.JsonPrimitive) + +// Parse decimal literals without a lossy Double intermediate. +internal fun parseReferenceRate(body: String, base: String, quote: String, today: LocalDate = LocalDate.now()): ExchangeRate { + val rows = Json { ignoreUnknownKeys = true }.decodeFromString>(body) + val row = rows.single { it.base == base && it.quote == quote } + require(!row.rate.isString) + return ExchangeRate(row.base, row.quote, row.rate.content.toBigDecimal(), row.date, false).also { + require(!LocalDate.parse(it.date).isAfter(today)) + } +} + +@Singleton +class CurrencyConversionRepository @Inject constructor(private val dataStore: DataStore) { + private val key = stringPreferencesKey("currency_conversion_v1") + private val json = Json { ignoreUnknownKeys = true } + private fun read(raw: String?): ConversionRecord = runCatching { + json.decodeFromString(raw ?: "{}").also { it.domain() } + }.getOrDefault(ConversionRecord()) + val preferences = dataStore.data.map { read(it[key]).domain() } + + suspend fun setDisplayCurrency(code: String?) { + require(code == null || code.matches(Regex("[A-Z]{3}"))) + dataStore.edit { it[key] = json.encodeToString(read(it[key]).copy(displayCurrency = code)) } + } + suspend fun setManualRate(base: String, quote: String, rate: BigDecimal) { + require(rate.precision() <= 30 && rate.scale() in -18..24) + val checked = ExchangeRate(base, quote, rate, LocalDate.now().toString(), true) + val record = RateRecord(checked.base, checked.quote, checked.rate.toPlainString(), checked.date, true) + dataStore.edit { + val old = read(it[key]) + // Keep only one manual override for the pair, including its inverse. + val remaining = old.manual.filterNot { r -> setOf(r.base, r.quote) == setOf(base, quote) } + it[key] = json.encodeToString(old.copy(manual = remaining + record)) + } + } + suspend fun removeManualRate(base: String, quote: String) { + dataStore.edit { + val old = read(it[key]) + it[key] = json.encodeToString(old.copy(manual = old.manual.filterNot { r -> r.base == base && r.quote == quote })) + } + } + suspend fun fetchReferenceRate(base: String, quote: String) { + require(base.matches(Regex("[A-Z]{3}")) && quote.matches(Regex("[A-Z]{3}")) && base != quote) + val rate = withContext(Dispatchers.IO) { + val connection = URL("https://api.frankfurter.dev/v2/rates?base=$base"es=$quote").openConnection() as HttpsURLConnection + connection.instanceFollowRedirects = false + connection.connectTimeout = 15000 + connection.readTimeout = 15000 + connection.setRequestProperty("Accept", "application/json") + try { + check(connection.responseCode == 200) { "Reference rate request failed (${connection.responseCode})" } + val body = connection.inputStream.bufferedReader().use { reader -> + val chars = CharArray(65537) + var count = 0 + while (count < chars.size) { + val n = reader.read(chars, count, chars.size - count) + if (n < 0) break + count += n + } + check(count <= 65536) { "Reference rate response too large" } + String(chars, 0, count) + } + parseReferenceRate(body, base, quote) + } finally { connection.disconnect() } + } + val record = RateRecord(rate.base, rate.quote, rate.rate.toPlainString(), rate.date, false) + dataStore.edit { + val old = read(it[key]) + it[key] = json.encodeToString(old.copy(reference = old.reference.filterNot { r -> setOf(r.base, r.quote) == setOf(base, quote) } + record)) + } + } +} diff --git a/app/src/main/java/com/serranoie/app/minus/domain/currency/CurrencyConversion.kt b/app/src/main/java/com/serranoie/app/minus/domain/currency/CurrencyConversion.kt new file mode 100644 index 00000000..2ba84378 --- /dev/null +++ b/app/src/main/java/com/serranoie/app/minus/domain/currency/CurrencyConversion.kt @@ -0,0 +1,44 @@ +package com.serranoie.app.minus.domain.currency + +import java.math.BigDecimal +import java.math.MathContext +import java.time.LocalDate + +/** Rates are display preferences, never transaction updates. */ +data class ExchangeRate( + val base: String, + val quote: String, + val rate: BigDecimal, + val date: String, + val manual: Boolean, +) { + init { + require(base.matches(Regex("[A-Z]{3}")) && quote.matches(Regex("[A-Z]{3}"))) + require(base != quote && rate.signum() > 0 && rate.precision() <= 40) + require(rate.scale() in -40..100) + LocalDate.parse(date) + } + val key: String get() = "$base/$quote" +} + +data class ConversionPreferences( + val displayCurrency: String? = null, + val manualRates: List = emptyList(), + val referenceRates: List = emptyList(), +) { + fun rateFor(base: String, quote: String): ExchangeRate? { + fun find(rates: List): ExchangeRate? { + rates.firstOrNull { it.base == base && it.quote == quote }?.let { return it } + return rates.firstOrNull { it.base == quote && it.quote == base }?.let { + it.copy(base = base, quote = quote, rate = BigDecimal.ONE.divide(it.rate, MathContext.DECIMAL128)) + } + } + // A manual rate in either direction always wins over a reference rate. + return find(manualRates) ?: find(referenceRates) + } + fun convert(amount: BigDecimal, base: String): BigDecimal? { + val quote = displayCurrency ?: return null + if (base == quote) return amount + return rateFor(base, quote)?.let { amount.multiply(it.rate, MathContext.DECIMAL128) } + } +} diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt index 7509a8f3..d3d33171 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt @@ -498,6 +498,12 @@ fun Analytics( } Spacer(modifier = Modifier.height(16.dp)) + com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummary( + base = shown.currencyCode, + budget = shown.wholeBudget, + spent = shown.budgetStateForDisplay?.totalSpentInPeriod ?: shown.spends.sumOf { it.amount }, + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + ) BudgetGraph( state = shown, onGranularityChanged = actions.onGranularityChanged, diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/AnalyticsScreen.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/AnalyticsScreen.kt index 9d3db885..151667db 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/AnalyticsScreen.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/AnalyticsScreen.kt @@ -1,5 +1,6 @@ package com.serranoie.app.minus.presentation.ui.analytics +import com.serranoie.app.minus.presentation.ui.currency.CurrencyConversionHost import androidx.activity.compose.BackHandler import androidx.activity.result.ActivityResultRegistryOwner import androidx.compose.runtime.Composable @@ -39,46 +40,48 @@ fun AnalyticsScreen( } } - Analytics( - state = uiState.displayState, - archivedBudgets = uiState.archivedBudgets, - categories = uiState.categories, - actions = AnalyticsActions( - onCreateNewPeriod = { - viewModel.onCreateNewPeriod() - }, - onClose = { - viewModel.onClose() - }, - onNavigateToSubscriptions = onNavigateToSubscriptions, - onMarkCreditPaid = { - viewModel.onMarkCreditPaid() - }, - onPayTransactionClick = { txId -> - viewModel.onPayTransactionClick(txId) - }, - onCutoffDayChanged = { day -> - viewModel.onCutoffDayChanged(day) - }, - onHistoricalPeriodSelected = { periodId -> - viewModel.onPeriodSelected(periodId) - }, - onTutorialCompleted = { hasSpends -> - viewModel.onTutorialCompleted(hasSpends) - }, - onGranularityChanged = { granularity -> - viewModel.onGranularityChanged(granularity) - }, - onUpdateTransaction = { tx -> - viewModel.updateTransaction(tx) - }, - onDeleteTransaction = { tx -> - viewModel.deleteTransaction(tx) - }, - onDeleteArchivedPeriod = { periodId -> - viewModel.deleteArchivedPeriod(periodId) - }, - ), - activityResultRegistryOwner = activityResultRegistryOwner, - ) + CurrencyConversionHost { + Analytics( + state = uiState.displayState, + archivedBudgets = uiState.archivedBudgets, + categories = uiState.categories, + actions = AnalyticsActions( + onCreateNewPeriod = { + viewModel.onCreateNewPeriod() + }, + onClose = { + viewModel.onClose() + }, + onNavigateToSubscriptions = onNavigateToSubscriptions, + onMarkCreditPaid = { + viewModel.onMarkCreditPaid() + }, + onPayTransactionClick = { txId -> + viewModel.onPayTransactionClick(txId) + }, + onCutoffDayChanged = { day -> + viewModel.onCutoffDayChanged(day) + }, + onHistoricalPeriodSelected = { periodId -> + viewModel.onPeriodSelected(periodId) + }, + onTutorialCompleted = { hasSpends -> + viewModel.onTutorialCompleted(hasSpends) + }, + onGranularityChanged = { granularity -> + viewModel.onGranularityChanged(granularity) + }, + onUpdateTransaction = { tx -> + viewModel.updateTransaction(tx) + }, + onDeleteTransaction = { tx -> + viewModel.deleteTransaction(tx) + }, + onDeleteArchivedPeriod = { periodId -> + viewModel.deleteArchivedPeriod(periodId) + }, + ), + activityResultRegistryOwner = activityResultRegistryOwner, + ) + } } diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt new file mode 100644 index 00000000..74dd8222 --- /dev/null +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt @@ -0,0 +1,118 @@ +package com.serranoie.app.minus.presentation.ui.currency + +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.serranoie.app.minus.R +import com.serranoie.app.minus.domain.currency.ConversionPreferences +import com.serranoie.app.minus.domain.model.SupportedCurrency +import java.math.BigDecimal +import java.math.RoundingMode +import java.util.Locale + +private fun normalize(code: String) = code.trim().uppercase(Locale.ROOT) +private fun known(code: String) = SupportedCurrency.findByCode(code) != null || code in setOf("IRR", "IRT") +private fun formatted(amount: BigDecimal, currency: String): String { + val digits = SupportedCurrency.findByCode(currency)?.defaultFractionDigits ?: 2 + return "$currency ${amount.setScale(digits.coerceAtLeast(0), RoundingMode.HALF_EVEN).toPlainString()}" +} + +@Composable +fun CurrencyConversionSettings(viewModel: CurrencyConversionViewModel = hiltViewModel()) { + val preferences by viewModel.preferences.collectAsStateWithLifecycle() + val busy by viewModel.busy.collectAsStateWithLifecycle() + val failed by viewModel.failed.collectAsStateWithLifecycle() + var expanded by remember { mutableStateOf(false) } + var display by remember(preferences.displayCurrency) { mutableStateOf(preferences.displayCurrency ?: "") } + var pickDisplay by remember { mutableStateOf(false) } + var base by remember { mutableStateOf("USD") } + var quote by remember { mutableStateOf("BRL") } + var value by remember { mutableStateOf("") } + val from = normalize(base) + val to = normalize(quote) + val validPair = known(from) && known(to) && from != to + val parsed = value.trim().toBigDecimalOrNull()?.takeIf { it.signum() > 0 && it.precision() <= 30 && it.scale() in -18..24 } + if (pickDisplay) { + AlertDialog(onDismissRequest = { pickDisplay = false }, + title = { Text(stringResource(R.string.conversion_display)) }, + text = { + androidx.compose.foundation.lazy.LazyColumn(Modifier.heightIn(max = 320.dp)) { + val codes = (SupportedCurrency.ALL.map { it.code } + listOf("IRR", "IRT")).distinct().sorted() + items(codes.size) { index -> + val code = codes[index] + TextButton(onClick = { display = code; pickDisplay = false }) { + Text("$code ${SupportedCurrency.findByCode(code)?.displayName() ?: code}") + } + } + } + }, confirmButton = { TextButton(onClick = { pickDisplay = false }) { Text(stringResource(android.R.string.cancel)) } }) + } + OutlinedCard(Modifier.fillMaxWidth().padding(horizontal = 16.dp, vertical = 8.dp)) { + Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + TextButton(onClick = { expanded = !expanded }) { Text(stringResource(R.string.conversion_title)) } + Text(stringResource(R.string.conversion_display_current, preferences.displayCurrency ?: stringResource(R.string.conversion_off))) + if (expanded) { + Text(stringResource(R.string.conversion_description), style = MaterialTheme.typography.bodySmall) + OutlinedTextField(display, { display = it.take(3) }, label = { Text(stringResource(R.string.conversion_display)) }, singleLine = true, modifier = Modifier.fillMaxWidth()) + TextButton(onClick = { pickDisplay = true }, enabled = !busy) { Text(stringResource(R.string.conversion_choose)) } + Row { + TextButton(onClick = { viewModel.display(normalize(display)) }, enabled = !busy && known(normalize(display))) { Text(stringResource(R.string.conversion_save_display)) } + TextButton(onClick = { viewModel.display(null) }, enabled = !busy) { Text(stringResource(R.string.conversion_disable)) } + } + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + OutlinedTextField(base, { base = it.take(3) }, label = { Text(stringResource(R.string.conversion_from)) }, singleLine = true, modifier = Modifier.weight(1f)) + OutlinedTextField(quote, { quote = it.take(3) }, label = { Text(stringResource(R.string.conversion_to)) }, singleLine = true, modifier = Modifier.weight(1f)) + } + OutlinedTextField(value, { value = it.take(60) }, label = { Text(stringResource(R.string.conversion_rate)) }, supportingText = { Text(stringResource(R.string.conversion_rate_help)) }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), singleLine = true, modifier = Modifier.fillMaxWidth()) + TextButton(onClick = { parsed?.let { viewModel.manual(from, to, it) } }, enabled = !busy && validPair && parsed != null) { Text(stringResource(R.string.conversion_save_manual)) } + TextButton(onClick = { viewModel.fetch(from, to) }, enabled = !busy && validPair && from != "IRT" && to != "IRT") { Text(stringResource(R.string.conversion_fetch)) } + if (busy) LinearProgressIndicator(Modifier.fillMaxWidth()) + if (failed) Text(stringResource(R.string.conversion_error), color = MaterialTheme.colorScheme.error) + Text(stringResource(R.string.conversion_reference_note), style = MaterialTheme.typography.bodySmall) + preferences.manualRates.forEach { rate -> + Text(stringResource(R.string.conversion_manual_record, rate.base, rate.quote, rate.rate.toPlainString())) + TextButton(onClick = { viewModel.remove(rate.base, rate.quote) }, enabled = !busy) { Text(stringResource(R.string.conversion_remove, rate.base, rate.quote)) } + } + preferences.referenceRates.forEach { rate -> Text(stringResource(R.string.conversion_reference_record, rate.base, rate.quote, rate.rate.toPlainString(), rate.date), style = MaterialTheme.typography.bodySmall) } + } + } + } +} + +val LocalConversionPreferences = staticCompositionLocalOf { ConversionPreferences() } + +@Composable +fun CurrencyConversionHost(viewModel: CurrencyConversionViewModel = hiltViewModel(), content: @Composable () -> Unit) { + val preferences by viewModel.preferences.collectAsStateWithLifecycle() + CompositionLocalProvider(LocalConversionPreferences provides preferences, content = content) +} + +@Composable +fun CurrencyPeriodSummary(base: String, budget: BigDecimal, spent: BigDecimal, modifier: Modifier = Modifier) { + CurrencyPeriodSummaryContent(base, budget, spent, LocalConversionPreferences.current, + com.serranoie.app.minus.presentation.util.LocalCensorMode.current, modifier) +} + +@Composable +internal fun CurrencyPeriodSummaryContent(base: String, budget: BigDecimal, spent: BigDecimal, preferences: ConversionPreferences, censored: Boolean, modifier: Modifier = Modifier) { + val target = preferences.displayCurrency ?: return + if (target == base || censored) return + val rate = preferences.rateFor(base, target) + Column(modifier, verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text(stringResource(R.string.conversion_title), style = MaterialTheme.typography.labelLarge) + if (rate == null) { + Text(stringResource(R.string.conversion_missing, base, target), style = MaterialTheme.typography.bodySmall) + } else { + Text(stringResource(R.string.conversion_budget_line, formatted(budget, base), formatted(preferences.convert(budget, base)!!, target)), style = MaterialTheme.typography.bodyMedium) + Text(stringResource(R.string.conversion_spent_line, formatted(spent, base), formatted(preferences.convert(spent, base)!!, target)), style = MaterialTheme.typography.bodyMedium) + Text(if (rate.manual) stringResource(R.string.conversion_manual_note) else stringResource(R.string.conversion_cached_note, rate.date), style = MaterialTheme.typography.bodySmall) + } + } +} diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionViewModel.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionViewModel.kt new file mode 100644 index 00000000..de1304f0 --- /dev/null +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionViewModel.kt @@ -0,0 +1,37 @@ +package com.serranoie.app.minus.presentation.ui.currency + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.serranoie.app.minus.data.currency.CurrencyConversionRepository +import com.serranoie.app.minus.domain.currency.ConversionPreferences +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import java.math.BigDecimal +import javax.inject.Inject + +@HiltViewModel +class CurrencyConversionViewModel @Inject constructor(private val repository: CurrencyConversionRepository) : ViewModel() { + val preferences = repository.preferences.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), ConversionPreferences()) + private val _busy = MutableStateFlow(false) + val busy = _busy.asStateFlow() + private val _failed = MutableStateFlow(false) + val failed = _failed.asStateFlow() + private fun action(block: suspend () -> Unit) { + if (_busy.value) return + viewModelScope.launch { + _busy.value = true + _failed.value = false + try { block() } catch (e: CancellationException) { throw e } catch (_: Exception) { _failed.value = true } + finally { _busy.value = false } + } + } + fun display(code: String?) = action { repository.setDisplayCurrency(code) } + fun manual(base: String, quote: String, rate: BigDecimal) = action { repository.setManualRate(base, quote, rate) } + fun remove(base: String, quote: String) = action { repository.removeManualRate(base, quote) } + fun fetch(base: String, quote: String) = action { repository.fetchReferenceRate(base, quote) } +} diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/editor/sheets/BudgetPeriodSheet.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/editor/sheets/BudgetPeriodSheet.kt index 5132c984..be9d94bd 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/editor/sheets/BudgetPeriodSheet.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/editor/sheets/BudgetPeriodSheet.kt @@ -393,6 +393,13 @@ private fun ViewBudgetContent( "BudgetDisplay input totalBudget=$totalBudget budgetStateTotal=${budgetState?.totalBudget} budgetSettingsTotal=${budgetSettings?.totalBudget} rollOverLimit=${budgetSettings?.rollOverLimit} rollOverCarry=${budgetSettings?.rollOverCarryForward}" } + com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummary( + base = currencyCode, + budget = budgetState?.totalBudget ?: totalBudget, + spent = totalSpent, + modifier = Modifier.padding(bottom = 12.dp), + ) + SpendBudgetCard( modifier = Modifier diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/history/sections/BudgetDisplaySection.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/history/sections/BudgetDisplaySection.kt index 5d72f650..e9a8f082 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/history/sections/BudgetDisplaySection.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/history/sections/BudgetDisplaySection.kt @@ -25,6 +25,13 @@ internal fun LazyListScope.budgetDisplaySection( creditOwed: BigDecimal = BigDecimal.ZERO, hintModifier: Modifier = Modifier, ) { + item("currency-conversion") { + com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummary( + base = currencyCode, + budget = budgetState?.totalBudget ?: budgetSettings?.totalBudget ?: BigDecimal.ZERO, + spent = budgetState?.totalSpentInPeriod ?: BigDecimal.ZERO, + ) + } item("budget-display") { val startDate = budgetSettings?.startDate?.let { Date.from(it.atStartOfDay(ZoneId.systemDefault()).toInstant()) diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/home/MainScreen.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/home/MainScreen.kt index 1587d4d4..9a6a2b1e 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/home/MainScreen.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/home/MainScreen.kt @@ -1,5 +1,6 @@ package com.serranoie.app.minus.presentation.ui.home +import com.serranoie.app.minus.presentation.ui.currency.CurrencyConversionHost import android.os.Build import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -165,51 +166,53 @@ fun MainScreen( } }, ) { - BudgetFormulaHost { - MainScreenContent( - mainScreenState = mainScreenState, - budgetUiState = budgetUiState, - actions = - MainScreenActions( - onProcessIntent = { intent -> - when (intent) { - is MainScreenUiIntent.ProcessBudgetTransactionIntent -> { - budgetViewModel.processIntent(intent.intent) + CurrencyConversionHost { + BudgetFormulaHost { + MainScreenContent( + mainScreenState = mainScreenState, + budgetUiState = budgetUiState, + actions = + MainScreenActions( + onProcessIntent = { intent -> + when (intent) { + is MainScreenUiIntent.ProcessBudgetTransactionIntent -> { + budgetViewModel.processIntent(intent.intent) + } + + is MainScreenUiIntent.ProcessBudgetEditorIntent -> { + budgetViewModel.processIntent(intent.intent) + } + + is MainScreenUiIntent.ProcessBudgetNumpadIntent -> { + budgetViewModel.processIntent(intent.intent) + } + + else -> { + mainScreenViewModel.processIntent(intent, tutorialStage) + } } - - is MainScreenUiIntent.ProcessBudgetEditorIntent -> { - budgetViewModel.processIntent(intent.intent) - } - - is MainScreenUiIntent.ProcessBudgetNumpadIntent -> { - budgetViewModel.processIntent(intent.intent) - } - - else -> { - mainScreenViewModel.processIntent(intent, tutorialStage) - } - } - }, - onAdvanceTutorial = { expected -> - mainScreenViewModel.processIntent( - MainScreenUiIntent.AdvanceTutorial(expected), - tutorialStage - ) - }, - onNavigateToAnalytics = onNavigateToAnalytics, - onNavigateToSettings = onNavigateToSettings, - onUnresolvedSurplusBannerClick = budgetViewModel::onUnresolvedSurplusBannerClicked, - onLeftoverChoice = budgetViewModel::onLeftoverChoice, - onCreateCategory = budgetViewModel::createCategory, - onPeriodSelected = { period -> - mainScreenViewModel.processIntent( - MainScreenUiIntent.SetSelectedPeriod(period), tutorialStage - ) - }, - ), - openWalletOnStart = openWalletOnStart, - tutorialBoxState = tutorialBoxState, - ) + }, + onAdvanceTutorial = { expected -> + mainScreenViewModel.processIntent( + MainScreenUiIntent.AdvanceTutorial(expected), + tutorialStage + ) + }, + onNavigateToAnalytics = onNavigateToAnalytics, + onNavigateToSettings = onNavigateToSettings, + onUnresolvedSurplusBannerClick = budgetViewModel::onUnresolvedSurplusBannerClicked, + onLeftoverChoice = budgetViewModel::onLeftoverChoice, + onCreateCategory = budgetViewModel::createCategory, + onPeriodSelected = { period -> + mainScreenViewModel.processIntent( + MainScreenUiIntent.SetSelectedPeriod(period), tutorialStage + ) + }, + ), + openWalletOnStart = openWalletOnStart, + tutorialBoxState = tutorialBoxState, + ) + } } } } diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/Settings.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/Settings.kt index 2cc93119..b665a3ea 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/Settings.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/Settings.kt @@ -158,6 +158,7 @@ fun Settings( onNavigateToChangelog: () -> Unit = {}, onNavigateToAppearance: () -> Unit = {}, onBack: () -> Unit = {}, + currencyConversionContent: @Composable () -> Unit = {}, ) { var showNotificationTimePicker by remember { mutableStateOf(false) } var showRecurrentNotificationTimePicker by remember { mutableStateOf(false) } @@ -206,6 +207,7 @@ fun Settings( .padding(paddingValues) .testTag("SettingsScreen"), ) { + item { currencyConversionContent() } if (isCensored) { item { OutlinedCard( diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/SettingsScreen.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/SettingsScreen.kt index 1eeaa30f..f1c54d08 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/settings/SettingsScreen.kt @@ -74,6 +74,7 @@ fun SettingsScreen( } Settings( + currencyConversionContent = { com.serranoie.app.minus.presentation.ui.currency.CurrencyConversionSettings() }, isCensored = uiState.isCensored, notificationHour = uiState.notificationHour, notificationMinute = uiState.notificationMinute, diff --git a/app/src/main/res/values-es/currency_conversion.xml b/app/src/main/res/values-es/currency_conversion.xml new file mode 100644 index 00000000..12ac2f93 --- /dev/null +++ b/app/src/main/res/values-es/currency_conversion.xml @@ -0,0 +1,27 @@ + + + Conversión de moneda + Moneda de visualización: %1$s + Desactivada + Convierte los totales del período solo para visualización. Los importes y monedas originales no cambian. Usa códigos como USD, BRL o EUR. IRT significa tomán tradicional, 10 IRR por IRT; configura su tasa manualmente. + Código de moneda de visualización + Definir moneda de visualización + Desactivar + Moneda de origen + Moneda de destino + Tasa manual + Unidades de la moneda de destino por 1 unidad de origen. Usa punto decimal. Las tasas manuales tienen prioridad en ambas direcciones. + Guardar tasa manual + Obtener tasa de referencia + No se pudo actualizar la tasa. Las tasas guardadas no cambian. Revisa el par y la conexión, o introduce una tasa manual. + Tasas de referencia de Frankfurter. No son tasas en vivo ni de mercado informal. Solo se envían códigos de moneda, nunca importes. Las tasas guardadas funcionan sin conexión. + Manual %1$s/%2$s: %3$s + Eliminar manual %1$s/%2$s + Frankfurter %1$s/%2$s: %3$s · %4$s + No hay tasa %1$s/%2$s guardada. Configúrala en Ajustes. + Presupuesto: %1$s ≈ %2$s + Gastado: %1$s ≈ %2$s + Tasa manual. Solo visualización. + Tasa de referencia Frankfurter guardada del %1$s. Solo visualización. + Elegir moneda + diff --git a/app/src/main/res/values-fr/currency_conversion.xml b/app/src/main/res/values-fr/currency_conversion.xml new file mode 100644 index 00000000..852bc7e5 --- /dev/null +++ b/app/src/main/res/values-fr/currency_conversion.xml @@ -0,0 +1,27 @@ + + + Conversion de devises + Devise affichée : %1$s + Désactivée + Convertit les totaux des périodes uniquement pour affichage. Les montants et devises d’origine restent inchangés. Utilisez des codes comme USD, BRL ou EUR. IRT désigne le toman traditionnel, 10 IRR par IRT ; définissez son taux manuellement. + Code de devise affichée + Définir la devise affichée + Désactiver + Devise source + Devise cible + Taux manuel + Unités de la devise cible pour 1 unité source. Utilisez un point décimal. Les taux manuels sont prioritaires dans les deux sens. + Enregistrer le taux manuel + Obtenir le taux de référence + Impossible de mettre à jour le taux. Les taux enregistrés restent inchangés. Vérifiez la paire et la connexion, ou saisissez un taux manuel. + Taux de référence Frankfurter. Pas des taux de trading en direct ni du marché parallèle. Seuls les codes de devises sont envoyés, jamais les montants. Les taux enregistrés fonctionnent hors ligne. + Manuel %1$s/%2$s : %3$s + Supprimer le taux manuel %1$s/%2$s + Frankfurter %1$s/%2$s : %3$s · %4$s + Aucun taux %1$s/%2$s enregistré. Définissez-le dans les paramètres. + Budget : %1$s ≈ %2$s + Dépensé : %1$s ≈ %2$s + Taux manuel. Affichage uniquement. + Taux de référence Frankfurter enregistré du %1$s. Affichage uniquement. + Choisir une devise + diff --git a/app/src/main/res/values/currency_conversion.xml b/app/src/main/res/values/currency_conversion.xml new file mode 100644 index 00000000..8b566f67 --- /dev/null +++ b/app/src/main/res/values/currency_conversion.xml @@ -0,0 +1,27 @@ + + + Currency conversion + Display currency: %1$s + Off + Convert period totals for display only. Original amounts and period currencies stay unchanged. Use currency codes such as USD, BRL or EUR. IRT means traditional toman, 10 IRR per IRT; set its rate manually. + Display currency code + Set display currency + Turn off + From currency + To currency + Manual rate + Units of the target currency per 1 source unit. Use a decimal point. Manual rates override reference rates in both directions. + Save manual rate + Fetch reference rate + Could not update the rate. Your saved rates are unchanged. Check the pair and connection, or enter a manual rate. + Frankfurter reference rates. Not live trading or street-market rates. Only currency codes are sent, never amounts. Fetch when needed; saved rates work offline. + Manual %1$s/%2$s: %3$s + Remove manual %1$s/%2$s + Frankfurter %1$s/%2$s: %3$s · %4$s + No saved %1$s/%2$s rate. Set a rate in Settings. + Budget: %1$s ≈ %2$s + Spent: %1$s ≈ %2$s + Manual rate. Display only. + Saved Frankfurter reference rate dated %1$s. Display only. + Choose currency + diff --git a/app/src/test/java/com/serranoie/app/minus/data/currency/CurrencyCacheTest.kt b/app/src/test/java/com/serranoie/app/minus/data/currency/CurrencyCacheTest.kt new file mode 100644 index 00000000..6f963d88 --- /dev/null +++ b/app/src/test/java/com/serranoie/app/minus/data/currency/CurrencyCacheTest.kt @@ -0,0 +1,52 @@ +package com.serranoie.app.minus.data.currency + +import androidx.datastore.preferences.core.PreferenceDataStoreFactory +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import kotlinx.coroutines.* +import kotlinx.coroutines.flow.first +import org.junit.Assert.* +import org.junit.Test +import java.math.BigDecimal +import java.nio.file.Files + +class CurrencyCacheTest { + @Test fun manualAndDisplaySurviveRepositoryRecreation() = runBlocking { + val file = Files.createTempDirectory("currency-cache-test").resolve("settings.preferences_pb").toFile() + val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) + try { + val store = PreferenceDataStoreFactory.create(scope = scope, produceFile = { file }) + val repo = CurrencyConversionRepository(store) + repo.setDisplayCurrency("BRL") + repo.setManualRate("USD", "BRL", BigDecimal("5.12")) + val recreated = CurrencyConversionRepository(store) + val settings = recreated.preferences.first() + assertEquals("BRL", settings.displayCurrency) + assertEquals(BigDecimal("51.20"), settings.convert(BigDecimal.TEN, "USD")) + repo.setManualRate("BRL", "USD", BigDecimal("0.2")) + assertEquals(1, repo.preferences.first().manualRates.size) + repo.removeManualRate("BRL", "USD") + assertNull(repo.preferences.first().convert(BigDecimal.TEN, "USD")) + repo.setDisplayCurrency(null) + assertNull(repo.preferences.first().displayCurrency) + } finally { scope.cancel(); file.parentFile?.deleteRecursively() } + } + @Test fun referenceCacheSurvivesDiskReopen() = runBlocking { + val file = Files.createTempDirectory("currency-offline-test").resolve("settings.preferences_pb").toFile() + val job = SupervisorJob() + val scope = CoroutineScope(job + Dispatchers.IO) + val store = PreferenceDataStoreFactory.create(scope = scope, produceFile = { file }) + store.edit { + it[stringPreferencesKey("currency_conversion_v1")] = """{"displayCurrency":"BRL","reference":[{"base":"USD","quote":"BRL","rate":"4.9962","date":"2026-10-08","manual":false}]}""" + } + job.cancelAndJoin() + val secondJob = SupervisorJob() + try { + val reopened = PreferenceDataStoreFactory.create(scope = CoroutineScope(secondJob + Dispatchers.IO), produceFile = { file }) + val settings = CurrencyConversionRepository(reopened).preferences.first() + assertEquals(BigDecimal("49.9620"), settings.convert(BigDecimal.TEN, "USD")) + assertEquals("2026-10-08", settings.referenceRates.single().date) + } finally { secondJob.cancelAndJoin(); file.parentFile?.deleteRecursively() } + } + +} diff --git a/app/src/test/java/com/serranoie/app/minus/data/currency/ReferenceRateTest.kt b/app/src/test/java/com/serranoie/app/minus/data/currency/ReferenceRateTest.kt new file mode 100644 index 00000000..17d130cc --- /dev/null +++ b/app/src/test/java/com/serranoie/app/minus/data/currency/ReferenceRateTest.kt @@ -0,0 +1,22 @@ +package com.serranoie.app.minus.data.currency + +import org.junit.Assert.* +import org.junit.Test +import java.math.BigDecimal +import java.time.LocalDate + +class ReferenceRateTest { + private val today = LocalDate.parse("2026-10-08") + private fun parse(body: String) = parseReferenceRate(body, "USD", "BRL", today) + @Test fun decimalAndDate() { + val rate = parse("""[{"base":"USD","quote":"BRL","rate":4.99621234567890123456,"date":"2026-10-08","providers":[]}]""") + assertEquals(BigDecimal("4.99621234567890123456"), rate.rate) + assertEquals("2026-10-08", rate.date) + assertFalse(rate.manual) + } + @Test(expected = NoSuchElementException::class) fun wrongPair() { parse("""[{"base":"EUR","quote":"BRL","rate":5,"date":"2026-10-08"}]""") } + @Test(expected = IllegalArgumentException::class) fun futureDate() { parse("""[{"base":"USD","quote":"BRL","rate":5,"date":"2026-10-09"}]""") } + @Test(expected = IllegalArgumentException::class) fun negativeRate() { parse("""[{"base":"USD","quote":"BRL","rate":-1,"date":"2026-10-08"}]""") } + @Test(expected = IllegalArgumentException::class) fun quotedRate() { parse("""[{"base":"USD","quote":"BRL","rate":"5","date":"2026-10-08"}]""") } + @Test(expected = IllegalArgumentException::class) fun duplicatePair() { parse("""[{"base":"USD","quote":"BRL","rate":5,"date":"2026-10-08"},{"base":"USD","quote":"BRL","rate":6,"date":"2026-10-08"}]""") } +} diff --git a/app/src/test/java/com/serranoie/app/minus/domain/currency/CurrencyConversionTest.kt b/app/src/test/java/com/serranoie/app/minus/domain/currency/CurrencyConversionTest.kt new file mode 100644 index 00000000..b35be278 --- /dev/null +++ b/app/src/test/java/com/serranoie/app/minus/domain/currency/CurrencyConversionTest.kt @@ -0,0 +1,25 @@ +package com.serranoie.app.minus.domain.currency + +import org.junit.Assert.* +import org.junit.Test +import java.math.BigDecimal + +class CurrencyConversionTest { + private fun rate(base: String = "USD", quote: String = "BRL", value: String = "5", manual: Boolean = false) = ExchangeRate(base, quote, BigDecimal(value), "2026-10-08", manual) + @Test fun direct() { assertEquals(BigDecimal("50"), ConversionPreferences("BRL", referenceRates = listOf(rate())).convert(BigDecimal.TEN, "USD")) } + @Test fun inverse() { assertEquals(0, BigDecimal("10").compareTo(ConversionPreferences("USD", referenceRates = listOf(rate())).convert(BigDecimal("50"), "BRL"))) } + @Test fun manualWins() { assertEquals(BigDecimal("60"), ConversionPreferences("BRL", listOf(rate(value = "6", manual = true)), listOf(rate())).convert(BigDecimal.TEN, "USD")) } + @Test fun inverseManualWinsOverDirectReference() { assertEquals(0, BigDecimal("50").compareTo(ConversionPreferences("BRL", listOf(rate("BRL", "USD", "0.2", true)), listOf(rate(value = "6"))).convert(BigDecimal.TEN, "USD"))) } + @Test fun missingIsNotZero() { assertNull(ConversionPreferences("BRL").convert(BigDecimal.TEN, "USD")) } + @Test fun disabled() { assertNull(ConversionPreferences().convert(BigDecimal.TEN, "USD")) } + @Test fun identity() { assertEquals(BigDecimal.TEN, ConversionPreferences("USD").convert(BigDecimal.TEN, "USD")) } + @Test fun negativeAmount() { assertEquals(BigDecimal("-50"), ConversionPreferences("BRL", referenceRates = listOf(rate())).convert(BigDecimal("-10"), "USD")) } + @Test fun preservesPrecision() { assertEquals(BigDecimal("0.1234567890123456789"), ConversionPreferences("BRL", referenceRates = listOf(rate(value = "0.1234567890123456789"))).convert(BigDecimal.ONE, "USD")) } + @Test(expected = IllegalArgumentException::class) fun rejectsZero() { rate(value = "0") } + @Test(expected = IllegalArgumentException::class) fun rejectsNegative() { rate(value = "-1") } + @Test(expected = IllegalArgumentException::class) fun rejectsBadCode() { rate(base = "USD?x") } + @Test(expected = IllegalArgumentException::class) fun rejectsSamePair() { rate(quote = "USD") } + @Test fun originalUntouched() { val amount = BigDecimal("10.55"); ConversionPreferences("BRL", referenceRates = listOf(rate())).convert(amount, "USD"); assertEquals(BigDecimal("10.55"), amount) } + @Test fun manualToman() { assertEquals(0, BigDecimal("100").compareTo(ConversionPreferences("IRT", listOf(rate("IRR", "IRT", "0.1", true))).convert(BigDecimal("1000"), "IRR"))) } + @Test fun inverseNonTerminating() { assertNotNull(ConversionPreferences("USD", referenceRates = listOf(rate(value = "3000000000000000000"))).convert(BigDecimal.ONE, "BRL")) } +} diff --git a/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt new file mode 100644 index 00000000..633c0694 --- /dev/null +++ b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt @@ -0,0 +1,33 @@ +package com.serranoie.app.minus.presentation.ui.screenshot + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Surface +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import app.cash.paparazzi.DeviceConfig +import app.cash.paparazzi.Paparazzi +import com.android.ide.common.rendering.api.SessionParams +import com.serranoie.app.minus.domain.currency.ConversionPreferences +import com.serranoie.app.minus.domain.currency.ExchangeRate +import com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummaryContent +import com.serranoie.app.minus.presentation.ui.theme.MinusTheme +import org.junit.Rule +import org.junit.Test +import java.math.BigDecimal + +class CurrencyConversionScreenshotTest { + @get:Rule val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_5, renderingMode = SessionParams.RenderingMode.SHRINK) + @Test fun pairedReferenceTotals() { + paparazzi.snapshot { + MinusTheme { Surface { + CurrencyPeriodSummaryContent("USD", BigDecimal("100"), BigDecimal("12.50"), + ConversionPreferences("BRL", referenceRates = listOf(ExchangeRate("USD", "BRL", BigDecimal("4.9962"), "2026-10-08", false))), false, Modifier.padding(16.dp)) + } } + } + } + @Test fun missingRate() { + paparazzi.snapshot { + MinusTheme { Surface { CurrencyPeriodSummaryContent("USD", BigDecimal("100"), BigDecimal("12.50"), ConversionPreferences("BRL"), false, Modifier.padding(16.dp)) } } + } + } +} diff --git a/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_missingRate.png b/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_missingRate.png new file mode 100644 index 0000000000000000000000000000000000000000..94b8634a3025d3594e121a089302830124578d72 GIT binary patch literal 11357 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 literal 0 HcmV?d00001 diff --git a/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_pairedReferenceTotals.png b/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_pairedReferenceTotals.png new file mode 100644 index 0000000000000000000000000000000000000000..0c466215bd273084b111d6846b73fb4138fd130c GIT binary patch literal 54938 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
q9oK!&k=SS1Ps4rncauIk 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 literal 0 HcmV?d00001 From 9628243554ec6b4f3f1db2fc4c1612e9a41220da Mon Sep 17 00:00:00 2001 From: shy-tangerine <177993073+shy-tangerine@users.noreply.github.com> Date: Thu, 8 Oct 2026 08:53:45 -0300 Subject: [PATCH 2/2] fix: address currency summary review findings Guard no-period totals, format amounts for the app locale, and show saved manual-rate dates. Add formatter and screenshot regressions. Prepared with Instinct assistance. --- .../presentation/ui/analytics/Analytics.kt | 14 ++++---- .../ui/currency/CurrencyAmountFormat.kt | 18 ++++++++++ .../ui/currency/CurrencyConversionUi.kt | 13 +++---- .../res/values-es/currency_conversion.xml | 2 +- .../res/values-fr/currency_conversion.xml | 2 +- .../main/res/values/currency_conversion.xml | 2 +- .../ui/currency/CurrencyAmountFormatTest.kt | 17 ++++++++++ .../ui/screenshot/AnalyticsScreenshotTest.kt | 13 +++++++ .../CurrencyConversionScreenshotTest.kt | 32 ++++++++++++++++++ ...t_analyticsNoPeriodWithSavedConversion.png | Bin 0 -> 52479 bytes ...nshotTest_localizedManualTotalsAndDate.png | Bin 0 -> 57383 bytes ...otTest_pairedManualTotalsShowSavedDate.png | Bin 0 -> 22669 bytes ...nshotTest_localizedManualTotalsAndDate.png | Bin 0 -> 26109 bytes 13 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormat.kt create mode 100644 app/src/test/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormatTest.kt create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_AnalyticsScreenshotTest_analyticsNoPeriodWithSavedConversion.png create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionFrenchScreenshotTest_localizedManualTotalsAndDate.png create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionScreenshotTest_pairedManualTotalsShowSavedDate.png create mode 100644 app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionSpanishScreenshotTest_localizedManualTotalsAndDate.png diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt index d3d33171..2082a0ac 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/analytics/Analytics.kt @@ -498,12 +498,14 @@ fun Analytics( } Spacer(modifier = Modifier.height(16.dp)) - com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummary( - base = shown.currencyCode, - budget = shown.wholeBudget, - spent = shown.budgetStateForDisplay?.totalSpentInPeriod ?: shown.spends.sumOf { it.amount }, - modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), - ) + if (shown.budgetSettingsForDisplay != null) { + com.serranoie.app.minus.presentation.ui.currency.CurrencyPeriodSummary( + base = shown.currencyCode, + budget = shown.wholeBudget, + spent = shown.budgetStateForDisplay?.totalSpentInPeriod ?: shown.spends.sumOf { it.amount }, + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + ) + } BudgetGraph( state = shown, onGranularityChanged = actions.onGranularityChanged, diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormat.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormat.kt new file mode 100644 index 00000000..caf2ce00 --- /dev/null +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormat.kt @@ -0,0 +1,18 @@ +package com.serranoie.app.minus.presentation.ui.currency + +import com.serranoie.app.minus.domain.model.SupportedCurrency +import java.math.BigDecimal +import java.math.RoundingMode +import java.text.NumberFormat +import java.util.Locale + +internal fun formatConversionAmount(amount: BigDecimal, currency: String, locale: Locale): String { + val digits = (SupportedCurrency.findByCode(currency)?.defaultFractionDigits ?: 2).coerceAtLeast(0) + val rounded = amount.setScale(digits, RoundingMode.HALF_EVEN) + val formatter = NumberFormat.getNumberInstance(locale).apply { + minimumFractionDigits = digits + maximumFractionDigits = digits + roundingMode = RoundingMode.HALF_EVEN + } + return "$currency ${formatter.format(rounded)}" +} diff --git a/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt index 74dd8222..fcb1d5f3 100644 --- a/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt +++ b/app/src/main/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyConversionUi.kt @@ -6,6 +6,7 @@ import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -14,15 +15,10 @@ import com.serranoie.app.minus.R import com.serranoie.app.minus.domain.currency.ConversionPreferences import com.serranoie.app.minus.domain.model.SupportedCurrency import java.math.BigDecimal -import java.math.RoundingMode import java.util.Locale private fun normalize(code: String) = code.trim().uppercase(Locale.ROOT) private fun known(code: String) = SupportedCurrency.findByCode(code) != null || code in setOf("IRR", "IRT") -private fun formatted(amount: BigDecimal, currency: String): String { - val digits = SupportedCurrency.findByCode(currency)?.defaultFractionDigits ?: 2 - return "$currency ${amount.setScale(digits.coerceAtLeast(0), RoundingMode.HALF_EVEN).toPlainString()}" -} @Composable fun CurrencyConversionSettings(viewModel: CurrencyConversionViewModel = hiltViewModel()) { @@ -104,15 +100,16 @@ fun CurrencyPeriodSummary(base: String, budget: BigDecimal, spent: BigDecimal, m internal fun CurrencyPeriodSummaryContent(base: String, budget: BigDecimal, spent: BigDecimal, preferences: ConversionPreferences, censored: Boolean, modifier: Modifier = Modifier) { val target = preferences.displayCurrency ?: return if (target == base || censored) return + val locale = LocalConfiguration.current.locales[0] val rate = preferences.rateFor(base, target) Column(modifier, verticalArrangement = Arrangement.spacedBy(4.dp)) { Text(stringResource(R.string.conversion_title), style = MaterialTheme.typography.labelLarge) if (rate == null) { Text(stringResource(R.string.conversion_missing, base, target), style = MaterialTheme.typography.bodySmall) } else { - Text(stringResource(R.string.conversion_budget_line, formatted(budget, base), formatted(preferences.convert(budget, base)!!, target)), style = MaterialTheme.typography.bodyMedium) - Text(stringResource(R.string.conversion_spent_line, formatted(spent, base), formatted(preferences.convert(spent, base)!!, target)), style = MaterialTheme.typography.bodyMedium) - Text(if (rate.manual) stringResource(R.string.conversion_manual_note) else stringResource(R.string.conversion_cached_note, rate.date), style = MaterialTheme.typography.bodySmall) + Text(stringResource(R.string.conversion_budget_line, formatConversionAmount(budget, base, locale), formatConversionAmount(preferences.convert(budget, base)!!, target, locale)), style = MaterialTheme.typography.bodyMedium) + Text(stringResource(R.string.conversion_spent_line, formatConversionAmount(spent, base, locale), formatConversionAmount(preferences.convert(spent, base)!!, target, locale)), style = MaterialTheme.typography.bodyMedium) + Text(if (rate.manual) stringResource(R.string.conversion_manual_note, rate.date) else stringResource(R.string.conversion_cached_note, rate.date), style = MaterialTheme.typography.bodySmall) } } } diff --git a/app/src/main/res/values-es/currency_conversion.xml b/app/src/main/res/values-es/currency_conversion.xml index 12ac2f93..c42eabdd 100644 --- a/app/src/main/res/values-es/currency_conversion.xml +++ b/app/src/main/res/values-es/currency_conversion.xml @@ -21,7 +21,7 @@ No hay tasa %1$s/%2$s guardada. Configúrala en Ajustes. Presupuesto: %1$s ≈ %2$s Gastado: %1$s ≈ %2$s - Tasa manual. Solo visualización. + Tasa manual guardada el %1$s. Solo visualización. Tasa de referencia Frankfurter guardada del %1$s. Solo visualización. Elegir moneda diff --git a/app/src/main/res/values-fr/currency_conversion.xml b/app/src/main/res/values-fr/currency_conversion.xml index 852bc7e5..acb162af 100644 --- a/app/src/main/res/values-fr/currency_conversion.xml +++ b/app/src/main/res/values-fr/currency_conversion.xml @@ -21,7 +21,7 @@ Aucun taux %1$s/%2$s enregistré. Définissez-le dans les paramètres. Budget : %1$s ≈ %2$s Dépensé : %1$s ≈ %2$s - Taux manuel. Affichage uniquement. + Taux manuel enregistré le %1$s. Affichage uniquement. Taux de référence Frankfurter enregistré du %1$s. Affichage uniquement. Choisir une devise diff --git a/app/src/main/res/values/currency_conversion.xml b/app/src/main/res/values/currency_conversion.xml index 8b566f67..36f3d7bf 100644 --- a/app/src/main/res/values/currency_conversion.xml +++ b/app/src/main/res/values/currency_conversion.xml @@ -21,7 +21,7 @@ No saved %1$s/%2$s rate. Set a rate in Settings. Budget: %1$s ≈ %2$s Spent: %1$s ≈ %2$s - Manual rate. Display only. + Manual rate saved on %1$s. Display only. Saved Frankfurter reference rate dated %1$s. Display only. Choose currency diff --git a/app/src/test/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormatTest.kt b/app/src/test/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormatTest.kt new file mode 100644 index 00000000..b42db728 --- /dev/null +++ b/app/src/test/java/com/serranoie/app/minus/presentation/ui/currency/CurrencyAmountFormatTest.kt @@ -0,0 +1,17 @@ +package com.serranoie.app.minus.presentation.ui.currency + +import org.junit.Assert.assertEquals +import org.junit.Test +import java.math.BigDecimal +import java.util.Locale + +class CurrencyAmountFormatTest { + @Test fun englishUsesDecimalPoint() = assertEquals("USD 12.50", formatConversionAmount(BigDecimal("12.50"), "USD", Locale.US)) + @Test fun frenchUsesDecimalComma() = assertEquals("BRL 12,50", formatConversionAmount(BigDecimal("12.50"), "BRL", Locale.FRANCE)) + @Test fun spanishUsesDecimalComma() = assertEquals("EUR 12,50", formatConversionAmount(BigDecimal("12.50"), "EUR", Locale.forLanguageTag("es-ES"))) + @Test fun brazilianPortugueseUsesDecimalComma() = assertEquals("BRL 12,50", formatConversionAmount(BigDecimal("12.50"), "BRL", Locale.forLanguageTag("pt-BR"))) + @Test fun roundsHalfEvenWithoutDoubleConversion() = assertEquals("USD 12.34", formatConversionAmount(BigDecimal("12.345"), "USD", Locale.US)) + @Test fun zeroFractionCurrencyStaysWhole() = assertEquals("JPY 13", formatConversionAmount(BigDecimal("12.6"), "JPY", Locale.US)) + @Test fun customUnitRetainsCodeAndDecimals() = assertEquals("IRT 12,50", formatConversionAmount(BigDecimal("12.50"), "IRT", Locale.FRANCE)) + @Test fun largeAmountsKeepDecimalPrecision() = assertEquals("USD 123,456,789,012,345,678.12", formatConversionAmount(BigDecimal("123456789012345678.125"), "USD", Locale.US)) +} diff --git a/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/AnalyticsScreenshotTest.kt b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/AnalyticsScreenshotTest.kt index 70737c9e..dadf6036 100644 --- a/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/AnalyticsScreenshotTest.kt +++ b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/AnalyticsScreenshotTest.kt @@ -37,6 +37,19 @@ class AnalyticsScreenshotTest { maxPercentDifference = 10.0, ) + @Test + fun analyticsNoPeriodWithSavedConversion() { + Locale.setDefault(Locale.US) + paparazzi.snapshot { + CompositionLocalProvider( + com.serranoie.app.minus.presentation.ui.currency.LocalConversionPreferences provides + com.serranoie.app.minus.domain.currency.ConversionPreferences("BRL", referenceRates = listOf( + com.serranoie.app.minus.domain.currency.ExchangeRate("USD", "BRL", BigDecimal("5"), "2026-10-08", false) + )) + ) { AnalyticsPreview(AnalyticsState(isLoading = false)) } + } + } + @Test fun analyticsActivePeriod() { Locale.setDefault(Locale.US) diff --git a/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt index 633c0694..7fc4fc89 100644 --- a/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt +++ b/app/src/test/java/com/serranoie/app/minus/presentation/ui/screenshot/CurrencyConversionScreenshotTest.kt @@ -25,9 +25,41 @@ class CurrencyConversionScreenshotTest { } } } } + @Test fun pairedManualTotalsShowSavedDate() { + paparazzi.snapshot { + MinusTheme { Surface { + CurrencyPeriodSummaryContent("EUR", BigDecimal("200"), BigDecimal("20"), + ConversionPreferences("BRL", manualRates = listOf(ExchangeRate("EUR", "BRL", BigDecimal("6"), "2026-10-07", true))), false, Modifier.padding(16.dp)) + } } + } + } @Test fun missingRate() { paparazzi.snapshot { MinusTheme { Surface { CurrencyPeriodSummaryContent("USD", BigDecimal("100"), BigDecimal("12.50"), ConversionPreferences("BRL"), false, Modifier.padding(16.dp)) } } } } } + +class CurrencyConversionFrenchScreenshotTest { + @get:Rule val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_5.copy(locale = "fr"), renderingMode = SessionParams.RenderingMode.SHRINK) + @Test fun localizedManualTotalsAndDate() { + paparazzi.snapshot { + MinusTheme { Surface { + CurrencyPeriodSummaryContent("EUR", BigDecimal("200"), BigDecimal("20.50"), + ConversionPreferences("BRL", manualRates = listOf(ExchangeRate("EUR", "BRL", BigDecimal("6"), "2026-10-07", true))), false, Modifier.padding(16.dp)) + } } + } + } +} + +class CurrencyConversionSpanishScreenshotTest { + @get:Rule val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_5.copy(locale = "es"), renderingMode = SessionParams.RenderingMode.SHRINK) + @Test fun localizedManualTotalsAndDate() { + paparazzi.snapshot { + MinusTheme { Surface { + CurrencyPeriodSummaryContent("EUR", BigDecimal("200"), BigDecimal("20.50"), + ConversionPreferences("BRL", manualRates = listOf(ExchangeRate("EUR", "BRL", BigDecimal("6"), "2026-10-07", true))), false, Modifier.padding(16.dp)) + } } + } + } +} diff --git a/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_AnalyticsScreenshotTest_analyticsNoPeriodWithSavedConversion.png b/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_AnalyticsScreenshotTest_analyticsNoPeriodWithSavedConversion.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f03bcb30962c04aade9191a6264a0cef034adf GIT binary patch literal 52479 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

L?s>_1t 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

0=rznK5@*7Xb(h>FFg#=UjT_ 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 G?!N%&i*KR; literal 0 HcmV?d00001 diff --git a/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionFrenchScreenshotTest_localizedManualTotalsAndDate.png b/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionFrenchScreenshotTest_localizedManualTotalsAndDate.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0b7d43e293d3790dd3e0c549063605e56bb40f GIT binary patch literal 57383 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%0A6XtfDhwVjh$1?8r1)^Qqv_4P5hIk zG{eu|;sC$?ph)xlDb9VJ;T&HT+Mau}vW$B$`_&La@-&=*|;gOif%?ILnUud!Q0Q45^l+JfRtCXs&W zW04CA`Smydckk^Zf>%Ibc`0l0M7`lZ_!2@~gGyTaxL-zBMLiZ6fBogM@H(8(k1}qi zmaS7Y^6hQ({jxqqr`VsL&`J{OA-GHr_T}Yn`UecYZ-$zL|0a&@YN~NqyB;P?cbF!r z;ORAno#&E3u=tI#i(;|mJKLs;p}4O#5i=8pZBKB0d*l$@wqiA<-f)_PoHl-|`Vx?2 zzzbgIX$?uiBiR;~Iv=B8*NEMrfIsSPD=|28!6)HF{F>u4bohT4*ANBHx|;mf(-@4Pq z-Hwb9^WEw;R{c*Psj$NR|uV+uIyf_0t2dE**p=mw?l zm}WNEm!}gD>gkxf5!tN(T0i6#SG-Ai*co~HLgV$BJhQPKTUw;?$ZQFBZth(BD822o z&K!aU99MYxH0?9#I)~xxK3T0bkPGm$ZJGX^FLwZLpH&%xXVp91oAGETk4%KVtD??Mmq7 z^gl-zJk>m&T4u}n5U-=z6S;BTv!XJk`#b4hj_dC%B@Nxwl^2i7WrL+<+XdyMmu4o^ z$kwa>Vqha1p!lvMsMW;*BVS%M1t*~QGcq+cWvOIpLLu(Ak2z}paSdhv0}ibd)mOh`ht+Gk;+3G` zGT-`F?@snS)Qc+Ve0QpvCwSbK8vEh3toj_L@2TttC^BEAGNEb~LGx6XCK>hENNVLr zLuz@#zxB0?54kre!K^28C2hrV|22j1#DH9IMu=Vo{yk147LtU~tA*0XvbP(Do zZdg7z<7nHES&tFMyuX*Xr0t~S+4Aj6d*1#-#s@5^HF$*~f$V0Qk9L~bv+>*)NHvue zS1)*W_g>z^Hmf)}`>7jiHwjHhkHa`3y%s^KO4_}zsxh2WZguO}7DV_gE%LmAUtWO= zelfau4MX2bDxAnTQvehvP)-am91EhzZgupsIPli52@)3m=hRp^p6FizwxNhiu%7DGcmI%m_Yb4X<{hco%XNG3wsIr5jKs+&2UwNTP+Wq$LTgx%7 zk3L{=jpjB&7ReTVDUsP$Y`U54P3CeGx;Xj7gJ~;ZVak-o zD-v|Oo_-*Y2U3{Si2~50ZS5sxlhwEPc)yrT4HxGUNL=BUZ{7N_uga|#-NpCl%2Di{ zj(1f2Sb}0^b^ISeK|@k*L82ua-54ebfkYp|*s_Tpkv4XRLs z?)YPR0M=uBeYH{gDUDt^J@goF`tk)QY$vb7p2?2QvJCB_YZgzX%jsHggegQ_!HPXk zHUuEVSADy(F&Tthc#Mn{!zk_cbviM66|!8mk_$I#^9V=BsHs6_<6}0qRXmc;##0~W zUY_l(E3ZI^dMwk*t*Gf4LqR8FU-iMOg_P zK*2~n&N~8noY^!x`qu+)>0Kav7SZM~Q3`GB61bM=WdFLO3b5i2~a}(DI)t%siOa1^M9vP@=x#ntM~t; zwSJEHAB0H$kEGb&mHz+G`@d}d+id@9Xn*%MIDer39E~gBcyd*mHCVWbrE!(vwcGy& DSdQp# literal 0 HcmV?d00001 diff --git a/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionSpanishScreenshotTest_localizedManualTotalsAndDate.png b/app/src/test/snapshots/images/com.serranoie.app.minus.presentation.ui.screenshot_CurrencyConversionSpanishScreenshotTest_localizedManualTotalsAndDate.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1a69a8df8a820be6ccf2208a0db51460769b7f GIT binary patch literal 26109 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 literal 0 HcmV?d00001