Skip to content

Commit

Permalink
refactor(core/ui): introduce show_danger
Browse files Browse the repository at this point in the history
This is a unified interface for flow_warning_hi_prio,
which was available only on Mercury before.

[no changelog]
  • Loading branch information
ibz committed Dec 2, 2024
1 parent 3515cf3 commit 7873a24
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 61 deletions.
2 changes: 1 addition & 1 deletion core/embed/rust/librust_qstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions core/embed/rust/src/ui/model_mercury/flow/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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>,
Expand Down Expand Up @@ -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)
}
25 changes: 12 additions & 13 deletions core/embed/rust/src/ui/model_mercury/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()?;
Expand All @@ -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) }
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
22 changes: 11 additions & 11 deletions core/mocks/generated/trezorui2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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(
*,
Expand Down Expand Up @@ -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(
*,
Expand Down
50 changes: 33 additions & 17 deletions core/src/trezor/ui/layouts/mercury/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)


Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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(
Expand Down
26 changes: 20 additions & 6 deletions core/src/trezor/ui/layouts/tr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down
22 changes: 18 additions & 4 deletions core/src/trezor/ui/layouts/tt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit 7873a24

Please sign in to comment.