/* * This file is part of GNU Taler * (C) 2020 Taler Systems S.A. * * GNU Taler is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 3, or (at your option) any later version. * * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * GNU Taler; see the file COPYING. If not, see */ package net.taler.wallet.transactions 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.wallet.MainViewModel import net.taler.wallet.R 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(), ActionListener { private val model: MainViewModel by activityViewModels() private val withdrawManager by lazy { model.withdrawManager } private val isPending get() = transactionManager.selectedTransaction.value?.extendedStatus == ExtendedStatus.Pending override val deleteDialogTitle: Int get() = if (isPending) R.string.cancel else super.deleteDialogTitle override val deleteDialogMessage: Int get() = if (isPending) R.string.transactions_cancel_dialog_message else super.deleteDialogMessage override val deleteDialogButton: Int get() = if (isPending) R.string.ok else super.deleteDialogButton override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View = ComposeView(requireContext()).apply { setContent { TalerSurface { val t = transactionManager.selectedTransaction.observeAsState().value val devMode = devMode.observeAsState().value ?: false if (t is TransactionWithdrawal) TransactionWithdrawalComposable( t = t, devMode = devMode, actionListener = this@TransactionWithdrawalFragment, ) { onDeleteButtonClicked(t) } } } } override fun onActionButtonClicked(tx: Transaction, type: ActionListener.Type) { when (type) { ActionListener.Type.COMPLETE_KYC -> { tx.error?.getStringExtra("kycUrl")?.let { kycUrl -> launchInAppBrowser(requireContext(), kycUrl) } } ActionListener.Type.CONFIRM_WITH_BANK -> { if (tx !is TransactionWithdrawal) return if (tx.withdrawalDetails !is TalerBankIntegrationApi) return tx.withdrawalDetails.bankConfirmationUrl?.let { url -> launchInAppBrowser(requireContext(), url) } } ActionListener.Type.CONFIRM_MANUAL -> { if (tx !is TransactionWithdrawal) return if (tx.withdrawalDetails !is ManualTransfer) return // TODO what if there's more than one or no URI? if (tx.withdrawalDetails.exchangePaytoUris.isEmpty()) return val status = createManualTransferRequired( amount = tx.amountRaw, exchangeBaseUrl = tx.exchangeBaseUrl, uriStr = tx.withdrawalDetails.exchangePaytoUris[0], transactionId = tx.transactionId, ) withdrawManager.viewManualWithdrawal(status) findNavController().navigate( R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success, ) } } } }