Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-16 12:17:45 +03:00
parent c562c3fbba
commit 8968f1822a
10 changed files with 146 additions and 7 deletions

View file

@ -2,6 +2,7 @@ package com.tangem.features.hotwallet.addexistingwallet.entry
import com.arkivanov.decompose.router.stack.*
import com.tangem.common.routing.AppRoute
import com.tangem.core.analytics.utils.AnalyticsContextProxy
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -32,6 +33,7 @@ internal class AddExistingWalletModel @Inject constructor(
private val router: Router,
private val shouldAskPermissionUseCase: ShouldAskPermissionUseCase,
@GlobalUiMessageSender private val uiMessageSender: UiMessageSender,
private val analyticsContextProxy: AnalyticsContextProxy,
) : Model() {
val hotWalletStepperComponentModelCallback = HotWalletStepperComponentModelCallback()
@ -45,6 +47,15 @@ internal class AddExistingWalletModel @Inject constructor(
val startRoute = AddExistingWalletRoute.Import
val currentRoute: MutableStateFlow<AddExistingWalletRoute> = MutableStateFlow(startRoute)
init {
analyticsContextProxy.addHotWalletContext()
}
override fun onDestroy() {
super.onDestroy()
analyticsContextProxy.removeContext()
}
fun onChildBack() {
when (currentRoute.value) {
is AddExistingWalletRoute.Import -> router.pop()

View file

@ -1,6 +1,7 @@
package com.tangem.features.hotwallet.createmobilewallet
import com.tangem.common.routing.AppRoute
import com.tangem.core.analytics.utils.AnalyticsContextProxy
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.navigation.Router
@ -25,6 +26,7 @@ internal class CreateMobileWalletModel @Inject constructor(
private val saveUserWalletUseCase: SaveWalletUseCase,
private val router: Router,
private val tangemHotSdk: TangemHotSdk,
private val analyticsContextProxy: AnalyticsContextProxy,
) : Model() {
internal val uiState: StateFlow<CreateMobileWalletUM>
@ -37,6 +39,15 @@ internal class CreateMobileWalletModel @Inject constructor(
),
)
init {
analyticsContextProxy.addHotWalletContext()
}
override fun onDestroy() {
super.onDestroy()
analyticsContextProxy.removeContext()
}
private fun onImportClick() {
router.push(AppRoute.AddExistingWallet)
}

View file

@ -3,6 +3,7 @@ package com.tangem.features.hotwallet.createwalletbackup
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import com.tangem.core.analytics.utils.AnalyticsContextProxy
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
@ -23,6 +24,7 @@ internal class CreateWalletBackupModel @Inject constructor(
paramsContainer: ParamsContainer,
override val dispatchers: CoroutineDispatcherProvider,
private val router: Router,
private val analyticsContextProxy: AnalyticsContextProxy,
) : Model() {
val params = paramsContainer.require<CreateWalletBackupComponent.Params>()
@ -36,6 +38,15 @@ internal class CreateWalletBackupModel @Inject constructor(
val startRoute = CreateWalletBackupRoute.RecoveryPhraseStart
val currentRoute: MutableStateFlow<CreateWalletBackupRoute> = MutableStateFlow(startRoute)
init {
analyticsContextProxy.addHotWalletContext()
}
override fun onDestroy() {
super.onDestroy()
analyticsContextProxy.removeContext()
}
fun onBack() {
when (currentRoute.value) {
is CreateWalletBackupRoute.RecoveryPhraseStart -> router.pop()

View file

@ -4,6 +4,7 @@ import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import com.arkivanov.decompose.router.stack.replaceAll
import com.tangem.core.analytics.utils.AnalyticsContextProxy
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -39,6 +40,7 @@ internal class WalletActivationModel @Inject constructor(
private val router: Router,
private val shouldAskPermissionUseCase: ShouldAskPermissionUseCase,
@GlobalUiMessageSender private val uiMessageSender: UiMessageSender,
private val analyticsContextProxy: AnalyticsContextProxy,
) : Model() {
val params = paramsContainer.require<WalletActivationComponent.Params>()
@ -56,6 +58,15 @@ internal class WalletActivationModel @Inject constructor(
val startRoute = WalletActivationRoute.ManualBackupStart
val currentRoute: MutableStateFlow<WalletActivationRoute> = MutableStateFlow(startRoute)
init {
analyticsContextProxy.addHotWalletContext()
}
override fun onDestroy() {
super.onDestroy()
analyticsContextProxy.removeContext()
}
fun onChildBack() {
when (currentRoute.value) {
is WalletActivationRoute.ManualBackupStart -> router.pop()

View file

@ -121,6 +121,10 @@ internal class WalletSettingsModel @Inject constructor(
}
init {
getUserWalletUseCase.invoke(params.userWalletId).onRight {
analyticsContextProxy.addContext(it)
}
fun combineUI(wallet: UserWallet) = combine(
getWalletNFTEnabledUseCase.invoke(params.userWalletId),
getWalletNotificationsEnabledUseCase(params.userWalletId),
@ -155,6 +159,11 @@ internal class WalletSettingsModel @Inject constructor(
.launchIn(modelScope)
}
override fun onDestroy() {
super.onDestroy()
analyticsContextProxy.removeContext()
}
private fun isNotificationsPermissionGranted(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissionsRepository.hasRuntimePermission(