1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-24 15:38:22 +00:00

chore(eckhart): replace-by-fee update

[no changelog]
This commit is contained in:
Lukas Bielesch 2025-05-21 13:17:13 +02:00 committed by Lukáš Bielesch
parent 17f2d05baa
commit 3f14cd1d27
7 changed files with 1992 additions and 1877 deletions

View File

@ -52,7 +52,7 @@ pub enum TranslatedString {
bitcoin__title_confirm_details = 50, // "Confirm details"
bitcoin__title_finalize_transaction = 51, // "Finalize transaction"
bitcoin__title_high_mining_fee = 52, // "High mining fee"
bitcoin__title_meld_transaction = 53, // "Meld transactions"
bitcoin__title_meld_transaction = 53, // "Meld transaction"
bitcoin__title_modify_amount = 54, // "Modify amount"
bitcoin__title_payjoin = 55, // "Payjoin"
bitcoin__title_proof_of_ownership = 56, // "Proof of ownership"
@ -543,17 +543,17 @@ pub enum TranslatedString {
misc__decrypt_value = 349, // "Decrypt value"
misc__encrypt_value = 350, // "Encrypt value"
misc__title_suite_labeling = 351, // "Suite labeling"
modify_amount__decrease_amount = 352, // "Decrease amount by:"
modify_amount__increase_amount = 353, // "Increase amount by:"
modify_amount__new_amount = 354, // "New amount:"
modify_amount__decrease_amount = 352, // {"Bolt": "Decrease amount by:", "Caesar": "Decrease amount by:", "Delizia": "Decrease amount by:", "Eckhart": "Decrease amount by"}
modify_amount__increase_amount = 353, // {"Bolt": "Increase amount by:", "Caesar": "Increase amount by:", "Delizia": "Increase amount by:", "Eckhart": "Increase amount by"}
modify_amount__new_amount = 354, // {"Bolt": "New amount:", "Caesar": "New amount:", "Delizia": "New amount:", "Eckhart": "New amount"}
modify_amount__title = 355, // "Modify amount"
modify_fee__decrease_fee = 356, // "Decrease fee by:"
modify_fee__decrease_fee = 356, // {"Bolt": "Decrease fee by:", "Caesar": "Decrease fee by:", "Delizia": "Decrease fee by:", "Eckhart": "Decrease fee by"}
modify_fee__fee_rate = 357, // "Fee rate:"
modify_fee__increase_fee = 358, // "Increase fee by:"
modify_fee__new_transaction_fee = 359, // "New transaction fee:"
modify_fee__no_change = 360, // "Fee did not change.\n"
modify_fee__increase_fee = 358, // {"Bolt": "Increase fee by:", "Caesar": "Increase fee by:", "Delizia": "Increase fee by:", "Eckhart": "Increase fee by"}
modify_fee__new_transaction_fee = 359, // {"Bolt": "New transaction fee:", "Caesar": "New transaction fee:", "Delizia": "New transaction fee:", "Eckhart": "New transaction fee"}
modify_fee__no_change = 360, // {"Bolt": "Fee did not change.\n", "Caesar": "Fee did not change.\n", "Delizia": "Fee did not change.\n", "Eckhart": "Fee did not change"}
modify_fee__title = 361, // "Modify fee"
modify_fee__transaction_fee = 362, // "Transaction fee:"
modify_fee__transaction_fee = 362, // {"Bolt": "Transaction fee:", "Caesar": "Transaction fee:", "Delizia": "Transaction fee:", "Eckhart": "Transaction fee"}
#[cfg(feature = "universal_fw")]
monero__confirm_export = 363, // "Confirm export"
#[cfg(feature = "universal_fw")]
@ -1499,7 +1499,7 @@ impl TranslatedString {
(Self::bitcoin__title_confirm_details, "Confirm details"),
(Self::bitcoin__title_finalize_transaction, "Finalize transaction"),
(Self::bitcoin__title_high_mining_fee, "High mining fee"),
(Self::bitcoin__title_meld_transaction, "Meld transactions"),
(Self::bitcoin__title_meld_transaction, "Meld transaction"),
(Self::bitcoin__title_modify_amount, "Modify amount"),
(Self::bitcoin__title_payjoin, "Payjoin"),
(Self::bitcoin__title_proof_of_ownership, "Proof of ownership"),
@ -2020,17 +2020,73 @@ impl TranslatedString {
(Self::misc__decrypt_value, "Decrypt value"),
(Self::misc__encrypt_value, "Encrypt value"),
(Self::misc__title_suite_labeling, "Suite labeling"),
#[cfg(feature = "layout_bolt")]
(Self::modify_amount__decrease_amount, "Decrease amount by:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_amount__decrease_amount, "Decrease amount by:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_amount__decrease_amount, "Decrease amount by:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_amount__decrease_amount, "Decrease amount by"),
#[cfg(feature = "layout_bolt")]
(Self::modify_amount__increase_amount, "Increase amount by:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_amount__increase_amount, "Increase amount by:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_amount__increase_amount, "Increase amount by:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_amount__increase_amount, "Increase amount by"),
#[cfg(feature = "layout_bolt")]
(Self::modify_amount__new_amount, "New amount:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_amount__new_amount, "New amount:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_amount__new_amount, "New amount:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_amount__new_amount, "New amount"),
(Self::modify_amount__title, "Modify amount"),
#[cfg(feature = "layout_bolt")]
(Self::modify_fee__decrease_fee, "Decrease fee by:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_fee__decrease_fee, "Decrease fee by:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_fee__decrease_fee, "Decrease fee by:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_fee__decrease_fee, "Decrease fee by"),
(Self::modify_fee__fee_rate, "Fee rate:"),
#[cfg(feature = "layout_bolt")]
(Self::modify_fee__increase_fee, "Increase fee by:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_fee__increase_fee, "Increase fee by:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_fee__increase_fee, "Increase fee by:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_fee__increase_fee, "Increase fee by"),
#[cfg(feature = "layout_bolt")]
(Self::modify_fee__new_transaction_fee, "New transaction fee:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_fee__new_transaction_fee, "New transaction fee:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_fee__new_transaction_fee, "New transaction fee:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_fee__new_transaction_fee, "New transaction fee"),
#[cfg(feature = "layout_bolt")]
(Self::modify_fee__no_change, "Fee did not change.\n"),
#[cfg(feature = "layout_caesar")]
(Self::modify_fee__no_change, "Fee did not change.\n"),
#[cfg(feature = "layout_delizia")]
(Self::modify_fee__no_change, "Fee did not change.\n"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_fee__no_change, "Fee did not change"),
(Self::modify_fee__title, "Modify fee"),
#[cfg(feature = "layout_bolt")]
(Self::modify_fee__transaction_fee, "Transaction fee:"),
#[cfg(feature = "layout_caesar")]
(Self::modify_fee__transaction_fee, "Transaction fee:"),
#[cfg(feature = "layout_delizia")]
(Self::modify_fee__transaction_fee, "Transaction fee:"),
#[cfg(feature = "layout_eckhart")]
(Self::modify_fee__transaction_fee, "Transaction fee"),
#[cfg(feature = "universal_fw")]
(Self::monero__confirm_export, "Confirm export"),
#[cfg(feature = "universal_fw")]

View File

@ -16,7 +16,7 @@ use crate::{
use super::super::{
component::Button,
firmware::{
ActionBar, AllowedTextContent, Header, ShortMenuVec, TextScreen, TextScreenMsg,
ActionBar, AllowedTextContent, Header, Hint, ShortMenuVec, TextScreen, TextScreenMsg,
VerticalMenu, VerticalMenuScreen, VerticalMenuScreenMsg,
},
theme,
@ -57,6 +57,7 @@ pub fn new_confirm_with_menu<T: AllowedTextContent + MaybeTrace + 'static>(
title: TString<'static>,
subtitle: Option<TString<'static>>,
content: T,
hint: Option<TString<'static>>,
confirm_label: Option<TString<'static>>,
hold: bool,
extra_menu_label: Option<TString<'static>>,
@ -68,21 +69,26 @@ pub fn new_confirm_with_menu<T: AllowedTextContent + MaybeTrace + 'static>(
let confirm_button = if hold {
let confirm_label = confirm_label.unwrap_or(TR::buttons__hold_to_confirm.into());
Button::with_text(confirm_label)
.styled(theme::button_confirm())
.with_long_press(theme::LOCK_HOLD_DURATION)
.with_long_press(theme::CONFIRM_HOLD_DURATION)
.styled(theme::firmware::button_confirm())
} else if let Some(confirm_label) = confirm_label {
Button::with_text(confirm_label)
} else {
let confirm_label = confirm_label.unwrap_or(TR::buttons__confirm.into());
Button::with_text(confirm_label).styled(theme::button_default())
Button::with_text(TR::buttons__confirm.into()).styled(theme::firmware::button_confirm())
};
let content_value = TextScreen::new(content)
let mut value_screen = TextScreen::new(content)
.with_header(Header::new(title).with_menu_button())
.with_action_bar(ActionBar::new_single(confirm_button))
.with_subtitle(subtitle.unwrap_or(TString::empty()))
.map(|msg| match msg {
TextScreenMsg::Confirmed => Some(FlowMsg::Confirmed),
TextScreenMsg::Cancelled => Some(FlowMsg::Cancelled),
TextScreenMsg::Menu => Some(FlowMsg::Info),
});
.with_subtitle(subtitle.unwrap_or(TString::empty()));
if let Some(hint) = hint {
value_screen = value_screen.with_hint(Hint::new_instruction(hint, Some(theme::ICON_INFO)));
}
let content_value = value_screen.map(|msg| match msg {
TextScreenMsg::Confirmed => Some(FlowMsg::Confirmed),
TextScreenMsg::Cancelled => Some(FlowMsg::Cancelled),
TextScreenMsg::Menu => Some(FlowMsg::Info),
});
let mut menu_items = VerticalMenu::<ShortMenuVec>::empty();

View File

@ -206,40 +206,52 @@ impl FirmwareUI for UIEckhart {
total_fee_new: TString<'static>,
_fee_rate_amount: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let (description, change, total_label) = match sign {
let (description, change, total_label, info_hint) = match sign {
s if s < 0 => (
TR::modify_fee__decrease_fee,
Some(TR::modify_fee__decrease_fee),
user_fee_change,
TR::modify_fee__new_transaction_fee,
None,
),
s if s > 0 => (
TR::modify_fee__increase_fee,
Some(TR::modify_fee__increase_fee),
user_fee_change,
TR::modify_fee__new_transaction_fee,
None,
),
_ => (
TR::modify_fee__no_change,
"".into(),
None,
TString::empty(),
TR::modify_fee__transaction_fee,
Some(TR::modify_fee__no_change.into()),
),
};
let paragraphs = ParagraphVecShort::from_iter([
Paragraph::new(&theme::TEXT_SMALL_LIGHT, description),
Paragraph::new(&theme::TEXT_MONO_MEDIUM_LIGHT, change),
Paragraph::new(&theme::TEXT_SMALL_LIGHT, total_label),
Paragraph::new(&theme::TEXT_MONO_MEDIUM_LIGHT, total_fee_new),
]);
let mut paragraphs = ParagraphVecShort::new();
if let Some(description) = description {
paragraphs.add(
Paragraph::new(&theme::TEXT_SMALL_LIGHT, description)
.with_bottom_padding(theme::PARAGRAPHS_SPACING),
);
paragraphs
.add(Paragraph::new(&theme::TEXT_MONO_EXTRA_LIGHT, change).with_bottom_padding(16));
}
paragraphs.add(
Paragraph::new(&theme::TEXT_SMALL_LIGHT, total_label)
.with_bottom_padding(theme::PARAGRAPHS_SPACING),
);
paragraphs.add(Paragraph::new(&theme::TEXT_MONO_EXTRA_LIGHT, total_fee_new));
let flow = flow::new_confirm_with_menu(
title,
None,
paragraphs.into_paragraphs().with_placement(
LinearPlacement::vertical().with_spacing(theme::PARAGRAPHS_SPACING),
),
paragraphs
.into_paragraphs()
.with_placement(LinearPlacement::vertical()),
info_hint,
None,
false,
Some(TR::words__title_information.into()),
Some(TR::confirm_total__title_fee.into()),
None,
)?;
Ok(flow)
@ -258,9 +270,9 @@ impl FirmwareUI for UIEckhart {
let paragraphs = ParagraphVecShort::from_iter([
Paragraph::new(&theme::TEXT_SMALL_LIGHT, description),
Paragraph::new(&theme::TEXT_MONO_MEDIUM_LIGHT, amount_change),
Paragraph::new(&theme::TEXT_MONO_EXTRA_LIGHT, amount_change),
Paragraph::new(&theme::TEXT_SMALL_LIGHT, TR::modify_amount__new_amount),
Paragraph::new(&theme::TEXT_MONO_MEDIUM_LIGHT, amount_new),
Paragraph::new(&theme::TEXT_MONO_EXTRA_LIGHT, amount_new),
]);
let layout = RootComponent::new(
@ -268,10 +280,7 @@ impl FirmwareUI for UIEckhart {
LinearPlacement::vertical().with_spacing(theme::PARAGRAPHS_SPACING),
))
.with_header(Header::new(TR::modify_amount__title.into()))
.with_action_bar(ActionBar::new_double(
Button::with_icon(theme::ICON_CROSS),
Button::with_text(TR::buttons__confirm.into()),
)),
.with_action_bar(ActionBar::new_cancel_confirm()),
);
Ok(layout)
}
@ -362,6 +371,7 @@ impl FirmwareUI for UIEckhart {
LinearPlacement::vertical().with_spacing(theme::PARAGRAPHS_SPACING),
),
None,
None,
hold,
None,
None,
@ -501,6 +511,7 @@ impl FirmwareUI for UIEckhart {
.into_paragraphs()
.with_placement(LinearPlacement::vertical())
.with_spacing(12),
None,
Some(verb),
false,
Some(verb_info),

View File

@ -59,7 +59,7 @@ class TR:
bitcoin__title_confirm_details: str = "Confirm details"
bitcoin__title_finalize_transaction: str = "Finalize transaction"
bitcoin__title_high_mining_fee: str = "High mining fee"
bitcoin__title_meld_transaction: str = "Meld transactions"
bitcoin__title_meld_transaction: str = "Meld transaction"
bitcoin__title_modify_amount: str = "Modify amount"
bitcoin__title_payjoin: str = "Payjoin"
bitcoin__title_proof_of_ownership: str = "Proof of ownership"

View File

@ -1143,7 +1143,7 @@ def confirm_replacement(title: str, txid: str) -> Awaitable[None]:
"confirm_replacement",
title,
txid,
TR.send__transaction_id,
subtitle=TR.send__transaction_id,
verb=TR.buttons__continue,
info=False,
br_code=ButtonRequestType.SignTx,
@ -1158,10 +1158,12 @@ async def confirm_modify_output(
) -> None:
address_layout = trezorui_api.confirm_value(
title=TR.modify_amount__title,
subtitle=TR.words__address,
value=address,
verb=TR.buttons__continue,
description=f"{TR.words__address}:",
cancel=True,
is_data=True,
description=None,
)
modify_layout = trezorui_api.confirm_modify_output(
sign=sign,
@ -1257,7 +1259,7 @@ async def confirm_signverify(
address_layout = trezorui_api.confirm_value(
title=address_title,
value=address,
description="",
description=None,
is_data=True,
verb=TR.buttons__continue,
info=True,

View File

@ -86,7 +86,7 @@
"bitcoin__title_confirm_details": "Confirm details",
"bitcoin__title_finalize_transaction": "Finalize transaction",
"bitcoin__title_high_mining_fee": "High mining fee",
"bitcoin__title_meld_transaction": "Meld transactions",
"bitcoin__title_meld_transaction": "Meld transaction",
"bitcoin__title_modify_amount": "Modify amount",
"bitcoin__title_payjoin": "Payjoin",
"bitcoin__title_proof_of_ownership": "Proof of ownership",
@ -487,17 +487,57 @@
"misc__enable_labeling": "Enable labeling?",
"misc__encrypt_value": "Encrypt value",
"misc__title_suite_labeling": "Suite labeling",
"modify_amount__decrease_amount": "Decrease amount by:",
"modify_amount__increase_amount": "Increase amount by:",
"modify_amount__new_amount": "New amount:",
"modify_amount__decrease_amount": {
"Bolt": "Decrease amount by:",
"Caesar": "Decrease amount by:",
"Delizia": "Decrease amount by:",
"Eckhart": "Decrease amount by"
},
"modify_amount__increase_amount": {
"Bolt": "Increase amount by:",
"Caesar": "Increase amount by:",
"Delizia": "Increase amount by:",
"Eckhart": "Increase amount by"
},
"modify_amount__new_amount": {
"Bolt": "New amount:",
"Caesar": "New amount:",
"Delizia": "New amount:",
"Eckhart": "New amount"
},
"modify_amount__title": "Modify amount",
"modify_fee__decrease_fee": "Decrease fee by:",
"modify_fee__decrease_fee": {
"Bolt": "Decrease fee by:",
"Caesar": "Decrease fee by:",
"Delizia": "Decrease fee by:",
"Eckhart": "Decrease fee by"
},
"modify_fee__fee_rate": "Fee rate:",
"modify_fee__increase_fee": "Increase fee by:",
"modify_fee__new_transaction_fee": "New transaction fee:",
"modify_fee__no_change": "Fee did not change.\n",
"modify_fee__increase_fee": {
"Bolt": "Increase fee by:",
"Caesar": "Increase fee by:",
"Delizia": "Increase fee by:",
"Eckhart": "Increase fee by"
},
"modify_fee__new_transaction_fee": {
"Bolt": "New transaction fee:",
"Caesar": "New transaction fee:",
"Delizia": "New transaction fee:",
"Eckhart": "New transaction fee"
},
"modify_fee__no_change": {
"Bolt": "Fee did not change.\n",
"Caesar": "Fee did not change.\n",
"Delizia": "Fee did not change.\n",
"Eckhart": "Fee did not change"
},
"modify_fee__title": "Modify fee",
"modify_fee__transaction_fee": "Transaction fee:",
"modify_fee__transaction_fee": {
"Bolt": "Transaction fee:",
"Caesar": "Transaction fee:",
"Delizia": "Transaction fee:",
"Eckhart": "Transaction fee"
},
"monero__confirm_export": "Confirm export",
"monero__confirm_ki_sync": "Confirm ki sync",
"monero__confirm_refresh": "Confirm refresh",

File diff suppressed because it is too large Load Diff