Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-04 14:47:39 +03:00
parent 34609aeb8c
commit e2721b21e1
13 changed files with 53 additions and 9 deletions

View file

@ -349,6 +349,7 @@ internal class ChildFactory @Inject constructor(
val source = when (route.source) { val source = when (route.source) {
is AppRoute.QrScanning.Source.Send -> SourceType.SEND is AppRoute.QrScanning.Source.Send -> SourceType.SEND
is AppRoute.QrScanning.Source.WalletConnect -> SourceType.WALLET_CONNECT is AppRoute.QrScanning.Source.WalletConnect -> SourceType.WALLET_CONNECT
is AppRoute.QrScanning.Source.MainScreen -> SourceType.MAIN_SCREEN
} }
createComponentChild( createComponentChild(
context = context, context = context,

View file

@ -167,11 +167,14 @@ sealed class AppRoute(val path: String) : Route {
get() = when (this) { get() = when (this) {
is Send -> "/$networkName" is Send -> "/$networkName"
WalletConnect -> "" WalletConnect -> ""
MainScreen -> ""
} }
data class Send(val networkName: String) : Source() data class Send(val networkName: String) : Source()
data object WalletConnect : Source() data object WalletConnect : Source()
data object MainScreen : Source()
} }
} }

View file

@ -399,6 +399,7 @@
<string name="common_unstake">Staking beenden</string> <string name="common_unstake">Staking beenden</string>
<string name="common_utxo_validate_withdrawal_message_warning">Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren.</string> <string name="common_utxo_validate_withdrawal_message_warning">Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren.</string>
<string name="common_value_copied">Wert kopiert</string> <string name="common_value_copied">Wert kopiert</string>
<string name="common_wallets">Meine Wallet</string>
<string name="common_week">Woche</string> <string name="common_week">Woche</string>
<string name="common_with">mit</string> <string name="common_with">mit</string>
<string name="common_yes">Ja</string> <string name="common_yes">Ja</string>
@ -469,9 +470,12 @@
<string name="domain_receive_assets_onboarding_title">Sende Geld nur mit</string> <string name="domain_receive_assets_onboarding_title">Sende Geld nur mit</string>
<string name="earn_best_opportunities">Beste Gelegenheiten</string> <string name="earn_best_opportunities">Beste Gelegenheiten</string>
<string name="earn_clear_filter">Filter löschen</string> <string name="earn_clear_filter">Filter löschen</string>
<string name="earn_empty">Die Liste ist vorübergehend leer, da sie gerade aktualisiert wird. Schauen Sie in Kürze wieder rein.</string>
<string name="earn_filter_all_networks">Alle Netzwerke</string> <string name="earn_filter_all_networks">Alle Netzwerke</string>
<string name="earn_filter_all_types">Alle Arten</string> <string name="earn_filter_all_types">Alle Arten</string>
<string name="earn_filter_by">Filtern nach</string> <string name="earn_filter_by">Filtern nach</string>
<string name="earn_filter_my_networks">Meine Netzwerke</string>
<string name="earn_filter_networks">Netzwerke</string>
<string name="earn_mostly_used">Meist verwendet</string> <string name="earn_mostly_used">Meist verwendet</string>
<string name="earn_no_results">Keine Ergebnisse</string> <string name="earn_no_results">Keine Ergebnisse</string>
<string name="earn_title">Verdienen</string> <string name="earn_title">Verdienen</string>
@ -826,6 +830,7 @@
<string name="markets_token_details_volume">Volumen</string> <string name="markets_token_details_volume">Volumen</string>
<string name="markets_tooltip_message">Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen</string> <string name="markets_tooltip_message">Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen</string>
<string name="markets_tooltip_title">Token hinzufügen</string> <string name="markets_tooltip_title">Token hinzufügen</string>
<string name="markets_tooltip_v2_title">Token hinzufügen</string>
<string name="markets_yield_supply_banner_description">Steiger die Leistung Deiner Assets und ermögliche Dir gleichzeitig den sofortigen Zugriff. %s</string> <string name="markets_yield_supply_banner_description">Steiger die Leistung Deiner Assets und ermögliche Dir gleichzeitig den sofortigen Zugriff. %s</string>
<string name="markets_yield_supply_banner_title">Yield-Modus aktivieren</string> <string name="markets_yield_supply_banner_title">Yield-Modus aktivieren</string>
<string name="mobile_wallet_requires_min_os_warning_body">Du musst auf die folgende Version aktualisieren: %1$s um eine mobile Wallet zu erstellen</string> <string name="mobile_wallet_requires_min_os_warning_body">Du musst auf die folgende Version aktualisieren: %1$s um eine mobile Wallet zu erstellen</string>
@ -845,6 +850,7 @@
<string name="news_related_tokens">Verwandte Token</string> <string name="news_related_tokens">Verwandte Token</string>
<string name="news_sources">Verwandte Nachrichten</string> <string name="news_sources">Verwandte Nachrichten</string>
<string name="news_stay_in_the_loop">Auf dem Laufenden bleiben</string> <string name="news_stay_in_the_loop">Auf dem Laufenden bleiben</string>
<string name="news_trending_score">Trend-Score</string>
<string name="nfc_error_unavailable">NFC ist auf deinem Gerät nicht verfügbar</string> <string name="nfc_error_unavailable">NFC ist auf deinem Gerät nicht verfügbar</string>
<string name="nft_about_title">Über NFT</string> <string name="nft_about_title">Über NFT</string>
<string name="nft_asset">NFT-Vermögenswert</string> <string name="nft_asset">NFT-Vermögenswert</string>
@ -963,12 +969,12 @@
<string name="onboarding_navbar_upgrade_wallet_biometrics">Biometrische Daten</string> <string name="onboarding_navbar_upgrade_wallet_biometrics">Biometrische Daten</string>
<string name="onboarding_seed_button_read_more">Lese mehr über die Seed-Phrase</string> <string name="onboarding_seed_button_read_more">Lese mehr über die Seed-Phrase</string>
<plurals name="onboarding_seed_generate_message_words_count"> <plurals name="onboarding_seed_generate_message_words_count">
<item quantity="one"></item> <item quantity="one">.</item>
<item quantity="other">Schreibe diese %d-Wörter in der unten angegebenen Reihenfolge auf und bewahre sie an einem sicheren und geheimen Ort auf.</item> <item quantity="other">Schreibe diese %d-Wörter in der unten angegebenen Reihenfolge auf und bewahre sie an einem sicheren und geheimen Ort auf.</item>
</plurals> </plurals>
<string name="onboarding_seed_generate_title">Deine Seed-Phrase</string> <string name="onboarding_seed_generate_title">Deine Seed-Phrase</string>
<plurals name="onboarding_seed_generate_words_count"> <plurals name="onboarding_seed_generate_words_count">
<item quantity="one"></item> <item quantity="one">.</item>
<item quantity="other">%d Wörter</item> <item quantity="other">%d Wörter</item>
</plurals> </plurals>
<string name="onboarding_seed_import_message">Um deine Wallets zu importieren, gib bitte deine Seed-Phrase in das folgende Feld ein</string> <string name="onboarding_seed_import_message">Um deine Wallets zu importieren, gib bitte deine Seed-Phrase in das folgende Feld ein</string>
@ -1431,6 +1437,7 @@
<string name="swap_give_permission_fee_footer">Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen.</string> <string name="swap_give_permission_fee_footer">Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen.</string>
<string name="swap_promo_text">Tausche mehr Token zu besseren Kursen direkt in deiner Brieftasche.</string> <string name="swap_promo_text">Tausche mehr Token zu besseren Kursen direkt in deiner Brieftasche.</string>
<string name="swap_promo_title">Neuer Swap-Anbieter verfügbar!</string> <string name="swap_promo_title">Neuer Swap-Anbieter verfügbar!</string>
<string name="swap_search_suggestion_hint">Suchen Sie etwas anderes? Versuchen Sie es mit der Suche oder erkunden Sie eine andere Kryptowährung!</string>
<string name="swap_search_tooltip_description">Suchen Sie nach einem beliebigen Token, auch wenn es noch nicht in Ihrer Liste ist.</string> <string name="swap_search_tooltip_description">Suchen Sie nach einem beliebigen Token, auch wenn es noch nicht in Ihrer Liste ist.</string>
<string name="swap_search_tooltip_title">Nutzen Sie die Suche, um zu finden, was Sie benötigen.</string> <string name="swap_search_tooltip_title">Nutzen Sie die Suche, um zu finden, was Sie benötigen.</string>
<string name="swap_story_fifth_subtitle">Vertraue auf den rund um die Uhr verfügbaren Support bei allen Problemen</string> <string name="swap_story_fifth_subtitle">Vertraue auf den rund um die Uhr verfügbaren Support bei allen Problemen</string>

