diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt | 90 |
1 files changed, 50 insertions, 40 deletions
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 a11f8ba..27e59bb 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt @@ -16,71 +16,81 @@ package net.taler.wallet.transactions -import android.content.Intent -import android.content.Intent.ACTION_VIEW -import android.net.Uri import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController -import net.taler.common.startActivitySafe -import net.taler.common.toAbsoluteTime import net.taler.wallet.MainViewModel import net.taler.wallet.R -import net.taler.wallet.cleanExchange -import net.taler.wallet.databinding.FragmentTransactionWithdrawalBinding +import net.taler.wallet.compose.TalerSurface +import net.taler.wallet.launchInAppBrowser +import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer +import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi +import net.taler.wallet.withdraw.TransactionWithdrawalComposable import net.taler.wallet.withdraw.createManualTransferRequired -class TransactionWithdrawalFragment : TransactionDetailFragment() { +class TransactionWithdrawalFragment : TransactionDetailFragment(), ActionListener { private val model: MainViewModel by activityViewModels() private val withdrawManager by lazy { model.withdrawManager } - private lateinit var ui: FragmentTransactionWithdrawalBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View { - ui = FragmentTransactionWithdrawalBinding.inflate(inflater, container, false) - return ui.root + ): View = ComposeView(requireContext()).apply { + setContent { + TalerSurface { + val t = transactionManager.selectedTransaction.observeAsState().value + if (t is TransactionWithdrawal) TransactionWithdrawalComposable( + t = t, + devMode = devMode, + spec = balanceManager.getSpecForCurrency(t.amountRaw.currency), + actionListener = this@TransactionWithdrawalFragment, + ) { + onTransitionButtonClicked(t, it) + } + } + } } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - val t = transaction as TransactionWithdrawal - ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext()) + override fun onActionButtonClicked(tx: Transaction, type: ActionListener.Type) { + when (type) { + ActionListener.Type.COMPLETE_KYC -> { + if (tx !is TransactionWithdrawal) return + tx.kycUrl?.let { + launchInAppBrowser(requireContext(), it) + } + } - ui.effectiveAmountLabel.text = getString(R.string.withdraw_total) - ui.effectiveAmountView.text = t.amountEffective.toString() - if (t.pending && t.withdrawalDetails is WithdrawalDetails.TalerBankIntegrationApi && - !t.confirmed && t.withdrawalDetails.bankConfirmationUrl != null - ) { - val i = Intent(ACTION_VIEW).apply { - data = Uri.parse(t.withdrawalDetails.bankConfirmationUrl) + ActionListener.Type.CONFIRM_WITH_BANK -> { + if (tx !is TransactionWithdrawal) return + if (tx.withdrawalDetails !is TalerBankIntegrationApi) return + tx.withdrawalDetails.bankConfirmationUrl?.let { url -> + launchInAppBrowser(requireContext(), url) + } } - ui.confirmWithdrawalButton.setOnClickListener { startActivitySafe(i) } - } else if (t.pending && !t.confirmed && t.withdrawalDetails is WithdrawalDetails.ManualTransfer) { - ui.confirmWithdrawalButton.setText(R.string.withdraw_manual_ready_details_intro) - ui.confirmWithdrawalButton.setOnClickListener { + + ActionListener.Type.CONFIRM_MANUAL -> { + if (tx !is TransactionWithdrawal) return + if (tx.withdrawalDetails !is ManualTransfer) return + if (tx.withdrawalDetails.exchangeCreditAccountDetails.isNullOrEmpty()) return val status = createManualTransferRequired( - amount = t.amountRaw, - exchangeBaseUrl = t.exchangeBaseUrl, - // TODO what if there's more than one or no URI? - uriStr = t.withdrawalDetails.exchangePaytoUris[0], - transactionId = t.transactionId, + transactionId = tx.transactionId, + exchangeBaseUrl = tx.exchangeBaseUrl, + amountRaw = tx.amountRaw, + amountEffective = tx.amountEffective, + withdrawalAccountList = tx.withdrawalDetails.exchangeCreditAccountDetails, ) withdrawManager.viewManualWithdrawal(status) - findNavController().navigate(R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success) + findNavController().navigate( + R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success, + ) } - } else ui.confirmWithdrawalButton.visibility = View.GONE - 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) + } } - } |