1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-03-25 04:25:42 +00:00

chore(core): cleanup warnings and clippy errors

[no changelog]
This commit is contained in:
obrusvit 2024-12-05 23:41:38 +01:00 committed by Vít Obrusník
parent 9caf540e16
commit 0e1696b3ed
12 changed files with 182 additions and 197 deletions

View File

@ -2,7 +2,6 @@ use crate::{
io::BinaryData,
micropython::{
gc::Gc,
iter::IterBuf,
list::List,
macros::{obj_fn_0, obj_fn_1, obj_fn_kw, obj_module},
map::Map,
@ -23,16 +22,18 @@ use crate::{
util::{upy_disable_animation, RecoveryType},
},
ui_features::ModelUI,
ui_features_fw::UIFeaturesFirmware,
ui_features_fw::{
UIFeaturesFirmware, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_WORD_QUIZ_ITEMS,
},
},
};
use heapless::Vec;
/// Dummy implementation so that we can use `Empty` in a return type of unimplemented trait
/// function
/// Dummy implementation so that we can use `Empty` in a return type of
/// unimplemented trait function
impl ComponentMsgObj for Empty {
fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result<Obj, crate::error::Error> {
Ok(Obj::const_none())
unimplemented!()
}
}
@ -231,7 +232,6 @@ extern "C" fn new_confirm_fido(n_args: usize, args: *const Obj, kwargs: *mut Map
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
// TODO: there was `no_mangle` attribute in TT, should we apply it?
extern "C" fn new_confirm_firmware_update(
n_args: usize,
args: *const Obj,
@ -637,12 +637,11 @@ extern "C" fn new_request_number(n_args: usize, args: *const Obj, kwargs: *mut M
.unwrap_or_else(|_| Obj::const_none())
.try_into_option()?;
let more_info_cb = more_info_callback.and_then(|callback| {
let cb = move |n: u32| {
let more_info_cb = more_info_callback.map(|callback| {
move |n: u32| {
let text = callback.call_with_n_args(&[n.try_into().unwrap()]).unwrap();
TString::try_from(text).unwrap()
};
Some(cb)
}
});
let layout = ModelUI::request_number(
@ -687,7 +686,7 @@ extern "C" fn new_select_word(n_args: usize, args: *const Obj, kwargs: *mut Map)
let title: TString = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let description: TString = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?;
let words_iterable: Obj = kwargs.get(Qstr::MP_QSTR_words)?;
let words: [TString<'static>; 3] = util::iter_into_array(words_iterable)?;
let words: [TString<'static>; MAX_WORD_QUIZ_ITEMS] = util::iter_into_array(words_iterable)?;
let layout = ModelUI::select_word(title, description, words)?;
Ok(LayoutObj::new_root(layout)?.into())
@ -746,7 +745,7 @@ extern "C" fn new_show_checklist(n_args: usize, args: *const Obj, kwargs: *mut M
let active: usize = kwargs.get(Qstr::MP_QSTR_active)?.try_into()?;
let items: Obj = kwargs.get(Qstr::MP_QSTR_items)?;
let items: [TString<'static>; 3] = util::iter_into_array(items)?;
let items: [TString<'static>; MAX_CHECKLIST_ITEMS] = util::iter_into_array(items)?;
let layout = ModelUI::show_checklist(title, button, active, items)?;
Ok(LayoutObj::new_root(layout)?.into())
@ -791,7 +790,7 @@ extern "C" fn new_show_group_share_success(
) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let lines_iterable: Obj = kwargs.get(Qstr::MP_QSTR_lines)?;
let lines: [TString; 4] = util::iter_into_array(lines_iterable)?;
let lines: [TString; MAX_GROUP_SHARE_LINES] = util::iter_into_array(lines_iterable)?;
let layout = ModelUI::show_group_share_success(lines)?;
Ok(LayoutObj::new_root(layout)?.into())
@ -825,9 +824,7 @@ extern "C" fn new_show_info(n_args: usize, args: *const Obj, kwargs: *mut Map) -
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()?;
let button: TString = kwargs
.get_or(Qstr::MP_QSTR_button, TString::empty())?
.try_into()?;
let button: TString = kwargs.get_or(Qstr::MP_QSTR_button, TString::empty())?;
let time_ms: u32 = kwargs.get_or(Qstr::MP_QSTR_time_ms, 0)?.try_into()?;
let obj = ModelUI::show_info(title, description, button, time_ms)?;
@ -1014,18 +1011,10 @@ extern "C" fn new_show_warning(n_args: usize, args: *const Obj, kwargs: *mut Map
let value: TString = kwargs.get_or(Qstr::MP_QSTR_value, "".into())?;
let description: TString = kwargs.get_or(Qstr::MP_QSTR_description, "".into())?;
let allow_cancel: bool = kwargs.get_or(Qstr::MP_QSTR_allow_cancel, true)?;
let time_ms: u32 = kwargs.get_or(Qstr::MP_QSTR_time_ms, 0)?;
let danger: bool = kwargs.get_or(Qstr::MP_QSTR_danger, false)?;
let layout = ModelUI::show_warning(
title,
button,
value,
description,
allow_cancel,
time_ms,
danger,
)?;
let layout =
ModelUI::show_warning(title, button, value, description, allow_cancel, danger)?;
Ok(layout.into())
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
@ -1059,7 +1048,9 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// see `trezor::ui::layout::obj::LayoutObj`.
/// """
///
/// def attach_timer_fn(self, fn: Callable[[int, int], None], attach_type: AttachType | None) -> LayoutState | None:
/// def attach_timer_fn(
/// self, fn: Callable[[int, int], None], attach_type: AttachType | None
/// ) -> LayoutState | None:
/// """Attach a timer setter function.
///
/// The layout object can call the timer setter with two arguments,
@ -1129,8 +1120,8 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// """Calls drop on contents of the root component."""
///
/// class UiResult:
/// """Result of a UI operation."""
/// pass
/// """Result of a UI operation."""
/// pass
///
/// mock:global
Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorui_api.to_obj(),
@ -1446,7 +1437,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// prefill_word: str,
/// can_go_back: bool,
/// ) -> LayoutObj[str]:
/// """SLIP39 word input keyboard."""
/// """SLIP39 word input keyboard."""
Qstr::MP_QSTR_request_slip39 => obj_fn_kw!(0, new_request_slip39).as_obj(),
/// def request_number(
@ -1487,7 +1478,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// words: Iterable[str],
/// ) -> LayoutObj[int]:
/// """Select mnemonic word from three possibilities - seed check after backup. The
/// iterable must be of exact size. Returns index in range `0..3`."""
/// iterable must be of exact size. Returns index in range `0..3`."""
Qstr::MP_QSTR_select_word => obj_fn_kw!(0, new_select_word).as_obj(),
/// def select_word_count(
@ -1498,10 +1489,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// For unlocking a repeated backup, select from 20 or 33."""
Qstr::MP_QSTR_select_word_count => obj_fn_kw!(0, new_select_word_count).as_obj(),
/// def set_brightness(
/// *,
/// current: int | None = None
/// ) -> LayoutObj[UiResult]:
/// def set_brightness(*, current: int | None = None) -> LayoutObj[UiResult]:
/// """Show the brightness configuration dialog."""
Qstr::MP_QSTR_set_brightness => obj_fn_kw!(0, new_set_brightness).as_obj(),
@ -1526,7 +1514,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// button: str,
/// ) -> LayoutObj[UiResult]:
/// """Checklist of backup steps. Active index is highlighted, previous items have check
/// mark next to them. Limited to 3 items."""
/// mark next to them. Limited to 3 items."""
Qstr::MP_QSTR_show_checklist => obj_fn_kw!(0, new_show_checklist).as_obj(),
/// def show_danger(
@ -1554,7 +1542,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// *,
/// lines: Iterable[str],
/// ) -> LayoutObj[UiResult]:
/// """Shown after successfully finishing a group."""
/// """Shown after successfully finishing a group."""
Qstr::MP_QSTR_show_group_share_success => obj_fn_kw!(0, new_show_group_share_success).as_obj(),
/// def show_homescreen(
@ -1581,7 +1569,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// def show_info_with_cancel(
/// *,
/// title: str,
/// items: Iterable[Tuple[str, str]],
/// items: Iterable[tuple[str, str]],
/// horizontal: bool = False,
/// chunkify: bool = False,
/// ) -> LayoutObj[UiResult]:
@ -1609,8 +1597,8 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// title: str | None = None,
/// ) -> LayoutObj[UiResult]:
/// """Show progress loader. Please note that the number of lines reserved on screen for
/// description is determined at construction time. If you want multiline descriptions
/// make sure the initial description has at least that amount of lines."""
/// description is determined at construction time. If you want multiline descriptions
/// make sure the initial description has at least that amount of lines."""
Qstr::MP_QSTR_show_progress => obj_fn_kw!(0, new_show_progress).as_obj(),
/// def show_progress_coinjoin(
@ -1621,7 +1609,7 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// skip_first_paint: bool = False,
/// ) -> LayoutObj[UiResult]:
/// """Show progress loader for coinjoin. Returns CANCELLED after a specified time when
/// time_ms timeout is passed."""
/// time_ms timeout is passed."""
Qstr::MP_QSTR_show_progress_coinjoin => obj_fn_kw!(0, new_show_progress_coinjoin).as_obj(),
/// def show_remaining_shares(
@ -1682,7 +1670,6 @@ pub static mp_module_trezorui_api: Module = obj_module! {
/// value: str = "",
/// description: str = "",
/// allow_cancel: bool = True,
/// time_ms: int = 0,
/// danger: bool = False, # unused on TT
/// ) -> LayoutObj[UiResult]:
/// """Warning modal. TT: No buttons shown when `button` is empty string. TR: middle button and centered text."""

View File

@ -3,8 +3,7 @@ use crate::{
strutil::TString,
translations::TR,
ui::{
button_request::ButtonRequest,
component::{swipe_detect::SwipeSettings, ButtonRequestExt, ComponentExt},
component::{swipe_detect::SwipeSettings, ComponentExt},
flow::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,

View File

@ -23,9 +23,12 @@ use crate::{
geometry::{self, Direction},
layout::{
obj::{LayoutMaybeTrace, LayoutObj, RootComponent},
util::{ConfirmBlob, PropsList, RecoveryType, StrOrBytes},
util::{PropsList, RecoveryType},
},
ui_features::ModelUI,
ui_features_fw::{
UIFeaturesFirmware, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_WORD_QUIZ_ITEMS,
},
ui_features_fw::UIFeaturesFirmware,
},
};
@ -48,10 +51,10 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
action: Option<TString<'static>>,
description: Option<TString<'static>>,
subtitle: Option<TString<'static>>,
verb: Option<TString<'static>>,
_verb: Option<TString<'static>>,
verb_cancel: Option<TString<'static>>,
hold: bool,
hold_danger: bool,
_hold_danger: bool,
reverse: bool,
prompt_screen: bool,
prompt_title: Option<TString<'static>>,
@ -71,15 +74,15 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
}
fn confirm_address(
title: TString<'static>,
data: Obj,
description: Option<TString<'static>>,
_title: TString<'static>,
_data: Obj,
_description: Option<TString<'static>>,
_extra: Option<TString<'static>>,
_verb: Option<TString<'static>>,
chunkify: bool,
_chunkify: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
// confirm_value is used instead
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"confirm_address not implemented",
))
}
@ -218,7 +221,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
fn confirm_emphasized(
title: TString<'static>,
items: Obj,
verb: Option<TString<'static>>,
_verb: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let mut ops = OpTextLayout::new(theme::TEXT_NORMAL);
for item in IterBuf::new().try_iterate(items)? {
@ -254,11 +257,9 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
accounts: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
#[cfg(feature = "universal_fw")]
return Ok(flow::confirm_fido::new_confirm_fido(
title, app_name, icon, accounts,
)?);
return flow::confirm_fido::new_confirm_fido(title, app_name, icon, accounts);
#[cfg(not(feature = "universal_fw"))]
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"confirm_fido not used in bitcoin-only firmware",
))
}
@ -277,7 +278,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
sign: i32,
user_fee_change: TString<'static>,
total_fee_new: TString<'static>,
fee_rate_amount: Option<TString<'static>>,
_fee_rate_amount: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let (description, change, total_label) = match sign {
s if s < 0 => (
@ -353,7 +354,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
_button_style_confirm: bool,
_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"confirm_more not implemented",
))
}
@ -474,7 +475,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
title: TString<'static>,
button: TString<'static>,
info_button: TString<'static>,
verb_cancel: Option<TString<'static>>,
_verb_cancel: Option<TString<'static>>,
items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
let mut paragraphs = ParagraphVecShort::new();
@ -514,11 +515,11 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
_button: Option<TString<'static>>,
recovery_type: RecoveryType,
show_instructions: bool,
remaining_shares: Option<crate::micropython::obj::Obj>,
remaining_shares: Option<Obj>,
) -> Result<Gc<LayoutObj>, Error> {
let pages_vec = if let Some(pages_obj) = remaining_shares {
let mut vec = ParagraphVecLong::new();
for page in crate::micropython::iter::IterBuf::new().try_iterate(pages_obj)? {
for page in IterBuf::new().try_iterate(pages_obj)? {
let [title, description]: [TString; 2] = util::iter_into_array(page)?;
vec.add(Paragraph::new(&theme::TEXT_SUB_GREY, title))
.add(Paragraph::new(&theme::TEXT_MONO_GREY_LIGHT, description).break_after());
@ -675,7 +676,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
_verb: TString<'static>,
_items: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"multiple_pages_texts not implemented",
))
}
@ -756,8 +757,8 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
}
fn request_passphrase(
prompt: TString<'static>,
max_len: u32,
_prompt: TString<'static>,
_max_len: u32,
) -> Result<impl LayoutMaybeTrace, Error> {
let flow = flow::request_passphrase::new_request_passphrase()?;
Ok(flow)
@ -766,7 +767,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
fn select_word(
title: TString<'static>,
description: TString<'static>,
words: [TString<'static>; 3],
words: [TString<'static>; MAX_WORD_QUIZ_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let content = VerticalMenu::select_word(words);
let layout =
@ -801,16 +802,16 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
_path: Option<TString<'static>>,
_xpubs: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"show_address_details not implemented",
))
}
fn show_checklist(
title: TString<'static>,
button: TString<'static>,
_button: TString<'static>,
active: usize,
items: [TString<'static>; 3],
items: [TString<'static>; MAX_CHECKLIST_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let mut paragraphs = ParagraphVecLong::new();
for (i, item) in items.into_iter().enumerate() {
@ -855,10 +856,10 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
fn show_error(
title: TString<'static>,
button: TString<'static>,
_button: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
let content = Paragraphs::new(Paragraph::new(&theme::TEXT_MAIN_GREY_LIGHT, description));
let frame = if allow_cancel {
@ -879,7 +880,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
}
fn show_group_share_success(
lines: [TString<'static>; 4],
lines: [TString<'static>; MAX_GROUP_SHARE_LINES],
) -> Result<impl LayoutMaybeTrace, Error> {
let paragraphs = ParagraphVecShort::from_iter([
Paragraph::new(&theme::TEXT_NORMAL_GREY_EXTRA_LIGHT, lines[0]).centered(),
@ -1019,10 +1020,10 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
}
fn show_share_words(
words: heapless::Vec<TString<'static>, 33>,
_words: heapless::Vec<TString<'static>, 33>,
_title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"use share_words_mercury instead",
))
}
@ -1030,12 +1031,12 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
fn show_share_words_mercury(
words: heapless::Vec<TString<'static>, 33>,
subtitle: Option<TString<'static>>,
instructions: crate::micropython::obj::Obj,
instructions: Obj,
text_footer: Option<TString<'static>>,
text_confirm: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
let mut instructions_paragraphs = ParagraphVecShort::new();
for item in crate::micropython::iter::IterBuf::new().try_iterate(instructions)? {
for item in IterBuf::new().try_iterate(instructions)? {
let text: TString = item.try_into()?;
instructions_paragraphs.add(Paragraph::new(&theme::TEXT_MAIN_GREY_LIGHT, text));
}
@ -1050,11 +1051,9 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
Ok(flow)
}
fn show_remaining_shares(
pages_iterable: crate::micropython::obj::Obj, // TODO: replace Obj
) -> Result<impl LayoutMaybeTrace, Error> {
fn show_remaining_shares(_pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
// Mercury: remaining shares is a part of `continue_recovery` flow
Err::<RootComponent<Empty, ModelMercuryFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"show_remaining_shares not implemented",
))
}
@ -1073,10 +1072,10 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
fn show_success(
title: TString<'static>,
button: TString<'static>,
_button: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
_allow_cancel: bool,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
// description used in the Footer
let description = if description.is_empty() {
@ -1107,8 +1106,7 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
button: TString<'static>,
value: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
_allow_cancel: bool,
danger: bool,
) -> Result<Gc<LayoutObj>, Error> {
let action = if button.is_empty() {
@ -1132,7 +1130,8 @@ impl UIFeaturesFirmware for ModelMercuryFeatures {
frame.with_warning_low_icon()
};
Ok(LayoutObj::new(SwipeUpScreen::new(frame_with_icon))?)
let layout = LayoutObj::new(SwipeUpScreen::new(frame_with_icon))?;
Ok(layout)
}
fn tutorial() -> Result<impl LayoutMaybeTrace, Error> {

View File

@ -30,7 +30,10 @@ use crate::{
component::{ButtonActions, ButtonLayout, Page},
constant,
},
ui_features_fw::UIFeaturesFirmware,
ui_features::ModelUI,
ui_features_fw::{
UIFeaturesFirmware, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_WORD_QUIZ_ITEMS,
},
},
};
@ -50,14 +53,14 @@ impl UIFeaturesFirmware for ModelTRFeatures {
title: TString<'static>,
action: Option<TString<'static>>,
description: Option<TString<'static>>,
subtitle: Option<TString<'static>>,
_subtitle: Option<TString<'static>>,
verb: Option<TString<'static>>,
verb_cancel: Option<TString<'static>>,
hold: bool,
hold_danger: bool,
_hold_danger: bool,
reverse: bool,
prompt_screen: bool,
prompt_title: Option<TString<'static>>,
_prompt_screen: bool,
_prompt_title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let paragraphs = {
let action = action.unwrap_or("".into());
@ -87,8 +90,8 @@ impl UIFeaturesFirmware for ModelTRFeatures {
fn confirm_address(
title: TString<'static>,
data: Obj,
description: Option<TString<'static>>,
extra: Option<TString<'static>>,
_description: Option<TString<'static>>,
_extra: Option<TString<'static>>,
verb: Option<TString<'static>>,
chunkify: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
@ -207,7 +210,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_items: Obj,
_verb: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"confirm_emphasized not implemented",
))
}
@ -215,7 +218,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
fn confirm_fido(
title: TString<'static>,
app_name: TString<'static>,
icon: Option<TString<'static>>,
_icon: Option<TString<'static>>,
accounts: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
// Cache the page count so that we can move `accounts` into the closure.
@ -305,7 +308,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
}
fn confirm_modify_fee(
title: TString<'static>,
_title: TString<'static>,
sign: i32,
user_fee_change: TString<'static>,
total_fee_new: TString<'static>,
@ -468,7 +471,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
amount_label: TString<'static>,
fee: TString<'static>,
fee_label: TString<'static>,
title: Option<TString<'static>>,
_title: Option<TString<'static>>,
account_items: Option<Obj>,
extra_items: Option<Obj>,
extra_title: Option<TString<'static>>,
@ -697,7 +700,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_summary_br_name: Option<TString<'static>>,
_cancel_text: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_confirm_output not supported",
))
}
@ -706,7 +709,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_title: TString<'static>,
_description: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_confirm_set_new_pin not supported",
))
}
@ -726,7 +729,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_get_address not supported",
))
}
@ -862,8 +865,8 @@ impl UIFeaturesFirmware for ModelTRFeatures {
fn request_pin(
prompt: TString<'static>,
subprompt: TString<'static>,
allow_cancel: bool,
warning: bool,
_allow_cancel: bool,
_warning: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
let layout = RootComponent::new(PinEntry::new(prompt, subprompt));
Ok(layout)
@ -871,7 +874,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
fn request_passphrase(
prompt: TString<'static>,
max_len: u32,
_max_len: u32,
) -> Result<impl LayoutMaybeTrace, Error> {
let layout =
RootComponent::new(Frame::new(prompt, PassphraseEntry::new()).with_title_centered());
@ -879,9 +882,9 @@ impl UIFeaturesFirmware for ModelTRFeatures {
}
fn select_word(
title: TString<'static>,
_title: TString<'static>,
description: TString<'static>,
words: [TString<'static>; 3],
words: [TString<'static>; MAX_WORD_QUIZ_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let words: Vec<TString<'static>, 5> = Vec::from_iter(words);
// Returning the index of the selected word, not the word itself
@ -915,8 +918,8 @@ impl UIFeaturesFirmware for ModelTRFeatures {
Ok(layout)
}
fn set_brightness(current_brightness: Option<u8>) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
fn set_brightness(_current_brightness: Option<u8>) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"setting brightness not supported",
))
}
@ -942,10 +945,10 @@ impl UIFeaturesFirmware for ModelTRFeatures {
}
fn show_checklist(
title: TString<'static>,
_title: TString<'static>,
button: TString<'static>,
active: usize,
items: [TString<'static>; 3],
items: [TString<'static>; MAX_CHECKLIST_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let mut paragraphs = ParagraphVecLong::new();
for (i, item) in items.into_iter().enumerate() {
@ -983,23 +986,21 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_value: TString<'static>,
_verb_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
c"show_danger not supported",
))
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(c"show_danger not supported"))
}
fn show_error(
title: TString<'static>,
button: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
_title: TString<'static>,
_button: TString<'static>,
_description: TString<'static>,
_allow_cancel: bool,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
Err::<Gc<LayoutObj>, Error>(Error::ValueError(c"show error not supported"))
}
fn show_group_share_success(
lines: [TString<'static>; 4],
lines: [TString<'static>; MAX_GROUP_SHARE_LINES],
) -> Result<impl LayoutMaybeTrace, Error> {
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_MONO, lines[0]),
@ -1056,7 +1057,7 @@ impl UIFeaturesFirmware for ModelTRFeatures {
_horizontal: bool,
_chunkify: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"show_info_with_cancel not supported",
))
}
@ -1144,19 +1145,15 @@ impl UIFeaturesFirmware for ModelTRFeatures {
fn show_share_words_mercury(
_words: heapless::Vec<TString<'static>, 33>,
_subtitle: Option<TString<'static>>,
_instructions: crate::micropython::obj::Obj,
_instructions: Obj,
_text_footer: Option<TString<'static>>,
_text_confirm: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
c"use show_share_words",
))
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(c"use show_share_words"))
}
fn show_remaining_shares(
pages_iterable: crate::micropython::obj::Obj, // TODO: replace Obj
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTRFeatures>, Error>(Error::ValueError(
fn show_remaining_shares(_pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"show remaining shares not supported",
))
}
@ -1173,11 +1170,11 @@ impl UIFeaturesFirmware for ModelTRFeatures {
}
fn show_success(
title: TString<'static>,
button: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
_title: TString<'static>,
_button: TString<'static>,
_description: TString<'static>,
_allow_cancel: bool,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
Err::<Gc<LayoutObj>, Error>(Error::ValueError(c"show success not supported"))
}
@ -1188,13 +1185,12 @@ impl UIFeaturesFirmware for ModelTRFeatures {
}
fn show_warning(
title: TString<'static>,
_title: TString<'static>,
button: TString<'static>,
value: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
danger: bool,
_allow_cancel: bool,
_danger: bool,
) -> Result<Gc<LayoutObj>, Error> {
let get_page = move |page_index| {
assert!(page_index == 0);

View File

@ -45,7 +45,7 @@ impl<'a> Component for ShareWords<'a> {
bounds
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
fn event(&mut self, _ctx: &mut EventCtx, _event: Event) -> Option<Self::Msg> {
None
}

View File

@ -25,7 +25,10 @@ use crate::{
obj::{LayoutMaybeTrace, LayoutObj, RootComponent},
util::{ConfirmBlob, PropsList, RecoveryType},
},
ui_features_fw::UIFeaturesFirmware,
ui_features::ModelUI,
ui_features_fw::{
UIFeaturesFirmware, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_WORD_QUIZ_ITEMS,
},
},
};
@ -45,14 +48,14 @@ impl UIFeaturesFirmware for ModelTTFeatures {
title: TString<'static>,
action: Option<TString<'static>>,
description: Option<TString<'static>>,
subtitle: Option<TString<'static>>,
_subtitle: Option<TString<'static>>,
verb: Option<TString<'static>>,
verb_cancel: Option<TString<'static>>,
hold: bool,
hold_danger: bool,
reverse: bool,
prompt_screen: bool,
prompt_title: Option<TString<'static>>,
_prompt_screen: bool,
_prompt_title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let paragraphs = {
let action = action.unwrap_or("".into());
@ -284,7 +287,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
sign: i32,
user_fee_change: TString<'static>,
total_fee_new: TString<'static>,
fee_rate_amount: Option<TString<'static>>,
_fee_rate_amount: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let (description, change, total_label) = match sign {
s if s < 0 => (
@ -441,7 +444,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
title: Option<TString<'static>>,
account_items: Option<Obj>,
extra_items: Option<Obj>,
extra_title: Option<TString<'static>>,
_extra_title: Option<TString<'static>>,
verb_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
let info_button: bool = account_items.is_some() || extra_items.is_some();
@ -520,7 +523,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
Ok(layout)
}
fn check_homescreen_format(image: BinaryData, accept_toif: bool) -> bool {
fn check_homescreen_format(image: BinaryData, _accept_toif: bool) -> bool {
super::component::check_homescreen_format(image, false)
}
@ -530,7 +533,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
button: Option<TString<'static>>,
recovery_type: RecoveryType,
_show_instructions: bool,
remaining_shares: Option<crate::micropython::obj::Obj>,
remaining_shares: Option<Obj>,
) -> Result<Gc<LayoutObj>, Error> {
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_DEMIBOLD, text),
@ -587,7 +590,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
_summary_br_name: Option<TString<'static>>,
_cancel_text: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_confirm_output not supported",
))
}
@ -596,7 +599,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
_title: TString<'static>,
_description: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_confirm_set_new_pin not supported",
))
}
@ -616,7 +619,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"flow_get_address not supported",
))
}
@ -626,13 +629,13 @@ impl UIFeaturesFirmware for ModelTTFeatures {
_verb: TString<'static>,
_items: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"multiple_pages_texts not implemented",
))
}
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
c"prompt_backup not implemented",
))
}
@ -697,8 +700,8 @@ impl UIFeaturesFirmware for ModelTTFeatures {
}
fn request_passphrase(
prompt: TString<'static>,
max_len: u32,
_prompt: TString<'static>,
_max_len: u32,
) -> Result<impl LayoutMaybeTrace, Error> {
let layout = RootComponent::new(PassphraseKeyboard::new());
Ok(layout)
@ -707,7 +710,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
fn select_word(
title: TString<'static>,
description: TString<'static>,
words: [TString<'static>; 3],
words: [TString<'static>; MAX_WORD_QUIZ_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let paragraphs = Paragraphs::new([Paragraph::new(&theme::TEXT_DEMIBOLD, description)]);
let layout = RootComponent::new(Frame::left_aligned(
@ -788,7 +791,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
title: TString<'static>,
button: TString<'static>,
active: usize,
items: [TString<'static>; 3],
items: [TString<'static>; MAX_CHECKLIST_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error> {
let mut paragraphs = ParagraphVecLong::new();
for (i, item) in items.into_iter().enumerate() {
@ -829,9 +832,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
_value: TString<'static>,
_verb_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
c"show_danger not supported",
))
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(c"show_danger not supported"))
}
fn show_error(
@ -861,7 +862,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
}
fn show_group_share_success(
lines: [TString<'static>; 4],
lines: [TString<'static>; MAX_GROUP_SHARE_LINES],
) -> Result<impl LayoutMaybeTrace, Error> {
let layout = RootComponent::new(IconDialog::new_shares(
lines,
@ -1049,18 +1050,14 @@ impl UIFeaturesFirmware for ModelTTFeatures {
fn show_share_words_mercury(
_words: heapless::Vec<TString<'static>, 33>,
_subtitle: Option<TString<'static>>,
_instructions: crate::micropython::obj::Obj,
_instructions: Obj,
_text_footer: Option<TString<'static>>,
_text_confirm: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
c"use show_share_words",
))
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(c"use show_share_words"))
}
fn show_remaining_shares(
pages_iterable: crate::micropython::obj::Obj, // TODO: replace Obj
) -> Result<impl LayoutMaybeTrace, Error> {
fn show_remaining_shares(pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
let mut paragraphs = ParagraphVecLong::new();
for page in crate::micropython::iter::IterBuf::new().try_iterate(pages_iterable)? {
let [title, description]: [TString; 2] =
@ -1156,8 +1153,7 @@ impl UIFeaturesFirmware for ModelTTFeatures {
value: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
danger: bool,
_danger: bool,
) -> Result<Gc<LayoutObj>, Error> {
let icon = BlendedImage::new(
theme::IMAGE_BG_OCTAGON,
@ -1179,12 +1175,11 @@ impl UIFeaturesFirmware for ModelTTFeatures {
}
fn tutorial() -> Result<impl LayoutMaybeTrace, Error> {
Err::<RootComponent<Empty, ModelTTFeatures>, Error>(Error::ValueError(
c"tutorial not supported",
))
Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(c"tutorial not supported"))
}
}
#[allow(clippy::too_many_arguments)]
fn new_show_modal(
title: TString<'static>,
value: TString<'static>,
@ -1356,7 +1351,8 @@ mod tests {
use crate::{
trace::tests::trace,
ui::{
component::text::op::OpTextLayout, component::Component, geometry::Rect,
component::{text::op::OpTextLayout, Component},
geometry::Rect,
model_tt::constant,
},
};

View File

@ -11,7 +11,12 @@ use super::layout::{
util::RecoveryType,
};
pub const MAX_CHECKLIST_ITEMS: usize = 3;
pub const MAX_WORD_QUIZ_ITEMS: usize = 3;
pub const MAX_GROUP_SHARE_LINES: usize = 4;
pub trait UIFeaturesFirmware {
#[allow(clippy::too_many_arguments)]
fn confirm_action(
title: TString<'static>,
action: Option<TString<'static>>,
@ -35,6 +40,7 @@ pub trait UIFeaturesFirmware {
chunkify: bool,
) -> Result<impl LayoutMaybeTrace, Error>;
#[allow(clippy::too_many_arguments)]
fn confirm_blob(
title: TString<'static>,
data: Obj, // TODO: replace Obj
@ -119,6 +125,7 @@ pub trait UIFeaturesFirmware {
fn confirm_reset_device(recovery: bool) -> Result<impl LayoutMaybeTrace, Error>;
#[allow(clippy::too_many_arguments)]
fn confirm_summary(
amount: TString<'static>,
amount_label: TString<'static>,
@ -131,6 +138,7 @@ pub trait UIFeaturesFirmware {
verb_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error>;
#[allow(clippy::too_many_arguments)]
fn confirm_value(
title: TString<'static>,
value: Obj, // TODO: replace Obj
@ -164,6 +172,7 @@ pub trait UIFeaturesFirmware {
fn check_homescreen_format(image: BinaryData, accept_toif: bool) -> bool;
#[allow(clippy::too_many_arguments)]
fn flow_confirm_output(
title: Option<TString<'static>>,
subtitle: Option<TString<'static>>,
@ -190,6 +199,7 @@ pub trait UIFeaturesFirmware {
description: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error>;
#[allow(clippy::too_many_arguments)]
fn flow_get_address(
address: Obj, // TODO: replace Obj
title: TString<'static>,
@ -251,7 +261,7 @@ pub trait UIFeaturesFirmware {
fn select_word(
title: TString<'static>,
description: TString<'static>,
words: [TString<'static>; 3],
words: [TString<'static>; MAX_WORD_QUIZ_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error>;
fn select_word_count(recovery_type: RecoveryType) -> Result<impl LayoutMaybeTrace, Error>;
@ -272,7 +282,7 @@ pub trait UIFeaturesFirmware {
title: TString<'static>,
button: TString<'static>,
active: usize,
items: [TString<'static>; 3],
items: [TString<'static>; MAX_CHECKLIST_ITEMS],
) -> Result<impl LayoutMaybeTrace, Error>;
fn show_danger(
@ -291,7 +301,7 @@ pub trait UIFeaturesFirmware {
) -> Result<Gc<LayoutObj>, Error>; // TODO: return LayoutMaybeTrace
fn show_group_share_success(
lines: [TString<'static>; 4],
lines: [TString<'static>; MAX_GROUP_SHARE_LINES],
) -> Result<impl LayoutMaybeTrace, Error>;
fn show_homescreen(
@ -345,7 +355,8 @@ pub trait UIFeaturesFirmware {
title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error>;
// TODO: merge with `show_share_words` instead of having specific version for mercury
// TODO: merge with `show_share_words` instead of having specific version for
// mercury
fn show_share_words_mercury(
words: Vec<TString<'static>, 33>,
subtitle: Option<TString<'static>>,
@ -376,7 +387,6 @@ pub trait UIFeaturesFirmware {
value: TString<'static>,
description: TString<'static>,
allow_cancel: bool,
time_ms: u32,
danger: bool,
) -> Result<Gc<LayoutObj>, Error>; // TODO: return LayoutMaybeTrace

View File

@ -8,7 +8,9 @@ class LayoutObj(Generic[T]):
"""Representation of a Rust-based layout object.
see `trezor::ui::layout::obj::LayoutObj`.
"""
def attach_timer_fn(self, fn: Callable[[int, int], None], attach_type: AttachType | None) -> LayoutState | None:
def attach_timer_fn(
self, fn: Callable[[int, int], None], attach_type: AttachType | None
) -> LayoutState | None:
"""Attach a timer setter function.
The layout object can call the timer setter with two arguments,
`token` and `duration_ms`. When `duration_ms` elapses, the layout object
@ -61,8 +63,8 @@ class LayoutObj(Generic[T]):
# rust/src/ui/api/firmware_upy.rs
class UiResult:
"""Result of a UI operation."""
pass
"""Result of a UI operation."""
pass
CONFIRMED: UiResult
CANCELLED: UiResult
INFO: UiResult
@ -394,7 +396,7 @@ def request_slip39(
prefill_word: str,
can_go_back: bool,
) -> LayoutObj[str]:
"""SLIP39 word input keyboard."""
"""SLIP39 word input keyboard."""
# rust/src/ui/api/firmware_upy.rs
@ -439,7 +441,7 @@ def select_word(
words: Iterable[str],
) -> LayoutObj[int]:
"""Select mnemonic word from three possibilities - seed check after backup. The
iterable must be of exact size. Returns index in range `0..3`."""
iterable must be of exact size. Returns index in range `0..3`."""
# rust/src/ui/api/firmware_upy.rs
@ -452,10 +454,7 @@ def select_word_count(
# rust/src/ui/api/firmware_upy.rs
def set_brightness(
*,
current: int | None = None
) -> LayoutObj[UiResult]:
def set_brightness(*, current: int | None = None) -> LayoutObj[UiResult]:
"""Show the brightness configuration dialog."""
@ -482,7 +481,7 @@ def show_checklist(
button: str,
) -> LayoutObj[UiResult]:
"""Checklist of backup steps. Active index is highlighted, previous items have check
mark next to them. Limited to 3 items."""
mark next to them. Limited to 3 items."""
# rust/src/ui/api/firmware_upy.rs
@ -513,7 +512,7 @@ def show_group_share_success(
*,
lines: Iterable[str],
) -> LayoutObj[UiResult]:
"""Shown after successfully finishing a group."""
"""Shown after successfully finishing a group."""
# rust/src/ui/api/firmware_upy.rs
@ -543,7 +542,7 @@ def show_info(
def show_info_with_cancel(
*,
title: str,
items: Iterable[Tuple[str, str]],
items: Iterable[tuple[str, str]],
horizontal: bool = False,
chunkify: bool = False,
) -> LayoutObj[UiResult]:
@ -574,8 +573,8 @@ def show_progress(
title: str | None = None,
) -> LayoutObj[UiResult]:
"""Show progress loader. Please note that the number of lines reserved on screen for
description is determined at construction time. If you want multiline descriptions
make sure the initial description has at least that amount of lines."""
description is determined at construction time. If you want multiline descriptions
make sure the initial description has at least that amount of lines."""
# rust/src/ui/api/firmware_upy.rs
@ -587,7 +586,7 @@ def show_progress_coinjoin(
skip_first_paint: bool = False,
) -> LayoutObj[UiResult]:
"""Show progress loader for coinjoin. Returns CANCELLED after a specified time when
time_ms timeout is passed."""
time_ms timeout is passed."""
# rust/src/ui/api/firmware_upy.rs
@ -655,7 +654,6 @@ def show_warning(
value: str = "",
description: str = "",
allow_cancel: bool = True,
time_ms: int = 0,
danger: bool = False, # unused on TT
) -> LayoutObj[UiResult]:
"""Warning modal. TT: No buttons shown when `button` is empty string. TR: middle button and centered text."""

View File

@ -29,7 +29,7 @@ _DEFAULT_BACKUP_TYPE = BAK_T_BIP39
async def reset_device(msg: ResetDevice) -> Success:
from trezor import TR, config
from trezor import config
from trezor.crypto import bip39, random
from trezor.messages import EntropyAck, EntropyRequest, Success
from trezor.pin import render_empty_loader

View File

@ -400,7 +400,7 @@ def show_warning(
content = content + "\n"
return interact(
trezorui_api.show_warning( # type: ignore [Argument missing for parameter "title"]
trezorui_api.show_warning(
title="",
button=button,
value=content,

View File

@ -12,7 +12,7 @@ async def confirm_fido(
accounts: list[str | None],
) -> int:
"""Webauthn confirmation for one or more credentials."""
confirm = trezorui_api.confirm_fido( # type: ignore [Argument missing for parameter "icon_name"]
confirm = trezorui_api.confirm_fido(
title=header,
app_name=app_name,
icon_name=None,

View File

@ -1,8 +1,8 @@
from typing import TYPE_CHECKING
import trezorui_api
from trezor import TR
from trezor.enums import ButtonRequestType
import trezorui_api
from ..common import interact, raise_if_not_confirmed
from . import confirm_action, show_success, show_warning