View file

@ -839,6 +839,7 @@
<string name="news_related_tokens">関連トークン</string> <string name="news_related_tokens">関連トークン</string>
<string name="news_sources">関連ニュース</string> <string name="news_sources">関連ニュース</string>
<string name="news_stay_in_the_loop">最新情報を入手</string> <string name="news_stay_in_the_loop">最新情報を入手</string>
<string name="news_trending_score">トレンドスコア</string>
<string name="nfc_error_unavailable">お使いのデバイスではNFCが使用できません</string> <string name="nfc_error_unavailable">お使いのデバイスではNFCが使用できません</string>
<string name="nft_about_title">NFTについて</string> <string name="nft_about_title">NFTについて</string>
<string name="nft_asset">NFTアセット</string> <string name="nft_asset">NFTアセット</string>
@ -1488,6 +1489,7 @@
<string name="tangempay_cancel_kyc">メイン画面からKYCを非表示にする</string> <string name="tangempay_cancel_kyc">メイン画面からKYCを非表示にする</string>
<string name="tangempay_card_details_add_funds">資金を追加</string> <string name="tangempay_card_details_add_funds">資金を追加</string>
<string name="tangempay_card_details_add_funds_subtitle">入金オプション</string> <string name="tangempay_card_details_add_funds_subtitle">入金オプション</string>
<string name="tangempay_card_details_add_to_wallet_button_text">Googleウォレットに追加</string>
<string name="tangempay_card_details_card_number">カード番号</string> <string name="tangempay_card_details_card_number">カード番号</string>
<string name="tangempay_card_details_change_pin">PINを変更する</string> <string name="tangempay_card_details_change_pin">PINを変更する</string>
<string name="tangempay_card_details_change_pin_success_description">カードは支払いの準備が整いました。</string> <string name="tangempay_card_details_change_pin_success_description">カードは支払いの準備が整いました。</string>
@ -1876,6 +1878,8 @@
<string name="warning_express_refresh_required_title">サービスは一時的に利用できません</string> <string name="warning_express_refresh_required_title">サービスは一時的に利用できません</string>
<string name="warning_express_too_maximum_amount_title">スワップするトークンの量は %s を超えないでください</string> <string name="warning_express_too_maximum_amount_title">スワップするトークンの量は %s を超えないでください</string>
<string name="warning_express_too_minimal_amount_title">スワップ金額は %s 以上である必要があります</string> <string name="warning_express_too_minimal_amount_title">スワップ金額は %s 以上である必要があります</string>
<string name="warning_express_unsupported_pair_description">このペアではスワップを利用できません。別のトークンを選択して、もう一度お試しください。</string>
<string name="warning_express_unsupported_pair_title">スワップ非対応のペアです</string>
<string name="warning_express_wrong_amount_description">スワップの金額を変更してください</string> <string name="warning_express_wrong_amount_description">スワップの金額を変更してください</string>
<string name="warning_failed_to_verify_card_message">このカードは、サンプル品または偽造品である可能性があります</string> <string name="warning_failed_to_verify_card_message">このカードは、サンプル品または偽造品である可能性があります</string>
<string name="warning_failed_to_verify_card_title">真正性チェックに失敗しました</string> <string name="warning_failed_to_verify_card_title">真正性チェックに失敗しました</string>

