From 7b39754ad1e79a6517e4a90086fcaee46e7459e8 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Wed, 25 Sep 2024 17:09:16 +0200 Subject: [PATCH] refactor(core/mercury): use ShowInfoParams Supply the rust layout with dedicated type instead of plain micropython::Obj [no changelog] --- .../ui/model_mercury/flow/confirm_summary.rs | 40 ++++--------- .../rust/src/ui/model_mercury/flow/util.rs | 4 ++ .../embed/rust/src/ui/model_mercury/layout.rs | 58 +++++++++++++------ 3 files changed, 53 insertions(+), 49 deletions(-) diff --git a/core/embed/rust/src/ui/model_mercury/flow/confirm_summary.rs b/core/embed/rust/src/ui/model_mercury/flow/confirm_summary.rs index 2b2c4b9533..55c3816363 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/confirm_summary.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/confirm_summary.rs @@ -2,7 +2,6 @@ use heapless::Vec; use crate::{ error, - micropython::{iter::IterBuf, obj::Obj, util}, strutil::TString, translations::TR, ui::{ @@ -19,7 +18,8 @@ use crate::{ use super::{ super::{ component::{ - Frame, FrameMsg, PromptMsg, PromptScreen, VerticalMenu, VerticalMenuChoiceMsg, + Frame, FrameMsg, PromptMsg, PromptScreen, SwipeContent, VerticalMenu, + VerticalMenuChoiceMsg, }, theme, }, @@ -76,23 +76,15 @@ impl FlowController for ConfirmSummary { pub fn new_confirm_summary( title: TString<'static>, - items: Obj, - account_items: Obj, - fee_items: Obj, + summary_params: ShowInfoParams, + account_params: ShowInfoParams, + fee_params: ShowInfoParams, br_name: TString<'static>, br_code: u16, cancel_text: Option>, ) -> Result { // Summary - let mut summary = ShowInfoParams::new(title) - .with_menu_button() - .with_footer(TR::instructions__swipe_up.into(), None) - .with_swipe_up(); - for pair in IterBuf::new().try_iterate(items)? { - let [label, value]: [TString; 2] = util::iter_into_array(pair)?; - summary = unwrap!(summary.add(label, value)); - } - let content_summary = summary + let content_summary = summary_params .into_layout()? .one_button_request(ButtonRequest::from_num(br_code, br_name)) // Summary(1) + Hold(1) @@ -114,24 +106,12 @@ pub fn new_confirm_summary( }); // FeeInfo - let mut has_fee_info = false; - let mut fee = ShowInfoParams::new(TR::confirm_total__title_fee.into()).with_cancel_button(); - for pair in IterBuf::new().try_iterate(fee_items)? { - let [label, value]: [TString; 2] = util::iter_into_array(pair)?; - fee = unwrap!(fee.add(label, value)); - has_fee_info = true; - } - let content_fee = fee.into_layout()?; + let has_fee_info = !fee_params.is_empty(); + let content_fee = fee_params.into_layout()?; // AccountInfo - let mut has_account_info = false; - let mut account = ShowInfoParams::new(TR::send__send_from.into()).with_cancel_button(); - for pair in IterBuf::new().try_iterate(account_items)? { - let [label, value]: [TString; 2] = util::iter_into_array(pair)?; - account = unwrap!(account.add(label, value)); - has_account_info = true; - } - let content_account = account.into_layout()?; + let has_account_info = !account_params.is_empty(); + let content_account = account_params.into_layout()?; // Menu let mut menu = VerticalMenu::empty(); diff --git a/core/embed/rust/src/ui/model_mercury/flow/util.rs b/core/embed/rust/src/ui/model_mercury/flow/util.rs index ca38692ac3..df46538c8b 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/util.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/util.rs @@ -271,6 +271,10 @@ impl ShowInfoParams { } } + pub fn is_empty(&self) -> bool { + self.items.is_empty() + } + #[inline(never)] pub const fn with_subtitle(mut self, subtitle: Option>) -> Self { self.subtitle = subtitle; diff --git a/core/embed/rust/src/ui/model_mercury/layout.rs b/core/embed/rust/src/ui/model_mercury/layout.rs index 8394de5019..fa29a0bdf0 100644 --- a/core/embed/rust/src/ui/model_mercury/layout.rs +++ b/core/embed/rust/src/ui/model_mercury/layout.rs @@ -52,6 +52,7 @@ use crate::{ component::{check_homescreen_format, SwipeContent}, flow::new_confirm_action_simple, flow::util::ConfirmBlobParams, + flow::util::ShowInfoParams, theme::ICON_BULLET_CHECKMARK, }, }, @@ -273,19 +274,15 @@ extern "C" fn new_confirm_blob(n_args: usize, args: *const Obj, kwargs: *mut Map let chunkify: bool = kwargs.get_or(Qstr::MP_QSTR_chunkify, false)?; let prompt_screen: bool = kwargs.get_or(Qstr::MP_QSTR_prompt_screen, true)?; - ConfirmBlobParams::new( - title, - data, - description, - ) - .with_extra(extra) - .with_chunkify(chunkify) - .with_verb_cancel(verb_cancel) - .with_hold(hold) - .with_prompt(prompt_screen) - .into_flow() - .and_then(LayoutObj::new) - .map(Into::into) + ConfirmBlobParams::new(title, data, description) + .with_extra(extra) + .with_chunkify(chunkify) + .with_verb_cancel(verb_cancel) + .with_hold(hold) + .with_prompt(prompt_screen) + .into_flow() + .and_then(LayoutObj::new) + .map(Into::into) }; unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } } @@ -544,11 +541,34 @@ extern "C" fn new_confirm_summary(n_args: usize, args: *const Obj, kwargs: *mut let cancel_text: Option = kwargs.get(Qstr::MP_QSTR_cancel_text)?.try_into_option()?; - let flow = flow::confirm_summary::new_confirm_summary( + let mut summary_params = ShowInfoParams::new(title.clone()) + .with_menu_button() + .with_footer(TR::instructions__swipe_up.into(), None) + .with_swipe_up(); + for pair in IterBuf::new().try_iterate(items)? { + let [label, value]: [TString; 2] = util::iter_into_array(pair)?; + summary_params = unwrap!(summary_params.add(label, value)); + } + + let mut account_params = + ShowInfoParams::new(TR::send__send_from.into()).with_cancel_button(); + for pair in IterBuf::new().try_iterate(account_items)? { + let [label, value]: [TString; 2] = util::iter_into_array(pair)?; + account_params = unwrap!(account_params.add(label, value)); + } + + let mut fee_params = + ShowInfoParams::new(TR::confirm_total__title_fee.into()).with_cancel_button(); + for pair in IterBuf::new().try_iterate(fee_items)? { + let [label, value]: [TString; 2] = util::iter_into_array(pair)?; + fee_params = unwrap!(fee_params.add(label, value)); + } + + let flow = flow::new_confirm_summary( title, - items, - account_items, - fee_items, + summary_params, + account_params, + fee_params, br_name, br_code, cancel_text, @@ -632,8 +652,8 @@ extern "C" fn new_confirm_value(n_args: usize, args: *const Obj, kwargs: *mut Ma .with_prompt(hold) .with_hold(hold) .into_flow() - .and_then(LayoutObj::new) - .map(Into::into) + .and_then(LayoutObj::new) + .map(Into::into) }; unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } }