Updated on 2026-08-14
This commit is contained in:
parent
9e38389156
commit
7493e56a52
22 changed files with 216 additions and 74 deletions
|
|
@ -4,6 +4,7 @@ import arrow.core.getOrElse
|
|||
import com.arkivanov.decompose.router.slot.SlotNavigation
|
||||
import com.arkivanov.decompose.router.slot.activate
|
||||
import com.tangem.common.routing.AppRoute
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
|
|
@ -19,6 +20,7 @@ import com.tangem.core.ui.message.SnackbarMessage
|
|||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.domain.qrscanning.models.SourceType
|
||||
import com.tangem.domain.qrscanning.usecases.ListenToQrScanningUseCase
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents
|
||||
import com.tangem.domain.walletconnect.WcPairService
|
||||
import com.tangem.domain.walletconnect.model.WcPairRequest
|
||||
import com.tangem.domain.walletconnect.model.WcSession
|
||||
|
|
@ -47,6 +49,7 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
private val wcDisconnectUseCase: WcDisconnectUseCase,
|
||||
private val wcPairService: WcPairService,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val analytics: AnalyticsEventHandler,
|
||||
paramsContainer: ParamsContainer,
|
||||
) : Model() {
|
||||
|
||||
|
|
@ -56,6 +59,7 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
val bottomSheetNavigation: SlotNavigation<WcConnectionsBottomSheetConfig> = SlotNavigation()
|
||||
|
||||
init {
|
||||
analytics.send(WcAnalyticEvents.ScreenOpened)
|
||||
listenQrUpdates()
|
||||
listenWcSessions()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.tangem.features.walletconnect.connections.model
|
|||
import androidx.compose.runtime.Stable
|
||||
import com.arkivanov.decompose.router.stack.*
|
||||
import com.domain.blockaid.models.dapp.CheckDAppResult
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
|
|
@ -11,6 +12,7 @@ import com.tangem.core.decompose.ui.UiMessageSender
|
|||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.message.ToastMessage
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents
|
||||
import com.tangem.domain.walletconnect.model.WcPairError
|
||||
import com.tangem.domain.walletconnect.model.WcPairRequest
|
||||
import com.tangem.domain.walletconnect.model.WcSessionApprove
|
||||
|
|
@ -42,10 +44,12 @@ private const val WC_WALLETS_SELECTOR_MIN_COUNT = 2
|
|||
|
||||
@Stable
|
||||
@ModelScoped
|
||||
@Suppress("LongParameterList")
|
||||
internal class WcPairModel @Inject constructor(
|
||||
private val router: Router,
|
||||
private val messageSender: UiMessageSender,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val analytics: AnalyticsEventHandler,
|
||||
wcPairUseCaseFactory: WcPairUseCase.Factory,
|
||||
getWalletsUseCase: GetWalletsUseCase,
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
@ -165,10 +169,22 @@ internal class WcPairModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun showUnknownDomainAlert() {
|
||||
val event = WcAnalyticEvents.NoticeSecurityAlert(
|
||||
dAppMetaData = sessionProposal.dAppMetaData,
|
||||
securityStatus = sessionProposal.securityStatus,
|
||||
source = WcAnalyticEvents.NoticeSecurityAlert.Source.Domain,
|
||||
)
|
||||
analytics.send(event)
|
||||
stackNavigation.pushNew(WcAppInfoRoutes.Alert(WcAppInfoRoutes.Alert.Type.UnknownDomain))
|
||||
}
|
||||
|
||||
private fun showSecurityRiskAlert() {
|
||||
val event = WcAnalyticEvents.NoticeSecurityAlert(
|
||||
dAppMetaData = sessionProposal.dAppMetaData,
|
||||
securityStatus = sessionProposal.securityStatus,
|
||||
source = WcAnalyticEvents.NoticeSecurityAlert.Source.Domain,
|
||||
)
|
||||
analytics.send(event)
|
||||
stackNavigation.pushNew(WcAppInfoRoutes.Alert(WcAppInfoRoutes.Alert.Type.UnsafeDomain))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.arkivanov.decompose.router.stack.pushNew
|
|||
import com.domain.blockaid.models.transaction.ValidationResult
|
||||
import com.tangem.blockchain.common.TransactionData
|
||||
import com.tangem.blockchain.common.transaction.TransactionFee
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
|
|
@ -21,6 +22,7 @@ import com.tangem.domain.tokens.error.CurrencyStatusError
|
|||
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
|
||||
import com.tangem.domain.transaction.error.GetFeeError
|
||||
import com.tangem.domain.transaction.usecase.GetFeeUseCase
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents
|
||||
import com.tangem.domain.walletconnect.WcRequestUseCaseFactory
|
||||
import com.tangem.domain.walletconnect.model.WcRequestError
|
||||
import com.tangem.domain.walletconnect.model.WcRequestError.Companion.message
|
||||
|
|
@ -58,6 +60,7 @@ internal class WcSendTransactionModel @Inject constructor(
|
|||
private val blockAidUiConverter: WcSendAndReceiveBlockAidUiConverter,
|
||||
private val getFeeUseCase: GetFeeUseCase,
|
||||
private val getNetworkCoinUseCase: GetNetworkCoinStatusUseCase,
|
||||
private val analytics: AnalyticsEventHandler,
|
||||
) : Model(), WcCommonTransactionModel, FeeSelectorModelCallback {
|
||||
|
||||
private val params = paramsContainer.require<WcTransactionModelParams>()
|
||||
|
|
@ -219,6 +222,19 @@ internal class WcSendTransactionModel @Inject constructor(
|
|||
} else {
|
||||
sign()
|
||||
}
|
||||
securityCheck?.result?.validation?.let { securityStatus ->
|
||||
val event = WcAnalyticEvents.NoticeSecurityAlert(
|
||||
dAppMetaData = useCase.session.sdkModel.appMetaData,
|
||||
securityStatus = useCase.session.securityStatus,
|
||||
source = WcAnalyticEvents.NoticeSecurityAlert.Source.SmartContract,
|
||||
)
|
||||
when (securityStatus) {
|
||||
ValidationResult.SAFE -> Unit
|
||||
ValidationResult.UNSAFE,
|
||||
ValidationResult.FAILED_TO_VALIDATE,
|
||||
-> analytics.send(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onClickDoneCustomAllowance(value: BigDecimal, isUnlimited: Boolean) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue