diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 8b478ee2f8..da19ef28cc 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -195,6 +195,7 @@ Der Server ist nicht verfügbar. Bitte versuche es später erneut. Teilen Link teilen + Weniger anzeigen Mehr anzeigen Signieren Signieren und senden @@ -298,23 +299,23 @@ Gekauft Einkaufen Einkaufen... - Abgebrochen - Bestätigt - Bestätigen - Wird bestätigt... - Getauscht - Tauschen läuft - Austauschen... - Fehlgeschlagen - Pausiert + Transaktion abgebrochen + Anzahlung bestätigt + Warten auf Bestätigung + Warte auf Bestätigung... + Umtausch abgeschlossen + Warten auf Umtausch + Warte auf den Wechsel... + Umtausch fehlgeschlagen + Tausch pausiert Einzahlung empfangen - Einzahlung wird erwartet + Warten auf Einzahlung Warten auf Einzahlung... - Rückerstattet - Rückerstattung + Rückerstattung abgeschlossen + Warten auf Rückerstattung An dich gesendet - wird an dich versendet... - Gesendet + Betrag senden... + Gesendete Gelder Daten stammen vom Anbieter. Der geschätzte Betrag kann sich aufgrund der Marktbedingungen ändern. Status des Tausches Verifizierung erforderlich @@ -338,6 +339,7 @@ Diese Transaktion ausblenden Sobald der Transaktionsstatus ausgeblendet ist, kann er nicht mehr angezeigt werden. Stattdessen kannst Du ihn durch einfaches Wischen schließen. Diese Transaktion ausblenden + Tauschen mit Keine Token gefunden. Bitte versuche eine andere Anfrage ID: %s Transaktions-ID kopiert @@ -445,7 +447,7 @@ 7T Alle Erfahrene Käufer - Bewertung + Kapitalisierung Sortieren nach Top-Gewinner Top-Verlierer @@ -496,9 +498,9 @@ MarketCap Der Gesamtmarktwert einer Kryptowährung, berechnet sich durch Multiplikation des aktuellen Preises des Coins mit der Gesamtzahl der im Umlauf befindlichen Coins MarketCap - Marktbewertung + Marktposition Position im Krypto-Rating zwischen allen Coins basierend auf der Marktkapitalisierung - Marktbewertung + Marktposition Maximale Versorgung Die maximale Anzahl von Coins oder Tokens, die jemals für eine bestimmte Kryptowährung existieren können Maximale Versorgung @@ -558,6 +560,7 @@ Nicht hinzugefügt NFT senden Eigenschaften + Unbetitelte Sammlung %1$d NFTs in der %2$d Sammlung Tippe hier, um das erste NFT zu erhalten NFT-Sammlungen @@ -858,7 +861,7 @@ Der Betrag der unstaked wird, wird aufgrund der Netzwerkregeln auf %1$s TRX gerundet. Nicht gestakte beanspruche Gebühr für das Staking-Konto - Ein Staking-Konto ist ein spezielles Konto, auf dem eingesetzte SOL-Token gelagert werden. Es wird erstellt, wenn du deine Token an einen Validator delegierst, um an der Transaktionsvalidierung teilzunehmen und Belohnungen zu verdienen. Für die Erstellung des Staking-Kontos wird eine geringe Gebühr erhoben, die nach Abschluss des Stakings zurückgegeben wird. + Ein Staking-Konto ist ein spezielles Konto, auf dem eingesetzte SOL-Token gespeichert werden. Es wird erstellt, indem Sie Ihre Token an einen Validator delegieren, um an der Transaktionsvalidierung teilzunehmen und Belohnungen zu erhalten. Für die Einrichtung des Staking-Kontos wird eine geringe Gebühr erhoben, die nach Abschluss des Stakings zurückerstattet wird. Jährliche prozentuale Rendite Die jährliche prozentuale Rendite, die du durch die Teilnahme am Staking erzielen kannst. Effektiver Jahreszins @@ -867,7 +870,7 @@ Durchschnittliche Belohnungsquote Was ist Staking? %s geschätzter Profit - Marktbewertung + Marktposition Metriken Gemäß den Netzwerkregeln %1$s sind Ansprüche ab %2$s möglich. Die unten aufgeführten Beträge werden Deinem Konto nach der Aufhebung des Stakings gutgeschrieben. Mindestanforderungen @@ -893,15 +896,15 @@ Beim Staking im Cardano-Netzwerk wird Dein gesamtes Guthaben verwendet. Weitere 2 ADA werden reserviert und nach dem Unstaking zurückgegeben. Deine ADA bleiben während des Stakings freigeschaltet. Einzelheiten zum ADA-Staking Verdiente Belohnungen werden an Deine Wallet gesendet und stehen Dir sofort zur Verfügung - Stake sicher und verdienen Belohnungen - Sicher staken und tägliche Belohnungen verdienen. - Sicher staken und stündliche Belohnungen verdienen. - Sicher staken und monatliche Belohnungen verdienen. + Tangem ermöglicht es Benutzern, ihre Kryptowährungen zu Staken + Tangem ermöglicht es Benutzern, ihre Kryptowährungen zu Staken + Tangem ermöglicht es Benutzern, ihre Kryptowährungen zu Staken + Tangem ermöglicht es Benutzern, ihre Kryptowährungen zu Staken Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jeden tag. Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jede Stunde. Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jeden Monat. Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jede Woche. - Sicher staken und wöchentliche Belohnungen verdienen. + Tangem ermöglicht es Benutzern, ihre Kryptowährungen zu Staken Verdiene Staking-Belohnungen Dein verbleibender Stakingbetrag ist zu niedrig, um den Einsatz aufzuheben. Du musst mehr Staken, um den Mindestbetrag zum Aufheben des Einsatzes zu erreichen. Niedriges Stakingguthaben @@ -1037,7 +1040,7 @@ Du bist dabei, dieses Token vom Hauptbildschirm auszublenden. Du kannst es jederzeit über die Seite „Token verwalten“ wieder hinzufügen. Blende %s aus Token ausblenden - Durch das Staking kannst du alle %2$s Tage %1$s verdienen und Belohnungen erhalten + Durch Staking kannst Du %1$s erhalten und alle %2$s Tage Belohnungen bekommen. Staking-Dienst %1$s Token in %%image%% %2$s Netzwerk Token in %%image%% %1$s Netzwerk @@ -1158,6 +1161,8 @@ Jetzt mit 10 % Rabatt kaufen Greife auf 13.000+ Kryptowährungen zu. Kaufe, verkaufe, tausche und stake Sie mit einem einzigen Fingertipp.\nVerbinde bis zu drei Karten für ein Backup. Entdecke die Tangem Wallet + Bleib stets über eingehende Wallet-Transaktionen und Tangem-Updates auf dem Laufenden. + Push-Benachrichtigungen Wallet-Einstellungen Tangem Verwende %s oder scanne eine Karte oder Ring, um den Zugriff auf deine Wallet freizuschalten. @@ -1185,7 +1190,7 @@ Die Genehmigung des Swaps ist im Gange und wird in Kürze abgeschlossen sein. Genehmigung in Arbeit Der Mindestbetrag für den Tausch beträgt %1$s. Bitte stelle sicher, dass der Restsaldo nach dem Swap nicht unter %2$s liegt. - Du hast keine %s Coins in deiner Liste + Du hast keine %s austauschbaren Coins in Deiner Liste Keine Token zum Tauschen verfügbar Um eine Transaktion durchzuführen, du etwas etwas einzahlen %1$s %2$s Die Gebühr %s kann nicht gedeckt werden @@ -1260,6 +1265,7 @@ Verifizierte Domain Falsche Karte oder falscher Ring in der App ausgewählt Wir haben eine Art Problem + Erlaubnis auszugeben Vertragsadresse Verbinden Netzwerk @@ -1275,9 +1281,12 @@ Verbindungen Inhalt Daten kopieren + Benutzerdefinierter Freibetrag Alle trennen Text über die Trennung aller dApps Alle dApps trennen + Geschätzte Wallet-Änderungen + Böswillige/ gefährliche Transaktion Füge Deinem Profil für dieses Wallet das Netzwerk %s hinzu Die Wallet verfügt über keine erforderlichen Netzwerke Neue Verbindung @@ -1290,6 +1299,7 @@ An Transaktionsanfrage Transaktionsanfrage + Unbegrenzte Menge Wallet verbinden Verwerfen Du hast eine unterbrochene Sicherung. Möchtest du diese fortsetzen? diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 26dd14488e..4f04c1933f 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1146,6 +1146,8 @@ 今すぐ10 % オフで購入 1.3万種類以上の暗号資産にアクセス。ワンタップで買付、売却、スワップ、ステーキングが可能です。\nバックアップ用に最大3枚のカードを連携できます。 Tangemウォレットを見る + ウォレットの受信取引とTangemの更新について通知を受け取る。 + プッシュ通知 ウォレット設定 Tangem %sを使用するか、カード / リングをスキャンしてウォレットにアクセスしてください diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 51d8a3384e..b9c01568f4 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1304,6 +1304,8 @@ WalletConnect session was disconnected Error code: %s. If the problem persists — feel free to contact our support. We\'ve encountered unknown error + Error code: 8 005. If the problem persists — feel free to contact our support. + We\'ve encountered unknown error Tangem does not currently support a required network by %s. Unsuported networks Tangem support a required network by %s. diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/components/AlertsComponent.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/components/AlertsComponent.kt index 5ba2668002..c4c0032fa8 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/components/AlertsComponent.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/components/AlertsComponent.kt @@ -2,24 +2,21 @@ package com.tangem.features.walletconnect.connections.components import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable +import androidx.compose.ui.Modifier import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent -import com.tangem.core.ui.decompose.ComposableBottomSheetComponent +import com.tangem.core.ui.decompose.ComposableContentComponent import com.tangem.features.walletconnect.connections.ui.AlertsModalBottomSheet import kotlinx.serialization.Serializable internal class AlertsComponent( appComponentContext: AppComponentContext, private val params: Params, -) : AppComponentContext by appComponentContext, ComposableBottomSheetComponent { - - override fun dismiss() { - params.alertType.onDismiss() - } +) : AppComponentContext by appComponentContext, ComposableContentComponent { @Composable - override fun BottomSheet() { + override fun Content(modifier: Modifier) { AlertsModalBottomSheet( config = TangemBottomSheetConfig( isShown = true, @@ -48,6 +45,9 @@ internal class AlertsComponent( @Serializable data class UnsupportedNetworks(val appName: String, override val onDismiss: () -> Unit) : AlertType() + @Serializable + data class UnsupportedMethod(override val onDismiss: () -> Unit) : AlertType() + @Serializable data class WcDisconnected(override val onDismiss: () -> Unit) : AlertType() diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/DefaultWcRoutingComponent.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/DefaultWcRoutingComponent.kt index 45ccb328ab..c64c2b892d 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/DefaultWcRoutingComponent.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/DefaultWcRoutingComponent.kt @@ -15,6 +15,7 @@ import com.tangem.core.decompose.context.childByContext import com.tangem.core.decompose.model.getOrCreateModel import com.tangem.core.ui.decompose.ComposableContentComponent import com.tangem.features.walletconnect.components.WcRoutingComponent +import com.tangem.features.walletconnect.connections.components.AlertsComponent import com.tangem.features.walletconnect.connections.components.WcAppInfoContainerComponent import com.tangem.features.walletconnect.transaction.components.WcSignTransactionContainerComponent import dagger.assisted.Assisted @@ -67,6 +68,12 @@ internal class DefaultWcRoutingComponent @AssistedInject constructor( source = config.request.source, ), ) + is WcInnerRoute.Alert -> AlertsComponent( + childContext, + AlertsComponent.Params( + alertType = config.alertType, + ), + ) } } diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcInnerRoute.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcInnerRoute.kt index eae62e34c4..4c4c8cce4d 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcInnerRoute.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcInnerRoute.kt @@ -3,6 +3,7 @@ package com.tangem.features.walletconnect.connections.routing import com.tangem.core.decompose.navigation.Route import com.tangem.domain.walletconnect.model.WcPairRequest import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest +import com.tangem.features.walletconnect.connections.components.AlertsComponent import kotlinx.serialization.Serializable @Serializable @@ -18,4 +19,7 @@ internal sealed interface WcInnerRoute : Route { @Serializable data class Pair(val request: WcPairRequest) : WcInnerRoute + + @Serializable + data class Alert(val alertType: AlertsComponent.AlertType) : WcInnerRoute } \ No newline at end of file diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcRoutingModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcRoutingModel.kt index 99eaa067eb..05350f69ad 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcRoutingModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/routing/WcRoutingModel.kt @@ -11,6 +11,7 @@ import com.tangem.domain.walletconnect.model.WcEthMethodName import com.tangem.domain.walletconnect.model.WcMethodName import com.tangem.domain.walletconnect.model.WcSolanaMethodName import com.tangem.features.walletconnect.components.WalletConnectFeatureToggles +import com.tangem.features.walletconnect.connections.components.AlertsComponent import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.* import javax.inject.Inject @@ -49,12 +50,15 @@ internal class WcRoutingModel @Inject constructor( WcEthMethodName.SignTypeDataV4, WcSolanaMethodName.SignMessage, -> WcInnerRoute.SignMessage(rawRequest) - WcEthMethodName.SignTransaction -> TODO() - WcEthMethodName.SendTransaction -> TODO() - WcSolanaMethodName.SignTransaction -> TODO() - WcSolanaMethodName.SendAllTransaction -> TODO() - WcEthMethodName.AddEthereumChain -> TODO() - is WcMethodName.Unsupported -> TODO() + WcEthMethodName.SignTransaction, + WcEthMethodName.SendTransaction, + WcSolanaMethodName.SignTransaction, + WcSolanaMethodName.SendAllTransaction, + WcEthMethodName.AddEthereumChain, + is WcMethodName.Unsupported, + -> WcInnerRoute.Alert( + alertType = AlertsComponent.AlertType.UnsupportedMethod { innerRouter.pop() }, + ) } } diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/ui/AlertsModalBottomSheet.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/ui/AlertsModalBottomSheet.kt index ae14e28008..ef033fa61e 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/ui/AlertsModalBottomSheet.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/ui/AlertsModalBottomSheet.kt @@ -146,6 +146,7 @@ private fun ButtonsContainer(alert: AlertsComponent.AlertType, modifier: Modifie } is AlertsComponent.AlertType.WrongCardSelected, is AlertsComponent.AlertType.UnknownError, + is AlertsComponent.AlertType.UnsupportedMethod, -> SecondaryButton( modifier = buttonsModifier, onClick = alert.onDismiss, @@ -173,6 +174,7 @@ private fun AlertIcon(alert: AlertsComponent.AlertType, modifier: Modifier = Mod is AlertsComponent.AlertType.WrongCardSelected, is AlertsComponent.AlertType.UnknownDomain, is AlertsComponent.AlertType.UnknownError, + is AlertsComponent.AlertType.UnsupportedMethod, -> TangemTheme.colors.icon.attention is AlertsComponent.AlertType.MaliciousTransaction, is AlertsComponent.AlertType.UnsafeDomain, @@ -190,6 +192,7 @@ private fun AlertIcon(alert: AlertsComponent.AlertType, modifier: Modifier = Mod is AlertsComponent.AlertType.UnsupportedNetworks -> R.drawable.ic_network_new_24 is AlertsComponent.AlertType.WrongCardSelected, is AlertsComponent.AlertType.UnknownError, + is AlertsComponent.AlertType.UnsupportedMethod, -> R.drawable.img_attention_20 is AlertsComponent.AlertType.VerifiedDomain -> R.drawable.img_approvale2_20 } @@ -204,6 +207,7 @@ private fun AlertIcon(alert: AlertsComponent.AlertType, modifier: Modifier = Mod is AlertsComponent.AlertType.VerifiedDomain, is AlertsComponent.AlertType.UnknownError, is AlertsComponent.AlertType.WrongCardSelected, + is AlertsComponent.AlertType.UnsupportedMethod, -> Color.Unspecified } Box( @@ -236,6 +240,7 @@ private fun AlertContentTitle(alert: AlertsComponent.AlertType, modifier: Modifi is AlertsComponent.AlertType.VerifiedDomain -> R.string.wc_alert_verified_domain_title is AlertsComponent.AlertType.WcDisconnected -> R.string.wc_alert_session_disconnected_title is AlertsComponent.AlertType.WrongCardSelected -> R.string.wc_alert_wrong_card_title + is AlertsComponent.AlertType.UnsupportedMethod -> R.string.wc_alert_unsupported_method_title } Text( modifier = modifier, @@ -272,6 +277,9 @@ private fun AlertContentDescription(alert: AlertsComponent.AlertType, modifier: R.string.wc_alert_session_disconnected_description, ) is AlertsComponent.AlertType.WrongCardSelected -> stringResourceSafe(R.string.wc_alert_wrong_card_description) + is AlertsComponent.AlertType.UnsupportedMethod -> stringResourceSafe( + R.string.wc_alert_unsupported_method_description, + ) } Text( modifier = modifier, @@ -315,6 +323,7 @@ private fun AlertAudit(alert: AlertsComponent.AlertType, modifier: Modifier = Mo is AlertsComponent.AlertType.VerifiedDomain, is AlertsComponent.AlertType.WcDisconnected, is AlertsComponent.AlertType.WrongCardSelected, + is AlertsComponent.AlertType.UnsupportedMethod, -> Unit } } @@ -351,5 +360,6 @@ private class AlertTypesProvider : CollectionPreviewParameterProvider