From 07d5ede58cdc82df4e700ecbf28e5a2a62ade340 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 1 Aug 2024 18:08:35 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../redux/OnboardingWalletMiddleware.kt | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) 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 c86ed79d1d..0e32a392c4 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 @@ -35,6 +35,7 @@ import com.tangem.tap.features.onboarding.OnboardingDialog import com.tangem.tap.features.onboarding.OnboardingHelper import com.tangem.tap.proxy.redux.DaggerGraphState import com.tangem.wallet.R +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.rekotlin.Action import org.rekotlin.Middleware @@ -44,6 +45,8 @@ object OnboardingWalletMiddleware { val handler = onboardingWalletMiddleware } +private const val HIDE_PROGRESS_DELAY = 400L + private val onboardingWalletMiddleware: Middleware = { dispatch, state -> { next -> { action -> @@ -161,17 +164,13 @@ private fun handleWalletAction(action: Action) { store.dispatch(GlobalAction.Onboarding.Stop) if (scanResponse == null) { - store.dispatchNavigationAction(AppRouter::pop) - store.dispatch(HomeAction.ReadCard(scope = action.scope)) + action.scope.launch { + readCard { newScanResponse -> + handleFinishOnboardind(newScanResponse) + } + } } else { - val backupState = store.state.onboardingWalletState.backupState - val updatedScanResponse = updateScanResponseAfterBackup(scanResponse, backupState) - OnboardingHelper.trySaveWalletAndNavigateToWalletScreen( - scanResponse = updatedScanResponse, - accessCode = backupState.accessCode, - backupCardsIds = backupState.backupCardIds, - hasBackupError = backupState.hasBackupError, - ) + handleFinishOnboardind(scanResponse) } } is OnboardingWalletAction.ResumeBackup -> { @@ -196,6 +195,43 @@ private fun handleWalletAction(action: Action) { } } +private fun handleFinishOnboardind(scanResponse: ScanResponse) { + val backupState = store.state.onboardingWalletState.backupState + val updatedScanResponse = updateScanResponseAfterBackup(scanResponse, backupState) + OnboardingHelper.trySaveWalletAndNavigateToWalletScreen( + scanResponse = updatedScanResponse, + accessCode = backupState.accessCode, + backupCardsIds = backupState.backupCardIds, + hasBackupError = backupState.hasBackupError, + ) +} + +private suspend fun readCard(onSuccess: (ScanResponse) -> Unit) { + val shouldSaveAccessCodes = store.inject(DaggerGraphState::settingsRepository).shouldSaveAccessCodes() + + store.inject(DaggerGraphState::cardSdkConfigRepository).setAccessCodeRequestPolicy( + isBiometricsRequestPolicy = shouldSaveAccessCodes, + ) + + store.inject(DaggerGraphState::scanCardProcessor).scan( + analyticsSource = com.tangem.core.analytics.models.AnalyticsParam.ScreensSources.Intro, + onProgressStateChange = { showProgress -> + if (showProgress) { + store.dispatch(HomeAction.ScanInProgress(scanInProgress = true)) + } else { + delay(HIDE_PROGRESS_DELAY) + store.dispatch(HomeAction.ScanInProgress(scanInProgress = false)) + } + }, + onFailure = { + Timber.e(it, "Unable to scan card") + delay(HIDE_PROGRESS_DELAY) + store.dispatch(HomeAction.ScanInProgress(scanInProgress = false)) + }, + onSuccess = onSuccess, + ) +} + private suspend fun loadArtworkForUnfinishedBackup( cardId: String, cardPublicKey: ByteArray,