From de69768ac75e1608601751bd0a187e6a687dbdd2 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 20 Jul 2020 10:55:56 -0300 Subject: [wallet] move withdrawal code to withdraw package Also show payment options from exchange's payto URIs --- .../net/taler/wallet/exchanges/ExchangeManager.kt | 14 ----- .../wallet/exchanges/ManualWithdrawFragment.kt | 61 -------------------- .../wallet/withdraw/ManualWithdrawFragment.kt | 67 ++++++++++++++++++++++ .../net/taler/wallet/withdraw/WithdrawManager.kt | 16 ++++++ wallet/src/main/res/navigation/nav_graph.xml | 2 +- wallet/src/main/res/values/strings.xml | 2 +- 6 files changed, 85 insertions(+), 77 deletions(-) delete mode 100644 wallet/src/main/java/net/taler/wallet/exchanges/ManualWithdrawFragment.kt create mode 100644 wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt (limited to 'wallet') diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt index cdd5590..41c8f2c 100644 --- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt +++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt @@ -74,18 +74,4 @@ class ExchangeManager( } } - fun getWithdrawalDetails(exchangeItem: ExchangeItem, amount: Amount) { - val args = JSONObject().apply { - put("exchangeBaseUrl", exchangeItem.exchangeBaseUrl) - put("amount", amount.toJSONString()) - } - walletBackendApi.sendRequest("getWithdrawalDetailsForAmount", args) { isError, result -> - if (isError) { - Log.e(TAG, "$result") - } else { - Log.e(TAG, "$result") - } - } - } - } diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ManualWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ManualWithdrawFragment.kt deleted file mode 100644 index c3f201d..0000000 --- a/wallet/src/main/java/net/taler/wallet/exchanges/ManualWithdrawFragment.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.exchanges - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.Toast -import android.widget.Toast.LENGTH_SHORT -import androidx.fragment.app.Fragment -import androidx.fragment.app.activityViewModels -import kotlinx.android.synthetic.main.fragment_manual_withdraw.* -import net.taler.common.Amount -import net.taler.common.hideKeyboard -import net.taler.wallet.MainViewModel -import net.taler.wallet.R -import net.taler.wallet.scanQrCode - -class ManualWithdrawFragment : Fragment() { - - private val model: MainViewModel by activityViewModels() - private val exchangeManager by lazy { model.exchangeManager } - private val exchangeItem by lazy { requireNotNull(exchangeManager.withdrawalExchange) } - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_manual_withdraw, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - qrCodeButton.setOnClickListener { scanQrCode(requireActivity()) } - currencyView.text = exchangeItem.currency - paymentOptionsLabel.text = - getString(R.string.withdraw_manual_payment_options, exchangeItem.name) - checkFeesButton.setOnClickListener { - val value = amountView.text.toString().toLong() - val amount = Amount(exchangeItem.currency, value, 0) - amountView.hideKeyboard() - Toast.makeText(view.context, "Not implemented: $amount", LENGTH_SHORT).show() - exchangeManager.getWithdrawalDetails(exchangeItem, amount) - } - } - -} diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt new file mode 100644 index 0000000..55f931d --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt @@ -0,0 +1,67 @@ +/* + * 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.withdraw + +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import android.widget.Toast.LENGTH_SHORT +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import kotlinx.android.synthetic.main.fragment_manual_withdraw.* +import net.taler.common.Amount +import net.taler.common.hideKeyboard +import net.taler.wallet.MainViewModel +import net.taler.wallet.R +import net.taler.wallet.scanQrCode +import java.util.Locale + +class ManualWithdrawFragment : Fragment() { + + private val model: MainViewModel by activityViewModels() + private val exchangeManager by lazy { model.exchangeManager } + private val exchangeItem by lazy { requireNotNull(exchangeManager.withdrawalExchange) } + private val withdrawManager by lazy { model.withdrawManager } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_manual_withdraw, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + qrCodeButton.setOnClickListener { scanQrCode(requireActivity()) } + currencyView.text = exchangeItem.currency + val paymentOptions = exchangeItem.paytoUris.mapNotNull {paytoUri -> + Uri.parse(paytoUri).authority?.toUpperCase(Locale.getDefault()) + }.joinToString(separator = "\n", prefix = "• ") + paymentOptionsLabel.text = + getString(R.string.withdraw_manual_payment_options, exchangeItem.name, paymentOptions) + checkFeesButton.setOnClickListener { + val value = amountView.text.toString().toLong() + val amount = Amount(exchangeItem.currency, value, 0) + amountView.hideKeyboard() + Toast.makeText(view.context, "Not implemented: $amount", LENGTH_SHORT).show() + withdrawManager.getWithdrawalDetails(exchangeItem, amount) + } + } + +} diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt index 75e4daa..ea65e7c 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.MutableLiveData import net.taler.common.Amount import net.taler.wallet.TAG import net.taler.wallet.backend.WalletBackendApi +import net.taler.wallet.exchanges.ExchangeItem import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails import org.json.JSONObject @@ -63,6 +64,21 @@ class WithdrawManager(private val walletBackendApi: WalletBackendApi) { } } + fun getWithdrawalDetails(exchangeItem: ExchangeItem, amount: Amount) { + val args = JSONObject().apply { + put("exchangeBaseUrl", exchangeItem.exchangeBaseUrl) + put("amount", amount.toJSONString()) + } + walletBackendApi.sendRequest("getWithdrawalDetailsForAmount", args) { isError, result -> + // {"rawAmount":"TESTKUDOS:5","effectiveAmount":"TESTKUDOS:4.8","paytoUris":["payto:\/\/x-taler-bank\/bank.test.taler.net\/Exchange"],"tosAccepted":false} + if (isError) { + Log.e(TAG, "$result") + } else { + Log.e(TAG, "$result") + } + } + } + fun getWithdrawalInfo(talerWithdrawUri: String) { val args = JSONObject().apply { put("talerWithdrawUri", talerWithdrawUri) diff --git a/wallet/src/main/res/navigation/nav_graph.xml b/wallet/src/main/res/navigation/nav_graph.xml index c9a98f0..93db557 100644 --- a/wallet/src/main/res/navigation/nav_graph.xml +++ b/wallet/src/main/res/navigation/nav_graph.xml @@ -74,7 +74,7 @@ Waiting for confirmation Make a manual transfer to the exchange How much to withdraw? - Payment options supported by %s: + Payment options supported by %1$s:\n\n%2$s Check fees Withdrawal Error Withdrawing is currently not possible. Please try again later! -- cgit v1.2.3