View file

@ -733,13 +733,13 @@
<string name="manage_tokens_remove">Удалить</string> <string name="manage_tokens_remove">Удалить</string>
<string name="manage_tokens_search_placeholder">Например Bitcoin</string> <string name="manage_tokens_search_placeholder">Например Bitcoin</string>
<string name="manage_tokens_toast_portfolio_updated">Ваш портфель был обновлен</string> <string name="manage_tokens_toast_portfolio_updated">Ваш портфель был обновлен</string>
<string name="manage_tokens_unavailable_description">Выбранный токен не доступен в кошельке на данный момент. Но не переживайте, вы можете выразить свой интерес проголосовав за его добавление.</string> <string name="manage_tokens_unavailable_description">Выбранный токен недоступен в кошельке на данный момент. Но не переживайте, вы можете выразить свой интерес проголосовав за его добавление.</string>
<string name="manage_tokens_unavailable_vote">Голосовать</string> <string name="manage_tokens_unavailable_vote">Голосовать</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Кошелёк не поддерживает более одной сети</string> <string name="manage_tokens_wallet_support_only_one_network_title">Кошелёк не поддерживает более одной сети</string>
<string name="markets_about_coin_header">О монете</string> <string name="markets_about_coin_header">О монете</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_description">Этот актив в настоящее время не поддерживается в кошельке</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Этот токен не доступен для данного кошелька</string> <string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Этот токен недоступен для данного кошелька</string>
<string name="markets_add_token">Добавить</string> <string name="markets_add_token">Добавить</string>
<string name="markets_apy_placeholder">APY %s</string> <string name="markets_apy_placeholder">APY %s</string>
<string name="markets_common_my_portfolio">Мой портфель</string> <string name="markets_common_my_portfolio">Мой портфель</string>
@ -1499,7 +1499,7 @@
<string name="swapping_swap_action_in_progress">Обмен…</string> <string name="swapping_swap_action_in_progress">Обмен…</string>
<string name="swapping_to_title">Вы получите</string> <string name="swapping_to_title">Вы получите</string>
<string name="swapping_token_list_title">Выберите токен</string> <string name="swapping_token_list_title">Выберите токен</string>
<string name="swapping_token_not_available">не доступен</string> <string name="swapping_token_not_available">недоступен</string>
<string name="tangem_pay_beta_notification_subtitle">Будем рады вашей обратной связи</string> <string name="tangem_pay_beta_notification_subtitle">Будем рады вашей обратной связи</string>
<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>

