Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-29 19:55:59 +04:00
parent 32a061182f
commit 80c89491b3
8 changed files with 5 additions and 106 deletions

View file

@ -41,7 +41,6 @@ internal class DefaultScanCardProcessor(
cardId: String?,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit,
onWalletNotCreated: suspend () -> Unit,
disclaimerWillShow: () -> Unit,
onCancel: suspend () -> Unit,
onFailure: suspend (error: TangemError) -> Unit,
onSuccess: suspend (scanResponse: ScanResponse) -> Unit,
@ -52,7 +51,6 @@ internal class DefaultScanCardProcessor(
cardId = cardId,
onProgressStateChange = onProgressStateChange,
onWalletNotCreated = onWalletNotCreated,
disclaimerWillShow = disclaimerWillShow,
onFailure = onFailure,
onSuccess = onSuccess,
)
@ -63,7 +61,6 @@ internal class DefaultScanCardProcessor(
cardId = cardId,
onProgressStateChange = onProgressStateChange,
onWalletNotCreated = onWalletNotCreated,
disclaimerWillShow = disclaimerWillShow,
onCancel = onCancel,
onFailure = onFailure,
onSuccess = onSuccess,

View file

@ -28,18 +28,14 @@ import com.tangem.sdk.extensions.localizedDescriptionRes
import com.tangem.tap.common.analytics.paramsInterceptor.CardContextInterceptor
import com.tangem.tap.common.extensions.dispatchNavigationAction
import com.tangem.tap.common.extensions.inject
import com.tangem.tap.features.disclaimer.createDisclaimer
import com.tangem.tap.features.onboarding.OnboardingHelper
import com.tangem.tap.mainScope
import com.tangem.tap.proxy.redux.DaggerGraphState
import com.tangem.tap.scope
import com.tangem.tap.store
import com.tangem.tap.tangemSdkManager
import com.tangem.utils.extensions.DELAY_SDK_DIALOG_CLOSE
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
import javax.inject.Singleton
@ -74,7 +70,6 @@ internal class LegacyScanProcessor @Inject constructor(
cardId: String?,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit,
onWalletNotCreated: suspend () -> Unit,
disclaimerWillShow: () -> Unit,
onCancel: suspend () -> Unit,
onFailure: suspend (error: TangemError) -> Unit,
onSuccess: suspend (scanResponse: ScanResponse) -> Unit,
@ -114,17 +109,11 @@ internal class LegacyScanProcessor @Inject constructor(
sendAnalytics(analyticsEvent, scanResponse)
showDisclaimerIfNeed(
onScanSuccess(
scanResponse = scanResponse,
disclaimerWillShow = disclaimerWillShow,
nextHandler = { scanResponse2 ->
onScanSuccess(
scanResponse = scanResponse2,
onProgressStateChange = onProgressStateChange,
onSuccess = onSuccess,
onWalletNotCreated = onWalletNotCreated,
)
},
onProgressStateChange = onProgressStateChange,
onSuccess = onSuccess,
onWalletNotCreated = onWalletNotCreated,
)
}
}
@ -139,32 +128,6 @@ internal class LegacyScanProcessor @Inject constructor(
Analytics.send(analyticsEvent)
}
// TODO: [REDACTED_JIRA]
@Suppress("UnusedPrivateMember")
private suspend inline fun showDisclaimerIfNeed(
scanResponse: ScanResponse,
crossinline disclaimerWillShow: () -> Unit = {},
crossinline nextHandler: suspend (ScanResponse) -> Unit,
) {
val disclaimer = scanResponse.card.createDisclaimer()
if (disclaimer.isAccepted()) {
nextHandler(scanResponse)
} else {
scope.launch {
delay(DELAY_SDK_DIALOG_CLOSE)
withContext(Dispatchers.Main.immediate) {
disclaimerWillShow()
store.dispatchNavigationAction {
push(AppRoute.Disclaimer(isTosAccepted = false))
}
}
}
}
}
private suspend inline fun onScanFailure(
analyticsSource: AnalyticsParam.ScreensSources,
error: TangemError,

View file

@ -49,7 +49,6 @@ internal object UseCaseScanProcessor {
cardId: String?,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit,
onWalletNotCreated: suspend () -> Unit,
disclaimerWillShow: () -> Unit,
onFailure: suspend (error: TangemError) -> Unit,
onSuccess: suspend (scanResponse: ScanResponse) -> Unit,
) = progressScope(onProgressStateChange) {
@ -61,7 +60,6 @@ internal object UseCaseScanProcessor {
),
)
add(AnalyticsChain(Basic.CardWasScanned(analyticsSource)))
add(DisclaimerChain(store, disclaimerWillShow))
add(CheckForOnboardingChain(store))
}

View file

@ -1,46 +0,0 @@
package com.tangem.tap.domain.scanCard.chains
import arrow.core.right
import com.tangem.common.routing.AppRoute
import com.tangem.domain.card.ScanCardException
import com.tangem.domain.core.chain.Chain
import com.tangem.domain.core.chain.ResultChain
import com.tangem.domain.models.scan.ScanResponse
import com.tangem.tap.common.extensions.dispatchNavigationAction
import com.tangem.tap.common.redux.AppState
import com.tangem.tap.features.disclaimer.createDisclaimer
import org.rekotlin.Store
/**
* Handles disclaimer display after the card scanning operation.
*
* Returns [ScanChainException.DisclaimerWasCanceled] if the disclaimer is dismissed by the user.
*
* @param store the [Store] that holds the state of the app, used here to dispatch actions related to disclaimers.
* @param disclaimerWillShow an optional function to be invoked when a disclaimer is about to be shown. Default is an
* empty function.
*
* @see Chain for more information about the Chain interface.
*/
internal class DisclaimerChain(
private val store: Store<AppState>,
private val disclaimerWillShow: () -> Unit = {},
) : ResultChain<ScanCardException, ScanResponse>() {
override suspend fun launch(previousChainResult: ScanResponse): ScanChainResult {
val disclaimer = previousChainResult.card.createDisclaimer()
return if (disclaimer.isAccepted()) {
previousChainResult.right()
} else {
disclaimerWillShow()
// TODO: [REDACTED_JIRA]
store.dispatchNavigationAction {
push(route = AppRoute.Disclaimer(isTosAccepted = false))
}
previousChainResult.right()
}
}
}

View file

@ -174,14 +174,7 @@ internal class DefaultRoutingComponent @AssistedInject constructor(
val userWallets = userWalletsListRepository.userWalletsSync()
return when {
userWallets.isEmpty() -> {
val shouldShowTos = !cardRepository.isTangemTOSAccepted()
if (shouldShowTos) {
AppRoute.Disclaimer(isTosAccepted = false)
} else {
AppRoute.Home(launchMode = launchMode)
}
}
userWallets.isEmpty() -> AppRoute.Home(launchMode = launchMode)
userWallets.any { it.isLocked } -> {
AppRoute.Welcome(
launchMode = launchMode,

View file

@ -20,7 +20,6 @@ interface ScanCardProcessor {
cardId: String? = null,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit = {},
onWalletNotCreated: suspend () -> Unit = {},
disclaimerWillShow: () -> Unit = {},
onCancel: suspend () -> Unit = {},
onFailure: suspend (error: TangemError) -> Unit = {},
onSuccess: suspend (scanResponse: ScanResponse) -> Unit = {},

View file

@ -124,10 +124,6 @@ internal class UserWalletSaver @Inject constructor(
onWalletNotCreated = {
continuation.resume(Either.Right(null))
},
disclaimerWillShow = {
continuation.resume(Either.Right(null))
router.pop()
},
onSuccess = {
continuation.resume(Either.Right(it))
},

View file

@ -195,7 +195,6 @@ internal class WelcomeModel @Inject constructor(
analyticsSource = AnalyticsParam.ScreensSources.SignIn,
shouldCheckIsAlreadyActivated = true,
onWalletNotCreated = {},
disclaimerWillShow = { router.pop() },
onSuccess = { scanResponse ->
val userWallet =
coldUserWalletBuilderFactory.create(scanResponse = scanResponse).build() ?: return@scan