Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-26 21:35:53 +07:00
parent d349739524
commit 1806ddc31d
18 changed files with 55 additions and 11 deletions

View file

@ -20,6 +20,7 @@ internal class DefaultScanCardProcessor(
cardId: String?,
allowsRequestAccessCodeFromRepository: Boolean,
analyticsSource: AnalyticsParam.ScreensSources,
shouldCheckIsAlreadyActivated: Boolean,
): CompletionResult<ScanResponse> {
return if (isNewCardScanningEnabled) {
UseCaseScanProcessor.scan(cardId, allowsRequestAccessCodeFromRepository)
@ -28,6 +29,7 @@ internal class DefaultScanCardProcessor(
analyticsSource = analyticsSource,
cardId = cardId,
allowsRequestAccessCodeFromRepository = allowsRequestAccessCodeFromRepository,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
)
}
}
@ -35,6 +37,7 @@ internal class DefaultScanCardProcessor(
@Suppress("LongParameterList")
override suspend fun scan(
analyticsSource: AnalyticsParam.ScreensSources,
shouldCheckIsAlreadyActivated: Boolean,
cardId: String?,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit,
onWalletNotCreated: suspend () -> Unit,
@ -56,6 +59,7 @@ internal class DefaultScanCardProcessor(
} else {
legacyScanProcessor.scan(
analyticsSource = analyticsSource,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
cardId = cardId,
onProgressStateChange = onProgressStateChange,
onWalletNotCreated = onWalletNotCreated,

View file

@ -55,10 +55,12 @@ internal class LegacyScanProcessor @Inject constructor(
cardId: String? = null,
allowsRequestAccessCodeFromRepository: Boolean = false,
analyticsSource: AnalyticsParam.ScreensSources,
shouldCheckIsAlreadyActivated: Boolean,
): CompletionResult<ScanResponse> {
return tangemSdkManager.scanProduct(
cardId = cardId,
allowsRequestAccessCodeFromRepository = allowsRequestAccessCodeFromRepository,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
)
.doOnFailure { error ->
onScanFailure(analyticsSource = analyticsSource, error = error, onFailure = {}, onCancel = {})
@ -68,6 +70,7 @@ internal class LegacyScanProcessor @Inject constructor(
@Suppress("LongParameterList")
suspend fun scan(
analyticsSource: AnalyticsParam.ScreensSources,
shouldCheckIsAlreadyActivated: Boolean,
cardId: String?,
onProgressStateChange: suspend (showProgress: Boolean) -> Unit,
onWalletNotCreated: suspend () -> Unit,
@ -80,7 +83,10 @@ internal class LegacyScanProcessor @Inject constructor(
tangemSdkManager.changeDisplayedCardIdNumbersCount(null)
val result = tangemSdkManager.scanProduct(cardId)
val result = tangemSdkManager.scanProduct(
cardId = cardId,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
)
val analyticsEvent = Basic.CardWasScanned(analyticsSource)
store.dispatchOnMain(GlobalAction.ScanFailsCounter.ChooseBehavior(result, analyticsSource))

View file

@ -13,11 +13,16 @@ internal class DefaultScanCardRepository(
private val exceptionConverter = ScanCardExceptionConverter()
override suspend fun scanCard(cardId: String?, allowRequestAccessCodeFromStorage: Boolean): ScanResponse {
override suspend fun scanCard(
cardId: String?,
allowRequestAccessCodeFromStorage: Boolean,
shouldCheckIsAlreadyActivated: Boolean,
): ScanResponse {
return when (
val result = tangemSdkManager.scanProduct(
cardId = cardId,
allowsRequestAccessCodeFromRepository = allowRequestAccessCodeFromStorage,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
)
) {
is CompletionResult.Success -> result.data

View file

@ -166,6 +166,7 @@ internal class DefaultTangemSdkManager(
cardId: String?,
messageRes: Int?,
allowsRequestAccessCodeFromRepository: Boolean,
shouldCheckIsAlreadyActivated: Boolean,
): CompletionResult<ScanResponse> {
val message = Message(resources.getStringSafe(messageRes ?: R.string.initial_message_scan_header))
return coroutineScope {
@ -176,7 +177,7 @@ internal class DefaultTangemSdkManager(
allowsRequestAccessCodeFromRepository = allowsRequestAccessCodeFromRepository,
visaCardScanHandler = visaCardScanHandler,
visaCoroutineScope = this,
shouldCheckIsAlreadyActivated = true,
shouldCheckIsAlreadyActivated = shouldCheckIsAlreadyActivated,
onboardingV2FeatureToggles = onboardingV2FeatureToggles,
),
cardId = cardId,

View file

@ -59,6 +59,7 @@ class MockTangemSdkManager(
cardId: String?,
messageRes: Int?,
allowsRequestAccessCodeFromRepository: Boolean,
shouldCheckIsAlreadyActivated: Boolean,
): CompletionResult<ScanResponse> {
return MockProvider.getScanResponse()
}

View file

@ -296,7 +296,9 @@ internal class DefaultUserWalletsListRepository(
}
val scanResponse = unlockMethod.scanResponse ?: run {
when (val res = tangemSdkManagerProvider().scanProduct()) {
when (val res = tangemSdkManagerProvider().scanProduct(
shouldCheckIsAlreadyActivated = false,
)) {
is CompletionResult.Failure -> raise(UnlockWalletError.UserCancelled)
is CompletionResult.Success -> res.data
}

View file

@ -107,6 +107,7 @@ internal class CardSettingsModel @Inject constructor(
private fun scanCard() = modelScope.launch {
scanCardProcessor.scan(
analyticsSource = com.tangem.core.analytics.models.AnalyticsParam.ScreensSources.Settings,
shouldCheckIsAlreadyActivated = false,
allowsRequestAccessCodeFromRepository = true,
)
.doOnSuccess { scanResponse ->