diff --git a/CHANGELOG.md b/CHANGELOG.md index c80ef14868..141a42e3ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ All notable changes to this project will be documented in this file. ### Fixed ## [0.72.0] +### Added +* core: Add missing payment state transferred + * if the checkout process receives the final state transferred it updates the checkout state with PAYMENT_TRANSFERRED. ### Changed * core/ui : Update icons and description from paydirekt to GiroPay * The use of the following functions changed: diff --git a/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt index f72be18c84..87d6383a86 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt @@ -417,7 +417,7 @@ class Checkout @JvmOverloads constructor( private fun hasAnyFulfillmentAllocationFailed(): Boolean { return checkoutProcess?.fulfillments?.any { it.state == FulfillmentState.ALLOCATION_FAILED - || it.state == FulfillmentState.ALLOCATION_TIMED_OUT + || it.state == FulfillmentState.ALLOCATION_TIMED_OUT } ?: false } @@ -500,7 +500,7 @@ class Checkout @JvmOverloads constructor( return true } - if (state.value == CheckoutState.VERIFYING_PAYMENT_METHOD) { + if (state.value == CheckoutState.VERIFYING_PAYMENT_METHOD && checkoutProcess.paymentState != CheckState.TRANSFERRED) { when (checkoutProcess.routingTarget) { RoutingTarget.SUPERVISOR -> { notifyStateChanged(CheckoutState.WAIT_FOR_SUPERVISOR) @@ -575,6 +575,10 @@ class Checkout @JvmOverloads constructor( } } + CheckState.TRANSFERRED -> { + notifyStateChanged(CheckoutState.PAYMENT_TRANSFERRED) + } + CheckState.FAILED -> { if (checkoutProcess.paymentResult?.failureCause != null && checkoutProcess.paymentResult.failureCause == "terminalAbort" diff --git a/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt b/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt index dbc4decb5e..d498615b25 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt @@ -120,6 +120,7 @@ enum class CheckState { @SerializedName("pending") PENDING, @SerializedName("processing") PROCESSING, @SerializedName("successful") SUCCESSFUL, + @SerializedName("transferred") TRANSFERRED, @SerializedName("failed") FAILED } diff --git a/core/src/main/java/io/snabble/sdk/checkout/CheckoutState.kt b/core/src/main/java/io/snabble/sdk/checkout/CheckoutState.kt index 0a3ecfbf48..1c926ccb18 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/CheckoutState.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/CheckoutState.kt @@ -123,4 +123,10 @@ enum class CheckoutState { * SEPA mandate for PAYONE is needed */ PAYONE_SEPA_MANDATE_REQUIRED, + + /** + * The process was transferred to a payment system. The outcome of the processing + * will not be communicated + */ + PAYMENT_TRANSFERRED, } diff --git a/ui/src/main/java/io/snabble/sdk/ui/cart/CheckoutBar.kt b/ui/src/main/java/io/snabble/sdk/ui/cart/CheckoutBar.kt index af57b6877f..7c30555f94 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/cart/CheckoutBar.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/cart/CheckoutBar.kt @@ -372,6 +372,7 @@ open class CheckoutBar @JvmOverloads constructor( CheckoutState.WAIT_FOR_SUPERVISOR, CheckoutState.WAIT_FOR_APPROVAL, CheckoutState.PAYMENT_APPROVED, + CheckoutState.PAYMENT_TRANSFERRED, CheckoutState.DENIED_BY_PAYMENT_PROVIDER, CheckoutState.DENIED_BY_SUPERVISOR, CheckoutState.PAYMENT_PROCESSING -> { @@ -465,7 +466,6 @@ open class CheckoutBar @JvmOverloads constructor( .show() progressDialog.dismiss() } - else -> { Logger.d("Unhandled event in CheckoutBar: $state") } diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt index d58d4580a7..86d98f66b8 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt @@ -155,9 +155,6 @@ class CheckoutActivity : FragmentActivity() { PaymentMethod.QRCODE_POS -> { R.id.snabble_nav_checkout_pos } - PaymentMethod.QRCODE_OFFLINE -> { - R.id.snabble_nav_checkout_offline - } else -> { R.id.snabble_nav_payment_status } @@ -190,6 +187,11 @@ class CheckoutActivity : FragmentActivity() { CheckoutState.PAYONE_SEPA_MANDATE_REQUIRED -> { R.id.snabble_nav_payment_payone_sepa_mandate } + + CheckoutState.PAYMENT_TRANSFERRED -> { + R.id.snabble_nav_checkout_offline + } + else -> R.id.snabble_nav_payment_status } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutHelper.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutHelper.kt index 6c9efa6687..bba2cf9860 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutHelper.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutHelper.kt @@ -27,5 +27,6 @@ val CheckoutState.isCheckoutState: Boolean CheckoutState.DENIED_BY_SUPERVISOR, CheckoutState.PAYMENT_ABORT_FAILED, CheckoutState.PAYMENT_PROCESSING_ERROR, + CheckoutState.PAYMENT_TRANSFERRED, CheckoutState.PAYONE_SEPA_MANDATE_REQUIRED -> true } diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineFragment.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineFragment.kt index 3745ccc8f2..ff1341de5d 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineFragment.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineFragment.kt @@ -1,6 +1,17 @@ package io.snabble.sdk.ui.checkout +import android.os.Bundle +import androidx.activity.addCallback +import io.snabble.sdk.Snabble import io.snabble.sdk.ui.BaseFragment import io.snabble.sdk.ui.R -open class CheckoutOfflineFragment : BaseFragment(R.layout.snabble_fragment_checkout_offline) \ No newline at end of file +open class CheckoutOfflineFragment : BaseFragment(R.layout.snabble_fragment_checkout_offline) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + activity?.onBackPressedDispatcher?.addCallback { + Snabble.checkedInProject.value?.checkout?.reset() + } + } +} diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineView.java b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineView.java index cfb71486f6..3794976d43 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineView.java +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutOfflineView.java @@ -162,7 +162,9 @@ public void showDidPayDialog() { dialog.getWindow().setGravity(Gravity.BOTTOM); dialog.findViewById(R.id.ok).setOnClickListener(v -> { - project.getCheckout().approveOfflineMethod(); + if (project != null) { + project.getCheckout().approveOfflineMethod(); + } Telemetry.event(Telemetry.Event.CheckoutFinishByUser); dialog.dismiss(); }); @@ -285,4 +287,4 @@ public int getItemCount() { return codes.size(); } } -} \ No newline at end of file +}