From 1de486f684dac3efacf35105696cb26cd4e57701 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 26 Nov 2020 22:54:32 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle | 2 +- .../com/tangem/tap/domain/TapWalletManager.kt | 20 ++++++------ .../send/redux/reducers/ReceiptReducer.kt | 7 +++-- .../features/send/redux/states/SendState.kt | 6 ++-- .../features/wallet/redux/WalletMiddleware.kt | 2 +- .../features/wallet/redux/WalletReducer.kt | 31 +++++++++++-------- 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6dac91f10b..b7e0c76304 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,7 +71,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.108.0' + implementation 'com.tangem:blockchain:1.113.0' implementation 'com.tangem:core:1.80.0' implementation 'com.tangem:sdk:1.80.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 27d0665a61..87be43c40a 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -1,5 +1,6 @@ package com.tangem.tap.domain +import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.Wallet import com.tangem.blockchain.common.WalletManager import com.tangem.commands.CardStatus @@ -66,17 +67,13 @@ class TapWalletManager { } suspend fun loadFiatRate(fiatCurrency: FiatCurrencyName) { - val wallet = store.state.globalState.scanNoteResponse?.walletManager?.wallet - val blockchainCurrency = wallet?.blockchain?.currency - val tokenCurrency = wallet?.token?.symbol + val wallet = store.state.globalState.scanNoteResponse?.walletManager?.wallet ?: return - val blockchainRate = blockchainCurrency?.let { coinMarketCapService.getRate(it, fiatCurrency) } - val tokenRate = tokenCurrency?.let { coinMarketCapService.getRate(it, fiatCurrency) } + val currencyList = wallet.getTokens().map { it.symbol }.toMutableList() + currencyList.add(wallet.blockchain.currency) val results = mutableListOf?>>() - if (blockchainCurrency != null) results.add(blockchainCurrency to blockchainRate) - if (tokenCurrency != null) results.add(tokenCurrency to tokenRate) - + currencyList.forEach { results.add(it to coinMarketCapService.getRate(it, fiatCurrency)) } handleFiatRatesResult(results) } @@ -145,7 +142,8 @@ class TapWalletManager { val error = result.error val blockchain = walletManager.wallet.blockchain if (error != null && blockchain.isNoAccountError(error)) { - val amountToCreateAccount = blockchain.amountToCreateAccount(walletManager.wallet.token) + val token = walletManager.wallet.getFirstToken() + val amountToCreateAccount = blockchain.amountToCreateAccount(token) if (amountToCreateAccount != null) { store.dispatch(WalletAction.LoadWallet.NoAccount(amountToCreateAccount.toString())) return@withContext @@ -209,4 +207,8 @@ class TapWalletManager { } } } +} + +fun Wallet.getFirstToken(): Token? { + return getTokens().toList().getOrNull(0) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/ReceiptReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/ReceiptReducer.kt index c6f6511773..1ecf9ea6bb 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/ReceiptReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/ReceiptReducer.kt @@ -4,6 +4,7 @@ import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.Wallet import com.tangem.tap.common.extensions.scaleToFiat import com.tangem.tap.common.extensions.stripZeroPlainString +import com.tangem.tap.domain.getFirstToken import com.tangem.tap.features.send.redux.ReceiptAction.RefreshReceipt import com.tangem.tap.features.send.redux.SendScreenAction import com.tangem.tap.features.send.redux.states.* @@ -179,7 +180,7 @@ class ReceiptReducer : SendInternalReducer { return ReceiptSymbols( fiat = store.state.globalState.appCurrency, crypto = wallet.blockchain.currency, - token = wallet.amounts[AmountType.Token]?.currencySymbol + token = wallet.getFirstToken()?.symbol ) } @@ -187,12 +188,12 @@ class ReceiptReducer : SendInternalReducer { return when (mainCurrencyType) { MainCurrencyType.FIAT -> when (amountType) { AmountType.Coin -> ReceiptLayoutType.FIAT - AmountType.Token -> ReceiptLayoutType.TOKEN_FIAT + is AmountType.Token -> ReceiptLayoutType.TOKEN_FIAT AmountType.Reserve -> ReceiptLayoutType.UNKNOWN } MainCurrencyType.CRYPTO -> when (amountType) { AmountType.Coin -> ReceiptLayoutType.CRYPTO - AmountType.Token -> ReceiptLayoutType.TOKEN_CRYPTO + is AmountType.Token -> ReceiptLayoutType.TOKEN_CRYPTO AmountType.Reserve -> ReceiptLayoutType.UNKNOWN } } diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt b/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt index 68954619a6..2e3a6e4955 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt @@ -78,14 +78,14 @@ data class SendState( fun convertFiatToExtractCrypto(fiatValue: BigDecimal): BigDecimal = when (amountState.typeOfAmount) { AmountType.Coin -> convertFiatToCoin(fiatValue) - AmountType.Token -> convertFiatToToken(fiatValue) + is AmountType.Token -> convertFiatToToken(fiatValue) AmountType.Reserve -> fiatValue } fun convertExtractCryptoToFiat(cryptoValue: BigDecimal, scaleWithPrecision: Boolean = false): BigDecimal { return when (amountState.typeOfAmount) { AmountType.Coin -> convertCoinToFiat(cryptoValue, scaleWithPrecision) - AmountType.Token -> convertTokenToFiat(cryptoValue, scaleWithPrecision) + is AmountType.Token -> convertTokenToFiat(cryptoValue, scaleWithPrecision) AmountType.Reserve -> cryptoValue } } @@ -103,7 +103,7 @@ data class SendState( fun mainCurrencyCanBeSwitched(): Boolean { return when (amountState.typeOfAmount) { AmountType.Coin -> coinIsConvertible() - AmountType.Token -> tokenIsConvertible() + is AmountType.Token -> tokenIsConvertible() AmountType.Reserve -> false } } 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 129123e56c..8fbbe8a149 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 @@ -185,7 +185,7 @@ class WalletMiddleware { private fun prepareSendAction(amount: Amount?): Action { return if (amount != null) { - if (amount.type == AmountType.Token) { + if (amount.type is AmountType.Token) { PrepareSendScreen(store.state.walletState.wallet?.amounts?.get(AmountType.Coin), amount) } else { PrepareSendScreen(amount) 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 10fc1610b8..4194fabd9e 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 @@ -11,6 +11,7 @@ import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.common.extensions.toQrCode import com.tangem.tap.common.redux.AppState import com.tangem.tap.domain.TapError +import com.tangem.tap.domain.getFirstToken import com.tangem.tap.features.wallet.models.removeUnknownTransactions import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.features.wallet.ui.BalanceStatus @@ -46,7 +47,7 @@ private fun internalReduce(action: Action, state: AppState): WalletState { val addressData = if (wallet == null) { null } else { - AddressData(wallet.address, wallet.shareUrl, wallet.exploreUrl) + AddressData(wallet.address, wallet.getShareUri(wallet.address), wallet.getExploreUrl()) } newState = newState.copy( state = ProgressState.Error, @@ -55,7 +56,7 @@ private fun internalReduce(action: Action, state: AppState): WalletState { currencyData = BalanceWidgetData( status = BalanceStatus.Unreachable, currency = wallet?.blockchain?.fullName, - token = wallet?.token?.symbol?.let { + token = wallet?.getFirstToken()?.symbol?.let { TokenData("", tokenSymbol = it) }), mainButton = WalletMainButton.SendButton(false), @@ -86,11 +87,11 @@ private fun internalReduce(action: Action, state: AppState): WalletState { BalanceStatus.Loading, wallet.blockchain.fullName, currencySymbol = wallet.blockchain.currency, - token = wallet.token?.symbol?.let { + token = wallet.getFirstToken()?.symbol?.let { TokenData("", tokenSymbol = it) } ), - addressData = AddressData(wallet.address, wallet.shareUrl, wallet.exploreUrl), + addressData = AddressData(wallet.address, wallet.getShareUri(wallet.address), wallet.getExploreUrl()), mainButton = WalletMainButton.SendButton(false), topUpState = TopUpState(allowed = action.allowTopUp) ) @@ -143,9 +144,9 @@ private fun internalReduce(action: Action, state: AppState): WalletState { } else { newState.currencyData.fiatAmount } - val tokenFiatAmount = if (currency == newState.wallet?.token?.symbol) { - newState.wallet?.amounts?.get(AmountType.Token)?.value - ?.toFiatString(rate, state.globalState.appCurrency) + val token = newState.wallet?.getFirstToken() + val tokenFiatAmount = if (currency == token?.symbol) { + newState.wallet?.getTokenAmount(token)?.value?.toFiatString(rate, state.globalState.appCurrency) } else { newState.currencyData.token?.fiatAmount } @@ -230,13 +231,17 @@ private fun onWalletLoaded( wallet: Wallet, walletState: WalletState, topUpAllowed: Boolean? = null ): WalletState { val fiatCurrencySymbol = store.state.globalState.appCurrency - val token = wallet.amounts[AmountType.Token] + val token = wallet.getFirstToken() val tokenData = if (token != null) { - val tokenFiatRate = store.state.globalState.conversionRates.getRate(token.currencySymbol) - val tokenFiatAmount = tokenFiatRate?.let { token.value?.toFiatString(it, fiatCurrencySymbol) } - TokenData( - token.value?.toFormattedString(token.decimals) ?: "", - token.currencySymbol, tokenFiatAmount) + val tokenAmount = wallet.getTokenAmount(token) + if (tokenAmount != null) { + val tokenFiatRate = store.state.globalState.conversionRates.getRate(tokenAmount.currencySymbol) + val tokenFiatAmount = tokenFiatRate?.let { tokenAmount.value?.toFiatString(it, fiatCurrencySymbol) } + TokenData(tokenAmount.value?.toFormattedString(tokenAmount.decimals) ?: "", + tokenAmount.currencySymbol, tokenFiatAmount) + } else { + null + } } else { null }