From ad73b0428764966b4e48b49bbf2a99777d4604b0 Mon Sep 17 00:00:00 2001 From: iMaks99 <45900939+iMaks99@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:20:30 +0500 Subject: [PATCH] AND-9454 Added ToC And Privacy Policy to onramp page --- core/res/src/main/res/values-de/strings.xml | 20 +++- core/res/src/main/res/values-es/strings.xml | 4 +- core/res/src/main/res/values-fr/strings.xml | 2 +- core/res/src/main/res/values-ja/strings.xml | 16 +-- core/res/src/main/res/values-ru/strings.xml | 8 +- .../src/main/res/values-uk-rUA/strings.xml | 2 +- core/res/src/main/res/values/strings.xml | 11 +- .../data/onramp/DefaultOnrampRepository.kt | 7 +- .../domain/onramp/model/OnrampProvider.kt | 7 +- .../onramp/main/entity/OnrampIntents.kt | 1 + .../main/entity/OnrampProviderBlockUM.kt | 3 + .../OnrampAmountFieldChangeConverter.kt | 1 + .../amount/OnrampAmountStateFactory.kt | 6 ++ .../main/model/OnrampMainComponentModel.kt | 4 + .../onramp/main/ui/OnrampButtonComponent.kt | 100 ++++++++++++++++++ .../main/ui/OnrampMainComponentContent.kt | 13 +-- 16 files changed, 170 insertions(+), 35 deletions(-) create mode 100644 features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 7f2d6cb4e4..1055b86c5d 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -3,10 +3,18 @@ Du kannst Deinen Token nicht finden? Gehe zum Bereich „Markt“ auf der Hauptseite und fügen diesen zum kaufen im Portfolio hinzu. Du kannst Deinen Token nicht finden? Gehe zum Bereich „Markt“ auf der Hauptseite und fügen diesen zum verkaufen im Portfolio hinzu. Verkaufen + Einige Netzwerke sind derzeit nicht erreichbar. Bitte versuche es später erneut. + Die Daten wurden noch nicht geladen. + Die Aktion ist derzeit nicht verfügbar. Bitte versuche es später erneut oder aktualisiere die Daten, indem Du auf dem Bildschirm nach unten wischst. + Schaltfläche ist nicht verfügbar Wähle den Token Du kannst Deinen Token nicht finden? Gehe zum Bereich „Markt“ auf der Hauptseite und fügen diesen zum tauschen im Portfolio hinzu. Es gibt keine verfügbaren Token, die mit dem ausgewählten Token getauscht werden können. Bitte wähle einen anderen. Kein verfügbares Paar + Um die Tauschfunktion zu nutzen, muss Dein Portfolio mindestens 2 Token enthalten. + Token hinzufügen + Du hast Deinem Portfolio nur 1 Token hinzugefügt. Um die Tauschfunktion zu verwenden, musst Du mindestens 2 Token hinzufügen. + Token hinzufügen Wähle den Token aus, den Du erhalten möchtest Wähle den Token, den Du tauschen möchtest Netzwerk wählen @@ -263,6 +271,9 @@ Der Betrag wurde in %1$s (%2$s Netzwerk) zurückerstattet. Besuche die Website des Anbieters zur Überprüfung KYC-Überprüfung durch den Anbieter erforderlich + Gekauft + Einkaufen + Einkaufen... Abgebrochen Bestätigt Bestätigen @@ -308,6 +319,7 @@ Bitte sag uns, welche Karte oder Ring du hast Hallo Support-Team, Bitte erzähle uns mehr über dein Problem. Jedes kleine Detail kann helfen. + Zuvor aktivierte Wallet Meine Vorschläge Kann eine Karte oder Ring nicht scannen Rückmeldung @@ -585,7 +597,7 @@ Residenz Bitte wähle das richtige Land aus, um korrekte Zahlungsoptionen und Dienstleistungen zu gewährleisten. Einstellungen - Du kannst den Transaktionsstatus auf der Token-Seite überprüfen. + Du kannst diesen Bildschirm schließen und den Transaktionsstatus auf dem Bildschirm mit den Token-Details überprüfen. Du kannst diesen Bildschirm schließen und den Transaktionsstatus auf dem Bildschirm mit den Token-Details überprüfen. Über Gruppe erstellen @@ -600,6 +612,7 @@ %1$s ( %2$s ) im %3$s Netzwerk Das Senden einer anderen Währung führt zu deren irreversiblem Verlust. Sende nur %s an diese Adresse. Der Versand einer anderen Währung führt zu ihrem unwiderruflichen Verlust. + Senden nur %1$s im Netzwerk %2$s Überweise Geld von einem anderen Wallet oder einer anderen Börse Teilnehmen Die Informationen zum Empfehlungsprogramm konnten nicht geladen werden. Bitte versuche es später noch einmal. @@ -651,6 +664,7 @@ Karte oder Ring scannen Scanne die Karte oder Ring, um ihre Einstellungen zu ändern. Die Änderungen wirken sich nur auf die von dir gescannte Karte oder Ring aus und haben keine Auswirkungen auf andere mit deiner Wallet verknüpften Geräte. Halte deine Karte oder Ring bereit! + Sicherheitswarnung Dein Konto verfügt nicht über genügend Guthaben, um diese Kryptowährung zu verkaufen. Bitte zahle den gewünschten Vermögenswert ein, um fortzufahren. Unzureichendes Guthaben Der Verkauf von Kryptowährung ist in Deiner Region derzeit nicht möglich. Wir arbeiten aktiv daran, Ihnen diese Option bald anzubieten – bleib dran! @@ -868,6 +882,7 @@ Du erhältst Token auswählen Nicht verfügbar + Das ist meine Wallet Guthaben versteckt Angezeigte Salden Rückgängig machen @@ -937,6 +952,7 @@ Alle mit %s freischalten Blockchain ist nicht erreichbar. Versuche es später nochmal Karte oder Ring scannen + Diese Wallet wurde bereits früher aktiviert.\nWenn es nicht von Dir durchgeführt wurde, wende Dich bitte an den Support.\nTangem verkauft niemals Wallets zusammen mit dem vorgenerierten Zugangscode. Aufforderung zum Signieren einer Nachricht. \n\n %s Dapp %1$s, mit der Bitte um\nBNB-Transaktion zu unterzeichnen.\n\n%2$s Handelsauftrag für %1$s\n Preis: %2$s\n Zu erhaltender Betrag: %3$s\n Zu zahlender Betrag: %4$s @@ -984,7 +1000,7 @@ Genehmigung läuft Es scheint, dass die Aktivierung der Karte oder des Rings nicht korrekt abgeschlossen wurde. Dies kann an einem Problem mit dem NFC-Modul deines Gerätes oder an einem falschen Tippen der Karte oder Ring auf dein Gerät liegen. Bitte wende dich an unser Support-Team, um Unterstützung zu erhalten. Aktivierungsfehler - Laut den Entwicklern des BNB-Netzes wird die Unterstützung für den BEP-2-Standard im Juni 2024 enden. Um den Verlust von Vermögenswerten mit diesem Standard zu vermeiden, konvertiere bitte in den BEP-20 Standard. Nutze gerne unseren Swap-Service, um sie auf das BNB Smart Chain Netzwerk zu übertragen. + Am 3. Dezember 2024 wurde das BEP-2-Netzwerk auf Entscheidung der Netzwerkentwickler deaktiviert und wird nicht mehr unterstützt BNB Beacon Chain wird abgeschaltet Bitte zahle ein paar %1$s ein, um die Netzwerkgebühr zu decken Unzureichende Mittel zur Deckung der Netzgebühr diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 78fee270ad..8ecdd2c7e7 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -176,7 +176,7 @@ Enviar Con éxito Soporte - Intercambiar + Swap términos y condiciones Condiciones de uso Hoy @@ -982,7 +982,7 @@ Aprobación en curso Parece que la activación de la tarjeta no ha ido correctamente. Esto puede deberse a un problema con el módulo NFC de su dispositivo o a una mala conexión de la tarjeta de su dispositivo. Comuníquese con nuestro equipo de soporte para obtener ayuda. Error de activación - Según los desarrolladores de la red BNB, el soporte para el estándar BEP-2\nfinalizará en junio de 2024. Para evitar perder activos con este estándar, por favor conviértalos al estándar BEP-20. Usa nuestro servicio de swap para transferirlos a la red BNB Smart Chain. + El 3 de diciembre de 2024, la red BEP-2 fue desactivada por decisión de los desarrolladores de la red y ya no es compatible BNB Beacon Chain se cerrará Por favor deposite %1$s para cubrir la tarifa de red Fondos insuficientes para cubrir la tarifa de red diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index f1a4e1d5a3..4e3fe4704b 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -982,7 +982,7 @@ Approbation en cours Il semble que l\'activation de la carte ne se soit pas déroulée correctement. Cela peut être dû à un problème avec le module NFC de votre appareil ou à une mauvaise connexion de la carte sur votre appareil. Veuillez contacter notre équipe de support pour obtenir de l’aide. Erreur d\'activation - Selon les développeurs du réseau BNB, le support de la norme BEP-2\nprendra fin en juin 2024. Pour éviter de perdre des actifs avec cette norme, veuillez les convertir à la norme BEP-20. Utilisez notre service de d\'échange pour les transférer sur le réseau BNB Smart Chain. + Le 3 décembre 2024, le réseau BEP-2 a été désactivé par décision des développeurs du réseau et n\'est plus pris en charge BNB Beacon Chain va s\'arrêter de fonctionner Veuillez déposer environ %1$s pour couvrir les frais de réseau Fonds insuffisants pour couvrir les frais de réseau diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 73cff6874b..7b931f0406 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -3,8 +3,8 @@ トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して買付できるようにします。 トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して売却できるようにします。 売却 - 接続には数秒かかる場合があります。しばらくお待ちください。 - 接続 + これには数秒かかる場合があります。しばらくしてからもう一度お試しください。 + データはまだ読み込まれていません。 この操作は現在利用できません。しばらくしてからもう一度お試しいただくか、画面を下にスワイプしてデータを更新してください。 ボタンは使用できません トークンを選択 @@ -316,6 +316,7 @@ お持ちのカードまたはリングについて教えてください サポートチームの皆さん、こんにちは。 問題について詳しく教えてください。どんな些細なことでも役に立ちます。 + 以前に有効化されたウォレット 私の提案 カード / リングをスキャンできません フィードバック @@ -588,7 +589,7 @@ 住居 正確なお支払い方法とサービスを確保するため、正しい国を選択してください。 設定 - トークンページから取引状況を確認できます。 + この画面を閉じて、トークンの詳細画面で取引状況を確認できます。 この画面を閉じて、トークンの詳細画面で取引状況を確認できます。 経由 グループ @@ -653,7 +654,8 @@ カードまたはリングをスキャン カードまたはリングをスキャンして設定を変更します。変更はスキャンしたカードまたはリングにのみ影響し、ウォレットに関連付けられている他のデバイスには影響しません。 Tangemを準備してください! - この暗号資産を売却するのに十分な資金が残高にありません。続行するには、希望の資産を入金してください。 + セキュリティ警告 + 暗号通貨を売却するための十分な資金が残高にありません。続行するには希望の資産を入金してください。 残高不足 現在、お住まいの地域では暗号資産の売却はご利用いただけません。このオプションをすぐにご利用いただけるよう積極的に取り組んでいますので、お楽しみに! 地域制限 @@ -870,6 +872,7 @@ 受け取る トークンを選択 利用不可 + これは私のウォレットです 残高非表示 残高表示 元に戻す @@ -939,6 +942,7 @@ %sですべてをロック解除 ブロックチェーンにアクセスできません。後でもう一度お試しください。 カードまたはリングをスキャン + このウォレットはすでに有効化されています。\nあなたが行ったのでない場合は、サポートに連絡してください。\nTangemは、事前に生成されたアクセスコードと一緒にウォレットを販売することはありません。 メッセージに署名することを要求しています。 \n\n %s Dapp%1$s 、BNB取引の署名を要求しています\n\n%2$s %1$sの取引注文\n価格: %2$s\n受取金額: %3$s\n支払金額: %4$s @@ -986,8 +990,8 @@ 承認中 カードまたはリングのアクティベーションが正しく完了しませんでした。デバイスのNFCモジュールに問題があるか、カードまたはリングをデバイスに正しくタップしていないことが原因かもしれません。サポートチームにお問い合わせください。 アクティベーションに失敗しました - BNBネットワーク開発者によると、BEP-2規格のサポートは2024年6月に終了します。この規格の資産を失わないために、BEP-20規格に変換してください。BNBスマートチェーンネットワークへ移行するには、Tangemのスワップサービスをご利用ください。 - BNBビーコンチェーンは閉鎖されます。 + 2024年12月3日、BEP-2ネットワークはネットワーク開発者の決定により使用不能となり、サポートは終了しました。 + BNBビーコンチェーンは閉鎖されました ネットワーク手数料をカバーするために%1$sを入金してください ネットワーク手数料をカバーする資金が不足しています もっと良くなるはず diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 4ba37fba49..5424eee393 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -3,8 +3,8 @@ Не нашли свой токен? Перейдите в раздел «Рынок» на главной странице и добавьте его в свой портфель для покупки. Не нашли свой токен? Перейдите в раздел «Рынок» на главной странице и добавьте его в свой портфель для продажи. Продать - Подключение может занять несколько секунд. Пожалуйста, подождите. - Соединение + Это может занять несколько секунд. Пожалуйста, попробуйте позже. + Данные ещё не загрузились Действие в данный момент недоступно, пожалуйста попробуйте позже или обновить данные, сделав свайп экрана вниз. Кнопка недоступна Выберите токен @@ -682,7 +682,7 @@ Отсканируйте карту или кольцо, чтобы изменить ее настройки. Изменения затронут только ту карту или кольцо, которые вы отсканировали, и не повлияют на другие устройства, привязанные к вашему кошельку. Приготовьте свой Tangem! Уведомление безопасности - На вашем балансе недостаточно средств для продажи этой криптовалюты. Пожалуйста, пополните нужный актив, чтобы продолжить. + На вашем балансе недостаточно средств для продажи криптовалюты. Пожалуйста, пополните нужный актив, чтобы продолжить. Недостаточно средств Продажа криптовалюты в вашем регионе временно недоступна. Мы активно работаем над тем, чтобы добавить эту возможность. Следите за нашими новостями! Региональные ограничения @@ -1016,7 +1016,7 @@ Выдача разрешения Похоже, что процесс активации карт или кольца не был завершен корректно. Это могло быть вызвано проблемой взаимодействия с модулем NFC либо некорректным прикладыванием карты или кольца к телефону. Пожалуйста, обратитесь в нашу службу поддержки для уточнения деталей. Ошибка активации - По решению разработчиков сети BNB стандарт BEP-2 перестанет поддерживаться в июне 2024 года. Чтобы не потерять активы, их необходимо преобразовать в стандарт BEP-20. Используйте функцию обмена в приложении или сторонние сервисы, чтобы перевести средства в cеть BNB Smart Chain. + С 3 декабря 2024 года сеть BEP-2 была отключена по решению разработчиков сети и более не поддерживается Отключение сети BNB Beacon Chain Внесите немного %1$s, чтобы покрыть комиссию сети Недостаточно средств для оплаты комиссии сети diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 745f163055..80f21fbd9b 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -988,7 +988,7 @@ Підтвердження в процесі Схоже, що активація карток або кільця була виконана неправильно. Це може бути пов\'язано з проблемою з модулем NFC вашого пристрою або неправильним прикладанням картки або кільця до телефону. Будь ласка, зверніться за допомогою до нашої служби підтримки для уточнення деталей. Помилка активації - За рішенням розробників мережі BNB стандарт BEP-2 перестане підтримуватись у червні 2024 року. Щоб не втратити свої активи, їх необхідно конвертувати у стандарт BEP-20. Використовуйте функцію обміну, щоб перевести їх у мережу BNB Smart Chain. + 3 грудня 2024 року мережу BEP-2 було відключено за рішенням розробників мережі, і вона більше не підтримується Відключення мережі BNB Beacon Chain Будь ласка, поповніть рахунок на %1$s для покриття комісії мережі Недостатньо коштів для покриття комісії мережі diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index f17f29f971..ffccaa511b 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -3,8 +3,8 @@ Can’t find your token? Go to the Market section on the main page and add it to your portfolio for purchase Can’t find your token? Go to the Market section on the main page and add it to your portfolio for selling. Sell - Connection may take a few seconds. Please wait. - Connection + This may take a few seconds. Please try again later. + The data has not loaded yet. The action is currently unavailable. Please try again later or refresh the data by swiping down on the screen. Button is unavailable Choose the Token @@ -584,6 +584,7 @@ Search by country Unavailable Search by currency + By using onramp functionality, you agree with provider’s %1$s and %2$s The purchase amount should be no more than %s The amount to buy must be at least %s No available providers for this currency @@ -665,7 +666,7 @@ Scan the card or ring to change its settings. The changes will impact only the card or ring you\'ve scanned and will not affect other devices tied to your wallet. Get your Tangem ready! Security Alert - You don’t have enough funds in your balance to sell this cryptocurrency. Please deposit the desired asset to proceed. + You don’t have enough funds in your balance to sell cryptocurrency. Please deposit the desired asset to proceed. Insufficient Balance Selling cryptocurrency is unavailable in your region at the moment. We’re actively working to bring this option to you soon—stay tuned! Regional Restriction @@ -1000,8 +1001,8 @@ Approval in Progress It seems that the card or ring activation was not completed correctly. This could be due to an issue with your device\'s NFC module or incorrect tapping of the card or ring to your device. Please contact our Support team for assistance. Activation error - According to BNB network developers, support for the BEP-2 standard will end in June 2024. To avoid losing assets with this standard, please convert them to the BEP-20 standard. Use our swap service or third-party services to transfer funds to the BNB Smart Chain network. - BNB Beacon Chain will shut down + On December 3, 2024, the BEP-2 network was disabled by decision of the network developers and is no longer supported + BNB Beacon Chain shut down Please deposit some %1$s to cover the network fee Insufficient funds to cover the network fee Could be better diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt index a35e5569ae..e7b370fc56 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt @@ -376,7 +376,12 @@ internal class DefaultOnrampRepository( OnrampProvider( id = onrampProviderDTO.providerId, - info = OnrampProviderInfo(name = providerInfo.name, imageLarge = providerInfo.imageLargeUrl), + info = OnrampProviderInfo( + name = providerInfo.name, + imageLarge = providerInfo.imageLargeUrl, + termsOfUseLink = providerInfo.termsOfUse, + privacyPolicyLink = providerInfo.privacyPolicy, + ), paymentMethods = onrampPaymentMethods.filter { paymentMethod -> onrampProviderDTO.paymentMethods.any { paymentMethod.id == it } }, diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampProvider.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampProvider.kt index 98304a0167..ca414a9f8a 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampProvider.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampProvider.kt @@ -10,4 +10,9 @@ data class OnrampProvider( ) @Serializable -data class OnrampProviderInfo(val name: String, val imageLarge: String) +data class OnrampProviderInfo( + val name: String, + val imageLarge: String, + val termsOfUseLink: String?, + val privacyPolicyLink: String?, +) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampIntents.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampIntents.kt index 24a3adc3e7..1e7de7dd49 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampIntents.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampIntents.kt @@ -9,4 +9,5 @@ interface OnrampIntents { fun onBuyClick(quote: OnrampProviderWithQuote.Data) fun openProviders() fun onRefresh() + fun onLinkClick(link: String) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampProviderBlockUM.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampProviderBlockUM.kt index d547ef93b6..1074a0ca6d 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampProviderBlockUM.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/OnrampProviderBlockUM.kt @@ -9,7 +9,10 @@ sealed class OnrampProviderBlockUM { val providerId: String, val paymentMethod: OnrampPaymentMethod, val providerName: String, + val termsOfUseLink: String?, + val privacyPolicyLink: String?, val isBestRate: Boolean, + val onLinkClick: (String) -> Unit, val onClick: () -> Unit, ) : OnrampProviderBlockUM() } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt index 33f6ea4c0e..72a1c7a608 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt @@ -61,6 +61,7 @@ internal class OnrampAmountFieldChangeConverter( amountFieldModel = amountFieldModel, secondaryFieldModel = OnrampAmountSecondaryFieldUM.Content(TextReference.EMPTY), ), + buyButtonConfig = buyButtonConfig.copy(enabled = false), providerBlockState = OnrampProviderBlockUM.Empty, ) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt index 6c108ae5e2..9b9a6955cf 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt @@ -122,6 +122,9 @@ internal class OnrampAmountStateFactory( providerName = providerResult.provider.info.name, isBestRate = isBestRate, onClick = onrampIntents::openProviders, + termsOfUseLink = providerResult.provider.info.termsOfUseLink, + privacyPolicyLink = providerResult.provider.info.privacyPolicyLink, + onLinkClick = onrampIntents::onLinkClick, ), buyButtonConfig = currentState.buyButtonConfig.copy( enabled = providerResult is SelectProviderResult.ProviderWithQuote, @@ -148,6 +151,9 @@ internal class OnrampAmountStateFactory( providerName = provider.info.name, isBestRate = isBestRate, onClick = onrampIntents::openProviders, + termsOfUseLink = provider.info.termsOfUseLink, + privacyPolicyLink = provider.info.privacyPolicyLink, + onLinkClick = onrampIntents::onLinkClick, ) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt index 1962ca3f66..e785fb01bc 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt @@ -10,6 +10,7 @@ import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.navigation.Router import com.tangem.core.decompose.ui.UiMessageSender +import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.ui.components.BasicDialog import com.tangem.core.ui.components.DialogButtonUM import com.tangem.core.ui.extensions.resolveReference @@ -60,6 +61,7 @@ internal class OnrampMainComponentModel @Inject constructor( private val fetchPairsUseCase: OnrampFetchPairsUseCase, private val amountInputManager: InputManager, private val messageSender: UiMessageSender, + private val urlOpener: UrlOpener, getWalletsUseCase: GetWalletsUseCase, paramsContainer: ParamsContainer, ) : Model(), OnrampIntents { @@ -286,6 +288,8 @@ internal class OnrampMainComponentModel @Inject constructor( } } + override fun onLinkClick(link: String) = urlOpener.openUrl(link) + override fun onDestroy() { modelScope.launch { clearOnrampCacheUseCase.invoke() } quotesTaskScheduler.cancelTask() diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt new file mode 100644 index 0000000000..56b20fc418 --- /dev/null +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt @@ -0,0 +1,100 @@ +package com.tangem.features.onramp.main.ui + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.togetherWith +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.ClickableText +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.tangem.core.ui.components.PrimaryButton +import com.tangem.core.ui.extensions.appendColored +import com.tangem.core.ui.res.TangemTheme +import com.tangem.features.onramp.impl.R +import com.tangem.features.onramp.main.entity.OnrampMainComponentUM +import com.tangem.features.onramp.main.entity.OnrampProviderBlockUM + +private const val TERMS_OF_USE_KEY = "termsOfUse" +private const val PRIVACY_POLICY_KEY = "privacyPolicy" + +@Composable +internal fun OnrampButtonComponent(state: OnrampMainComponentUM) { + val content = state as? OnrampMainComponentUM.Content + val providerState = content?.providerBlockState as? OnrampProviderBlockUM.Content + Column( + modifier = Modifier + .navigationBarsPadding() + .padding(horizontal = 16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + OnrampTosText(providerState) + PrimaryButton( + modifier = Modifier.fillMaxWidth(), + text = stringResource(id = R.string.common_buy), + onClick = state.buyButtonConfig.onClick, + enabled = state.buyButtonConfig.enabled, + ) + } +} + +@Composable +private fun OnrampTosText(provider: OnrampProviderBlockUM.Content?) { + val termsOfUse = stringResource(R.string.common_terms_of_use) + val privacyPolicy = stringResource(R.string.common_privacy_policy) + val tosText = stringResource(R.string.onramp_legal, termsOfUse, privacyPolicy) + + val clickableAnnotation = buildAnnotatedString { + append(tosText.substringBefore(termsOfUse)) + + pushStringAnnotation(TERMS_OF_USE_KEY, "") + appendColored(termsOfUse, TangemTheme.colors.text.accent) + pop() + + append(tosText.substringAfter(termsOfUse).substringBefore(privacyPolicy)) + + pushStringAnnotation(PRIVACY_POLICY_KEY, "") + appendColored(privacyPolicy, TangemTheme.colors.text.accent) + pop() + } + + AnimatedContent( + targetState = provider, + transitionSpec = { fadeIn().togetherWith(fadeOut()) }, + label = "Onramp Legal Info Animation", + ) { state -> + val termsOfUseLink = provider?.termsOfUseLink + val privacyPolicyLink = provider?.privacyPolicyLink + + if (state != null && termsOfUseLink != null && privacyPolicyLink != null) { + ClickableText( + text = clickableAnnotation, + style = TangemTheme.typography.caption2.copy( + color = TangemTheme.colors.text.tertiary, + textAlign = TextAlign.Center, + ), + onClick = { offset -> + clickableAnnotation.getStringAnnotations( + tag = TERMS_OF_USE_KEY, + start = offset, + end = offset, + ).firstOrNull()?.let { + state.onLinkClick(termsOfUseLink) + } + + clickableAnnotation.getStringAnnotations( + tag = PRIVACY_POLICY_KEY, + start = offset, + end = offset, + ).firstOrNull()?.let { + state.onLinkClick(privacyPolicyLink) + } + }, + ) + } + } +} diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampMainComponentContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampMainComponentContent.kt index 27cb6ca35b..7f2705c643 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampMainComponentContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampMainComponentContent.kt @@ -11,16 +11,13 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource import com.tangem.core.ui.components.CircleShimmer -import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.components.RectangleShimmer import com.tangem.core.ui.components.appbar.TangemTopAppBar import com.tangem.core.ui.components.notifications.Notification import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.utils.WindowInsetsZero -import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.main.entity.OnrampMainComponentUM @Composable @@ -49,15 +46,7 @@ internal fun OnrampMainComponentContent(state: OnrampMainComponentUM, modifier: } }, floatingActionButton = { - PrimaryButton( - modifier = Modifier - .navigationBarsPadding() - .padding(horizontal = TangemTheme.dimens.spacing16) - .fillMaxWidth(), - text = stringResource(id = R.string.common_buy), - onClick = state.buyButtonConfig.onClick, - enabled = state.buyButtonConfig.enabled, - ) + OnrampButtonComponent(state) }, floatingActionButtonPosition = FabPosition.Center, )