From bc54f6ca0743b808a6a045f6a20d90dc3d5d6636 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 13 Oct 2021 09:42:16 -0300 Subject: [PATCH] Fix crash in locales without a currency. --- .../securesms/keyvalue/DonationsValues.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt index 20563e213a..bbb16f1b56 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt @@ -4,6 +4,9 @@ import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.subjects.BehaviorSubject import io.reactivex.rxjava3.subjects.Subject import org.signal.donations.StripeApi +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.payments.currency.CurrencyUtil +import org.thoughtcrime.securesms.util.TextSecurePreferences import java.util.Currency import java.util.Locale @@ -17,18 +20,28 @@ internal class DonationsValues internal constructor(store: KeyValueStore) : Sign override fun getKeysToIncludeInBackup(): MutableList = mutableListOf(KEY_CURRENCY_CODE) - private val currencyPublisher: Subject = BehaviorSubject.createDefault(getCurrency()) - val observableCurrency: Observable = currencyPublisher + private val currencyPublisher: Subject by lazy { BehaviorSubject.createDefault(getCurrency()) } + val observableCurrency: Observable by lazy { currencyPublisher } fun getCurrency(): Currency { val currencyCode = getString(KEY_CURRENCY_CODE, null) - val currency = if (currencyCode == null) { - Currency.getInstance(Locale.getDefault()) + val currency: Currency? = if (currencyCode == null) { + val localeCurrency = CurrencyUtil.getCurrencyByLocale(Locale.getDefault()) + if (localeCurrency == null) { + val e164 = TextSecurePreferences.getLocalNumber(ApplicationDependencies.getApplication()) + if (e164 == null) { + null + } else { + CurrencyUtil.getCurrencyByE164(e164) + } + } else { + localeCurrency + } } else { - Currency.getInstance(currencyCode) + CurrencyUtil.getCurrencyByCurrencyCode(currencyCode) } - return if (StripeApi.Validation.supportedCurrencyCodes.contains(currency.currencyCode)) { + return if (currency != null && StripeApi.Validation.supportedCurrencyCodes.contains(currency.currencyCode)) { currency } else { Currency.getInstance("USD")