diff --git a/iosApp/iosApp/ContentView.swift b/iosApp/iosApp/ContentView.swift index 7c7f882..f44e724 100644 --- a/iosApp/iosApp/ContentView.swift +++ b/iosApp/iosApp/ContentView.swift @@ -115,8 +115,8 @@ struct ContentView: View { NumericField( placeholder: "", value: state.manualSatsPerCurrencyInput, - keyboardType: .decimalPad, - sanitize: sanitizeDecimalInput, + keyboardType: .numberPad, + sanitize: sanitizeIntegerInput, onChange: { viewModel.onManualSatsPerCurrencyChanged($0) }, alignment: .trailing ) diff --git a/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceScreen.kt b/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceScreen.kt index 5f7c875..036ae9e 100644 --- a/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceScreen.kt +++ b/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceScreen.kt @@ -214,7 +214,7 @@ fun PriceScreen( value = state.manualSatsPerCurrencyInput, onValueChange = viewModel::onManualSatsPerCurrencyChanged, label = { Text(stringResource(MR.strings.currency_to_sats, state.defaultCurrencyCode)) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), singleLine = true, visualTransformation = DigitGroupingTransformation, modifier = Modifier.fillMaxWidth(), diff --git a/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceViewModel.kt b/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceViewModel.kt index caa605d..039a1ba 100644 --- a/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceViewModel.kt +++ b/shared/src/commonMain/kotlin/xyz/tyiu/satsprice/ui/PriceViewModel.kt @@ -294,7 +294,8 @@ class PriceViewModel( } fun onManualSatsPerCurrencyChanged(value: String) { - val sanitized = sanitizeDecimalInput(value) + // Sats are indivisible — unlike the rate field, this one takes whole numbers only. + val sanitized = sanitizeIntegerInput(value) val parsedSats = sanitized.toBigDecimalOrNull() val rate = parsedSats?.let { sats -> CurrencyConverter.satsPerCurrencyUnit(sats) } manualSource.rate = rate