diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-03-12 09:18:44 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2024-03-13 16:48:10 -0300 |
commit | 1ee82ca8a03886fc5b466d294b4927406cee8d9d (patch) | |
tree | 09734509d6d7c9df97d001d9db14f900e74c8417 | |
parent | 63158f57a834bd35c8ef57033210fc1e6394c5b2 (diff) | |
download | taler-android-1ee82ca8a03886fc5b466d294b4927406cee8d9d.tar.gz taler-android-1ee82ca8a03886fc5b466d294b4927406cee8d9d.tar.bz2 taler-android-1ee82ca8a03886fc5b466d294b4927406cee8d9d.zip |
[wallet] Fix wrong insufficient balance in multiple places
bug 0008610
3 files changed, 12 insertions, 10 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt index c2b04ca..fe11d6a 100644 --- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt +++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt @@ -119,11 +119,9 @@ class MainViewModel( } @UiThread - fun getCurrencies(): List<String> { - return balanceManager.balancesOrNull?.map { balanceItem -> - balanceItem.currency - } ?: emptyList() - } + fun getCurrencies() = balanceManager.balances.value?.map { balanceItem -> + balanceItem.currency + } ?: emptyList() @UiThread fun createAmount(amountText: String, currency: String): AmountResult { @@ -138,7 +136,7 @@ class MainViewModel( @UiThread fun hasSufficientBalance(amount: Amount): Boolean { - balanceManager.balancesOrNull?.forEach { balanceItem -> + balanceManager.balances.value?.forEach { balanceItem -> if (balanceItem.currency == amount.currency) { return balanceItem.available >= amount } diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt index e964881..2930c77 100644 --- a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt +++ b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt @@ -17,6 +17,7 @@ package net.taler.wallet.balances import android.util.Log +import androidx.annotation.UiThread import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.distinctUntilChanged @@ -49,13 +50,15 @@ class BalanceManager( private val api: WalletBackendApi, private val scope: CoroutineScope, ) { + private val mBalances = MutableLiveData<List<BalanceItem>>(emptyList()) + val balances: LiveData<List<BalanceItem>> = mBalances + private val mState = MutableLiveData<BalanceState>(BalanceState.None) val state: LiveData<BalanceState> = mState.distinctUntilChanged() - val balancesOrNull get() = (state.value as? BalanceState.Success)?.balances - + @UiThread fun loadBalances() { - mState.postValue(BalanceState.Loading) + mState.value = BalanceState.Loading scope.launch { val response = api.request("getBalances", BalanceResponse.serializer()) response.onError { @@ -64,6 +67,7 @@ class BalanceManager( } response.onSuccess { mState.postValue(BalanceState.Success(it.balances)) + mBalances.postValue(it.balances) } } } diff --git a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt index c7a4eb0..8961016 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt @@ -86,7 +86,7 @@ class PayToUriFragment : Fragment() { text = stringResource(id = R.string.payment_balance_insufficient), color = MaterialTheme.colorScheme.error, ) else if (depositManager.isSupportedPayToUri(uri)) PayToComposable( - currencies = model.getCurrencies(), + currencies = currencies, getAmount = model::createAmount, onAmountChosen = { amount -> val u = Uri.parse(uri) |