diff options
author | Torsten Grote <t@grobox.de> | 2020-09-03 11:50:13 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-09-03 11:50:13 -0300 |
commit | 85c344b358e13d5b78647d191d6129dd11f8bdaf (patch) | |
tree | 0aa870edbd76e43075d3c701626a2b41ce78682d /wallet/src/main/java/net/taler/wallet/withdraw | |
parent | 126b0710dda4546dc3337df1bee886f5f4657674 (diff) | |
download | taler-android-85c344b358e13d5b78647d191d6129dd11f8bdaf.tar.gz taler-android-85c344b358e13d5b78647d191d6129dd11f8bdaf.tar.bz2 taler-android-85c344b358e13d5b78647d191d6129dd11f8bdaf.zip |
[wallet] migrate away from kotlin view extensions
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/withdraw')
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, |