Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-03 13:51:49 +03:00
commit a3d5e878a7
15 changed files with 170 additions and 44 deletions

View file

@ -722,6 +722,7 @@
<string name="staking_reward_schedule_block">Pro Block</string>
<string name="staking_reward_schedule_day">Täglich</string>
<string name="staking_reward_schedule_each_day">Täglich</string>
<string name="staking_reward_schedule_each_sec">Alle %1$s Sek.</string>
<string name="staking_reward_schedule_epoch">Pro Epoche</string>
<string name="staking_reward_schedule_era">Pro Ära</string>
<string name="staking_reward_schedule_hour">Stündlich</string>
@ -744,6 +745,7 @@
<string name="staking_unstaking_item_name">Unstake Assets %s</string>
<string name="staking_validator">Validator/ Prüfer</string>
<string name="staking_validators">Validatoren</string>
<string name="staking_validators_label">Strategischer Partner</string>
<string name="staking_vote">Abstimmung</string>
<string name="staking_vote_locked">Abstimmung gesperrt</string>
<string name="staking_withdraw">Zurückziehen</string>

View file

@ -338,7 +338,7 @@
</plurals>
<string name="manage_tokens_remove">Eliminar</string>
<string name="manage_tokens_search_placeholder">por ejemplo, BTC I trust, hodl I must</string>
<string name="manage_tokens_toast_portfolio_updated">Su cartera ha sido actualizada</string>
<string name="manage_tokens_toast_portfolio_updated">Su portafolio ha sido actualizada</string>
<string name="manage_tokens_unavailable_description">El token seleccionado no está disponible actualmente para acciones dentro de la billetera cripto. Pero no se preocupa, puede expresar su interés votando a favor.</string>
<string name="manage_tokens_unavailable_vote">Votar a favor</string>
<string name="manage_tokens_wallet_selector_title">Elegir wallet</string>
@ -373,7 +373,7 @@
<string name="markets_sort_by_experienced_buyers_title">Compradores experimentados</string>
<string name="markets_sort_by_rating_title">Evaluación</string>
<string name="markets_sort_by_title">Ordenar por</string>
<string name="markets_sort_by_top_gainers_title">Mejores Ganadores</string>
<string name="markets_sort_by_top_gainers_title">Top Ganadores</string>
<string name="markets_sort_by_top_losers_title">Top Perdedores</string>
<string name="markets_sort_by_trending_title">Tendencias</string>
<string name="markets_token_details_about_token_title">Acerca de %s</string>
@ -720,6 +720,7 @@
<string name="staking_reward_schedule_block">Bloquear</string>
<string name="staking_reward_schedule_day">Día</string>
<string name="staking_reward_schedule_each_day">Cada día</string>
<string name="staking_reward_schedule_each_sec">Cada %1$s segundo(s)</string>
<string name="staking_reward_schedule_epoch">Época</string>
<string name="staking_reward_schedule_era">Era</string>
<string name="staking_reward_schedule_hour">Hora</string>
@ -742,8 +743,9 @@
<string name="staking_unstaking_item_name">Detenando el staking de activos %s</string>
<string name="staking_validator">Validador</string>
<string name="staking_validators">Validadores</string>
<string name="staking_validators_label">Socio estratégico</string>
<string name="staking_vote">Votar</string>
<string name="staking_vote_locked">Voto bloqueado</string>
<string name="staking_vote_locked">Votar</string>
<string name="staking_withdraw">Retirar</string>
<string name="staking_your_stakes">Sus stakes</string>
<string name="story_awe_description">Almacene sus activos crypto de forma segura manteniendo las claves privadas contenidas en su tarjeta</string>

View file

@ -720,6 +720,7 @@
<string name="staking_reward_schedule_block">Bloquer</string>
<string name="staking_reward_schedule_day">Jour</string>
<string name="staking_reward_schedule_each_day">Chaque jour</string>
<string name="staking_reward_schedule_each_sec">Toute(s) les %1$s seconde(s)</string>
<string name="staking_reward_schedule_epoch">Époque</string>
<string name="staking_reward_schedule_era">Ère</string>
<string name="staking_reward_schedule_hour">Heure</string>
@ -742,8 +743,9 @@
<string name="staking_unstaking_item_name">En train de destaker les actifs %s</string>
<string name="staking_validator">Validateur</string>
<string name="staking_validators">Validateurs</string>
<string name="staking_validators_label">Partenaire stratégique</string>
<string name="staking_vote">Voter</string>
<string name="staking_vote_locked">Vote bloqué</string>
<string name="staking_vote_locked">Voter</string>
<string name="staking_withdraw">Retirer</string>
<string name="staking_your_stakes">Vos stakes</string>
<string name="story_awe_description">Stockez vos actifs crypto en toute sécurité tout en conservant les clés privées contenues dans votre carte</string>

View file

@ -95,6 +95,9 @@
<plurals name="common_days">
<item quantity="other">%d 日</item>
</plurals>
<plurals name="common_days_no_param">
<item quantity="other"></item>
</plurals>
<string name="common_delete">削除</string>
<string name="common_disabled">無効</string>
<string name="common_done">完了</string>
@ -340,7 +343,7 @@
<string name="manage_tokens_unavailable_vote">賛成票を投じる</string>
<string name="manage_tokens_wallet_selector_title">ウォレットを選択</string>
<string name="manage_tokens_wallet_support_only_one_network_title">ウォレットは複数のネットワークをサポートしていません。</string>
<string name="markets_add_to_my_portfolio_description">このアセットの購入、交換、受け取りを開始するには、ポートフォリオに追加してください。</string>
<string name="markets_add_to_my_portfolio_description">このアセットを購入・交換・受け取るには、ポートフォリオに追加してください。</string>
<string name="markets_add_to_my_portfolio_unavailable_description">このアセットは利用できません</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">このアセットはこのウォレットでは使用できません。</string>
<string name="markets_add_to_portfolio_button">ポートフォリオに追加</string>
@ -375,6 +378,9 @@
<string name="markets_sort_by_top_losers_title">下落率上位</string>
<string name="markets_sort_by_trending_title">トレンド</string>
<string name="markets_token_details_about_token_title">%sについて</string>
<plurals name="markets_token_details_amount_exchanges">
<item quantity="other">%d取引所</item>
</plurals>
<plurals name="markets_token_details_based_on_ratings">
<item quantity="other">%d のレーティングに基づいて</item>
</plurals>
@ -385,6 +391,12 @@
<string name="markets_token_details_circulating_supply">循環供給量</string>
<string name="markets_token_details_circulating_supply_description">取引可能で市場に流通しているコインの総数</string>
<string name="markets_token_details_circulating_supply_full">循環供給量</string>
<string name="markets_token_details_empty_exchanges">取引所が見つかりません</string>
<string name="markets_token_details_exchange">取引所</string>
<string name="markets_token_details_exchange_trust_score_caution">注意</string>
<string name="markets_token_details_exchange_trust_score_risky">危険</string>
<string name="markets_token_details_exchange_trust_score_trusted">信頼できる</string>
<string name="markets_token_details_exchanges_title">取引所</string>
<string name="markets_token_details_experienced_buyers">経験豊富な買い手</string>
<string name="markets_token_details_experienced_buyers_description">少なくとも100の発信取引を持つネット・バイヤー</string>
<string name="markets_token_details_experienced_buyers_full">経験豊富な買い手</string>
@ -402,6 +414,7 @@
<string name="markets_token_details_liquidity_description">指定された期間中のトークンに利用可能な流動性の変化</string>
<string name="markets_token_details_liquidity_full">流動性</string>
<string name="markets_token_details_liquidity_index">流動性指数</string>
<string name="markets_token_details_listed_on">上場先</string>
<string name="markets_token_details_low">低い</string>
<string name="markets_token_details_market_capitalization">時価総額</string>
<string name="markets_token_details_market_capitalization_description">暗号資産の市場価値の合計。コインの現在の価格と、流通しているコインの総数を掛けて計算されます。</string>
@ -424,6 +437,7 @@
<string name="markets_token_details_trading_volume">取引量24時間</string>
<string name="markets_token_details_trading_volume_24h_description">過去24時間以内に取引された暗号資産の合計額。市場の活発さと流動性を示します。</string>
<string name="markets_token_details_trading_volume_full">取引量24時間</string>
<string name="markets_token_details_volume">取引量</string>
<string name="markets_tooltip_message">これをドラッグするか、検索窓をタップして、マーケットから直接トークンを追加します</string>
<string name="markets_tooltip_title">トークンを追加</string>
<string name="nfc_error_unavailable">お使いのデバイスではNFCが使用できません</string>
@ -712,7 +726,10 @@
<string name="staking_reward_claiming_manual">手動</string>
<string name="staking_reward_schedule_block">ブロック毎</string>
<string name="staking_reward_schedule_day">毎日</string>
<string name="staking_reward_schedule_each">%sごと</string>
<string name="staking_reward_schedule_each_day">毎日</string>
<string name="staking_reward_schedule_each_days">%1$s日ごとに</string>
<string name="staking_reward_schedule_each_sec">%1$s秒毎</string>
<string name="staking_reward_schedule_epoch">エポック毎</string>
<string name="staking_reward_schedule_era">時代毎</string>
<string name="staking_reward_schedule_hour">毎時間</string>
@ -723,6 +740,7 @@
<string name="staking_stake_more">もっとステーキングする</string>
<string name="staking_summary_description_text">%1$sをステーキングし、年間 %2$sを受け取ります</string>
<string name="staking_tap_to_unlock">タップしてロック解除</string>
<string name="staking_tap_to_unlock_or_vote">タップしてロック解除もしくは投票</string>
<string name="staking_tap_to_withdraw">タップして引き出す</string>
<string name="staking_title_stake">%sをステーキングする</string>
<string name="staking_title_unstake">%sのステーキング解除</string>
@ -735,8 +753,9 @@
<string name="staking_unstaking_item_name">ステーキング解除中の資産%s</string>
<string name="staking_validator">バリデーター</string>
<string name="staking_validators">バリデーター</string>
<string name="staking_validators_label">戦略的パートナー</string>
<string name="staking_vote">投票する</string>
<string name="staking_vote_locked">投票はロックされていま</string>
<string name="staking_vote_locked">投票す</string>
<string name="staking_withdraw">引き出す</string>
<string name="staking_your_stakes">あなたのステーキング</string>
<string name="story_awe_description">カード内に秘密鍵を保管しながら暗号資産を安全に保管します</string>

