diff --git a/app/build.gradle b/app/build.gradle index f33cc3b36b..c046c5a34f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,7 +64,7 @@ dependencies { implementation 'com.google.android.material:material:1.2.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10' - implementation 'com.tangem:blockchain:1.67.0' + implementation 'com.tangem:blockchain:1.68.0' implementation 'com.tangem:core:1.63.0' implementation 'com.tangem:sdk:1.63.0' diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 90e19278fd..c6e77e8a9f 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -81,6 +81,12 @@ class TapWalletManager { withContext(Dispatchers.Main) { store.dispatch(WalletAction.ResetState) store.dispatch(GlobalAction.SaveScanNoteResponse(data)) + loadData(data) + } + } + + suspend fun loadData(data: ScanNoteResponse) { + withContext(Dispatchers.Main) { store.dispatch(WalletAction.CheckIfWarningNeeded) val artworkId = data.verifyResponse?.artworkInfo?.id if (data.walletManager != null) { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index 7cd1653037..5717bdf1ef 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -34,6 +34,7 @@ sealed class WalletAction : Action { object SaveCardId : WalletAction() object UpdateWallet : WalletAction() { + object ScheduleUpdatingWallet : WalletAction() data class Success(val wallet: Wallet) : WalletAction() data class Failure(val errorMessage: String? = null) : WalletAction() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt index 8644404390..93d32fa81b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt @@ -22,6 +22,7 @@ import com.tangem.tap.domain.PayIdManager import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.toSendableAmounts import com.tangem.tap.features.send.redux.PrepareSendScreen +import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.network.NetworkConnectivity import com.tangem.tap.network.NetworkStateChanged import com.tangem.tap.preferencesStorage @@ -74,7 +75,7 @@ val walletMiddleware: Middleware = { dispatch, state -> is WalletAction.UpdateWallet.Success -> setupWalletUpdate(action.wallet) is WalletAction.LoadWallet.Success -> { store.dispatch(WalletAction.CheckHashesCountOnline) - setupWalletUpdate(action.wallet) + if (!store.state.walletState.updatingWallet) setupWalletUpdate(action.wallet) } is WalletAction.CreatePayId.CompleteCreatingPayId -> { scope.launch { @@ -113,7 +114,7 @@ val walletMiddleware: Middleware = { dispatch, state -> is WalletAction.LoadData -> { scope.launch { store.state.globalState.scanNoteResponse?.let { - store.state.globalState.tapWalletManager.onCardScanned(it) + store.state.globalState.tapWalletManager.loadData(it) } } } @@ -164,9 +165,10 @@ val walletMiddleware: Middleware = { dispatch, state -> } private fun setupWalletUpdate(wallet: Wallet) { - if (!wallet.recentTransactions.isNullOrEmpty() && !store.state.walletState.updatingWallet) { + if (!wallet.recentTransactions.toPendingTransactions(wallet.address).isNullOrEmpty()) { + store.dispatch(WalletAction.UpdateWallet.ScheduleUpdatingWallet) scope.launch(Dispatchers.IO) { - delay(10000) + delay(5000) withContext(Dispatchers.Main) { store.dispatch(WalletAction.UpdateWallet) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt index d362a40a2d..9e1930ca1e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt @@ -111,7 +111,12 @@ private fun internalReduce(action: Action, state: AppState): WalletState { ) ) is WalletAction.UpdateWallet -> newState = newState.copy(updatingWallet = true) - is WalletAction.UpdateWallet.Success -> newState = onWalletLoaded(action.wallet, newState) + is WalletAction.UpdateWallet.ScheduleUpdatingWallet -> + newState = newState.copy(updatingWallet = true) + is WalletAction.UpdateWallet.Success -> { + newState = onWalletLoaded(action.wallet, newState) + newState = newState.copy(updatingWallet = newState.pendingTransactions.isNotEmpty()) + } is WalletAction.UpdateWallet.Failure -> newState = newState.copy(updatingWallet = false) is WalletAction.LoadFiatRate -> { newState.copy(currencyData = newState.currencyData.copy( @@ -237,7 +242,6 @@ private fun onWalletLoaded(wallet: Wallet, walletState: WalletState): WalletStat fiatAmount = fiatAmount ), pendingTransactions = pendingTransactions, - updatingWallet = false, mainButton = WalletMainButton.SendButton(sendButtonEnabled) ) } \ No newline at end of file diff --git a/app/src/main/res/layout/item_pending_transaction.xml b/app/src/main/res/layout/item_pending_transaction.xml index abdaa514cf..c514bfc677 100644 --- a/app/src/main/res/layout/item_pending_transaction.xml +++ b/app/src/main/res/layout/item_pending_transaction.xml @@ -27,7 +27,7 @@ android:id="@+id/iv_pending_transaction" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="12dp" + android:layout_marginEnd="8dp" android:src="@drawable/ic_arrow_left" />