Fix crash in locales without a currency.
This commit is contained in:
parent
223c0c4bce
commit
bc54f6ca07
1 changed files with 19 additions and 6 deletions
|
@ -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")
|
||||
|
|
Loading…
Add table
Reference in a new issue