View file

@ -699,6 +699,7 @@
<string name="koinos_mana_level_title">Mana level</string> <string name="koinos_mana_level_title">Mana level</string>
<string name="main_empty_tokens_list_message">To begin tracking your crypto assets and transactions, add tokens</string> <string name="main_empty_tokens_list_message">To begin tracking your crypto assets and transactions, add tokens</string>
<string name="main_manage_tokens">Manage tokens</string> <string name="main_manage_tokens">Manage tokens</string>
<string name="main_qr_scan_hint">Scan QR code to send funds or connect to an app</string>
<string name="main_scan_card_warning_view_subtitle">To access all the networks you need to scan the card</string> <string name="main_scan_card_warning_view_subtitle">To access all the networks you need to scan the card</string>
<string name="main_scan_card_warning_view_title">Scan your card or ring</string> <string name="main_scan_card_warning_view_title">Scan your card or ring</string>
<string name="main_swap_changelly_promotion_message">Enjoy %1$s service fees on swaps via Changelly from February %2$s-%3$s</string> <string name="main_swap_changelly_promotion_message">Enjoy %1$s service fees on swaps via Changelly from February %2$s-%3$s</string>
@ -1509,6 +1510,7 @@
<string name="tangempay_cancel_kyc">Hide KYC from main screen</string> <string name="tangempay_cancel_kyc">Hide KYC from main screen</string>
<string name="tangempay_card_details_add_funds">Add funds</string> <string name="tangempay_card_details_add_funds">Add funds</string>
<string name="tangempay_card_details_add_funds_subtitle">Top-up options</string> <string name="tangempay_card_details_add_funds_subtitle">Top-up options</string>
<string name="tangempay_card_details_add_to_wallet_button_text">Add to Google Wallet</string>
<string name="tangempay_card_details_card_number">Card Number</string> <string name="tangempay_card_details_card_number">Card Number</string>
<string name="tangempay_card_details_change_pin">Change PIN</string> <string name="tangempay_card_details_change_pin">Change PIN</string>
<string name="tangempay_card_details_change_pin_success_description">The card is fully ready for payments.</string> <string name="tangempay_card_details_change_pin_success_description">The card is fully ready for payments.</string>

View file

