mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-21 02:08:40 +00:00
Fix crash in locales without a currency.
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user