Updated on 2026-08-14
This commit is contained in:
commit
e96c236de5
32 changed files with 433 additions and 82 deletions
|
|
@ -576,6 +576,7 @@ internal class ChildFactory @Inject constructor(
|
||||||
analyticsSource = route.analyticsSource,
|
analyticsSource = route.analyticsSource,
|
||||||
analyticsAction = route.analyticsAction,
|
analyticsAction = route.analyticsAction,
|
||||||
nextScreen = route.nextScreen,
|
nextScreen = route.nextScreen,
|
||||||
|
shouldShowBackButton = route.shouldShowBackButton,
|
||||||
),
|
),
|
||||||
componentFactory = createWalletBackupComponentFactory,
|
componentFactory = createWalletBackupComponentFactory,
|
||||||
)
|
)
|
||||||
|
|
@ -587,6 +588,7 @@ internal class ChildFactory @Inject constructor(
|
||||||
userWalletId = route.userWalletId,
|
userWalletId = route.userWalletId,
|
||||||
source = route.source,
|
source = route.source,
|
||||||
nextScreen = route.nextScreen,
|
nextScreen = route.nextScreen,
|
||||||
|
shouldShowBackButton = route.shouldShowBackButton,
|
||||||
),
|
),
|
||||||
componentFactory = updateAccessCodeComponentFactory,
|
componentFactory = updateAccessCodeComponentFactory,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -405,6 +405,7 @@ sealed class AppRoute(val path: String) : Route {
|
||||||
val analyticsAction: String,
|
val analyticsAction: String,
|
||||||
val isUpgradeFlow: Boolean = false,
|
val isUpgradeFlow: Boolean = false,
|
||||||
val nextScreen: AppRoute? = null,
|
val nextScreen: AppRoute? = null,
|
||||||
|
val shouldShowBackButton: Boolean = true,
|
||||||
) : AppRoute(path = "/create_wallet_backup/${userWalletId.stringValue}")
|
) : AppRoute(path = "/create_wallet_backup/${userWalletId.stringValue}")
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|
@ -412,6 +413,7 @@ sealed class AppRoute(val path: String) : Route {
|
||||||
val userWalletId: UserWalletId,
|
val userWalletId: UserWalletId,
|
||||||
val source: String,
|
val source: String,
|
||||||
val nextScreen: AppRoute? = null,
|
val nextScreen: AppRoute? = null,
|
||||||
|
val shouldShowBackButton: Boolean = true,
|
||||||
) : AppRoute(path = "/update_access_code/${userWalletId.stringValue}")
|
) : AppRoute(path = "/update_access_code/${userWalletId.stringValue}")
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ class AmountStateConverter(
|
||||||
private val iconStateConverter: CryptoCurrencyToIconStateConverter,
|
private val iconStateConverter: CryptoCurrencyToIconStateConverter,
|
||||||
private val isBalanceHidden: Boolean,
|
private val isBalanceHidden: Boolean,
|
||||||
private val accountTitleUM: AccountTitleUM,
|
private val accountTitleUM: AccountTitleUM,
|
||||||
|
private val isMaxButtonVisible: Boolean = true,
|
||||||
) : Converter<AmountParameters, AmountState> {
|
) : Converter<AmountParameters, AmountState> {
|
||||||
|
|
||||||
private val amountFieldConverter by lazy(LazyThreadSafetyMode.NONE) {
|
private val amountFieldConverter by lazy(LazyThreadSafetyMode.NONE) {
|
||||||
|
|
@ -72,6 +73,7 @@ class AmountStateConverter(
|
||||||
amountTextField = amountFieldConverter.convert(value.value),
|
amountTextField = amountFieldConverter.convert(value.value),
|
||||||
isPrimaryButtonEnabled = false,
|
isPrimaryButtonEnabled = false,
|
||||||
appCurrency = appCurrency,
|
appCurrency = appCurrency,
|
||||||
|
isMaxButtonVisible = isMaxButtonVisible,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -24,6 +24,7 @@ sealed class AmountState {
|
||||||
* @param isEditingDisabled indicated whether amount is editable
|
* @param isEditingDisabled indicated whether amount is editable
|
||||||
* @param reduceAmountBy reduces amount to be sent by specified value
|
* @param reduceAmountBy reduces amount to be sent by specified value
|
||||||
* @param isIgnoreReduce ignores reduce amount value
|
* @param isIgnoreReduce ignores reduce amount value
|
||||||
|
* @param isMaxButtonVisible indicates whether the "Max" button is shown
|
||||||
*/
|
*/
|
||||||
data class Data(
|
data class Data(
|
||||||
override val isPrimaryButtonEnabled: Boolean,
|
override val isPrimaryButtonEnabled: Boolean,
|
||||||
|
|
@ -37,6 +38,7 @@ sealed class AmountState {
|
||||||
val isEditingDisabled: Boolean = false,
|
val isEditingDisabled: Boolean = false,
|
||||||
val reduceAmountBy: BigDecimal = BigDecimal.ZERO,
|
val reduceAmountBy: BigDecimal = BigDecimal.ZERO,
|
||||||
val isIgnoreReduce: Boolean = false,
|
val isIgnoreReduce: Boolean = false,
|
||||||
|
val isMaxButtonVisible: Boolean = true,
|
||||||
) : AmountState()
|
) : AmountState()
|
||||||
|
|
||||||
data object Empty : AmountState() {
|
data object Empty : AmountState() {
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ internal fun LazyListScope.amountFieldV2(
|
||||||
@Composable
|
@Composable
|
||||||
private fun AmountInfo(amountUM: AmountState, onMaxAmountClick: () -> Unit, modifier: Modifier = Modifier) {
|
private fun AmountInfo(amountUM: AmountState, onMaxAmountClick: () -> Unit, modifier: Modifier = Modifier) {
|
||||||
val tokenIconState = (amountUM as? AmountState.Data)?.tokenIconState ?: CurrencyIconState.Loading
|
val tokenIconState = (amountUM as? AmountState.Data)?.tokenIconState ?: CurrencyIconState.Loading
|
||||||
|
val isMaxButtonVisible = (amountUM as? AmountState.Data)?.isMaxButtonVisible != false
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||||
|
|
@ -106,6 +107,7 @@ private fun AmountInfo(amountUM: AmountState, onMaxAmountClick: () -> Unit, modi
|
||||||
amountUM = amountUM,
|
amountUM = amountUM,
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
)
|
)
|
||||||
|
if (isMaxButtonVisible) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResourceSafe(R.string.send_max_amount),
|
text = stringResourceSafe(R.string.send_max_amount),
|
||||||
style = TangemTheme.typography.caption1,
|
style = TangemTheme.typography.caption1,
|
||||||
|
|
@ -124,6 +126,7 @@ private fun AmountInfo(amountUM: AmountState, onMaxAmountClick: () -> Unit, modi
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun AmountInfoMain(amountUM: AmountState, modifier: Modifier = Modifier) {
|
private fun AmountInfoMain(amountUM: AmountState, modifier: Modifier = Modifier) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
package com.tangem.common.ui.amountScreen.converters
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import com.tangem.common.ui.account.AccountTitleUM
|
||||||
|
import com.tangem.common.ui.amountScreen.AmountScreenClickIntents
|
||||||
|
import com.tangem.common.ui.amountScreen.models.AmountParameters
|
||||||
|
import com.tangem.common.ui.amountScreen.models.AmountState
|
||||||
|
import com.tangem.common.ui.amountScreen.models.EnterAmountBoundary
|
||||||
|
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
|
||||||
|
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
|
||||||
|
import com.tangem.core.ui.extensions.stringReference
|
||||||
|
import com.tangem.domain.appcurrency.model.AppCurrency
|
||||||
|
import com.tangem.domain.models.currency.CryptoCurrency
|
||||||
|
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import java.math.BigDecimal
|
||||||
|
|
||||||
|
internal class AmountStateConverterTest {
|
||||||
|
|
||||||
|
private val currency = mockk<CryptoCurrency.Coin> {
|
||||||
|
every { symbol } returns "ETH"
|
||||||
|
every { decimals } returns 18
|
||||||
|
every { name } returns "Ethereum"
|
||||||
|
}
|
||||||
|
private val status = CryptoCurrencyStatus(currency = currency, value = mockk(relaxed = true))
|
||||||
|
private val iconStateConverter = mockk<CryptoCurrencyToIconStateConverter> {
|
||||||
|
every { convert(any<CryptoCurrency>()) } returns CurrencyIconState.Loading
|
||||||
|
}
|
||||||
|
private val clickIntents = mockk<AmountScreenClickIntents>(relaxed = true)
|
||||||
|
private val accountTitleUM = mockk<AccountTitleUM>()
|
||||||
|
|
||||||
|
private fun convert(isMaxButtonVisible: Boolean = true): AmountState = AmountStateConverter(
|
||||||
|
clickIntents = clickIntents,
|
||||||
|
appCurrency = AppCurrency.Default,
|
||||||
|
cryptoCurrencyStatus = status,
|
||||||
|
maxEnterAmount = EnterAmountBoundary(
|
||||||
|
amount = BigDecimal.ONE,
|
||||||
|
fiatAmount = BigDecimal.TEN,
|
||||||
|
fiatRate = BigDecimal.ONE,
|
||||||
|
),
|
||||||
|
iconStateConverter = iconStateConverter,
|
||||||
|
isBalanceHidden = false,
|
||||||
|
accountTitleUM = accountTitleUM,
|
||||||
|
isMaxButtonVisible = isMaxButtonVisible,
|
||||||
|
).convert(AmountParameters(title = stringReference("Wallet"), value = ""))
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN no isMaxButtonVisible param WHEN convert THEN Data isMaxButtonVisible is true`() {
|
||||||
|
val result = convert()
|
||||||
|
|
||||||
|
assertThat((result as AmountState.Data).isMaxButtonVisible).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN isMaxButtonVisible false WHEN convert THEN Data isMaxButtonVisible is false`() {
|
||||||
|
val result = convert(isMaxButtonVisible = false)
|
||||||
|
|
||||||
|
assertThat((result as AmountState.Data).isMaxButtonVisible).isFalse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -144,7 +144,7 @@
|
||||||
<string name="backup_complete_description">Du hast Deine Wallet erfolgreich gesichert.</string>
|
<string name="backup_complete_description">Du hast Deine Wallet erfolgreich gesichert.</string>
|
||||||
<string name="backup_complete_seed_description">Diese Wörter können bei Verlust nicht wiederhergestellt werden. Bewahre diese an einem sicheren Ort auf.</string>
|
<string name="backup_complete_seed_description">Diese Wörter können bei Verlust nicht wiederhergestellt werden. Bewahre diese an einem sicheren Ort auf.</string>
|
||||||
<string name="backup_complete_title">Sicherung abgeschlossen</string>
|
<string name="backup_complete_title">Sicherung abgeschlossen</string>
|
||||||
<string name="backup_info_description">Deine geheime Wiederherstellungsphrase ist eine feste Folge von %s zufälligen Wörtern, mit denen Du auf Deiner Wallet zugreifst und sie wiederherstellen kannst.</string>
|
<string name="backup_info_description">Deine geheime Wiederherstellungsphrase ist eine feste Folge von%s zufälligen Wörtern, mit denen du auf deine Wallet zugreifst und sie wiederherstellen kannst</string>
|
||||||
<string name="backup_info_keep_description">Diese Worte sind unwiederbringlich verloren. Bewahre diese gut auf.</string>
|
<string name="backup_info_keep_description">Diese Worte sind unwiederbringlich verloren. Bewahre diese gut auf.</string>
|
||||||
<string name="backup_info_keep_title">Sicher aufbewahren</string>
|
<string name="backup_info_keep_title">Sicher aufbewahren</string>
|
||||||
<string name="backup_info_save_description">Speicher diese %s Wörter an einem sicheren Ort und gebe diese niemals an andere weiter.</string>
|
<string name="backup_info_save_description">Speicher diese %s Wörter an einem sicheren Ort und gebe diese niemals an andere weiter.</string>
|
||||||
|
|
@ -1676,7 +1676,7 @@
|
||||||
<string name="tangem_pay_card_details_unable_to_rename_card_title">Karte kann nicht umbenannt werden</string>
|
<string name="tangem_pay_card_details_unable_to_rename_card_title">Karte kann nicht umbenannt werden</string>
|
||||||
<string name="tangem_pay_card_frozen">Karte eingefroren</string>
|
<string name="tangem_pay_card_frozen">Karte eingefroren</string>
|
||||||
<string name="tangem_pay_card_payment">Kartenzahlung</string>
|
<string name="tangem_pay_card_payment">Kartenzahlung</string>
|
||||||
<string name="tangem_pay_close_card_popup_description">Es wird vom Zahlungskonto verschwinden</string>
|
<string name="tangem_pay_close_card_popup_description">Es wird aus der App verschwinden</string>
|
||||||
<string name="tangem_pay_close_card_popup_primary_button_title">Karte schließen</string>
|
<string name="tangem_pay_close_card_popup_primary_button_title">Karte schließen</string>
|
||||||
<string name="tangem_pay_close_card_popup_secondary_button_title">Geh zurück</string>
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Geh zurück</string>
|
||||||
<string name="tangem_pay_close_card_popup_title">Ihre Karte schließen?</string>
|
<string name="tangem_pay_close_card_popup_title">Ihre Karte schließen?</string>
|
||||||
|
|
@ -1823,6 +1823,24 @@
|
||||||
<string name="tangempay_kyc_rejected_description_span">nicht verifizieren.</string>
|
<string name="tangempay_kyc_rejected_description_span">nicht verifizieren.</string>
|
||||||
<string name="tangempay_maximum_cards_issued_description">Du kannst bis zu 3 Karten haben. Lösche eine, um eine neue Karte hinzuzufügen.</string>
|
<string name="tangempay_maximum_cards_issued_description">Du kannst bis zu 3 Karten haben. Lösche eine, um eine neue Karte hinzuzufügen.</string>
|
||||||
<string name="tangempay_maximum_cards_issued_title">Maximale Anzahl ausgegebener Karten</string>
|
<string name="tangempay_maximum_cards_issued_title">Maximale Anzahl ausgegebener Karten</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Ja — für die Nutzung einer regulierten Visa-Karte ist eine Identitätsprüfung Pflicht. Das KYC wird von Sumsub abgewickelt, dem Compliance-Partner.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Muss ich meine Dokumente teilen?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">Nein. Das KYC gilt nur für das Tangem Pay Konto. Deine Tangem Wallet bleibt eine separate, self-custodial und KYC-freie Umgebung.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">Ist das KYC mit meiner Wallet verknüpft?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — ein weltweit regulierter KYC-Anbieter, dem über 4,000 Finanzinstitute vertrauen — verifiziert deine Identität und speichert die Ergebnisse sicher nach ISO 27001- und SOC 2-Standards.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Wer speichert meine persönlichen Daten und wie werden sie geschützt?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">Das Kartenguthaben wird in USDC auf Polygon geführt, du kannst es aber mit jedem Asset (USDT, SOL, ETH, BTC, XRP usw.) über die integrierten Swap-Funktionen von Tangem aufladen.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Welche Kryptowährungen kann ich ausgeben?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Gib Krypto überall aus — ohne Banken, ohne Mittelsmänner, ohne Börsen. Self-Custody trifft auf alltägliches Bezahlen.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Online sowie mit Apple Pay bezahlen</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Weltweit akzeptiert</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Weltweit nutzbar</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">Nur 1% FX-Gebühr</string>
|
||||||
|
<string name="tangempay_newonboard_title">Hol dir deine Tangem Pay Karte</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Zahl, was du siehst</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Keine Kaufgebühren, \n1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Keine Überraschungen</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 monatlich,\n$0 Aufladegebühr</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Holen Sie sich Ihre kostenlose virtuelle Tangem Visa-Karte</string>
|
<string name="tangempay_onboarding_banner_description">Holen Sie sich Ihre kostenlose virtuelle Tangem Visa-Karte</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Nutzen Sie USDC für alltägliche Zahlungen</string>
|
<string name="tangempay_onboarding_banner_title">Nutzen Sie USDC für alltägliche Zahlungen</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Karte erhalten</string>
|
<string name="tangempay_onboarding_get_card_button_text">Karte erhalten</string>
|
||||||
|
|
@ -1835,7 +1853,7 @@
|
||||||
<string name="tangempay_onboarding_setup_wallet_description">Verknüpfen Sie eine Zahlungskarte</string>
|
<string name="tangempay_onboarding_setup_wallet_description">Verknüpfen Sie eine Zahlungskarte</string>
|
||||||
<string name="tangempay_onboarding_setup_wallet_title">Wir richten eine Wallet ein.</string>
|
<string name="tangempay_onboarding_setup_wallet_title">Wir richten eine Wallet ein.</string>
|
||||||
<string name="tangempay_onboarding_title">Holen Sie sich Ihre Tangem Pay Karte</string>
|
<string name="tangempay_onboarding_title">Holen Sie sich Ihre Tangem Pay Karte</string>
|
||||||
<string name="tangempay_pay_support">Bezahlen mit</string>
|
<string name="tangempay_pay_support">Pay-Betreuung</string>
|
||||||
<string name="tangempay_payment_account">Zahlungskonto</string>
|
<string name="tangempay_payment_account">Zahlungskonto</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay sitzung abgelaufen</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay sitzung abgelaufen</string>
|
||||||
<string name="tangempay_pin_validation_error_message">Ungültige PIN: Sequenzen oder Wiederholungen vermeiden</string>
|
<string name="tangempay_pin_validation_error_message">Ungültige PIN: Sequenzen oder Wiederholungen vermeiden</string>
|
||||||
|
|
@ -1853,7 +1871,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">Service vorübergehend nicht verfügbar</string>
|
<string name="tangempay_service_unavailable_title">Service vorübergehend nicht verfügbar</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Daten können derzeit nicht angezeigt werden, Kartenzahlungen funktionieren jedoch weiterhin.</string>
|
<string name="tangempay_service_unreachable_try_later">Daten können derzeit nicht angezeigt werden, Kartenzahlungen funktionieren jedoch weiterhin.</string>
|
||||||
<string name="tangempay_set_pin_code">Satz \nPIN-Code</string>
|
<string name="tangempay_set_pin_code">Satz \nPIN-Code</string>
|
||||||
<string name="tangempay_status_deactivated">Karte deaktiviert</string>
|
<string name="tangempay_status_deactivated">Konto geschlossen</string>
|
||||||
<string name="tangempay_status_replacing">Ersetzen deine Karte</string>
|
<string name="tangempay_status_replacing">Ersetzen deine Karte</string>
|
||||||
<string name="tangempay_sync_needed">Karte oder Ring verwenden, um die Sitzung zu verlängern</string>
|
<string name="tangempay_sync_needed">Karte oder Ring verwenden, um die Sitzung zu verlängern</string>
|
||||||
<string name="tangempay_sync_needed_body">Karte oder Ring verwenden, um die Sitzung zu verlängern</string>
|
<string name="tangempay_sync_needed_body">Karte oder Ring verwenden, um die Sitzung zu verlängern</string>
|
||||||
|
|
|
||||||
|
|
@ -1587,6 +1587,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay ya está en beta</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay ya está en beta</string>
|
||||||
<string name="tangem_pay_card_frozen">Tarjeta congelada</string>
|
<string name="tangem_pay_card_frozen">Tarjeta congelada</string>
|
||||||
<string name="tangem_pay_card_payment">Pago con tarjeta</string>
|
<string name="tangem_pay_card_payment">Pago con tarjeta</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">Desaparecerá de la aplicación</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">Cerrar la tarjeta</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Atrás</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">¿Cerrar tu tarjeta?</string>
|
||||||
<string name="tangem_pay_deposit">Depósito</string>
|
<string name="tangem_pay_deposit">Depósito</string>
|
||||||
<string name="tangem_pay_dispute">Disputar</string>
|
<string name="tangem_pay_dispute">Disputar</string>
|
||||||
<string name="tangem_pay_explore_transaction">Explorar transacción</string>
|
<string name="tangem_pay_explore_transaction">Explorar transacción</string>
|
||||||
|
|
@ -1709,6 +1713,24 @@
|
||||||
<string name="tangempay_kyc_rejected_button_text">Ocultar el bloque KYC</string>
|
<string name="tangempay_kyc_rejected_button_text">Ocultar el bloque KYC</string>
|
||||||
<string name="tangempay_kyc_rejected_description">Lo sentimos, no pudimos verificar</string>
|
<string name="tangempay_kyc_rejected_description">Lo sentimos, no pudimos verificar</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">u identidad.</string>
|
<string name="tangempay_kyc_rejected_description_span">u identidad.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Sí — para usar una tarjeta Visa regulada, la verificación de identidad es obligatoria. El KYC lo gestiona Sumsub, socio de compliance.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">¿Tengo que compartir mis documentos?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">No. El KYC se aplica solo a la cuenta Tangem Pay. Tu Tangem Wallet sigue siendo un entorno independiente, de autocustodia y sin KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">¿El KYC se vincula con mi wallet?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — un proveedor global de KYC regulado y de confianza para más de 4,000 instituciones financieras — verifica tu identidad y guarda los resultados de forma segura conforme a las normas ISO 27001 y SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">¿Quién almacena mis datos personales y cómo se protegen?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">El saldo de la tarjeta está denominado en USDC en Polygon, pero puedes recargarlo con cualquier activo (USDT, SOL, ETH, BTC, XRP, etc.) usando los swaps integrados de Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">¿Qué cripto puedo gastar?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Gasta cripto en cualquier lugar — sin bancos, sin intermediarios y sin exchanges. El poder de la autocustodia unido a los pagos del día a día.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Compra online y con Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Aceptada en todo el mundo</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Úsala en todo el mundo</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">Solo 1% de FX-fee</string>
|
||||||
|
<string name="tangempay_newonboard_title">Consigue tu tarjeta Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Paga lo que ves</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Sin comisiones por compra, 1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Sin sorpresas</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 al mes,\n$0 de recarga</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Obtén tu tarjeta virtual Tangem Visa gratuita</string>
|
<string name="tangempay_onboarding_banner_description">Obtén tu tarjeta virtual Tangem Visa gratuita</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Usa USDC para pagos cotidianos</string>
|
<string name="tangempay_onboarding_banner_title">Usa USDC para pagos cotidianos</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Obtener tarjeta</string>
|
<string name="tangempay_onboarding_get_card_button_text">Obtener tarjeta</string>
|
||||||
|
|
@ -1719,6 +1741,7 @@
|
||||||
<string name="tangempay_onboarding_security_description">Se creará una cuenta de pago separada sin divulgar tus direcciones y activos</string>
|
<string name="tangempay_onboarding_security_description">Se creará una cuenta de pago separada sin divulgar tus direcciones y activos</string>
|
||||||
<string name="tangempay_onboarding_security_title">Privacidad inigualable</string>
|
<string name="tangempay_onboarding_security_title">Privacidad inigualable</string>
|
||||||
<string name="tangempay_onboarding_title">Obtén tu tarjeta Tangem Pay en minutos</string>
|
<string name="tangempay_onboarding_title">Obtén tu tarjeta Tangem Pay en minutos</string>
|
||||||
|
<string name="tangempay_pay_support">Soporte Pay</string>
|
||||||
<string name="tangempay_payment_account">Cuenta de pago</string>
|
<string name="tangempay_payment_account">Cuenta de pago</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay sesión expirada</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay sesión expirada</string>
|
||||||
<string name="tangempay_pin_validation_error_message">PIN no válido: evitar secuencias o repeticiones</string>
|
<string name="tangempay_pin_validation_error_message">PIN no válido: evitar secuencias o repeticiones</string>
|
||||||
|
|
@ -1736,7 +1759,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">Servicio temporalmente no disponible</string>
|
<string name="tangempay_service_unavailable_title">Servicio temporalmente no disponible</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">No es posible mostrar los datos en este momento, pero los pagos con tarjeta siguen funcionando.</string>
|
<string name="tangempay_service_unreachable_try_later">No es posible mostrar los datos en este momento, pero los pagos con tarjeta siguen funcionando.</string>
|
||||||
<string name="tangempay_set_pin_code">Establecer \nCódigo PIN</string>
|
<string name="tangempay_set_pin_code">Establecer \nCódigo PIN</string>
|
||||||
<string name="tangempay_status_deactivated">Tarjeta desactivada</string>
|
<string name="tangempay_status_deactivated">Cuenta cerrada</string>
|
||||||
<string name="tangempay_sync_needed">Usa la tarjeta o el anillo para renovar la sesión</string>
|
<string name="tangempay_sync_needed">Usa la tarjeta o el anillo para renovar la sesión</string>
|
||||||
<string name="tangempay_sync_needed_body">Usa la tarjeta o el anillo para renovar la sesión</string>
|
<string name="tangempay_sync_needed_body">Usa la tarjeta o el anillo para renovar la sesión</string>
|
||||||
<string name="tangempay_sync_needed_button">Restablecer acceso</string>
|
<string name="tangempay_sync_needed_button">Restablecer acceso</string>
|
||||||
|
|
|
||||||
|
|
@ -1530,6 +1530,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay en version bêta</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay en version bêta</string>
|
||||||
<string name="tangem_pay_card_frozen">Carte gelée</string>
|
<string name="tangem_pay_card_frozen">Carte gelée</string>
|
||||||
<string name="tangem_pay_card_payment">Paiement par carte</string>
|
<string name="tangem_pay_card_payment">Paiement par carte</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">Il disparaîtra de l’application</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">Clôturer la carte</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Retour</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">Fermer votre carte ?</string>
|
||||||
<string name="tangem_pay_deposit">Dépôt</string>
|
<string name="tangem_pay_deposit">Dépôt</string>
|
||||||
<string name="tangem_pay_dispute">Litige</string>
|
<string name="tangem_pay_dispute">Litige</string>
|
||||||
<string name="tangem_pay_explore_transaction">Explorer la transaction</string>
|
<string name="tangem_pay_explore_transaction">Explorer la transaction</string>
|
||||||
|
|
@ -1651,6 +1655,24 @@
|
||||||
<string name="tangempay_kyc_rejected_button_text">Masquer le bloc KYC</string>
|
<string name="tangempay_kyc_rejected_button_text">Masquer le bloc KYC</string>
|
||||||
<string name="tangempay_kyc_rejected_description">Désolé, nous n\'avons pas pu vérifier</string>
|
<string name="tangempay_kyc_rejected_description">Désolé, nous n\'avons pas pu vérifier</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">votre identité.</string>
|
<string name="tangempay_kyc_rejected_description_span">votre identité.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Oui — pour utiliser une carte Visa réglementée, la vérification d’identité est obligatoire. Le KYC est géré par Sumsub, partenaire conformité.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Dois-je fournir mes documents ?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">Non. Le KYC s’applique uniquement au compte Tangem Pay. Votre Tangem Wallet reste un environnement distinct, en self-custody et sans KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">Le KYC est-il lié à mon wallet ?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — prestataire KYC réglementé à l’échelle mondiale et approuvé par plus de 4,000 institutions financières — vérifie votre identité et stocke les résultats de manière sécurisée selon les normes ISO 27001 et SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Qui stocke mes données personnelles et comment sont-elles protégées ?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">Le solde de la carte est libellé en USDC sur Polygon, mais vous pouvez la recharger avec n’importe quel actif (USDT, SOL, ETH, BTC, XRP, etc.) grâce aux swaps intégrés de Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Quelles cryptos puis-je dépenser ?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Dépensez vos cryptos partout — sans banque, sans intermédiaire, sans exchange. La self-custody au service des paiements du quotidien.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Paiement en ligne et via Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Acceptée partout</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Utilisez-la partout</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">FX-fee ne sont que de 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">Obtenez votre carte Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Payez ce que vous voyez</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Aucun frais d’achat, \n1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Sans surprise</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 par mois,\n$0 de recharge</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Obtenez votre carte virtuelle Tangem Visa gratuite</string>
|
<string name="tangempay_onboarding_banner_description">Obtenez votre carte virtuelle Tangem Visa gratuite</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Utilisez USDC pour les paiements quotidiens</string>
|
<string name="tangempay_onboarding_banner_title">Utilisez USDC pour les paiements quotidiens</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Obtenir la carte</string>
|
<string name="tangempay_onboarding_get_card_button_text">Obtenir la carte</string>
|
||||||
|
|
@ -1661,6 +1683,7 @@
|
||||||
<string name="tangempay_onboarding_security_description">Un compte de paiement séparé sera créé sans divulguer vos adresses et actifs</string>
|
<string name="tangempay_onboarding_security_description">Un compte de paiement séparé sera créé sans divulguer vos adresses et actifs</string>
|
||||||
<string name="tangempay_onboarding_security_title">Confidentialité inégalée</string>
|
<string name="tangempay_onboarding_security_title">Confidentialité inégalée</string>
|
||||||
<string name="tangempay_onboarding_title">Obtenez votre carte Tangem Pay en minutes</string>
|
<string name="tangempay_onboarding_title">Obtenez votre carte Tangem Pay en minutes</string>
|
||||||
|
<string name="tangempay_pay_support">Assistance Pay</string>
|
||||||
<string name="tangempay_payment_account">Compte de paiement</string>
|
<string name="tangempay_payment_account">Compte de paiement</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay session expirée</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay session expirée</string>
|
||||||
<string name="tangempay_pin_validation_error_message">Code PIN invalide : évitez les séquences ou les répétitions</string>
|
<string name="tangempay_pin_validation_error_message">Code PIN invalide : évitez les séquences ou les répétitions</string>
|
||||||
|
|
@ -1678,7 +1701,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">Service temporairement indisponible</string>
|
<string name="tangempay_service_unavailable_title">Service temporairement indisponible</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Les données ne peuvent pas être affichées pour le moment, mais les paiements par carte fonctionnent toujours.</string>
|
<string name="tangempay_service_unreachable_try_later">Les données ne peuvent pas être affichées pour le moment, mais les paiements par carte fonctionnent toujours.</string>
|
||||||
<string name="tangempay_set_pin_code">Définir le \ncode PIN</string>
|
<string name="tangempay_set_pin_code">Définir le \ncode PIN</string>
|
||||||
<string name="tangempay_status_deactivated">Carte désactivée</string>
|
<string name="tangempay_status_deactivated">Compte clôturé</string>
|
||||||
<string name="tangempay_sync_needed">Utilisez carte ou bague pour renouveler la session</string>
|
<string name="tangempay_sync_needed">Utilisez carte ou bague pour renouveler la session</string>
|
||||||
<string name="tangempay_sync_needed_body">Utilisez carte ou bague pour renouveler la session</string>
|
<string name="tangempay_sync_needed_body">Utilisez carte ou bague pour renouveler la session</string>
|
||||||
<string name="tangempay_sync_needed_button">Restaurer l\'accès</string>
|
<string name="tangempay_sync_needed_button">Restaurer l\'accès</string>
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay ora in beta</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay ora in beta</string>
|
||||||
<string name="tangem_pay_card_frozen">Carta congelata</string>
|
<string name="tangem_pay_card_frozen">Carta congelata</string>
|
||||||
<string name="tangem_pay_card_payment">Pagamento con carta</string>
|
<string name="tangem_pay_card_payment">Pagamento con carta</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">Sparirà dall’app</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">Chiudere la carta</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Indietro</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">Chiudere la carta?</string>
|
||||||
<string name="tangem_pay_deposit">Deposito</string>
|
<string name="tangem_pay_deposit">Deposito</string>
|
||||||
<string name="tangem_pay_dispute">Contestazione</string>
|
<string name="tangem_pay_dispute">Contestazione</string>
|
||||||
<string name="tangem_pay_explore_transaction">Esplora transazione</string>
|
<string name="tangem_pay_explore_transaction">Esplora transazione</string>
|
||||||
|
|
@ -183,6 +187,24 @@
|
||||||
<string name="tangempay_kyc_rejected">Rifiutato</string>
|
<string name="tangempay_kyc_rejected">Rifiutato</string>
|
||||||
<string name="tangempay_kyc_rejected_description">Spiacenti, non siamo riusciti a verificare</string>
|
<string name="tangempay_kyc_rejected_description">Spiacenti, non siamo riusciti a verificare</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">la tua identità.</string>
|
<string name="tangempay_kyc_rejected_description_span">la tua identità.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Sì — per usare una carta Visa regolamentata, la verifica dell’identità è obbligatoria. Il KYC è gestito da Sumsub, partner compliance.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Devo condividere i miei documenti?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">No. Il KYC si applica solo all’account Tangem Pay. Il tuo Tangem Wallet resta un ambiente separato, self-custodial e senza KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">Il KYC è associato al mio wallet?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — provider KYC regolamentato a livello globale e scelto da oltre 4,000 istituzioni finanziarie — verifica la tua identità e conserva in modo sicuro i risultati secondo gli standard ISO 27001 e SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Chi conserva i miei dati personali e come vengono protetti?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">Il saldo della carta è denominato in USDC su Polygon, ma puoi ricaricarla con qualsiasi asset (USDT, SOL, ETH, BTC, XRP ecc.) tramite gli swap integrati di Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Quali crypto posso spendere?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Spendi crypto ovunque — senza banche, senza intermediari, senza exchange. La self-custody incontra i pagamenti di ogni giorno.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Acquista online e con Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Accettata ovunque</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Usala ovunque</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">Solo 1% di FX-fee</string>
|
||||||
|
<string name="tangempay_newonboard_title">Ottieni la tua carta Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Paga ciò che vedi</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Nessuna commissione sugli acquisti, 1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Nessuna sorpresa</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 al mese, \n$0 di ricarica</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Ottieni la tua carta virtuale Tangem Visa gratuita</string>
|
<string name="tangempay_onboarding_banner_description">Ottieni la tua carta virtuale Tangem Visa gratuita</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Usa USDC per i pagamenti quotidiani</string>
|
<string name="tangempay_onboarding_banner_title">Usa USDC per i pagamenti quotidiani</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Ottieni carta</string>
|
<string name="tangempay_onboarding_get_card_button_text">Ottieni carta</string>
|
||||||
|
|
@ -193,6 +215,7 @@
|
||||||
<string name="tangempay_onboarding_security_description">Verrà creato un conto di pagamento separato senza divulgare i tuoi indirizzi e asset</string>
|
<string name="tangempay_onboarding_security_description">Verrà creato un conto di pagamento separato senza divulgare i tuoi indirizzi e asset</string>
|
||||||
<string name="tangempay_onboarding_security_title">Privacy senza rivali</string>
|
<string name="tangempay_onboarding_security_title">Privacy senza rivali</string>
|
||||||
<string name="tangempay_onboarding_title">Ottieni la tua carta Tangem Pay in pochi minuti</string>
|
<string name="tangempay_onboarding_title">Ottieni la tua carta Tangem Pay in pochi minuti</string>
|
||||||
|
<string name="tangempay_pay_support">Assistenza Pay</string>
|
||||||
<string name="tangempay_payment_account">Conto di pagamento</string>
|
<string name="tangempay_payment_account">Conto di pagamento</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay sessione scaduta</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay sessione scaduta</string>
|
||||||
<string name="tangempay_pin_validation_error_message">PIN non valido: evitare sequenze o ripetizioni</string>
|
<string name="tangempay_pin_validation_error_message">PIN non valido: evitare sequenze o ripetizioni</string>
|
||||||
|
|
@ -209,7 +232,7 @@
|
||||||
<string name="tangempay_service_unavailable_description">Stiamo risolvendo un problema tecnico. Riprova più tardi.</string>
|
<string name="tangempay_service_unavailable_description">Stiamo risolvendo un problema tecnico. Riprova più tardi.</string>
|
||||||
<string name="tangempay_service_unavailable_title">Servizio temporaneamente non disponibile</string>
|
<string name="tangempay_service_unavailable_title">Servizio temporaneamente non disponibile</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Al momento non è possibile visualizzare i dati, ma i pagamenti con carta continuano a funzionare.</string>
|
<string name="tangempay_service_unreachable_try_later">Al momento non è possibile visualizzare i dati, ma i pagamenti con carta continuano a funzionare.</string>
|
||||||
<string name="tangempay_status_deactivated">Carta disattivata</string>
|
<string name="tangempay_status_deactivated">Conto chiuso</string>
|
||||||
<string name="tangempay_sync_needed">Usa la carta o l\'anello per rinnovare la sessione</string>
|
<string name="tangempay_sync_needed">Usa la carta o l\'anello per rinnovare la sessione</string>
|
||||||
<string name="tangempay_sync_needed_body">Usa la carta o l\'anello per rinnovare la sessione</string>
|
<string name="tangempay_sync_needed_body">Usa la carta o l\'anello per rinnovare la sessione</string>
|
||||||
<string name="tangempay_sync_needed_title">Tangem Pay sessione scaduta</string>
|
<string name="tangempay_sync_needed_title">Tangem Pay sessione scaduta</string>
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@
|
||||||
<string name="add_custom_token_title">カスタムトークンの追加</string>
|
<string name="add_custom_token_title">カスタムトークンの追加</string>
|
||||||
<string name="add_tokens_title">トークンの管理</string>
|
<string name="add_tokens_title">トークンの管理</string>
|
||||||
<string name="addfunds_buy_row_description">クレジットカードまたは銀行口座</string>
|
<string name="addfunds_buy_row_description">クレジットカードまたは銀行口座</string>
|
||||||
|
<string name="addfunds_fund_token">トークンを追加</string>
|
||||||
<string name="addfunds_receive_row_description">アドレスまたはQRコードを共有</string>
|
<string name="addfunds_receive_row_description">アドレスまたはQRコードを共有</string>
|
||||||
<string name="addfunds_swap_row_description">自分のポートフォリオ間で</string>
|
<string name="addfunds_swap_row_description">自分のポートフォリオ間で</string>
|
||||||
<string name="addfunds_you_receive_title">受け取る</string>
|
<string name="addfunds_you_receive_title">受け取る</string>
|
||||||
|
|
@ -652,6 +653,11 @@
|
||||||
<string name="feedback_subject_support_tangem">Tangemへのフィードバック</string>
|
<string name="feedback_subject_support_tangem">Tangemへのフィードバック</string>
|
||||||
<string name="feedback_subject_tx_failed">取引を送信できません</string>
|
<string name="feedback_subject_tx_failed">取引を送信できません</string>
|
||||||
<string name="feedback_token_description_error">コインの説明エラー</string>
|
<string name="feedback_token_description_error">コインの説明エラー</string>
|
||||||
|
<string name="force_update_banner_message">アプリを正常にご利用いただくため、最新バージョンにアップデートしてください</string>
|
||||||
|
<string name="force_update_banner_title">アップデートが必要です</string>
|
||||||
|
<string name="force_update_button">アップデート</string>
|
||||||
|
<string name="force_update_warning_message">アプリを正常にご利用いただくため、最新バージョンにアップデートしてください。</string>
|
||||||
|
<string name="force_update_warning_title">アップデートが必要です</string>
|
||||||
<string name="gasless_not_enough_funds_to_cover_token_fee">残高不足</string>
|
<string name="gasless_not_enough_funds_to_cover_token_fee">残高不足</string>
|
||||||
<string name="gasless_transaction_fee">取引手数料</string>
|
<string name="gasless_transaction_fee">取引手数料</string>
|
||||||
<string name="generic_error">エラーが発生しました</string>
|
<string name="generic_error">エラーが発生しました</string>
|
||||||
|
|
@ -777,8 +783,8 @@
|
||||||
<string name="koinos_mana_level_description">Koinosネットワークでは、ネットワーク手数料としてManaが必要です。あなたは%1$s / %2$sManaを持っています。</string>
|
<string name="koinos_mana_level_description">Koinosネットワークでは、ネットワーク手数料としてManaが必要です。あなたは%1$s / %2$sManaを持っています。</string>
|
||||||
<string name="koinos_mana_level_title">Manaレベル</string>
|
<string name="koinos_mana_level_title">Manaレベル</string>
|
||||||
<string name="main_add_and_manage_tokens">追加・管理</string>
|
<string name="main_add_and_manage_tokens">追加・管理</string>
|
||||||
<string name="main_add_funds_promo_description">暗号資産を入金またはカードで購入</string>
|
<string name="main_add_funds_promo_description">暗号資産を購入または受け取って、ウォレットを使い始めましょう。</string>
|
||||||
<string name="main_add_funds_promo_title">入金して、運用や取引を始めましょう。</string>
|
<string name="main_add_funds_promo_title">はじめての暗号資産を手に入れる</string>
|
||||||
<string name="main_empty_tokens_list_message">暗号資産および取引の追跡を開始するには、トークンを追加してください</string>
|
<string name="main_empty_tokens_list_message">暗号資産および取引の追跡を開始するには、トークンを追加してください</string>
|
||||||
<string name="main_manage_tokens">トークンの管理</string>
|
<string name="main_manage_tokens">トークンの管理</string>
|
||||||
<string name="main_qr_scan_hint">QRコードをスキャンして送金するか、アプリに接続します。</string>
|
<string name="main_qr_scan_hint">QRコードをスキャンして送金するか、アプリに接続します。</string>
|
||||||
|
|
@ -1659,11 +1665,13 @@
|
||||||
<string name="tangem_pay_freeze_card_failed">カードを凍結できませんでした。しばらくしてからもう一度お試しください。</string>
|
<string name="tangem_pay_freeze_card_failed">カードを凍結できませんでした。しばらくしてからもう一度お試しください。</string>
|
||||||
<string name="tangem_pay_freeze_card_freeze">一時停止</string>
|
<string name="tangem_pay_freeze_card_freeze">一時停止</string>
|
||||||
<string name="tangem_pay_freeze_card_success">カードが凍結されています</string>
|
<string name="tangem_pay_freeze_card_success">カードが凍結されています</string>
|
||||||
|
<string name="tangem_pay_freeze_card_unfreeze">凍結を解除</string>
|
||||||
<string name="tangem_pay_get_help">サポートを受ける</string>
|
<string name="tangem_pay_get_help">サポートを受ける</string>
|
||||||
<string name="tangem_pay_history_item_spend_mc_declined_reason">理由:%s</string>
|
<string name="tangem_pay_history_item_spend_mc_declined_reason">理由:%s</string>
|
||||||
<string name="tangem_pay_history_item_spend_mc_title_format" formatted="false">%s・%s</string>
|
<string name="tangem_pay_history_item_spend_mc_title_format" formatted="false">%s・%s</string>
|
||||||
<string name="tangem_pay_history_item_spend_mcc">MCC %s</string>
|
<string name="tangem_pay_history_item_spend_mcc">MCC %s</string>
|
||||||
<string name="tangem_pay_other">その他</string>
|
<string name="tangem_pay_other">その他</string>
|
||||||
|
<string name="tangem_pay_pin_code_title">PINコード</string>
|
||||||
<string name="tangem_pay_rooted_device_subtitle">Root化された端末では使用できません</string>
|
<string name="tangem_pay_rooted_device_subtitle">Root化された端末では使用できません</string>
|
||||||
<string name="tangem_pay_status_completed">完了</string>
|
<string name="tangem_pay_status_completed">完了</string>
|
||||||
<string name="tangem_pay_status_declined">拒否</string>
|
<string name="tangem_pay_status_declined">拒否</string>
|
||||||
|
|
@ -1739,6 +1747,7 @@
|
||||||
<string name="tangempay_card_page_daily_limit_change">変更</string>
|
<string name="tangempay_card_page_daily_limit_change">変更</string>
|
||||||
<string name="tangempay_card_page_daily_limit_current_limit">現在の利用限度額</string>
|
<string name="tangempay_card_page_daily_limit_current_limit">現在の利用限度額</string>
|
||||||
<string name="tangempay_card_page_daily_limit_error_description">1日の利用限度額を読み込めませんでした。もう一度お試しください。</string>
|
<string name="tangempay_card_page_daily_limit_error_description">1日の利用限度額を読み込めませんでした。もう一度お試しください。</string>
|
||||||
|
<string name="tangempay_card_page_daily_limit_error_subtitle">読み込み直して再試行</string>
|
||||||
<string name="tangempay_card_page_daily_limit_error_title">1日の利用限度額を表示できません</string>
|
<string name="tangempay_card_page_daily_limit_error_title">1日の利用限度額を表示できません</string>
|
||||||
<string name="tangempay_card_page_daily_limit_success_description">いつでも再度変更できます</string>
|
<string name="tangempay_card_page_daily_limit_success_description">いつでも再度変更できます</string>
|
||||||
<string name="tangempay_card_page_daily_limit_success_title">1日の上限を設定しました</string>
|
<string name="tangempay_card_page_daily_limit_success_title">1日の上限を設定しました</string>
|
||||||
|
|
@ -1788,6 +1797,24 @@
|
||||||
<string name="tangempay_kyc_rejected_description_span">本人確認ができませんでした。</string>
|
<string name="tangempay_kyc_rejected_description_span">本人確認ができませんでした。</string>
|
||||||
<string name="tangempay_maximum_cards_issued_description">最大3枚までカードを保有できます。新しいカードを追加するには、いずれかのカードを削除してください。</string>
|
<string name="tangempay_maximum_cards_issued_description">最大3枚までカードを保有できます。新しいカードを追加するには、いずれかのカードを削除してください。</string>
|
||||||
<string name="tangempay_maximum_cards_issued_title">カード発行枚数の上限に達しました</string>
|
<string name="tangempay_maximum_cards_issued_title">カード発行枚数の上限に達しました</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">はい。規制対象の Visa カードを利用するには、本人確認が必須です。KYC は のコンプライアンスパートナーである Sumsub が担当します。</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">本人確認書類の提出は必要ですか?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">いいえ。KYC は Tangem Pay アカウントにのみ適用されます。Tangem Wallet 自体は、引き続き独立したセルフカストディ型の非 KYC 環境です。</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">KYC は私のウォレットに紐づきますか?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub は世界的に規制された KYC プロバイダーで、4,000+ の金融機関に信頼されています。ISO 27001 と SOC 2 に準拠し、本人確認結果を安全に保管します。</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">個人データは誰が保管し、どう保護されますか?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">カード残高は Polygon 上の USDC 建てですが、Tangem の内蔵スワップ機能を使えば、任意の資産(USDT、SOL、ETH、BTC、XRP など)でチャージできます。</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">どの暗号資産を使えますか?</string>
|
||||||
|
<string name="tangempay_newonboard_body">銀行なし、中間業者なし、取引所なしで、どこでも暗号資産を使えます。セルフカストディの力を、日常の支払いに。</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">オンライン決済や Apple Pay に対応</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">世界中で使える</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">世界中で使える</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">為替手数料は 1% だけ</string>
|
||||||
|
<string name="tangempay_newonboard_title">Tangem Payカードを手に入れよう</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">見たまま支払い</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">購入手数料なし、\n1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">あとから驚きなし</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">月額 0 ドル、\nチャージ 0 ドル</string>
|
||||||
<string name="tangempay_onboarding_banner_description">無料のTangem Visaバーチャルカードを入手</string>
|
<string name="tangempay_onboarding_banner_description">無料のTangem Visaバーチャルカードを入手</string>
|
||||||
<string name="tangempay_onboarding_banner_title">日常の支払いにUSDCを利用</string>
|
<string name="tangempay_onboarding_banner_title">日常の支払いにUSDCを利用</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">カードをGET</string>
|
<string name="tangempay_onboarding_get_card_button_text">カードをGET</string>
|
||||||
|
|
@ -1818,7 +1845,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">サービスは一時的に利用できません</string>
|
<string name="tangempay_service_unavailable_title">サービスは一時的に利用できません</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">現在、データを表示できませんが、カードでのお支払いは引き続きご利用いただけます。</string>
|
<string name="tangempay_service_unreachable_try_later">現在、データを表示できませんが、カードでのお支払いは引き続きご利用いただけます。</string>
|
||||||
<string name="tangempay_set_pin_code">\nPINコードの設定</string>
|
<string name="tangempay_set_pin_code">\nPINコードの設定</string>
|
||||||
<string name="tangempay_status_deactivated">カード無効化済み</string>
|
<string name="tangempay_status_deactivated">口座は閉鎖されました</string>
|
||||||
<string name="tangempay_status_replacing">カードを交換中</string>
|
<string name="tangempay_status_replacing">カードを交換中</string>
|
||||||
<string name="tangempay_sync_needed">カードまたはリングでセッションを更新してください</string>
|
<string name="tangempay_sync_needed">カードまたはリングでセッションを更新してください</string>
|
||||||
<string name="tangempay_sync_needed_body">カードまたはリングでセッションを更新してください</string>
|
<string name="tangempay_sync_needed_body">カードまたはリングでセッションを更新してください</string>
|
||||||
|
|
|
||||||
|
|
@ -1823,6 +1823,24 @@
|
||||||
<string name="tangempay_kyc_rejected_description_span">Seu perfil.</string>
|
<string name="tangempay_kyc_rejected_description_span">Seu perfil.</string>
|
||||||
<string name="tangempay_maximum_cards_issued_description">Você pode ter até 3 cartões. Exclua um para adicionar um novo.</string>
|
<string name="tangempay_maximum_cards_issued_description">Você pode ter até 3 cartões. Exclua um para adicionar um novo.</string>
|
||||||
<string name="tangempay_maximum_cards_issued_title">Número máximo de cartões emitidos</string>
|
<string name="tangempay_maximum_cards_issued_title">Número máximo de cartões emitidos</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Sim — para usar um cartão Visa regulado, a verificação de identidade é obrigatória. O KYC é feito pela Sumsub, parceira de compliance.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Preciso enviar meus documentos?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">Não. O KYC se aplica apenas à conta Tangem Pay. Sua Tangem Wallet continua sendo um ambiente separado, de autocustódia e sem KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">O KYC fica vinculado à minha wallet?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">A Sumsub — provedora global de KYC, regulamentada e confiável para mais de 4,000 instituições financeiras — verifica sua identidade e armazena os resultados com segurança, seguindo os padrões ISO 27001 e SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Quem armazena meus dados pessoais e como eles são protegidos?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">O saldo do cartão é denominado em USDC na Polygon, mas você pode carregá-lo com qualquer ativo (USDT, SOL, ETH, BTC, XRP etc.) usando os swaps integrados da Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Quais criptos posso gastar?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Gaste cripto em qualquer lugar — sem bancos, sem intermediários, sem exchanges. A força da autocustódia nos pagamentos do dia a dia.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Compre online e com Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Aceito no mundo todo</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Use no mundo todo</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">Taxa FX de só 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">Peça seu cartão Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Pague o que vê</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Sem taxa de compra, 1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Sem surpresas</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 por mês, \n$0 de recarga</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Obtenha seu cartão virtual Visa Tangem grátis.</string>
|
<string name="tangempay_onboarding_banner_description">Obtenha seu cartão virtual Visa Tangem grátis.</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Use USDC para pagamentos do dia a dia.</string>
|
<string name="tangempay_onboarding_banner_title">Use USDC para pagamentos do dia a dia.</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Obter cartão</string>
|
<string name="tangempay_onboarding_get_card_button_text">Obter cartão</string>
|
||||||
|
|
@ -1853,7 +1871,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">Serviço temporariamente indisponível</string>
|
<string name="tangempay_service_unavailable_title">Serviço temporariamente indisponível</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Não foi possível exibir os detalhes. No entanto, os pagamentos com cartão ainda estão funcionando.</string>
|
<string name="tangempay_service_unreachable_try_later">Não foi possível exibir os detalhes. No entanto, os pagamentos com cartão ainda estão funcionando.</string>
|
||||||
<string name="tangempay_set_pin_code">Defina o código PIN.</string>
|
<string name="tangempay_set_pin_code">Defina o código PIN.</string>
|
||||||
<string name="tangempay_status_deactivated">Cartão desativado</string>
|
<string name="tangempay_status_deactivated">Conta encerrada</string>
|
||||||
<string name="tangempay_status_replacing">Substituindo seu cartão</string>
|
<string name="tangempay_status_replacing">Substituindo seu cartão</string>
|
||||||
<string name="tangempay_sync_needed">Use o cartão ou anel para renovar a sessão</string>
|
<string name="tangempay_sync_needed">Use o cartão ou anel para renovar a sessão</string>
|
||||||
<string name="tangempay_sync_needed_body">Use o cartão ou anel para renovar a sessão</string>
|
<string name="tangempay_sync_needed_body">Use o cartão ou anel para renovar a sessão</string>
|
||||||
|
|
|
||||||
|
|
@ -1665,6 +1665,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay в режиме beta</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay в режиме beta</string>
|
||||||
<string name="tangem_pay_card_frozen">Карта заморожена</string>
|
<string name="tangem_pay_card_frozen">Карта заморожена</string>
|
||||||
<string name="tangem_pay_card_payment">Оплата картой</string>
|
<string name="tangem_pay_card_payment">Оплата картой</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">Она сразу пропадёт из приложения</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">Закрыть карту</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Назад</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">Закрыть карту?</string>
|
||||||
<string name="tangem_pay_deposit">Пополнение</string>
|
<string name="tangem_pay_deposit">Пополнение</string>
|
||||||
<string name="tangem_pay_dispute">Оспорить</string>
|
<string name="tangem_pay_dispute">Оспорить</string>
|
||||||
<string name="tangem_pay_explore_transaction">Посмотреть в обозревателе</string>
|
<string name="tangem_pay_explore_transaction">Посмотреть в обозревателе</string>
|
||||||
|
|
@ -1675,11 +1679,13 @@
|
||||||
<string name="tangem_pay_freeze_card_failed">Не удалось заморозить карту, попробуйте еще раз</string>
|
<string name="tangem_pay_freeze_card_failed">Не удалось заморозить карту, попробуйте еще раз</string>
|
||||||
<string name="tangem_pay_freeze_card_freeze">Заморозить</string>
|
<string name="tangem_pay_freeze_card_freeze">Заморозить</string>
|
||||||
<string name="tangem_pay_freeze_card_success">Карта заморожена</string>
|
<string name="tangem_pay_freeze_card_success">Карта заморожена</string>
|
||||||
|
<string name="tangem_pay_freeze_card_unfreeze">Разморозить</string>
|
||||||
<string name="tangem_pay_get_help">Обратиться в поддержку</string>
|
<string name="tangem_pay_get_help">Обратиться в поддержку</string>
|
||||||
|
<string name="tangem_pay_history_item_spend_mc_declined_reason">Причина: %s</string>
|
||||||
<string name="tangem_pay_history_item_spend_mc_title_format" formatted="false">%s・%s</string>
|
<string name="tangem_pay_history_item_spend_mc_title_format" formatted="false">%s・%s</string>
|
||||||
<string name="tangem_pay_history_item_spend_mcc">MCC %s</string>
|
<string name="tangem_pay_history_item_spend_mcc">MCC %s</string>
|
||||||
<string name="tangem_pay_other">Другое</string>
|
<string name="tangem_pay_other">Другое</string>
|
||||||
<string name="tangem_pay_rooted_device_subtitle">Невозможно использовать на устройствах с root-доступом.</string>
|
<string name="tangem_pay_rooted_device_subtitle">Нельзя использовать на устройствах с root-доступом</string>
|
||||||
<string name="tangem_pay_status_completed">Успешно завершено</string>
|
<string name="tangem_pay_status_completed">Успешно завершено</string>
|
||||||
<string name="tangem_pay_status_declined">Отклонено</string>
|
<string name="tangem_pay_status_declined">Отклонено</string>
|
||||||
<string name="tangem_pay_status_pending">В процессе</string>
|
<string name="tangem_pay_status_pending">В процессе</string>
|
||||||
|
|
@ -1786,6 +1792,24 @@
|
||||||
<string name="tangempay_kyc_rejected_button_text">Скрыть KYC с главной</string>
|
<string name="tangempay_kyc_rejected_button_text">Скрыть KYC с главной</string>
|
||||||
<string name="tangempay_kyc_rejected_description">Извините, мы не смогли подтвердить</string>
|
<string name="tangempay_kyc_rejected_description">Извините, мы не смогли подтвердить</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">ваш профиль.</string>
|
<string name="tangempay_kyc_rejected_description_span">ваш профиль.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Да — для использования регулируемой карты Visa нужна обязательная проверка личности. KYC проводит Sumsub, комплаенс-партнёр.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Нужно предоставить документы?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">Нет. KYC привязывается только к Tangem Pay. Сам Tangem Wallet остаётся полностью отдельной self-custodial средой без KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">KYC будет связан с моим кошельком?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — глобально регулируемый KYC-провайдер, которому доверяют более 4,000 финансовых организаций, — проверяет личность и безопасно хранит результаты по стандартам ISO 27001 и SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Кто хранит мои персональные данные и как они защищены?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">Баланс карты работает на USDC в сети Polygon, но пополнить его можно любым активом (USDT, SOL, ETH, BTC, XRP и др.) через удобные встроенные свопы Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Какую крипту можно тратить?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Тратьте крипту где угодно — без банков, посредников и бирж. Сила self-custody для повседневных платежей.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Платите онлайн и c Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Принимается везде</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">За покупки не в USD</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">FX-комиссия 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">Откройте карту Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Платите сколько видите</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Без комиссии за покупки, 1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Без сюрпризов</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 в месяц, \n$0 за пополнение</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Откройте бесплатную виртуальную карту Tangem Visa</string>
|
<string name="tangempay_onboarding_banner_description">Откройте бесплатную виртуальную карту Tangem Visa</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Оплачивайте ежедневные покупки в USDC</string>
|
<string name="tangempay_onboarding_banner_title">Оплачивайте ежедневные покупки в USDC</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Открыть карту</string>
|
<string name="tangempay_onboarding_get_card_button_text">Открыть карту</string>
|
||||||
|
|
@ -1813,7 +1837,7 @@
|
||||||
<string name="tangempay_service_unavailable_description">Мы устраняем техническую проблему. Пожалуйста, попробуйте позже.</string>
|
<string name="tangempay_service_unavailable_description">Мы устраняем техническую проблему. Пожалуйста, попробуйте позже.</string>
|
||||||
<string name="tangempay_service_unavailable_title">Сервис временно недоступен</string>
|
<string name="tangempay_service_unavailable_title">Сервис временно недоступен</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Не можем показать данные карты, но оплаты продолжают работать.</string>
|
<string name="tangempay_service_unreachable_try_later">Не можем показать данные карты, но оплаты продолжают работать.</string>
|
||||||
<string name="tangempay_status_deactivated">Карта отключена</string>
|
<string name="tangempay_status_deactivated">Аккаунт закрыт</string>
|
||||||
<string name="tangempay_sync_needed">Используйте карту или кольцо для обновления сессии</string>
|
<string name="tangempay_sync_needed">Используйте карту или кольцо для обновления сессии</string>
|
||||||
<string name="tangempay_sync_needed_body">Используйте карту или кольцо для обновления сессии</string>
|
<string name="tangempay_sync_needed_body">Используйте карту или кольцо для обновления сессии</string>
|
||||||
<string name="tangempay_sync_needed_button">Обновить сессию</string>
|
<string name="tangempay_sync_needed_button">Обновить сессию</string>
|
||||||
|
|
|
||||||
|
|
@ -1582,6 +1582,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay у режимі beta</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay у режимі beta</string>
|
||||||
<string name="tangem_pay_card_frozen">Картку заморожено</string>
|
<string name="tangem_pay_card_frozen">Картку заморожено</string>
|
||||||
<string name="tangem_pay_card_payment">Оплата карткою</string>
|
<string name="tangem_pay_card_payment">Оплата карткою</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">Воно зникне з застосунку</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">Закрити картку</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">Назад</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">Закрити вашу картку?</string>
|
||||||
<string name="tangem_pay_deposit">Депозит</string>
|
<string name="tangem_pay_deposit">Депозит</string>
|
||||||
<string name="tangem_pay_dispute">Оскаржити</string>
|
<string name="tangem_pay_dispute">Оскаржити</string>
|
||||||
<string name="tangem_pay_explore_transaction">Переглянути транзакцію</string>
|
<string name="tangem_pay_explore_transaction">Переглянути транзакцію</string>
|
||||||
|
|
@ -1703,6 +1707,24 @@
|
||||||
<string name="tangempay_kyc_rejected_button_text">Приховати блок KYC</string>
|
<string name="tangempay_kyc_rejected_button_text">Приховати блок KYC</string>
|
||||||
<string name="tangempay_kyc_rejected_description">Вибачте, ми не змогли підтвердити</string>
|
<string name="tangempay_kyc_rejected_description">Вибачте, ми не змогли підтвердити</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">вашу особу.</string>
|
<string name="tangempay_kyc_rejected_description_span">вашу особу.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">Так — для користування регульованою карткою Visa обов’язкова верифікація особи. KYC проводить Sumsub, compliance-партнер.</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">Чи потрібно надавати документи?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">Ні. KYC стосується лише акаунта Tangem Pay. Сам Tangem Wallet залишається окремим self-custodial середовищем без KYC.</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">KYC буде пов’язаний із моїм гаманцем?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub — глобально регульований KYC-провайдер, якому довіряють понад 4,000 фінансових установ, — перевіряє особу та безпечно зберігає результати відповідно до стандартів ISO 27001 і SOC 2.</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">Хто зберігає мої персональні дані та як вони захищені?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">Баланс картки номінований в USDC у мережі Polygon, але поповнювати його можна будь-яким активом (USDT, SOL, ETH, BTC, XRP тощо) через вбудовані свопи Tangem.</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">Яку крипту можна витрачати?</string>
|
||||||
|
<string name="tangempay_newonboard_body">Витрачайте крипту будь-де — без банків, посередників і бірж. Сила self-custody для щоденних платежів.</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">Платіть онлайн і через Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">Приймається по всьому світу</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">Користуйтеся всюди</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">FX-комісія лише 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">Отримайте картку Tangem Pay</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">Платіть скільки бачите</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">Без комісії за покупки, 1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">Без сюрпризів</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">$0 на місяць, \n$0 за поповнення</string>
|
||||||
<string name="tangempay_onboarding_banner_description">Отримайте безкоштовну віртуальну картку Tangem Visa</string>
|
<string name="tangempay_onboarding_banner_description">Отримайте безкоштовну віртуальну картку Tangem Visa</string>
|
||||||
<string name="tangempay_onboarding_banner_title">Використовуйте USDC для щоденних платежів</string>
|
<string name="tangempay_onboarding_banner_title">Використовуйте USDC для щоденних платежів</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">Отримати картку</string>
|
<string name="tangempay_onboarding_get_card_button_text">Отримати картку</string>
|
||||||
|
|
@ -1713,6 +1735,7 @@
|
||||||
<string name="tangempay_onboarding_security_description">Буде створено окремий платіжний рахунок без розкриття ваших адрес та активів</string>
|
<string name="tangempay_onboarding_security_description">Буде створено окремий платіжний рахунок без розкриття ваших адрес та активів</string>
|
||||||
<string name="tangempay_onboarding_security_title">Неперевершена конфіденційність</string>
|
<string name="tangempay_onboarding_security_title">Неперевершена конфіденційність</string>
|
||||||
<string name="tangempay_onboarding_title">Отримайте картку Tangem Pay за лічені хвилини</string>
|
<string name="tangempay_onboarding_title">Отримайте картку Tangem Pay за лічені хвилини</string>
|
||||||
|
<string name="tangempay_pay_support">Підтримка Pay</string>
|
||||||
<string name="tangempay_payment_account">Платіжний акаунт</string>
|
<string name="tangempay_payment_account">Платіжний акаунт</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay · Сесія закінчилася</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay · Сесія закінчилася</string>
|
||||||
<string name="tangempay_pin_validation_error_message">Слабкий ПІН: не використовуйте повторів або послідовностей.</string>
|
<string name="tangempay_pin_validation_error_message">Слабкий ПІН: не використовуйте повторів або послідовностей.</string>
|
||||||
|
|
@ -1730,7 +1753,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">Сервіс тимчасово недоступний</string>
|
<string name="tangempay_service_unavailable_title">Сервіс тимчасово недоступний</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">Не можемо показати дані картки, але оплати продовжують працювати.</string>
|
<string name="tangempay_service_unreachable_try_later">Не можемо показати дані картки, але оплати продовжують працювати.</string>
|
||||||
<string name="tangempay_set_pin_code">Встановіть \nPIN-код</string>
|
<string name="tangempay_set_pin_code">Встановіть \nPIN-код</string>
|
||||||
<string name="tangempay_status_deactivated">Картку деактивовано</string>
|
<string name="tangempay_status_deactivated">Рахунок закрито</string>
|
||||||
<string name="tangempay_sync_needed">Використайте картку або кільце для поновлення сесії</string>
|
<string name="tangempay_sync_needed">Використайте картку або кільце для поновлення сесії</string>
|
||||||
<string name="tangempay_sync_needed_body">Використайте картку або кільце для поновлення сесії</string>
|
<string name="tangempay_sync_needed_body">Використайте картку або кільце для поновлення сесії</string>
|
||||||
<string name="tangempay_sync_needed_button">Відновити доступ</string>
|
<string name="tangempay_sync_needed_button">Відновити доступ</string>
|
||||||
|
|
|
||||||
|
|
@ -1786,6 +1786,24 @@
|
||||||
<string name="tangempay_kyc_rejected_description_span">您的个人资料。</string>
|
<string name="tangempay_kyc_rejected_description_span">您的个人资料。</string>
|
||||||
<string name="tangempay_maximum_cards_issued_description">您最多可以添加 3 张卡片。删除一张即可添加新卡片。</string>
|
<string name="tangempay_maximum_cards_issued_description">您最多可以添加 3 张卡片。删除一张即可添加新卡片。</string>
|
||||||
<string name="tangempay_maximum_cards_issued_title">最大发卡量</string>
|
<string name="tangempay_maximum_cards_issued_title">最大发卡量</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">需要。使用合规监管的 Visa 卡,必须完成身份验证。KYC 由 Sumsub(的合规合作伙伴)处理。</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">我需要提供证件吗?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">不会。KYC 仅适用于 Tangem Pay 账户。你的 Tangem Wallet 仍是独立的、自托管、无需 KYC 的环境。</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">KYC 会关联我的钱包吗?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub 是受全球监管的 KYC 服务商,已获 4,000+ 家金融机构信赖;其依据 ISO 27001 和 SOC 2 标准验证身份并安全保存结果。</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">谁会存储我的个人数据?如何保护?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">卡片余额以 Polygon 上的 USDC 计价,但你可通过 Tangem 内置的便捷兑换功能,使用任意资产(USDT、SOL、ETH、BTC、XRP 等)充值。</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">我可以花哪些加密资产?</string>
|
||||||
|
<string name="tangempay_newonboard_body">随时随地花加密资产——无需银行、无需中介、无需交易所。自托管的自由,结合日常支付体验。</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">可在线支付,也支持 Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">全球受理</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">全球都能用</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">汇兑费仅 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">获取你的 Tangem Pay 卡</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">看多少,付多少</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">无消费手续费,\n1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">没有隐藏费用</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">月费 0 美元,\n充值费 0 美元</string>
|
||||||
<string name="tangempay_onboarding_banner_description">免费领取您的 Tangem Visa 虚拟卡</string>
|
<string name="tangempay_onboarding_banner_description">免费领取您的 Tangem Visa 虚拟卡</string>
|
||||||
<string name="tangempay_onboarding_banner_title">使用 USDC 进行日常支付</string>
|
<string name="tangempay_onboarding_banner_title">使用 USDC 进行日常支付</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">获取卡片</string>
|
<string name="tangempay_onboarding_get_card_button_text">获取卡片</string>
|
||||||
|
|
@ -1816,7 +1834,7 @@
|
||||||
<string name="tangempay_service_unavailable_title">服务暂时不可用</string>
|
<string name="tangempay_service_unavailable_title">服务暂时不可用</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">无法显示详细信息。但刷卡支付功能仍然可用。</string>
|
<string name="tangempay_service_unreachable_try_later">无法显示详细信息。但刷卡支付功能仍然可用。</string>
|
||||||
<string name="tangempay_set_pin_code">设置 PIN 码</string>
|
<string name="tangempay_set_pin_code">设置 PIN 码</string>
|
||||||
<string name="tangempay_status_deactivated">卡片已停用</string>
|
<string name="tangempay_status_deactivated">账户已关闭</string>
|
||||||
<string name="tangempay_status_replacing">更换您的卡片</string>
|
<string name="tangempay_status_replacing">更换您的卡片</string>
|
||||||
<string name="tangempay_sync_needed">用卡或戒指续期会话</string>
|
<string name="tangempay_sync_needed">用卡或戒指续期会话</string>
|
||||||
<string name="tangempay_sync_needed_body">用卡或戒指续期会话</string>
|
<string name="tangempay_sync_needed_body">用卡或戒指续期会话</string>
|
||||||
|
|
|
||||||
|
|
@ -318,6 +318,10 @@
|
||||||
<string name="tangem_pay_beta_notification_title">Tangem Pay現已開放測試版</string>
|
<string name="tangem_pay_beta_notification_title">Tangem Pay現已開放測試版</string>
|
||||||
<string name="tangem_pay_card_frozen">卡片已凍結</string>
|
<string name="tangem_pay_card_frozen">卡片已凍結</string>
|
||||||
<string name="tangem_pay_card_payment">信用卡支付</string>
|
<string name="tangem_pay_card_payment">信用卡支付</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_description">它將從應用程式中消失</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_primary_button_title">關閉卡片</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_secondary_button_title">返回</string>
|
||||||
|
<string name="tangem_pay_close_card_popup_title">關閉您的卡片?</string>
|
||||||
<string name="tangem_pay_deposit">充值</string>
|
<string name="tangem_pay_deposit">充值</string>
|
||||||
<string name="tangem_pay_dispute">爭議</string>
|
<string name="tangem_pay_dispute">爭議</string>
|
||||||
<string name="tangem_pay_explore_transaction">探索交易</string>
|
<string name="tangem_pay_explore_transaction">探索交易</string>
|
||||||
|
|
@ -409,6 +413,24 @@
|
||||||
<string name="tangempay_kyc_rejected">已拒絕</string>
|
<string name="tangempay_kyc_rejected">已拒絕</string>
|
||||||
<string name="tangempay_kyc_rejected_description">抱歉,我們無法驗證</string>
|
<string name="tangempay_kyc_rejected_description">抱歉,我們無法驗證</string>
|
||||||
<string name="tangempay_kyc_rejected_description_span">您的身份</string>
|
<string name="tangempay_kyc_rejected_description_span">您的身份</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_body">需要。使用受監管的 Visa 卡,必須完成身分驗證。KYC 由 Sumsub(的合規合作夥伴)處理。</string>
|
||||||
|
<string name="tangempay_newonboard_Q1_title">我需要提交證件嗎?</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_body">不會。KYC 僅適用於 Tangem Pay 帳戶。你的 Tangem Wallet 仍是獨立、自我託管且無需 KYC 的環境。</string>
|
||||||
|
<string name="tangempay_newonboard_Q2_title">KYC 會和我的錢包綁定嗎?</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_body">Sumsub 是受全球監管的 KYC 服務商,獲 4,000+ 家金融機構信賴;其依 ISO 27001 與 SOC 2 標準完成驗證並安全保存結果。</string>
|
||||||
|
<string name="tangempay_newonboard_Q3_title">誰會保存我的個人資料?如何保障安全?</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_body">卡片餘額以 Polygon 上的 USDC 計價,但你可透過 Tangem 內建的便捷兌換功能,用任意資產(USDT、SOL、ETH、BTC、XRP 等)儲值。</string>
|
||||||
|
<string name="tangempay_newonboard_Q4_title">我可以使用哪些加密資產消費?</string>
|
||||||
|
<string name="tangempay_newonboard_body">隨時隨地花用加密資產——無需銀行、無需中介、無需交易所。自我託管的掌控力,結合日常支付。</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_body">可線上付款,也支援 Apple Pay</string>
|
||||||
|
<string name="tangempay_newonboard_bottomleft_title">全球受理</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_body">全球都能用</string>
|
||||||
|
<string name="tangempay_newonboard_bottomright_title">匯兌費僅 1%</string>
|
||||||
|
<string name="tangempay_newonboard_title">取得你的 Tangem Pay 卡</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_body">看多少,付多少</string>
|
||||||
|
<string name="tangempay_newonboard_topleft_title">消費零手續費,\n1 USDC = 1 USD</string>
|
||||||
|
<string name="tangempay_newonboard_topright_body">沒有隱藏費用</string>
|
||||||
|
<string name="tangempay_newonboard_topright_title">月費 0 美元,\n儲值費 0 美元</string>
|
||||||
<string name="tangempay_onboarding_banner_description">獲取您的免費 Tangem Visa 虛擬卡</string>
|
<string name="tangempay_onboarding_banner_description">獲取您的免費 Tangem Visa 虛擬卡</string>
|
||||||
<string name="tangempay_onboarding_banner_title">使用 USDC 進行日常支付</string>
|
<string name="tangempay_onboarding_banner_title">使用 USDC 進行日常支付</string>
|
||||||
<string name="tangempay_onboarding_get_card_button_text">获取卡片</string>
|
<string name="tangempay_onboarding_get_card_button_text">获取卡片</string>
|
||||||
|
|
@ -419,6 +441,7 @@
|
||||||
<string name="tangempay_onboarding_security_description">將創建單獨的支付帳戶,且不會透露您的地址和資產</string>
|
<string name="tangempay_onboarding_security_description">將創建單獨的支付帳戶,且不會透露您的地址和資產</string>
|
||||||
<string name="tangempay_onboarding_security_title">無與倫比的隱私</string>
|
<string name="tangempay_onboarding_security_title">無與倫比的隱私</string>
|
||||||
<string name="tangempay_onboarding_title">立即獲取你的 Tangem Pay 卡</string>
|
<string name="tangempay_onboarding_title">立即獲取你的 Tangem Pay 卡</string>
|
||||||
|
<string name="tangempay_pay_support">Pay 客服</string>
|
||||||
<string name="tangempay_payment_account">付款帳戶</string>
|
<string name="tangempay_payment_account">付款帳戶</string>
|
||||||
<string name="tangempay_payment_account_sync_needed">Tangem Pay 工作階段已過期</string>
|
<string name="tangempay_payment_account_sync_needed">Tangem Pay 工作階段已過期</string>
|
||||||
<string name="tangempay_reissue_card_description">這將產生一組新的卡片資料。您的舊資料將停止使用。此操作無法復原。</string>
|
<string name="tangempay_reissue_card_description">這將產生一組新的卡片資料。您的舊資料將停止使用。此操作無法復原。</string>
|
||||||
|
|
@ -426,7 +449,7 @@
|
||||||
<string name="tangempay_service_unavailable_description">我们正在修复技术问题。请稍后再试。</string>
|
<string name="tangempay_service_unavailable_description">我们正在修复技术问题。请稍后再试。</string>
|
||||||
<string name="tangempay_service_unavailable_title">服務暫時無法使用</string>
|
<string name="tangempay_service_unavailable_title">服務暫時無法使用</string>
|
||||||
<string name="tangempay_service_unreachable_try_later">目前無法顯示資料,但卡片支付仍可正常使用。</string>
|
<string name="tangempay_service_unreachable_try_later">目前無法顯示資料,但卡片支付仍可正常使用。</string>
|
||||||
<string name="tangempay_status_deactivated">卡片已停用</string>
|
<string name="tangempay_status_deactivated">帳戶已關閉</string>
|
||||||
<string name="tangempay_sync_needed">用卡或戒指續期會話</string>
|
<string name="tangempay_sync_needed">用卡或戒指續期會話</string>
|
||||||
<string name="tangempay_sync_needed_body">用卡或戒指續期會話</string>
|
<string name="tangempay_sync_needed_body">用卡或戒指續期會話</string>
|
||||||
<string name="tangempay_sync_needed_title">Tangem Pay 工作階段已過期</string>
|
<string name="tangempay_sync_needed_title">Tangem Pay 工作階段已過期</string>
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class P2PEthPoolIntegration(
|
||||||
|
|
||||||
override val enterMinimumAmount: BigDecimal = DEFAULT_MINIMUM_STAKE
|
override val enterMinimumAmount: BigDecimal = DEFAULT_MINIMUM_STAKE
|
||||||
|
|
||||||
override val exitMinimumAmount: BigDecimal? = null
|
override val exitMinimumAmount: BigDecimal = DEFAULT_MINIMUM_UNSTAKE
|
||||||
|
|
||||||
override val enterArgs: StakingActionArgs = StakingActionArgs(
|
override val enterArgs: StakingActionArgs = StakingActionArgs(
|
||||||
amountRequirement = StakingAmountRequirement(
|
amountRequirement = StakingAmountRequirement(
|
||||||
|
|
@ -59,7 +59,7 @@ class P2PEthPoolIntegration(
|
||||||
override val exitArgs: StakingActionArgs = StakingActionArgs(
|
override val exitArgs: StakingActionArgs = StakingActionArgs(
|
||||||
amountRequirement = StakingAmountRequirement(
|
amountRequirement = StakingAmountRequirement(
|
||||||
isRequired = true,
|
isRequired = true,
|
||||||
minimum = null,
|
minimum = exitMinimumAmount,
|
||||||
maximum = null,
|
maximum = null,
|
||||||
),
|
),
|
||||||
isPartialAmountDisabled = false,
|
isPartialAmountDisabled = false,
|
||||||
|
|
@ -107,6 +107,7 @@ class P2PEthPoolIntegration(
|
||||||
private const val MAX_COOLDOWN_DAYS = 4
|
private const val MAX_COOLDOWN_DAYS = 4
|
||||||
private const val MAX_AMOUNT_SCALE = 1
|
private const val MAX_AMOUNT_SCALE = 1
|
||||||
private val DEFAULT_MINIMUM_STAKE = BigDecimal("0.01")
|
private val DEFAULT_MINIMUM_STAKE = BigDecimal("0.01")
|
||||||
|
private val DEFAULT_MINIMUM_UNSTAKE = BigDecimal("0.01")
|
||||||
private val AVAILABILITY_THRESHOLD = BigDecimal("2")
|
private val AVAILABILITY_THRESHOLD = BigDecimal("2")
|
||||||
|
|
||||||
private const val TERMS_OF_SERVICE_URL = "https://www.p2p.org/terms-of-use"
|
private const val TERMS_OF_SERVICE_URL = "https://www.p2p.org/terms-of-use"
|
||||||
|
|
|
||||||
|
|
@ -146,5 +146,21 @@ internal class P2PEthPoolIntegrationTest {
|
||||||
|
|
||||||
assertThat(integration.enterMinimumAmount).isEqualTo(BigDecimal("0.01"))
|
assertThat(integration.enterMinimumAmount).isEqualTo(BigDecimal("0.01"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `minimum unstake is 0_01 ETH`() {
|
||||||
|
val integration = P2PEthPoolIntegration(StakingIntegrationID.P2PEthPool, emptyList(), emptyMap())
|
||||||
|
|
||||||
|
assertThat(integration.exitMinimumAmount).isEqualTo(BigDecimal("0.01"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `exit args expose minimum unstake requirement of 0_01 ETH`() {
|
||||||
|
val integration = P2PEthPoolIntegration(StakingIntegrationID.P2PEthPool, emptyList(), emptyMap())
|
||||||
|
|
||||||
|
val exitRequirement = integration.exitArgs!!.amountRequirement!!
|
||||||
|
assertThat(exitRequirement.isRequired).isTrue()
|
||||||
|
assertThat(exitRequirement.minimum).isEqualTo(BigDecimal("0.01"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ interface CreateWalletBackupComponent : ComposableContentComponent {
|
||||||
val analyticsSource: String,
|
val analyticsSource: String,
|
||||||
val analyticsAction: String,
|
val analyticsAction: String,
|
||||||
val nextScreen: AppRoute? = null,
|
val nextScreen: AppRoute? = null,
|
||||||
|
val shouldShowBackButton: Boolean = true,
|
||||||
)
|
)
|
||||||
|
|
||||||
interface Factory : ComponentFactory<Params, CreateWalletBackupComponent>
|
interface Factory : ComponentFactory<Params, CreateWalletBackupComponent>
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ interface UpdateAccessCodeComponent : ComposableContentComponent {
|
||||||
val userWalletId: UserWalletId,
|
val userWalletId: UserWalletId,
|
||||||
val source: String,
|
val source: String,
|
||||||
val nextScreen: AppRoute? = null,
|
val nextScreen: AppRoute? = null,
|
||||||
|
val shouldShowBackButton: Boolean = true,
|
||||||
)
|
)
|
||||||
interface Factory : ComponentFactory<Params, UpdateAccessCodeComponent>
|
interface Factory : ComponentFactory<Params, UpdateAccessCodeComponent>
|
||||||
}
|
}
|
||||||
|
|
@ -67,6 +67,11 @@ internal class CreateWalletBackupModel @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isBackButtonVisible(route: CreateWalletBackupRoute): Boolean = when (route) {
|
||||||
|
is CreateWalletBackupRoute.RecoveryPhraseStart -> params.shouldShowBackButton
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
|
||||||
fun onManualBackupStarted() {
|
fun onManualBackupStarted() {
|
||||||
analyticsEventHandler.send(
|
analyticsEventHandler.send(
|
||||||
event = WalletSettingsAnalyticEvents.RecoveryPhraseScreen(
|
event = WalletSettingsAnalyticEvents.RecoveryPhraseScreen(
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ internal class DefaultCreateWalletBackupComponent @AssistedInject constructor(
|
||||||
stackState = stackState,
|
stackState = stackState,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
showTopBar = currentRoute !is CreateWalletBackupRoute.BackupCompleted,
|
showTopBar = currentRoute !is CreateWalletBackupRoute.BackupCompleted,
|
||||||
|
showBackButton = model.isBackButtonVisible(currentRoute),
|
||||||
onBackClick = model::onBack,
|
onBackClick = model::onBack,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.imePadding
|
import androidx.compose.foundation.layout.imePadding
|
||||||
import androidx.compose.foundation.layout.systemBarsPadding
|
import androidx.compose.foundation.layout.systemBarsPadding
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import com.arkivanov.decompose.extensions.compose.stack.Children
|
import com.arkivanov.decompose.extensions.compose.stack.Children
|
||||||
import com.arkivanov.decompose.extensions.compose.stack.animation.slide
|
import com.arkivanov.decompose.extensions.compose.stack.animation.slide
|
||||||
|
|
@ -23,6 +24,7 @@ import com.tangem.features.hotwallet.createwalletbackup.routing.CreateWalletBack
|
||||||
internal fun CreateWalletBackupContent(
|
internal fun CreateWalletBackupContent(
|
||||||
stackState: ChildStack<CreateWalletBackupRoute, ComposableContentComponent>,
|
stackState: ChildStack<CreateWalletBackupRoute, ComposableContentComponent>,
|
||||||
showTopBar: Boolean,
|
showTopBar: Boolean,
|
||||||
|
showBackButton: Boolean,
|
||||||
onBackClick: () -> Unit,
|
onBackClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
|
|
@ -34,13 +36,19 @@ internal fun CreateWalletBackupContent(
|
||||||
.systemBarsPadding(),
|
.systemBarsPadding(),
|
||||||
) {
|
) {
|
||||||
if (showTopBar) {
|
if (showTopBar) {
|
||||||
|
if (showBackButton) {
|
||||||
TangemTopAppBar(
|
TangemTopAppBar(
|
||||||
modifier = Modifier,
|
modifier = Modifier,
|
||||||
startButton = TopAppBarButtonUM.Back(
|
startButton = TopAppBarButtonUM.Back(onBackClicked = onBackClick),
|
||||||
onBackClicked = onBackClick,
|
|
||||||
),
|
|
||||||
title = stringResourceSafe(id = R.string.common_backup),
|
title = stringResourceSafe(id = R.string.common_backup),
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
TangemTopAppBar(
|
||||||
|
modifier = Modifier,
|
||||||
|
title = stringResourceSafe(id = R.string.common_backup),
|
||||||
|
titleAlignment = Alignment.CenterHorizontally,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Children(
|
Children(
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,13 @@ internal class DefaultUpdateAccessCodeComponent @AssistedInject constructor(
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content(modifier: Modifier) {
|
override fun Content(modifier: Modifier) {
|
||||||
val stackState by innerStack.subscribeAsState()
|
val stackState by innerStack.subscribeAsState()
|
||||||
|
val currentRoute = stackState.active.configuration
|
||||||
|
|
||||||
BackHandler(onBack = model::onChildBack)
|
BackHandler(onBack = model::onChildBack)
|
||||||
|
|
||||||
SetAccessCodeContent(
|
SetAccessCodeContent(
|
||||||
onBackClick = model::onChildBack,
|
onBackClick = model::onChildBack,
|
||||||
|
showBackButton = model.isBackButtonVisible(currentRoute),
|
||||||
stackState = stackState,
|
stackState = stackState,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import com.tangem.features.hotwallet.updateaccesscode.routing.UpdateAccessCodeRo
|
||||||
@Composable
|
@Composable
|
||||||
internal fun SetAccessCodeContent(
|
internal fun SetAccessCodeContent(
|
||||||
onBackClick: () -> Unit,
|
onBackClick: () -> Unit,
|
||||||
|
showBackButton: Boolean,
|
||||||
stackState: ChildStack<UpdateAccessCodeRoute, ComposableContentComponent>,
|
stackState: ChildStack<UpdateAccessCodeRoute, ComposableContentComponent>,
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
|
|
@ -32,17 +33,17 @@ internal fun SetAccessCodeContent(
|
||||||
.imePadding()
|
.imePadding()
|
||||||
.systemBarsPadding(),
|
.systemBarsPadding(),
|
||||||
) {
|
) {
|
||||||
if (stackState.active.configuration is UpdateAccessCodeRoute.SetupFinished) {
|
if (showBackButton) {
|
||||||
TangemTopAppBar(
|
TangemTopAppBar(
|
||||||
modifier = Modifier,
|
modifier = Modifier,
|
||||||
title = stringResourceSafe(R.string.access_code_navtitle),
|
title = stringResourceSafe(R.string.access_code_navtitle),
|
||||||
titleAlignment = Alignment.CenterHorizontally,
|
startButton = TopAppBarButtonUM.Back(onBackClick),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
TangemTopAppBar(
|
TangemTopAppBar(
|
||||||
modifier = Modifier,
|
modifier = Modifier,
|
||||||
title = stringResourceSafe(R.string.access_code_navtitle),
|
title = stringResourceSafe(R.string.access_code_navtitle),
|
||||||
startButton = TopAppBarButtonUM.Back(onBackClick),
|
titleAlignment = Alignment.CenterHorizontally,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Children(
|
Children(
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,12 @@ internal class UpdateAccessCodeModel @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isBackButtonVisible(route: UpdateAccessCodeRoute): Boolean = when (route) {
|
||||||
|
is UpdateAccessCodeRoute.SetAccessCode -> params.shouldShowBackButton
|
||||||
|
is UpdateAccessCodeRoute.ConfirmAccessCode -> true
|
||||||
|
is UpdateAccessCodeRoute.SetupFinished -> false
|
||||||
|
}
|
||||||
|
|
||||||
override fun onNewAccessCodeInput(userWalletId: UserWalletId, accessCode: String) {
|
override fun onNewAccessCodeInput(userWalletId: UserWalletId, accessCode: String) {
|
||||||
analyticsEventHandler.send(WalletSettingsAnalyticEvents.ReEnterAccessCodeScreen(source = params.source))
|
analyticsEventHandler.send(WalletSettingsAnalyticEvents.ReEnterAccessCodeScreen(source = params.source))
|
||||||
stackNavigation.push(UpdateAccessCodeRoute.ConfirmAccessCode(userWalletId, accessCode))
|
stackNavigation.push(UpdateAccessCodeRoute.ConfirmAccessCode(userWalletId, accessCode))
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import com.tangem.domain.models.account.Account
|
||||||
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||||
import com.tangem.domain.models.staking.StakingBalanceEntry
|
import com.tangem.domain.models.staking.StakingBalanceEntry
|
||||||
import com.tangem.domain.models.wallet.UserWallet
|
import com.tangem.domain.models.wallet.UserWallet
|
||||||
|
import com.tangem.domain.staking.model.P2PEthPoolIntegration
|
||||||
import com.tangem.domain.staking.model.Period
|
import com.tangem.domain.staking.model.Period
|
||||||
import com.tangem.domain.staking.model.StakingIntegration
|
import com.tangem.domain.staking.model.StakingIntegration
|
||||||
import com.tangem.domain.staking.model.StakingTarget
|
import com.tangem.domain.staking.model.StakingTarget
|
||||||
|
|
@ -261,6 +262,7 @@ internal class SetInitialDataStateTransformer(
|
||||||
walletTitle = stringReference(userWalletProvider().name),
|
walletTitle = stringReference(userWalletProvider().name),
|
||||||
prefixText = resourceReference(R.string.common_from),
|
prefixText = resourceReference(R.string.common_from),
|
||||||
).convert(account),
|
).convert(account),
|
||||||
|
isMaxButtonVisible = integration !is P2PEthPoolIntegration,
|
||||||
).convert(
|
).convert(
|
||||||
AmountParameters(
|
AmountParameters(
|
||||||
title = stringReference(userWalletProvider().name),
|
title = stringReference(userWalletProvider().name),
|
||||||
|
|
|
||||||
|
|
@ -80,14 +80,16 @@ internal class TangemPayHotWalletOnboardingModel @Inject constructor(
|
||||||
TangemLogger.i("[TangemPay][HWO]Hot wallet created")
|
TangemLogger.i("[TangemPay][HWO]Hot wallet created")
|
||||||
clearAppsFlyerDeeplinkUseCase(AppsFlyerDeeplinkSource.TangemPayHotWalletOnboarding)
|
clearAppsFlyerDeeplinkUseCase(AppsFlyerDeeplinkSource.TangemPayHotWalletOnboarding)
|
||||||
|
|
||||||
router.replaceCurrent(
|
router.replaceAll(
|
||||||
AppRoute.CreateWalletBackup(
|
AppRoute.CreateWalletBackup(
|
||||||
userWalletId = userWallet.walletId,
|
userWalletId = userWallet.walletId,
|
||||||
analyticsSource = AnalyticsParam.ScreensSources.TangemPayHotWalletOnboarding.value,
|
analyticsSource = AnalyticsParam.ScreensSources.TangemPayHotWalletOnboarding.value,
|
||||||
analyticsAction = WalletSettingsAnalyticEvents.RecoveryPhraseScreenAction.Backup.value,
|
analyticsAction = WalletSettingsAnalyticEvents.RecoveryPhraseScreenAction.Backup.value,
|
||||||
|
shouldShowBackButton = false,
|
||||||
nextScreen = AppRoute.UpdateAccessCode(
|
nextScreen = AppRoute.UpdateAccessCode(
|
||||||
userWalletId = userWallet.walletId,
|
userWalletId = userWallet.walletId,
|
||||||
source = AnalyticsParam.ScreensSources.TangemPayHotWalletOnboarding.value,
|
source = AnalyticsParam.ScreensSources.TangemPayHotWalletOnboarding.value,
|
||||||
|
shouldShowBackButton = false,
|
||||||
nextScreen = AppRoute.TangemPayOnboarding(
|
nextScreen = AppRoute.TangemPayOnboarding(
|
||||||
mode = AppRoute.TangemPayOnboarding.Mode.FirstSetup(userWallet.walletId),
|
mode = AppRoute.TangemPayOnboarding.Mode.FirstSetup(userWallet.walletId),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,9 @@ private fun Content(state: TangemPayHotWalletOnboardingUM, modifier: Modifier =
|
||||||
.verticalScroll(rememberScrollState()),
|
.verticalScroll(rememberScrollState()),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.padding(40.dp),
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(40.dp),
|
||||||
text = stringResourceSafe(R.string.tangempay_onboarding_title),
|
text = stringResourceSafe(R.string.tangempay_onboarding_title),
|
||||||
style = TangemTheme.typography.h2,
|
style = TangemTheme.typography.h2,
|
||||||
color = TangemTheme.colors.text.primary1,
|
color = TangemTheme.colors.text.primary1,
|
||||||
|
|
@ -73,12 +75,14 @@ private fun Content(state: TangemPayHotWalletOnboardingUM, modifier: Modifier =
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
contentScale = ContentScale.FillWidth,
|
contentScale = ContentScale.FillWidth,
|
||||||
)
|
)
|
||||||
Features(modifier = Modifier.padding(horizontal = 40.dp))
|
Features(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(horizontal = 40.dp),
|
||||||
|
)
|
||||||
Spacer(Modifier.weight(1f))
|
Spacer(Modifier.weight(1f))
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier.padding(16.dp),
|
||||||
.padding(horizontal = 16.dp)
|
|
||||||
.padding(bottom = 16.dp),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
) {
|
) {
|
||||||
NavigationPrimaryButton(
|
NavigationPrimaryButton(
|
||||||
|
|
|
||||||
|
|
@ -82,8 +82,12 @@ internal class TangemPayHotWalletOnboardingModelTest {
|
||||||
|
|
||||||
coVerify { clearAppsFlyerDeeplinkUseCase(AppsFlyerDeeplinkSource.TangemPayHotWalletOnboarding) }
|
coVerify { clearAppsFlyerDeeplinkUseCase(AppsFlyerDeeplinkSource.TangemPayHotWalletOnboarding) }
|
||||||
verify {
|
verify {
|
||||||
router.replaceCurrent(
|
router.replaceAll(
|
||||||
match { it is AppRoute.CreateWalletBackup && it.userWalletId == testUserWalletId },
|
match { route ->
|
||||||
|
route is AppRoute.CreateWalletBackup &&
|
||||||
|
route.userWalletId == testUserWalletId &&
|
||||||
|
!route.shouldShowBackButton
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +106,7 @@ internal class TangemPayHotWalletOnboardingModelTest {
|
||||||
assertThat(model.uiState.value.isLoading).isFalse()
|
assertThat(model.uiState.value.isLoading).isFalse()
|
||||||
verify { uiMessageSender.send(match<DialogMessage> { true }) }
|
verify { uiMessageSender.send(match<DialogMessage> { true }) }
|
||||||
coVerify(exactly = 0) { clearAppsFlyerDeeplinkUseCase(any()) }
|
coVerify(exactly = 0) { clearAppsFlyerDeeplinkUseCase(any()) }
|
||||||
verify(exactly = 0) { router.replaceCurrent(any()) }
|
verify(exactly = 0) { router.replaceAll(*anyVararg()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.tangem.feature.wallet.deeplink
|
package com.tangem.feature.wallet.deeplink
|
||||||
|
|
||||||
import com.tangem.blockchain.common.Blockchain
|
import com.tangem.blockchain.common.Blockchain
|
||||||
|
import com.tangem.blockchainsdk.utils.toNetworkId
|
||||||
import com.tangem.common.routing.deeplink.DeeplinkConst
|
import com.tangem.common.routing.deeplink.DeeplinkConst
|
||||||
import com.tangem.common.routing.deeplink.DeeplinkConst.PROMO_CODE_KEY
|
import com.tangem.common.routing.deeplink.DeeplinkConst.PROMO_CODE_KEY
|
||||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||||
|
|
@ -91,7 +92,7 @@ internal class DefaultPromoDeeplinkHandler @AssistedInject constructor(
|
||||||
multiNetworkStatusSupplier
|
multiNetworkStatusSupplier
|
||||||
.invoke(MultiNetworkStatusProducer.Params(userWallet.walletId))
|
.invoke(MultiNetworkStatusProducer.Params(userWallet.walletId))
|
||||||
.first { statuses ->
|
.first { statuses ->
|
||||||
statuses.any { status -> status.network.rawId == Blockchain.Bitcoin.id }
|
statuses.any { status -> status.network.rawId == Blockchain.Bitcoin.toNetworkId() }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
@ -104,7 +105,9 @@ internal class DefaultPromoDeeplinkHandler @AssistedInject constructor(
|
||||||
|
|
||||||
TangemLogger.withTag(LOG_TAG).d("All user cryptoCurrencies on main ${cryptoCurrencies?.size}")
|
TangemLogger.withTag(LOG_TAG).d("All user cryptoCurrencies on main ${cryptoCurrencies?.size}")
|
||||||
|
|
||||||
val bitcoinCurrency = cryptoCurrencies?.firstOrNull { it.id.rawNetworkId == Blockchain.Bitcoin.id }
|
val bitcoinCurrency = cryptoCurrencies?.firstOrNull {
|
||||||
|
it.id.rawNetworkId == Blockchain.Bitcoin.toNetworkId()
|
||||||
|
}
|
||||||
TangemLogger.withTag(LOG_TAG).d("BitcoinCurrency $bitcoinCurrency")
|
TangemLogger.withTag(LOG_TAG).d("BitcoinCurrency $bitcoinCurrency")
|
||||||
|
|
||||||
val bitcoinStatus = networkStatuses?.firstOrNull { status ->
|
val bitcoinStatus = networkStatuses?.firstOrNull { status ->
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package com.tangem.feature.wallet.presentation.wallet.deeplink
|
||||||
import arrow.core.Either
|
import arrow.core.Either
|
||||||
import com.google.common.truth.Truth
|
import com.google.common.truth.Truth
|
||||||
import com.tangem.blockchain.common.Blockchain
|
import com.tangem.blockchain.common.Blockchain
|
||||||
|
import com.tangem.blockchainsdk.utils.toNetworkId
|
||||||
import com.tangem.common.routing.deeplink.DeeplinkConst
|
import com.tangem.common.routing.deeplink.DeeplinkConst
|
||||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||||
import com.tangem.core.decompose.ui.UiMessage
|
import com.tangem.core.decompose.ui.UiMessage
|
||||||
|
|
@ -92,13 +93,13 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
|
|
||||||
val ethStatus = buildNetworkStatus(rawNetworkId = "ethereum", address = "0x123")
|
val ethStatus = buildNetworkStatus(rawNetworkId = "ethereum", address = "0x123")
|
||||||
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id, address = "bc1qxyz")
|
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), address = "bc1qxyz")
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flow {
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flow {
|
||||||
emit(emptySet())
|
emit(emptySet())
|
||||||
emit(setOf(ethStatus))
|
emit(setOf(ethStatus))
|
||||||
emit(setOf(btcStatus))
|
emit(setOf(btcStatus))
|
||||||
}
|
}
|
||||||
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id)
|
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId())
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
||||||
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Right("ok")
|
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Right("ok")
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
@ -203,9 +204,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to "PROMO123")
|
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to "PROMO123")
|
||||||
val userWallet = mockUserWallet("ABCDEF")
|
val userWallet = mockUserWallet("ABCDEF")
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
val btcUnreachable = buildUnreachableNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id)
|
val btcUnreachable = buildUnreachableNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId())
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcUnreachable))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcUnreachable))
|
||||||
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id)
|
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId())
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
||||||
|
|
@ -245,9 +246,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to promoCode)
|
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to promoCode)
|
||||||
val userWallet = mockUserWallet("ABCDEF")
|
val userWallet = mockUserWallet("ABCDEF")
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id, address = "bc1qxyz")
|
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), address = "bc1qxyz")
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
||||||
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id)
|
val btcCoin = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId())
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoin)
|
||||||
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Right("ok")
|
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Right("ok")
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
@ -363,9 +364,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to promoCode)
|
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to promoCode)
|
||||||
val userWallet = mockUserWallet("ABCDEF")
|
val userWallet = mockUserWallet("ABCDEF")
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id, address = "bc1qxyz")
|
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), address = "bc1qxyz")
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
||||||
val btcCurrency = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id)
|
val btcCurrency = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId())
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCurrency)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCurrency)
|
||||||
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Left(error)
|
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qxyz", promoCode) } returns Either.Left(error)
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
@ -397,7 +398,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to "PROMO123")
|
val queryParams = mapOf(DeeplinkConst.PROMO_CODE_KEY to "PROMO123")
|
||||||
val userWallet = mockUserWallet("ABCDEF")
|
val userWallet = mockUserWallet("ABCDEF")
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id, address = "bc1qxyz")
|
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), address = "bc1qxyz")
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatus))
|
||||||
val ethOnly = buildCryptoCurrency(rawNetworkId = "ethereum")
|
val ethOnly = buildCryptoCurrency(rawNetworkId = "ethereum")
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(ethOnly)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(ethOnly)
|
||||||
|
|
@ -433,7 +434,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
every { getSelectedWalletSyncUseCase.invoke() } returns Either.Right(userWallet)
|
||||||
|
|
||||||
val ethStatus = buildNetworkStatus(rawNetworkId = "ethereum", address = "0x123")
|
val ethStatus = buildNetworkStatus(rawNetworkId = "ethereum", address = "0x123")
|
||||||
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.id, address = "bc1qxyz")
|
val btcStatus = buildNetworkStatus(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), address = "bc1qxyz")
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flow {
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flow {
|
||||||
emit(emptySet())
|
emit(emptySet())
|
||||||
emit(setOf(ethStatus))
|
emit(setOf(ethStatus))
|
||||||
|
|
@ -487,19 +488,19 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCard = buildNetworkStatus(
|
val btcStatusCard = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcard",
|
address = "bc1qcard",
|
||||||
derivationPath = dpCard,
|
derivationPath = dpCard,
|
||||||
)
|
)
|
||||||
val btcStatusCustom = buildNetworkStatus(
|
val btcStatusCustom = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcustom",
|
address = "bc1qcustom",
|
||||||
derivationPath = dpCustom,
|
derivationPath = dpCustom,
|
||||||
)
|
)
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard, btcStatusCustom))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard, btcStatusCustom))
|
||||||
|
|
||||||
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCustom)
|
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCustom)
|
||||||
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCard)
|
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCard)
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(
|
||||||
btcCoinCustom,
|
btcCoinCustom,
|
||||||
btcCoinCard,
|
btcCoinCard,
|
||||||
|
|
@ -544,18 +545,18 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCard = buildNetworkStatus(
|
val btcStatusCard = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcard",
|
address = "bc1qcard",
|
||||||
derivationPath = dpCard,
|
derivationPath = dpCard,
|
||||||
)
|
)
|
||||||
val btcStatusCustom = buildNetworkStatus(
|
val btcStatusCustom = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcustom",
|
address = "bc1qcustom",
|
||||||
derivationPath = dpCustom,
|
derivationPath = dpCustom,
|
||||||
)
|
)
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard, btcStatusCustom))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard, btcStatusCustom))
|
||||||
|
|
||||||
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCard)
|
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCard)
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCard)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCard)
|
||||||
|
|
||||||
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qcard", promoCode) } returns Either.Right("ok")
|
coEvery { activateBitcoinPromocodeUseCase.invoke(any(), "bc1qcard", promoCode) } returns Either.Right("ok")
|
||||||
|
|
@ -607,12 +608,12 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCard = buildNetworkStatus(
|
val btcStatusCard = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcard",
|
address = "bc1qcard",
|
||||||
derivationPath = dpCard,
|
derivationPath = dpCard,
|
||||||
)
|
)
|
||||||
val btcStatusCustom = buildNetworkStatus(
|
val btcStatusCustom = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcustom",
|
address = "bc1qcustom",
|
||||||
derivationPath = dpCustom,
|
derivationPath = dpCustom,
|
||||||
)
|
)
|
||||||
|
|
@ -666,14 +667,14 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCard = buildNetworkStatus(
|
val btcStatusCard = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcard",
|
address = "bc1qcard",
|
||||||
derivationPath = dpCard,
|
derivationPath = dpCard,
|
||||||
)
|
)
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard))
|
||||||
|
|
||||||
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCustom)
|
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCustom)
|
||||||
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCard)
|
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCard)
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(
|
||||||
btcCoinCustom,
|
btcCoinCustom,
|
||||||
btcCoinCard,
|
btcCoinCard,
|
||||||
|
|
@ -725,13 +726,13 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCustom = buildNetworkStatus(
|
val btcStatusCustom = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcustom",
|
address = "bc1qcustom",
|
||||||
derivationPath = dpCustom,
|
derivationPath = dpCustom,
|
||||||
)
|
)
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCustom))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCustom))
|
||||||
|
|
||||||
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCard)
|
val btcCoinCard = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCard)
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCard)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCard)
|
||||||
|
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
@ -780,13 +781,13 @@ class DefaultPromoDeeplinkHandlerTest {
|
||||||
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
val dpCustom = Network.DerivationPath.Custom("m/84'/0'/0'")
|
||||||
|
|
||||||
val btcStatusCard = buildNetworkStatus(
|
val btcStatusCard = buildNetworkStatus(
|
||||||
rawNetworkId = Blockchain.Bitcoin.id,
|
rawNetworkId = Blockchain.Bitcoin.toNetworkId(),
|
||||||
address = "bc1qcard",
|
address = "bc1qcard",
|
||||||
derivationPath = dpCard,
|
derivationPath = dpCard,
|
||||||
)
|
)
|
||||||
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard))
|
coEvery { multiNetworkStatusSupplier.invoke(any()) } returns flowOf(setOf(btcStatusCard))
|
||||||
|
|
||||||
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.id, derivationPath = dpCustom)
|
val btcCoinCustom = buildCryptoCurrency(rawNetworkId = Blockchain.Bitcoin.toNetworkId(), derivationPath = dpCustom)
|
||||||
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCustom)
|
coEvery { multiWalletCryptoCurrenciesSupplier.getSyncOrNull(any()) } returns setOf(btcCoinCustom)
|
||||||
|
|
||||||
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
val dispatcherProvider = testDispatcherProvider(testScheduler)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue