Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-25 11:43:29 +05:00
parent ee4760b7e1
commit ea3a7c528e
4 changed files with 27 additions and 7 deletions

View file

@ -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)

View file

@ -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<TokenDetailsViewModel>()
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<TokenDetailsViewModel>()
viewModel.router = this@TokenDetailsFragment.internalTokenDetailsRouter
LocalLifecycleOwner.current.lifecycle.addObserver(viewModel)
NavigationBar3ButtonsScrim()
TokenDetailsScreen(
state = viewModel.uiState.collectAsStateWithLifecycle().value,

View file

@ -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()

View file

@ -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<Unit>()
@ -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() {