summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/withdraw
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/withdraw')
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/ErrorFragment.kt21
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt25
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt48
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/ReviewExchangeTosFragment.kt29
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt34
5 files changed, 80 insertions, 77 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/ErrorFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/ErrorFragment.kt
index fa5ab2f..8b4ca9d 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/ErrorFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/ErrorFragment.kt
@@ -25,38 +25,41 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
-import kotlinx.android.synthetic.main.fragment_error.*
-import net.taler.wallet.R
import net.taler.wallet.MainViewModel
+import net.taler.wallet.R
+import net.taler.wallet.databinding.FragmentErrorBinding
class ErrorFragment : Fragment() {
private val model: MainViewModel by activityViewModels()
private val withdrawManager by lazy { model.withdrawManager }
+ private lateinit var ui: FragmentErrorBinding
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_error, container, false)
+ ui = FragmentErrorBinding.inflate(inflater, container, false)
+ return ui.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- errorTitle.setText(R.string.withdraw_error_title)
- errorMessage.setText(R.string.withdraw_error_message)
+ ui.errorTitle.setText(R.string.withdraw_error_title)
+ ui.errorMessage.setText(R.string.withdraw_error_message)
// show dev error message if dev mode is on
val status = withdrawManager.withdrawStatus.value
if (model.devMode.value == true && status is WithdrawStatus.Error) {
- errorDevMessage.visibility = VISIBLE
- errorDevMessage.text = status.message
+ ui.errorDevMessage.visibility = VISIBLE
+ ui.errorDevMessage.text = status.message
} else {
- errorDevMessage.visibility = GONE
+ ui.errorDevMessage.visibility = GONE
}
- backButton.setOnClickListener {
+ ui.backButton.setOnClickListener {
findNavController().navigateUp()
}
}
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
index af76e9b..4b56dd0 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawFragment.kt
@@ -25,11 +25,11 @@ 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.hideKeyboard
import net.taler.lib.common.Amount
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
+import net.taler.wallet.databinding.FragmentManualWithdrawBinding
import net.taler.wallet.scanQrCode
import java.util.Locale
@@ -40,33 +40,36 @@ class ManualWithdrawFragment : Fragment() {
private val exchangeItem by lazy { requireNotNull(exchangeManager.withdrawalExchange) }
private val withdrawManager by lazy { model.withdrawManager }
+ private lateinit var ui: FragmentManualWithdrawBinding
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_manual_withdraw, container, false)
+ ui = FragmentManualWithdrawBinding.inflate(inflater, container, false)
+ return ui.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- qrCodeButton.setOnClickListener { scanQrCode(requireActivity()) }
- currencyView.text = exchangeItem.currency
+ ui.qrCodeButton.setOnClickListener { scanQrCode(requireActivity()) }
+ ui.currencyView.text = exchangeItem.currency
val paymentOptions = exchangeItem.paytoUris.mapNotNull {paytoUri ->
Uri.parse(paytoUri).authority?.toUpperCase(Locale.getDefault())
}.joinToString(separator = "\n", prefix = "• ")
- paymentOptionsLabel.text =
+ ui.paymentOptionsLabel.text =
getString(R.string.withdraw_manual_payment_options, exchangeItem.name, paymentOptions)
- checkFeesButton.setOnClickListener { onCheckFees() }
+ ui.checkFeesButton.setOnClickListener { onCheckFees() }
}
private fun onCheckFees() {
- if (amountView.text?.isEmpty() ?: true) {
- amountLayout.setError(getString(R.string.withdraw_amount_error))
+ if (ui.amountView.text?.isEmpty() != false) {
+ ui.amountLayout.error = getString(R.string.withdraw_amount_error)
return
}
- amountLayout.setError(null)
- val value = amountView.text.toString().toLong()
+ ui.amountLayout.error = null
+ val value = ui.amountView.text.toString().toLong()
val amount = Amount(exchangeItem.currency, value, 0)
- amountView.hideKeyboard()
+ ui.amountView.hideKeyboard()
Toast.makeText(requireContext(), "Not implemented: $amount", LENGTH_SHORT).show()
withdrawManager.getWithdrawalDetails(exchangeItem.exchangeBaseUrl, amount)
}
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
index ffc64d4..0c7687c 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt
@@ -24,17 +24,16 @@ import android.widget.Toast
import android.widget.Toast.LENGTH_SHORT
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
-import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.snackbar.Snackbar.LENGTH_LONG
-import kotlinx.android.synthetic.main.fragment_prompt_withdraw.*
import net.taler.common.fadeIn
import net.taler.common.fadeOut
import net.taler.lib.common.Amount
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
import net.taler.wallet.cleanExchange
+import net.taler.wallet.databinding.FragmentPromptWithdrawBinding
import net.taler.wallet.withdraw.WithdrawStatus.Loading
import net.taler.wallet.withdraw.WithdrawStatus.TosReviewRequired
import net.taler.wallet.withdraw.WithdrawStatus.Withdrawing
@@ -44,17 +43,20 @@ class PromptWithdrawFragment : Fragment() {
private val model: MainViewModel by activityViewModels()
private val withdrawManager by lazy { model.withdrawManager }
+ private lateinit var ui: FragmentPromptWithdrawBinding
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_prompt_withdraw, container, false)
+ ui = FragmentPromptWithdrawBinding.inflate(inflater, container, false)
+ return ui.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- withdrawManager.withdrawStatus.observe(viewLifecycleOwner, Observer {
+ withdrawManager.withdrawStatus.observe(viewLifecycleOwner, {
showWithdrawStatus(it)
})
}
@@ -62,11 +64,11 @@ class PromptWithdrawFragment : Fragment() {
private fun showWithdrawStatus(status: WithdrawStatus?): Any = when (status) {
is WithdrawStatus.ReceivedDetails -> {
showContent(status.amountRaw, status.amountEffective, status.exchangeBaseUrl)
- confirmWithdrawButton.apply {
+ ui.confirmWithdrawButton.apply {
text = getString(R.string.withdraw_button_confirm)
setOnClickListener {
it.fadeOut()
- confirmProgressBar.fadeIn()
+ ui.confirmProgressBar.fadeIn()
withdrawManager.acceptWithdrawal()
}
isEnabled = true
@@ -87,7 +89,7 @@ class PromptWithdrawFragment : Fragment() {
}
is TosReviewRequired -> {
showContent(status.amountRaw, status.amountEffective, status.exchangeBaseUrl)
- confirmWithdrawButton.apply {
+ ui.confirmWithdrawButton.apply {
text = getString(R.string.withdraw_button_tos)
setOnClickListener {
findNavController().navigate(R.id.action_promptWithdraw_to_reviewExchangeTOS)
@@ -104,29 +106,29 @@ class PromptWithdrawFragment : Fragment() {
private fun showContent(amountRaw: Amount, amountEffective: Amount, exchange: String) {
model.showProgressBar.value = false
- progressBar.fadeOut()
+ ui.progressBar.fadeOut()
- introView.fadeIn()
- effectiveAmountView.text = amountEffective.toString()
- effectiveAmountView.fadeIn()
+ ui.introView.fadeIn()
+ ui.effectiveAmountView.text = amountEffective.toString()
+ ui.effectiveAmountView.fadeIn()
- chosenAmountLabel.fadeIn()
- chosenAmountView.text = amountRaw.toString()
- chosenAmountView.fadeIn()
+ ui.chosenAmountLabel.fadeIn()
+ ui.chosenAmountView.text = amountRaw.toString()
+ ui.chosenAmountView.fadeIn()
- feeLabel.fadeIn()
- feeView.text = getString(R.string.amount_negative, (amountRaw - amountEffective).toString())
- feeView.fadeIn()
+ ui.feeLabel.fadeIn()
+ ui.feeView.text = getString(R.string.amount_negative, (amountRaw - amountEffective).toString())
+ ui.feeView.fadeIn()
- exchangeIntroView.fadeIn()
- withdrawExchangeUrl.text = cleanExchange(exchange)
- withdrawExchangeUrl.fadeIn()
- selectExchangeButton.fadeIn()
- selectExchangeButton.setOnClickListener {
+ ui.exchangeIntroView.fadeIn()
+ ui.withdrawExchangeUrl.text = cleanExchange(exchange)
+ ui.withdrawExchangeUrl.fadeIn()
+ ui.selectExchangeButton.fadeIn()
+ ui.selectExchangeButton.setOnClickListener {
Toast.makeText(context, "Not yet implemented", LENGTH_SHORT).show()
}
- withdrawCard.fadeIn()
+ ui.withdrawCard.fadeIn()
}
}
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/ReviewExchangeTosFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/ReviewExchangeTosFragment.kt
index db1f326..73fe760 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/ReviewExchangeTosFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/ReviewExchangeTosFragment.kt
@@ -25,17 +25,19 @@ import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import io.noties.markwon.Markwon
-import kotlinx.android.synthetic.main.fragment_review_exchange_tos.*
import net.taler.common.fadeIn
import net.taler.common.fadeOut
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
+import net.taler.wallet.databinding.FragmentReviewExchangeTosBinding
import java.text.ParseException
class ReviewExchangeTosFragment : Fragment() {
private val model: MainViewModel by activityViewModels()
private val withdrawManager by lazy { model.withdrawManager }
+
+ private lateinit var ui: FragmentReviewExchangeTosBinding
private val markwon by lazy { Markwon.builder(requireContext()).build() }
private val adapter by lazy { TosAdapter(markwon) }
@@ -44,13 +46,14 @@ class ReviewExchangeTosFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_review_exchange_tos, container, false)
+ ui = FragmentReviewExchangeTosBinding.inflate(inflater, container, false)
+ return ui.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- acceptTosCheckBox.isChecked = false
- acceptTosCheckBox.setOnCheckedChangeListener { _, _ ->
+ ui.acceptTosCheckBox.isChecked = false
+ ui.acceptTosCheckBox.setOnCheckedChangeListener { _, _ ->
withdrawManager.acceptCurrentTermsOfService()
}
withdrawManager.withdrawStatus.observe(viewLifecycleOwner, Observer {
@@ -65,11 +68,11 @@ class ReviewExchangeTosFragment : Fragment() {
return@Observer
}
adapter.setSections(sections)
- tosList.adapter = adapter
- tosList.fadeIn()
+ ui.tosList.adapter = adapter
+ ui.tosList.fadeIn()
- acceptTosCheckBox.fadeIn()
- progressBar.fadeOut()
+ ui.acceptTosCheckBox.fadeIn()
+ ui.progressBar.fadeOut()
}
is WithdrawStatus.Loading -> {
findNavController().navigate(R.id.action_reviewExchangeTOS_to_promptWithdraw)
@@ -82,11 +85,11 @@ class ReviewExchangeTosFragment : Fragment() {
}
private fun onTosError(msg: String) {
- tosList.fadeIn()
- progressBar.fadeOut()
- buttonCard.fadeOut()
- errorView.text = getString(R.string.exchange_tos_error, "\n\n$msg")
- errorView.fadeIn()
+ ui.tosList.fadeIn()
+ ui.progressBar.fadeOut()
+ ui.buttonCard.fadeOut()
+ ui.errorView.text = getString(R.string.exchange_tos_error, "\n\n$msg")
+ ui.errorView.fadeIn()
}
}
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 b6b4285..25c5b72 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -24,8 +24,8 @@ import kotlinx.coroutines.launch
import kotlinx.serialization.Serializable
import net.taler.lib.common.Amount
import net.taler.wallet.TAG
-import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.backend.TalerErrorInfo
+import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.exchanges.ExchangeFees
import net.taler.wallet.exchanges.ExchangeItem
import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails
@@ -89,14 +89,11 @@ class WithdrawManager(
fun getWithdrawalDetails(uri: String) = scope.launch {
withdrawStatus.value = WithdrawStatus.Loading(uri)
- val response =
- api.request("getWithdrawalDetailsForUri", WithdrawalDetailsForUri.serializer()) {
- put("talerWithdrawUri", uri)
- }
- response.onError { error ->
+ api.request("getWithdrawalDetailsForUri", WithdrawalDetailsForUri.serializer()) {
+ put("talerWithdrawUri", uri)
+ }.onError { error ->
handleError("getWithdrawalDetailsForUri", error)
- }
- response.onSuccess { details ->
+ }.onSuccess { details ->
if (details.defaultExchangeBaseUrl == null) {
// TODO go to exchange selection screen instead
val chosenExchange = details.possibleExchanges[0].exchangeBaseUrl
@@ -113,15 +110,12 @@ class WithdrawManager(
uri: String? = null
) = scope.launch {
withdrawStatus.value = WithdrawStatus.Loading(uri)
- val response =
- api.request("getWithdrawalDetailsForAmount", WithdrawalDetails.serializer()) {
- put("exchangeBaseUrl", exchangeBaseUrl)
- put("amount", amount.toJSONString())
- }
- response.onError { error ->
+ api.request("getWithdrawalDetailsForAmount", WithdrawalDetails.serializer()) {
+ put("exchangeBaseUrl", exchangeBaseUrl)
+ put("amount", amount.toJSONString())
+ }.onError { error ->
handleError("getWithdrawalDetailsForAmount", error)
- }
- response.onSuccess { details ->
+ }.onSuccess { details ->
if (details.tosAccepted) {
withdrawStatus.value = ReceivedDetails(
talerWithdrawUri = uri,
@@ -138,13 +132,11 @@ class WithdrawManager(
details: WithdrawalDetails,
uri: String?
) = scope.launch {
- val response = api.request("getExchangeTos", TosResponse.serializer()) {
+ api.request("getExchangeTos", TosResponse.serializer()) {
put("exchangeBaseUrl", exchangeBaseUrl)
- }
- response.onError {
+ }.onError {
handleError("getExchangeTos", it)
- }
- response.onSuccess {
+ }.onSuccess {
withdrawStatus.value = WithdrawStatus.TosReviewRequired(
talerWithdrawUri = uri,
exchangeBaseUrl = exchangeBaseUrl,