From 714eaf5668c2cf0a4c1cc89b2415455812b04e8e Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 18 May 2022 11:20:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/common/entities/FiatCurrency.kt | 18 +++++++++ .../tangem/tap/common/extensions/Specific.kt | 10 +++-- .../tap/common/extensions/WalletManager.kt | 2 +- .../tap/common/redux/global/GlobalAction.kt | 5 ++- .../tap/common/redux/global/GlobalState.kt | 5 +-- .../features/details/redux/DetailsAction.kt | 11 +++--- .../details/redux/DetailsMiddleware.kt | 35 +++++++++++++++--- .../features/details/redux/DetailsReducer.kt | 5 ++- .../features/details/redux/DetailsState.kt | 8 ++-- .../details/ui/CurrencySelectionDialog.kt | 36 +++++++++++------- .../features/details/ui/DetailsFragment.kt | 8 ++-- .../send/redux/reducers/ReceiptReducer.kt | 2 +- .../features/send/redux/states/SendState.kt | 28 +++++++------- .../tap/features/send/ui/SendFragment.kt | 11 +++--- .../features/wallet/models/TotalBalance.kt | 4 +- .../middlewares/TradeCryptoMiddleware.kt | 5 ++- .../redux/middlewares/WalletMiddleware.kt | 4 +- .../redux/reducers/MultiWalletReducer.kt | 2 +- .../redux/reducers/OnWalletLoadedReducer.kt | 14 +++---- .../wallet/redux/reducers/WalletReducer.kt | 37 +++++++++++++------ .../CurrencyExchangeManager.kt | 12 ++++-- 21 files changed, 165 insertions(+), 97 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/entities/FiatCurrency.kt diff --git a/app/src/main/java/com/tangem/tap/common/entities/FiatCurrency.kt b/app/src/main/java/com/tangem/tap/common/entities/FiatCurrency.kt new file mode 100644 index 0000000000..c0df80eb2a --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/entities/FiatCurrency.kt @@ -0,0 +1,18 @@ +package com.tangem.tap.common.entities + +data class FiatCurrency( + val code: String, + val name: String, + val symbol: String, +) { + val displayName: String + get() = "${this.name} (${this.code}) - ${this.symbol}" + + companion object { + val Default = FiatCurrency( + symbol = "$", + code = "USD", + name = "US Dollar", + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt index 4b978e18f6..c7386eb7f0 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt @@ -1,8 +1,10 @@ package com.tangem.tap.common.extensions +import android.text.Spanned +import android.text.SpannedString +import android.text.style.RelativeSizeSpan +import androidx.core.text.buildSpannedString import com.tangem.common.extensions.isZero -import com.tangem.network.api.tangemTech.CurrenciesResponse -import com.tangem.tap.common.redux.global.FiatCurrencyName import java.math.BigDecimal import java.math.RoundingMode import java.text.DecimalFormat @@ -37,7 +39,7 @@ fun BigDecimal.toFormattedCurrencyString( return "$formattedAmount $currency" } -fun BigDecimal.toFiatString(rateValue: BigDecimal, fiatCurrencyName: FiatCurrencyName): String { +fun BigDecimal.toFiatString(rateValue: BigDecimal, fiatCurrencyName: String): String { var fiatValue = rateValue.multiply(this) fiatValue = fiatValue.setScale(2, RoundingMode.HALF_UP) return "≈ ${fiatCurrencyName}  $fiatValue" @@ -48,7 +50,7 @@ fun BigDecimal.toFiatValue(rateValue: BigDecimal): BigDecimal { return fiatValue.setScale(2, RoundingMode.HALF_UP) } -fun BigDecimal.toFormattedFiatValue(fiatCurrencyName: FiatCurrencyName): String { +fun BigDecimal.toFormattedFiatValue(fiatCurrencyName: String): String { return "≈ ${fiatCurrencyName}  $this" } diff --git a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt index 540d23c3f7..d671b60a29 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt @@ -57,7 +57,7 @@ fun WalletManager?.getToUpUrl(): String? { action = CurrencyExchangeManager.Action.Buy, blockchain = wallet.blockchain, cryptoCurrencyName = wallet.blockchain.currency, - fiatCurrency = globalState.appCurrency, + fiatCurrencyName = globalState.appCurrency.code, walletAddress = defaultAddress, ) } diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index 21fd824d71..b871b7853f 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -6,6 +6,7 @@ import com.tangem.common.CompletionResult import com.tangem.common.core.TangemError import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.analytics.GlobalAnalyticsHandler +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.* import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.config.ConfigManager @@ -54,9 +55,9 @@ sealed class GlobalAction : Action { data class SetIfCardVerifiedOnline(val verified: Boolean) : GlobalAction() - data class ChangeAppCurrency(val appCurrency: FiatCurrencyName) : GlobalAction() + data class ChangeAppCurrency(val appCurrency: FiatCurrency) : GlobalAction() object RestoreAppCurrency : GlobalAction() { - data class Success(val appCurrency: FiatCurrencyName) : GlobalAction() + data class Success(val appCurrency: FiatCurrency) : GlobalAction() } data class UpdateWalletSignedHashes( diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index a58e92b944..75504f3ef2 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -2,7 +2,7 @@ package com.tangem.tap.common.redux.global import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.analytics.AnalyticsHandler -import com.tangem.tap.common.entities.TapCurrency.Companion.DEFAULT_FIAT_CURRENCY +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.domain.PayIdManager import com.tangem.tap.domain.TapWalletManager @@ -22,7 +22,7 @@ data class GlobalState( val configManager: ConfigManager? = null, val warningManager: WarningMessagesManager? = null, val feedbackManager: FeedbackManager? = null, - val appCurrency: FiatCurrencyName = DEFAULT_FIAT_CURRENCY, + val appCurrency: FiatCurrency = FiatCurrency.Default, val scanCardFailsCounter: Int = 0, val dialog: StateDialog? = null, val currencyExchangeManager: CurrencyExchangeManager? = null, @@ -40,7 +40,6 @@ data class AndroidResources( ) } typealias CryptoCurrencyName = String -typealias FiatCurrencyName = String data class OnboardingState( val onboardingStarted: Boolean = false, diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt index 5b572f8fff..16c5bbd1c8 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt @@ -4,11 +4,10 @@ import com.tangem.blockchain.common.Wallet import com.tangem.common.card.Card import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TwinCardNumber -import com.tangem.network.api.tangemTech.CurrenciesResponse import com.tangem.network.api.tangemTech.TangemTechService import com.tangem.operations.pins.CheckUserCodesResponse +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.NotificationAction -import com.tangem.tap.common.redux.global.FiatCurrencyName import com.tangem.tap.domain.termsOfUse.CardTou import com.tangem.wallet.R import org.rekotlin.Action @@ -19,8 +18,8 @@ sealed class DetailsAction : Action { val scanResponse: ScanResponse, val wallets: List, val cardTou: CardTou, - val fiatCurrencyName: FiatCurrencyName, - val fiatCurrencies: List? = null, + val fiatCurrencyName: FiatCurrency, + val fiatCurrencies: List? = null, val tangemTechService: TangemTechService, ) : DetailsAction() @@ -48,10 +47,10 @@ sealed class DetailsAction : Action { object CreateBackup : DetailsAction() sealed class AppCurrencyAction : DetailsAction() { - data class SetCurrencies(val currencies: List) : AppCurrencyAction() + data class SetCurrencies(val currencies: List) : AppCurrencyAction() object ChooseAppCurrency : AppCurrencyAction() object Cancel : AppCurrencyAction() - data class SelectAppCurrency(val fiatCurrencyName: FiatCurrencyName) : AppCurrencyAction() + data class SelectAppCurrency(val fiatCurrency: FiatCurrency) : AppCurrencyAction() } sealed class ManageSecurity : DetailsAction() { diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 9f1b6b6187..e938026085 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -4,10 +4,12 @@ import com.tangem.common.CompletionResult import com.tangem.common.card.FirmwareVersion import com.tangem.common.core.TangemSdkError import com.tangem.common.services.Result +import com.tangem.network.api.tangemTech.CurrenciesResponse import com.tangem.operations.pins.CheckUserCodesResponse import com.tangem.tap.* import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsParam +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppState @@ -71,7 +73,11 @@ class DetailsMiddleware { val fiatCurrenciesPrefStorage = preferencesStorage.fiatCurrenciesPrefStorage val storedFiatCurrencies = fiatCurrenciesPrefStorage.restore() if (storedFiatCurrencies.isNotEmpty()) { - store.dispatch(DetailsAction.AppCurrencyAction.SetCurrencies(storedFiatCurrencies)) + store.dispatch( + DetailsAction.AppCurrencyAction.SetCurrencies( + currencies = storedFiatCurrencies.mapToUiModel() + ) + ) } scope.launch { @@ -79,9 +85,15 @@ class DetailsMiddleware { when (val result = tangemTechService.currencies()) { is Result.Success -> { val currenciesList = result.data.currencies - if (currenciesList.isNotEmpty() && currenciesList.toSet() != storedFiatCurrencies.toSet()) { + if (currenciesList.isNotEmpty() && + currenciesList.toSet() != storedFiatCurrencies.toSet() + ) { fiatCurrenciesPrefStorage.save(currenciesList) - dispatchOnMain(DetailsAction.AppCurrencyAction.SetCurrencies(currenciesList)) + dispatchOnMain( + DetailsAction.AppCurrencyAction.SetCurrencies( + currencies = currenciesList.mapToUiModel() + ) + ) } } is Result.Failure -> {} @@ -89,7 +101,17 @@ class DetailsMiddleware { } } - class EraseWalletMiddleware() { + private fun List.mapToUiModel(): List { + return this.map { + FiatCurrency( + code = it.code, + name = it.name, + symbol = it.unit + ) + } + } + + class EraseWalletMiddleware { fun handle(action: DetailsAction.ResetToFactory) { when (action) { is DetailsAction.ResetToFactory.Proceed -> { @@ -137,8 +159,9 @@ class DetailsMiddleware { when (action) { is DetailsAction.AppCurrencyAction.SelectAppCurrency -> { store.state.globalState.tapWalletManager.rates.clear() - preferencesStorage.saveAppCurrency(action.fiatCurrencyName) - store.dispatch(GlobalAction.ChangeAppCurrency(action.fiatCurrencyName)) + preferencesStorage.fiatCurrenciesPrefStorage + .saveAppCurrency(action.fiatCurrency) + store.dispatch(GlobalAction.ChangeAppCurrency(action.fiatCurrency)) store.dispatch(WalletAction.LoadFiatRate()) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt index 796c7c171f..a000db965e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt @@ -49,7 +49,7 @@ private fun handlePrepareScreen( wallets = action.wallets, cardInfo = action.scanResponse.card.toCardInfo(), appCurrencyState = state.appCurrencyState.copy( - fiatCurrencyName = action.fiatCurrencyName, + currentFiatCurrency = action.fiatCurrencyName, showAppCurrencyDialog = false, ), cardTermsOfUseUrl = action.cardTou.getUrl(action.scanResponse.card), @@ -109,7 +109,8 @@ private fun handleAppCurrencyAction( is DetailsAction.AppCurrencyAction.SelectAppCurrency -> { state.copy( appCurrencyState = state.appCurrencyState.copy( - fiatCurrencyName = action.fiatCurrencyName, showAppCurrencyDialog = false + currentFiatCurrency = action.fiatCurrency, + showAppCurrencyDialog = false ) ) } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt index 0d2cf689d5..1315f43e15 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt @@ -3,10 +3,8 @@ package com.tangem.tap.features.details.redux import android.net.Uri import com.tangem.blockchain.common.Wallet import com.tangem.domain.common.ScanResponse -import com.tangem.network.api.tangemTech.CurrenciesResponse import com.tangem.tap.common.entities.Button -import com.tangem.tap.common.entities.TapCurrency.Companion.DEFAULT_FIAT_CURRENCY -import com.tangem.tap.common.redux.global.FiatCurrencyName +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState import com.tangem.tap.store import org.rekotlin.StateType @@ -53,7 +51,7 @@ data class SecurityScreenState( enum class SecurityOption { LongTap, PassCode, AccessCode } data class AppCurrencyState( - val fiatCurrencyName: FiatCurrencyName = DEFAULT_FIAT_CURRENCY, + val currentFiatCurrency: FiatCurrency = FiatCurrency.Default, val showAppCurrencyDialog: Boolean = false, - val fiatCurrencies: List? = null, + val fiatCurrencies: List? = null, ) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/CurrencySelectionDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/CurrencySelectionDialog.kt index d7248b75c8..23e79bd846 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/CurrencySelectionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/CurrencySelectionDialog.kt @@ -2,9 +2,7 @@ package com.tangem.tap.features.details.ui import android.content.Context import androidx.appcompat.app.AlertDialog -import com.tangem.network.api.tangemTech.CurrenciesResponse -import com.tangem.tap.common.extensions.toFormattedString -import com.tangem.tap.common.redux.global.FiatCurrencyName +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.store import com.tangem.wallet.R @@ -13,20 +11,30 @@ class CurrencySelectionDialog { var dialog: AlertDialog? = null - fun show(currenciesList: List, currentAppCurrency: FiatCurrencyName, context: Context) { - + fun show( + currenciesList: List, + currentAppCurrency: FiatCurrency, + context: Context + ) { if (dialog == null) { - val currenciesToShow = currenciesList.map { it.toFormattedString() }.toTypedArray() - var currentSelection = currenciesList.indexOfFirst { it.code == currentAppCurrency } + val currenciesToShow = currenciesList + .map { it.displayName } + .toTypedArray() + var currentSelection = currenciesList + .indexOfFirst { it.code == currentAppCurrency.code } dialog = AlertDialog.Builder(context) - .setTitle(context.getString(R.string.details_row_title_currency)) - .setNegativeButton(context.getString(R.string.common_cancel)) { _, _ -> - store.dispatch(DetailsAction.AppCurrencyAction.Cancel) - } - .setPositiveButton(context.getString(R.string.common_done)) { _, _ -> - val selectedCurrency = currenciesList[currentSelection] - store.dispatch(DetailsAction.AppCurrencyAction.SelectAppCurrency(selectedCurrency.code)) + .setTitle(context.getString(R.string.details_row_title_currency)) + .setNegativeButton(context.getString(R.string.common_cancel)) { _, _ -> + store.dispatch(DetailsAction.AppCurrencyAction.Cancel) + } + .setPositiveButton(context.getString(R.string.common_done)) { _, _ -> + val selectedCurrency = currenciesList[currentSelection] + store.dispatch( + DetailsAction.AppCurrencyAction.SelectAppCurrency( + fiatCurrency = selectedCurrency + ) + ) } .setOnDismissListener { store.dispatch(DetailsAction.AppCurrencyAction.Cancel) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index 781ba05548..2dbab2ee0b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -115,7 +115,7 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber amountType.token.symbol 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 ed98986ae3..98fbfa47e1 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 @@ -5,8 +5,8 @@ import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.isZero import com.tangem.tap.common.CurrencyConverter +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.entities.IndeterminateProgressButton -import com.tangem.tap.common.entities.TapCurrency import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.common.text.DecimalDigitsInputFilter import com.tangem.tap.domain.TapError @@ -123,18 +123,18 @@ enum class ButtonState { } data class AmountState( - val amountToExtract: Amount? = null, - val typeOfAmount: AmountType = AmountType.Coin, - val viewAmountValue: InputViewValue = InputViewValue(BigDecimal.ZERO.toPlainString()), - val viewBalanceValue: String = BigDecimal.ZERO.toPlainString(), - val mainCurrency: MainCurrency = MainCurrency(MainCurrencyType.FIAT, TapCurrency.DEFAULT_FIAT_CURRENCY), - val amountToSendCrypto: BigDecimal = BigDecimal.ZERO, - val balanceCrypto: BigDecimal = BigDecimal.ZERO, - val cursorAtTheSamePosition: Boolean = true, - val maxLengthOfAmount: Int = 2, - val decimalSeparator: String = ".", - val error: TapError? = null, - val inputIsEnabled: Boolean = true, + val amountToExtract: Amount? = null, + val typeOfAmount: AmountType = AmountType.Coin, + val viewAmountValue: InputViewValue = InputViewValue(BigDecimal.ZERO.toPlainString()), + val viewBalanceValue: String = BigDecimal.ZERO.toPlainString(), + val mainCurrency: MainCurrency = MainCurrency(MainCurrencyType.FIAT, FiatCurrency.Default.code), + val amountToSendCrypto: BigDecimal = BigDecimal.ZERO, + val balanceCrypto: BigDecimal = BigDecimal.ZERO, + val cursorAtTheSamePosition: Boolean = true, + val maxLengthOfAmount: Int = 2, + val decimalSeparator: String = ".", + val error: TapError? = null, + val inputIsEnabled: Boolean = true, ) : SendScreenState { override val stateId: StateId = StateId.AMOUNT @@ -146,7 +146,7 @@ data class AmountState( fun createMainCurrency(type: MainCurrencyType, canSwitched: Boolean): MainCurrency { return if (!canSwitched) MainCurrency(type, amountToExtract?.currencySymbol ?: "NONE", false) else when (type) { - MainCurrencyType.FIAT -> MainCurrency(type, store.state.globalState.appCurrency) + MainCurrencyType.FIAT -> MainCurrency(type, store.state.globalState.appCurrency.code) MainCurrencyType.CRYPTO -> MainCurrency(type, amountToExtract?.currencySymbol ?: "NONE") } } diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt index d999d79bcb..4fa59376fb 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt @@ -17,7 +17,7 @@ import com.tangem.Message import com.tangem.tangem_sdk_new.extensions.dpToPx import com.tangem.tangem_sdk_new.extensions.hideSoftKeyboard import com.tangem.tap.common.KeyboardObserver -import com.tangem.tap.common.entities.TapCurrency +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.getFromClipboard import com.tangem.tap.common.extensions.setOnImeActionListener import com.tangem.tap.common.qrCodeScan.ScanQrCodeActivity @@ -261,11 +261,10 @@ class SendFragment : BaseStoreFragment(R.layout.fragment_send) { private fun restoreMainCurrency(): MainCurrencyType { val sp = requireContext().getSharedPreferences("SendScreen", Context.MODE_PRIVATE) - val mainCurrency = sp.getString("mainCurrency", TapCurrency.DEFAULT_FIAT_CURRENCY) - val foundType = MainCurrencyType.values() - .firstOrNull { it.name.equals(mainCurrency!!, ignoreCase = true) } - ?: MainCurrencyType.CRYPTO - return foundType + val mainCurrency = sp.getString("mainCurrency", FiatCurrency.Default.code) + return MainCurrencyType.values() + .firstOrNull { it.name.equals(mainCurrency!!, ignoreCase = true) } + ?: MainCurrencyType.CRYPTO } fun saveMainCurrency(type: MainCurrencyType) { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt index 31cc8a8d7f..16676936e5 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt @@ -1,12 +1,12 @@ package com.tangem.tap.features.wallet.models -import com.tangem.tap.common.redux.global.FiatCurrencyName +import com.tangem.tap.common.entities.FiatCurrency import java.math.BigDecimal data class TotalBalance( val state: State, val fiatAmount: BigDecimal, - val fiatCurrencyName: FiatCurrencyName, + val fiatCurrency: FiatCurrency, ) { enum class State { Loading, diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt index 90796fd143..45e34c15f9 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt @@ -61,8 +61,9 @@ class TradeCryptoMiddleware { action = exchangeAction, blockchain = currency.blockchain, cryptoCurrencyName = currencySymbol, - fiatCurrency = appCurrency, - walletAddress = defaultAddress)?.let { store.dispatchOnMain(NavigationAction.OpenUrl(it)) } + fiatCurrencyName = appCurrency.code, + walletAddress = defaultAddress + )?.let { store.dispatchOnMain(NavigationAction.OpenUrl(it)) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index 034122f2c1..8b9033964d 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -104,7 +104,7 @@ class WalletMiddleware { warningsMiddleware.tryToShowAppRatingWarning(action.wallet) } is WalletAction.LoadFiatRate -> { - val appCurrencyId = globalState.appCurrency + val appCurrencyId = globalState.appCurrency.code scope.launch { val coinsList = when { action.wallet != null -> { @@ -344,4 +344,4 @@ class WalletMiddleware { } } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 21e3ed698f..a7437c94eb 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -126,7 +126,7 @@ class MultiWalletReducer { ), fiatAmountFormatted = tokenWalletData.fiatRate?.let { action.amount.value - ?.toFiatString(it, store.state.globalState.appCurrency) + ?.toFiatString(it, store.state.globalState.appCurrency.code) }, blockchainAmount = wallet.amounts[AmountType.Coin]?.value ?: BigDecimal.ZERO ), diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt index 1809910e90..3f4b539e20 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt @@ -37,7 +37,7 @@ class OnWalletLoadedReducer { ): WalletState { val walletData = walletState.getWalletData(blockchainNetwork) ?: return walletState - val fiatCurrencySymbol = store.state.globalState.appCurrency + val fiatCurrency = store.state.globalState.appCurrency val exchangeManager = store.state.globalState.currencyExchangeManager val coinAmountValue = wallet.amounts[AmountType.Coin]?.value @@ -65,7 +65,7 @@ class OnWalletLoadedReducer { amount = coinAmountValue, amountFormatted = formattedAmount, fiatAmount = fiatAmount, - fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(fiatCurrencySymbol) + fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(fiatCurrency.code) ), pendingTransactions = pendingTransactions.removeUnknownTransactions(), mainButton = WalletMainButton.SendButton(coinSendButton), @@ -99,7 +99,7 @@ class OnWalletLoadedReducer { token.symbol ), fiatAmount = tokenFiatAmount, - fiatAmountFormatted = tokenFiatAmount?.toFormattedFiatValue(fiatCurrencySymbol) + fiatAmountFormatted = tokenFiatAmount?.toFormattedFiatValue(fiatCurrency.code) ), pendingTransactions = tokenPendingTransactions.removeUnknownTransactions(), mainButton = WalletMainButton.SendButton(tokenSendButton), @@ -112,7 +112,7 @@ class OnWalletLoadedReducer { val totalBalance = TotalBalance( state = wallets.findTotalBalanceState(), fiatAmount = wallets.calculateTotalFiatAmount(), - fiatCurrencyName = fiatCurrencySymbol, + fiatCurrency = fiatCurrency, ) val state = if (wallets.any { it.currencyData.status == BalanceStatus.Loading }) { @@ -132,7 +132,7 @@ class OnWalletLoadedReducer { private fun onSingleWalletLoaded(wallet: Wallet, walletState: WalletState): WalletState { if (wallet.blockchain != walletState.primaryBlockchain) return walletState - val fiatCurrencySymbol = store.state.globalState.appCurrency + val fiatCurrencyName = store.state.globalState.appCurrency.code val exchangeManager = store.state.globalState.currencyExchangeManager val token = wallet.getFirstToken() @@ -141,7 +141,7 @@ class OnWalletLoadedReducer { if (tokenAmount != null) { val tokenFiatRate = walletState.primaryWallet?.currencyData?.token?.fiatRate val tokenFiatAmount = - tokenFiatRate?.let { tokenAmount.value?.toFiatString(it, fiatCurrencySymbol) } + tokenFiatRate?.let { tokenAmount.value?.toFiatString(it, fiatCurrencyName) } TokenData( tokenAmount.value?.toFormattedCurrencyString( token.decimals, token.symbol @@ -161,7 +161,7 @@ class OnWalletLoadedReducer { ) val fiatRate = walletState.primaryWallet?.fiatRate val fiatAmountRaw = fiatRate?.multiply(amount)?.setScale(2, RoundingMode.DOWN) - val fiatAmount = fiatRate?.let { amount?.toFiatString(it, fiatCurrencySymbol) } + val fiatAmount = fiatRate?.let { amount?.toFiatString(it, fiatCurrencyName) } val pendingTransactions = wallet.recentTransactions.toPendingTransactions(wallet.address) val sendButtonEnabled = amount?.isZero() == false && pendingTransactions.isEmpty() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt index 97e6e778ec..3219b7cd2f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt @@ -4,12 +4,12 @@ import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Wallet import com.tangem.domain.common.TwinCardNumber +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFiatValue import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.common.extensions.toFormattedFiatValue import com.tangem.tap.common.redux.AppState -import com.tangem.tap.common.redux.global.FiatCurrencyName import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.getArtworkUrl import com.tangem.tap.domain.getFirstToken @@ -377,22 +377,30 @@ private fun handleCheckSignedHashesActions( private fun setNewFiatRate( fiatRate: Pair, - appCurrency: FiatCurrencyName, state: WalletState + appCurrency: FiatCurrency, + state: WalletState ): WalletState { val rate = fiatRate.second ?: return state - val rateFormatted = rate.toFormattedCurrencyString(2, appCurrency, RoundingMode.HALF_UP) + val rateFormatted = rate.toFormattedCurrencyString( + decimals = 2, + currency = appCurrency.code, + roundingMode = RoundingMode.HALF_UP + ) val currency = fiatRate.first return if (!state.isMultiwalletAllowed) { - setSingeWalletFiatRate(rate, rateFormatted, currency, appCurrency, state) + setSingleWalletFiatRate(rate, rateFormatted, currency, appCurrency, state) } else { setMultiWalletFiatRate(rate, rateFormatted, currency, appCurrency, state) } } private fun setMultiWalletFiatRate( - rate: BigDecimal, rateFormatted: String, currency: Currency, - appCurrency: FiatCurrencyName, state: WalletState + rate: BigDecimal, + rateFormatted: String, + currency: Currency, + appCurrency: FiatCurrency, + state: WalletState ): WalletState { val walletStore = state.getWalletStore(currency) ?: return state @@ -405,7 +413,7 @@ private fun setMultiWalletFiatRate( is Currency.Token -> wallet?.getTokenAmount(currency.token)?.value?.toFiatValue(rate) } - val fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(appCurrency) + val fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(appCurrency.code) val newWalletData = state.getWalletData(currency)?.copy( currencyData = walletData.currencyData.copy( fiatAmountFormatted = fiatAmountFormatted, @@ -416,16 +424,19 @@ private fun setMultiWalletFiatRate( return state.updateWalletData(newWalletData) } -private fun setSingeWalletFiatRate( - rate: BigDecimal, rateFormatted: String, currency: Currency, - appCurrency: FiatCurrencyName, state: WalletState +private fun setSingleWalletFiatRate( + rate: BigDecimal, + rateFormatted: String, + currency: Currency, + appCurrency: FiatCurrency, + state: WalletState ): WalletState { val wallet = state.primaryWalletManager?.wallet ?: return state val token = wallet.getFirstToken() if (currency == state.primaryWallet?.currency) { val fiatAmount = wallet.amounts[AmountType.Coin]?.value - ?.toFiatString(rate, appCurrency) + ?.toFiatString(rate, appCurrency.code) val walletData = state.primaryWallet.copy( currencyData = state.primaryWallet.currencyData.copy(fiatAmountFormatted = fiatAmount), fiatRate = rate, @@ -433,7 +444,9 @@ private fun setSingeWalletFiatRate( ) return state.updateWalletData(walletData) } else if (currency is Currency.Token && currency.token == token) { - val tokenFiatAmount = wallet.getTokenAmount(token)?.value?.toFiatString(rate, appCurrency) + val tokenFiatAmount = wallet.getTokenAmount(token) + ?.value + ?.toFiatString(rate, appCurrency.code) val tokenData = state.primaryWallet?.currencyData?.token?.copy( fiatAmount = tokenFiatAmount, fiatRate = rate, diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt index a6e9c55cba..7a89edc4b0 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt @@ -30,7 +30,7 @@ interface ExchangeUrlBuilder { action: CurrencyExchangeManager.Action, blockchain: Blockchain, cryptoCurrencyName: CryptoCurrencyName, - fiatCurrency: String, + fiatCurrencyName: String, walletAddress: String, ): String? @@ -74,13 +74,19 @@ class CurrencyExchangeManager( action: Action, blockchain: Blockchain, cryptoCurrencyName: CryptoCurrencyName, - fiatCurrency: String, + fiatCurrencyName: String, walletAddress: String, ): String? { if (blockchain.isTestnet()) return blockchain.getTestnetTopUpUrl() val urlBuilder = getExchangeUrlBuilder(action) - return urlBuilder.getUrl(action, blockchain, cryptoCurrencyName, fiatCurrency, walletAddress) + return urlBuilder.getUrl( + action, + blockchain, + cryptoCurrencyName, + fiatCurrencyName, + walletAddress + ) } override fun getSellCryptoReceiptUrl(action: Action, transactionId: String): String? {