Updated on 2026-08-14
This commit is contained in:
parent
e8301388db
commit
07d5ede58c
1 changed files with 46 additions and 10 deletions
|
|
@ -35,6 +35,7 @@ import com.tangem.tap.features.onboarding.OnboardingDialog
|
||||||
import com.tangem.tap.features.onboarding.OnboardingHelper
|
import com.tangem.tap.features.onboarding.OnboardingHelper
|
||||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||||
import com.tangem.wallet.R
|
import com.tangem.wallet.R
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.rekotlin.Action
|
import org.rekotlin.Action
|
||||||
import org.rekotlin.Middleware
|
import org.rekotlin.Middleware
|
||||||
|
|
@ -44,6 +45,8 @@ object OnboardingWalletMiddleware {
|
||||||
val handler = onboardingWalletMiddleware
|
val handler = onboardingWalletMiddleware
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private const val HIDE_PROGRESS_DELAY = 400L
|
||||||
|
|
||||||
private val onboardingWalletMiddleware: Middleware<AppState> = { dispatch, state ->
|
private val onboardingWalletMiddleware: Middleware<AppState> = { dispatch, state ->
|
||||||
{ next ->
|
{ next ->
|
||||||
{ action ->
|
{ action ->
|
||||||
|
|
@ -161,17 +164,13 @@ private fun handleWalletAction(action: Action) {
|
||||||
store.dispatch(GlobalAction.Onboarding.Stop)
|
store.dispatch(GlobalAction.Onboarding.Stop)
|
||||||
|
|
||||||
if (scanResponse == null) {
|
if (scanResponse == null) {
|
||||||
store.dispatchNavigationAction(AppRouter::pop)
|
action.scope.launch {
|
||||||
store.dispatch(HomeAction.ReadCard(scope = action.scope))
|
readCard { newScanResponse ->
|
||||||
|
handleFinishOnboardind(newScanResponse)
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
val backupState = store.state.onboardingWalletState.backupState
|
handleFinishOnboardind(scanResponse)
|
||||||
val updatedScanResponse = updateScanResponseAfterBackup(scanResponse, backupState)
|
|
||||||
OnboardingHelper.trySaveWalletAndNavigateToWalletScreen(
|
|
||||||
scanResponse = updatedScanResponse,
|
|
||||||
accessCode = backupState.accessCode,
|
|
||||||
backupCardsIds = backupState.backupCardIds,
|
|
||||||
hasBackupError = backupState.hasBackupError,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is OnboardingWalletAction.ResumeBackup -> {
|
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(
|
private suspend fun loadArtworkForUnfinishedBackup(
|
||||||
cardId: String,
|
cardId: String,
|
||||||
cardPublicKey: ByteArray,
|
cardPublicKey: ByteArray,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue