diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h index 78b6bfeabb1..d04460c4a29 100644 --- a/core/embed/rust/librust_qstr.h +++ b/core/embed/rust/librust_qstr.h @@ -262,7 +262,6 @@ static void _librust_qstrs(void) { MP_QSTR_flow_request_number; MP_QSTR_flow_request_passphrase; MP_QSTR_flow_show_share_words; - MP_QSTR_flow_warning_hi_prio; MP_QSTR_get_language; MP_QSTR_get_transition_out; MP_QSTR_haptic_feedback__disable; @@ -652,6 +651,7 @@ static void _librust_qstrs(void) { MP_QSTR_share_words__wrote_down_all; MP_QSTR_show_address_details; MP_QSTR_show_checklist; + MP_QSTR_show_danger; MP_QSTR_show_error; MP_QSTR_show_group_share_success; MP_QSTR_show_homescreen; diff --git a/core/embed/rust/src/ui/model_mercury/flow/mod.rs b/core/embed/rust/src/ui/model_mercury/flow/mod.rs index c01249063b0..162a436a96f 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/mod.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/mod.rs @@ -13,10 +13,10 @@ pub mod prompt_backup; pub mod request_number; pub mod request_passphrase; pub mod set_brightness; +pub mod show_danger; pub mod show_share_words; pub mod show_tutorial; pub mod util; -pub mod warning_hi_prio; pub use confirm_action::{ new_confirm_action, new_confirm_action_simple, ConfirmActionExtra, ConfirmActionMenuStrings, @@ -36,7 +36,7 @@ pub use prompt_backup::PromptBackup; pub use request_number::RequestNumber; pub use request_passphrase::RequestPassphrase; pub use set_brightness::SetBrightness; +pub use show_danger::ShowDanger; pub use show_share_words::ShowShareWords; pub use show_tutorial::ShowTutorial; pub use util::{ConfirmBlobParams, ShowInfoParams}; -pub use warning_hi_prio::WarningHiPrio; diff --git a/core/embed/rust/src/ui/model_mercury/flow/warning_hi_prio.rs b/core/embed/rust/src/ui/model_mercury/flow/show_danger.rs similarity index 91% rename from core/embed/rust/src/ui/model_mercury/flow/warning_hi_prio.rs rename to core/embed/rust/src/ui/model_mercury/flow/show_danger.rs index 2c63984fc2a..1af510a3460 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/warning_hi_prio.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/show_danger.rs @@ -22,13 +22,13 @@ use super::super::{ }; #[derive(Copy, Clone, PartialEq, Eq)] -pub enum WarningHiPrio { +pub enum ShowDanger { Message, Menu, Cancelled, } -impl FlowController for WarningHiPrio { +impl FlowController for ShowDanger { #[inline] fn index(&'static self) -> usize { *self as usize @@ -57,7 +57,7 @@ impl FlowController for WarningHiPrio { const EXTRA_PADDING: i16 = 6; -pub fn new_warning_hi_prio( +pub fn new_show_danger( title: TString<'static>, description: TString<'static>, value: TString<'static>, @@ -106,9 +106,9 @@ pub fn new_warning_hi_prio( .with_result_icon(theme::ICON_BULLET_CHECKMARK, theme::GREY_DARK) .map(|_| Some(FlowMsg::Cancelled)); - let res = SwipeFlow::new(&WarningHiPrio::Message)? - .with_page(&WarningHiPrio::Message, content_message)? - .with_page(&WarningHiPrio::Menu, content_menu)? - .with_page(&WarningHiPrio::Cancelled, content_cancelled)?; + let res = SwipeFlow::new(&ShowDanger::Message)? + .with_page(&ShowDanger::Message, content_message)? + .with_page(&ShowDanger::Menu, content_menu)? + .with_page(&ShowDanger::Cancelled, content_cancelled)?; Ok(res) } diff --git a/core/embed/rust/src/ui/model_mercury/layout.rs b/core/embed/rust/src/ui/model_mercury/layout.rs index 03b7a4e73ea..03f79101997 100644 --- a/core/embed/rust/src/ui/model_mercury/layout.rs +++ b/core/embed/rust/src/ui/model_mercury/layout.rs @@ -1503,7 +1503,7 @@ extern "C" fn new_confirm_fido(n_args: usize, args: *const Obj, kwargs: *mut Map panic!(); } -extern "C" fn new_warning_hi_prio(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { +extern "C" fn new_show_danger(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { let block = move |_args: &[Obj], kwargs: &Map| { let title: TString = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?; let description: TString = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?; @@ -1513,8 +1513,7 @@ extern "C" fn new_warning_hi_prio(n_args: usize, args: *const Obj, kwargs: *mut .unwrap_or_else(|_| Obj::const_none()) .try_into_option()?; - let flow = - flow::warning_hi_prio::new_warning_hi_prio(title, description, value, verb_cancel)?; + let flow = flow::show_danger::new_show_danger(title, description, value, verb_cancel)?; Ok(LayoutObj::new_root(flow)?.into()) }; unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } @@ -1741,6 +1740,16 @@ pub static mp_module_trezorui2: Module = obj_module! { /// """Warning modal. No buttons shown when `button` is empty string.""" Qstr::MP_QSTR_show_warning => obj_fn_kw!(0, new_show_warning).as_obj(), + /// def show_danger( + /// *, + /// title: str, + /// description: str, + /// value: str = "", + /// verb_cancel: str | None = None, + /// ) -> LayoutObj[UiResult]: + /// """Warning modal that makes it easier to cancel than to continue.""" + Qstr::MP_QSTR_show_danger => obj_fn_kw!(0, new_show_danger).as_obj(), + /// def show_success( /// *, /// title: str, @@ -1995,16 +2004,6 @@ pub static mp_module_trezorui2: Module = obj_module! { /// """Get address / receive funds.""" Qstr::MP_QSTR_flow_get_address => obj_fn_kw!(0, new_get_address).as_obj(), - /// def flow_warning_hi_prio( - /// *, - /// title: str, - /// description: str, - /// value: str = "", - /// verb_cancel: str | None = None, - /// ) -> LayoutObj[UiResult]: - /// """Warning modal with multiple steps to confirm.""" - Qstr::MP_QSTR_flow_warning_hi_prio => obj_fn_kw!(0, new_warning_hi_prio).as_obj(), - /// def flow_confirm_output( /// *, /// title: str | None, diff --git a/core/mocks/generated/trezorui2.pyi b/core/mocks/generated/trezorui2.pyi index a8d7004cb12..e7aadccea98 100644 --- a/core/mocks/generated/trezorui2.pyi +++ b/core/mocks/generated/trezorui2.pyi @@ -229,6 +229,17 @@ def show_warning( """Warning modal. No buttons shown when `button` is empty string.""" +# rust/src/ui/model_mercury/layout.rs +def show_danger( + *, + title: str, + description: str, + value: str = "", + verb_cancel: str | None = None, +) -> LayoutObj[UiResult]: + """Warning modal that makes it easier to cancel than to continue.""" + + # rust/src/ui/model_mercury/layout.rs def show_success( *, @@ -510,17 +521,6 @@ def flow_get_address( """Get address / receive funds.""" -# rust/src/ui/model_mercury/layout.rs -def flow_warning_hi_prio( - *, - title: str, - description: str, - value: str = "", - verb_cancel: str | None = None, -) -> LayoutObj[UiResult]: - """Warning modal with multiple steps to confirm.""" - - # rust/src/ui/model_mercury/layout.rs def flow_confirm_output( *, diff --git a/core/src/trezor/ui/layouts/mercury/__init__.py b/core/src/trezor/ui/layouts/mercury/__init__.py index ca61bd9be2f..454ba924933 100644 --- a/core/src/trezor/ui/layouts/mercury/__init__.py +++ b/core/src/trezor/ui/layouts/mercury/__init__.py @@ -119,23 +119,21 @@ def confirm_path_warning( if not path_type else f"{TR.words__unknown} {path_type.lower()}." ) - return raise_if_not_confirmed( - trezorui2.flow_warning_hi_prio( - title=f"{TR.words__warning}!", description=description, value=path - ), + return show_danger( "path_warning", + description, + value=path, + verb_cancel=TR.words__cancel_and_exit, br_code=ButtonRequestType.UnknownDerivationPath, ) def confirm_multisig_warning() -> Awaitable[None]: - return raise_if_not_confirmed( - trezorui2.flow_warning_hi_prio( - title=f"{TR.words__important}!", - description=TR.send__receiving_to_multisig, - ), + return show_danger( "warning_multisig", - br_code=ButtonRequestType.Warning, + TR.send__receiving_to_multisig, + title=TR.words__important, + verb_cancel=TR.words__cancel_and_exit, ) @@ -316,6 +314,28 @@ def show_warning( ) +def show_danger( + br_name: str, + content: str, + value: str | None = None, + title: str | None = None, + verb_cancel: str | None = None, + br_code: ButtonRequestType = ButtonRequestType.Warning, +) -> Awaitable[None]: + title = title or TR.words__warning + verb_cancel = verb_cancel or TR.buttons__cancel + return raise_if_not_confirmed( + trezorui2.show_danger( + title=title, + description=content, + value=(value or ""), + verb_cancel=verb_cancel, + ), + br_name, + br_code, + ) + + def show_success( br_name: str, content: str, @@ -713,14 +733,10 @@ def _confirm_summary( if not utils.BITCOIN_ONLY: def confirm_ethereum_unknown_contract_warning() -> Awaitable[None]: - return raise_if_not_confirmed( - trezorui2.flow_warning_hi_prio( - title=TR.words__warning, - description=TR.ethereum__unknown_contract_address, - verb_cancel=TR.send__cancel_sign, - ), + return show_danger( "unknown_contract_warning", - ButtonRequestType.Warning, + TR.ethereum__unknown_contract_address, + verb_cancel=TR.send__cancel_sign, ) async def confirm_ethereum_tx( diff --git a/core/src/trezor/ui/layouts/tr/__init__.py b/core/src/trezor/ui/layouts/tr/__init__.py index 44708233075..a991252c63e 100644 --- a/core/src/trezor/ui/layouts/tr/__init__.py +++ b/core/src/trezor/ui/layouts/tr/__init__.py @@ -412,6 +412,24 @@ def show_warning( ) +def show_danger( + br_name: str, + content: str, + value: str | None = None, + title: str | None = None, + verb_cancel: str | None = None, + br_code: ButtonRequestType = ButtonRequestType.Warning, +) -> Awaitable[ui.UiResult]: + title = title or TR.words__warning + return show_warning( + br_name, + title, + content, + TR.words__continue_anyway, + br_code=br_code, + ) + + def show_success( br_name: str, content: str, @@ -556,7 +574,6 @@ def confirm_blob( title: str, data: bytes | str, description: str | None = None, - text_mono: bool = True, subtitle: str | None = None, verb: str | None = None, verb_cancel: str | None = None, # icon @@ -807,11 +824,8 @@ def confirm_total( if not utils.BITCOIN_ONLY: def confirm_ethereum_unknown_contract_warning() -> Awaitable[ui.UiResult]: - return show_warning( - "unknown_contract_warning", - TR.words__warning, - TR.ethereum__unknown_contract_address_short, - TR.words__continue_anyway, + return show_danger( + "unknown_contract_warning", TR.ethereum__unknown_contract_address_short ) async def confirm_ethereum_staking_tx( diff --git a/core/src/trezor/ui/layouts/tt/__init__.py b/core/src/trezor/ui/layouts/tt/__init__.py index aecd69d7ee9..f77c44799e8 100644 --- a/core/src/trezor/ui/layouts/tt/__init__.py +++ b/core/src/trezor/ui/layouts/tt/__init__.py @@ -364,6 +364,22 @@ def show_warning( ) +def show_danger( + br_name: str, + content: str, + value: str | None = None, + title: str | None = None, + verb_cancel: str | None = None, + br_code: ButtonRequestType = ButtonRequestType.Warning, +) -> Awaitable[None]: + return show_warning( + br_name, + content, + TR.words__continue_anyway_question, + br_code=br_code, + ) + + def show_success( br_name: str, content: str, @@ -771,10 +787,8 @@ def _confirm_summary( if not utils.BITCOIN_ONLY: def confirm_ethereum_unknown_contract_warning() -> Awaitable[None]: - return show_warning( - "unknown_contract_warning", - TR.ethereum__unknown_contract_address_short, - TR.words__continue_anyway_question, + return show_danger( + "unknown_contract_warning", TR.ethereum__unknown_contract_address_short ) async def confirm_ethereum_tx(