View file

@ -101,6 +101,12 @@
<item quantity="many">%d дней</item>
<item quantity="other">%d дней</item>
</plurals>
<plurals name="common_days_no_param">
<item quantity="one">день</item>
<item quantity="few">дня</item>
<item quantity="many">дней</item>
<item quantity="other">дней</item>
</plurals>
<string name="common_delete">Удалить</string>
<string name="common_disabled">Отключено</string>
<string name="common_done">Готово</string>
@ -382,6 +388,12 @@
<string name="markets_sort_by_top_losers_title">Лидеры падения</string>
<string name="markets_sort_by_trending_title">В тренде</string>
<string name="markets_token_details_about_token_title">О %s</string>
<plurals name="markets_token_details_amount_exchanges">
<item quantity="one">%d биржа</item>
<item quantity="few">%d биржи</item>
<item quantity="many">%d бирж</item>
<item quantity="other">%d бирж</item>
</plurals>
<plurals name="markets_token_details_based_on_ratings">
<item quantity="one">На основе %d оценки</item>
<item quantity="few">На основе %d оценок</item>
@ -395,6 +407,12 @@
<string name="markets_token_details_circulating_supply">Циркулир. предл.</string>
<string name="markets_token_details_circulating_supply_description">Общее количество монет, доступных для торговли и находящихся в обращении на рынке</string>
<string name="markets_token_details_circulating_supply_full">Циркулирующее предложение</string>
<string name="markets_token_details_empty_exchanges">Биржи не найдены</string>
<string name="markets_token_details_exchange">Биржа</string>
<string name="markets_token_details_exchange_trust_score_caution">Осторожно</string>
<string name="markets_token_details_exchange_trust_score_risky">Рискованно</string>
<string name="markets_token_details_exchange_trust_score_trusted">Надежно</string>
<string name="markets_token_details_exchanges_title">Биржи</string>
<string name="markets_token_details_experienced_buyers">Опытные трейдеры</string>
<string name="markets_token_details_experienced_buyers_description">Покупатели, у которых было как минимум 100 исходящих транзакций.</string>
<string name="markets_token_details_experienced_buyers_full">Опытные трейдеры</string>
@ -412,6 +430,7 @@
<string name="markets_token_details_liquidity_description">Изменение объема ликвидности, доступной для токена в течение указанного периода времени.</string>
<string name="markets_token_details_liquidity_full">Ликвидность</string>
<string name="markets_token_details_liquidity_index">Индекс ликвидности</string>
<string name="markets_token_details_listed_on">Листинг на</string>
<string name="markets_token_details_low">Низкий</string>
<string name="markets_token_details_market_capitalization">Рын. кап.</string>
<string name="markets_token_details_market_capitalization_description">Общая рыночная стоимость криптовалюты, рассчитываемая путем умножения текущей цены монеты на общее количество монет в обращении.</string>
@ -434,6 +453,7 @@
<string name="markets_token_details_trading_volume">Объем торгов (24ч)</string>
<string name="markets_token_details_trading_volume_24h_description">Общая сумма криптовалюты, которая была продана за последние 24 часа, показывающая уровень активности и ликвидности на рынке.</string>
<string name="markets_token_details_trading_volume_full">Объем торгов (24ч)</string>
<string name="markets_token_details_volume">Объем</string>
<string name="markets_tooltip_message">Потяните вверх или коснитесь поисковой строки, чтобы добавить токены напрямую из рынка</string>
<string name="markets_tooltip_title">Добавить токены</string>
<string name="nfc_error_unavailable">Функция NFC недоступна на вашем устройстве</string>
@ -509,7 +529,7 @@
<string name="onboarding_subtitle_scan_primary_card_format">Подготовьте основную карту с номером %s</string>
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Ваша карта настроена и готова к использованию.</string>
<string name="onboarding_subtitle_two_backup_cards">Добавлено максимальное количество карт. Завершите процесс резервного копирования.</string>
<string name="onboarding_title">Активация карты</string>
<string name="onboarding_title">Активация кошелька</string>
<string name="onboarding_title_backup_card_format">Резервная карта #%d</string>
<string name="onboarding_title_no_backup_cards">Нет резервных карт</string>
<string name="onboarding_title_notifications">Уведомления</string>
@ -734,6 +754,8 @@
<string name="staking_reward_schedule_block">За блок</string>
<string name="staking_reward_schedule_day">Ежедневно</string>
<string name="staking_reward_schedule_each_day">Каждый день</string>
<string name="staking_reward_schedule_each_days">Каждые %1$s дня</string>
<string name="staking_reward_schedule_each_sec">Каждые %1$s сек</string>
<string name="staking_reward_schedule_epoch">За эпоху</string>
<string name="staking_reward_schedule_era">За эру</string>
<string name="staking_reward_schedule_hour">Ежечасно</string>
@ -757,8 +779,9 @@
<string name="staking_unstaking_item_name">Завершение стейкинга %s</string>
<string name="staking_validator">Валидатор</string>
<string name="staking_validators">Валидаторы</string>
<string name="staking_validators_label">Стратегический партнер</string>
<string name="staking_vote">Проголосовать</string>
<string name="staking_vote_locked">Голосование заблокировано</string>
<string name="staking_vote_locked">Проголосовать</string>
<string name="staking_withdraw">Вывод</string>
<string name="staking_your_stakes">Застейканные средства</string>
<string name="story_awe_description">Держите свои криптосбережения в безопасности. Приватные ключи надежно хранятся на карте.</string>

