From b226f4d3b56986f83898379d5d0fc6ef9a8971a0 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 6 Mar 2023 15:49:21 -0300 Subject: [wallet] some fixes for previous commit --- .../transactions/TransactionDepositFragment.kt | 11 +++------- .../wallet/transactions/TransactionManager.kt | 17 ++++++++------- .../wallet/transactions/TransactionPeerFragment.kt | 11 +++------- .../wallet/transactions/TransactionTipFragment.kt | 11 +++------- .../transactions/TransactionWithdrawalFragment.kt | 24 ++++++++++++---------- 5 files changed, 32 insertions(+), 42 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet') diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt index 4ca20fd..dd09b4c 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt @@ -20,7 +20,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.platform.ComposeView import net.taler.wallet.compose.TalerSurface @@ -35,13 +34,9 @@ class TransactionDepositFragment : TransactionDetailFragment() { ): View = ComposeView(requireContext()).apply { setContent { TalerSurface { - val t: Transaction? by transactionManager.selectedTransaction.observeAsState() - if (t != null) { - TransactionDepositComposable(t as TransactionDeposit) { - onDeleteButtonClicked(t!!) - } - } else { - error("No transaction") + val t = transactionManager.selectedTransaction.observeAsState().value + if (t is TransactionDeposit) TransactionDepositComposable(t) { + onDeleteButtonClicked(t) } } } diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt index 8eac038..8be3fb5 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt @@ -43,7 +43,8 @@ class TransactionManager( var selectedCurrency: String? = null val searchQuery = MutableLiveData(null) - val selectedTransaction = MutableLiveData(null) + private val mSelectedTransaction = MutableLiveData(null) + val selectedTransaction: LiveData = mSelectedTransaction private val allTransactions = HashMap>() private val mTransactions = HashMap>() val transactions: LiveData @@ -84,11 +85,12 @@ class TransactionManager( mProgress.value = false liveData.value = TransactionsResult.Success(transactions) - // update selected transaction - transactions.find { - it.transactionId == selectedTransaction.value?.transactionId + // update selected transaction on UiThread (if it exists) + val selected = selectedTransaction.value + if (selected != null) transactions.find { + it.transactionId == selected.transactionId }?.let { - selectedTransaction.postValue(it) + mSelectedTransaction.value = it } // update all transactions on UiThread if there was a currency @@ -99,6 +101,7 @@ class TransactionManager( /** * Returns true if given [transactionId] was found and selected, false otherwise. */ + @UiThread suspend fun selectTransaction(transactionId: String): Boolean { var transaction: Transaction? = null api.request("getTransactionById", Transaction.serializer()) { @@ -109,7 +112,7 @@ class TransactionManager( transaction = result } return if (transaction != null) { - selectedTransaction.postValue(transaction) + mSelectedTransaction.value = transaction true } else { false @@ -117,7 +120,7 @@ class TransactionManager( } fun selectTransaction(transaction: Transaction) { - selectedTransaction.postValue(transaction) + mSelectedTransaction.postValue(transaction) } fun deleteTransaction(transactionId: String) = scope.launch { diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt index 58e8f31..3d99774 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt @@ -28,7 +28,6 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Modifier @@ -56,13 +55,9 @@ class TransactionPeerFragment : TransactionDetailFragment() { ): View = ComposeView(requireContext()).apply { setContent { TalerSurface { - val t: Transaction? by transactionManager.selectedTransaction.observeAsState(null) - if (t != null) { - TransactionPeerComposable(t!!) { - onDeleteButtonClicked(t!!) - } - } else { - error("No transaction") + val t = transactionManager.selectedTransaction.observeAsState(null).value + if (t != null) TransactionPeerComposable(t) { + onDeleteButtonClicked(t) } } } diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt index 1eb7fea..91af805 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt @@ -29,7 +29,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Modifier @@ -53,13 +52,9 @@ class TransactionTipFragment : TransactionDetailFragment() { ): View = ComposeView(requireContext()).apply { setContent { TalerSurface { - val t by transactionManager.selectedTransaction.observeAsState(null) - if (t != null && t is TransactionTip) { - TransactionTipComposable(t as TransactionTip) { - onDeleteButtonClicked(t!!) - } - } else { - error("No or wrong transaction") + val t = transactionManager.selectedTransaction.observeAsState(null).value + if (t is TransactionTip) TransactionTipComposable(t) { + onDeleteButtonClicked(t) } } } diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt index 14b84b2..2778126 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt @@ -58,14 +58,14 @@ class TransactionWithdrawalFragment : TransactionDetailFragment() { ui.effectiveAmountLabel.text = getString(R.string.withdraw_total) ui.effectiveAmountView.text = t.amountEffective.toString() setupConfirmWithdrawalButton(t) - setupActionButton(t) - ui.chosenAmountLabel.text = getString(R.string.amount_chosen) - ui.chosenAmountView.text = - getString(R.string.amount_positive, t.amountRaw.toString()) - val fee = t.amountRaw - t.amountEffective - ui.feeView.text = getString(R.string.amount_negative, fee.toString()) - ui.exchangeView.text = cleanExchange(t.exchangeBaseUrl) - if (t.pending) { + setupActionButton(t) + ui.chosenAmountLabel.text = getString(R.string.amount_chosen) + ui.chosenAmountView.text = + getString(R.string.amount_positive, t.amountRaw.toString()) + val fee = t.amountRaw - t.amountEffective + ui.feeView.text = getString(R.string.amount_negative, fee.toString()) + ui.exchangeView.text = cleanExchange(t.exchangeBaseUrl) + if (t.pending) { ui.deleteButton.setIconResource(R.drawable.ic_cancel) ui.deleteButton.setText(R.string.cancel) } @@ -75,13 +75,15 @@ class TransactionWithdrawalFragment : TransactionDetailFragment() { } } + private val isPending get() = transactionManager.selectedTransaction.value?.pending == true + override val deleteDialogTitle: Int - get() = if (transactionManager.selectedTransaction.value?.pending == true) R.string.cancel else super.deleteDialogTitle + get() = if (isPending) R.string.cancel else super.deleteDialogTitle override val deleteDialogMessage: Int - get() = if (transactionManager.selectedTransaction.value?.pending == true) R.string.transactions_cancel_dialog_message + get() = if (isPending) R.string.transactions_cancel_dialog_message else super.deleteDialogMessage override val deleteDialogButton: Int - get() = if (transactionManager.selectedTransaction.value?.pending == true) R.string.ok else super.deleteDialogButton + get() = if (isPending) R.string.ok else super.deleteDialogButton private fun setupConfirmWithdrawalButton(t: TransactionWithdrawal) { if (t.pending && !t.confirmed) { -- cgit v1.2.3