diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 53f6a46e4e..23dd6a8a8c 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -233,6 +233,7 @@ Требуется разрешение Условиями использования Токены не найдены. Пожалуйста, попробуйте другой запрос + ID: %s ID транзакции скопирован Информация ниже не является обязательной. Вы можете стереть её, если хотите. Расскажите, каких функций вам не хватает, и мы постараемся вам помочь. @@ -380,7 +381,9 @@ Сортировка токенов Список Выбрать из галереи - Нравится наше приложение? + Настройки + Вы не предоставили доступ к вашей камере + Доступ к камере запрещен %1$s (%2$s) в сети %3$s Отправляйте только %s на этот адрес. Использование другой сети может привести к утрате средств. Участвовать @@ -435,7 +438,7 @@ Сканировать Отсканируйте карту, чтобы изменить ее настройки. Изменения затронут только ту карту, которую вы отсканировали, и не повлияют на другие карты, привязанные к вашему кошельку. Приготовьте свою карту - Уже содержится в введенном адресе + Уже содержится во введенном адресе Сумма комиссии в %s раз превышает рекомендованную. Убедитесь, что указанная комиссия верна. Вы указали комиссию ниже рекомендуемой, это может привести к задержке исполнения вашей транзакции. Продолжить? Причина: %1$s\nКод: %2$s @@ -510,6 +513,9 @@ Транзакция успешно подписана и отправлена в блокчейн. Баланс будет обновлен через некоторое время Неверный адрес Транзакция отправлена + Забыть кошелек + Это приведет к удалению кошелька из приложения. Сам кошелек можно добавить снова. + Имя Держите свои криптосбережения в безопасности. Приватные ключи надежно хранятся на карте. Революционный аппаратный кошелек До трех карт с одним кошельком @@ -633,6 +639,7 @@ Сеть %s Адрес скопирован в буфер обмена Нет соединения с интернетом + Настройки кошелька Tangem Используйте %s или отсканируйте карту, чтобы разблокировать доступ к вашему кошельку Пожалуйста, выведите все средства из этого кошелька, сбросьте его к заводским настройкам и создайте новый. Доступ к текущему кошельку будет утерян. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 4f7f952256..99df15650b 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -379,7 +379,6 @@ Settings You have not given access to your camera Camera access denied - Enjoying our app? %1$s (%2$s) on %3$s network Send only %s to this address. Sending any other currency will result in its irreversible loss. Participate @@ -510,6 +509,9 @@ Invalid address %1$s (%2$s) Transaction sent + Forget wallet + This will remove the wallet from the application. The wallet itself can be added again. + Name Store your crypto assets secure while keeping private keys contained in your card Revolutionary Hardware Wallet Up to 3 physical cards to one wallet @@ -633,6 +635,7 @@ %s network Address was copied to clipboard No internet connection + Wallet settings Tangem Use %s or scan a card to unlock access to your wallet Please withdraw all funds from this wallet, reset it to factory settings, and create a new one. Access to the current wallet will be lost. diff --git a/core/utils/src/main/java/com/tangem/utils/coroutines/CoroutineExt.kt b/core/utils/src/main/java/com/tangem/utils/coroutines/CoroutineExt.kt index ebbe1dc50a..cfa0536804 100644 --- a/core/utils/src/main/java/com/tangem/utils/coroutines/CoroutineExt.kt +++ b/core/utils/src/main/java/com/tangem/utils/coroutines/CoroutineExt.kt @@ -10,6 +10,13 @@ suspend fun runCatching(dispatcher: CoroutineDispatcher, block: suspend () - } } +suspend fun waitForDelay(delay: Long, block: suspend CoroutineScope.() -> R): R = coroutineScope { + val minWaitingTime = async { delay(delay) } + val actionInvoke = async { block() } + minWaitingTime.await() + actionInvoke.await() +} + class Debouncer { private var debounceJob: Job? = null diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt index 4f0e952c93..c8b007deec 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt @@ -53,10 +53,7 @@ import com.tangem.features.send.impl.presentation.state.fee.* import com.tangem.features.send.impl.presentation.state.recipient.RecipientSendFactory import com.tangem.lib.crypto.BlockchainUtils import com.tangem.utils.Provider -import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import com.tangem.utils.coroutines.DelayedWork -import com.tangem.utils.coroutines.JobHolder -import com.tangem.utils.coroutines.saveIn +import com.tangem.utils.coroutines.* import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.* @@ -413,9 +410,11 @@ internal class SendViewModel @Inject constructor( private fun getUserWallets() { viewModelScope.launch(dispatchers.main) { runCatching { - getWalletsUseCase.invokeSync() - ?.toAvailableWallets() - .orEmpty() + waitForDelay(delay = RECENT_LOAD_DELAY) { + getWalletsUseCase.invokeSync() + ?.toAvailableWallets() + .orEmpty() + } }.onSuccess { result -> userWallets = result uiState = recipientStateFactory.onLoadedWalletsList(wallets = userWallets) @@ -456,10 +455,12 @@ internal class SendViewModel @Inject constructor( } private suspend fun getTxHistory() { - val txHistoryList = getFixedTxHistoryItemsUseCase.getSync( - userWalletId = userWalletId, - currency = cryptoCurrency, - ).getOrElse { emptyList() } + val txHistoryList = waitForDelay(delay = RECENT_LOAD_DELAY) { + getFixedTxHistoryItemsUseCase.getSync( + userWalletId = userWalletId, + currency = cryptoCurrency, + ).getOrElse { emptyList() } + } uiState = recipientStateFactory.onLoadedHistoryList(txHistory = txHistoryList) } @@ -972,6 +973,7 @@ internal class SendViewModel @Inject constructor( private companion object { const val CHECK_FEE_UPDATE_DELAY = 60_000L const val BALANCE_UPDATE_DELAY = 11_000L + const val RECENT_LOAD_DELAY = 500L const val RU_LOCALE = "ru" const val EN_LOCALE = "en"