@ -63,7 +63,7 @@ fun TangemTopBar(
}, },
endContent = if (endActions.isNotEmpty()) { endContent = if (endActions.isNotEmpty()) {
{ {
Row(horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x1)) { Row(horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x5)) {
endActions.forEach { action -> endActions.forEach { action ->
TangemTopBarActionContent(action) TangemTopBarActionContent(action)
} }
@ -225,7 +225,7 @@ private fun TangemTopBar_Preview(@PreviewParameter(PreviewProvider::class) param
startContent = params.startActionUM?.let { { TangemTopBarActionContent(it) } }, startContent = params.startActionUM?.let { { TangemTopBarActionContent(it) } },
endContent = if (params.endActions.isNotEmpty()) { endContent = if (params.endActions.isNotEmpty()) {
{ {
Row(horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x1)) { Row(horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x5)) {
params.endActions.forEach { action -> params.endActions.forEach { action ->
TangemTopBarActionContent(action) TangemTopBarActionContent(action)
} }

View file

@ -2,6 +2,7 @@ package com.tangem.core.ui.ds.topbar
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.FloatRange import androidx.annotation.FloatRange
import androidx.compose.runtime.Immutable
/** /**
* User model for top bar action * User model for top bar action
@ -11,6 +12,7 @@ import androidx.annotation.FloatRange
* @property onClick lambda be invoked when action component is clicked. If null, action will not be clickable * @property onClick lambda be invoked when action component is clicked. If null, action will not be clickable
* @property ghostModeProgress progress of ghost mode animation, from 0f to 1f. * @property ghostModeProgress progress of ghost mode animation, from 0f to 1f.
*/ */
@Immutable
data class TangemTopBarActionUM( data class TangemTopBarActionUM(
@param:DrawableRes val iconRes: Int, @param:DrawableRes val iconRes: Int,
val isActionable: Boolean = true, val isActionable: Boolean = true,

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M15,4H16C18.209,4 20,5.791 20,8V8.5M9,4H8C5.791,4 4,5.791 4,8V8.5M4,13V16C4,18.209 5.791,20 8,20H9M20,13V16C20,18.209 18.209,20 16,20H15"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#1E1E1E"
android:strokeLineCap="round"/>
<path
android:pathData="M2.75,12.75L21.25,12.75"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#1E1E1E"
android:strokeLineCap="round"/>
</vector>

View file

@ -3,4 +3,5 @@ package com.tangem.domain.qrscanning.models
enum class SourceType { enum class SourceType {
WALLET_CONNECT, WALLET_CONNECT,
SEND, SEND,
MAIN_SCREEN,
} }

View file

@ -22,6 +22,7 @@ internal class InitializeQrScanningStateTransformer(
val message = when (source) { val message = when (source) {
SourceType.SEND -> network?.let { resourceReference(R.string.send_qrcode_scan_info, wrappedList(it)) } SourceType.SEND -> network?.let { resourceReference(R.string.send_qrcode_scan_info, wrappedList(it)) }
SourceType.WALLET_CONNECT -> resourceReference(R.string.wc_qr_scan_hint) SourceType.WALLET_CONNECT -> resourceReference(R.string.wc_qr_scan_hint)
SourceType.MAIN_SCREEN -> resourceReference(R.string.main_qr_scan_hint)
} }
return QrScanningState( return QrScanningState(
@ -44,6 +45,10 @@ internal class InitializeQrScanningStateTransformer(
title = resourceReference(R.string.wc_new_connection), title = resourceReference(R.string.wc_new_connection),
startIcon = R.drawable.ic_close_24, startIcon = R.drawable.ic_close_24,
) )
SourceType.MAIN_SCREEN -> TopBarConfig(
title = null,
startIcon = R.drawable.ic_close_24,
)
} }
} }

View file

@ -43,6 +43,7 @@ import kotlinx.coroutines.launch
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@Suppress("TooManyFunctions")
internal interface WalletContentClickIntents { internal interface WalletContentClickIntents {
fun onDetailsClick() fun onDetailsClick()

View file

@ -82,8 +82,8 @@ internal fun WalletTopBar(config: WalletTopBarConfig) {
}, },
actions = { actions = {
config.endActions.forEach { action -> config.endActions.forEach { action ->
if (action.onClick != null) { action.onClick?.let { onClick ->
IconButton(onClick = action.onClick!!) { IconButton(onClick = onClick) {
Icon( Icon(
painter = painterResource(id = action.iconRes), painter = painterResource(id = action.iconRes),
contentDescription = null, contentDescription = null,