Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce show_danger #4404

Merged
merged 1 commit into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -12,10 +12,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 @@ -34,7 +34,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 @@ -1491,7 +1491,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 @@ -1501,8 +1501,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 @@ -1717,6 +1716,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 @@ -1971,16 +1980,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 @@ -216,6 +216,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 @@ -497,17 +508,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
52 changes: 34 additions & 18 deletions core/src/trezor/ui/layouts/mercury/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,29 +119,27 @@ 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,
)


def confirm_multisig_different_paths_warning() -> Awaitable[None]:
return raise_if_not_confirmed(
trezorui2.flow_warning_hi_prio(
trezorui2.show_danger(
title=f"{TR.words__important}!",
description="Using different paths for different XPUBs.",
),
Expand Down Expand Up @@ -327,6 +325,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 @@ -724,14 +744,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 @@ -420,6 +420,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 @@ -564,7 +582,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 @@ -815,11 +832,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 @@ -372,6 +372,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 @@ -779,10 +795,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
Loading
Loading