Updated on 2026-08-14
This commit is contained in:
parent
65ff4a4b49
commit
9112d2bab8
55 changed files with 492 additions and 389 deletions
|
|
@ -7,6 +7,7 @@ import com.tangem.common.doOnFailure
|
|||
import com.tangem.common.doOnSuccess
|
||||
import com.tangem.core.analytics.Analytics
|
||||
import com.tangem.core.analytics.AnalyticsEvent
|
||||
import com.tangem.domain.card.CardTypeResolver
|
||||
import com.tangem.domain.common.extensions.withMainContext
|
||||
import com.tangem.domain.common.util.twinsIsTwinned
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
|
|
@ -22,6 +23,7 @@ import com.tangem.tap.features.disclaimer.redux.DisclaimerCallback
|
|||
import com.tangem.tap.features.onboarding.OnboardingHelper
|
||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction
|
||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsStep
|
||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -71,7 +73,11 @@ internal object LegacyScanProcessor {
|
|||
tangemSdkManager.changeDisplayedCardIdNumbersCount(scanResponse)
|
||||
|
||||
onScanStateChange(false)
|
||||
sendAnalytics(analyticsEvent, scanResponse)
|
||||
sendAnalytics(
|
||||
analyticsEvent = analyticsEvent,
|
||||
scanResponse = scanResponse,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
)
|
||||
|
||||
showDisclaimerIfNeed(
|
||||
scanResponse = scanResponse,
|
||||
|
|
@ -89,10 +95,14 @@ internal object LegacyScanProcessor {
|
|||
}
|
||||
}
|
||||
|
||||
private fun sendAnalytics(analyticsEvent: AnalyticsEvent?, scanResponse: ScanResponse) {
|
||||
private fun sendAnalytics(
|
||||
analyticsEvent: AnalyticsEvent?,
|
||||
scanResponse: ScanResponse,
|
||||
cardTypeResolver: CardTypeResolver,
|
||||
) {
|
||||
analyticsEvent?.let {
|
||||
// this workaround needed to send CardWasScannedEvent without adding a context
|
||||
val interceptor = CardContextInterceptor(scanResponse)
|
||||
val interceptor = CardContextInterceptor(scanResponse, cardTypeResolver)
|
||||
val params = it.params.toMutableMap()
|
||||
interceptor.intercept(params)
|
||||
it.params = params.toMap()
|
||||
|
|
@ -146,18 +156,25 @@ internal object LegacyScanProcessor {
|
|||
) {
|
||||
val globalState = store.state.globalState
|
||||
val tapWalletManager = globalState.tapWalletManager
|
||||
tapWalletManager.updateConfigManager(scanResponse)
|
||||
tapWalletManager.updateConfigManager()
|
||||
|
||||
store.dispatchOnMain(TwinCardsAction.IfTwinsPrepareState(scanResponse))
|
||||
|
||||
if (OnboardingHelper.isOnboardingCase(scanResponse)) {
|
||||
Analytics.addContext(scanResponse)
|
||||
val cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver)
|
||||
if (OnboardingHelper.isOnboardingCase(scanResponse, cardTypeResolver)) {
|
||||
Analytics.addContext(
|
||||
scanResponse = scanResponse,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
)
|
||||
onWalletNotCreated()
|
||||
store.dispatchOnMain(GlobalAction.Onboarding.Start(scanResponse, canSkipBackup = true))
|
||||
val appScreen = OnboardingHelper.whereToNavigate(scanResponse)
|
||||
navigateTo(appScreen) { onProgressStateChange(it) }
|
||||
} else {
|
||||
Analytics.setContext(scanResponse)
|
||||
Analytics.setContext(
|
||||
scanResponse = scanResponse,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
)
|
||||
if (scanResponse.twinsIsTwinned() && !preferencesStorage.wasTwinsOnboardingShown()) {
|
||||
onWalletNotCreated()
|
||||
store.dispatchOnMain(TwinCardsAction.SetStepOfScreen(TwinCardsStep.WelcomeOnly(scanResponse)))
|
||||
|
|
|
|||
|
|
@ -49,7 +49,12 @@ internal object UseCaseScanProcessor {
|
|||
val chains = buildList {
|
||||
add(ScanningFinishedChain { onScanStateChange(false) })
|
||||
if (analyticsEvent != null) {
|
||||
add(AnalyticsChain(analyticsEvent))
|
||||
add(
|
||||
AnalyticsChain(
|
||||
event = analyticsEvent,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
),
|
||||
)
|
||||
}
|
||||
add(DisclaimerChain(store, disclaimerWillShow))
|
||||
add(CheckForOnboardingChain(store, store.state.globalState.tapWalletManager, preferencesStorage))
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import arrow.core.Either
|
|||
import arrow.core.right
|
||||
import com.tangem.core.analytics.Analytics
|
||||
import com.tangem.core.analytics.AnalyticsEvent
|
||||
import com.tangem.domain.card.CardTypeResolver
|
||||
import com.tangem.domain.card.ScanCardException
|
||||
import com.tangem.domain.core.chain.Chain
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
|
|
@ -19,12 +20,16 @@ import com.tangem.tap.common.analytics.paramsInterceptor.CardContextInterceptor
|
|||
*/
|
||||
class AnalyticsChain(
|
||||
private val event: AnalyticsEvent,
|
||||
private val cardTypeResolver: CardTypeResolver,
|
||||
) : Chain<ScanCardException.ChainException, ScanResponse> {
|
||||
|
||||
override suspend fun invoke(
|
||||
previousChainResult: ScanResponse,
|
||||
): Either<ScanCardException.ChainException, ScanResponse> {
|
||||
val interceptor = CardContextInterceptor(previousChainResult)
|
||||
val interceptor = CardContextInterceptor(
|
||||
scanResponse = previousChainResult,
|
||||
cardTypeResolver = cardTypeResolver,
|
||||
)
|
||||
val params = event.params.toMutableMap()
|
||||
interceptor.intercept(params)
|
||||
event.params = params.toMap()
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.tangem.tap.domain.TapWalletManager
|
|||
import com.tangem.tap.features.onboarding.OnboardingHelper
|
||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction
|
||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsStep
|
||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||
import kotlinx.coroutines.delay
|
||||
import org.rekotlin.Store
|
||||
|
||||
|
|
@ -44,18 +45,25 @@ class CheckForOnboardingChain(
|
|||
override suspend fun invoke(
|
||||
previousChainResult: ScanResponse,
|
||||
): Either<ScanCardException.ChainException, ScanResponse> {
|
||||
tapWalletManager.updateConfigManager(previousChainResult)
|
||||
tapWalletManager.updateConfigManager()
|
||||
store.dispatchOnMain(TwinCardsAction.IfTwinsPrepareState(previousChainResult))
|
||||
|
||||
val cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver)
|
||||
return when {
|
||||
OnboardingHelper.isOnboardingCase(previousChainResult) -> {
|
||||
Analytics.addContext(previousChainResult)
|
||||
OnboardingHelper.isOnboardingCase(previousChainResult, cardTypeResolver) -> {
|
||||
Analytics.addContext(
|
||||
scanResponse = previousChainResult,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
)
|
||||
store.dispatchOnMain(GlobalAction.Onboarding.Start(previousChainResult, canSkipBackup = true))
|
||||
val appScreen = OnboardingHelper.whereToNavigate(previousChainResult)
|
||||
ScanChainException.OnboardingNeeded(appScreen).left()
|
||||
}
|
||||
else -> {
|
||||
Analytics.setContext(previousChainResult)
|
||||
Analytics.setContext(
|
||||
scanResponse = previousChainResult,
|
||||
cardTypeResolver = store.state.daggerGraphState.get(DaggerGraphState::cardTypeResolver),
|
||||
)
|
||||
// If twins was twinned previously but twins welcome not shown
|
||||
if (previousChainResult.twinsIsTwinned() && !preferencesStore.wasTwinsOnboardingShown()) {
|
||||
store.dispatchOnMain(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue