Skip to content

Commit

Permalink
refactor(core/mercury): use params structs
Browse files Browse the repository at this point in the history
Supply the rust layout with dedicated paremeter type instead of plain
micropython::Obj. The types used are ConfirmBlobParams and
ShowInfoParams.

[no changelog]
  • Loading branch information
obrusvit committed Nov 19, 2024
1 parent 7cf38ec commit af55445
Show file tree
Hide file tree
Showing 6 changed files with 151 additions and 142 deletions.
1 change: 1 addition & 0 deletions core/embed/rust/librust_qstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ static void _librust_qstrs(void) {
MP_QSTR___name__;
MP_QSTR_account;
MP_QSTR_account_items;
MP_QSTR_account_items_title;
MP_QSTR_account_label;
MP_QSTR_account_path;
MP_QSTR_accounts;
Expand Down
87 changes: 19 additions & 68 deletions core/embed/rust/src/ui/model_mercury/flow/confirm_output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use heapless::Vec;

use crate::{
error,
micropython::{iter::IterBuf, obj::Obj, util},
strutil::TString,
translations::TR,
ui::{
Expand Down Expand Up @@ -213,44 +212,30 @@ fn get_cancel_page(

#[allow(clippy::too_many_arguments)]
pub fn new_confirm_output(
title: Option<TString<'static>>,
subtitle: Option<TString<'static>>,
main_params: ConfirmBlobParams,
account: Option<TString<'static>>,
account_path: Option<TString<'static>>,
br_name: TString<'static>,
br_code: u16,
message: Obj,
amount: Option<Obj>,
chunkify: bool,
text_mono: bool,
address: Option<Obj>,
address_title: Option<TString<'static>>,
summary_items: Obj,
fee_items: Obj,
summary_title: Option<TString<'static>>,
content_amount_params: Option<ConfirmBlobParams>,
address_params: Option<ConfirmBlobParams>,
address_title: TString<'static>,
summary_items_params: Option<ShowInfoParams>,
fee_items_params: ShowInfoParams,
summary_br_name: Option<TString<'static>>,
summary_br_code: Option<u16>,
cancel_text: Option<TString<'static>>,
) -> Result<SwipeFlow, error::Error> {
// Main
let main_content = ConfirmBlobParams::new(title.unwrap_or(TString::empty()), message, None)
.with_subtitle(subtitle)
.with_menu_button()
.with_footer(TR::instructions__swipe_up.into(), None)
.with_chunkify(chunkify)
.with_text_mono(text_mono)
.with_swipe_up()
let main_content = main_params
.into_layout()?
.one_button_request(ButtonRequest::from_num(br_code, br_name));

// MainMenu
let mut main_menu = VerticalMenu::empty();
let mut main_menu_items = Vec::<usize, 3>::new();
if address.is_some() {
main_menu = main_menu.item(
theme::ICON_CHEVRON_RIGHT,
address_title.unwrap_or(TR::words__address.into()),
);
if address_params.is_some() {
main_menu = main_menu.item(theme::ICON_CHEVRON_RIGHT, address_title);
unwrap!(main_menu_items.push(MENU_ITEM_ADDRESS_INFO));
}
if account.is_some() && account_path.is_some() {
Expand Down Expand Up @@ -280,37 +265,20 @@ pub fn new_confirm_output(
let ac = AddressDetails::new(TR::send__send_from.into(), account, account_path)?;
let account_content = ac.map(|_| Some(FlowMsg::Cancelled));

let res = if amount.is_some() {
let content_amount =
ConfirmBlobParams::new(TR::words__amount.into(), amount.unwrap(), None)
.with_subtitle(subtitle)
.with_menu_button()
.with_footer(TR::instructions__swipe_up.into(), None)
.with_text_mono(text_mono)
.with_swipe_up()
.with_swipe_down()
.into_layout()?
.one_button_request(ButtonRequest::from_num(br_code, br_name));
let res = if let Some(content_amount_params) = content_amount_params {
let content_amount = content_amount_params
.into_layout()?
.one_button_request(ButtonRequest::from_num(br_code, br_name));

SwipeFlow::new(&ConfirmOutputWithAmount::Address)?
.with_page(&ConfirmOutputWithAmount::Address, main_content)?
.with_page(&ConfirmOutputWithAmount::Amount, content_amount)?
.with_page(&ConfirmOutputWithAmount::Menu, content_main_menu)?
.with_page(&ConfirmOutputWithAmount::AccountInfo, account_content)?
.with_page(&ConfirmOutputWithAmount::CancelTap, get_cancel_page())?
} else if summary_items != Obj::const_none() {
} else if let Some(summary_items_params) = summary_items_params {
// Summary
let mut summary =
ShowInfoParams::new(summary_title.unwrap_or(TR::words__title_summary.into()))
.with_menu_button()
.with_footer(TR::instructions__swipe_up.into(), None)
.with_swipe_up()
.with_swipe_down();
for pair in IterBuf::new().try_iterate(summary_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_items_params
.into_layout()?
.one_button_request(ButtonRequest::from_num(
summary_br_code.unwrap(),
Expand All @@ -334,16 +302,8 @@ pub fn new_confirm_output(
});

// FeeInfo
let mut has_fee_info = false;
let mut fee = ShowInfoParams::new(TR::confirm_total__title_fee.into()).with_cancel_button();
if fee_items != Obj::const_none() {
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_items_params.is_empty();
let content_fee = fee_items_params.into_layout()?;

// SummaryMenu
let mut summary_menu = VerticalMenu::empty();
Expand Down Expand Up @@ -390,17 +350,8 @@ pub fn new_confirm_output(
.with_page(&ConfirmOutputWithSummary::Main, main_content)?
.with_page(&ConfirmOutputWithSummary::MainMenu, content_main_menu)?
.with_page(&ConfirmOutputWithSummary::MainMenuCancel, get_cancel_page())?;
if address.is_some() {
let address_content = ConfirmBlobParams::new(
address_title.unwrap_or(TR::words__address.into()),
address.unwrap(),
None,
)
.with_cancel_button()
.with_chunkify(true)
.with_text_mono(true)
.with_swipe_right()
.into_layout()?;
if let Some(address_params) = address_params {
let address_content = address_params.into_layout()?;
flow = flow.with_page(&ConfirmOutputWithSummary::AddressInfo, address_content)?;
} else {
// dummy page - this will never be shown since there is no menu item pointing to
Expand Down
38 changes: 8 additions & 30 deletions core/embed/rust/src/ui/model_mercury/flow/confirm_summary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use heapless::Vec;

use crate::{
error,
micropython::{iter::IterBuf, obj::Obj, util},
strutil::TString,
translations::TR,
ui::{
Expand Down Expand Up @@ -76,24 +75,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<TString<'static>>,
) -> Result<SwipeFlow, error::Error> {
// 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)
Expand All @@ -115,24 +105,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();
Expand Down
4 changes: 4 additions & 0 deletions core/embed/rust/src/ui/model_mercury/flow/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,10 @@ impl ShowInfoParams {
}
}

pub fn is_empty(&self) -> bool {
self.items.is_empty()
}

#[inline(never)]
pub const fn with_subtitle(mut self, subtitle: Option<TString<'static>>) -> Self {
self.subtitle = subtitle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ pub fn new_warning_hi_prio(
value: TString<'static>,
verb_cancel: Option<TString<'static>>,
) -> Result<SwipeFlow, error::Error> {
let confirm: TString = TR::words__continue_anyway_question.into();
let confirm: TString = TR::words__continue_anyway.into();
let done_title: TString = TR::words__operation_cancelled.into();

let verb_cancel = verb_cancel.unwrap_or(TR::words__cancel_and_exit.into());
Expand Down
Loading

0 comments on commit af55445

Please sign in to comment.