diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt | 92 |
1 files changed, 39 insertions, 53 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt index 103d8e6..d799b8e 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt @@ -18,9 +18,7 @@ package net.taler.wallet.transactions import android.os.Bundle import android.util.Log -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem +import android.view.View import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -28,22 +26,22 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.TAG -import net.taler.wallet.transactions.TransactionAction.* +import net.taler.wallet.showError +import net.taler.wallet.transactions.TransactionAction.Abort +import net.taler.wallet.transactions.TransactionAction.Delete +import net.taler.wallet.transactions.TransactionAction.Fail +import net.taler.wallet.transactions.TransactionAction.Resume +import net.taler.wallet.transactions.TransactionAction.Retry +import net.taler.wallet.transactions.TransactionAction.Suspend abstract class TransactionDetailFragment : Fragment() { private val model: MainViewModel by activityViewModels() - val transactionManager by lazy { model.transactionManager } - val devMode by lazy { model.devMode } + protected val transactionManager by lazy { model.transactionManager } + protected val devMode get() = model.devMode.value == true - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(model.devMode.value == true) - } - - @Deprecated("Deprecated in Java") - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) transactionManager.selectedTransaction.observe(viewLifecycleOwner) { requireActivity().apply { it?.generalTitleRes?.let { @@ -53,30 +51,18 @@ abstract class TransactionDetailFragment : Fragment() { } } - @Deprecated("Deprecated in Java") - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - inflater.inflate(R.menu.transactions_detail, menu) - } - - @Deprecated("Deprecated in Java") - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - else -> super.onOptionsItemSelected(item) - } - } - private fun dialogTitle(t: TransactionAction): Int = when (t) { Delete -> R.string.transactions_delete_dialog_title Abort -> R.string.transactions_abort_dialog_title Fail -> R.string.transactions_fail_dialog_title - else -> error("unsupported") + else -> error("unsupported action: $t") } private fun dialogMessage(t: TransactionAction): Int = when (t) { Delete -> R.string.transactions_delete_dialog_message Abort -> R.string.transactions_abort_dialog_message Fail -> R.string.transactions_fail_dialog_message - else -> error("unsupported") + else -> error("unsupported action: $t") } private fun dialogButton(t: TransactionAction): Int = when (t) { @@ -86,38 +72,33 @@ abstract class TransactionDetailFragment : Fragment() { else -> error("unsupported") } - protected fun onTransitionButtonClicked(t: Transaction, tt: TransactionAction) { - when (tt) { - Delete, Abort, Fail -> { - MaterialAlertDialogBuilder(requireContext(), R.style.MaterialAlertDialog_Material3) - .setTitle(dialogTitle(tt)) - .setMessage(dialogMessage(tt)) - .setNeutralButton(R.string.cancel) { dialog, _ -> - dialog.cancel() - } - .setNegativeButton(dialogButton(tt)) { dialog, _ -> - when (tt) { - Delete -> deleteTransaction(t) - Abort -> abortTransaction(t) - Fail -> failTransaction(t) - else -> {} - } - dialog.dismiss() - } - .show() + protected fun onTransitionButtonClicked(t: Transaction, ta: TransactionAction) = when (ta) { + Delete -> showDialog(ta) { deleteTransaction(t) } + Abort -> showDialog(ta) { abortTransaction(t) } + Fail -> showDialog(ta) { failTransaction(t) } + Retry -> retryTransaction(t) + Suspend -> suspendTransaction(t) + Resume -> resumeTransaction(t) + } + + private fun showDialog(tt: TransactionAction, onAction: () -> Unit) { + MaterialAlertDialogBuilder(requireContext(), R.style.MaterialAlertDialog_Material3) + .setTitle(dialogTitle(tt)) + .setMessage(dialogMessage(tt)) + .setNeutralButton(R.string.cancel) { dialog, _ -> + dialog.cancel() } - else -> when (tt) { - Retry -> retryTransaction(t) - Suspend -> suspendTransaction(t) - Resume -> resumeTransaction(t) - else -> {} + .setNegativeButton(dialogButton(tt)) { dialog, _ -> + onAction() + dialog.dismiss() } - } + .show() } private fun deleteTransaction(t: Transaction) { transactionManager.deleteTransaction(t.transactionId) { Log.e(TAG, "Error deleteTransaction $it") + showError(it) } findNavController().popBackStack() } @@ -125,30 +106,35 @@ abstract class TransactionDetailFragment : Fragment() { private fun retryTransaction(t: Transaction) { transactionManager.retryTransaction(t.transactionId) { Log.e(TAG, "Error retryTransaction $it") + showError(it) } } private fun abortTransaction(t: Transaction) { transactionManager.abortTransaction(t.transactionId) { Log.e(TAG, "Error abortTransaction $it") + showError(it) } } private fun failTransaction(t: Transaction) { transactionManager.failTransaction(t.transactionId) { Log.e(TAG, "Error failTransaction $it") + showError(it) } } private fun suspendTransaction(t: Transaction) { transactionManager.suspendTransaction(t.transactionId) { Log.e(TAG, "Error suspendTransaction $it") + showError(it) } } private fun resumeTransaction(t: Transaction) { transactionManager.resumeTransaction(t.transactionId) { Log.e(TAG, "Error resumeTransaction $it") + showError(it) } } } |