Skip to content

Commit

Permalink
refactor(core/ui): introduce show_danger
Browse files Browse the repository at this point in the history
  • Loading branch information
ibz committed Nov 21, 2024
1 parent f4a6756 commit 2799415
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 74 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
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 Danger {
Message,
Menu,
Cancelled,
}

impl FlowController for WarningHiPrio {
impl FlowController for Danger {
#[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(&Danger::Message)?
.with_page(&Danger::Message, content_message)?
.with_page(&Danger::Menu, content_menu)?
.with_page(&Danger::Cancelled, content_cancelled)?;
Ok(res)
}
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 @@ -8,6 +8,7 @@ pub mod confirm_set_new_pin;
pub mod confirm_summary;
pub mod confirm_with_info;
pub mod continue_recovery;
pub mod danger;
pub mod get_address;
pub mod prompt_backup;
pub mod request_number;
Expand All @@ -16,7 +17,6 @@ pub mod set_brightness;
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 @@ -31,6 +31,7 @@ pub use confirm_set_new_pin::SetNewPin;
pub use confirm_summary::new_confirm_summary;
pub use confirm_with_info::new_confirm_with_info;
pub use continue_recovery::new_continue_recovery;
pub use danger::Danger;
pub use get_address::GetAddress;
pub use prompt_backup::PromptBackup;
pub use request_number::RequestNumber;
Expand All @@ -39,4 +40,3 @@ pub use set_brightness::SetBrightness;
pub use show_share_words::ShowShareWords;
pub use show_tutorial::ShowTutorial;
pub use util::{ConfirmBlobParams, ShowInfoParams};
pub use warning_hi_prio::WarningHiPrio;
24 changes: 12 additions & 12 deletions core/embed/rust/src/ui/model_mercury/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1510,7 +1510,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 @@ -1521,7 +1521,7 @@ extern "C" fn new_warning_hi_prio(n_args: usize, args: *const Obj, kwargs: *mut
.try_into_option()?;

let flow =
flow::warning_hi_prio::new_warning_hi_prio(title, description, value, verb_cancel)?;
flow::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 @@ -1748,6 +1748,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 @@ -2002,16 +2012,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
12 changes: 7 additions & 5 deletions core/src/apps/ethereum/layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,14 @@ async def require_confirm_claim(
async def require_confirm_unknown_token(address_bytes: bytes) -> None:
from ubinascii import hexlify

from trezor.ui.layouts import (
confirm_address,
confirm_ethereum_unknown_contract_warning,
)
from trezor.ui.layouts import confirm_address, show_danger

await confirm_ethereum_unknown_contract_warning()
await show_danger(
"unknown_contract_warning",
TR.ethereum__unknown_contract_address,
TR.ethereum__unknown_contract_address_short,
verb_cancel=TR.send__cancel_sign,
)

contract_address_hex = "0x" + hexlify(address_bytes).decode()
await confirm_address(
Expand Down
50 changes: 29 additions & 21 deletions core/src/trezor/ui/layouts/mercury/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,23 +119,19 @@ 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,
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=f"{TR.words__important}!",
)


Expand Down Expand Up @@ -316,6 +312,29 @@ def show_warning(
)


def show_danger(
br_name: str,
content: str,
content_short: str | None = None,
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,
verb_cancel=verb_cancel,
),
br_name,
br_code,
)


def show_success(
br_name: str,
content: str,
Expand Down Expand Up @@ -712,17 +731,6 @@ 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,
),
"unknown_contract_warning",
ButtonRequestType.Warning,
)

async def confirm_ethereum_tx(
recipient: str | None,
total_amount: str,
Expand Down
27 changes: 19 additions & 8 deletions core/src/trezor/ui/layouts/tr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,25 @@ def show_warning(
)


def show_danger(
br_name: str,
content: str,
content_short: str | None = None,
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_short,
TR.words__continue_anyway,
br_code=br_code,
)


def show_success(
br_name: str,
content: str,
Expand Down Expand Up @@ -806,14 +825,6 @@ 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,
)

async def confirm_ethereum_staking_tx(
title: str,
intro_question: str,
Expand Down
24 changes: 17 additions & 7 deletions core/src/trezor/ui/layouts/tt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,23 @@ def show_warning(
)


def show_danger(
br_name: str,
content: str,
content_short: str | None = None,
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_short,
TR.words__continue_anyway_question,
br_code=br_code,
)


def show_success(
br_name: str,
content: str,
Expand Down Expand Up @@ -770,13 +787,6 @@ 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,
)

async def confirm_ethereum_tx(
recipient: str | None,
total_amount: str,
Expand Down

0 comments on commit 2799415

Please sign in to comment.