Updated on 2026-08-14
This commit is contained in:
commit
6f69f29219
34 changed files with 504 additions and 479 deletions
|
|
@ -162,6 +162,7 @@ fun View.animateVisibility(
|
|||
hiddenVisibility: Int = View.GONE,
|
||||
) {
|
||||
if (show) {
|
||||
if (this.visibility == View.VISIBLE) return
|
||||
this.animate()
|
||||
.alpha(1f)
|
||||
.setDuration(durationMillis)
|
||||
|
|
@ -170,6 +171,7 @@ fun View.animateVisibility(
|
|||
this.isVisible = true
|
||||
}
|
||||
} else {
|
||||
if (this.visibility == hiddenVisibility) return
|
||||
this.animate()
|
||||
.alpha(0f)
|
||||
.setDuration(durationMillis)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.tap.domain
|
||||
|
||||
import com.tangem.blockchain.common.Amount
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.blockchain.common.BlockchainSdkConfig
|
||||
import com.tangem.blockchain.common.Token
|
||||
|
|
@ -38,6 +39,7 @@ import com.tangem.tap.walletStoresManager
|
|||
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.rekotlin.Action
|
||||
import timber.log.Timber
|
||||
|
||||
class TapWalletManager {
|
||||
|
|
@ -233,20 +235,20 @@ class TapWalletManager {
|
|||
val primaryWalletManager = walletManagerFactory.makePrimaryWalletManager(data)
|
||||
|
||||
if (blockchain != Blockchain.Unknown && primaryWalletManager != null) {
|
||||
val primaryToken = data.cardTypesResolver.getPrimaryToken()
|
||||
|
||||
dispatchOnMain(WalletAction.MultiWallet.SetPrimaryBlockchain(blockchain))
|
||||
if (primaryToken != null) {
|
||||
primaryWalletManager.addToken(primaryToken)
|
||||
dispatchOnMain(WalletAction.MultiWallet.SetPrimaryToken(primaryToken))
|
||||
}
|
||||
dispatchOnMain(
|
||||
val blockchainNetwork = BlockchainNetwork.fromWalletManager(primaryWalletManager)
|
||||
val actionsList = listOfNotNull<Action>(
|
||||
WalletAction.MultiWallet.AddBlockchains(
|
||||
blockchains = listOf(BlockchainNetwork.fromWalletManager(primaryWalletManager)),
|
||||
walletManagers = listOf(primaryWalletManager),
|
||||
),
|
||||
data.cardTypesResolver.getPrimaryToken()?.let {
|
||||
primaryWalletManager.addToken(it)
|
||||
primaryWalletManager.wallet.setAmount(Amount(it))
|
||||
WalletAction.MultiWallet.AddToken(it, blockchainNetwork, false)
|
||||
},
|
||||
WalletAction.LoadFiatRate(),
|
||||
)
|
||||
dispatchOnMain(*actionsList.toTypedArray())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@ object NoFundsForActivationDialog {
|
|||
return AlertDialog.Builder(context).apply {
|
||||
setTitle(R.string.saltpay_error_no_gas_title)
|
||||
setMessage(R.string.saltpay_error_no_gas_message)
|
||||
// TODO: SaltPay: change onboarding_supplement_button_kyc_waiting -> to appropriate string
|
||||
setPositiveButton(R.string.onboarding_supplement_button_kyc_waiting) { _, _ ->
|
||||
setPositiveButton(R.string.chat_button_title) { _, _ ->
|
||||
val config = store.state.globalState.configManager?.config?.saltPayConfig?.zendesk.guard {
|
||||
store.dispatchDebugErrorNotification("SaltPayConfig not initialized")
|
||||
return@setPositiveButton
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.tangem.tap.features.wallet.redux
|
|||
|
||||
import android.content.Context
|
||||
import com.tangem.blockchain.common.Amount
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.blockchain.common.Token
|
||||
import com.tangem.blockchain.common.Wallet
|
||||
import com.tangem.blockchain.common.WalletManager
|
||||
|
|
@ -99,8 +98,6 @@ sealed class WalletAction : Action {
|
|||
data class RemoveWallet(val currency: Currency) : MultiWallet()
|
||||
data class RemoveWallets(val currencies: List<Currency>) : MultiWallet()
|
||||
|
||||
data class SetPrimaryBlockchain(val blockchain: Blockchain) : MultiWallet()
|
||||
data class SetPrimaryToken(val token: Token) : MultiWallet()
|
||||
data class ShowWalletBackupWarning(val show: Boolean) : MultiWallet()
|
||||
object BackupWallet : MultiWallet()
|
||||
object ScheduleCheckForMissingDerivation : MultiWallet()
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.tangem.tap.common.extensions.toQrCode
|
|||
import com.tangem.tap.common.redux.global.CryptoCurrencyName
|
||||
import com.tangem.tap.common.toggleWidget.WidgetState
|
||||
import com.tangem.tap.domain.configurable.warningMessage.WarningMessage
|
||||
import com.tangem.tap.domain.getFirstToken
|
||||
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
|
||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState
|
||||
import com.tangem.tap.features.wallet.models.Currency
|
||||
|
|
@ -37,8 +38,6 @@ data class WalletState(
|
|||
val isMultiwalletAllowed: Boolean = false,
|
||||
val cardCurrency: CryptoCurrencyName? = null,
|
||||
val selectedCurrency: Currency? = null,
|
||||
val primaryBlockchain: Blockchain? = null,
|
||||
val primaryToken: Token? = null,
|
||||
val isTestnet: Boolean = false,
|
||||
val totalBalance: TotalBalance? = null,
|
||||
val showBackupWarning: Boolean = false,
|
||||
|
|
@ -75,13 +74,30 @@ data class WalletState(
|
|||
val walletManagers: List<WalletManager>
|
||||
get() = walletsStores.mapNotNull { it.walletManager }
|
||||
|
||||
val primaryWallet: WalletData? = walletsStores.firstOrNull()?.walletsData?.firstOrNull()
|
||||
private val primaryWalletStore: WalletStore?
|
||||
get() = if (isMultiwalletAllowed || walletsStores.isEmpty() || walletsStores.size > 1) null
|
||||
else walletsStores[0]
|
||||
|
||||
val primaryWalletManager: WalletManager? = if (walletsStores.isNotEmpty()) walletsStores[0].walletManager else null
|
||||
private val primaryWalletManager: WalletManager?
|
||||
get() = primaryWalletStore?.walletManager
|
||||
|
||||
val primaryWalletData: WalletData?
|
||||
get() = primaryWalletStore?.walletsData?.firstOrNull()
|
||||
|
||||
val primaryBlockchain: Blockchain?
|
||||
get() = primaryWalletManager?.wallet?.blockchain
|
||||
|
||||
val primaryToken: Token?
|
||||
get() = primaryWalletManager?.wallet?.getFirstToken()
|
||||
|
||||
val primaryTokenData: WalletData?
|
||||
get() = primaryWalletStore?.walletsData?.toMutableList()
|
||||
?.apply { remove(primaryWalletData) }
|
||||
?.firstOrNull()
|
||||
|
||||
val shouldShowDetails: Boolean =
|
||||
primaryWallet?.currencyData?.status != BalanceStatus.EmptyCard &&
|
||||
primaryWallet?.currencyData?.status != BalanceStatus.UnknownBlockchain
|
||||
primaryWalletData?.currencyData?.status != BalanceStatus.EmptyCard &&
|
||||
primaryWalletData?.currencyData?.status != BalanceStatus.UnknownBlockchain
|
||||
|
||||
val hasSavedWallets: Boolean
|
||||
get() = userWalletsListManager.hasSavedUserWallets
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.tangem.tap.features.wallet.redux.middlewares
|
||||
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.common.extensions.isZero
|
||||
import com.tangem.tap.common.extensions.stripZeroPlainString
|
||||
import com.tangem.tap.common.extensions.toFiatRateString
|
||||
|
|
@ -19,7 +18,6 @@ import com.tangem.tap.features.wallet.redux.WalletMainButton
|
|||
import com.tangem.tap.features.wallet.redux.WalletStore
|
||||
import com.tangem.tap.features.wallet.ui.BalanceStatus
|
||||
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
|
||||
import com.tangem.tap.features.wallet.ui.TokenData
|
||||
import com.tangem.tap.store
|
||||
import java.math.BigDecimal
|
||||
|
||||
|
|
@ -49,15 +47,6 @@ internal fun WalletStoreModel.mapToReduxModel(): WalletStore {
|
|||
walletsData = walletsData.mapToReduxModels(walletRent, appCurrencySymbol),
|
||||
)
|
||||
.updateTokenModels(blockchainWalletData.status.amount)
|
||||
.setupIfHadCardSingleToken(
|
||||
blockchain = blockchain,
|
||||
walletsDataModel = walletsData,
|
||||
appCurrencySymbol = appCurrencySymbol,
|
||||
blockchainWalletData = blockchainWalletData.mapToReduxModel(
|
||||
walletRent = walletRent,
|
||||
appCurrencySymbol = appCurrencySymbol,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("LongMethod", "ComplexMethod")
|
||||
|
|
@ -123,7 +112,6 @@ private fun WalletDataModel.mapToReduxModel(
|
|||
amountFormatted = amountFormatted,
|
||||
fiatAmount = fiatAmount,
|
||||
fiatAmountFormatted = fiatAmountFormatted,
|
||||
token = null,
|
||||
amountToCreateAccount = (status as? WalletDataModel.NoAccount)
|
||||
?.amountToCreateAccount
|
||||
?.toString(),
|
||||
|
|
@ -147,45 +135,4 @@ private fun WalletStore.updateTokenModels(blockchainAmount: BigDecimal): WalletS
|
|||
)
|
||||
}
|
||||
return updateWallets(updatedTokensWalletData)
|
||||
}
|
||||
|
||||
private fun WalletStore.setupIfHadCardSingleToken(
|
||||
blockchain: Blockchain,
|
||||
walletsDataModel: List<WalletDataModel>,
|
||||
appCurrencySymbol: String,
|
||||
blockchainWalletData: WalletData,
|
||||
): WalletStore {
|
||||
// Card with single token contains only 2 model - blockchain and token
|
||||
if (walletsData.size != 2) return this
|
||||
|
||||
val cardSingleTokenWalletData = walletsDataModel.firstOrNull {
|
||||
it.currency.isToken() && it.currency.blockchain == blockchain && it.isCardSingleToken
|
||||
} ?: return this
|
||||
|
||||
val blockchainWalletDataWithSingleToken = blockchainWalletData.copy(
|
||||
currencyData = blockchainWalletData.currencyData.copy(
|
||||
token = cardSingleTokenWalletData.toTokenData(appCurrencySymbol),
|
||||
),
|
||||
)
|
||||
return updateWallets(listOf(blockchainWalletDataWithSingleToken))
|
||||
}
|
||||
|
||||
private fun WalletDataModel.toTokenData(appCurrencySymbol: String): TokenData {
|
||||
val amount = status.amount
|
||||
val fiatAmount = fiatRate?.let { status.amount.toFiatValue(it) }
|
||||
|
||||
return TokenData(
|
||||
amount = amount,
|
||||
amountFormatted = amount.toFormattedCurrencyString(
|
||||
decimals = currency.decimals,
|
||||
currency = currency.currencySymbol,
|
||||
),
|
||||
fiatAmount = fiatAmount,
|
||||
fiatAmountFormatted = fiatAmount
|
||||
?.takeIf { !status.isErrorStatus }
|
||||
?.toFormattedFiatValue(appCurrencySymbol),
|
||||
tokenSymbol = currency.currencySymbol,
|
||||
fiatRate = fiatRate,
|
||||
fiatRateString = fiatRate?.toFiatRateString(appCurrencySymbol),
|
||||
)
|
||||
}
|
||||
|
|
@ -49,6 +49,7 @@ import com.tangem.tap.features.wallet.redux.WalletAction
|
|||
import com.tangem.tap.features.wallet.redux.WalletData
|
||||
import com.tangem.tap.features.wallet.redux.WalletState
|
||||
import com.tangem.tap.features.wallet.redux.WalletStore
|
||||
import com.tangem.tap.features.wallet.redux.reducers.findSelectedCurrency
|
||||
import com.tangem.tap.network.NetworkConnectivity
|
||||
import com.tangem.tap.network.NetworkStateChanged
|
||||
import com.tangem.tap.preferencesStorage
|
||||
|
|
@ -153,7 +154,7 @@ class WalletMiddleware {
|
|||
if (walletState.isMultiwalletAllowed) {
|
||||
walletState.walletsDataFromStores.map { it.currency }
|
||||
} else {
|
||||
val derivationPath = walletState.primaryWallet?.currency?.derivationPath
|
||||
val derivationPath = walletState.primaryWalletData?.currency?.derivationPath
|
||||
val primaryBlockchain = walletState.primaryBlockchain
|
||||
val primaryToken = walletState.primaryToken
|
||||
listOfNotNull(
|
||||
|
|
@ -310,15 +311,18 @@ class WalletMiddleware {
|
|||
}
|
||||
}
|
||||
|
||||
private fun updateWalletStores(wallStores: List<WalletStoreModel>, state: WalletState) {
|
||||
private fun updateWalletStores(walletsStores: List<WalletStoreModel>, state: WalletState) {
|
||||
scope.launch(Dispatchers.Default) {
|
||||
val reduxWalletStores = walletsStores.mapToReduxModels()
|
||||
if (!state.isMultiwalletAllowed) {
|
||||
wallStores.firstOrNull()?.walletsData?.firstOrNull()?.let {
|
||||
store.dispatchOnMain(WalletAction.MultiWallet.SetSingleWalletCurrency(it.currency))
|
||||
findSelectedCurrency(
|
||||
walletsStores = reduxWalletStores,
|
||||
currentSelectedCurrency = null,
|
||||
isMultiWalletAllowed = false,
|
||||
)?.let {
|
||||
store.dispatchOnMain(WalletAction.MultiWallet.SetSingleWalletCurrency(it))
|
||||
}
|
||||
}
|
||||
|
||||
val reduxWalletStores = wallStores.mapToReduxModels()
|
||||
store.dispatchOnMain(
|
||||
WalletAction.WalletStoresChanged.UpdateWalletStores(
|
||||
reduxWalletStores = reduxWalletStores,
|
||||
|
|
@ -439,11 +443,7 @@ class WalletMiddleware {
|
|||
walletStore: WalletStore?,
|
||||
): PrepareSendScreen {
|
||||
val coinRate = state?.getWalletData(walletStore?.blockchainNetwork)?.fiatRate
|
||||
val tokenRate = if (state?.isMultiwalletAllowed == true) {
|
||||
selectedWalletData?.fiatRate
|
||||
} else {
|
||||
selectedWalletData?.currencyData?.token?.fiatRate
|
||||
}
|
||||
val tokenRate = selectedWalletData?.fiatRate
|
||||
val coinAmount = walletStore?.walletManager?.wallet?.amounts?.get(AmountType.Coin)
|
||||
|
||||
return PrepareSendScreen(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import com.tangem.tap.common.extensions.toFiatString
|
|||
import com.tangem.tap.common.extensions.toFormattedCurrencyString
|
||||
import com.tangem.tap.common.redux.navigation.AppScreen
|
||||
import com.tangem.tap.common.redux.navigation.NavigationAction
|
||||
import com.tangem.tap.domain.getFirstToken
|
||||
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
|
||||
import com.tangem.tap.features.wallet.models.Currency
|
||||
import com.tangem.tap.features.wallet.models.WalletRent
|
||||
|
|
@ -26,7 +25,6 @@ import com.tangem.tap.features.wallet.redux.WalletState.Companion.UNKNOWN_AMOUNT
|
|||
import com.tangem.tap.features.wallet.redux.WalletStore
|
||||
import com.tangem.tap.features.wallet.ui.BalanceStatus
|
||||
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
|
||||
import com.tangem.tap.features.wallet.ui.TokenData
|
||||
import com.tangem.tap.store
|
||||
import com.tangem.tap.userWalletsListManager
|
||||
import com.tangem.wallet.R
|
||||
|
|
@ -43,17 +41,11 @@ class MultiWalletReducer {
|
|||
it.wallet.publicKey.derivationPath?.rawPath == blockchain.derivationPath
|
||||
}
|
||||
val wallet = walletManager?.wallet
|
||||
val cardToken = if (!state.isMultiwalletAllowed) {
|
||||
wallet?.getFirstToken()?.symbol?.let { TokenData("", tokenSymbol = it) }
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val walletData = WalletData(
|
||||
currencyData = BalanceWidgetData(
|
||||
status = BalanceStatus.Loading,
|
||||
currency = blockchain.blockchain.fullName,
|
||||
currencySymbol = blockchain.blockchain.currency,
|
||||
token = cardToken,
|
||||
),
|
||||
walletAddresses = createAddressList(wallet),
|
||||
mainButton = WalletMainButton.SendButton(false),
|
||||
|
|
@ -71,14 +63,13 @@ class MultiWalletReducer {
|
|||
)
|
||||
}
|
||||
|
||||
val selectedCurrency = if (state.isMultiwalletAllowed) {
|
||||
state.selectedCurrency
|
||||
} else {
|
||||
walletStores.firstOrNull()?.walletsData?.firstOrNull()?.currency
|
||||
}
|
||||
state.copy(
|
||||
walletsStores = walletStores,
|
||||
selectedCurrency = selectedCurrency,
|
||||
selectedCurrency = findSelectedCurrency(
|
||||
walletsStores = walletStores,
|
||||
currentSelectedCurrency = state.selectedCurrency,
|
||||
isMultiWalletAllowed = state.isMultiwalletAllowed,
|
||||
),
|
||||
)
|
||||
}
|
||||
is WalletAction.MultiWallet.AddBlockchain -> {
|
||||
|
|
@ -183,8 +174,6 @@ class MultiWalletReducer {
|
|||
action.currencies.forEach { updatedState = updatedState.removeWalletData(state.getWalletData(it)) }
|
||||
updatedState
|
||||
}
|
||||
is WalletAction.MultiWallet.SetPrimaryBlockchain -> state.copy(primaryBlockchain = action.blockchain)
|
||||
is WalletAction.MultiWallet.SetPrimaryToken -> state.copy(primaryToken = action.token)
|
||||
is WalletAction.MultiWallet.SaveCurrencies -> state
|
||||
is WalletAction.MultiWallet.ShowWalletBackupWarning -> state.copy(showBackupWarning = action.show)
|
||||
is WalletAction.MultiWallet.ScheduleCheckForMissingDerivation -> state.copy(
|
||||
|
|
@ -192,7 +181,7 @@ class MultiWalletReducer {
|
|||
)
|
||||
is WalletAction.MultiWallet.AddMissingDerivations -> state.copy(
|
||||
missingDerivations = action.blockchains,
|
||||
derivationsCheckIsScheduled = false
|
||||
derivationsCheckIsScheduled = false,
|
||||
)
|
||||
is WalletAction.MultiWallet.BackupWallet -> state
|
||||
is WalletAction.MultiWallet.ScanToGetDerivations -> state.copy(state = ProgressState.Loading)
|
||||
|
|
@ -214,7 +203,6 @@ class MultiWalletReducer {
|
|||
}
|
||||
|
||||
fun Token.toWallet(state: WalletState, blockchain: BlockchainNetwork): WalletData? {
|
||||
if (!state.isMultiwalletAllowed) return null
|
||||
val currency = Currency.fromBlockchainNetwork(blockchain, this)
|
||||
if (state.currencies.contains(currency)) return null
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,9 @@ package com.tangem.tap.features.wallet.redux.reducers
|
|||
import com.tangem.blockchain.common.AmountType
|
||||
import com.tangem.blockchain.common.Wallet
|
||||
import com.tangem.common.extensions.isZero
|
||||
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.domain.getFirstToken
|
||||
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
|
||||
import com.tangem.tap.features.wallet.models.Currency
|
||||
import com.tangem.tap.features.wallet.models.filterByToken
|
||||
|
|
@ -20,9 +18,7 @@ import com.tangem.tap.features.wallet.redux.WalletState.Companion.UNKNOWN_AMOUNT
|
|||
import com.tangem.tap.features.wallet.redux.replaceSomeWalletsData
|
||||
import com.tangem.tap.features.wallet.ui.BalanceStatus
|
||||
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
|
||||
import com.tangem.tap.features.wallet.ui.TokenData
|
||||
import com.tangem.tap.store
|
||||
import java.math.BigDecimal
|
||||
|
||||
class OnWalletLoadedReducer {
|
||||
|
||||
|
|
@ -116,32 +112,14 @@ class OnWalletLoadedReducer {
|
|||
|
||||
private fun onSingleWalletLoaded(wallet: Wallet, walletState: WalletState): WalletState {
|
||||
if (wallet.blockchain != walletState.primaryBlockchain) return walletState
|
||||
|
||||
val fiatCurrencyName = store.state.globalState.appCurrency.code
|
||||
val token = wallet.getFirstToken()
|
||||
val tokenData = if (token != null) {
|
||||
val tokenAmount = wallet.getTokenAmount(token)
|
||||
if (tokenAmount != null) {
|
||||
val tokenFiatRate = walletState.primaryWallet?.currencyData?.token?.fiatRate
|
||||
val tokenFiatAmount = tokenFiatRate?.let { tokenAmount.value?.toFiatString(it, fiatCurrencyName) }
|
||||
TokenData(
|
||||
amount = tokenAmount.value ?: BigDecimal.ZERO,
|
||||
tokenSymbol = tokenAmount.currencySymbol,
|
||||
fiatAmountFormatted = tokenFiatAmount,
|
||||
fiatAmount = tokenFiatRate?.let { tokenAmount.value?.toFiatValue(tokenFiatRate) },
|
||||
amountFormatted = tokenAmount.value?.toFormattedCurrencyString(token.decimals, token.symbol) ?: "",
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val amount = wallet.amounts[AmountType.Coin]?.value
|
||||
val formattedAmount = amount?.toFormattedCurrencyString(
|
||||
wallet.blockchain.decimals(),
|
||||
wallet.blockchain.currency,
|
||||
)
|
||||
val fiatAmount = walletState.primaryWallet?.fiatRate?.let { amount?.toFiatValue(it) }
|
||||
val fiatAmount = walletState.primaryWalletData?.fiatRate?.let { amount?.toFiatValue(it) }
|
||||
val fiatAmountFormatted = fiatAmount?.toFormattedFiatValue(fiatCurrencyName) ?: UNKNOWN_AMOUNT_SIGN
|
||||
|
||||
val pendingTransactions = wallet.getPendingTransactions()
|
||||
|
|
@ -151,11 +129,10 @@ class OnWalletLoadedReducer {
|
|||
} else {
|
||||
BalanceStatus.VerifiedOnline
|
||||
}
|
||||
val walletData = walletState.primaryWallet?.copy(
|
||||
val walletData = walletState.primaryWalletData?.copy(
|
||||
currencyData = BalanceWidgetData(
|
||||
balanceStatus, wallet.blockchain.fullName,
|
||||
currencySymbol = wallet.blockchain.currency,
|
||||
token = tokenData,
|
||||
blockchainAmount = amount,
|
||||
amount = amount,
|
||||
amountFormatted = formattedAmount,
|
||||
|
|
|
|||
|
|
@ -9,14 +9,12 @@ import com.tangem.domain.common.TapWorkarounds.isTestCard
|
|||
import com.tangem.domain.common.TwinCardNumber
|
||||
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
|
||||
import com.tangem.tap.domain.extensions.getArtworkUrl
|
||||
import com.tangem.tap.domain.getFirstToken
|
||||
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
|
||||
import com.tangem.tap.features.wallet.models.Currency
|
||||
import com.tangem.tap.features.wallet.models.WalletRent
|
||||
|
|
@ -35,7 +33,6 @@ import com.tangem.tap.features.wallet.ui.BalanceStatus
|
|||
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
|
||||
import com.tangem.tap.proxy.AppStateHolder
|
||||
import org.rekotlin.Action
|
||||
import timber.log.Timber
|
||||
import java.math.BigDecimal
|
||||
|
||||
object WalletReducer {
|
||||
|
|
@ -283,8 +280,9 @@ private fun internalReduce(action: Action, state: AppState, appStateHolder: AppS
|
|||
newState = newState.copy(cardImage = cardImage)
|
||||
}
|
||||
|
||||
is WalletAction.LoadFiatRate.Success ->
|
||||
is WalletAction.LoadFiatRate.Success -> {
|
||||
newState = setNewFiatRate(action.fiatRates, state.globalState.appCurrency, newState)
|
||||
}
|
||||
is WalletAction.LoadArtwork -> {
|
||||
val artworkUrl = action.card.getArtworkUrl(action.artworkId)
|
||||
?: when (state.twinCardsState.cardNumber) {
|
||||
|
|
@ -359,18 +357,13 @@ private fun internalReduce(action: Action, state: AppState, appStateHolder: AppS
|
|||
)
|
||||
}
|
||||
is WalletAction.LoadData.Success -> {
|
||||
val selectedCurrency = if (newState.isMultiwalletAllowed) {
|
||||
newState.selectedCurrency
|
||||
} else {
|
||||
newState.walletsStores.firstOrNull()
|
||||
?.walletsData
|
||||
?.firstOrNull()
|
||||
?.currency
|
||||
}
|
||||
|
||||
newState = newState.copy(
|
||||
state = ProgressState.Done,
|
||||
selectedCurrency = selectedCurrency,
|
||||
selectedCurrency = findSelectedCurrency(
|
||||
walletsStores = newState.walletsStores,
|
||||
currentSelectedCurrency = newState.selectedCurrency,
|
||||
isMultiWalletAllowed = newState.isMultiwalletAllowed,
|
||||
),
|
||||
)
|
||||
}
|
||||
else -> Unit
|
||||
|
|
@ -379,6 +372,19 @@ private fun internalReduce(action: Action, state: AppState, appStateHolder: AppS
|
|||
return newState
|
||||
}
|
||||
|
||||
fun findSelectedCurrency(
|
||||
walletsStores: List<WalletStore>,
|
||||
currentSelectedCurrency: Currency?,
|
||||
isMultiWalletAllowed: Boolean,
|
||||
): Currency? = if (isMultiWalletAllowed) {
|
||||
currentSelectedCurrency
|
||||
} else {
|
||||
walletsStores.firstOrNull()
|
||||
?.walletsData
|
||||
?.firstOrNull()
|
||||
?.currency
|
||||
}
|
||||
|
||||
private fun CardDTO.findCardsCount(): Int? {
|
||||
return (this.backupStatus as? CardDTO.BackupStatus.Active)?.cardCount?.inc()
|
||||
}
|
||||
|
|
@ -436,45 +442,18 @@ private fun setNewFiatRate(
|
|||
state: WalletState,
|
||||
): WalletState {
|
||||
val rateFormatter: (BigDecimal) -> String = { rate: BigDecimal ->
|
||||
rate.toFiatRateString(
|
||||
fiatCurrencyName = appCurrency.symbol,
|
||||
)
|
||||
rate.toFiatRateString(fiatCurrencyName = appCurrency.symbol)
|
||||
}
|
||||
|
||||
return if (state.isMultiwalletAllowed) {
|
||||
setMultiWalletFiatRate(
|
||||
fiatRates = fiatRates.mapNotNullValues { it.value },
|
||||
rateFormatter = rateFormatter,
|
||||
appCurrency = appCurrency,
|
||||
state = state,
|
||||
)
|
||||
} else {
|
||||
setSingleWalletFiatRates(
|
||||
fiatRates = fiatRates.mapNotNullValues { it.value },
|
||||
rateFormatter = rateFormatter,
|
||||
appCurrency = appCurrency,
|
||||
state = state,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setMultiWalletFiatRate(
|
||||
fiatRates: Map<Currency, BigDecimal>,
|
||||
rateFormatter: (BigDecimal) -> String,
|
||||
appCurrency: FiatCurrency,
|
||||
state: WalletState,
|
||||
): WalletState {
|
||||
val newWalletsData = fiatRates.mapNotNull { (currency, rate) ->
|
||||
val newWalletsData = fiatRates.mapNotNullValues { it.value }.mapNotNull { (currency, rate) ->
|
||||
val walletStore = state.getWalletStore(currency) ?: return@mapNotNull null
|
||||
val wallet = walletStore.walletManager?.wallet
|
||||
val walletData = state.getWalletData(currency) ?: return@mapNotNull null
|
||||
val currencyData = walletData.currencyData
|
||||
|
||||
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)
|
||||
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.setScale(2)
|
||||
|
|
@ -491,96 +470,5 @@ private fun setMultiWalletFiatRate(
|
|||
)
|
||||
}
|
||||
|
||||
return state
|
||||
.updateWalletsData(newWalletsData)
|
||||
}
|
||||
|
||||
private fun setSingleWalletFiatRates(
|
||||
fiatRates: Map<Currency, BigDecimal>,
|
||||
appCurrency: FiatCurrency,
|
||||
rateFormatter: (BigDecimal) -> String,
|
||||
state: WalletState,
|
||||
): WalletState {
|
||||
val blockchainFiatRate = fiatRates.entries.firstOrNull { it.key.isBlockchain() }
|
||||
val tokenFiatRate = fiatRates.entries.firstOrNull { it.key.isToken() }
|
||||
Timber.e("Token Fiat Rate is ${tokenFiatRate ?: "NULL"}")
|
||||
val updatedState = updateStateWithFiatRate(blockchainFiatRate?.toPair(), appCurrency, rateFormatter, state)
|
||||
return updateStateWithFiatRate(tokenFiatRate?.toPair(), appCurrency, rateFormatter, updatedState)
|
||||
}
|
||||
|
||||
private fun updateStateWithFiatRate(
|
||||
fiatRate: Pair<Currency, BigDecimal>?,
|
||||
appCurrency: FiatCurrency,
|
||||
rateFormatter: (BigDecimal) -> String,
|
||||
state: WalletState,
|
||||
): WalletState {
|
||||
return if (fiatRate != null) {
|
||||
val currency = fiatRate.first
|
||||
val rate = fiatRate.second
|
||||
|
||||
setSingleWalletFiatRate(
|
||||
rate = rate,
|
||||
rateFormatted = rateFormatter(rate),
|
||||
currency = currency,
|
||||
appCurrency = appCurrency,
|
||||
state = state,
|
||||
)
|
||||
} else {
|
||||
state
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
Timber.e("Working with currency: ${currency.currencyName}")
|
||||
|
||||
if (currency == state.primaryWallet?.currency) {
|
||||
val fiatAmount = wallet.amounts[AmountType.Coin]?.value
|
||||
?.toFiatString(rate, appCurrency.code)
|
||||
val walletData = state.primaryWallet.copy(
|
||||
currencyData = state.primaryWallet.currencyData.copy(fiatAmountFormatted = fiatAmount),
|
||||
fiatRate = rate,
|
||||
fiatRateString = rateFormatted,
|
||||
)
|
||||
return state.updateWalletData(walletData)
|
||||
} else if (currency is Currency.Token && currency.token == token) {
|
||||
Timber.e("Working with token fiat rate")
|
||||
|
||||
val tokenFiatAmount = wallet.getTokenAmount(token)
|
||||
?.value
|
||||
val tokenAmountFormatted = tokenFiatAmount?.toFiatString(rate, appCurrency.code)
|
||||
|
||||
val tokenData = state.primaryWallet?.currencyData?.token?.copy(
|
||||
fiatAmountFormatted = tokenAmountFormatted,
|
||||
fiatAmount = tokenFiatAmount,
|
||||
fiatRate = rate,
|
||||
fiatRateString = rateFormatted,
|
||||
)
|
||||
// ?: TokenData(
|
||||
// fiatAmountFormatted = tokenAmountFormatted,
|
||||
// fiatAmount = tokenFiatAmount,
|
||||
// fiatRate = rate,
|
||||
// fiatRateString = rateFormatted,
|
||||
// amount = "",
|
||||
// tokenSymbol = currency.currencySymbol
|
||||
// )
|
||||
|
||||
Timber.e("Token Data is ${tokenData ?: "NULL"}")
|
||||
|
||||
val walletData = state.primaryWallet?.copy(
|
||||
currencyData = state.primaryWallet.currencyData.copy(
|
||||
token = tokenData,
|
||||
),
|
||||
)
|
||||
Timber.e("Wallet Data is ${walletData ?: "NULL"}")
|
||||
return state.updateWalletData(walletData)
|
||||
}
|
||||
return state
|
||||
return state.updateWalletsData(newWalletsData)
|
||||
}
|
||||
|
|
@ -24,30 +24,20 @@ data class BalanceWidgetData(
|
|||
val status: BalanceStatus? = null,
|
||||
val currency: String? = null,
|
||||
val currencySymbol: String? = null,
|
||||
val blockchainAmount: BigDecimal? = BigDecimal.ZERO,
|
||||
val amount: BigDecimal? = null,
|
||||
val amountFormatted: String? = null,
|
||||
val fiatAmount: BigDecimal? = null,
|
||||
val fiatAmountFormatted: String? = null,
|
||||
val token: TokenData? = null,
|
||||
val blockchainAmount: BigDecimal? = BigDecimal.ZERO,
|
||||
val amountToCreateAccount: String? = null,
|
||||
val errorMessage: String? = null,
|
||||
)
|
||||
|
||||
data class TokenData(
|
||||
val amountFormatted: String?,
|
||||
val amount: BigDecimal? = null,
|
||||
val tokenSymbol: String,
|
||||
val fiatAmountFormatted: String? = null,
|
||||
val fiatAmount: BigDecimal? = null,
|
||||
val fiatRateString: String? = null,
|
||||
val fiatRate: BigDecimal? = null,
|
||||
)
|
||||
|
||||
class BalanceWidget(
|
||||
private val binding: CardBalanceBinding,
|
||||
private val fragment: WalletFragment,
|
||||
private val data: BalanceWidgetData,
|
||||
private val token: BalanceWidgetData?,
|
||||
private val isTwinCard: Boolean,
|
||||
) {
|
||||
|
||||
|
|
@ -66,7 +56,7 @@ class BalanceWidget(
|
|||
|
||||
showStatus(R.id.tv_status_loading)
|
||||
|
||||
if (data.token != null) {
|
||||
if (token != null) {
|
||||
showBalanceWithToken(data, false)
|
||||
} else {
|
||||
showBalanceWithoutToken(data, false)
|
||||
|
|
@ -85,7 +75,7 @@ class BalanceWidget(
|
|||
showStatus(statusView)
|
||||
tvStatusErrorMessage.hide()
|
||||
|
||||
if (data.token != null) {
|
||||
if (token != null) {
|
||||
showBalanceWithToken(data, true)
|
||||
} else {
|
||||
showBalanceWithoutToken(data, true)
|
||||
|
|
@ -97,7 +87,7 @@ class BalanceWidget(
|
|||
tvFiatAmount.hide()
|
||||
groupBaseCurrency.hide()
|
||||
|
||||
val currency = if (data.token != null) data.token.tokenSymbol else data.currency
|
||||
val currency = if (token != null) token.currencySymbol else data.currency
|
||||
tvCurrency.text = currency
|
||||
tvAmount.text = ""
|
||||
|
||||
|
|
@ -152,13 +142,13 @@ class BalanceWidget(
|
|||
|
||||
private fun showBalanceWithToken(data: BalanceWidgetData, showAmount: Boolean) = with(binding.lBalance) {
|
||||
groupBaseCurrency.show()
|
||||
tvCurrency.text = data.token?.tokenSymbol
|
||||
tvCurrency.text = token?.currencySymbol
|
||||
tvBaseCurrency.text = data.currency
|
||||
tvAmount.text = if (showAmount) data.token?.amountFormatted else ""
|
||||
tvAmount.text = if (showAmount) token?.amountFormatted else ""
|
||||
tvBaseAmount.text = if (showAmount) data.amountFormatted else ""
|
||||
if (showAmount) {
|
||||
tvFiatAmount.show()
|
||||
tvFiatAmount.text = data.token?.fiatAmountFormatted
|
||||
tvFiatAmount.text = token?.fiatAmountFormatted
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ import com.tangem.tap.features.wallet.redux.WalletAction
|
|||
import com.tangem.tap.features.wallet.redux.WalletState
|
||||
import com.tangem.tap.features.wallet.ui.adapters.WarningMessagesAdapter
|
||||
import com.tangem.tap.features.wallet.ui.wallet.MultiWalletView
|
||||
import com.tangem.tap.features.wallet.ui.wallet.SaltPaySingleWalletView
|
||||
import com.tangem.tap.features.wallet.ui.wallet.SaltPayWalletView
|
||||
import com.tangem.tap.features.wallet.ui.wallet.SingleWalletView
|
||||
import com.tangem.tap.features.wallet.ui.wallet.WalletView
|
||||
import com.tangem.tap.store
|
||||
|
|
@ -158,11 +158,11 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber<Walle
|
|||
val isSaltPay = store.state.globalState.scanResponse?.card?.isSaltPay == true
|
||||
|
||||
when {
|
||||
isSaltPay && walletView !is SaltPaySingleWalletView -> {
|
||||
walletView = SaltPaySingleWalletView()
|
||||
isSaltPay && walletView !is SaltPayWalletView -> {
|
||||
walletView = SaltPayWalletView()
|
||||
walletView.changeWalletView(this, binding)
|
||||
}
|
||||
state.isMultiwalletAllowed && state.primaryWallet?.currencyData?.status != BalanceStatus.EmptyCard &&
|
||||
state.isMultiwalletAllowed && state.primaryWalletData?.currencyData?.status != BalanceStatus.EmptyCard &&
|
||||
walletView !is MultiWalletView -> {
|
||||
walletView = MultiWalletView()
|
||||
walletView.changeWalletView(this, binding)
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ class MultiWalletView : WalletView() {
|
|||
|
||||
private fun showMultiWalletView(binding: FragmentWalletBinding) = with(binding) {
|
||||
watcher.clear()
|
||||
lSaltPayWallet.root.hide()
|
||||
tvTwinCardNumber.hide()
|
||||
rvPendingTransaction.hide()
|
||||
lCardBalance.root.hide()
|
||||
|
|
@ -220,7 +221,7 @@ class MultiWalletView : WalletView() {
|
|||
binding: FragmentWalletBinding,
|
||||
fragment: WalletFragment,
|
||||
) {
|
||||
when (state.primaryWallet?.currencyData?.status) {
|
||||
when (state.primaryWalletData?.currencyData?.status) {
|
||||
BalanceStatus.EmptyCard -> {
|
||||
showErrorState(
|
||||
binding,
|
||||
|
|
|
|||
|
|
@ -1,63 +0,0 @@
|
|||
package com.tangem.tap.features.wallet.ui.wallet
|
||||
|
||||
import com.tangem.domain.common.extensions.debounce
|
||||
import com.tangem.tap.common.entities.FiatCurrency
|
||||
import com.tangem.tap.common.extensions.animateVisibility
|
||||
import com.tangem.tap.common.extensions.formatAmountAsSpannedString
|
||||
import com.tangem.tap.features.wallet.redux.ProgressState
|
||||
import com.tangem.tap.features.wallet.redux.WalletAction
|
||||
import com.tangem.tap.mainScope
|
||||
import com.tangem.tap.store
|
||||
import com.tangem.wallet.databinding.LayoutSingleWalletBalanceBinding
|
||||
import org.rekotlin.Action
|
||||
import java.math.BigDecimal
|
||||
|
||||
data class SaltPayBalanceWidgetData(
|
||||
val state: ProgressState? = null,
|
||||
val currencySymbol: String? = null,
|
||||
val currency: String? = null,
|
||||
val fiatAmount: BigDecimal? = null,
|
||||
val fiatCurrency: FiatCurrency? = null,
|
||||
)
|
||||
|
||||
class SaltPayBalanceWidget(
|
||||
private val binding: LayoutSingleWalletBalanceBinding,
|
||||
private val data: SaltPayBalanceWidgetData,
|
||||
) {
|
||||
fun setup() = with(binding) {
|
||||
if (data.state == ProgressState.Loading) {
|
||||
veilBalance.veil()
|
||||
veilBalanceCrypto.veil()
|
||||
} else {
|
||||
// veilBalance.unVeil()
|
||||
veilBalanceCrypto.unVeil()
|
||||
}
|
||||
tvProcessing.animateVisibility(
|
||||
show = data.state == ProgressState.Error,
|
||||
)
|
||||
veilBalanceCrypto.animateVisibility(
|
||||
show = data.state != ProgressState.Error,
|
||||
)
|
||||
if (data.fiatAmount == null) {
|
||||
// TODO: SaltPay: A tricky solution to the problem with displaying rates
|
||||
// If the rates are loaded after the walletManager.update() is completely updated,
|
||||
// then this problem can be avoided
|
||||
actionDebouncer(WalletAction.LoadFiatRate())
|
||||
} else {
|
||||
veilBalance.unVeil()
|
||||
tvBalance.text = data.fiatAmount.formatAmountAsSpannedString(
|
||||
currencySymbol = data.fiatCurrency?.symbol ?: "",
|
||||
)
|
||||
}
|
||||
|
||||
tvBalanceCrypto.text = data.currency
|
||||
|
||||
tvCurrencyName.text = data.fiatCurrency?.code
|
||||
|
||||
tvCurrencyName.setOnClickListener {
|
||||
store.dispatch(WalletAction.AppCurrencyAction.ChooseAppCurrency)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val actionDebouncer = debounce<Action>(500, mainScope) { store.dispatch(it) }
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
package com.tangem.tap.features.wallet.ui.wallet
|
||||
|
||||
import com.tangem.tap.common.extensions.hide
|
||||
import com.tangem.tap.common.extensions.show
|
||||
import com.tangem.tap.features.wallet.redux.WalletState
|
||||
import com.tangem.tap.features.wallet.ui.TokenData
|
||||
import com.tangem.tap.features.wallet.ui.WalletFragment
|
||||
import com.tangem.tap.store
|
||||
import com.tangem.wallet.databinding.FragmentWalletBinding
|
||||
import timber.log.Timber
|
||||
|
||||
class SaltPaySingleWalletView : WalletView() {
|
||||
override fun changeWalletView(fragment: WalletFragment, binding: FragmentWalletBinding) {
|
||||
setFragment(fragment, binding)
|
||||
onViewCreated()
|
||||
showSingleWalletView(binding)
|
||||
}
|
||||
|
||||
private fun showSingleWalletView(binding: FragmentWalletBinding) = with(binding) {
|
||||
rvMultiwallet.hide()
|
||||
btnAddToken.hide()
|
||||
rowButtons.hide()
|
||||
rvPendingTransaction.hide()
|
||||
tvTwinCardNumber.hide()
|
||||
pbLoadingUserTokens.hide()
|
||||
lCardBalance.root.hide()
|
||||
lAddress.root.hide()
|
||||
lSingleWalletBalance.root.show()
|
||||
}
|
||||
|
||||
override fun onViewCreated() {
|
||||
}
|
||||
|
||||
override fun onNewState(state: WalletState) {
|
||||
val binding = binding ?: return
|
||||
val tokenData = state.primaryWallet?.currencyData?.token ?: return
|
||||
|
||||
setupBalance(state, tokenData, binding)
|
||||
}
|
||||
|
||||
private fun setupBalance(state: WalletState, tokenData: TokenData, binding: FragmentWalletBinding) {
|
||||
binding.lSingleWalletBalance.root.show()
|
||||
Timber.e("Current address is ${state.primaryWalletManager?.wallet?.address}")
|
||||
SaltPayBalanceWidget(
|
||||
binding = binding.lSingleWalletBalance,
|
||||
data = SaltPayBalanceWidgetData(
|
||||
state = state.state,
|
||||
currencySymbol = tokenData.tokenSymbol,
|
||||
currency = tokenData.amountFormatted,
|
||||
fiatAmount = tokenData.fiatAmount, // TODO: show fiatAmount
|
||||
fiatCurrency = store.state.globalState.appCurrency,
|
||||
),
|
||||
).setup()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
package com.tangem.tap.features.wallet.ui.wallet
|
||||
|
||||
import com.tangem.domain.common.extensions.debounce
|
||||
import com.tangem.tap.common.extensions.animateVisibility
|
||||
import com.tangem.tap.common.extensions.formatAmountAsSpannedString
|
||||
import com.tangem.tap.common.extensions.hide
|
||||
import com.tangem.tap.common.extensions.show
|
||||
import com.tangem.tap.features.wallet.redux.ProgressState
|
||||
import com.tangem.tap.features.wallet.redux.WalletAction
|
||||
import com.tangem.tap.features.wallet.redux.WalletState
|
||||
import com.tangem.tap.features.wallet.ui.WalletFragment
|
||||
import com.tangem.tap.mainScope
|
||||
import com.tangem.tap.store
|
||||
import com.tangem.wallet.databinding.FragmentWalletBinding
|
||||
import com.tangem.wallet.databinding.LayoutSaltPayWalletBinding
|
||||
import org.rekotlin.Action
|
||||
|
||||
class SaltPayWalletView : WalletView() {
|
||||
|
||||
private lateinit var saltPayBinding: LayoutSaltPayWalletBinding
|
||||
private val actionDebouncer = debounce<Action>(500, mainScope) { store.dispatch(it) }
|
||||
|
||||
override fun changeWalletView(fragment: WalletFragment, binding: FragmentWalletBinding) {
|
||||
saltPayBinding = binding.lSaltPayWallet
|
||||
setFragment(fragment, binding)
|
||||
onViewCreated()
|
||||
showSaltPayView(binding)
|
||||
}
|
||||
|
||||
private fun showSaltPayView(binding: FragmentWalletBinding) = with(binding) {
|
||||
rvWarningMessages.hide()
|
||||
rvPendingTransaction.hide()
|
||||
rvMultiwallet.hide()
|
||||
tvTwinCardNumber.hide()
|
||||
lCardBalance.root.hide()
|
||||
lSingleWalletBalance.root.hide()
|
||||
lAddress.root.hide()
|
||||
rowButtons.hide()
|
||||
btnAddToken.hide()
|
||||
pbLoadingUserTokens.hide()
|
||||
lSaltPayWallet.root.show()
|
||||
}
|
||||
|
||||
override fun onViewCreated() {
|
||||
}
|
||||
|
||||
override fun onNewState(state: WalletState) {
|
||||
setupBalanceWidget(state)
|
||||
}
|
||||
|
||||
private fun setupBalanceWidget(state: WalletState) = with(saltPayBinding.lSaltPayBalance) {
|
||||
val tokenData = state.primaryTokenData ?: return@with
|
||||
|
||||
val appCurrency = store.state.globalState.appCurrency
|
||||
val mainProgressState = state.state
|
||||
|
||||
if (mainProgressState == ProgressState.Loading) {
|
||||
veilBalance.veil()
|
||||
veilBalanceCrypto.veil()
|
||||
} else {
|
||||
veilBalanceCrypto.unVeil()
|
||||
}
|
||||
|
||||
tvProcessing.animateVisibility(show = mainProgressState == ProgressState.Error)
|
||||
veilBalanceCrypto.animateVisibility(show = mainProgressState != ProgressState.Error)
|
||||
|
||||
if (tokenData.currencyData.fiatAmount == null) {
|
||||
actionDebouncer(WalletAction.LoadFiatRate())
|
||||
} else {
|
||||
veilBalance.unVeil()
|
||||
tvBalance.text = tokenData.currencyData.fiatAmount.formatAmountAsSpannedString(
|
||||
currencySymbol = appCurrency.symbol,
|
||||
)
|
||||
}
|
||||
|
||||
tvBalanceCrypto.text = tokenData.currencyData.amountFormatted
|
||||
|
||||
tvCurrencyName.text = appCurrency.code
|
||||
tvCurrencyName.setOnClickListener {
|
||||
store.dispatch(WalletAction.AppCurrencyAction.ChooseAppCurrency)
|
||||
}
|
||||
|
||||
btnBuy.show(tokenData.isAvailableToBuy(store.state.globalState.exchangeManager))
|
||||
btnBuy.setOnClickListener {
|
||||
store.dispatch(WalletAction.TradeCryptoAction.Buy(false))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -35,6 +35,7 @@ class SingleWalletView : WalletView() {
|
|||
}
|
||||
|
||||
private fun showSingleWalletView(binding: FragmentWalletBinding) = with(binding) {
|
||||
lSaltPayWallet.root.hide()
|
||||
tvTwinCardNumber.hide()
|
||||
rvMultiwallet.hide()
|
||||
btnAddToken.hide()
|
||||
|
|
@ -63,13 +64,13 @@ class SingleWalletView : WalletView() {
|
|||
|
||||
override fun onNewState(state: WalletState) {
|
||||
val binding = binding ?: return
|
||||
state.primaryWallet ?: return
|
||||
val primaryWalletData = state.primaryWalletData ?: return
|
||||
|
||||
setupTwinCards(state.twinCardsState, binding)
|
||||
setupButtons(state.primaryWallet, binding, state.isExchangeServiceFeatureOn)
|
||||
setupButtons(primaryWalletData, binding, state.isExchangeServiceFeatureOn)
|
||||
setupAddressCard(state, binding)
|
||||
showPendingTransactionsIfPresent(state.primaryWallet.pendingTransactions)
|
||||
setupBalance(state, state.primaryWallet)
|
||||
showPendingTransactionsIfPresent(primaryWalletData.pendingTransactions)
|
||||
setupBalance(state, primaryWalletData)
|
||||
}
|
||||
|
||||
private fun showPendingTransactionsIfPresent(pendingTransactions: List<PendingTransaction>) {
|
||||
|
|
@ -88,6 +89,7 @@ class SingleWalletView : WalletView() {
|
|||
binding = this.lCardBalance,
|
||||
fragment = fragment,
|
||||
data = primaryWallet.currencyData,
|
||||
token = state.primaryTokenData?.currencyData,
|
||||
isTwinCard = state.isTangemTwins,
|
||||
).setup()
|
||||
}
|
||||
|
|
@ -169,7 +171,7 @@ class SingleWalletView : WalletView() {
|
|||
}
|
||||
|
||||
private fun setupAddressCard(state: WalletState, binding: FragmentWalletBinding) = with(binding.lAddress) {
|
||||
val primaryWallet = state.primaryWallet
|
||||
val primaryWallet = state.primaryWalletData
|
||||
if (primaryWallet?.walletAddresses != null && primaryWallet.currency is Currency.Blockchain) {
|
||||
binding.lAddress.root.show()
|
||||
if (primaryWallet.shouldShowMultipleAddress()) {
|
||||
|
|
@ -204,7 +206,7 @@ class SingleWalletView : WalletView() {
|
|||
|
||||
private fun setupCardInfo(state: WalletState) {
|
||||
val textView = binding?.lAddress?.tvInfo
|
||||
val blockchain = state.primaryWallet?.currency?.blockchain
|
||||
val blockchain = state.primaryWalletData?.currency?.blockchain
|
||||
if (textView != null && blockchain != null) {
|
||||
textView.text = textView.getString(
|
||||
id = R.string.address_qr_code_message_format,
|
||||
|
|
|
|||
5
app/src/main/res/color/selector_saltpay_btn.xml
Normal file
5
app/src/main/res/color/selector_saltpay_btn.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/button_disabled" android:state_enabled="false" />
|
||||
<item android:color="@color/button_secondary" />
|
||||
</selector>
|
||||
5
app/src/main/res/color/selector_saltpay_btn_text.xml
Normal file
5
app/src/main/res/color/selector_saltpay_btn_text.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="#66FFFFFF" android:state_enabled="false" />
|
||||
<item android:color="@color/text_primary_1" />
|
||||
</selector>
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="92dp"
|
||||
android:text="@string/onboarding_supplement_button_kyc_waiting"
|
||||
android:text="@string/chat_button_title"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/btn_container"
|
||||
app:layout_constraintStart_toStartOf="@id/btn_container" />
|
||||
|
|
|
|||
|
|
@ -177,6 +177,15 @@
|
|||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" />
|
||||
|
||||
<include
|
||||
android:id="@+id/l_salt_pay_wallet"
|
||||
layout="@layout/layout_salt_pay_wallet"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" />
|
||||
|
||||
<include
|
||||
android:id="@+id/l_address"
|
||||
layout="@layout/layout_address"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/btn_container"
|
||||
app:layout_constraintStart_toStartOf="@id/btn_container"
|
||||
tools:text="@string/onboarding_supplement_button_kyc_waiting" />
|
||||
tools:text="@string/chat_button_title" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/btn_container"
|
||||
|
|
|
|||
138
app/src/main/res/layout/layout_salt_pay_balance.xml
Normal file
138
app/src/main/res/layout/layout_salt_pay_balance.xml
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/card_balance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="12dp">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:animateLayoutChanges="true"
|
||||
android:clipToPadding="false"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingBottom="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:text="@string/onboarding_balance_title"
|
||||
android:textColor="@color/text_tertiary"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintEnd_toStartOf="@id/tv_currency_name"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.skydoves.androidveil.VeilLayout
|
||||
android:id="@+id/veil_balance"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_processing"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_title"
|
||||
app:veilLayout_baseColor="@color/lightGray0"
|
||||
app:veilLayout_highlightColor="@color/lightGray1"
|
||||
app:veilLayout_layout="@layout/card_total_balance_shimmer"
|
||||
app:veilLayout_radius="4dp"
|
||||
app:veilLayout_shimmerEnable="true"
|
||||
app:veilLayout_veiled="true"
|
||||
tools:veilLayout_veiled="false"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_balance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:minWidth="152dp"
|
||||
android:textColor="@color/text_primary_1"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="22 325.40 $" />
|
||||
|
||||
</com.skydoves.androidveil.VeilLayout>
|
||||
|
||||
<com.skydoves.androidveil.VeilLayout
|
||||
android:id="@+id/veil_balance_crypto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="18dp"
|
||||
android:layout_marginTop="4dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/veil_balance"
|
||||
app:veilLayout_baseColor="@color/lightGray0"
|
||||
app:veilLayout_highlightColor="@color/lightGray1"
|
||||
app:veilLayout_layout="@layout/card_total_balance_shimmer"
|
||||
app:veilLayout_radius="4dp"
|
||||
app:veilLayout_shimmerEnable="true"
|
||||
app:veilLayout_veiled="true"
|
||||
tools:veilLayout_veiled="false"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_balance_crypto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="2dp"
|
||||
android:maxLines="1"
|
||||
android:minWidth="152dp"
|
||||
android:textColor="@color/text_tertiary"
|
||||
android:textSize="12sp"
|
||||
tools:text="5.13123123123 ETH"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</com.skydoves.androidveil.VeilLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_processing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="@string/wallet_balance_blockchain_unreachable"
|
||||
android:textColor="@color/warning"
|
||||
android:textSize="12sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/veil_balance" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn_buy"
|
||||
style="@style/BaseSaltPayButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:text="@string/wallet_button_buy"
|
||||
android:visibility="gone"
|
||||
app:icon="@drawable/ic_add"
|
||||
app:iconGravity="textStart"
|
||||
app:iconTint="@color/selector_saltpay_btn_text"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/veil_balance_crypto"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_currency_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:textColor="@color/text_tertiary"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold"
|
||||
app:drawableEndCompat="@drawable/ic_arrow_angle_down"
|
||||
app:drawableTint="@color/text_tertiary"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="USD" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
22
app/src/main/res/layout/layout_salt_pay_wallet.xml
Normal file
22
app/src/main/res/layout/layout_salt_pay_wallet.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/cl_salt_pay_wallet_info"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="6dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingBottom="16dp">
|
||||
|
||||
<include
|
||||
android:id="@+id/l_salt_pay_balance"
|
||||
layout="@layout/layout_salt_pay_balance"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -3,6 +3,6 @@
|
|||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu_item_chat_support"
|
||||
android:title="@string/onboarding_chat_button_title"
|
||||
android:title="@string/chat_button_title"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
||||
|
|
@ -111,6 +111,19 @@
|
|||
<item name="android:lineSpacingExtra">4sp</item>
|
||||
</style>
|
||||
|
||||
<style name="BaseSaltPayButton">
|
||||
<item name="android:minHeight">40dp</item>
|
||||
<item name="android:insetTop">0dp</item>
|
||||
<item name="android:insetBottom">0dp</item>
|
||||
<item name="android:elevation">0dp</item>
|
||||
<item name="android:textColor">@color/selector_saltpay_btn_text</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:letterSpacing">0</item>
|
||||
<item name="android:backgroundTint">@color/selector_saltpay_btn</item>
|
||||
<item name="cornerRadius">@dimen/btn_corner_radius_medium</item>
|
||||
<item name="android:stateListAnimator">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="heading">
|
||||
<item name="android:textSize">24sp</item>
|
||||
<item name="android:textColor">#060606</item>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">Keep the wallet in the app</string>
|
||||
<string name="app_settings_saved_wallet_footer">Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card.</string>
|
||||
<string name="app_settings_title">App Settings</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">Please scan the card</string>
|
||||
<string name="biometric_lockout_warning_description">Please try again in 30 seconds or scan the card</string>
|
||||
<string name="biometric_lockout_warning_title">Too many attempts</string>
|
||||
<string name="card_settings_action_sheet_reset">Reset</string>
|
||||
<string name="card_settings_action_sheet_title">Are you sure you want to do this?</string>
|
||||
<string name="card_settings_change_access_code">Change Access Code</string>
|
||||
<string name="card_settings_change_access_code_footer">Access code will be changed on this card only</string>
|
||||
<string name="card_settings_reset_card_to_factory">Reset to Factory Settings</string>
|
||||
<string name="card_settings_security_mode">Security Mode</string>
|
||||
<string name="card_settings_title">Card Settings</string>
|
||||
<string name="chat_bot_name">Tangem Bot</string>
|
||||
<string name="chat_button_title">Support</string>
|
||||
<string name="common_accept">Akzeptieren</string>
|
||||
<string name="common_add">Add</string>
|
||||
<string name="common_attention">Attention</string>
|
||||
|
|
@ -134,13 +140,13 @@
|
|||
<string name="main_scan_card_warning_view_subtitle">To access all the networks you need to scan the card</string>
|
||||
<string name="main_scan_card_warning_view_title">Scan your card</string>
|
||||
<string name="main_tokens">Tokens</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets.</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Protect</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set an individual access code on each card later.</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set up an individual access code on each card later</string>
|
||||
<string name="onboarding_access_code_feature_2_title">Personalize</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place.</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place</string>
|
||||
<string name="onboarding_access_code_feature_3_title">Restore</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code.</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code</string>
|
||||
<string name="onboarding_access_code_intro_title">Create Access Code</string>
|
||||
<string name="onboarding_access_code_repeat_code_title">Re-enter your Access Code</string>
|
||||
<string name="onboarding_access_code_too_short">Access code must be at least 4 characters long</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">Scan primary card</string>
|
||||
<string name="onboarding_button_skip_backup">Skip for later</string>
|
||||
<string name="onboarding_button_what_does_it_mean">How does it work?</string>
|
||||
<string name="onboarding_chat_button_title">Support</string>
|
||||
<string name="onboarding_create_wallet_body">Let\'s generate all the keys on your card and create a secure wallet</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">Create wallet</string>
|
||||
<string name="onboarding_create_wallet_header">Create a wallet</string>
|
||||
|
|
@ -178,7 +183,7 @@
|
|||
<string name="onboarding_navbar_register_wallet">Connect</string>
|
||||
<string name="onboarding_navbar_title_creating_backup">Creating a backup</string>
|
||||
<string name="onboarding_saltpay_button_backup_origin">Tap the SaltPay card</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add the Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_one_backup_card">Finalize the backup process by creating an access code</string>
|
||||
<string name="onboarding_saltpay_title_backup_card">Tap the Tangem card</string>
|
||||
<string name="onboarding_saltpay_title_no_backup_card">No backup card</string>
|
||||
|
|
@ -191,7 +196,7 @@
|
|||
<string name="onboarding_subtitle_kyc_waiting">Please wait until the verification is completed. You\'ll be notified via email. Usually it takes up to 1 hour. You can close the app and come back later.</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">To start the backup process add up to two backup cards.</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">You can add one more card or finalize the backup process</string>
|
||||
<string name="onboarding_subtitle_pin">Set PIN code for your SaltPay card</string>
|
||||
<string name="onboarding_subtitle_pin">Set up a 4-digit code.\nIt will be used for payments.</string>
|
||||
<string name="onboarding_subtitle_register_wallet">Connect your card to the decentralized payment system</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">Prepare the backup card with number %s</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">Prepare the primary card</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">Congratulations! Your first payment crypto card has been activated!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Your wallet card is configured and ready for use.</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">Max number of cards added. Finalize the backup process.</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">Chat with support</string>
|
||||
<string name="onboarding_title">Activating card</string>
|
||||
<string name="onboarding_title_backup_card_format">Backup card #%d</string>
|
||||
<string name="onboarding_title_claim">Claim %s</string>
|
||||
|
|
@ -219,7 +223,7 @@
|
|||
<string name="onboarding_top_up_button_show_wallet_address">Show the wallet\'s address</string>
|
||||
<string name="onboarding_top_up_header">Top up your wallet</string>
|
||||
<string name="onboarding_twin_exit_warning">The twinning process is partly complete. You can\'t exit it now.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over</string>
|
||||
<string name="onboarding_wallet_info_subtitle_first">You can backup your keys up to two other blank Tangem Wallet cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_fourth">Access code can be restored with one of backup cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_second">All the backup cards can be used as full-functional with the identical keys.</string>
|
||||
|
|
@ -360,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">The %1$s token is the main currency on the %2$s network and cannot be hidden as long as you have other tokens on this network in the list.</string>
|
||||
<string name="token_details_unable_hide_alert_title">Unable to hide %s</string>
|
||||
<string name="token_item_no_rate">No rate</string>
|
||||
<string name="transaction_history_empty_transactions">You don\'t have any transactions yet</string>
|
||||
<string name="transaction_history_error_failed_to_load">Failed to load transactions</string>
|
||||
<string name="transaction_history_title">Transactions</string>
|
||||
<string name="transaction_history_tx_in_progress">In progress...</string>
|
||||
<string name="twin_error_same_card">You\'ve scanned the same card. To create a twin wallet you need to scan the card with number %d</string>
|
||||
<string name="twins_onboarding_description_format">This one that you are holding in your hands and the other one with number %s.\n\nBoth cards can be used to extract funds from this wallet.</string>
|
||||
<string name="twins_onboarding_subtitle">One wallet. Two cards.</string>
|
||||
|
|
@ -402,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">Request to create transaction for %1$s\n%2$s\n\nAmount: %3$s\nFee: %4$s\nTotal: %5$s\nBalance: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">Can\'t send transaction. Not enough funds.</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">Failed to establish WalletConnect session. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">Not all tokens were added to your list. Please add them first and try again. Missing tokens:\n</string>
|
||||
<string name="wallet_connect_error_timeout">Failed to establish WalletConnect session: timeout error. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">Session request contains unsupported blockchains for WalletConnect connection. Unsupported blockchains:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">Connection with this Dapp cannot be established due to its technical implementation.</string>
|
||||
<string name="wallet_connect_generic_error_with_code">We\'ve encountered unknown error. Error code: %d. If the problem persists — feel free to contact our support</string>
|
||||
<string name="wallet_connect_network_not_found_format">%s network not found. Please, add it first and try again.</string>
|
||||
<string name="wallet_connect_no_sessions_message">No opened WalletConnect sessions</string>
|
||||
<string name="wallet_connect_no_sessions_title">Ooops. No Sessions.</string>
|
||||
|
|
@ -464,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">Scan card</string>
|
||||
<string name="welcome_unlock_description">Use %s or scan a card to access the app</string>
|
||||
<string name="welcome_unlock_title">Welcome back!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">Keep the wallet in the app</string>
|
||||
<string name="app_settings_saved_wallet_footer">Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card.</string>
|
||||
<string name="app_settings_title">App Settings</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">Please scan the card</string>
|
||||
<string name="biometric_lockout_warning_description">Please try again in 30 seconds or scan the card</string>
|
||||
<string name="biometric_lockout_warning_title">Too many attempts</string>
|
||||
<string name="card_settings_action_sheet_reset">Reset</string>
|
||||
<string name="card_settings_action_sheet_title">Are you sure you want to do this?</string>
|
||||
<string name="card_settings_change_access_code">Change Access Code</string>
|
||||
<string name="card_settings_change_access_code_footer">Access code will be changed on this card only</string>
|
||||
<string name="card_settings_reset_card_to_factory">Reset to Factory Settings</string>
|
||||
<string name="card_settings_security_mode">Security Mode</string>
|
||||
<string name="card_settings_title">Card Settings</string>
|
||||
<string name="chat_bot_name">Tangem Bot</string>
|
||||
<string name="chat_button_title">Support</string>
|
||||
<string name="common_accept">J\'accepte</string>
|
||||
<string name="common_add">Add</string>
|
||||
<string name="common_attention">Attention</string>
|
||||
|
|
@ -134,13 +140,13 @@
|
|||
<string name="main_scan_card_warning_view_subtitle">To access all the networks you need to scan the card</string>
|
||||
<string name="main_scan_card_warning_view_title">Scan your card</string>
|
||||
<string name="main_tokens">Tokens</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets.</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Protect</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set an individual access code on each card later.</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set up an individual access code on each card later</string>
|
||||
<string name="onboarding_access_code_feature_2_title">Personalize</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place.</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place</string>
|
||||
<string name="onboarding_access_code_feature_3_title">Restore</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code.</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code</string>
|
||||
<string name="onboarding_access_code_intro_title">Create Access Code</string>
|
||||
<string name="onboarding_access_code_repeat_code_title">Re-enter your Access Code</string>
|
||||
<string name="onboarding_access_code_too_short">Access code must be at least 4 characters long</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">Scan primary card</string>
|
||||
<string name="onboarding_button_skip_backup">Skip for later</string>
|
||||
<string name="onboarding_button_what_does_it_mean">How does it work?</string>
|
||||
<string name="onboarding_chat_button_title">Support</string>
|
||||
<string name="onboarding_create_wallet_body">Let\'s generate all the keys on your card and create a secure wallet</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">Create wallet</string>
|
||||
<string name="onboarding_create_wallet_header">Create a wallet</string>
|
||||
|
|
@ -178,7 +183,7 @@
|
|||
<string name="onboarding_navbar_register_wallet">Connect</string>
|
||||
<string name="onboarding_navbar_title_creating_backup">Creating a backup</string>
|
||||
<string name="onboarding_saltpay_button_backup_origin">Tap the SaltPay card</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add the Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_one_backup_card">Finalize the backup process by creating an access code</string>
|
||||
<string name="onboarding_saltpay_title_backup_card">Tap the Tangem card</string>
|
||||
<string name="onboarding_saltpay_title_no_backup_card">No backup card</string>
|
||||
|
|
@ -191,7 +196,7 @@
|
|||
<string name="onboarding_subtitle_kyc_waiting">Please wait until the verification is completed. You\'ll be notified via email. Usually it takes up to 1 hour. You can close the app and come back later.</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">To start the backup process add up to two backup cards.</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">You can add one more card or finalize the backup process</string>
|
||||
<string name="onboarding_subtitle_pin">Set PIN code for your SaltPay card</string>
|
||||
<string name="onboarding_subtitle_pin">Set up a 4-digit code.\nIt will be used for payments.</string>
|
||||
<string name="onboarding_subtitle_register_wallet">Connect your card to the decentralized payment system</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">Prepare the backup card with number %s</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">Prepare the primary card</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">Congratulations! Your first payment crypto card has been activated!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Your wallet card is configured and ready for use.</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">Max number of cards added. Finalize the backup process.</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">Chat with support</string>
|
||||
<string name="onboarding_title">Activating card</string>
|
||||
<string name="onboarding_title_backup_card_format">Backup card #%d</string>
|
||||
<string name="onboarding_title_claim">Claim %s</string>
|
||||
|
|
@ -219,7 +223,7 @@
|
|||
<string name="onboarding_top_up_button_show_wallet_address">Show the wallet\'s address</string>
|
||||
<string name="onboarding_top_up_header">Top up your wallet</string>
|
||||
<string name="onboarding_twin_exit_warning">The twinning process is partly complete. You can\'t exit it now.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over</string>
|
||||
<string name="onboarding_wallet_info_subtitle_first">You can backup your keys up to two other blank Tangem Wallet cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_fourth">Access code can be restored with one of backup cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_second">All the backup cards can be used as full-functional with the identical keys.</string>
|
||||
|
|
@ -360,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">The %1$s token is the main currency on the %2$s network and cannot be hidden as long as you have other tokens on this network in the list.</string>
|
||||
<string name="token_details_unable_hide_alert_title">Unable to hide %s</string>
|
||||
<string name="token_item_no_rate">No rate</string>
|
||||
<string name="transaction_history_empty_transactions">You don\'t have any transactions yet</string>
|
||||
<string name="transaction_history_error_failed_to_load">Failed to load transactions</string>
|
||||
<string name="transaction_history_title">Transactions</string>
|
||||
<string name="transaction_history_tx_in_progress">In progress...</string>
|
||||
<string name="twin_error_same_card">You\'ve scanned the same card. To create a twin wallet you need to scan the card with number %d</string>
|
||||
<string name="twins_onboarding_description_format">This one that you are holding in your hands and the other one with number %s.\n\nBoth cards can be used to extract funds from this wallet.</string>
|
||||
<string name="twins_onboarding_subtitle">One wallet. Two cards.</string>
|
||||
|
|
@ -402,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">Request to create transaction for %1$s\n%2$s\n\nAmount: %3$s\nFee: %4$s\nTotal: %5$s\nBalance: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">Can\'t send transaction. Not enough funds.</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">Failed to establish WalletConnect session. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">Not all tokens were added to your list. Please add them first and try again. Missing tokens:\n</string>
|
||||
<string name="wallet_connect_error_timeout">Failed to establish WalletConnect session: timeout error. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">Session request contains unsupported blockchains for WalletConnect connection. Unsupported blockchains:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">Connection with this Dapp cannot be established due to its technical implementation.</string>
|
||||
<string name="wallet_connect_generic_error_with_code">We\'ve encountered unknown error. Error code: %d. If the problem persists — feel free to contact our support</string>
|
||||
<string name="wallet_connect_network_not_found_format">%s network not found. Please, add it first and try again.</string>
|
||||
<string name="wallet_connect_no_sessions_message">No opened WalletConnect sessions</string>
|
||||
<string name="wallet_connect_no_sessions_title">Ooops. No Sessions.</string>
|
||||
|
|
@ -464,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">Scan card</string>
|
||||
<string name="welcome_unlock_description">Use %s or scan a card to access the app</string>
|
||||
<string name="welcome_unlock_title">Welcome back!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">Keep the wallet in the app</string>
|
||||
<string name="app_settings_saved_wallet_footer">Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card.</string>
|
||||
<string name="app_settings_title">App Settings</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">Please scan the card</string>
|
||||
<string name="biometric_lockout_warning_description">Please try again in 30 seconds or scan the card</string>
|
||||
<string name="biometric_lockout_warning_title">Too many attempts</string>
|
||||
<string name="card_settings_action_sheet_reset">Reset</string>
|
||||
<string name="card_settings_action_sheet_title">Are you sure you want to do this?</string>
|
||||
<string name="card_settings_change_access_code">Change Access Code</string>
|
||||
<string name="card_settings_change_access_code_footer">Access code will be changed on this card only</string>
|
||||
<string name="card_settings_reset_card_to_factory">Reset to Factory Settings</string>
|
||||
<string name="card_settings_security_mode">Security Mode</string>
|
||||
<string name="card_settings_title">Card Settings</string>
|
||||
<string name="chat_bot_name">Tangem Bot</string>
|
||||
<string name="chat_button_title">Support</string>
|
||||
<string name="common_accept">Accetta</string>
|
||||
<string name="common_add">Add</string>
|
||||
<string name="common_attention">Attention</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">Scan primary card</string>
|
||||
<string name="onboarding_button_skip_backup">Skip for later</string>
|
||||
<string name="onboarding_button_what_does_it_mean">How does it work?</string>
|
||||
<string name="onboarding_chat_button_title">Support</string>
|
||||
<string name="onboarding_create_wallet_body">Let\'s generate all the keys on your card and create a secure wallet</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">Create wallet</string>
|
||||
<string name="onboarding_create_wallet_header">Create a wallet</string>
|
||||
|
|
@ -191,7 +196,7 @@
|
|||
<string name="onboarding_subtitle_kyc_waiting">Please wait until the verification is completed. You\'ll be notified via email. Usually it takes up to 1 hour. You can close the app and come back later.</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">To start the backup process add up to two backup cards.</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">You can add one more card or finalize the backup process</string>
|
||||
<string name="onboarding_subtitle_pin">Set PIN code for your SaltPay card</string>
|
||||
<string name="onboarding_subtitle_pin">Set up a 4-digit code.\nIt will be used for payments.</string>
|
||||
<string name="onboarding_subtitle_register_wallet">Connect your card to the decentralized payment system</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">Prepare the backup card with number %s</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">Prepare the primary card</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">Congratulations! Your first payment crypto card has been activated!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Your wallet card is configured and ready for use.</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">Max number of cards added. Finalize the backup process.</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">Chat with support</string>
|
||||
<string name="onboarding_title">Activating card</string>
|
||||
<string name="onboarding_title_backup_card_format">Backup card #%d</string>
|
||||
<string name="onboarding_title_claim">Claim %s</string>
|
||||
|
|
@ -360,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">The %1$s token is the main currency on the %2$s network and cannot be hidden as long as you have other tokens on this network in the list.</string>
|
||||
<string name="token_details_unable_hide_alert_title">Unable to hide %s</string>
|
||||
<string name="token_item_no_rate">No rate</string>
|
||||
<string name="transaction_history_empty_transactions">You don\'t have any transactions yet</string>
|
||||
<string name="transaction_history_error_failed_to_load">Failed to load transactions</string>
|
||||
<string name="transaction_history_title">Transactions</string>
|
||||
<string name="transaction_history_tx_in_progress">In progress...</string>
|
||||
<string name="twin_error_same_card">You\'ve scanned the same card. To create a twin wallet you need to scan the card with number %d</string>
|
||||
<string name="twins_onboarding_description_format">This one that you are holding in your hands and the other one with number %s.\n\nBoth cards can be used to extract funds from this wallet.</string>
|
||||
<string name="twins_onboarding_subtitle">One wallet. Two cards.</string>
|
||||
|
|
@ -402,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">Request to create transaction for %1$s\n%2$s\n\nAmount: %3$s\nFee: %4$s\nTotal: %5$s\nBalance: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">Can\'t send transaction. Not enough funds.</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">Failed to establish WalletConnect session. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">Not all tokens were added to your list. Please add them first and try again. Missing tokens:\n</string>
|
||||
<string name="wallet_connect_error_timeout">Failed to establish WalletConnect session: timeout error. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">Session request contains unsupported blockchains for WalletConnect connection. Unsupported blockchains:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">Connection with this Dapp cannot be established due to its technical implementation.</string>
|
||||
<string name="wallet_connect_generic_error_with_code">We\'ve encountered unknown error. Error code: %d. If the problem persists — feel free to contact our support</string>
|
||||
<string name="wallet_connect_network_not_found_format">%s network not found. Please, add it first and try again.</string>
|
||||
<string name="wallet_connect_no_sessions_message">No opened WalletConnect sessions</string>
|
||||
<string name="wallet_connect_no_sessions_title">Ooops. No Sessions.</string>
|
||||
|
|
@ -464,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">Scan card</string>
|
||||
<string name="welcome_unlock_description">Use %s or scan a card to access the app</string>
|
||||
<string name="welcome_unlock_title">Welcome back!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">Cохранение кошелька</string>
|
||||
<string name="app_settings_saved_wallet_footer">Подключите функцию привязки карты в приложении, а также возможность биометрической аутентификации. Подпись транзакции все так же потребует карту.</string>
|
||||
<string name="app_settings_title">Настройки приложения</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">Пожалуйста, отсканируйте карту</string>
|
||||
<string name="biometric_lockout_warning_description">Пожалуйста, попробуйте снова через 30 секунд или отсканируйте карту</string>
|
||||
<string name="biometric_lockout_warning_title">Слишком много попыток</string>
|
||||
<string name="card_settings_action_sheet_reset">Сбросить</string>
|
||||
<string name="card_settings_action_sheet_title">Вы уверены, что хотите это сделать?</string>
|
||||
<string name="card_settings_change_access_code">Смена кода доступа</string>
|
||||
<string name="card_settings_change_access_code_footer">Код доступа будет изменен только на данной карте</string>
|
||||
<string name="card_settings_reset_card_to_factory">Сброс к заводским настройкам</string>
|
||||
<string name="card_settings_security_mode">Тип безопасности</string>
|
||||
<string name="card_settings_title">Настройки карты</string>
|
||||
<string name="chat_bot_name">Tangem Bot</string>
|
||||
<string name="chat_button_title">Чат</string>
|
||||
<string name="common_accept">Принять</string>
|
||||
<string name="common_add">Добавить</string>
|
||||
<string name="common_attention">Внимание</string>
|
||||
|
|
@ -134,13 +140,13 @@
|
|||
<string name="main_scan_card_warning_view_subtitle">Чтобы получить доступ ко всем сетям, вам необходимо отсканировать карту</string>
|
||||
<string name="main_scan_card_warning_view_title">Отсканируйте карту</string>
|
||||
<string name="main_tokens">Токены</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Вам необходимо установить единый код доступа для защиты всех ваших карт.</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Вам необходимо установить единый код доступа для защиты всех ваших карт</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Защита</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Позже вы сможете установить индивидуальный код доступа для каждой карты.</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Позже вы сможете установить индивидуальный код доступа для каждой карты</string>
|
||||
<string name="onboarding_access_code_feature_2_title">Персонализация</string>
|
||||
<string name="onboarding_access_code_feature_3_description">Код доступа можно восстановить с помощью привязанной карты. Не храните все карты в одном месте.</string>
|
||||
<string name="onboarding_access_code_feature_3_description">Код доступа можно восстановить с помощью привязанной карты. Не храните все карты в одном месте</string>
|
||||
<string name="onboarding_access_code_feature_3_title">Восстановление</string>
|
||||
<string name="onboarding_access_code_hint">Выберите любое слово, фразу или число в качестве кода доступа.</string>
|
||||
<string name="onboarding_access_code_hint">Выберите любое слово, фразу или число в качестве кода доступа</string>
|
||||
<string name="onboarding_access_code_intro_title">Создайте код доступа</string>
|
||||
<string name="onboarding_access_code_repeat_code_title">Повторно введите код доступа</string>
|
||||
<string name="onboarding_access_code_too_short">Код доступа должен состоять не менее чем из 4 символов.</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">Сканировать основную карту</string>
|
||||
<string name="onboarding_button_skip_backup">Пропустить</string>
|
||||
<string name="onboarding_button_what_does_it_mean">Как это работает?</string>
|
||||
<string name="onboarding_chat_button_title">Чат</string>
|
||||
<string name="onboarding_create_wallet_body">Давайте сгенерируем все ключи на вашей карте и создадим безопасный кошелек</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">Создать кошелек</string>
|
||||
<string name="onboarding_create_wallet_header">Создать кошелек</string>
|
||||
|
|
@ -184,14 +189,14 @@
|
|||
<string name="onboarding_saltpay_title_no_backup_card">Бэкап карта не добавлена</string>
|
||||
<string name="onboarding_saltpay_title_one_backup_card">Бэкап карта создана</string>
|
||||
<string name="onboarding_saltpay_title_prepare_origin">Приготовьте SaltPay карту</string>
|
||||
<string name="onboarding_subtitle_claim">Для начала работы просто запросите начисление wxDai на свой кошелек</string>
|
||||
<string name="onboarding_subtitle_claim">Для начала работы просто запросите начисление wxDAI на свой кошелек</string>
|
||||
<string name="onboarding_subtitle_claim_progress">Это займет несколько секунд</string>
|
||||
<string name="onboarding_subtitle_kyc_retry">Более подробная информация отправлена на ваш адрес электронной почты.</string>
|
||||
<string name="onboarding_subtitle_kyc_start">Для начала работы с картой вам необходимо завершить процесс подтверждения личности</string>
|
||||
<string name="onboarding_subtitle_kyc_waiting">Пожалуйста дождитесь завершения процесса подтверждения личности. Вы будете уведомлены через e-mail. Обычно это занимает не более часа. Вы можете закрыть приложение и вернуться позже.</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">Чтобы начать процесс резервного копирования, добавьте одну или две резервные карты.</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">Вы можете добавить еще одну карту или завершить процесс резервного копирования</string>
|
||||
<string name="onboarding_subtitle_pin">Установите Код доступа для вашей SaltPay карты</string>
|
||||
<string name="onboarding_subtitle_pin">Установите 4-х значный код.\nОн будет использован для платежей.</string>
|
||||
<string name="onboarding_subtitle_register_wallet">Подключите вашу карту к децентрализованной платежной системе</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">Подготовьте резервную карту с номером %s</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">Подготовьте основную карту</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">Поздравляем! Ваша платежная крипто карта теперь активирована!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Ваша карта настроена и готова к использованию.</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">Добавлено максимальное количество карт. Завершите процесс резервного копирования.</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">Чат поддержки</string>
|
||||
<string name="onboarding_title">Активация карты</string>
|
||||
<string name="onboarding_title_backup_card_format">Резервная карта #%d</string>
|
||||
<string name="onboarding_title_claim">Запросить %s</string>
|
||||
|
|
@ -219,7 +223,7 @@
|
|||
<string name="onboarding_top_up_button_show_wallet_address">Показать адрес кошелька</string>
|
||||
<string name="onboarding_top_up_header">Пополните свой кошелек</string>
|
||||
<string name="onboarding_twin_exit_warning">Процесс связывания карт частично завершен. Вы не можете выйти из него сейчас.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Если процесc создания кошелька каким-либо образом прервется, вам придется начинать сначала.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Если процесc создания кошелька каким-либо образом прервется, вам придется начинать сначала</string>
|
||||
<string name="onboarding_wallet_info_subtitle_first">Вы можете сделать резервную копию своих ключей на одной или двух других пустых картах Wallet.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_fourth">Код доступа можно восстановить с помощью одной из резервных карт.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_second">Все резервные карты являются полнофункциональными и содержат одинаковые ключи.</string>
|
||||
|
|
@ -360,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">Токен %1$s является основной валютой в сети %2$s и не может быть скрыт до тех пор, пока у вас в списке есть другие токены этой сети.</string>
|
||||
<string name="token_details_unable_hide_alert_title">Невозможно скрыть %s</string>
|
||||
<string name="token_item_no_rate">Нет цены</string>
|
||||
<string name="transaction_history_empty_transactions">У вас еще нет транзакций</string>
|
||||
<string name="transaction_history_error_failed_to_load">Не удалось загрузить транзакции</string>
|
||||
<string name="transaction_history_title">Транзакции</string>
|
||||
<string name="transaction_history_tx_in_progress">В процессе…</string>
|
||||
<string name="twin_error_same_card">Вы отсканировали ту же карту. Для создания twin-кошелька вам необходимо отсканировать карту с номером %d</string>
|
||||
<string name="twins_onboarding_description_format">Это карта, которую вы держите в руках. У парной карты номер %s.\n\nОбе карты можно использовать для вывода средств из этого кошелька.</string>
|
||||
<string name="twins_onboarding_subtitle">Один кошелек. Две карты.</string>
|
||||
|
|
@ -402,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">Запрос на создание транзакции для %1$s\n%2$s\n\nСумма: %3$s\nКомиссия: %4$s\nВсего: %5$s\nБаланс: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">Невозможно отправить транзакцию. Недостаточно средств.</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">Не удалось установить сессию WalletConnect. Пожалуйста, повторите попытку позже.</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">Не все токены добавлены в ваш список. Пожалуйста, добавьте их в начале, а потом попробуйте снова. Недостающие токены: \n</string>
|
||||
<string name="wallet_connect_error_timeout">Не удалось установить сессию WalletConnect за отведённое время. Пожалуйста, повторите попытку позже.</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">Запрос на подключение через WalletConnect содержит неподдерживаемые блокчеины. Неподдерживаемые блокчеины:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">Cоединение с этим Dapp сервисом не может быть установлено из-за его технической реализации.</string>
|
||||
<string name="wallet_connect_generic_error_with_code">Произошла непредвиденная ошибка. Код ошибки: %d Попробуйте, пожалуйста, позже. Если проблема будет продолжать возникать - обратитесь в службу поддержки.</string>
|
||||
<string name="wallet_connect_network_not_found_format">Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново.</string>
|
||||
<string name="wallet_connect_no_sessions_message">Нет открытых сессий WalletConnect</string>
|
||||
<string name="wallet_connect_no_sessions_title">Упс. Нет сессий.</string>
|
||||
|
|
@ -464,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">Сканировать карту</string>
|
||||
<string name="welcome_unlock_description">Используйте %s или код доступа для входа в приложение</string>
|
||||
<string name="welcome_unlock_title">C возвращением!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">將錢包保存在應用程序中</string>
|
||||
<string name="app_settings_saved_wallet_footer">啟用以將所有錢包鏈接到 Tangem 應用程序。解鎖應用程序需要生物識別身份驗證。交易簽名需要輕觸您的 Tangem 卡片</string>
|
||||
<string name="app_settings_title">APP設置</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">請掃描卡片</string>
|
||||
<string name="biometric_lockout_warning_description">請30秒後重試或刷卡</string>
|
||||
<string name="biometric_lockout_warning_title">嘗試次數過多</string>
|
||||
<string name="card_settings_action_sheet_reset">重置</string>
|
||||
<string name="card_settings_action_sheet_title">您確定要這麼做嗎?</string>
|
||||
<string name="card_settings_change_access_code">更改訪問密碼</string>
|
||||
<string name="card_settings_change_access_code_footer">訪問密碼將僅在此卡上更改</string>
|
||||
<string name="card_settings_reset_card_to_factory">回復至原廠設置</string>
|
||||
<string name="card_settings_security_mode">安全模式</string>
|
||||
<string name="card_settings_title">卡片設置</string>
|
||||
<string name="chat_bot_name">Tangem 機器人</string>
|
||||
<string name="chat_button_title">支援</string>
|
||||
<string name="common_accept">接受</string>
|
||||
<string name="common_add">添加</string>
|
||||
<string name="common_attention">注意</string>
|
||||
|
|
@ -134,13 +140,13 @@
|
|||
<string name="main_scan_card_warning_view_subtitle">要訪問所有的網路您需要掃描卡片</string>
|
||||
<string name="main_scan_card_warning_view_title">掃描卡片</string>
|
||||
<string name="main_tokens">代幣</string>
|
||||
<string name="onboarding_access_code_feature_1_description">您必須設置一個單一的訪問代碼來保護您的所有錢包。</string>
|
||||
<string name="onboarding_access_code_feature_1_description">您必須設置一個單一的訪問代碼來保護您的所有錢包</string>
|
||||
<string name="onboarding_access_code_feature_1_title">保護</string>
|
||||
<string name="onboarding_access_code_feature_2_description">您可以稍後在每張卡上設置單獨的訪問密碼</string>
|
||||
<string name="onboarding_access_code_feature_2_title">個人化</string>
|
||||
<string name="onboarding_access_code_feature_3_description">門禁密碼可以用聯動卡恢復,不要把所有卡都放在一個地方。</string>
|
||||
<string name="onboarding_access_code_feature_3_description">門禁密碼可以用聯動卡恢復,不要把所有卡都放在一個地方</string>
|
||||
<string name="onboarding_access_code_feature_3_title">恢復</string>
|
||||
<string name="onboarding_access_code_hint">選擇您想要的任何單詞、短語或數字作為您的訪問代碼。</string>
|
||||
<string name="onboarding_access_code_hint">選擇您想要的任何單詞、短語或數字作為您的訪問代碼</string>
|
||||
<string name="onboarding_access_code_intro_title">建立訪問密碼</string>
|
||||
<string name="onboarding_access_code_repeat_code_title">重新輸入訪問密碼</string>
|
||||
<string name="onboarding_access_code_too_short">訪問代碼的長度必須至少為 4 個字符</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">掃描主卡</string>
|
||||
<string name="onboarding_button_skip_backup">暫時略過</string>
|
||||
<string name="onboarding_button_what_does_it_mean">它是如何運作的?</string>
|
||||
<string name="onboarding_chat_button_title">支援</string>
|
||||
<string name="onboarding_create_wallet_body">讓我們生成您卡上的所有密鑰並創建一個安全的錢包</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">創建錢包</string>
|
||||
<string name="onboarding_create_wallet_header">創造錢包</string>
|
||||
|
|
@ -191,7 +196,7 @@
|
|||
<string name="onboarding_subtitle_kyc_waiting">請等待驗證完成,您將收到電子郵件通知。通常最多需要 1 小時。您可以關閉該應用程序,稍後再回來</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">要開始備份過程,最多可添加兩張備份卡。</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">您可以再添加一張卡或完成備份過程</string>
|
||||
<string name="onboarding_subtitle_pin">為您的 SaltPay 卡設置 PIN 碼</string>
|
||||
<string name="onboarding_subtitle_pin">設置一個 4 位密碼。 \n它將用在付款時使用。</string>
|
||||
<string name="onboarding_subtitle_register_wallet">將您的卡片連接到去中心化支付系統</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">準備編號為 %s 的備份卡</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">準備主卡</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">恭喜! 您的第一張支付加密卡已啟用!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">您的錢包卡已配置完畢,可以使用了</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">已添加至最大數量。完成備份過程</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">聯繫客服</string>
|
||||
<string name="onboarding_title">啟用卡片</string>
|
||||
<string name="onboarding_title_backup_card_format">備份卡 #%d</string>
|
||||
<string name="onboarding_title_claim">獲取%s</string>
|
||||
|
|
@ -303,7 +307,7 @@
|
|||
<string name="shop_buy_now">現在購買</string>
|
||||
<string name="shop_free">免費</string>
|
||||
<string name="shop_i_have_a_promo_code">輸入折扣碼</string>
|
||||
<string name="shop_one_wallet">Tangem 冷錢包</string>
|
||||
<string name="shop_one_wallet">Tangem Wallet</string>
|
||||
<string name="shop_other_payment_methods">其他付款方式</string>
|
||||
<string name="shop_shipping">運送</string>
|
||||
<string name="shop_total">總計</string>
|
||||
|
|
@ -328,6 +332,7 @@
|
|||
<string name="story_meet_title">認識Tangem</string>
|
||||
<string name="story_web3_description">交易、購買NFT、自由穿梭於100+去中心化服務</string>
|
||||
<string name="story_web3_title">兼容DeFi</string>
|
||||
<string name="swapping_error_wrapper">錯誤: %s</string>
|
||||
<string name="swapping_generic_error">有錯誤。請再試一遍</string>
|
||||
<string name="swapping_give_permission">賦予權限</string>
|
||||
<string name="swapping_insufficient_funds">餘額不足</string>
|
||||
|
|
@ -359,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">%1$s 代幣是 %2$s 網絡上的主要貨幣,只要列表中還有該網絡上的其他代幣,它就無法被隱藏。</string>
|
||||
<string name="token_details_unable_hide_alert_title">無法隱藏 %s</string>
|
||||
<string name="token_item_no_rate">無費用</string>
|
||||
<string name="transaction_history_empty_transactions">您還沒有任何交易</string>
|
||||
<string name="transaction_history_error_failed_to_load">無法加載交易</string>
|
||||
<string name="transaction_history_title">交易</string>
|
||||
<string name="transaction_history_tx_in_progress">進行中...</string>
|
||||
<string name="twin_error_same_card">您掃描了同一張卡片。要創建雙錢包,您需要掃描編號為 %d 的卡</string>
|
||||
<string name="twins_onboarding_description_format">這一個是你手裡拿著的,另一個是編號為 %s 的,這兩張卡都可以用來從這個錢包中提取資金</string>
|
||||
<string name="twins_onboarding_subtitle">一個錢包,兩張卡片</string>
|
||||
|
|
@ -366,9 +375,10 @@
|
|||
<string name="twins_recreate_title_creating_wallet">創建錢包</string>
|
||||
<string name="twins_recreate_title_format">掃描 #%s 雙胞胎卡</string>
|
||||
<string name="twins_recreate_title_preparing">準備卡片</string>
|
||||
<string name="twins_recreate_toolbar">Tangem雙胞胎卡</string>
|
||||
<string name="twins_recreate_toolbar">Tangem Twin</string>
|
||||
<string name="twins_recreate_warning">這個動作是不可逆的。您將無法訪問舊錢包</string>
|
||||
<string name="user_wallet_list_add_button">添加新錢包</string>
|
||||
<string name="user_wallet_list_delete_prompt">您確定要刪除此錢包?</string>
|
||||
<string name="user_wallet_list_editing_count">已選擇 %d</string>
|
||||
<string name="user_wallet_list_error_wallet_already_saved">此錢包已保存,您可以再添加一個</string>
|
||||
<string name="user_wallet_list_multi_header">多幣種</string>
|
||||
|
|
@ -400,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">請求為 %1$s 創建交易\n%2$s\n\n數量: %3$s\n費用: %4$s\n全部的: %5$s\n餘額: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">無法交易,無足夠資金</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">未能建立 WalletConnect 連接。請稍後再試</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">並非所有代幣都已添加到您的列表中。請先添加它們,然後重試。缺少標記:\n</string>
|
||||
<string name="wallet_connect_error_timeout">無法建立 WalletConnect 連接:超時錯誤。請稍後再試</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">會話請求包含不支持 WalletConnect 連接的區塊鏈。不支持的區塊鏈:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">由於技術問題,無法與此 Dapp 建立連接</string>
|
||||
<string name="wallet_connect_generic_error_with_code">我們遇到了未知錯誤。錯誤代碼:%d。如果問題仍然存在-請隨時聯繫我們的支持人員</string>
|
||||
<string name="wallet_connect_network_not_found_format">沒有 %s 網路,請先加入後再試一次</string>
|
||||
<string name="wallet_connect_no_sessions_message">沒有打開中的WalletConnect連接</string>
|
||||
<string name="wallet_connect_no_sessions_title">Ooops, 沒有連接</string>
|
||||
|
|
@ -462,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">掃描卡片</string>
|
||||
<string name="welcome_unlock_description">使用 %s 或掃描卡片以訪問該應用程序</string>
|
||||
<string name="welcome_unlock_title">歡迎回來!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@
|
|||
<string name="app_settings_saved_wallet">Keep the wallet in the app</string>
|
||||
<string name="app_settings_saved_wallet_footer">Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card.</string>
|
||||
<string name="app_settings_title">App Settings</string>
|
||||
<string name="biometric_lockout_permanent_warning_description">Please scan the card</string>
|
||||
<string name="biometric_lockout_warning_description">Please try again in 30 seconds or scan the card</string>
|
||||
<string name="biometric_lockout_warning_title">Too many attempts</string>
|
||||
<string name="card_settings_action_sheet_reset">Reset</string>
|
||||
<string name="card_settings_action_sheet_title">Are you sure you want to do this?</string>
|
||||
<string name="card_settings_change_access_code">Change Access Code</string>
|
||||
<string name="card_settings_change_access_code_footer">Access code will be changed on this card only</string>
|
||||
<string name="card_settings_reset_card_to_factory">Reset to Factory Settings</string>
|
||||
<string name="card_settings_security_mode">Security Mode</string>
|
||||
<string name="card_settings_title">Card Settings</string>
|
||||
<string name="chat_bot_name">Tangem Bot</string>
|
||||
<string name="chat_button_title">Support</string>
|
||||
<string name="common_accept">Accept</string>
|
||||
<string name="common_add">Add</string>
|
||||
<string name="common_attention">Attention</string>
|
||||
|
|
@ -134,13 +140,13 @@
|
|||
<string name="main_scan_card_warning_view_subtitle">To access all the networks you need to scan the card</string>
|
||||
<string name="main_scan_card_warning_view_title">Scan your card</string>
|
||||
<string name="main_tokens">Tokens</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets.</string>
|
||||
<string name="onboarding_access_code_feature_1_description">You have to set up a single access code to protect all your wallets</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Protect</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set an individual access code on each card later.</string>
|
||||
<string name="onboarding_access_code_feature_2_description">You can set up an individual access code on each card later</string>
|
||||
<string name="onboarding_access_code_feature_2_title">Personalize</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place.</string>
|
||||
<string name="onboarding_access_code_feature_3_description">The access code can be restored with a linked card, don\'t keep all cards in one place</string>
|
||||
<string name="onboarding_access_code_feature_3_title">Restore</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code.</string>
|
||||
<string name="onboarding_access_code_hint">Choose any word, phrase, or number you want as your access code</string>
|
||||
<string name="onboarding_access_code_intro_title">Create Access Code</string>
|
||||
<string name="onboarding_access_code_repeat_code_title">Re-enter your Access Code</string>
|
||||
<string name="onboarding_access_code_too_short">Access code must be at least 4 characters long</string>
|
||||
|
|
@ -163,7 +169,6 @@
|
|||
<string name="onboarding_button_scan_origin_card">Scan primary card</string>
|
||||
<string name="onboarding_button_skip_backup">Skip for later</string>
|
||||
<string name="onboarding_button_what_does_it_mean">How does it work?</string>
|
||||
<string name="onboarding_chat_button_title">Support</string>
|
||||
<string name="onboarding_create_wallet_body">Let\'s generate all the keys on your card and create a secure wallet</string>
|
||||
<string name="onboarding_create_wallet_button_create_wallet">Create wallet</string>
|
||||
<string name="onboarding_create_wallet_header">Create a wallet</string>
|
||||
|
|
@ -178,7 +183,7 @@
|
|||
<string name="onboarding_navbar_register_wallet">Connect</string>
|
||||
<string name="onboarding_navbar_title_creating_backup">Creating a backup</string>
|
||||
<string name="onboarding_saltpay_button_backup_origin">Tap the SaltPay card</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_no_backup_cards">To start the backup process you have to add the Tangem card as your backup</string>
|
||||
<string name="onboarding_saltpay_subtitle_one_backup_card">Finalize the backup process by creating an access code</string>
|
||||
<string name="onboarding_saltpay_title_backup_card">Tap the Tangem card</string>
|
||||
<string name="onboarding_saltpay_title_no_backup_card">No backup card</string>
|
||||
|
|
@ -191,7 +196,7 @@
|
|||
<string name="onboarding_subtitle_kyc_waiting">Please wait until the verification is completed. You\'ll be notified via email. Usually it takes up to 1 hour. You can close the app and come back later.</string>
|
||||
<string name="onboarding_subtitle_no_backup_cards">To start the backup process add up to two backup cards.</string>
|
||||
<string name="onboarding_subtitle_one_backup_card">You can add one more card or finalize the backup process</string>
|
||||
<string name="onboarding_subtitle_pin">Set PIN code for your SaltPay card</string>
|
||||
<string name="onboarding_subtitle_pin">Set up a 4-digit code.\nIt will be used for payments.</string>
|
||||
<string name="onboarding_subtitle_register_wallet">Connect your card to the decentralized payment system</string>
|
||||
<string name="onboarding_subtitle_scan_backup_card_format">Prepare the backup card with number %s</string>
|
||||
<string name="onboarding_subtitle_scan_origin_card">Prepare the primary card</string>
|
||||
|
|
@ -199,7 +204,6 @@
|
|||
<string name="onboarding_subtitle_success_claim">Congratulations! Your first payment crypto card has been activated!</string>
|
||||
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Your wallet card is configured and ready for use.</string>
|
||||
<string name="onboarding_subtitle_two_backup_cards">Max number of cards added. Finalize the backup process.</string>
|
||||
<string name="onboarding_supplement_button_kyc_waiting">Chat with support</string>
|
||||
<string name="onboarding_title">Activating card</string>
|
||||
<string name="onboarding_title_backup_card_format">Backup card #%d</string>
|
||||
<string name="onboarding_title_claim">Claim %s</string>
|
||||
|
|
@ -219,7 +223,7 @@
|
|||
<string name="onboarding_top_up_button_show_wallet_address">Show the wallet\'s address</string>
|
||||
<string name="onboarding_top_up_header">Top up your wallet</string>
|
||||
<string name="onboarding_twin_exit_warning">The twinning process is partly complete. You can\'t exit it now.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over</string>
|
||||
<string name="onboarding_wallet_info_subtitle_first">You can backup your keys up to two other blank Tangem Wallet cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_fourth">Access code can be restored with one of backup cards.</string>
|
||||
<string name="onboarding_wallet_info_subtitle_second">All the backup cards can be used as full-functional with the identical keys.</string>
|
||||
|
|
@ -360,6 +364,10 @@
|
|||
<string name="token_details_unable_hide_alert_message">The %1$s token is the main currency on the %2$s network and cannot be hidden as long as you have other tokens on this network in the list.</string>
|
||||
<string name="token_details_unable_hide_alert_title">Unable to hide %s</string>
|
||||
<string name="token_item_no_rate">No rate</string>
|
||||
<string name="transaction_history_empty_transactions">You don\'t have any transactions yet</string>
|
||||
<string name="transaction_history_error_failed_to_load">Failed to load transactions</string>
|
||||
<string name="transaction_history_title">Transactions</string>
|
||||
<string name="transaction_history_tx_in_progress">In progress...</string>
|
||||
<string name="twin_error_same_card">You\'ve scanned the same card. To create a twin wallet you need to scan the card with number %d</string>
|
||||
<string name="twins_onboarding_description_format">This one that you are holding in your hands and the other one with number %s.\n\nBoth cards can be used to extract funds from this wallet.</string>
|
||||
<string name="twins_onboarding_subtitle">One wallet. Two cards.</string>
|
||||
|
|
@ -402,8 +410,11 @@
|
|||
<string name="wallet_connect_create_tx_message">Request to create transaction for %1$s\n%2$s\n\nAmount: %3$s\nFee: %4$s\nTotal: %5$s\nBalance: %6$s</string>
|
||||
<string name="wallet_connect_create_tx_not_enough_funds">Can\'t send transaction. Not enough funds.</string>
|
||||
<string name="wallet_connect_error_failed_to_connect">Failed to establish WalletConnect session. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_missing_blockchains">Not all tokens were added to your list. Please add them first and try again. Missing tokens:\n</string>
|
||||
<string name="wallet_connect_error_timeout">Failed to establish WalletConnect session: timeout error. Please, try again later.</string>
|
||||
<string name="wallet_connect_error_unsupported_blockchains">Session request contains unsupported blockchains for WalletConnect connection. Unsupported blockchains:\n</string>
|
||||
<string name="wallet_connect_error_unsupported_dapp">Connection with this Dapp cannot be established due to its technical implementation.</string>
|
||||
<string name="wallet_connect_generic_error_with_code">We\'ve encountered unknown error. Error code: %d. If the problem persists — feel free to contact our support</string>
|
||||
<string name="wallet_connect_network_not_found_format">%s network not found. Please, add it first and try again.</string>
|
||||
<string name="wallet_connect_no_sessions_message">No opened WalletConnect sessions</string>
|
||||
<string name="wallet_connect_no_sessions_title">Ooops. No Sessions.</string>
|
||||
|
|
@ -464,7 +475,4 @@
|
|||
<string name="welcome_unlock_card">Scan card</string>
|
||||
<string name="welcome_unlock_description">Use %s or scan a card to access the app</string>
|
||||
<string name="welcome_unlock_title">Welcome back!</string>
|
||||
|
||||
<!-- Special string -->
|
||||
<string name="common_custom_string">%s</string>
|
||||
</resources>
|
||||
|
|
|
|||
4
core/res/src/main/res/values/strings_special.xml
Normal file
4
core/res/src/main/res/values/strings_special.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="common_custom_string" translatable="false">%s</string>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue