1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-08-05 05:15:27 +00:00

fixup! fix(core/ui): set page_count through rust ButtonRequest

This commit is contained in:
Martin Milata 2024-05-22 16:54:17 +02:00
parent dab63478c4
commit d359f81af3
4 changed files with 17 additions and 10 deletions

View File

@ -569,6 +569,10 @@ impl EventCtx {
self.page_count = Some(count);
}
pub fn map_page_count(&mut self, func: fn(usize) -> usize) {
self.page_count = Some(func(self.page_count.unwrap_or(1)));
}
pub fn page_count(&self) -> Option<usize> {
self.page_count
}

View File

@ -9,7 +9,7 @@ use crate::ui::{
#[derive(Clone)]
pub struct OneButtonRequest<T> {
button_request: Option<ButtonRequest>,
page_count: Option<u16>,
page_count_func: Option<fn(usize) -> usize>,
pub inner: T,
}
@ -17,13 +17,13 @@ impl<T> OneButtonRequest<T> {
pub const fn new(button_request: ButtonRequest, inner: T) -> Self {
Self {
button_request: Some(button_request),
page_count: None,
page_count_func: None,
inner,
}
}
pub const fn with_pages(mut self, page_count: u16) -> Self {
self.page_count = Some(page_count);
pub const fn with_pages(mut self, func: fn(usize) -> usize) -> Self {
self.page_count_func = Some(func);
self
}
}
@ -36,15 +36,16 @@ impl<T: Component> Component for OneButtonRequest<T> {
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
if let Some(page_count) = self.page_count {
ctx.set_page_count(page_count.into());
}
if matches!(event, Event::Attach) {
if let Some(button_request) = self.button_request.take() {
ctx.send_button_request(button_request.code, button_request.br_type)
}
}
self.inner.event(ctx, event)
let res = self.inner.event(ctx, event);
if let Some(func) = self.page_count_func {
ctx.map_page_count(func);
}
res
}
fn paint(&mut self) {

View File

@ -107,7 +107,7 @@ impl ConfirmSummary {
.into_layout()?
.one_button_request(ButtonRequest::from_tstring(br_code, br_type))
// Summary(1) + Hold(1)
.with_pages(2);
.with_pages(|summary_pages| summary_pages + 1);
// Hold to confirm
let content_hold = Frame::left_aligned(

View File

@ -171,7 +171,9 @@ impl GetAddress {
.with_menu_button()
.with_footer(TR::instructions__swipe_up.into(), None)
.map(|msg| matches!(msg, FrameMsg::Button(_)).then_some(FlowMsg::Info))
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
.one_button_request(ButtonRequest::from_tstring(br_code, br_type))
// Count tap-to-confirm screen towards page count
.with_pages(|address_pages| address_pages + 1);
// Tap
let content_tap = Frame::left_aligned(title, PromptScreen::new_tap_to_confirm())