View file

@ -737,6 +737,7 @@
<string name="staking_reward_schedule_block">Блок</string>
<string name="staking_reward_schedule_day">День</string>
<string name="staking_reward_schedule_each_day">Щодня</string>
<string name="staking_reward_schedule_each_sec">Кожні %1$s сек</string>
<string name="staking_reward_schedule_epoch">Епоха</string>
<string name="staking_reward_schedule_era">Ера</string>
<string name="staking_reward_schedule_hour">Година</string>
@ -759,6 +760,7 @@
<string name="staking_unstaking_item_name">Виведення зі стейкінгу %s</string>
<string name="staking_validator">Валідатор</string>
<string name="staking_validators">Валідатори</string>
<string name="staking_validators_label">Стратегічний партнер</string>
<string name="staking_vote">Проголосувати</string>
<string name="staking_vote_locked">Голос заблоковано</string>
<string name="staking_withdraw">Зняти</string>

View file

@ -97,6 +97,10 @@
<item quantity="one">%d day</item>
<item quantity="other">%d days</item>
</plurals>
<plurals name="common_days_no_param">
<item quantity="one">day</item>
<item quantity="other">days</item>
</plurals>
<string name="common_delete">Delete</string>
<string name="common_disabled">Disabled</string>
<string name="common_done">Done</string>
@ -378,6 +382,10 @@
<string name="markets_sort_by_top_losers_title">Top Losers</string>
<string name="markets_sort_by_trending_title">Trending</string>
<string name="markets_token_details_about_token_title">About %s</string>
<plurals name="markets_token_details_amount_exchanges">
<item quantity="one">%d exchange</item>
<item quantity="other">%d exchanges</item>
</plurals>
<plurals name="markets_token_details_based_on_ratings">
<item quantity="one">Based on %d rating</item>
<item quantity="other">Based on %d ratings</item>
@ -389,6 +397,12 @@
<string name="markets_token_details_circulating_supply">Circulating supply</string>
<string name="markets_token_details_circulating_supply_description">The total number of coins that are available for trading and are circulating in the market</string>
<string name="markets_token_details_circulating_supply_full">Circulating supply</string>
<string name="markets_token_details_empty_exchanges">No exchanges found</string>
<string name="markets_token_details_exchange">Exchange</string>
<string name="markets_token_details_exchange_trust_score_caution">Caution</string>
<string name="markets_token_details_exchange_trust_score_risky">Risky</string>
<string name="markets_token_details_exchange_trust_score_trusted">Trusted</string>
<string name="markets_token_details_exchanges_title">Exchanges</string>
<string name="markets_token_details_experienced_buyers">Experienced buyers</string>
<string name="markets_token_details_experienced_buyers_description">Net buyers with the additional requirement of having at least 100 outgoing transactions</string>
<string name="markets_token_details_experienced_buyers_full">Experienced buyers</string>
@ -406,6 +420,7 @@
<string name="markets_token_details_liquidity_description">The change in how much liquidity is available for the token during the specified timeframe</string>
<string name="markets_token_details_liquidity_full">Liquidity</string>
<string name="markets_token_details_liquidity_index">Liquidity index</string>
<string name="markets_token_details_listed_on">Listed on</string>
<string name="markets_token_details_low">Low</string>
<string name="markets_token_details_market_capitalization">Market cap</string>
<string name="markets_token_details_market_capitalization_description">The total market value of a cryptocurrency, calculated by multiplying the current price of the coin by the total number of coins in circulation</string>
@ -428,6 +443,7 @@
<string name="markets_token_details_trading_volume">Trading volume (24h)</string>
<string name="markets_token_details_trading_volume_24h_description">The total amount of a cryptocurrency that has been traded within the last 24 hours, indicating the level of activity and liquidity in the market</string>
<string name="markets_token_details_trading_volume_full">Trading volume (24h)</string>
<string name="markets_token_details_volume">Volume</string>
<string name="markets_tooltip_message">Pull this up or tap the search bar to add tokens directly from the market</string>
<string name="markets_tooltip_title">Add tokens</string>
<string name="nfc_error_unavailable">NFC is not available on your device</string>
@ -499,7 +515,7 @@
<string name="onboarding_subtitle_scan_primary_card_format">Prepare the primary card with number %s</string>
<string name="onboarding_subtitle_success_tangem_wallet_onboarding">Your wallet card is configured and ready for use.</string>
<string name="onboarding_subtitle_two_backup_cards">Max number of cards added. Finalize the backup process.</string>
<string name="onboarding_title">Activating card</string>
<string name="onboarding_title">Activating wallet</string>
<string name="onboarding_title_backup_card_format">Backup card #%d</string>
<string name="onboarding_title_no_backup_cards">No backup cards</string>
<string name="onboarding_title_notifications">Notifications</string>
@ -679,7 +695,7 @@
<string name="staking_details_reward_claiming">Reward claiming</string>
<string name="staking_details_reward_claiming_info">Method of receiving staking rewards.\nIt can be either automatic, where the reward is credited to your address, or manual, where you need to withdraw the reward by creating a transaction to receive it.</string>
<string name="staking_details_reward_schedule">Reward schedule</string>
<string name="staking_details_reward_schedule_info">This is a schedule that determines when participants in staking receive their rewards.</string>
<string name="staking_details_reward_schedule_info">This is a schedule that determines when participants in staking receive their rewards. The reward distribution time may vary slightly depending on the validator and network load.</string>
<string name="staking_details_rewards_to_claim">Rewards: %s</string>
<string name="staking_details_title">Staking %s</string>
<string name="staking_details_unbonding_period">Unbonding Period</string>
@ -720,7 +736,10 @@
<string name="staking_reward_claiming_manual">Manual</string>
<string name="staking_reward_schedule_block">Per Block</string>
<string name="staking_reward_schedule_day">Daily</string>
<string name="staking_reward_schedule_each_day">Daily</string>
<string name="staking_reward_schedule_each">Each %s</string>
<string name="staking_reward_schedule_each_day">Each day</string>
<string name="staking_reward_schedule_each_days">Each %1$s days</string>
<string name="staking_reward_schedule_each_sec">Each %1$s sec</string>
<string name="staking_reward_schedule_epoch">Per Epoch</string>
<string name="staking_reward_schedule_era">Per Era</string>
<string name="staking_reward_schedule_hour">Hourly</string>
@ -744,8 +763,9 @@
<string name="staking_unstaking_item_name">Unstaking assets %s</string>
<string name="staking_validator">Validator</string>
<string name="staking_validators">Validators</string>
<string name="staking_validators_label">Strategic partner</string>
<string name="staking_vote">Vote</string>
<string name="staking_vote_locked">Vote locked</string>
<string name="staking_vote_locked">Vote</string>
<string name="staking_withdraw">Withdraw</string>
<string name="staking_your_stakes">Your stakes</string>
<string name="story_awe_description">Store your crypto assets secure while keeping private keys contained in your card</string>

