From ea3a7c528e5708bbfef6320457e1dd2d075d96ff Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 25 Dec 2024 11:43:29 +0500 Subject: [PATCH] Updated on 2026-08-14 --- features/tokendetails/impl/build.gradle.kts | 1 + .../tokendetails/presentation/TokenDetailsFragment.kt | 11 ++++++----- .../tokendetails/viewmodels/TokenDetailsViewModel.kt | 11 +++++++++++ .../presentation/wallet/viewmodels/WalletViewModel.kt | 11 +++++++++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/features/tokendetails/impl/build.gradle.kts b/features/tokendetails/impl/build.gradle.kts index 58596e7a24..cfaae5a6d2 100644 --- a/features/tokendetails/impl/build.gradle.kts +++ b/features/tokendetails/impl/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { /** AndroidX */ implementation(deps.androidx.activity.compose) implementation(deps.androidx.paging.runtime) + implementation(deps.androidx.fragment.ktx) /** Compose */ implementation(deps.compose.accompanist.systemUiController) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt index 5b11ac88dd..3bd1955d4e 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt @@ -3,10 +3,9 @@ package com.tangem.feature.tokendetails.presentation import android.os.Bundle import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalLifecycleOwner -import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.arkivanov.decompose.defaultComponentContext +import androidx.fragment.app.viewModels import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter import com.tangem.common.routing.bundle.unbundle @@ -47,6 +46,8 @@ internal class TokenDetailsFragment : ComposeFragment() { @Inject internal lateinit var appRouter: AppRouter + private val viewModel by viewModels() + private var tokenMarketBlockComponent: TokenMarketBlockComponent? = null private val internalTokenDetailsRouter: InnerTokenDetailsRouter @@ -57,6 +58,9 @@ internal class TokenDetailsFragment : ComposeFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + viewModel.router = internalTokenDetailsRouter + lifecycle.addObserver(viewModel) + val cryptoCurrency: CryptoCurrency = arguments ?.getBundle(AppRoute.CurrencyDetails.CRYPTO_CURRENCY_KEY) ?.unbundle(CryptoCurrency.serializer()) @@ -86,9 +90,6 @@ internal class TokenDetailsFragment : ComposeFragment() { @Composable override fun ScreenContent(modifier: Modifier) { - val viewModel = hiltViewModel() - viewModel.router = this@TokenDetailsFragment.internalTokenDetailsRouter - LocalLifecycleOwner.current.lifecycle.addObserver(viewModel) NavigationBar3ButtonsScrim() TokenDetailsScreen( state = viewModel.uiState.collectAsStateWithLifecycle().value, diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt index 3280261140..f0fedeec0a 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt @@ -221,6 +221,17 @@ internal class TokenDetailsViewModel @Inject constructor( handleBalanceHiding(owner) } + override fun onPause(owner: LifecycleOwner) { + expressTxStatusTaskScheduler.cancelTask() + expressTxJobHolder.cancel() + super.onPause(owner) + } + + override fun onResume(owner: LifecycleOwner) { + subscribeOnExpressTransactionsUpdates() + super.onResume(owner) + } + override fun onCleared() { expressTxStatusTaskScheduler.cancelTask() expressTxJobHolder.cancel() diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 145ad36baa..b1dcff9ddd 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -79,6 +79,7 @@ internal class WalletViewModel @Inject constructor( private lateinit var router: InnerWalletRouter private val walletsUpdateJobHolder = JobHolder() private val refreshWalletJobHolder = JobHolder() + private val expressStatusJobHolder = JobHolder() private var needToRefreshWallet = false private var expressTxStatusTaskScheduler = SingleTaskScheduler() @@ -233,10 +234,16 @@ internal class WalletViewModel @Inject constructor( private fun subscribeToScreenBackgroundState() { screenLifecycleProvider.isBackgroundState .onEach { isBackground -> + expressTxStatusTaskScheduler.cancelTask() + expressStatusJobHolder.cancel() refreshWalletJobHolder.cancel() when { isBackground -> needToRefreshTimer() - needToRefreshWallet && !isBackground -> triggerRefreshWalletQuotes() + needToRefreshWallet && !isBackground -> { + triggerRefreshWalletQuotes() + subscribeOnExpressTransactionsUpdates() + } + !isBackground -> subscribeOnExpressTransactionsUpdates() } } .launchIn(viewModelScope) @@ -257,7 +264,7 @@ internal class WalletViewModel @Inject constructor( onError = { /* no-op */ }, ), ) - } + }.saveIn(expressStatusJobHolder) } private fun needToRefreshTimer() {