diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt index 85142968b8..512dfcc173 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt @@ -19,7 +19,7 @@ class OnboardingSaltPayHelper { manager: SaltPayActivationManager, ): Result { return try { - val updatedStep = manager.update(null, null).successOr { return it } + val updatedStep = manager.update(SaltPayActivationStep.None, null).successOr { return it } val isRegistrationCase = updatedStep != SaltPayActivationStep.Finished val isBackupCase = scanResponse.card.backupStatus?.isActive == false Result.Success(isRegistrationCase || isBackupCase) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt index 3480a2d818..47c04c1eae 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt @@ -247,33 +247,82 @@ fun handleAnalytics(analyticsHandler: GlobalAnalyticsEventHandler, step: SaltPay } suspend fun SaltPayActivationManager.update( - currentStep: SaltPayActivationStep?, + currentStep: SaltPayActivationStep, currentAmountToClaim: Amount?, ): Result { Timber.d("updateSaltPayStatus") - val step = checkRegistration(this).successOr { - return Result.Failure(it.error) - } - - checkGasIfNeeded(this, step).successOr { - return Result.Failure(it.error) - } - + val registrationResponse = checkRegistration().successOr { return it } val amountToClaim = getAmountToClaimIfNeeded(this, currentAmountToClaim) - val processedStep = when { - step == SaltPayActivationStep.Claim && amountToClaim == null -> { - SaltPayActivationStep.Finished - } - step == SaltPayActivationStep.KycReject && currentStep == SaltPayActivationStep.KycReject -> { - SaltPayActivationStep.KycStart - } - else -> step + val newStep = try { + determineStep(currentStep, amountToClaim, registrationResponse) + } catch (ex: Exception) { + return Result.Failure(ex) } - Timber.d("update: success: %s", processedStep) - return Result.Success(processedStep) + checkGasIfNeeded(this, newStep).successOr { return it } + + Timber.d("update: success: %s", newStep) + return Result.Success(newStep) +} + +private fun determineStep( + currentStep: SaltPayActivationStep, + amountToClaim: Amount?, + response: RegistrationResponse.Item, +): SaltPayActivationStep { + return when { + response.passed != true -> throw SaltPayActivationError.CardNotPassed(response.error) + response.disabledByAdmin == true -> throw SaltPayActivationError.CardDisabled(response.error) + + // go to claim screen + response.active == true -> SaltPayActivationStep.Claim + + // pinSet is false, go toPin screen + response.pinSet == false -> SaltPayActivationStep.NeedPin + + response.kycStatus != null -> { + when (currentStep) { + SaltPayActivationStep.KycWaiting -> when (response.kycStatus) { + KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycIntro + KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting + KYCStatus.CORRECTION_REQUESTED, KYCStatus.REJECTED -> SaltPayActivationStep.KycReject + KYCStatus.APPROVED -> when (amountToClaim) { + null -> SaltPayActivationStep.Success + else -> SaltPayActivationStep.Claim + } + else -> SaltPayActivationStep.KycIntro + } + SaltPayActivationStep.KycReject -> when (response.kycStatus) { + KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycStart + KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting + KYCStatus.CORRECTION_REQUESTED -> SaltPayActivationStep.KycStart + KYCStatus.REJECTED -> SaltPayActivationStep.KycStart + KYCStatus.APPROVED -> when (amountToClaim) { + null -> SaltPayActivationStep.Success + else -> SaltPayActivationStep.Claim + } + else -> SaltPayActivationStep.KycIntro + } + else -> when (response.kycStatus) { + KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycIntro + KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting + KYCStatus.CORRECTION_REQUESTED, KYCStatus.REJECTED -> SaltPayActivationStep.KycReject + KYCStatus.APPROVED -> when (amountToClaim) { + null -> SaltPayActivationStep.Finished + else -> SaltPayActivationStep.Claim + } + else -> SaltPayActivationStep.KycIntro + } + } + } + + // kycDate is set, go to kyc waiting screen + response.kycDate != null -> SaltPayActivationStep.KycWaiting + + else -> SaltPayActivationStep.KycIntro + } } private suspend fun getAmountToClaimIfNeeded( @@ -342,28 +391,8 @@ private suspend fun checkGasIfNeeded( return result } -private suspend fun checkRegistration( - saltPayManager: SaltPayActivationManager, -): Result { - Timber.d("checkRegistration") - return try { - val registrationResponseItem = saltPayManager.checkRegistration().successOr { - Timber.e(it.error, "checkRegistration: failure") - return it - } - - Timber.d("checkRegistration: success: try convert to SaltPayStep") - val step = registrationResponseItem.toSaltPayStep() - Timber.d("checkRegistration: step: %s", step) - Result.Success(step) - } catch (ex: SaltPayActivationError) { - Timber.e(ex, "checkRegistration: step") - Result.Failure(ex) - } -} - @Throws(SaltPayActivationError::class) -fun RegistrationResponse.Item.toSaltPayStep(): SaltPayActivationStep { +fun RegistrationResponse.Item.toSaltPayStep(currentStep: SaltPayActivationStep): SaltPayActivationStep { return when { passed != true -> throw SaltPayActivationError.CardNotPassed(this.error) disabledByAdmin == true -> throw SaltPayActivationError.CardDisabled(this.error) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt index 64d23417bd..0615e2d503 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt @@ -121,5 +121,6 @@ enum class SaltPayActivationStep { KycReject, Claim, ClaimInProgress, + Success, Finished; } \ No newline at end of file