From db8b71418b766258a7a4bda91e496b1b03cb28cd Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 20 Mar 2020 15:43:23 -0300 Subject: Let all apps use the same Amount class The wallet now also uses taler-kotlin-common --- .../main/java/net/taler/cashier/BalanceFragment.kt | 10 ++++----- .../main/java/net/taler/cashier/MainViewModel.kt | 25 +++++++++++++++------- .../net/taler/cashier/withdraw/WithdrawManager.kt | 4 +--- 3 files changed, 22 insertions(+), 17 deletions(-) (limited to 'cashier/src/main/java/net') diff --git a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt index 2178a78..fffb21b 100644 --- a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt +++ b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt @@ -16,7 +16,6 @@ package net.taler.cashier -import android.annotation.SuppressLint import android.os.Bundle import android.view.LayoutInflater import android.view.Menu @@ -34,14 +33,14 @@ import kotlinx.android.synthetic.main.fragment_balance.* import net.taler.cashier.BalanceFragmentDirections.Companion.actionBalanceFragmentToTransactionFragment import net.taler.cashier.withdraw.LastTransaction import net.taler.cashier.withdraw.WithdrawStatus -import net.taler.common.Amount +import net.taler.common.SignedAmount import net.taler.common.fadeIn import net.taler.common.fadeOut sealed class BalanceResult { object Error : BalanceResult() object Offline : BalanceResult() - class Success(val amount: Amount) : BalanceResult() + class Success(val amount: SignedAmount) : BalanceResult() } class BalanceFragment : Fragment() { @@ -121,7 +120,7 @@ class BalanceFragment : Fragment() { else -> super.onOptionsItemSelected(item) } - private fun onBalanceUpdated(amount: Amount?, isOffline: Boolean = false) { + private fun onBalanceUpdated(amount: SignedAmount?, isOffline: Boolean = false) { val uiList = listOf( introView, button5, button10, button20, button50, @@ -132,8 +131,7 @@ class BalanceFragment : Fragment() { getString(if (isOffline) R.string.balance_offline else R.string.balance_error) uiList.forEach { it.fadeOut() } } else { - @SuppressLint("SetTextI18n") - balanceView.text = "${amount.amount} ${amount.currency}" + balanceView.text = amount.toString() uiList.forEach { it.fadeIn() } } progressBar.fadeOut() diff --git a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt index 6cd12ff..2b2d5f7 100644 --- a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt +++ b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt @@ -34,7 +34,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import net.taler.cashier.HttpHelper.makeJsonGetRequest import net.taler.cashier.withdraw.WithdrawManager -import net.taler.common.Amount.Companion.fromStringSigned +import net.taler.common.AmountParserException +import net.taler.common.SignedAmount import net.taler.common.isOnline private val TAG = MainViewModel::class.java.simpleName @@ -90,12 +91,16 @@ class MainViewModel(private val app: Application) : AndroidViewModel(app) { val result = when (val response = makeJsonGetRequest(url, config)) { is HttpJsonResult.Success -> { val balance = response.json.getString("balance") - val amount = fromStringSigned(balance)!! - mCurrency.postValue(amount.currency) - prefs.edit().putString(PREF_KEY_CURRENCY, amount.currency).apply() - // save config - saveConfig(config) - ConfigResult(true) + try { + val amount = SignedAmount.fromJSONString(balance) + mCurrency.postValue(amount.amount.currency) + prefs.edit().putString(PREF_KEY_CURRENCY, amount.amount.currency).apply() + // save config + saveConfig(config) + ConfigResult(true) + } catch (e: AmountParserException) { + ConfigResult(false) + } } is HttpJsonResult.Error -> { val authError = response.statusCode == 401 @@ -124,7 +129,11 @@ class MainViewModel(private val app: Application) : AndroidViewModel(app) { val result = when (val response = makeJsonGetRequest(url, config)) { is HttpJsonResult.Success -> { val balance = response.json.getString("balance") - fromStringSigned(balance)?.let { BalanceResult.Success(it) } ?: BalanceResult.Error + try { + BalanceResult.Success(SignedAmount.fromJSONString(balance)) + } catch (e: AmountParserException) { + BalanceResult.Error + } } is HttpJsonResult.Error -> { if (app.isOnline()) BalanceResult.Error diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt index bfc82ce..88df6b7 100644 --- a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt +++ b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt @@ -75,9 +75,7 @@ class WithdrawManager( fun hasSufficientBalance(amount: Int): Boolean { val balanceResult = viewModel.balance.value if (balanceResult !is BalanceResult.Success) return false - val balanceStr = balanceResult.amount.amount - val balanceDouble = balanceStr.toDouble() - return amount <= balanceDouble + return balanceResult.amount.positive && amount <= balanceResult.amount.amount.value } @UiThread -- cgit v1.2.3