From f4ed0bf12a6494171583a0227b2d9901bb38ca90 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 18 Mar 2026 16:04:35 +0200 Subject: [PATCH 1/2] CardUpdateShouldContinue --- .../POCardUpdateShouldContinueRequest.kt | 1 + .../POCardUpdateShouldContinueResponse.kt | 2 ++ .../sdk/ui/card/update/CardUpdateViewModel.kt | 10 ++++----- .../ui/card/update/POCardUpdateLauncher.kt | 6 +++--- .../delegate/CardUpdateShouldContinue.kt | 21 +++++++++++++++++++ 5 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 ui/src/main/kotlin/com/processout/sdk/ui/card/update/delegate/CardUpdateShouldContinue.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardUpdateShouldContinueRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardUpdateShouldContinueRequest.kt index 2fe46fe81..6e05865e0 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardUpdateShouldContinueRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardUpdateShouldContinueRequest.kt @@ -12,6 +12,7 @@ import java.util.UUID * @param[failure] Failure that can be inspected to decide whether the flow should continue or complete. * @param[uuid] Unique identifier of request. */ +@Deprecated(message = "Not used.") data class POCardUpdateShouldContinueRequest @ProcessOutInternalApi constructor( val cardId: String, val failure: ProcessOutResult.Failure, diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardUpdateShouldContinueResponse.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardUpdateShouldContinueResponse.kt index 56e682160..0f4232919 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardUpdateShouldContinueResponse.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardUpdateShouldContinueResponse.kt @@ -13,6 +13,7 @@ import java.util.UUID * @param[failure] Failure that occurred. Must be provided from [POCardUpdateShouldContinueRequest]. * @param[shouldContinue] Boolean that indicates whether the flow should continue or complete after the [failure]. */ +@Deprecated(message = "Not used.") data class POCardUpdateShouldContinueResponse internal constructor( override val uuid: UUID, val failure: ProcessOutResult.Failure, @@ -24,6 +25,7 @@ data class POCardUpdateShouldContinueResponse internal constructor( * * @param[shouldContinue] Boolean that indicates whether the flow should continue or complete after the failure. */ +@Deprecated(message = "Not used.") fun POCardUpdateShouldContinueRequest.toResponse( shouldContinue: Boolean ) = POCardUpdateShouldContinueResponse(uuid, failure, shouldContinue) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt index 8306129b2..cc6a9115b 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt @@ -15,8 +15,6 @@ import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardUpdateEvent import com.processout.sdk.api.model.event.POCardUpdateEvent.* import com.processout.sdk.api.model.request.POCardUpdateRequest -import com.processout.sdk.api.model.request.POCardUpdateShouldContinueRequest -import com.processout.sdk.api.model.response.POCardUpdateShouldContinueResponse import com.processout.sdk.api.repository.POCardsRepository import com.processout.sdk.core.POFailure.Code.Cancelled import com.processout.sdk.core.POFailure.Code.Generic @@ -28,6 +26,8 @@ import com.processout.sdk.core.onFailure import com.processout.sdk.core.onSuccess import com.processout.sdk.ui.card.update.CardUpdateCompletion.* import com.processout.sdk.ui.card.update.CardUpdateEvent.* +import com.processout.sdk.ui.card.update.delegate.CardUpdateShouldContinueRequest +import com.processout.sdk.ui.card.update.delegate.CardUpdateShouldContinueResponse import com.processout.sdk.ui.core.state.POActionState import com.processout.sdk.ui.core.state.POActionState.Confirmation import com.processout.sdk.ui.core.state.POImmutableList @@ -79,7 +79,7 @@ internal class CardUpdateViewModel private constructor( private val _state = MutableStateFlow(initState()) val state = _state.asStateFlow() - private var latestShouldContinueRequest: POCardUpdateShouldContinueRequest? = null + private var latestShouldContinueRequest: CardUpdateShouldContinueRequest? = null init { collectFailure() @@ -354,7 +354,7 @@ internal class CardUpdateViewModel private constructor( private fun requestIfShouldContinue(failure: ProcessOutResult.Failure) { viewModelScope.launch { - val request = POCardUpdateShouldContinueRequest( + val request = CardUpdateShouldContinueRequest( cardId = configuration.cardId, failure = failure ) @@ -368,7 +368,7 @@ internal class CardUpdateViewModel private constructor( } private fun shouldContinueOnFailure() { - eventDispatcher.subscribeForResponse( + eventDispatcher.subscribeForResponse( coroutineScope = viewModelScope ) { response -> if (response.uuid == latestShouldContinueRequest?.uuid) { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/POCardUpdateLauncher.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/POCardUpdateLauncher.kt index 2bbeea2f5..adb1c4340 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/POCardUpdateLauncher.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/POCardUpdateLauncher.kt @@ -9,11 +9,11 @@ import androidx.lifecycle.lifecycleScope import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardUpdateEvent -import com.processout.sdk.api.model.request.POCardUpdateShouldContinueRequest import com.processout.sdk.api.model.response.POCard -import com.processout.sdk.api.model.response.toResponse import com.processout.sdk.core.ProcessOutActivityResult +import com.processout.sdk.ui.card.update.delegate.CardUpdateShouldContinueRequest import com.processout.sdk.ui.card.update.delegate.POCardUpdateDelegate +import com.processout.sdk.ui.card.update.delegate.toResponse import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -121,7 +121,7 @@ class POCardUpdateLauncher private constructor( } private fun dispatchShouldContinue() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/delegate/CardUpdateShouldContinue.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/delegate/CardUpdateShouldContinue.kt new file mode 100644 index 000000000..238db5eb3 --- /dev/null +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/delegate/CardUpdateShouldContinue.kt @@ -0,0 +1,21 @@ +package com.processout.sdk.ui.card.update.delegate + +import com.processout.sdk.api.dispatcher.POEventDispatcher +import com.processout.sdk.core.ProcessOutResult +import java.util.UUID + +internal data class CardUpdateShouldContinueRequest( + override val uuid: UUID = UUID.randomUUID(), + val cardId: String, + val failure: ProcessOutResult.Failure +) : POEventDispatcher.Request + +internal data class CardUpdateShouldContinueResponse( + override val uuid: UUID, + val failure: ProcessOutResult.Failure, + val shouldContinue: Boolean +) : POEventDispatcher.Response + +internal fun CardUpdateShouldContinueRequest.toResponse( + shouldContinue: Boolean +) = CardUpdateShouldContinueResponse(uuid, failure, shouldContinue) From 42c36e89092d5a30c75884800c74bef1ab84f0e9 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 18 Mar 2026 17:18:27 +0200 Subject: [PATCH 2/2] Refactored card tokenization events on standalone screen and DC, deprecated unused events --- ...OCardTokenizationPreferredSchemeRequest.kt | 1 + .../POCardTokenizationProcessingRequest.kt | 1 + ...POCardTokenizationShouldContinueRequest.kt | 1 + ...CardTokenizationPreferredSchemeResponse.kt | 2 ++ .../POCardTokenizationProcessingResponse.kt | 2 ++ ...OCardTokenizationShouldContinueResponse.kt | 2 ++ .../CardTokenizationInteractor.kt | 30 +++++++++---------- .../POCardTokenizationLauncher.kt | 15 +++------- .../POCardTokenizationViewComponent.kt | 15 +++------- .../CardTokenizationPreferredScheme.kt | 19 ++++++++++++ .../delegate/CardTokenizationProcessing.kt | 28 +++++++++++++++++ .../CardTokenizationShouldContinue.kt | 20 +++++++++++++ .../ui/checkout/DynamicCheckoutInteractor.kt | 11 +++---- .../ui/checkout/PODynamicCheckoutLauncher.kt | 5 ++-- 14 files changed, 107 insertions(+), 45 deletions(-) create mode 100644 ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationPreferredScheme.kt create mode 100644 ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationProcessing.kt create mode 100644 ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationShouldContinue.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationPreferredSchemeRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationPreferredSchemeRequest.kt index 2d989dbaa..e7f4adf50 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationPreferredSchemeRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationPreferredSchemeRequest.kt @@ -11,6 +11,7 @@ import java.util.UUID * @param[issuerInformation] Holds information about card issuing institution that issued the card to the card holder. * @param[uuid] Unique identifier of request. */ +@Deprecated(message = "Not used.") data class POCardTokenizationPreferredSchemeRequest @ProcessOutInternalApi constructor( val issuerInformation: POCardIssuerInformation, override val uuid: UUID = UUID.randomUUID() diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationProcessingRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationProcessingRequest.kt index f0ed9ad9b..c45292bec 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationProcessingRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationProcessingRequest.kt @@ -11,6 +11,7 @@ import java.util.UUID * @param[saveCard] Indicates whether the user has chosen to save the card for future payments. * @param[uuid] Unique identifier of request. */ +@Deprecated(message = "Not used.") data class POCardTokenizationProcessingRequest( val card: POCard, val saveCard: Boolean, diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationShouldContinueRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationShouldContinueRequest.kt index 555f334ca..b44503b50 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationShouldContinueRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/POCardTokenizationShouldContinueRequest.kt @@ -11,6 +11,7 @@ import java.util.UUID * @param[failure] Failure that can be inspected to decide whether the flow should continue or complete. * @param[uuid] Unique identifier of request. */ +@Deprecated(message = "Not used.") data class POCardTokenizationShouldContinueRequest @ProcessOutInternalApi constructor( val failure: ProcessOutResult.Failure, override val uuid: UUID = UUID.randomUUID() diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationPreferredSchemeResponse.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationPreferredSchemeResponse.kt index e3e5fe19c..eb40f794c 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationPreferredSchemeResponse.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationPreferredSchemeResponse.kt @@ -12,6 +12,7 @@ import java.util.UUID * @param[issuerInformation] Holds information about card issuing institution that issued the card to the card holder. * @param[preferredScheme] Preferred scheme that will be used by default for card tokenization. */ +@Deprecated(message = "Not used.") data class POCardTokenizationPreferredSchemeResponse internal constructor( override val uuid: UUID, val issuerInformation: POCardIssuerInformation, @@ -23,6 +24,7 @@ data class POCardTokenizationPreferredSchemeResponse internal constructor( * * @param[preferredScheme] Preferred scheme that will be used by default for card tokenization. Will use a primary scheme if _null_. */ +@Deprecated(message = "Not used.") fun POCardTokenizationPreferredSchemeRequest.toResponse( preferredScheme: String? ) = POCardTokenizationPreferredSchemeResponse(uuid, issuerInformation, preferredScheme) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationProcessingResponse.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationProcessingResponse.kt index c4d0e472d..6fd61b88e 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationProcessingResponse.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationProcessingResponse.kt @@ -12,6 +12,7 @@ import java.util.UUID * @param[uuid] Unique identifier of response that must be equal to UUID of request. * @param[result] Result of tokenized card processing. */ +@Deprecated(message = "Not used.") data class POCardTokenizationProcessingResponse internal constructor( override val uuid: UUID, val result: ProcessOutResult @@ -22,6 +23,7 @@ data class POCardTokenizationProcessingResponse internal constructor( * * @param[result] Result of tokenized card processing. */ +@Deprecated(message = "Not used.") fun POCardTokenizationProcessingRequest.toResponse( result: ProcessOutResult ) = POCardTokenizationProcessingResponse( diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationShouldContinueResponse.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationShouldContinueResponse.kt index d6bc50df2..4dc713acd 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationShouldContinueResponse.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/POCardTokenizationShouldContinueResponse.kt @@ -13,6 +13,7 @@ import java.util.UUID * @param[failure] Failure that occurred. Must be provided from [POCardTokenizationShouldContinueRequest]. * @param[shouldContinue] Boolean that indicates whether the flow should continue or complete after the [failure]. */ +@Deprecated(message = "Not used.") data class POCardTokenizationShouldContinueResponse internal constructor( override val uuid: UUID, val failure: ProcessOutResult.Failure, @@ -24,6 +25,7 @@ data class POCardTokenizationShouldContinueResponse internal constructor( * * @param[shouldContinue] Boolean that indicates whether the flow should continue or complete after the failure. */ +@Deprecated(message = "Not used.") fun POCardTokenizationShouldContinueRequest.toResponse( shouldContinue: Boolean ) = POCardTokenizationShouldContinueResponse(uuid, failure, shouldContinue) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt index 55fb9e03a..fd3bf2d14 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt @@ -7,8 +7,11 @@ import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardTokenizationEvent import com.processout.sdk.api.model.event.POCardTokenizationEvent.* -import com.processout.sdk.api.model.request.* -import com.processout.sdk.api.model.response.* +import com.processout.sdk.api.model.request.POCardTokenizationRequest +import com.processout.sdk.api.model.request.POContact +import com.processout.sdk.api.model.response.POCard +import com.processout.sdk.api.model.response.POCardIssuerInformation +import com.processout.sdk.api.model.response.POCardScheme import com.processout.sdk.api.repository.POCardsRepository import com.processout.sdk.core.POFailure.Code.Cancelled import com.processout.sdk.core.POFailure.Code.Generic @@ -26,12 +29,9 @@ import com.processout.sdk.ui.card.tokenization.CardTokenizationEvent.* import com.processout.sdk.ui.card.tokenization.CardTokenizationInteractorState.* import com.processout.sdk.ui.card.tokenization.CardTokenizationSideEffect.CardScanner import com.processout.sdk.ui.card.tokenization.POCardTokenizationConfiguration.BillingAddressConfiguration.CollectionMode.* -import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationEligibilityRequest -import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationEligibilityResponse -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationEligibility +import com.processout.sdk.ui.card.tokenization.delegate.* import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationEligibility.Eligible import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationEligibility.NotEligible -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationState import com.processout.sdk.ui.core.state.POAvailableValue import com.processout.sdk.ui.shared.extension.currentAppLocale import com.processout.sdk.ui.shared.extension.distinctUntilChangedByMultiple @@ -88,10 +88,10 @@ internal class CardTokenizationInteractor( private var issuerInformationJob: Job? = null - private var latestProcessingRequest: POCardTokenizationProcessingRequest? = null + private var latestProcessingRequest: CardTokenizationProcessingRequest? = null private var latestEligibilityRequest: CardTokenizationEligibilityRequest? = null - private var latestPreferredSchemeRequest: POCardTokenizationPreferredSchemeRequest? = null - private var latestShouldContinueRequest: POCardTokenizationShouldContinueRequest? = null + private var latestPreferredSchemeRequest: CardTokenizationPreferredSchemeRequest? = null + private var latestShouldContinueRequest: CardTokenizationShouldContinueRequest? = null //region Initialization @@ -507,7 +507,7 @@ internal class CardTokenizationInteractor( private fun requestPreferredScheme(issuerInformation: POCardIssuerInformation) { interactorScope.launch { - val request = POCardTokenizationPreferredSchemeRequest(issuerInformation) + val request = CardTokenizationPreferredSchemeRequest(issuerInformation = issuerInformation) latestPreferredSchemeRequest = request eventDispatcher.send(request) POLogger.info("Requested to choose preferred scheme by issuer information: %s", issuerInformation) @@ -515,7 +515,7 @@ internal class CardTokenizationInteractor( } private fun collectPreferredScheme() { - eventDispatcher.subscribeForResponse( + eventDispatcher.subscribeForResponse( coroutineScope = interactorScope ) { response -> if (response.uuid == latestPreferredSchemeRequest?.uuid) { @@ -827,7 +827,7 @@ internal class CardTokenizationInteractor( } private suspend fun requestToProcessTokenizedCard(card: POCard) { - val request = POCardTokenizationProcessingRequest( + val request = CardTokenizationProcessingRequest( card = card, saveCard = _state.value.saveCardField.value.text.toBooleanStrictOrNull() ?: false ) @@ -840,7 +840,7 @@ internal class CardTokenizationInteractor( } private fun handleCompletion() { - eventDispatcher.subscribeForResponse( + eventDispatcher.subscribeForResponse( coroutineScope = interactorScope ) { response -> if (response.uuid == latestProcessingRequest?.uuid) { @@ -865,7 +865,7 @@ internal class CardTokenizationInteractor( private fun requestIfShouldContinue(failure: ProcessOutResult.Failure) { interactorScope.launch { - val request = POCardTokenizationShouldContinueRequest(failure) + val request = CardTokenizationShouldContinueRequest(failure = failure) latestShouldContinueRequest = request eventDispatcher.send(request) POLogger.info("Requested to decide whether the flow should continue or complete after the failure: %s", failure) @@ -873,7 +873,7 @@ internal class CardTokenizationInteractor( } private fun shouldContinueOnFailure() { - eventDispatcher.subscribeForResponse( + eventDispatcher.subscribeForResponse( coroutineScope = interactorScope ) { response -> if (response.uuid == latestShouldContinueRequest?.uuid) { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/POCardTokenizationLauncher.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/POCardTokenizationLauncher.kt index 076b23916..20d248dea 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/POCardTokenizationLauncher.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/POCardTokenizationLauncher.kt @@ -9,16 +9,9 @@ import androidx.lifecycle.lifecycleScope import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardTokenizationEvent -import com.processout.sdk.api.model.request.POCardTokenizationPreferredSchemeRequest -import com.processout.sdk.api.model.request.POCardTokenizationProcessingRequest -import com.processout.sdk.api.model.request.POCardTokenizationShouldContinueRequest import com.processout.sdk.api.model.response.POCard -import com.processout.sdk.api.model.response.toResponse import com.processout.sdk.core.ProcessOutActivityResult -import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationEligibilityRequest -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationDelegate -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationState -import com.processout.sdk.ui.card.tokenization.delegate.toResponse +import com.processout.sdk.ui.card.tokenization.delegate.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -136,7 +129,7 @@ class POCardTokenizationLauncher private constructor( } private fun dispatchTokenizedCard() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { @@ -164,7 +157,7 @@ class POCardTokenizationLauncher private constructor( } private fun dispatchPreferredScheme() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { @@ -175,7 +168,7 @@ class POCardTokenizationLauncher private constructor( } private fun dispatchShouldContinue() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/component/POCardTokenizationViewComponent.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/component/POCardTokenizationViewComponent.kt index 4d99cfacd..3ab878295 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/component/POCardTokenizationViewComponent.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/component/POCardTokenizationViewComponent.kt @@ -18,11 +18,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardTokenizationEvent -import com.processout.sdk.api.model.request.POCardTokenizationPreferredSchemeRequest -import com.processout.sdk.api.model.request.POCardTokenizationProcessingRequest -import com.processout.sdk.api.model.request.POCardTokenizationShouldContinueRequest import com.processout.sdk.api.model.response.POCard -import com.processout.sdk.api.model.response.toResponse import com.processout.sdk.core.ProcessOutResult import com.processout.sdk.core.getOrNull import com.processout.sdk.ui.card.scanner.POCardScannerLauncher @@ -35,10 +31,7 @@ import com.processout.sdk.ui.card.tokenization.CardTokenizationSideEffect.CardSc import com.processout.sdk.ui.card.tokenization.CardTokenizationViewModel import com.processout.sdk.ui.card.tokenization.POCardTokenizationConfiguration import com.processout.sdk.ui.card.tokenization.POCardTokenizationConfiguration.Button -import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationEligibilityRequest -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationDelegate -import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationState -import com.processout.sdk.ui.card.tokenization.delegate.toResponse +import com.processout.sdk.ui.card.tokenization.delegate.* import com.processout.sdk.ui.card.tokenization.screen.CardTokenizationContent import com.processout.sdk.ui.card.tokenization.screen.CardTokenizationScreen import com.processout.sdk.ui.core.theme.ProcessOutTheme @@ -210,7 +203,7 @@ class POCardTokenizationViewComponent private constructor( } private fun dispatchTokenizedCard() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { @@ -238,7 +231,7 @@ class POCardTokenizationViewComponent private constructor( } private fun dispatchPreferredScheme() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { @@ -249,7 +242,7 @@ class POCardTokenizationViewComponent private constructor( } private fun dispatchShouldContinue() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationPreferredScheme.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationPreferredScheme.kt new file mode 100644 index 000000000..796e91473 --- /dev/null +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationPreferredScheme.kt @@ -0,0 +1,19 @@ +package com.processout.sdk.ui.card.tokenization.delegate + +import com.processout.sdk.api.dispatcher.POEventDispatcher +import com.processout.sdk.api.model.response.POCardIssuerInformation +import java.util.UUID + +internal data class CardTokenizationPreferredSchemeRequest( + override val uuid: UUID = UUID.randomUUID(), + val issuerInformation: POCardIssuerInformation +) : POEventDispatcher.Request + +internal data class CardTokenizationPreferredSchemeResponse( + override val uuid: UUID, + val preferredScheme: String? +) : POEventDispatcher.Response + +internal fun CardTokenizationPreferredSchemeRequest.toResponse( + preferredScheme: String? +) = CardTokenizationPreferredSchemeResponse(uuid, preferredScheme) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationProcessing.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationProcessing.kt new file mode 100644 index 000000000..deab7a9ac --- /dev/null +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationProcessing.kt @@ -0,0 +1,28 @@ +package com.processout.sdk.ui.card.tokenization.delegate + +import com.processout.sdk.api.dispatcher.POEventDispatcher +import com.processout.sdk.api.model.response.POCard +import com.processout.sdk.core.ProcessOutResult +import com.processout.sdk.core.fold +import java.util.UUID + +internal data class CardTokenizationProcessingRequest( + override val uuid: UUID = UUID.randomUUID(), + val card: POCard, + val saveCard: Boolean +) : POEventDispatcher.Request + +internal data class CardTokenizationProcessingResponse( + override val uuid: UUID, + val result: ProcessOutResult +) : POEventDispatcher.Response + +internal fun CardTokenizationProcessingRequest.toResponse( + result: ProcessOutResult +) = CardTokenizationProcessingResponse( + uuid, + result.fold( + onSuccess = { ProcessOutResult.Success(card) }, + onFailure = { it } + ) +) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationShouldContinue.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationShouldContinue.kt new file mode 100644 index 000000000..32222f6ec --- /dev/null +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/delegate/CardTokenizationShouldContinue.kt @@ -0,0 +1,20 @@ +package com.processout.sdk.ui.card.tokenization.delegate + +import com.processout.sdk.api.dispatcher.POEventDispatcher +import com.processout.sdk.core.ProcessOutResult +import java.util.UUID + +internal data class CardTokenizationShouldContinueRequest( + override val uuid: UUID = UUID.randomUUID(), + val failure: ProcessOutResult.Failure +) : POEventDispatcher.Request + +internal data class CardTokenizationShouldContinueResponse( + override val uuid: UUID, + val failure: ProcessOutResult.Failure, + val shouldContinue: Boolean +) : POEventDispatcher.Response + +internal fun CardTokenizationShouldContinueRequest.toResponse( + shouldContinue: Boolean +) = CardTokenizationShouldContinueResponse(uuid, failure, shouldContinue) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutInteractor.kt b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutInteractor.kt index b1e7976df..632e7edbe 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutInteractor.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutInteractor.kt @@ -11,8 +11,6 @@ import coil.request.ImageRequest import coil.request.ImageResult import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher -import com.processout.sdk.api.model.request.POCardTokenizationProcessingRequest -import com.processout.sdk.api.model.request.POCardTokenizationShouldContinueRequest import com.processout.sdk.api.model.request.POInvoiceAuthorizationRequest import com.processout.sdk.api.model.request.POInvoiceRequest import com.processout.sdk.api.model.request.POInvoiceRequest.ExpandedProperty.Companion.paymentMethods @@ -41,6 +39,9 @@ import com.processout.sdk.core.onSuccess import com.processout.sdk.ui.base.BaseInteractor import com.processout.sdk.ui.card.tokenization.* import com.processout.sdk.ui.card.tokenization.POCardTokenizationConfiguration.BillingAddressConfiguration.CollectionMode +import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationProcessingRequest +import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationShouldContinueRequest +import com.processout.sdk.ui.card.tokenization.delegate.toResponse import com.processout.sdk.ui.checkout.DynamicCheckoutCompletion.* import com.processout.sdk.ui.checkout.DynamicCheckoutEvent.* import com.processout.sdk.ui.checkout.DynamicCheckoutInteractorState.* @@ -109,7 +110,7 @@ internal class DynamicCheckoutInteractor( private var authorizeInvoiceJob: AuthorizeInvoiceJob? = null private var latestInvoiceRequest: DynamicCheckoutInvoiceRequest? = null - private var latestCardProcessingRequest: POCardTokenizationProcessingRequest? = null + private var latestCardProcessingRequest: CardTokenizationProcessingRequest? = null init { interactorScope.launch { @@ -943,7 +944,7 @@ internal class DynamicCheckoutInteractor( } private fun collectTokenizedCard() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = interactorScope ) { request -> _state.value.selectedPaymentMethod?.let { paymentMethod -> @@ -1088,7 +1089,7 @@ internal class DynamicCheckoutInteractor( } private fun dispatchEvents() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = interactorScope ) { request -> interactorScope.launch { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/PODynamicCheckoutLauncher.kt b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/PODynamicCheckoutLauncher.kt index 42acf5cc1..240103b89 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/PODynamicCheckoutLauncher.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/PODynamicCheckoutLauncher.kt @@ -9,8 +9,6 @@ import androidx.lifecycle.lifecycleScope import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.POCardTokenizationEvent -import com.processout.sdk.api.model.request.POCardTokenizationPreferredSchemeRequest -import com.processout.sdk.api.model.response.toResponse import com.processout.sdk.api.service.PO3DSService import com.processout.sdk.api.service.proxy3ds.POProxy3DSServiceRequest import com.processout.sdk.api.service.proxy3ds.POProxy3DSServiceRequest.* @@ -18,6 +16,7 @@ import com.processout.sdk.api.service.proxy3ds.POProxy3DSServiceResponse import com.processout.sdk.core.POUnit import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationEligibilityRequest +import com.processout.sdk.ui.card.tokenization.delegate.CardTokenizationPreferredSchemeRequest import com.processout.sdk.ui.card.tokenization.delegate.POCardTokenizationEligibility.Eligible import com.processout.sdk.ui.card.tokenization.delegate.toResponse import com.processout.sdk.ui.checkout.delegate.* @@ -155,7 +154,7 @@ class PODynamicCheckoutLauncher private constructor( } private fun dispatchPreferredScheme() { - eventDispatcher.subscribeForRequest( + eventDispatcher.subscribeForRequest( coroutineScope = scope ) { request -> scope.launch {