From 2c78d3c9ac6d2b7749af4c46f424766ede0a7a1b Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 5 Jan 2023 17:03:34 -0300 Subject: [wallet] Some fixes for accepting a tip --- .../taler/wallet/tip/AlreadyAcceptedFragment.kt | 7 +- .../java/net/taler/wallet/tip/PromptTipFragment.kt | 94 +++++++++++----------- .../main/java/net/taler/wallet/tip/TipManager.kt | 34 ++------ .../main/java/net/taler/wallet/tip/TipResponses.kt | 8 +- wallet/src/main/res/layout/fragment_prompt_tip.xml | 2 +- 5 files changed, 58 insertions(+), 87 deletions(-) diff --git a/wallet/src/main/java/net/taler/wallet/tip/AlreadyAcceptedFragment.kt b/wallet/src/main/java/net/taler/wallet/tip/AlreadyAcceptedFragment.kt index d76b6a1..637a2da 100644 --- a/wallet/src/main/java/net/taler/wallet/tip/AlreadyAcceptedFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/tip/AlreadyAcceptedFragment.kt @@ -33,9 +33,10 @@ class AlreadyAcceptedFragment : Fragment() { private lateinit var ui: FragmentAlreadyAcceptedBinding override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { ui = FragmentAlreadyAcceptedBinding.inflate(inflater, container, false) return ui.root } diff --git a/wallet/src/main/java/net/taler/wallet/tip/PromptTipFragment.kt b/wallet/src/main/java/net/taler/wallet/tip/PromptTipFragment.kt index 6a96d1d..b0f5a35 100644 --- a/wallet/src/main/java/net/taler/wallet/tip/PromptTipFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/tip/PromptTipFragment.kt @@ -44,11 +44,11 @@ class PromptTipFragment : Fragment() { private lateinit var ui: FragmentPromptTipBinding override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle?, ): View { ui = FragmentPromptTipBinding.inflate(inflater, container, false) - ui.introView.fadeIn() return ui.root } @@ -73,55 +73,53 @@ class PromptTipFragment : Fragment() { } } - private fun onPaymentStatusChanged(payStatus: TipStatus?) { - when (payStatus) { - null -> {} - is TipStatus.Prepared -> { - showLoading(false) - showContent( - amountRaw = payStatus.tipAmountRaw, - amountEffective = payStatus.tipAmountEffective, - exchange = payStatus.exchangeBaseUrl, - merchant = payStatus.merchantBaseUrl + private fun onPaymentStatusChanged(payStatus: TipStatus) = when (payStatus) { + is TipStatus.Prepared -> { + showLoading(false) + showContent( + amountRaw = payStatus.tipAmountRaw, + amountEffective = payStatus.tipAmountEffective, + exchange = payStatus.exchangeBaseUrl, + merchant = payStatus.merchantBaseUrl + ) + ui.confirmWithdrawButton.isEnabled = true + ui.confirmWithdrawButton.setOnClickListener { + tipManager.confirmTip( + payStatus.walletTipId, + payStatus.tipAmountRaw.currency ) - //showOrder(payStatus.contractTerms, payStatus.amountRaw, fees) - ui.confirmWithdrawButton.isEnabled = true - ui.confirmWithdrawButton.setOnClickListener { - model.showProgressBar.value = true - tipManager.confirmTip( - payStatus.walletTipId, - payStatus.tipAmountRaw.currency - ) - ui.confirmWithdrawButton.fadeOut() - ui.progressBar.fadeIn() - } - } - is TipStatus.AlreadyAccepted -> { - showLoading(false) - tipManager.resetTipStatus() - findNavController().navigate(R.id.action_promptTip_to_alreadyAccepted) - } - is TipStatus.Success -> { - showLoading(false) - tipManager.resetTipStatus() - findNavController().navigate(R.id.action_promptTip_to_nav_main) - model.showTransactions(payStatus.currency) - Snackbar.make(requireView(), R.string.tip_received, LENGTH_LONG).show() - } - is TipStatus.Error -> { - showLoading(false) - ui.introView.text = getString(R.string.payment_error, payStatus.error) - ui.introView.fadeIn() - } - is TipStatus.None -> { - // No payment active. - showLoading(false) - } - is TipStatus.Loading -> { - // Wait until loaded ... - showLoading(true) } } + is TipStatus.Accepting -> { + model.showProgressBar.value = true + ui.confirmProgressBar.fadeIn() + ui.confirmWithdrawButton.fadeOut() + } + is TipStatus.AlreadyAccepted -> { + showLoading(false) + tipManager.resetTipStatus() + findNavController().navigate(R.id.action_promptTip_to_alreadyAccepted) + } + is TipStatus.Success -> { + showLoading(false) + tipManager.resetTipStatus() + findNavController().navigate(R.id.action_promptTip_to_nav_main) + model.showTransactions(payStatus.currency) + Snackbar.make(requireView(), R.string.tip_received, LENGTH_LONG).show() + } + is TipStatus.Error -> { + showLoading(false) + ui.introView.text = getString(R.string.payment_error, payStatus.error) + ui.introView.fadeIn() + } + is TipStatus.None -> { + // No tip active + showLoading(false) + } + is TipStatus.Loading -> { + // Wait until loaded ... + showLoading(true) + } } private fun showContent( diff --git a/wallet/src/main/java/net/taler/wallet/tip/TipManager.kt b/wallet/src/main/java/net/taler/wallet/tip/TipManager.kt index 855feb0..5548687 100644 --- a/wallet/src/main/java/net/taler/wallet/tip/TipManager.kt +++ b/wallet/src/main/java/net/taler/wallet/tip/TipManager.kt @@ -25,10 +25,10 @@ import kotlinx.coroutines.launch import net.taler.common.Amount import net.taler.common.Timestamp import net.taler.wallet.TAG -import net.taler.wallet.backend.WalletBackendApi import net.taler.wallet.backend.TalerErrorInfo -import net.taler.wallet.tip.PrepareTipResponse.TipPossibleResponse +import net.taler.wallet.backend.WalletBackendApi import net.taler.wallet.tip.PrepareTipResponse.AlreadyAcceptedResponse +import net.taler.wallet.tip.PrepareTipResponse.TipPossibleResponse sealed class TipStatus { object None : TipStatus() @@ -41,12 +41,12 @@ sealed class TipStatus { val tipAmountRaw: Amount, val tipAmountEffective: Amount, ) : TipStatus() - + object Accepting : TipStatus() data class AlreadyAccepted( val walletTipId: String, ) : TipStatus() - // TODO bring user to fulfilment URI + // TODO bring user to fulfilment URI (not yet in wallet API) data class Error(val error: String) : TipStatus() data class Success(val currency: String) : TipStatus() } @@ -77,6 +77,7 @@ class TipManager( } fun confirmTip(tipId: String, currency: String) = scope.launch { + mTipStatus.value = TipStatus.Accepting api.request("acceptTip", ConfirmTipResult.serializer()) { put("walletTipId", tipId) }.onError { @@ -86,31 +87,6 @@ class TipManager( } } -/* - @UiThread - fun abortTip() { - val ps = tipStatus.value - if (ps is TipStatus.Prepared) { - abortProposal(ps.walletTipId) - } - resetTipStatus() - } -*/ - -/* - internal fun abortProposal(proposalId: String) = scope.launch { - Log.i(TAG, "aborting proposal") - api.request("abortProposal") { - put("proposalId", proposalId) - }.onError { - Log.e(TAG, "received error response to abortProposal") - handleError("abortProposal", it) - }.onSuccess { - mTipStatus.postValue(TipStatus.None) - } - } -*/ - @UiThread fun resetTipStatus() { mTipStatus.value = TipStatus.None diff --git a/wallet/src/main/java/net/taler/wallet/tip/TipResponses.kt b/wallet/src/main/java/net/taler/wallet/tip/TipResponses.kt index aa2da15..b0f6273 100644 --- a/wallet/src/main/java/net/taler/wallet/tip/TipResponses.kt +++ b/wallet/src/main/java/net/taler/wallet/tip/TipResponses.kt @@ -21,9 +21,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonClassDiscriminator import net.taler.common.Amount -import net.taler.common.ContractTerms import net.taler.common.Timestamp -import net.taler.wallet.backend.TalerErrorInfo @OptIn(ExperimentalSerializationApi::class) @Serializable @@ -46,7 +44,7 @@ sealed class PrepareTipResponse { exchangeBaseUrl = exchangeBaseUrl, expirationTimestamp = expirationTimestamp, tipAmountEffective = tipAmountEffective, - tipAmountRaw = tipAmountRaw + tipAmountRaw = tipAmountRaw, ) } @@ -58,6 +56,4 @@ sealed class PrepareTipResponse { } @Serializable -class ConfirmTipResult { - -} +class ConfirmTipResult diff --git a/wallet/src/main/res/layout/fragment_prompt_tip.xml b/wallet/src/main/res/layout/fragment_prompt_tip.xml index d96ef60..941274f 100644 --- a/wallet/src/main/res/layout/fragment_prompt_tip.xml +++ b/wallet/src/main/res/layout/fragment_prompt_tip.xml @@ -147,8 +147,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" + android:layout_marginBottom="8dp" android:gravity="center" android:textSize="24sp" android:visibility="invisible" -- cgit v1.2.3