Fix crash in locales without a currency.

This commit is contained in:
Alex Hart 2021-10-13 09:42:16 -03:00 committed by GitHub
parent 223c0c4bce
commit bc54f6ca07
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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<String> = mutableListOf(KEY_CURRENCY_CODE)
private val currencyPublisher: Subject<Currency> = BehaviorSubject.createDefault(getCurrency())
val observableCurrency: Observable<Currency> = currencyPublisher
private val currencyPublisher: Subject<Currency> by lazy { BehaviorSubject.createDefault(getCurrency()) }
val observableCurrency: Observable<Currency> 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")