Skip to content

Commit 20a10ad

Browse files
committed
fix: show calculator placeholders
1 parent b303f55 commit 20a10ad

3 files changed

Lines changed: 24 additions & 6 deletions

File tree

app/src/main/java/to/bitkit/ui/screens/widgets/calculator/CalculatorDisplay.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,14 @@ internal fun formatBitcoinPlaceholder(
100100
displayUnit: BitcoinDisplayUnit,
101101
locale: Locale = Locale.getDefault(),
102102
): String {
103-
if (btcValue.isEmpty() || displayUnit.isModern()) return ""
103+
if (btcValue.isEmpty()) {
104+
return if (displayUnit.isModern()) {
105+
ZERO_PLACEHOLDER
106+
} else {
107+
ZERO_PLACEHOLDER + DECIMAL_SEPARATOR + "0".repeat(CLASSIC_DECIMALS)
108+
}
109+
}
110+
if (displayUnit.isModern()) return ""
104111
val normalizedBtcValue = sanitizeDecimalInput(
105112
raw = normalizeCalculatorDecimalInput(
106113
rawValue = btcValue,
@@ -112,14 +119,15 @@ internal fun formatBitcoinPlaceholder(
112119
return formatMissingDecimalZeros(
113120
value = normalizedBtcValue,
114121
maxDecimalPlaces = CLASSIC_DECIMALS,
122+
includeDecimalSeparatorIfMissing = true,
115123
)
116124
}
117125

118126
internal fun formatFiatPlaceholder(
119127
fiatValue: String,
120128
locale: Locale = Locale.getDefault(),
121129
): String {
122-
if (fiatValue.isEmpty()) return ""
130+
if (fiatValue.isEmpty()) return ZERO_PLACEHOLDER
123131
val normalizedFiatValue = sanitizeDecimalInput(
124132
raw = normalizeCalculatorDecimalInput(
125133
rawValue = fiatValue,
@@ -268,8 +276,15 @@ private fun formatGroupedIntegerPreservingZeros(
268276
private fun formatMissingDecimalZeros(
269277
value: String,
270278
maxDecimalPlaces: Int,
279+
includeDecimalSeparatorIfMissing: Boolean = false,
271280
): String {
272-
if (!value.contains(PERIOD_SEPARATOR)) return ""
281+
if (!value.contains(PERIOD_SEPARATOR)) {
282+
return if (includeDecimalSeparatorIfMissing) {
283+
DECIMAL_SEPARATOR + "0".repeat(maxDecimalPlaces)
284+
} else {
285+
""
286+
}
287+
}
273288

274289
val decimalLength = value.substringAfter(PERIOD_SEPARATOR).length
275290
val remainingDecimals = maxDecimalPlaces - decimalLength
@@ -298,5 +313,6 @@ private fun BigDecimal.toSatsLongClamped(): Long {
298313
private val MAX_SATS_DECIMAL = BigDecimal.valueOf(Long.MAX_VALUE)
299314

300315
private const val GROUP_SIZE = 3
316+
private const val ZERO_PLACEHOLDER = "0"
301317
private const val COMMA_SEPARATOR = ','
302318
private const val PERIOD_SEPARATOR = '.'

app/src/test/java/to/bitkit/ui/screens/widgets/calculator/components/CalculatorCardStateTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class CalculatorCardStateTest {
217217

218218
@Test
219219
fun `formatFiatPlaceholder returns missing decimal zeros`() {
220-
assertEquals("", formatFiatPlaceholder(""))
220+
assertEquals("0", formatFiatPlaceholder(""))
221221
assertEquals("", formatFiatPlaceholder("1"))
222222
assertEquals("00", formatFiatPlaceholder("1."))
223223
assertEquals("0", formatFiatPlaceholder("1.2"))
@@ -227,8 +227,9 @@ class CalculatorCardStateTest {
227227

228228
@Test
229229
fun `formatBitcoinPlaceholder returns missing classic decimal zeros`() {
230-
assertEquals("", formatBitcoinPlaceholder("", BitcoinDisplayUnit.CLASSIC))
231-
assertEquals("", formatBitcoinPlaceholder("1", BitcoinDisplayUnit.CLASSIC))
230+
assertEquals("0", formatBitcoinPlaceholder("", BitcoinDisplayUnit.MODERN))
231+
assertEquals("0.00000000", formatBitcoinPlaceholder("", BitcoinDisplayUnit.CLASSIC))
232+
assertEquals(".00000000", formatBitcoinPlaceholder("1", BitcoinDisplayUnit.CLASSIC))
232233
assertEquals("", formatBitcoinPlaceholder("1.2", BitcoinDisplayUnit.MODERN))
233234
assertEquals("00000000", formatBitcoinPlaceholder("1.", BitcoinDisplayUnit.CLASSIC))
234235
assertEquals("0000", formatBitcoinPlaceholder("1.2345", BitcoinDisplayUnit.CLASSIC))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Calculator inputs now show zero placeholders consistently when bitcoin or fiat amounts are empty.

0 commit comments

Comments
 (0)