diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt index 245d0f9a89..06cb71c643 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt @@ -5,6 +5,8 @@ import com.tangem.domain.balancehiding.IsBalanceHiddenUseCase import com.tangem.domain.balancehiding.ListenToFlipsUseCase import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase import com.tangem.domain.tokens.model.CryptoCurrency +import com.tangem.domain.tokens.model.Network +import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase import com.tangem.features.send.navigation.SendRouter import com.tangem.tap.di.DelayedWork @@ -60,7 +62,10 @@ internal class SendViewModel @Inject constructor( .fold( ifLeft = { Timber.e(it.toString()) }, ifRight = { wallet -> - updateDelayedCurrencyStatusUseCase(wallet.walletId, cryptoCurrency.network, true) + // we should update network to find pending tx after 1 sec + updateForPendingTx(wallet, cryptoCurrency.network) + // we should update network for new balance + updateForBalance(wallet, cryptoCurrency.network) }, ) } @@ -69,7 +74,27 @@ internal class SendViewModel @Inject constructor( } } + private suspend fun updateForPendingTx(userWallet: UserWallet, network: Network) { + updateDelayedCurrencyStatusUseCase( + userWalletId = userWallet.walletId, + network = network, + delayMillis = UPDATE_PENDING_TX_DELAY_MILLIS, + refresh = true, + ) + } + + private suspend fun updateForBalance(userWallet: UserWallet, network: Network) { + updateDelayedCurrencyStatusUseCase( + userWalletId = userWallet.walletId, + network = network, + delayMillis = UPDATE_BALANCE_DELAY_MILLIS, + refresh = true, + ) + } + companion object { + private const val UPDATE_BALANCE_DELAY_MILLIS = 11000L + private const val UPDATE_PENDING_TX_DELAY_MILLIS = 1000L private const val TAG = "SendViewModel" } } \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/UpdateDelayedNetworkStatusUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/UpdateDelayedNetworkStatusUseCase.kt index 30ff71c68f..1991a33bf8 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/UpdateDelayedNetworkStatusUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/UpdateDelayedNetworkStatusUseCase.kt @@ -33,9 +33,10 @@ class UpdateDelayedNetworkStatusUseCase( suspend operator fun invoke( userWalletId: UserWalletId, network: Network, + delayMillis: Long, refresh: Boolean = false, ): Either { - delay(DELAY_MILLIS) + delay(delayMillis) return either { fetchNetworkStatus(userWalletId, network, refresh) } @@ -52,8 +53,4 @@ class UpdateDelayedNetworkStatusUseCase( raise(CurrencyStatusError.DataError(it)) } } - - companion object { - private const val DELAY_MILLIS = 11000L - } } \ No newline at end of file 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 ab5d7f11d0..c2c671b82d 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 @@ -35,7 +35,6 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber @@ -72,7 +71,6 @@ internal class TokenDetailsViewModel @Inject constructor( private val marketPriceJobHolder = JobHolder() private val refreshStateJobHolder = JobHolder() - private val networkStatusAutoUpdateStateJobHolder = JobHolder() private var cryptoCurrencyStatus: CryptoCurrencyStatus? = null private var wallet by Delegates.notNull() @@ -162,17 +160,6 @@ internal class TokenDetailsViewModel @Inject constructor( .flowOn(dispatchers.io) .launchIn(viewModelScope) .saveIn(marketPriceJobHolder) - - viewModelScope.launch(dispatchers.io) { - // Wait for blockchain updates pending transactions. - // Immediate update doesn't receive any changes. - delay(NETWORK_STATUS_AUTO_UPDATE_DELAY) - fetchCurrencyStatusUseCase.invoke( - userWalletId = wallet.walletId, - id = cryptoCurrency.id, - refresh = true, - ) - }.saveIn(networkStatusAutoUpdateStateJobHolder) } private fun updateTxHistory(refresh: Boolean = false) { @@ -389,8 +376,4 @@ internal class TokenDetailsViewModel @Inject constructor( override fun onCloseRentInfoNotification() { uiState = stateFactory.getStateWithRemovedRentNotification() } - - companion object { - private const val NETWORK_STATUS_AUTO_UPDATE_DELAY = 1000L - } } \ No newline at end of file