Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-17 16:13:15 +03:00
parent 0ce75f1445
commit e0c101f15f
12 changed files with 115 additions and 32 deletions

View file

@ -11,6 +11,7 @@ import com.tangem.core.analytics.models.event.MainScreenAnalyticsEvent
import com.tangem.core.analytics.utils.TrackingContextProxy
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.account.usecase.IsAccountsModeEnabledUseCase
@ -26,6 +27,7 @@ import com.tangem.domain.notifications.repository.NotificationsRepository
import com.tangem.domain.qrscanning.models.QrResultSource
import com.tangem.domain.qrscanning.models.SourceType
import com.tangem.domain.qrscanning.usecases.ListenToQrScanningUseCase
import com.tangem.domain.qrscanning.models.ClassifiedQrContent
import com.tangem.domain.qrscanning.models.QrSendTarget
import com.tangem.domain.walletconnect.WcPairService
import com.tangem.domain.walletconnect.model.WcPairRequest
@ -47,6 +49,7 @@ import com.tangem.feature.wallet.presentation.wallet.domain.WalletImageResolver
import com.tangem.feature.wallet.presentation.wallet.domain.WalletNameMigrationUseCase
import com.tangem.feature.wallet.presentation.wallet.loaders.WalletScreenContentLoader
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletAlertUM
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletDialogConfig
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletEvent
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletEvent.DemonstrateWalletsScrollPreview.Direction
@ -115,6 +118,7 @@ internal class WalletModel @Inject constructor(
private val listenToQrScanningUseCase: ListenToQrScanningUseCase,
private val wcPairService: WcPairService,
private val resolveQrSendTargetsUseCase: ResolveQrSendTargetsUseCase,
private val uiMessageSender: UiMessageSender,
val screenLifecycleProvider: ScreenLifecycleProvider,
val innerWalletRouter: InnerWalletRouter,
) : Model() {
@ -778,8 +782,17 @@ internal class WalletModel @Inject constructor(
is QrSendTarget.Multiple -> {
innerWalletRouter.openNetworkSelectionBottomSheet(target)
}
is QrSendTarget.Unknown -> {
// TODO: [REDACTED_TASK_KEY] Error handling for unsupported and invalid QR codes
is QrSendTarget.Error -> handleQrError(target.error)
}
}
private fun handleQrError(error: ClassifiedQrContent.Error) {
when (error) {
is ClassifiedQrContent.Error.Unrecognized -> {
uiMessageSender.send(WalletAlertUM.qrCodeUnrecognized())
}
is ClassifiedQrContent.Error.UnsupportedNetwork -> {
uiMessageSender.send(WalletAlertUM.qrCodeUnsupportedNetwork())
}
}
}

View file

@ -80,6 +80,20 @@ internal object WalletAlertUM {
)
}
fun qrCodeUnrecognized(): DialogMessage {
return DialogMessage(
title = resourceReference(R.string.qr_scanner_error_unrecognized_title),
message = resourceReference(R.string.qr_scanner_error_unrecognized_message),
)
}
fun qrCodeUnsupportedNetwork(): DialogMessage {
return DialogMessage(
title = resourceReference(R.string.qr_scanner_error_token_not_added_title),
message = resourceReference(R.string.qr_scanner_error_token_not_added_message),
)
}
fun confirmExpressStatusHide(onConfirmClick: () -> Unit): DialogMessage {
return DialogMessage(
title = resourceReference(R.string.express_status_hide_dialog_title),