From 9a84a151072a7dc3c962393b8ebcf49dd5278318 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Jun 2022 11:35:32 +0300 Subject: [PATCH 01/19] Updated on 2026-08-14 --- .../com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt index d3f7730510..23be9f4aaf 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt @@ -1,6 +1,7 @@ package com.tangem.tap.domain.extensions import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Blockchain.Arbitrum import com.tangem.tap.features.wallet.redux.Currency import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.CurrencyExchangeStatus @@ -19,6 +20,7 @@ fun CurrencyExchangeManager.sellIsAllowed(currency: Currency): Boolean { fun CurrencyExchangeStatus.buyIsAllowed(currency: Currency): Boolean { if (store.state.globalState.configManager?.config?.isTopUpEnabled == false) return false + if (currency.blockchain == Arbitrum) return false if (!isBuyAllowed) return false //TODO: temporary, for the 3.32 release, unlock all buy button From 5bd9c8a43d0ba28eae32bd89ccc39e66fb5bec41 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 11:12:57 +0400 Subject: [PATCH 02/19] Updated on 2026-08-14 --- .../features/details/ui/DetailsFragment.kt | 6 +++ app/src/main/res/layout/fragment_details.xml | 38 +++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) 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 d4ad890b8b..f536a8c356 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 @@ -17,6 +17,7 @@ import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.details.redux.DetailsState import com.tangem.tap.features.details.redux.SecurityOption import com.tangem.tap.features.feedback.FeedbackEmail +import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.store import com.tangem.wallet.R import com.tangem.wallet.databinding.FragmentDetailsBinding @@ -114,6 +115,11 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber + + + android:layout_height="wrap_content" + android:drawablePadding="15dp" + android:paddingTop="7dp" + android:paddingBottom="7dp" + android:text="@string/disclaimer_title" + android:textColor="@color/darkGray6" + android:textSize="16sp" + app:drawableEndCompat="@drawable/ic_angle_bracket_right" + app:drawableTint="@color/darkGray1" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tv_app_currency" /> - + \ No newline at end of file From 43ad099946200ffddb1c4928df60dade855c5e5d Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 13:48:25 +0300 Subject: [PATCH 03/19] Updated on 2026-08-14 --- .../tap/features/wallet/redux/WalletState.kt | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index e8b093c5ab..f3e623b513 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -67,13 +67,14 @@ data class WalletState( val isTangemTwins: Boolean get() = store.state.globalState.scanResponse?.isTangemTwins() == true - val primaryWallet: WalletData? = if (wallets.isNotEmpty()) wallets[0].walletsData[0] else null + val primaryWallet: WalletData? = wallets.firstOrNull() + ?.walletsData?.firstOrNull() val primaryWalletManager: WalletManager? = if (wallets.isNotEmpty()) wallets[0].walletManager else null val shouldShowDetails: Boolean = primaryWallet?.currencyData?.status != BalanceStatus.EmptyCard && - primaryWallet?.currencyData?.status != BalanceStatus.UnknownBlockchain + primaryWallet?.currencyData?.status != BalanceStatus.UnknownBlockchain val blockchains: List get() = wallets.mapNotNull { it.walletManager?.wallet?.blockchain } @@ -232,6 +233,8 @@ data class WalletState( && it.blockchainNetwork.derivationPath == walletData.currency.derivationPath } copy(wallets = walletStores) + .updateTotalBalance() + .updateProgressState() } else { val walletStore = getWalletStore(walletData.currency) val walletDataList = walletStore?.walletsData @@ -284,19 +287,19 @@ data class WalletState( } private fun updateTotalBalance(): WalletState { - return if (this.wallets.isNotEmpty()) { - val globalState = store.state.globalState - val walletsData = this.wallets - .flatMap(WalletStore::walletsData) - .filterNot { wallet -> - wallet.currency.isCustomCurrency( - derivationStyle = globalState - .scanResponse - ?.card - ?.derivationStyle - ) - } + val globalState = store.state.globalState + val walletsData = this.wallets + .flatMap(WalletStore::walletsData) + .filterNot { wallet -> + wallet.currency.isCustomCurrency( + derivationStyle = globalState + .scanResponse + ?.card + ?.derivationStyle + ) + } + return if (walletsData.isNotEmpty()) { this.copy( totalBalance = TotalBalance( state = walletsData.findProgressState(), @@ -310,9 +313,10 @@ data class WalletState( } private fun updateProgressState(): WalletState { - return if (this.wallets.isNotEmpty()) { - val walletsData = this.wallets - .flatMap(WalletStore::walletsData) + val walletsData = this.wallets + .flatMap(WalletStore::walletsData) + + return if (walletsData.isNotEmpty()) { val newProgressState = walletsData.findProgressState() this.copy( From 1f4dd69476e2884c62e59f5af376b84a08f2e29a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Jun 2022 13:30:08 +0300 Subject: [PATCH 04/19] Updated on 2026-08-14 --- .../tap/features/wallet/ui/adapters/WalletAdapter.kt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index b7604317f3..afcb72f78e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -113,11 +113,8 @@ class WalletAdapter lContent.tvStatus.text = statusMessage lContent.tvExchangeRate.isVisible = statusMessage == null - lContent.tvExchangeRate.text = if (isCustomCurrency) { - root.getString(id = R.string.token_item_no_rate) - } else { - wallet.fiatRateString ?: "—" - } + lContent.tvExchangeRate.text = wallet.fiatRateString + ?: root.getString(id = R.string.token_item_no_rate) badgeCustomBalance.isVisible = isCustomCurrency From be9205ad469fcc8303782005f18bf6dfce8d0c31 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 5 Jun 2022 10:45:22 +0300 Subject: [PATCH 05/19] Updated on 2026-08-14 --- .../wallet/redux/reducers/WalletReducer.kt | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) 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 426fb74e2b..fe7213d361 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 @@ -9,6 +9,7 @@ import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.toFiatRateString 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.domain.TapError @@ -201,31 +202,37 @@ private fun internalReduce(action: Action, state: AppState): WalletState { walletState = newState ) is WalletAction.LoadWallet.NoAccount -> { - val walletData = newState.getWalletData(action.blockchain)?.copy( - currencyData = BalanceWidgetData( - BalanceStatus.NoAccount, action.wallet.blockchain.fullName, - currencySymbol = action.wallet.blockchain.currency, - amountToCreateAccount = action.amountToCreateAccount + val amount = BigDecimal.ZERO + val fiatAmount = BigDecimal.ZERO + val walletData = newState.getWalletData(action.blockchain)?.let { walletData -> + val walletBlockchain = walletData.currency.blockchain + walletData.copy( + currencyData = BalanceWidgetData( + status = BalanceStatus.NoAccount, + currency = action.wallet.blockchain.fullName, + currencySymbol = action.wallet.blockchain.currency, + amount = amount, + amountFormatted = amount.toFormattedCurrencyString( + decimals = walletBlockchain.decimals(), + currency = walletBlockchain.currency, + ), + fiatAmount = fiatAmount, + fiatAmountFormatted = fiatAmount.toFiatRateString( + fiatCurrencyName = store.state.globalState.appCurrency.symbol + ), + amountToCreateAccount = action.amountToCreateAccount, + ) ) - ) + } var updatedWalletStore = newState.getWalletStore(action.blockchain) ?.updateWallets(listOfNotNull(walletData)) - val progressState = - if (updatedWalletStore?.walletsData?.any { it.currencyData.status == BalanceStatus.Loading } == true) { - ProgressState.Loading - } else { - ProgressState.Done - } updatedWalletStore = updatedWalletStore?.updateWallets( newState.updateTradeCryptoState(exchangeManager, updatedWalletStore.walletsData) ) newState = newState.updateWalletStore(updatedWalletStore) - .copy( - state = progressState - ) } is WalletAction.LoadWallet.Failure -> { @@ -420,19 +427,24 @@ private fun setMultiWalletFiatRate( state: WalletState ): WalletState { val newWalletsData = fiatRates.mapNotNull { (currency, rate) -> - val walletStore = state.getWalletStore(currency) ?: return state + val walletStore = state.getWalletStore(currency) ?: return@mapNotNull null val wallet = walletStore.walletManager?.wallet - val walletData = state.getWalletData(currency) ?: return state + val walletData = state.getWalletData(currency) ?: return@mapNotNull null + val currencyData = walletData.currencyData - val fiatAmount = when (currency) { + var fiatAmount = when (currency) { is Currency.Blockchain -> wallet?.amounts?.get(AmountType.Coin)?.value?.toFiatValue(rate) is Currency.Token -> wallet?.getTokenAmount(currency.token)?.value?.toFiatValue(rate) } + if (currencyData.status == BalanceStatus.NoAccount && fiatAmount == null) { + fiatAmount = BigDecimal.ZERO + } val fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(appCurrency.symbol) - state.getWalletData(currency)?.copy( - currencyData = walletData.currencyData.copy( + + walletData.copy( + currencyData = currencyData.copy( fiatAmountFormatted = fiatAmountFormatted, fiatAmount = fiatAmount ), From 4a3066cdff8fdca5ad41fb8ee3773f76931b0068 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 14:22:43 +0300 Subject: [PATCH 06/19] Updated on 2026-08-14 --- .../tangem/tap/features/wallet/redux/WalletState.kt | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index f3e623b513..f9a8e77a76 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -9,7 +9,6 @@ import com.tangem.blockchain.common.Wallet import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.AddressType import com.tangem.common.extensions.isZero -import com.tangem.domain.common.TapWorkarounds.derivationStyle import com.tangem.domain.common.extensions.canHandleToken import com.tangem.domain.common.extensions.toCoinId import com.tangem.domain.features.addCustomToken.CustomCurrency @@ -287,24 +286,16 @@ data class WalletState( } private fun updateTotalBalance(): WalletState { - val globalState = store.state.globalState val walletsData = this.wallets .flatMap(WalletStore::walletsData) - .filterNot { wallet -> - wallet.currency.isCustomCurrency( - derivationStyle = globalState - .scanResponse - ?.card - ?.derivationStyle - ) - } + .filter { it.fiatRate != null } return if (walletsData.isNotEmpty()) { this.copy( totalBalance = TotalBalance( state = walletsData.findProgressState(), fiatAmount = walletsData.calculateTotalFiatAmount(), - fiatCurrency = globalState.appCurrency + fiatCurrency = store.state.globalState.appCurrency ) ) } else this.copy( From 2e3f09d537da1670adcdeb0f99524cb0db904eb9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 15:27:53 +0300 Subject: [PATCH 07/19] Updated on 2026-08-14 --- app/src/main/res/values-ru/strings_final.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index ea424b57b6..abce4c4f83 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -47,7 +47,7 @@ Пользовательский Баланс - Обработка полной суммы… + Некоторые сети недоступны Управление токенами Нет цены From 9fc105c5bbfdc1a03e1e9d7cdf09037037138905 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 17:34:08 +0300 Subject: [PATCH 08/19] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tap/features/wallet/models/PendingTransaction.kt | 2 +- .../wallet/redux/reducers/MultiWalletReducer.kt | 11 +++-------- .../wallet/redux/reducers/OnWalletLoadedReducer.kt | 8 ++------ 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 7f058ec409..64ae04d208 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 7f058ec409b4eaaf8688ecd4bf944ef8d58d3564 +Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt index d24a3ea480..b96f055f59 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt @@ -48,7 +48,7 @@ fun List.filterByCoin(): List { } fun List.filterByToken(token: Token): List { - return this.filter { it.currency == token.symbol } + return this.filter { it.transactionData.amount.currencySymbol == token.symbol } } fun TransactionData.toPendingTransactionForToken(token: Token, walletAddress: String): PendingTransaction? { 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 41f297af89..850f6b3b3b 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 @@ -2,7 +2,6 @@ package com.tangem.tap.features.wallet.redux.reducers import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.Token -import com.tangem.blockchain.extensions.isAboveZero import com.tangem.common.extensions.guard import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedCurrencyString @@ -11,12 +10,7 @@ import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState -import com.tangem.tap.features.wallet.redux.WalletStore +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -120,7 +114,8 @@ class MultiWalletReducer { else -> BalanceStatus.VerifiedOnline } val tokenWalletData = state.getWalletData(currency) - val isTokenSendButtonEnabled = action.amount.isAboveZero() && pendingTransactions.isEmpty() + val isTokenSendButtonEnabled = tokenWalletData?.shouldEnableTokenSendButton() == true + && pendingTransactions.isEmpty() val newTokenWalletData = tokenWalletData?.copy( currencyData = tokenWalletData.currencyData.copy( 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 ffbe3cce5d..ac3ede0818 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 @@ -12,11 +12,7 @@ import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.ProgressState -import com.tangem.tap.features.wallet.redux.TradeCryptoState -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -89,7 +85,7 @@ class OnWalletLoadedReducer { tokenWalletData?.fiatRate?.let { rate -> tokenAmountValue?.toFiatValue(rate) } val isTokenSendButtonEnabled = newWalletData.shouldEnableTokenSendButton() - && tokenPendingTransactions.isEmpty() + && pendingTransactions.isEmpty() tokenWalletData?.copy( currencyData = tokenWalletData.currencyData.copy( status = tokenBalanceStatus, From 806bfd20de201aab8343057210d9592009dadfa0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Jun 2022 12:56:52 +0400 Subject: [PATCH 09/19] Updated on 2026-08-14 --- app/build.gradle | 2 +- domain/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 774dd1aef6..48f34abcb7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,7 +93,7 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation 'com.tangem:blockchain:develop-87' + implementation 'com.tangem:blockchain:develop-88' // implementation 'com.tangem:blockchain:0.0.1' implementation 'com.tangem.tangem-sdk-kotlin:core:develop-154' implementation 'com.tangem.tangem-sdk-kotlin:android:develop-154' diff --git a/domain/build.gradle b/domain/build.gradle index 378495cae1..169aea23f3 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -59,7 +59,7 @@ dependencies { implementation implementation(project(path: ':network')) implementation implementation(project(path: ':common')) - implementation 'com.tangem:blockchain:develop-87' + implementation 'com.tangem:blockchain:develop-88' // implementation 'com.tangem:blockchain:0.0.1' implementation 'com.tangem.tangem-sdk-kotlin:core:develop-154' implementation 'com.tangem.tangem-sdk-kotlin:android:develop-154' From 8cedc99fdc82f9a04427d763406d2ee39d8e9c6b Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Jun 2022 15:14:45 +0300 Subject: [PATCH 10/19] Updated on 2026-08-14 --- app/src/main/res/values-ru/strings_final.xml | 2 +- app/src/main/res/values/strings_final.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index abce4c4f83..201a1684ae 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -47,7 +47,7 @@ Пользовательский Баланс - Некоторые сети недоступны + В сумме учтены не все монеты Управление токенами Нет цены diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 2478dee488..d59d31ff0e 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -47,7 +47,7 @@ Custom Total balance - Some networks are unreachable + The amount does not include some of your funds Manage tokens No rate From fdd8c3a840072bfc74e1244f4259ed4337f98a79 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Jun 2022 15:16:21 +0300 Subject: [PATCH 11/19] Updated on 2026-08-14 --- app/src/main/res/layout/card_total_balance.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/card_total_balance.xml b/app/src/main/res/layout/card_total_balance.xml index 196dc167e1..1f97649e18 100644 --- a/app/src/main/res/layout/card_total_balance.xml +++ b/app/src/main/res/layout/card_total_balance.xml @@ -52,7 +52,7 @@ app:veilLayout_veiled="true" app:veilLayout_radius="4dp" app:layout_constraintTop_toBottomOf="@id/tv_title" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/tv_processing" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" tools:veilLayout_veiled="false"> @@ -80,7 +80,8 @@ android:textSize="12sp" android:text="@string/main_processing_full_amount" app:layout_constraintTop_toBottomOf="@id/veil_balance" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toStartOf="parent" + tools:visibility="visible" /> Date: Tue, 7 Jun 2022 15:16:59 +0300 Subject: [PATCH 12/19] Updated on 2026-08-14 --- .../java/com/tangem/tap/features/wallet/redux/WalletState.kt | 1 - .../features/wallet/redux/reducers/TotalBalanceOperations.kt | 5 +++-- .../tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index f9a8e77a76..b906784269 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -288,7 +288,6 @@ data class WalletState( private fun updateTotalBalance(): WalletState { val walletsData = this.wallets .flatMap(WalletStore::walletsData) - .filter { it.fiatRate != null } return if (walletsData.isNotEmpty()) { this.copy( diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/TotalBalanceOperations.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/TotalBalanceOperations.kt index c0ead34d52..15e44ea361 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/TotalBalanceOperations.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/TotalBalanceOperations.kt @@ -18,8 +18,9 @@ fun List.calculateTotalFiatAmount(): BigDecimal { } private fun List.mapToProgressState(): List { - return this.map { - when (it.currencyData.status) { + return this.map { wallet -> + if (wallet.fiatRate == null) ProgressState.Error + else when (wallet.currencyData.status) { BalanceStatus.Refreshing -> ProgressState.Refreshing BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress, diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt index e228e737bd..dd2260d59f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt @@ -138,8 +138,7 @@ class MultiWalletView : WalletView { show = totalBalance.state == ProgressState.Error ) - tvBalance.text = if (totalBalance.state == ProgressState.Error) "—" - else totalBalance.fiatAmount.formatAmountAsSpannedString( + tvBalance.text = totalBalance.fiatAmount.formatAmountAsSpannedString( currencySymbol = totalBalance.fiatCurrency.symbol ) tvCurrencyName.text = totalBalance.fiatCurrency.code From c3f2c157a305cd4faa428f14e7f3912aedbc6eee Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 23:41:38 +0400 Subject: [PATCH 13/19] Updated on 2026-08-14 --- .../tangem/tap/features/send/redux/reducers/ReceiptReducer.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f4dc73323e..28a7f06b08 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 @@ -128,7 +128,8 @@ class ReceiptReducer : SendInternalReducer { val totalFiat = amountFiat.plus(feeFiat) ReceiptTokenFiat( amountFiat = amountFiat.scaleToFiat(true).stripZeroPlainString(), - feeFiat = feeFiat.scaleToFiat(true).stripZeroPlainString(), + feeFiat = feeFiat.scaleToFiat(true) + .stripZeroPlainString().addPrecisionSign(), totalFiat = totalFiat.scaleToFiat(true).stripZeroPlainString(), willSentToken = tokensToSend.stripZeroPlainString(), willSentFeeCoin = feeCoin.stripZeroPlainString(), From b13a54b808db244830095c22e9eb7d7832e220ae Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 9 Jun 2022 09:50:27 +0400 Subject: [PATCH 14/19] Updated on 2026-08-14 --- .../features/details/redux/DetailsAction.kt | 2 ++ .../features/details/redux/DetailsReducer.kt | 3 +++ .../features/details/redux/DetailsState.kt | 2 ++ .../features/details/ui/DetailsFragment.kt | 3 +++ .../middlewares/AppCurrencyMiddleware.kt | 2 ++ app/src/main/res/layout/fragment_details.xml | 19 ++++++++++++++++--- 6 files changed, 28 insertions(+), 3 deletions(-) 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 0739effc65..c37a625c54 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 @@ -5,6 +5,7 @@ import com.tangem.common.card.Card import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TwinCardNumber import com.tangem.operations.pins.CheckUserCodesResponse +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.NotificationAction import com.tangem.tap.domain.termsOfUse.CardTou import com.tangem.wallet.R @@ -58,4 +59,5 @@ sealed class DetailsAction : Action { } } + data class ChangeAppCurrency(val fiatCurrency: FiatCurrency) : DetailsAction() } \ No newline at end of file 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 45910f64c4..a095d46d7e 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 @@ -31,6 +31,9 @@ private fun internalReduce(action: Action, state: AppState): DetailsState { is DetailsAction.ManageSecurity -> { handleSecurityAction(action, detailsState) } + is DetailsAction.ChangeAppCurrency -> + detailsState.copy(appCurrency = action.fiatCurrency) + else -> detailsState } } 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 eca730c5e2..ee6fd2bb7e 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 @@ -4,6 +4,7 @@ import android.net.Uri import com.tangem.blockchain.common.Wallet import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.entities.Button +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 @@ -19,6 +20,7 @@ data class DetailsState( val securityScreenState: SecurityScreenState? = null, val cardTermsOfUseUrl: Uri? = null, val createBackupAllowed: Boolean = false, + val appCurrency: FiatCurrency = FiatCurrency.Default ) : StateType { // if you do not delegate - the application crashes on startup, 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 f536a8c356..e8f3b56a62 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 @@ -116,6 +116,9 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber + + + @@ -243,7 +256,7 @@ app:drawableEndCompat="@drawable/ic_angle_bracket_right" app:drawableTint="@color/darkGray1" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/tv_app_currency" /> + app:layout_constraintTop_toBottomOf="@id/tv_app_currency_title" /> Date: Thu, 9 Jun 2022 10:01:54 +0400 Subject: [PATCH 15/19] Updated on 2026-08-14 --- .../common/compose/extensions/LazyListState.kt | 15 +++++++++++++++ .../tokens/ui/compose/ListOfCurrencies.kt | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt index a14477efca..013c92eff6 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt @@ -1,7 +1,11 @@ package com.tangem.tap.common.compose.extensions +import android.content.Context +import android.view.inputmethod.InputMethodManager import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.* +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView @Composable fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) { @@ -17,4 +21,15 @@ fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) LaunchedEffect(shouldLoadMore) { if (shouldLoadMore) loadMore() } +} + +@Composable +fun LazyListState.HideKeyboardOnScroll() { + val context = LocalContext.current + val view = LocalView.current + LaunchedEffect(firstVisibleItemIndex) { + val inputMethodManager = + context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt index 75755a0e73..4892cf5e13 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.tangem.blockchain.common.Blockchain +import com.tangem.tap.common.compose.extensions.HideKeyboardOnScroll import com.tangem.tap.common.compose.extensions.OnBottomReached import com.tangem.tap.domain.tokens.Currency import com.tangem.tap.features.tokens.redux.ContractAddress @@ -44,6 +45,8 @@ fun ListOfCurrencies( } val listState = rememberLazyListState() + listState.HideKeyboardOnScroll() + listState.OnBottomReached(loadMoreThreshold = 40) { onLoadMore() } LazyColumn( state = listState, @@ -67,7 +70,6 @@ fun ListOfCurrencies( ) } } - listState.OnBottomReached(loadMoreThreshold = 40) { onLoadMore() } } val Currency.fullName: String From 63f9e8738fb1499382c767e95a737e305f7e1e3c Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 9 Jun 2022 12:06:36 +0300 Subject: [PATCH 16/19] Updated on 2026-08-14 --- .../wallet/ui/wallet/MultiWalletView.kt | 1 - .../wallet/ui/wallet/SingleWalletView.kt | 12 ------- .../res/layout/layout_wallet_long_buttons.xml | 23 ++------------ .../layout/layout_wallet_short_buttons.xml | 31 ++++--------------- 4 files changed, 9 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt index dd2260d59f..5646b437f0 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt @@ -192,7 +192,6 @@ class MultiWalletView : WalletView { private fun configureButtonsForEmptyWalletState(binding: FragmentWalletBinding) = with(binding) { lButtonsLong.root.show() - lButtonsLong.btnScanLong.setOnClickListener { store.dispatch(WalletAction.Scan) } lButtonsLong.btnConfirmLong.setOnClickListener { store.dispatch(WalletAction.CreateWallet) } lButtonsLong.btnConfirmLong.text = fragment?.getText(R.string.wallet_button_create_wallet) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt index 4fb9b0ca0b..b7e0a307a5 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt @@ -130,20 +130,8 @@ class SingleWalletView : WalletView { lButtonsLong.btnConfirmLong } - val btnScan = if (state.tradeCryptoState.sellingAllowed || - state.tradeCryptoState.buyingAllowed - ) { - lButtonsShort.btnScan - } else { - lButtonsLong.btnScanLong - } - setupConfirmButton(state, btnConfirm, isTwinsWallet) - btnScan.setOnClickListener { - store.dispatch(WalletAction.Scan) - } - lAddress.btnCopy.setOnClickListener { state.walletAddresses?.selectedAddress?.address?.let { addressString -> store.dispatch(WalletAction.CopyAddress(addressString, fragment!!.requireContext())) diff --git a/app/src/main/res/layout/layout_wallet_long_buttons.xml b/app/src/main/res/layout/layout_wallet_long_buttons.xml index fa2a403d60..f670b7fd5d 100644 --- a/app/src/main/res/layout/layout_wallet_long_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_long_buttons.xml @@ -4,22 +4,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/layout_wallet_short_buttons.xml b/app/src/main/res/layout/layout_wallet_short_buttons.xml index 08bdfeef5a..ed60601395 100644 --- a/app/src/main/res/layout/layout_wallet_short_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_short_buttons.xml @@ -14,8 +14,8 @@ android:layout_marginBottom="8dp" android:text="@string/wallet_button_trade" app:icon="@drawable/ic_arrows_up_down" - app:layout_constraintBottom_toTopOf="@id/btn_scan" - app:layout_constraintEnd_toStartOf="@id/btn_confirm" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@id/btn_confirm" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" @@ -34,29 +34,10 @@ android:text="@string/wallet_button_send" app:icon="@drawable/ic_send" app:iconGravity="textEnd" - android:textAlignment="center" - app:layout_constraintBottom_toTopOf="@id/btn_scan" - app:layout_constraintEnd_toEndOf="parent" + android:textAlignment="center" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/btn_trade" app:layout_constraintVertical_bias="1" /> - - - - - \ No newline at end of file + From 4e38f0e82223a55a8aecda03897be69576e78177 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Jun 2022 13:06:35 +0400 Subject: [PATCH 17/19] Updated on 2026-08-14 --- .../tangem/tap/common/compose/extensions/LazyListState.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt index 013c92eff6..652b86af80 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt @@ -28,8 +28,10 @@ fun LazyListState.HideKeyboardOnScroll() { val context = LocalContext.current val view = LocalView.current LaunchedEffect(firstVisibleItemIndex) { - val inputMethodManager = - context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) + if (firstVisibleItemIndex > 1) { + val inputMethodManager = + context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) + } } } \ No newline at end of file From 897e2f223a44a909267076b545dbcaf4df0aa4b2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Jun 2022 13:22:03 +0400 Subject: [PATCH 18/19] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tap/common/compose/extensions/LazyListState.kt | 14 +++----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 64ae04d208..985642c135 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 +Subproject commit 985642c135606ba1f59fd739127aec03024da79b diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt index 652b86af80..f05044368f 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt @@ -1,11 +1,9 @@ package com.tangem.tap.common.compose.extensions -import android.content.Context -import android.view.inputmethod.InputMethodManager import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.* -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView +import com.tangem.tap.common.extensions.hideKeyboard @Composable fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) { @@ -25,13 +23,7 @@ fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) @Composable fun LazyListState.HideKeyboardOnScroll() { - val context = LocalContext.current - val view = LocalView.current - LaunchedEffect(firstVisibleItemIndex) { - if (firstVisibleItemIndex > 1) { - val inputMethodManager = - context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) - } + if (isScrollInProgress) { + LocalView.current.hideKeyboard() } } \ No newline at end of file From fc0eab2d8d9a287b279c290b63b2525baed8df7a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Jun 2022 14:39:46 +0300 Subject: [PATCH 19/19] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/common/extensions/UI.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt index 8c2184ae50..38b9d9fa48 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt @@ -187,7 +187,7 @@ fun Context.safeStartActivity( } fun View.getString(resId: Int, vararg formatArgs: Any?): String { - return context.getString(resId, formatArgs) + return context.getString(resId, *formatArgs) } fun View.animateVisibility(