View file

@ -24,7 +24,6 @@ import com.tangem.core.ui.components.inputrow.inner.InputRowAsyncImage
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resolveAnnotatedReference
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -33,15 +32,17 @@ import com.tangem.core.ui.res.TangemThemePreview
* [Input Row Image](https://www.figma.com/design/14ISV23YB1yVW1uNVwqrKv/Android?node-id=2841-1589&t=u6pOF6lsdpvWLELb-4)
*
* @param subtitle subtitle text
* @param caption caption text
* @param modifier modifier
* @param caption caption text
* @param imageUrl icon to load
* @param iconRes icon resource
* @param subtitleColor subtitle text color
* @param captionColor caption text color
* @param iconTint icon tint
* @param isGrayscaleImage whether to display grayscale image
* @param subtitleEndIconRes icon to show after subtitle
* @param iconEndRes icon to end of row
* @param onImageError composable to show if image loading failed
* @param subtitleExtraContent subtitle extra content
* @param extraContent extra content
*/
@Suppress("LongMethod")
@ -56,10 +57,9 @@ internal fun InputRowImageBase(
captionColor: Color = TangemTheme.colors.text.tertiary,
iconTint: Color = TangemTheme.colors.icon.informative,
isGrayscaleImage: Boolean = false,
@DrawableRes subtitleEndIconRes: Int? = null,
subtitleEndIconTint: Color = TangemColorPalette.Azure,
@DrawableRes iconEndRes: Int? = null,
onImageError: (@Composable () -> Unit)? = null,
subtitleExtraContent: (@Composable RowScope.() -> Unit)? = null,
extraContent: (@Composable RowScope.() -> Unit)? = null,
) {
Row(
@ -100,10 +100,7 @@ internal fun InputRowImageBase(
style = TangemTheme.typography.subtitle2,
color = subtitleColor,
)
SubtitleEndIconRes(
subtitleEndIconRes = subtitleEndIconRes,
subtitleEndIconTint = subtitleEndIconTint,
)
subtitleExtraContent?.invoke(this)
}
if (caption != null) {
Text(
@ -124,23 +121,6 @@ internal fun InputRowImageBase(
}
}
@Composable
private fun RowScope.SubtitleEndIconRes(subtitleEndIconRes: Int?, subtitleEndIconTint: Color) {
AnimatedVisibility(
visible = subtitleEndIconRes != null,
label = "Subtitle end icon visibility animation",
modifier = Modifier.align(Alignment.CenterVertically),
) {
val icon = remember(this) { requireNotNull(subtitleEndIconRes) }
Icon(
painter = rememberVectorPainter(image = ImageVector.vectorResource(id = icon)),
tint = subtitleEndIconTint,
contentDescription = null,
modifier = Modifier.padding(start = TangemTheme.dimens.spacing4),
)
}
}
@Composable
private fun RowScope.InputRowEndIcon(iconRes: Int?) {
AnimatedVisibility(

View file

@ -2,14 +2,21 @@ package com.tangem.core.ui.components.inputrow
import android.content.res.Configuration
import androidx.annotation.DrawableRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@ -17,6 +24,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.tangem.core.ui.R
import com.tangem.core.ui.components.atoms.text.EllipsisText
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -24,17 +32,19 @@ import com.tangem.core.ui.res.TangemThemePreview
* Input row component with selector
* [Input Row Image](https://www.figma.com/design/14ISV23YB1yVW1uNVwqrKv/Android?node-id=2841-1589&t=u6pOF6lsdpvWLELb-4)
*
* @param title title text
* @param subtitle subtitle text
* @param caption caption text
* @param infoTitle info title text
* @param infoSubtitle info subtitle text
* @param modifier modifier
* @param title title text
* @param caption caption text
* @param infoSubtitle info subtitle text
* @param imageUrl icon to load
* @param iconRes icon resource
* @param subtitleColor subtitle text color
* @param captionColor caption text color
* @param iconTint icon color
* @param isGrayscaleImage whether to display grayscale image
* @param showPendingIcon whether to show pending icon
* @param subtitleEndIconRes subtitle icon to end of row
* @param iconEndRes icon to end of row
* @param onImageError composable to show if image loading failed
*/
@ -78,9 +88,14 @@ fun InputRowImageInfo(
subtitleColor = subtitleColor,
captionColor = captionColor,
isGrayscaleImage = isGrayscaleImage,
subtitleEndIconRes = subtitleEndIconRes,
iconEndRes = iconEndRes,
onImageError = onImageError,
subtitleExtraContent = {
SubtitleEndIconRes(
subtitleEndIconRes = subtitleEndIconRes,
subtitleEndIconTint = TangemColorPalette.Azure,
)
},
) {
Column(
verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing2),
@ -120,6 +135,23 @@ fun InputRowImageInfo(
}
}
@Composable
private fun RowScope.SubtitleEndIconRes(subtitleEndIconRes: Int?, subtitleEndIconTint: Color) {
AnimatedVisibility(
visible = subtitleEndIconRes != null,
label = "Subtitle end icon visibility animation",
modifier = Modifier.align(Alignment.CenterVertically),
) {
val icon = remember(this) { requireNotNull(subtitleEndIconRes) }
Icon(
painter = rememberVectorPainter(image = ImageVector.vectorResource(id = icon)),
tint = subtitleEndIconTint,
contentDescription = null,
modifier = Modifier.padding(start = TangemTheme.dimens.spacing4),
)
}
}
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)

View file

@ -4,6 +4,7 @@ import android.content.res.Configuration
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
@ -40,8 +41,9 @@ import java.math.BigDecimal
* @param subtitleColor subtitle text color
* @param captionColor caption text color
* @param isSelected true if selected
* @param selectorContent selector content
* @param onImageError composable to show if image loading failed
* @param subtitleExtraContent subtitle selector content
* @param selectorContent selector content
*/
@Composable
fun InputRowImageSelector(
@ -54,6 +56,7 @@ fun InputRowImageSelector(
captionColor: Color = TangemTheme.colors.text.tertiary,
isSelected: Boolean = false,
onImageError: (@Composable () -> Unit)? = null,
subtitleExtraContent: (@Composable RowScope.() -> Unit)? = null,
selectorContent: @Composable ((isSelected: Boolean, isEnabled: Boolean, onSelect: () -> Unit) -> Unit),
) {
InputRowImageBase(
@ -63,6 +66,7 @@ fun InputRowImageSelector(
subtitleColor = subtitleColor,
captionColor = captionColor,
onImageError = onImageError,
subtitleExtraContent = subtitleExtraContent,
modifier = modifier
.clickable(
onClick = onSelect,

View file

@ -123,6 +123,7 @@ class YieldConverter(
stakedBalance = validatorDTO.stakedBalance,
votingPower = validatorDTO.votingPower,
preferred = validatorDTO.preferred,
isStrategicPartner = isStrategicPartner(validatorDTO.address),
)
}
@ -174,4 +175,12 @@ class YieldConverter(
else -> Yield.Args.ArgType.UNKNOWN
}
}
private fun isStrategicPartner(validatorAddress: String): Boolean = PARTNERS.any { it == validatorAddress }
private companion object {
val PARTNERS = listOf(
"cosmosvaloper1wrx0x9m9ykdhw9sg04v7uljme53wuj03aa5d4f",
)
}
}

View file

@ -62,6 +62,7 @@ data class Yield(
val stakedBalance: String? = null,
val votingPower: Double? = null,
val preferred: Boolean,
val isStrategicPartner: Boolean,
) {
enum class ValidatorStatus {

View file

@ -28,6 +28,7 @@ internal object ConfirmationStatePreviewData {
website = "https://luganodes.com/",
votingPower = 0.09778360195377911,
preferred = true,
isStrategicPartner = false,
),
Yield.Validator(
address = "0x35b1ca0f398905cf752e6fe122b51c88022fca32",
@ -40,6 +41,7 @@ internal object ConfirmationStatePreviewData {
website = "https://infstones.com/",
votingPower = 0.0034366257754399774,
preferred = true,
isStrategicPartner = false,
),
Yield.Validator(
address = "0xd14a87025109013b0a2354a775cb335f926af65a",
@ -52,6 +54,7 @@ internal object ConfirmationStatePreviewData {
website = "https://infstones.com/",
votingPower = 0.023487238579718264,
preferred = true,
isStrategicPartner = true,
),
)

View file

@ -86,6 +86,7 @@ internal object InitialStakingStatePreview {
stakedBalance = null,
votingPower = null,
preferred = false,
isStrategicPartner = false,
),
pendingActions = persistentListOf(),
isClickable = true,

View file

@ -5,16 +5,22 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
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.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import com.tangem.core.ui.components.inputrow.InputRowImageSelector
import com.tangem.core.ui.decorations.roundedShapeItemDecoration
import com.tangem.core.ui.extensions.*
@ -78,6 +84,9 @@ internal fun StakingValidatorListContent(
false,
)
.background(TangemTheme.colors.background.action),
subtitleExtraContent = {
ValidatorLabel(item.isStrategicPartner)
},
selectorContent = { checked, _, _ ->
AnimatedVisibility(
modifier = Modifier,
@ -99,6 +108,23 @@ internal fun StakingValidatorListContent(
}
}
@Composable
private fun RowScope.ValidatorLabel(isStrategicPartner: Boolean) {
if (isStrategicPartner) {
Text(
text = stringResource(R.string.staking_validators_label),
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.icon.constant,
modifier = Modifier
.align(Alignment.CenterVertically)
.padding(horizontal = 6.dp)
.clip(RoundedCornerShape(6.dp))
.background(TangemTheme.colors.text.accent)
.padding(horizontal = 8.dp),
)
}
}
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)