1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-04 21:48:17 +00:00

refactor(core): move prompt_backup

- model_r `confirm_backup` and mercury `flow_prompt_backup` merged into
`prompt_backup`
- not implemented for model_t
This commit is contained in:
obrusvit 2024-11-25 07:05:04 +01:00
parent 2b7c3a4e03
commit d3e3c87be7
12 changed files with 64 additions and 66 deletions

View File

@ -192,7 +192,6 @@ static void _librust_qstrs(void) {
MP_QSTR_coinjoin_authorized; MP_QSTR_coinjoin_authorized;
MP_QSTR_confirm_action; MP_QSTR_confirm_action;
MP_QSTR_confirm_address; MP_QSTR_confirm_address;
MP_QSTR_confirm_backup;
MP_QSTR_confirm_blob; MP_QSTR_confirm_blob;
MP_QSTR_confirm_blob_intro; MP_QSTR_confirm_blob_intro;
MP_QSTR_confirm_coinjoin; MP_QSTR_confirm_coinjoin;
@ -255,7 +254,6 @@ static void _librust_qstrs(void) {
MP_QSTR_flow_confirm_set_new_pin; MP_QSTR_flow_confirm_set_new_pin;
MP_QSTR_flow_confirm_summary; MP_QSTR_flow_confirm_summary;
MP_QSTR_flow_get_address; MP_QSTR_flow_get_address;
MP_QSTR_flow_prompt_backup;
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;
@ -425,6 +423,7 @@ static void _librust_qstrs(void) {
MP_QSTR_progress__x_seconds_left_template; MP_QSTR_progress__x_seconds_left_template;
MP_QSTR_progress_event; MP_QSTR_progress_event;
MP_QSTR_prompt; MP_QSTR_prompt;
MP_QSTR_prompt_backup;
MP_QSTR_prompt_screen; MP_QSTR_prompt_screen;
MP_QSTR_prompt_title; MP_QSTR_prompt_title;
MP_QSTR_qr_title; MP_QSTR_qr_title;

View File

@ -4,7 +4,7 @@ use crate::{
gc::Gc, gc::Gc,
iter::IterBuf, iter::IterBuf,
list::List, list::List,
macros::{obj_fn_1, obj_fn_kw, obj_module}, macros::{obj_fn_0, obj_fn_1, obj_fn_kw, obj_module},
map::Map, map::Map,
module::Module, module::Module,
obj::Obj, obj::Obj,
@ -387,6 +387,14 @@ extern "C" fn new_continue_recovery_homepage(
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
} }
extern "C" fn new_prompt_backup() -> Obj {
let block = || {
let layout = ModelUI::prompt_backup()?;
Ok(LayoutObj::new_root(layout)?.into())
};
unsafe { util::try_or_raise(block) }
}
extern "C" fn new_request_bip39(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { extern "C" fn new_request_bip39(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 prompt: TString = kwargs.get(Qstr::MP_QSTR_prompt)?.try_into()?; let prompt: TString = kwargs.get(Qstr::MP_QSTR_prompt)?.try_into()?;
@ -1091,6 +1099,10 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// """Device recovery homescreen.""" /// """Device recovery homescreen."""
Qstr::MP_QSTR_continue_recovery_homepage => obj_fn_kw!(0, new_continue_recovery_homepage).as_obj(), Qstr::MP_QSTR_continue_recovery_homepage => obj_fn_kw!(0, new_continue_recovery_homepage).as_obj(),
/// def prompt_backup() -> LayoutObj[UiResult]:
/// """Strongly recommend user to do a backup."""
Qstr::MP_QSTR_prompt_backup => obj_fn_0!(new_prompt_backup).as_obj(),
/// def request_bip39( /// def request_bip39(
/// *, /// *,
/// prompt: str, /// prompt: str,

View File

@ -534,16 +534,6 @@ extern "C" fn new_get_address(n_args: usize, args: *const Obj, kwargs: *mut Map)
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
} }
extern "C" fn new_prompt_backup() -> Obj {
let block = || {
let flow = flow::prompt_backup::new_prompt_backup()?;
let obj = LayoutObj::new_root(flow)?;
Ok(obj.into())
};
unsafe { util::try_or_raise(block) }
}
#[no_mangle] #[no_mangle]
pub static mp_module_trezorui2: Module = obj_module! { pub static mp_module_trezorui2: Module = obj_module! {
/// from trezor import utils /// from trezor import utils
@ -594,10 +584,6 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// """Transaction summary. Always hold to confirm.""" /// """Transaction summary. Always hold to confirm."""
Qstr::MP_QSTR_confirm_total => obj_fn_kw!(0, new_confirm_total).as_obj(), Qstr::MP_QSTR_confirm_total => obj_fn_kw!(0, new_confirm_total).as_obj(),
/// def flow_prompt_backup() -> LayoutObj[UiResult]:
/// """Prompt a user to create backup with an option to skip."""
Qstr::MP_QSTR_flow_prompt_backup => obj_fn_0!(new_prompt_backup).as_obj(),
/// def flow_get_address( /// def flow_get_address(
/// *, /// *,
/// address: str | bytes, /// address: str | bytes,

View File

@ -427,6 +427,11 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
LayoutObj::new_root(flow) LayoutObj::new_root(flow)
} }
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
let flow = flow::prompt_backup::new_prompt_backup()?;
Ok(flow)
}
fn request_bip39( fn request_bip39(
prompt: TString<'static>, prompt: TString<'static>,
prefill_word: TString<'static>, prefill_word: TString<'static>,

View File

@ -270,39 +270,6 @@ fn content_in_button_page<T: Component + Paginate + MaybeTrace + 'static>(
Ok(obj.into()) Ok(obj.into())
} }
extern "C" fn new_confirm_backup(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], _kwargs: &Map| {
let get_page = move |page_index| match page_index {
0 => {
let btn_layout = ButtonLayout::text_none_arrow_wide(TR::buttons__skip.into());
let btn_actions = ButtonActions::cancel_none_next();
let ops = OpTextLayout::new(theme::TEXT_NORMAL)
.text_normal(TR::backup__new_wallet_created)
.newline()
.text_normal(TR::backup__it_should_be_backed_up_now);
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted)
.with_title(TR::words__title_success.into())
}
1 => {
let btn_layout = ButtonLayout::up_arrow_none_text(TR::buttons__back_up.into());
let btn_actions = ButtonActions::prev_none_confirm();
let ops =
OpTextLayout::new(theme::TEXT_NORMAL).text_normal(TR::backup__recover_anytime);
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted)
.with_title(TR::backup__title_backup_wallet.into())
}
_ => unreachable!(),
};
let pages = FlowPages::new(get_page, 2);
let obj = LayoutObj::new(Flow::new(pages))?;
Ok(obj.into())
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_show_address_details(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { extern "C" fn new_show_address_details(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 address: TString = kwargs.get(Qstr::MP_QSTR_address)?.try_into()?; let address: TString = kwargs.get(Qstr::MP_QSTR_address)?.try_into()?;
@ -624,10 +591,6 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// ///
Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorui2.to_obj(), Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorui2.to_obj(),
/// def confirm_backup() -> LayoutObj[UiResult]:
/// """Strongly recommend user to do backup."""
Qstr::MP_QSTR_confirm_backup => obj_fn_kw!(0, new_confirm_backup).as_obj(),
/// def show_address_details( /// def show_address_details(
/// *, /// *,
/// address: str, /// address: str,

View File

@ -544,6 +544,36 @@ impl UIFeaturesFirmware for ModelTRFeatures {
LayoutObj::new_root(layout) LayoutObj::new_root(layout)
} }
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
let get_page = move |page_index| match page_index {
0 => {
let btn_layout = ButtonLayout::text_none_arrow_wide(TR::buttons__skip.into());
let btn_actions = ButtonActions::cancel_none_next();
let ops = OpTextLayout::new(theme::TEXT_NORMAL)
.text_normal(TR::backup__new_wallet_created)
.newline()
.text_normal(TR::backup__it_should_be_backed_up_now);
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted)
.with_title(TR::words__title_success.into())
}
1 => {
let btn_layout = ButtonLayout::up_arrow_none_text(TR::buttons__back_up.into());
let btn_actions = ButtonActions::prev_none_confirm();
let ops =
OpTextLayout::new(theme::TEXT_NORMAL).text_normal(TR::backup__recover_anytime);
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted)
.with_title(TR::backup__title_backup_wallet.into())
}
_ => unreachable!(),
};
let pages = FlowPages::new(get_page, 2);
let layout = RootComponent::new(Flow::new(pages));
Ok(layout)
}
fn request_bip39( fn request_bip39(
prompt: TString<'static>, prompt: TString<'static>,
prefill_word: TString<'static>, prefill_word: TString<'static>,

View File

@ -488,6 +488,12 @@ impl UIFeaturesFirmware for ModelTTFeatures {
} }
} }
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
c"prompt_backup not implemented",
))
}
fn request_bip39( fn request_bip39(
prompt: TString<'static>, prompt: TString<'static>,
prefill_word: TString<'static>, prefill_word: TString<'static>,

View File

@ -137,6 +137,8 @@ pub trait UIFeaturesFirmware {
fn check_homescreen_format(image: BinaryData, accept_toif: bool) -> bool; fn check_homescreen_format(image: BinaryData, accept_toif: bool) -> bool;
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error>;
fn request_bip39( fn request_bip39(
prompt: TString<'static>, prompt: TString<'static>,
prefill_word: TString<'static>, prefill_word: TString<'static>,

View File

@ -47,11 +47,6 @@ def confirm_total(
"""Transaction summary. Always hold to confirm.""" """Transaction summary. Always hold to confirm."""
# rust/src/ui/model_mercury/layout.rs
def flow_prompt_backup() -> LayoutObj[UiResult]:
"""Prompt a user to create backup with an option to skip."""
# rust/src/ui/model_mercury/layout.rs # rust/src/ui/model_mercury/layout.rs
def flow_get_address( def flow_get_address(
*, *,
@ -114,11 +109,6 @@ from trezor import utils
from trezorui_api import * from trezorui_api import *
# rust/src/ui/model_tr/layout.rs
def confirm_backup() -> LayoutObj[UiResult]:
"""Strongly recommend user to do backup."""
# rust/src/ui/model_tr/layout.rs # rust/src/ui/model_tr/layout.rs
def show_address_details( def show_address_details(
*, *,

View File

@ -266,6 +266,11 @@ def continue_recovery_homepage(
"""Device recovery homescreen.""" """Device recovery homescreen."""
# rust/src/ui/api/firmware_upy.rs
def prompt_backup() -> LayoutObj[UiResult]:
"""Strongly recommend user to do a backup."""
# rust/src/ui/api/firmware_upy.rs # rust/src/ui/api/firmware_upy.rs
def request_bip39( def request_bip39(
*, *,

View File

@ -105,7 +105,7 @@ async def show_wallet_created_success() -> None:
async def prompt_backup() -> bool: async def prompt_backup() -> bool:
result = await interact( result = await interact(
trezorui2.flow_prompt_backup(), trezorui_api.prompt_backup(),
"backup_device", "backup_device",
ButtonRequestType.ResetDevice, ButtonRequestType.ResetDevice,
raise_on_cancel=None, raise_on_cancel=None,

View File

@ -128,7 +128,7 @@ async def prompt_backup() -> bool:
br_code = ButtonRequestType.ResetDevice br_code = ButtonRequestType.ResetDevice
result = await interact( result = await interact(
trezorui2.confirm_backup(), trezorui_api.prompt_backup(),
br_name, br_name,
br_code, br_code,
raise_on_cancel=None, raise_on_cancel=None,