diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/Boost.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/Boost.kt index da2be8eb7a..29e236282d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/Boost.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/Boost.kt @@ -266,7 +266,8 @@ data class Boost( if (withoutSymbol != withoutLeadingZeroes) { text?.removeTextChangedListener(this) - s.replace(s.indexOf(withoutSymbol), withoutSymbol.length, withoutLeadingZeroes) + val start = s.indexOf(withoutSymbol) + s.replace(start, start + withoutSymbol.length, withoutLeadingZeroes) text?.addTextChangedListener(this) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt index 3399d6c2eb..5a071f0e6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt @@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.InternetConnectionObserver import org.thoughtcrime.securesms.util.PlatformCurrencyUtil import org.thoughtcrime.securesms.util.livedata.Store +import java.lang.NumberFormatException import java.math.BigDecimal import java.text.DecimalFormat import java.text.DecimalFormatSymbols @@ -201,7 +202,12 @@ class BoostViewModel( } else { val decimalFormat = DecimalFormat.getInstance() as DecimalFormat decimalFormat.isParseBigDecimal = true - decimalFormat.parse(amount) as BigDecimal + + try { + decimalFormat.parse(amount) as BigDecimal + } catch (e: NumberFormatException) { + BigDecimal.ZERO + } } store.update { it.copy(customAmount = FiatMoney(bigDecimalAmount, it.customAmount.currency)) } diff --git a/app/src/test/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostTest__MoneyFilter.kt b/app/src/test/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostTest__MoneyFilter.kt index b46a17e36a..a5e7af69e7 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostTest__MoneyFilter.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostTest__MoneyFilter.kt @@ -61,6 +61,16 @@ class BoostTest__MoneyFilter { assertEquals("5", result) } + @Test + fun `Given USD, when I enter 00005dot00, then I expect 5 from text change`() { + val testSubject = Boost.MoneyFilter(usd) + val editable = SpannableStringBuilder("00005.00") + + testSubject.afterTextChanged(editable) + + assertEquals("$5", editable.toString()) + } + @Test fun `Given USD, when I enter 5dot000, then I expect successful filter`() { val testSubject = Boost.MoneyFilter(yen)