From 3366b1ef7580091b5ce09ea6783aab7c9605a13d Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 23 Sep 2020 11:32:54 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle | 2 +- .../main/java/com/tangem/tap/MainActivity.kt | 17 +--- .../com/tangem/tap/domain/TapWalletManager.kt | 28 ++++++- .../tangem/tap/domain/extensions/Amount.kt | 11 +++ .../{ => extensions}/BlockchainExtensions.kt | 2 +- .../features/details/redux/DetailsReducer.kt | 4 +- .../send/redux/middlewares/SendMiddleware.kt | 2 + .../wallet/models/PendingTransaction.kt | 16 ++-- .../tap/features/wallet/redux/WalletAction.kt | 7 +- .../features/wallet/redux/WalletMiddleware.kt | 26 ++++++- .../features/wallet/redux/WalletReducer.kt | 78 ++++++++++--------- .../tap/features/wallet/redux/WalletState.kt | 5 +- .../wallet/ui/PendingTransactionsAdapter.kt | 18 ++++- .../tap/features/wallet/ui/WalletFragment.kt | 5 ++ .../tap/persistence/PreferencesStorage.kt | 2 +- .../res/layout/item_pending_transaction.xml | 19 ++++- app/src/main/res/values/strings.xml | 6 +- 17 files changed, 167 insertions(+), 81 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/domain/extensions/Amount.kt rename app/src/main/java/com/tangem/tap/domain/{ => extensions}/BlockchainExtensions.kt (93%) diff --git a/app/build.gradle b/app/build.gradle index 3e0dc1e312..097fe36c60 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.40.0' + implementation 'com.tangem:blockchain:1.41.0' //lifecycle implementation "androidx.lifecycle:lifecycle-runtime:2.2.0" diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 4ed8c97588..b52ae8c903 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -1,10 +1,7 @@ package com.tangem.tap -import android.app.Activity import android.content.pm.ActivityInfo -import android.os.Build import android.os.Bundle -import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity import com.tangem.CardFilter import com.tangem.Config @@ -67,7 +64,8 @@ class MainActivity : AppCompatActivity() { override fun onResume() { super.onResume() notificationsHandler = NotificationsHandler(fragment_container) - if (supportFragmentManager.backStackEntryCount == 0) { + if (supportFragmentManager.backStackEntryCount == 0 || + store.state.globalState.scanNoteResponse == null) { store.dispatch(HomeAction.CheckIfFirstLaunch) store.dispatch(NavigationAction.NavigateTo(AppScreen.Home)) } @@ -82,15 +80,4 @@ class MainActivity : AppCompatActivity() { store.dispatch(NavigationAction.ActivityDestroyed) super.onDestroy() } -} - -fun setTranslucent(activity: Activity, translucent: Boolean) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val w = activity.getWindow(); - if (translucent) { - w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - } else { - w.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - } - } } \ No newline at end of file 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 5d57c694c2..d0bb633ad3 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -9,6 +9,8 @@ import com.tangem.tap.TapConfig import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.common.redux.global.FiatCurrencyName import com.tangem.tap.common.redux.global.GlobalAction +import com.tangem.tap.domain.extensions.amountToCreateAccount +import com.tangem.tap.domain.extensions.isNoAccountError import com.tangem.tap.domain.tasks.ScanNoteResponse import com.tangem.tap.features.wallet.redux.PayIdState import com.tangem.tap.features.wallet.redux.WalletAction @@ -30,7 +32,7 @@ class TapWalletManager { store.dispatch(WalletAction.LoadWallet.Failure()) return } - updateWallet(walletManager) + loadWallet(walletManager) } suspend fun loadPayId() { @@ -38,6 +40,28 @@ class TapWalletManager { result?.let { handlePayIdResult(it) } } + suspend fun updateWallet() { + val walletManager = store.state.globalState.scanNoteResponse?.walletManager + if (walletManager == null) { + store.dispatch(WalletAction.UpdateWallet.Failure()) + return + } + val result = try { + walletManager.update() + Result.Success(walletManager.wallet) + } catch (exception: Exception) { + Result.Failure(exception) + } + withContext(Dispatchers.Main) { + when (result) { + is Result.Success -> store.dispatch(WalletAction.UpdateWallet.Success(result.data)) + is Result.Failure -> + store.dispatch(WalletAction.UpdateWallet.Failure(result.error?.localizedMessage)) + } + } + + } + suspend fun loadFiatRate(fiatCurrency: FiatCurrencyName) { val wallet = store.state.globalState.scanNoteResponse?.walletManager?.wallet val blockchainCurrency = wallet?.blockchain?.currency @@ -76,7 +100,7 @@ class TapWalletManager { } } - private suspend fun updateWallet(walletManager: WalletManager) { + private suspend fun loadWallet(walletManager: WalletManager) { val result = try { walletManager.update() Result.Success(walletManager.wallet) diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/Amount.kt b/app/src/main/java/com/tangem/tap/domain/extensions/Amount.kt new file mode 100644 index 0000000000..08703ba05c --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/extensions/Amount.kt @@ -0,0 +1,11 @@ +package com.tangem.tap.domain.extensions + +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.extensions.isAboveZero + +fun Map.toSendableAmounts(): List { + return this.toList().unzip().second + .filter { it.type != AmountType.Reserve } + .filter { it.isAboveZero() } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/BlockchainExtensions.kt b/app/src/main/java/com/tangem/tap/domain/extensions/BlockchainExtensions.kt similarity index 93% rename from app/src/main/java/com/tangem/tap/domain/BlockchainExtensions.kt rename to app/src/main/java/com/tangem/tap/domain/extensions/BlockchainExtensions.kt index c9d4ffdebd..da15688f28 100644 --- a/app/src/main/java/com/tangem/tap/domain/BlockchainExtensions.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/BlockchainExtensions.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain +package com.tangem.tap.domain.extensions import com.tangem.blockchain.common.Blockchain import org.stellar.sdk.requests.ErrorResponse 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 0f9cbff975..d5ea181d1b 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 @@ -2,8 +2,8 @@ package com.tangem.tap.features.details.redux import com.tangem.commands.Card import com.tangem.commands.Settings -import com.tangem.common.extensions.isZero import com.tangem.tap.common.redux.AppState +import com.tangem.tap.domain.extensions.toSendableAmounts import org.rekotlin.Action import java.util.* @@ -60,7 +60,7 @@ private fun handleEraseWallet(action: DetailsAction.EraseWallet, state: DetailsS DetailsAction.EraseWallet.Check -> { val notAllowedByCard = state.card?.settingsMask?.contains(Settings.ProhibitPurgeWallet) == true val notEmpty = state.wallet?.recentTransactions?.isNullOrEmpty() != true || - state.wallet.amounts.toList().unzip().second.map { it.value?.isZero() }.contains(false) + state.wallet.amounts.toSendableAmounts().isNotEmpty() val eraseWalletState = when { notAllowedByCard -> EraseWalletState.NotAllowedByCard notEmpty -> EraseWalletState.NotEmpty diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index ed70149d38..9fc892d655 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -13,6 +13,7 @@ import com.tangem.tap.features.send.redux.FeeAction.RequestFee import com.tangem.tap.features.send.redux.SendAction import com.tangem.tap.features.send.redux.SendActionUi import com.tangem.tap.features.send.redux.states.SendButtonState +import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.scope import com.tangem.tap.tangemSdk import kotlinx.coroutines.Dispatchers @@ -63,6 +64,7 @@ private fun verifyAndSendTransaction(appState: AppState?, dispatch: (Action) -> when (result) { is SimpleResult.Success -> { dispatch(SendAction.SendSuccess) + dispatch(WalletAction.UpdateWallet) dispatch(NavigationAction.PopBackTo()) } is SimpleResult.Failure -> { 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 4f1d7293d4..afa8bd8e17 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 @@ -1,18 +1,21 @@ package com.tangem.tap.features.wallet.models import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.TransactionStatus import com.tangem.tap.common.extensions.toFormattedString data class PendingTransaction( - val address: String, - val amount: String, + val address: String?, + val amount: String?, val currency: String, val type: PendingTransactionType ) enum class PendingTransactionType { Incoming, Outcoming } -fun TransactionData.toPendingTransaction(walletAddress: String): PendingTransaction { +fun TransactionData.toPendingTransaction(walletAddress: String): PendingTransaction? { + if (this.status == TransactionStatus.Confirmed) return null + val type: PendingTransactionType = if (this.sourceAddress == walletAddress) { PendingTransactionType.Outcoming } else { @@ -23,14 +26,15 @@ fun TransactionData.toPendingTransaction(walletAddress: String): PendingTransact } else { this.sourceAddress } + return PendingTransaction( - address, - this.amount.value?.toFormattedString(amount.decimals) ?: "?", + if (address == "unknown") null else address, + this.amount.value?.toFormattedString(amount.decimals), this.amount.currencySymbol, type ) } fun List.toPendingTransactions(walletAddress: String): List{ - return this.map { it.toPendingTransaction(walletAddress) } + return this.mapNotNull { it.toPendingTransaction(walletAddress) } } \ No newline at end of file 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 99f7cae09f..b6cf9b3f05 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 @@ -24,6 +24,11 @@ sealed class WalletAction : Action { data class Failure(val errorMessage: String? = null) : WalletAction() } + object UpdateWallet : WalletAction() { + data class Success(val wallet: Wallet) : WalletAction() + data class Failure(val errorMessage: String? = null) : WalletAction() + } + object LoadFiatRate : WalletAction() { data class Success(val fiatRates: Pair) : WalletAction() object Failure : WalletAction() @@ -42,7 +47,7 @@ sealed class WalletAction : Action { object Scan : WalletAction() data class Send(val amount: Amount? = null) : WalletAction() { - object ChooseCurrency : WalletAction() + data class ChooseCurrency(val amounts: List?) : WalletAction() object Cancel : WalletAction() } object CreatePayId : 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 30723845db..aa5556d05f 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 @@ -5,6 +5,7 @@ import android.net.Uri import androidx.core.content.ContextCompat import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.Wallet import com.tangem.commands.common.network.Result import com.tangem.common.CompletionResult import com.tangem.common.extensions.toHexString @@ -14,12 +15,14 @@ import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction 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.network.NetworkStateChanged import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.tangemSdkManager import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.rekotlin.Action @@ -58,6 +61,11 @@ val walletMiddleware: Middleware = { dispatch, state -> } } } + is WalletAction.UpdateWallet -> { + scope.launch { store.state.globalState.tapWalletManager.updateWallet() } + } + is WalletAction.UpdateWallet.Success -> setupWalletUpdate(action.wallet) + is WalletAction.LoadWallet.Success -> setupWalletUpdate(action.wallet) is WalletAction.CreatePayId.CompleteCreatingPayId -> { scope.launch { val cardId = store.state.globalState.scanNoteResponse?.card?.cardId @@ -123,6 +131,17 @@ val walletMiddleware: Middleware = { dispatch, state -> } } +private fun setupWalletUpdate(wallet: Wallet) { + if (!wallet.recentTransactions.isNullOrEmpty()) { + scope.launch(Dispatchers.IO) { + delay(10000) + withContext(Dispatchers.Main) { + store.dispatch(WalletAction.UpdateWallet) + } + } + } +} + private fun prepareSendAction(amount: Amount?): Action { return if (amount != null) { @@ -132,10 +151,11 @@ private fun prepareSendAction(amount: Amount?): Action { PrepareSendScreen(amount) } } else { - if (store.state.walletState.wallet?.amounts?.size ?: 0 > 1) { - WalletAction.Send.ChooseCurrency + val amounts = store.state.walletState.wallet?.amounts?.toSendableAmounts() + if (amounts?.size ?: 0 > 1) { + WalletAction.Send.ChooseCurrency(amounts) } else { - val amountToSend = store.state.walletState.wallet?.amounts?.toList()?.get(0)?.second + val amountToSend = amounts?.first() PrepareSendScreen(amountToSend) } } 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 771796f0aa..2d69c10626 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 @@ -1,6 +1,7 @@ package com.tangem.tap.features.wallet.redux import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.Wallet import com.tangem.common.extensions.isZero import com.tangem.common.extensions.toHexString import com.tangem.tap.common.extensions.toFiatString @@ -88,42 +89,8 @@ private fun internalReduce(action: Action, state: AppState): WalletState { ) } - is WalletAction.LoadWallet.Success -> { - val fiatCurrencySymbol = state.globalState.appCurrency - val token = action.wallet.amounts[AmountType.Token] - val tokenData = if (token != null) { - val tokenFiatRate = state.globalState.conversionRates.getRate(token.currencySymbol) - val tokenFiatAmount = tokenFiatRate?.let { token.value?.toFiatString(it, fiatCurrencySymbol) } - TokenData( - token.value?.toFormattedString(token.decimals) ?: "", - token.currencySymbol, tokenFiatAmount) - } else { - null - } - val amount = action.wallet.amounts[AmountType.Coin]?.value - val formattedAmount = amount?.toFormattedCurrencyString( - action.wallet.blockchain.decimals(), - action.wallet.blockchain.currency) - val fiatRate = state.globalState.conversionRates.getRate(action.wallet.blockchain.currency) - val fiatAmount = fiatRate?.let { amount?.toFiatString(it, fiatCurrencySymbol) } + is WalletAction.LoadWallet.Success -> newState = onWalletLoaded(action.wallet, newState) - val pendingTransactions = action.wallet.recentTransactions - .toPendingTransactions(action.wallet.address) - - val sendButtonEnabled = amount?.isZero() == false || token?.value?.isZero() == false - newState = newState.copy( - state = ProgressState.Done, wallet = action.wallet, - currencyData = BalanceWidgetData( - BalanceStatus.VerifiedOnline, action.wallet.blockchain.fullName, - currencySymbol = action.wallet.blockchain.currency, - formattedAmount, - token = tokenData, - fiatAmount = fiatAmount - ), - pendingTransactions = pendingTransactions, - mainButton = WalletMainButton.SendButton(sendButtonEnabled) - ) - } is WalletAction.LoadWallet.NoAccount -> { val wallet = state.globalState.scanNoteResponse?.walletManager?.wallet newState = newState.copy( @@ -142,6 +109,7 @@ private fun internalReduce(action: Action, state: AppState): WalletState { errorMessage = action.errorMessage ) ) + is WalletAction.UpdateWallet.Success -> newState = onWalletLoaded(action.wallet, newState) is WalletAction.LoadFiatRate -> { newState.copy(currencyData = newState.currencyData.copy( fiatAmount = null, @@ -212,13 +180,49 @@ private fun internalReduce(action: Action, state: AppState): WalletState { ) is WalletAction.CreatePayId.Cancel -> newState = newState.copy(walletDialog = null) is WalletAction.Send.ChooseCurrency -> { - val amounts = newState.wallet?.amounts?.toList()?.unzip()?.second newState = newState.copy( - walletDialog = WalletDialog.SelectAmountToSendDialog(amounts) + walletDialog = WalletDialog.SelectAmountToSendDialog(action.amounts) ) } is WalletAction.Send.Cancel -> newState = newState.copy(walletDialog = null) } return newState +} + +private fun onWalletLoaded(wallet: Wallet, walletState: WalletState): WalletState { + val fiatCurrencySymbol = store.state.globalState.appCurrency + val token = wallet.amounts[AmountType.Token] + 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) + } else { + null + } + val amount = wallet.amounts[AmountType.Coin]?.value + val formattedAmount = amount?.toFormattedCurrencyString( + wallet.blockchain.decimals(), + wallet.blockchain.currency) + val fiatRate = store.state.globalState.conversionRates.getRate(wallet.blockchain.currency) + val fiatAmount = fiatRate?.let { amount?.toFiatString(it, fiatCurrencySymbol) } + + val pendingTransactions = wallet.recentTransactions + .toPendingTransactions(wallet.address) + + val sendButtonEnabled = amount?.isZero() == false && pendingTransactions.isEmpty() + return walletState.copy( + state = ProgressState.Done, wallet = wallet, + currencyData = BalanceWidgetData( + BalanceStatus.VerifiedOnline, wallet.blockchain.fullName, + currencySymbol = wallet.blockchain.currency, + formattedAmount, + token = tokenData, + fiatAmount = fiatAmount + ), + pendingTransactions = pendingTransactions, + mainButton = WalletMainButton.SendButton(sendButtonEnabled) + ) } \ No newline at end of file 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 9ed907067c..7288a0b082 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 @@ -4,7 +4,6 @@ import android.graphics.Bitmap import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.Wallet import com.tangem.tap.common.entities.Button -import com.tangem.tap.common.extensions.toBitmap import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.features.wallet.models.PendingTransaction import com.tangem.tap.features.wallet.ui.BalanceWidgetData @@ -65,6 +64,4 @@ data class Artwork( val artworkId: String? = null, val artwork: Bitmap? = null, val artworkResId: Int? = null -) { - constructor(artworkId: String, artworkBytes: ByteArray) : this(artworkId, artworkBytes.toBitmap()) -} \ No newline at end of file +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt index ef5f765188..45abe6a80e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt @@ -44,14 +44,24 @@ class PendingTransactionsAdapter PendingTransactionType.Incoming -> R.string.wallet_pending_transaction_incoming PendingTransactionType.Outcoming -> R.string.wallet_pending_transaction_outcoming } + val transactionAddressRes = when (transaction.type) { + PendingTransactionType.Incoming -> R.string.wallet_pending_transaction_incoming_address + PendingTransactionType.Outcoming -> R.string.wallet_pending_transaction_outcoming_address + } val image = when (transaction.type) { PendingTransactionType.Incoming -> R.drawable.ic_arrow_down PendingTransactionType.Outcoming -> R.drawable.ic_arrow_right } - view.tv_pending_transaction.text = view.context.getString( - transactionDescriptionRes, transaction.amount, transaction.currency - ) - view.tv_pending_transaction_address.text = transaction.address + view.tv_pending_transaction.text = view.context.getString(transactionDescriptionRes) + + transaction.amount?.let { view.tv_pending_transaction_amount.text = "$it " } + view.tv_pending_transaction_currency.text = "${transaction.currency}" + + if (transaction.address != null) { + view.tv_pending_transaction_address.text = + view.context.getString(transactionAddressRes, transaction.address) + } + view.iv_pending_transaction.setImageDrawable(view.context.getDrawableCompat(image)) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 1aeee3210d..d6d8e10c55 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -108,6 +108,11 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber + + + + + + tools:text=" from 0x4313bcd3425235bda1232141"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b75584ec73..bffdfc8813 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,8 +35,10 @@ Account is not created Load %1s+ %2s to create account Tokens - Receiving %1s %2s from - Sending %1s %2s to + Receiving\u0020 + Sending\u0020 + from %s + to %s Create PayID Enter desired PayID first