mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-26 01:18:28 +00:00
refactor(core/ui): introduce show_danger
This is a unified interface for flow_warning_hi_prio, which was available only on Mercury before. [no changelog]
This commit is contained in:
parent
f4a67564b7
commit
945b9010fa
@ -262,7 +262,6 @@ static void _librust_qstrs(void) {
|
|||||||
MP_QSTR_flow_request_number;
|
MP_QSTR_flow_request_number;
|
||||||
MP_QSTR_flow_request_passphrase;
|
MP_QSTR_flow_request_passphrase;
|
||||||
MP_QSTR_flow_show_share_words;
|
MP_QSTR_flow_show_share_words;
|
||||||
MP_QSTR_flow_warning_hi_prio;
|
|
||||||
MP_QSTR_get_language;
|
MP_QSTR_get_language;
|
||||||
MP_QSTR_get_transition_out;
|
MP_QSTR_get_transition_out;
|
||||||
MP_QSTR_haptic_feedback__disable;
|
MP_QSTR_haptic_feedback__disable;
|
||||||
@ -652,6 +651,7 @@ static void _librust_qstrs(void) {
|
|||||||
MP_QSTR_share_words__wrote_down_all;
|
MP_QSTR_share_words__wrote_down_all;
|
||||||
MP_QSTR_show_address_details;
|
MP_QSTR_show_address_details;
|
||||||
MP_QSTR_show_checklist;
|
MP_QSTR_show_checklist;
|
||||||
|
MP_QSTR_show_danger;
|
||||||
MP_QSTR_show_error;
|
MP_QSTR_show_error;
|
||||||
MP_QSTR_show_group_share_success;
|
MP_QSTR_show_group_share_success;
|
||||||
MP_QSTR_show_homescreen;
|
MP_QSTR_show_homescreen;
|
||||||
|
@ -22,13 +22,13 @@ use super::super::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||||
pub enum WarningHiPrio {
|
pub enum Danger {
|
||||||
Message,
|
Message,
|
||||||
Menu,
|
Menu,
|
||||||
Cancelled,
|
Cancelled,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FlowController for WarningHiPrio {
|
impl FlowController for Danger {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn index(&'static self) -> usize {
|
fn index(&'static self) -> usize {
|
||||||
*self as usize
|
*self as usize
|
||||||
@ -57,7 +57,7 @@ impl FlowController for WarningHiPrio {
|
|||||||
|
|
||||||
const EXTRA_PADDING: i16 = 6;
|
const EXTRA_PADDING: i16 = 6;
|
||||||
|
|
||||||
pub fn new_warning_hi_prio(
|
pub fn new_show_danger(
|
||||||
title: TString<'static>,
|
title: TString<'static>,
|
||||||
description: TString<'static>,
|
description: TString<'static>,
|
||||||
value: 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)
|
.with_result_icon(theme::ICON_BULLET_CHECKMARK, theme::GREY_DARK)
|
||||||
.map(|_| Some(FlowMsg::Cancelled));
|
.map(|_| Some(FlowMsg::Cancelled));
|
||||||
|
|
||||||
let res = SwipeFlow::new(&WarningHiPrio::Message)?
|
let res = SwipeFlow::new(&Danger::Message)?
|
||||||
.with_page(&WarningHiPrio::Message, content_message)?
|
.with_page(&Danger::Message, content_message)?
|
||||||
.with_page(&WarningHiPrio::Menu, content_menu)?
|
.with_page(&Danger::Menu, content_menu)?
|
||||||
.with_page(&WarningHiPrio::Cancelled, content_cancelled)?;
|
.with_page(&Danger::Cancelled, content_cancelled)?;
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ pub mod confirm_set_new_pin;
|
|||||||
pub mod confirm_summary;
|
pub mod confirm_summary;
|
||||||
pub mod confirm_with_info;
|
pub mod confirm_with_info;
|
||||||
pub mod continue_recovery;
|
pub mod continue_recovery;
|
||||||
|
pub mod danger;
|
||||||
pub mod get_address;
|
pub mod get_address;
|
||||||
pub mod prompt_backup;
|
pub mod prompt_backup;
|
||||||
pub mod request_number;
|
pub mod request_number;
|
||||||
@ -16,7 +17,6 @@ pub mod set_brightness;
|
|||||||
pub mod show_share_words;
|
pub mod show_share_words;
|
||||||
pub mod show_tutorial;
|
pub mod show_tutorial;
|
||||||
pub mod util;
|
pub mod util;
|
||||||
pub mod warning_hi_prio;
|
|
||||||
|
|
||||||
pub use confirm_action::{
|
pub use confirm_action::{
|
||||||
new_confirm_action, new_confirm_action_simple, ConfirmActionExtra, ConfirmActionMenuStrings,
|
new_confirm_action, new_confirm_action_simple, ConfirmActionExtra, ConfirmActionMenuStrings,
|
||||||
@ -31,6 +31,7 @@ pub use confirm_set_new_pin::SetNewPin;
|
|||||||
pub use confirm_summary::new_confirm_summary;
|
pub use confirm_summary::new_confirm_summary;
|
||||||
pub use confirm_with_info::new_confirm_with_info;
|
pub use confirm_with_info::new_confirm_with_info;
|
||||||
pub use continue_recovery::new_continue_recovery;
|
pub use continue_recovery::new_continue_recovery;
|
||||||
|
pub use danger::Danger;
|
||||||
pub use get_address::GetAddress;
|
pub use get_address::GetAddress;
|
||||||
pub use prompt_backup::PromptBackup;
|
pub use prompt_backup::PromptBackup;
|
||||||
pub use request_number::RequestNumber;
|
pub use request_number::RequestNumber;
|
||||||
@ -39,4 +40,3 @@ pub use set_brightness::SetBrightness;
|
|||||||
pub use show_share_words::ShowShareWords;
|
pub use show_share_words::ShowShareWords;
|
||||||
pub use show_tutorial::ShowTutorial;
|
pub use show_tutorial::ShowTutorial;
|
||||||
pub use util::{ConfirmBlobParams, ShowInfoParams};
|
pub use util::{ConfirmBlobParams, ShowInfoParams};
|
||||||
pub use warning_hi_prio::WarningHiPrio;
|
|
||||||
|
@ -1510,7 +1510,7 @@ extern "C" fn new_confirm_fido(n_args: usize, args: *const Obj, kwargs: *mut Map
|
|||||||
panic!();
|
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 block = move |_args: &[Obj], kwargs: &Map| {
|
||||||
let title: TString = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
|
let title: TString = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
|
||||||
let description: TString = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?;
|
let description: TString = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?;
|
||||||
@ -1521,7 +1521,7 @@ extern "C" fn new_warning_hi_prio(n_args: usize, args: *const Obj, kwargs: *mut
|
|||||||
.try_into_option()?;
|
.try_into_option()?;
|
||||||
|
|
||||||
let flow =
|
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())
|
Ok(LayoutObj::new_root(flow)?.into())
|
||||||
};
|
};
|
||||||
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
|
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
|
||||||
@ -1748,6 +1748,16 @@ pub static mp_module_trezorui2: Module = obj_module! {
|
|||||||
/// """Warning modal. No buttons shown when `button` is empty string."""
|
/// """Warning modal. No buttons shown when `button` is empty string."""
|
||||||
Qstr::MP_QSTR_show_warning => obj_fn_kw!(0, new_show_warning).as_obj(),
|
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(
|
/// def show_success(
|
||||||
/// *,
|
/// *,
|
||||||
/// title: str,
|
/// title: str,
|
||||||
@ -2002,16 +2012,6 @@ pub static mp_module_trezorui2: Module = obj_module! {
|
|||||||
/// """Get address / receive funds."""
|
/// """Get address / receive funds."""
|
||||||
Qstr::MP_QSTR_flow_get_address => obj_fn_kw!(0, new_get_address).as_obj(),
|
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(
|
/// def flow_confirm_output(
|
||||||
/// *,
|
/// *,
|
||||||
/// title: str | None,
|
/// title: str | None,
|
||||||
|
@ -229,6 +229,17 @@ def show_warning(
|
|||||||
"""Warning modal. No buttons shown when `button` is empty string."""
|
"""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
|
# rust/src/ui/model_mercury/layout.rs
|
||||||
def show_success(
|
def show_success(
|
||||||
*,
|
*,
|
||||||
@ -510,17 +521,6 @@ def flow_get_address(
|
|||||||
"""Get address / receive funds."""
|
"""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
|
# rust/src/ui/model_mercury/layout.rs
|
||||||
def flow_confirm_output(
|
def flow_confirm_output(
|
||||||
*,
|
*,
|
||||||
|
@ -144,12 +144,14 @@ async def require_confirm_claim(
|
|||||||
async def require_confirm_unknown_token(address_bytes: bytes) -> None:
|
async def require_confirm_unknown_token(address_bytes: bytes) -> None:
|
||||||
from ubinascii import hexlify
|
from ubinascii import hexlify
|
||||||
|
|
||||||
from trezor.ui.layouts import (
|
from trezor.ui.layouts import confirm_address, show_danger
|
||||||
confirm_address,
|
|
||||||
confirm_ethereum_unknown_contract_warning,
|
|
||||||
)
|
|
||||||
|
|
||||||
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()
|
contract_address_hex = "0x" + hexlify(address_bytes).decode()
|
||||||
await confirm_address(
|
await confirm_address(
|
||||||
|
@ -119,23 +119,19 @@ def confirm_path_warning(
|
|||||||
if not path_type
|
if not path_type
|
||||||
else f"{TR.words__unknown} {path_type.lower()}."
|
else f"{TR.words__unknown} {path_type.lower()}."
|
||||||
)
|
)
|
||||||
return raise_if_not_confirmed(
|
return show_danger(
|
||||||
trezorui2.flow_warning_hi_prio(
|
|
||||||
title=f"{TR.words__warning}!", description=description, value=path
|
|
||||||
),
|
|
||||||
"path_warning",
|
"path_warning",
|
||||||
|
description,
|
||||||
|
value=path,
|
||||||
br_code=ButtonRequestType.UnknownDerivationPath,
|
br_code=ButtonRequestType.UnknownDerivationPath,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def confirm_multisig_warning() -> Awaitable[None]:
|
def confirm_multisig_warning() -> Awaitable[None]:
|
||||||
return raise_if_not_confirmed(
|
return show_danger(
|
||||||
trezorui2.flow_warning_hi_prio(
|
|
||||||
title=f"{TR.words__important}!",
|
|
||||||
description=TR.send__receiving_to_multisig,
|
|
||||||
),
|
|
||||||
"warning_multisig",
|
"warning_multisig",
|
||||||
br_code=ButtonRequestType.Warning,
|
TR.send__receiving_to_multisig,
|
||||||
|
title=f"{TR.words__important}!",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -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 or ""),
|
||||||
|
verb_cancel=verb_cancel,
|
||||||
|
),
|
||||||
|
br_name,
|
||||||
|
br_code,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def show_success(
|
def show_success(
|
||||||
br_name: str,
|
br_name: str,
|
||||||
content: str,
|
content: str,
|
||||||
@ -712,17 +731,6 @@ def _confirm_summary(
|
|||||||
|
|
||||||
if not utils.BITCOIN_ONLY:
|
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(
|
async def confirm_ethereum_tx(
|
||||||
recipient: str | None,
|
recipient: str | None,
|
||||||
total_amount: str,
|
total_amount: str,
|
||||||
|
@ -412,6 +412,27 @@ 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
|
||||||
|
if content_short is None:
|
||||||
|
content_short = content
|
||||||
|
return show_warning(
|
||||||
|
br_name,
|
||||||
|
title,
|
||||||
|
content_short,
|
||||||
|
TR.words__continue_anyway,
|
||||||
|
br_code=br_code,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def show_success(
|
def show_success(
|
||||||
br_name: str,
|
br_name: str,
|
||||||
content: str,
|
content: str,
|
||||||
@ -556,7 +577,6 @@ def confirm_blob(
|
|||||||
title: str,
|
title: str,
|
||||||
data: bytes | str,
|
data: bytes | str,
|
||||||
description: str | None = None,
|
description: str | None = None,
|
||||||
text_mono: bool = True,
|
|
||||||
subtitle: str | None = None,
|
subtitle: str | None = None,
|
||||||
verb: str | None = None,
|
verb: str | None = None,
|
||||||
verb_cancel: str | None = None, # icon
|
verb_cancel: str | None = None, # icon
|
||||||
@ -806,14 +826,6 @@ def confirm_total(
|
|||||||
|
|
||||||
if not utils.BITCOIN_ONLY:
|
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(
|
async def confirm_ethereum_staking_tx(
|
||||||
title: str,
|
title: str,
|
||||||
intro_question: str,
|
intro_question: str,
|
||||||
|
@ -364,6 +364,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[None]:
|
||||||
|
if content_short is None:
|
||||||
|
content_short = content
|
||||||
|
return show_warning(
|
||||||
|
br_name,
|
||||||
|
content_short,
|
||||||
|
TR.words__continue_anyway_question,
|
||||||
|
br_code=br_code,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def show_success(
|
def show_success(
|
||||||
br_name: str,
|
br_name: str,
|
||||||
content: str,
|
content: str,
|
||||||
@ -770,13 +789,6 @@ def _confirm_summary(
|
|||||||
|
|
||||||
if not utils.BITCOIN_ONLY:
|
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(
|
async def confirm_ethereum_tx(
|
||||||
recipient: str | None,
|
recipient: str | None,
|
||||||
total_amount: str,
|
total_amount: str,
|
||||||
|
Loading…
Reference in New Issue
Block a user