Updated on 2026-08-14
This commit is contained in:
parent
f9f2ac60d0
commit
c76d1de3cf
15 changed files with 211 additions and 84 deletions
|
|
@ -0,0 +1,37 @@
|
|||
package com.tangem.tap.domain.scanCard
|
||||
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.card.ScanFailsCounter
|
||||
import com.tangem.domain.card.ScanFailsRequester
|
||||
import com.tangem.utils.coroutines.AppCoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
internal class DefaultScanFailsCounter @Inject constructor(
|
||||
private val scanFailsRequester: ScanFailsRequester,
|
||||
private val appScope: AppCoroutineScope,
|
||||
) : ScanFailsCounter {
|
||||
|
||||
private var counter: Int = 0
|
||||
|
||||
override fun reset() {
|
||||
counter = 0
|
||||
}
|
||||
|
||||
override fun onScanFailure(isUserCancelled: Boolean, source: AnalyticsParam.ScreensSources) {
|
||||
if (isUserCancelled) {
|
||||
counter++
|
||||
if (counter >= THRESHOLD) {
|
||||
appScope.launch { scanFailsRequester.show(source) }
|
||||
}
|
||||
} else {
|
||||
counter = 0
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val THRESHOLD = 2
|
||||
}
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ import com.tangem.core.ui.R
|
|||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.toWrappedList
|
||||
import com.tangem.core.ui.message.dialog.Dialogs
|
||||
import com.tangem.domain.card.ScanFailsCounter
|
||||
import com.tangem.domain.card.common.util.twinsIsTwinned
|
||||
import com.tangem.domain.common.extensions.withMainContext
|
||||
import com.tangem.domain.feedback.models.FeedbackEmailType
|
||||
|
|
@ -26,9 +27,7 @@ import com.tangem.domain.models.scan.ScanResponse
|
|||
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.dispatchOnMain
|
||||
import com.tangem.tap.common.extensions.inject
|
||||
import com.tangem.tap.common.redux.global.GlobalAction
|
||||
import com.tangem.tap.features.disclaimer.createDisclaimer
|
||||
import com.tangem.tap.features.onboarding.OnboardingHelper
|
||||
import com.tangem.tap.mainScope
|
||||
|
|
@ -49,6 +48,7 @@ internal class LegacyScanProcessor @Inject constructor(
|
|||
@GlobalUiMessageSender private val uiMessageSender: UiMessageSender,
|
||||
private val analyticsEventHandler: AnalyticsEventHandler,
|
||||
private val trackingContextProxy: TrackingContextProxy,
|
||||
private val scanFailsCounter: ScanFailsCounter,
|
||||
) {
|
||||
|
||||
suspend fun scan(
|
||||
|
|
@ -89,10 +89,13 @@ internal class LegacyScanProcessor @Inject constructor(
|
|||
)
|
||||
|
||||
val analyticsEvent = Basic.CardWasScanned(analyticsSource)
|
||||
store.dispatchOnMain(GlobalAction.ScanFailsCounter.ChooseBehavior(result, analyticsSource))
|
||||
|
||||
result
|
||||
.doOnFailure { error ->
|
||||
scanFailsCounter.onScanFailure(
|
||||
isUserCancelled = error is TangemSdkError.UserCancelled,
|
||||
source = analyticsSource,
|
||||
)
|
||||
onScanFailure(
|
||||
analyticsSource = analyticsSource,
|
||||
error = error,
|
||||
|
|
@ -106,6 +109,7 @@ internal class LegacyScanProcessor @Inject constructor(
|
|||
)
|
||||
}
|
||||
.doOnSuccess { scanResponse ->
|
||||
scanFailsCounter.reset()
|
||||
tangemSdkManager.changeDisplayedCardIdNumbersCount(scanResponse)
|
||||
|
||||
sendAnalytics(analyticsEvent, scanResponse)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import com.tangem.core.analytics.models.AnalyticsParam
|
|||
import com.tangem.core.analytics.models.Basic
|
||||
import com.tangem.core.analytics.models.ExceptionAnalyticsEvent
|
||||
import com.tangem.domain.card.ScanCardException
|
||||
import com.tangem.domain.card.ScanFailsRequester
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
import com.tangem.tap.common.analytics.events.TangemSdkErrorEvent
|
||||
import com.tangem.tap.common.extensions.dispatchNavigationAction
|
||||
|
|
@ -73,14 +72,8 @@ internal object UseCaseScanProcessor {
|
|||
}
|
||||
|
||||
private fun showScanFailsDialog(source: AnalyticsParam.ScreensSources) {
|
||||
val scanFailsSource = when (source) {
|
||||
is AnalyticsParam.ScreensSources.SignIn -> ScanFailsRequester.Source.SIGN_IN
|
||||
is AnalyticsParam.ScreensSources.Settings -> ScanFailsRequester.Source.SETTINGS
|
||||
is AnalyticsParam.ScreensSources.Intro -> ScanFailsRequester.Source.INTRO
|
||||
else -> ScanFailsRequester.Source.MAIN
|
||||
}
|
||||
scope.launch {
|
||||
store.inject(DaggerGraphState::scanFailsRequester).show(scanFailsSource)
|
||||
store.inject(DaggerGraphState::scanFailsRequester).show(source)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue