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"