diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt index 0e7ef07..5243427 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -17,6 +17,7 @@ package net.taler.wallet.transactions import android.os.Bundle +import android.util.Log import android.view.ActionMode import android.view.LayoutInflater import android.view.Menu @@ -35,12 +36,16 @@ import androidx.recyclerview.selection.SelectionTracker import androidx.recyclerview.selection.StorageStrategy import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL -import net.taler.common.Amount +import com.google.android.material.dialog.MaterialAlertDialogBuilder import net.taler.common.fadeIn import net.taler.common.fadeOut +import net.taler.common.showError import net.taler.wallet.MainViewModel import net.taler.wallet.R +import net.taler.wallet.TAG +import net.taler.wallet.balances.BalanceState.Success import net.taler.wallet.databinding.FragmentTransactionsBinding +import net.taler.wallet.showError interface OnTransactionClickListener { fun onTransactionClicked(transaction: Transaction) @@ -50,10 +55,11 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. private val model: MainViewModel by activityViewModels() private val transactionManager by lazy { model.transactionManager } + private val balanceManager by lazy { model.balanceManager } private lateinit var ui: FragmentTransactionsBinding private val transactionAdapter by lazy { TransactionAdapter(this) } - private val currency by lazy { transactionManager.selectedCurrency!! } + private val scopeInfo by lazy { transactionManager.selectedScope!! } private var tracker: SelectionTracker<String>? = null private var actionMode: ActionMode? = null @@ -102,11 +108,15 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. } }) - model.balances.observe(viewLifecycleOwner) { balances -> + balanceManager.state.observe(viewLifecycleOwner) { state -> + if (state !is Success) return@observe + val balances = state.balances // hide extra fab when in single currency mode (uses MainFragment's FAB) if (balances.size == 1) ui.mainFab.visibility = INVISIBLE - balances.find { it.currency == currency }?.available?.let { amount: Amount -> - ui.amount.text = amount.amountStr + + balances.find { it.scopeInfo == scopeInfo }?.let { balance -> + ui.amount.text = balance.available.toString(showSymbol = false) + transactionAdapter.setCurrencySpec(balance.available.spec) } } transactionManager.progress.observe(viewLifecycleOwner) { show -> @@ -119,7 +129,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. findNavController().navigate(R.id.sendFunds) } ui.receiveButton.setOnClickListener { - findNavController().navigate(R.id.receiveFunds) + findNavController().navigate(R.id.action_global_receiveFunds) } ui.mainFab.setOnClickListener { model.scanCode() @@ -143,7 +153,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. override fun onStart() { super.onStart() - requireActivity().title = getString(R.string.transactions_detail_title_currency, currency) + requireActivity().title = getString(R.string.transactions_detail_title_currency, scopeInfo.currency) } private fun setupSearch(item: MenuItem) { @@ -171,7 +181,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. override fun onTransactionClicked(transaction: Transaction) { if (actionMode != null) return // don't react on clicks while in action mode if (transaction.detailPageNav != 0) { - transactionManager.selectedTransaction = transaction + transactionManager.selectTransaction(transaction) findNavController().navigate(transaction.detailPageNav) } } @@ -179,9 +189,10 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. private fun onTransactionsResult(result: TransactionsResult) = when (result) { is TransactionsResult.Error -> { ui.list.fadeOut() - ui.emptyState.text = getString(R.string.transactions_error, result.msg) + ui.emptyState.text = getString(R.string.transactions_error, result.error.userFacingMsg) ui.emptyState.fadeIn() } + is TransactionsResult.Success -> { if (result.transactions.isEmpty()) { val isSearch = transactionManager.searchQuery.value != null @@ -220,10 +231,31 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. when (item.itemId) { R.id.transaction_delete -> { tracker?.selection?.toList()?.let { transactionIds -> - transactionManager.deleteTransactions(transactionIds) + MaterialAlertDialogBuilder( + requireContext(), + R.style.MaterialAlertDialog_Material3, + ) + .setTitle(R.string.transactions_delete) + .setMessage(R.string.transactions_delete_selected_dialog_message) + .setNeutralButton(R.string.cancel) { dialog, _ -> + dialog.cancel() + } + .setNegativeButton(R.string.transactions_delete) { dialog, _ -> + transactionManager.deleteTransactions(transactionIds) { + Log.e(TAG, "Error deleteTransaction $it") + if (model.devMode.value == true) { + showError(it) + } else { + showError(it.userFacingMsg) + } + } + dialog.dismiss() + } + .show() } mode.finish() } + R.id.transaction_select_all -> transactionAdapter.selectAll() } return true |