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 | 70 |
1 files changed, 45 insertions, 25 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 09adb3e..d2d0c9c 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 @@ -25,7 +26,7 @@ import android.view.MenuItem import android.view.View import android.view.View.INVISIBLE import android.view.ViewGroup -import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView.OnQueryTextListener import androidx.fragment.app.Fragment @@ -36,28 +37,32 @@ 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.balances.ScopeInfo +import net.taler.wallet.cleanExchange import net.taler.wallet.databinding.FragmentTransactionsBinding -import net.taler.wallet.handleKyc -import net.taler.wallet.launchInAppBrowser +import net.taler.wallet.showError interface OnTransactionClickListener { fun onTransactionClicked(transaction: Transaction) - fun onActionButtonClicked(transaction: Transaction) } class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.Callback { 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 @@ -106,11 +111,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.actionsBar.amount.text = balance.available.toString(showSymbol = false) + transactionAdapter.setCurrencySpec(balance.available.spec) } } transactionManager.progress.observe(viewLifecycleOwner) { show -> @@ -119,11 +128,11 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. transactionManager.transactions.observe(viewLifecycleOwner) { result -> onTransactionsResult(result) } - ui.sendButton.setOnClickListener { + ui.actionsBar.sendButton.setOnClickListener { findNavController().navigate(R.id.sendFunds) } - ui.receiveButton.setOnClickListener { - findNavController().navigate(R.id.receiveFunds) + ui.actionsBar.receiveButton.setOnClickListener { + findNavController().navigate(R.id.action_global_receiveFunds) } ui.mainFab.setOnClickListener { model.scanCode() @@ -147,7 +156,9 @@ 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) + (requireActivity() as AppCompatActivity).supportActionBar?.subtitle = + (scopeInfo as? ScopeInfo.Exchange)?.url?.let { cleanExchange(it) } } private fun setupSearch(item: MenuItem) { @@ -175,25 +186,18 @@ 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) } } - override fun onActionButtonClicked(transaction: Transaction) { - transaction.handleKyc({ error("Unhandled Action Button Event") }) { error -> - error.kycUrl?.let { - launchInAppBrowser(requireContext(), it) - } - } - } - 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 @@ -232,25 +236,41 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. when (item.itemId) { R.id.transaction_delete -> { tracker?.selection?.toList()?.let { transactionIds -> - AlertDialog.Builder(requireContext(), R.style.DialogTheme) + 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) + 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 } + override fun onStop() { + super.onStop() + (requireActivity() as AppCompatActivity).supportActionBar?.subtitle = null + } + override fun onDestroyActionMode(mode: ActionMode) { tracker?.clearSelection() actionMode = null |