From 8ef961807d273e87f830077fc3130745b85526ee Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 24 Oct 2022 20:19:22 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/common/redux/global/GlobalAction.kt | 14 ++++++- .../wallet/redux/OnboardingWalletAction.kt | 7 +++- .../redux/OnboardingWalletMiddleware.kt | 33 ++++++++------- .../wallet/redux/OnboardingWalletReducer.kt | 40 ++++++++++--------- 4 files changed, 59 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index 3d596bbce3..a3aba839df 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -38,8 +38,20 @@ sealed class GlobalAction : Action { object HideDialog : GlobalAction() sealed class Onboarding : GlobalAction() { + /** + * Initiate an onboarding process. + * For SaltPay cards it's additionally checks for unfinished backup. + * For resuming unfinished backup for standard Wallet cards see CheckForUnfinishedBackup and + * StartForUnfinishedBackup + */ data class Start(val scanResponse: ScanResponse, val canSkipBackup: Boolean = true) : Onboarding() - data class StartForUnfinishedBackup(val isSaltPayBackup: Boolean) : Onboarding() + + /** + * Initiate resuming of unfinished backup only for standard Wallet cards. + * For SaltPay cards unfinished backup resumed after scanning the card on HomeScreen through Onboarding.Start. + * See more Onboarding.Start, CheckForUnfinishedBackup + */ + object StartForUnfinishedBackup : Onboarding() object Stop : Onboarding() } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt index ce9a6b6c41..885f57fa99 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt @@ -5,7 +5,7 @@ import org.rekotlin.Action sealed class OnboardingWalletAction : Action { object Init : OnboardingWalletAction() - object StartSaltPayCardActivation: OnboardingWalletAction() + object StartSaltPayCardActivation : OnboardingWalletAction() object GetToCreateWalletStep : OnboardingWalletAction() object GetToSaltPayStep : OnboardingWalletAction() object CreateWallet : OnboardingWalletAction() @@ -30,6 +30,11 @@ sealed class BackupAction : Action { object StartAddingPrimaryCard : BackupAction() object ScanPrimaryCard : BackupAction() + /** + * Check for unfinished backup of standard Wallet cards. + * For SaltPay cards unfinished backup resumed after scanning the card on HomeScreen through Onboarding.Start. + * See more Onboarding.Start, CheckForUnfinishedBackup, StartForUnfinishedBackup + */ object CheckForUnfinishedBackup : BackupAction() object StartAddingBackupCards : BackupAction() diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index b03729bda9..148b1061a5 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -62,24 +62,26 @@ private fun handleWalletAction(action: Action, state: () -> AppState?, dispatch: when (action) { OnboardingWalletAction.Init -> { - // if (walletState.onboardingSaltPayState?.isTest == true) { - // store.dispatch(BackupAction.FinishBackup) - // return - // } - when { card == null -> { - // StartForUnfinishedBackup -> navigateTo(OnboardingWallet) -> OnboardingWalletAction.Init + // it's possible when found unfinished backup for standard Wallet cards store.dispatch(OnboardingWalletAction.ResumeBackup) } card.hasWallets() && card.backupStatus == Card.BackupStatus.NoBackup -> { store.dispatch(OnboardingWalletAction.ResumeBackup) } card.hasWallets() && card.backupStatus?.isActive == true -> { - if (scanResponse.isSaltPay()) { - store.dispatch(OnboardingWalletAction.GetToSaltPayStep) + when { + // check for unfinished backup for saltPay cards. See more + scanResponse.isSaltPay() && backupService.hasIncompletedBackup -> { + store.dispatch(OnboardingWalletAction.ResumeBackup) + } + scanResponse.isSaltPay() -> { + store.dispatch(OnboardingWalletAction.GetToSaltPayStep) + store.dispatch(BackupAction.FinishBackup) + } + else -> store.dispatch(BackupAction.FinishBackup) } - store.dispatch(BackupAction.FinishBackup) } else -> { store.dispatch(OnboardingWalletAction.GetToCreateWalletStep) @@ -327,15 +329,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) backupService.discardSavedBackup() } is BackupAction.CheckForUnfinishedBackup -> { - if (backupService.hasIncompletedBackup) { + if (backupService.hasIncompletedBackup && !backupService.primaryCardIsSaltPay()) { store.dispatch(GlobalAction.ShowDialog(BackupDialog.UnfinishedBackupFound)) } } is BackupAction.ResumeFoundUnfinishedBackup -> { - val isSaltPay = backupService.primaryCardId?.slice(0..3)?.let { - SaltPayWorkaround.isVisaBatchId(it) - } ?: false - store.dispatch(GlobalAction.Onboarding.StartForUnfinishedBackup(isSaltPay)) + store.dispatch(GlobalAction.Onboarding.StartForUnfinishedBackup) store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) } is BackupAction.DismissBackup -> { @@ -345,6 +344,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) } } +private fun BackupService.primaryCardIsSaltPay(): Boolean { + return primaryCardId?.slice(0..3)?.let { + SaltPayWorkaround.isVisaBatchId(it) + } ?: false +} + /** * SaltPay state maybe not initialized if backup resumed from ResumeFoundUnfinishedBackup action */ diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt index 0f79ba3da0..e90b69a31a 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt @@ -38,26 +38,28 @@ private fun internalReduce(action: Action, appState: AppState): OnboardingWallet private class ReducerForGlobalAction { companion object { - fun reduce(action: GlobalAction.Onboarding, state: OnboardingWalletState): OnboardingWalletState = when (action) { - is GlobalAction.Onboarding.Start -> { - OnboardingWalletState( - backupState = state.backupState.copy( - maxBackupCards = if (action.scanResponse.isSaltPay()) 1 else 2, - canSkipBackup = if (action.scanResponse.isSaltPay()) false else action.canSkipBackup, - ), - isSaltPay = action.scanResponse.isSaltPay() - ) + fun reduce(action: GlobalAction.Onboarding, state: OnboardingWalletState): OnboardingWalletState { + return when (action) { + is GlobalAction.Onboarding.Start -> { + OnboardingWalletState( + backupState = state.backupState.copy( + maxBackupCards = if (action.scanResponse.isSaltPay()) 1 else 2, + canSkipBackup = if (action.scanResponse.isSaltPay()) false else action.canSkipBackup, + ), + isSaltPay = action.scanResponse.isSaltPay(), + ) + } + is GlobalAction.Onboarding.StartForUnfinishedBackup -> { + OnboardingWalletState( + backupState = state.backupState.copy( + maxBackupCards = 2, + canSkipBackup = false, + ), + isSaltPay = false, + ) + } + else -> state } - is GlobalAction.Onboarding.StartForUnfinishedBackup -> { - OnboardingWalletState( - backupState = state.backupState.copy( - maxBackupCards = if (action.isSaltPayBackup) 1 else 2, - canSkipBackup = false, - ), - isSaltPay = action.isSaltPayBackup, - ) - } - else -> state } } }