Skip to content

Commit f23d8fb

Browse files
committed
feat(core/eckhart): regulatory screen
[no changelog]
1 parent e3fcde1 commit f23d8fb

File tree

22 files changed

+309
-7
lines changed

22 files changed

+309
-7
lines changed

core/embed/rust/librust_qstr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,7 @@ static void _librust_qstrs(void) {
562562
MP_QSTR_recovery__x_of_y_entered_template;
563563
MP_QSTR_recovery__you_have_entered;
564564
MP_QSTR_recovery_type;
565+
MP_QSTR_regulatory_certification__title;
565566
MP_QSTR_reject_pairing;
566567
MP_QSTR_remaining_shares;
567568
MP_QSTR_request_bip39;

core/embed/rust/src/translations/generated/translated_string.rs

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use super::{
2424
component::{Button, ButtonStyleSheet, FuelGauge},
2525
constant::SCREEN,
2626
firmware::{
27-
Header, HeaderMsg, TextScreen, TextScreenMsg, VerticalMenu, VerticalMenuScreen,
28-
VerticalMenuScreenMsg, SHORT_MENU_ITEMS,
27+
Header, HeaderMsg, RegulatoryMsg, RegulatoryScreen, TextScreen, TextScreenMsg,
28+
VerticalMenu, VerticalMenuScreen, VerticalMenuScreenMsg, SHORT_MENU_ITEMS,
2929
},
3030
},
3131
theme, ShortMenuVec,
@@ -134,13 +134,16 @@ enum Subscreen {
134134

135135
// The about screen
136136
AboutScreen,
137+
// A screen showing the regulatory information
138+
RegulatoryScreen,
137139
}
138140

139141
// Used to preallocate memory for the largest enum variant
140142
#[allow(clippy::large_enum_variant)]
141143
enum ActiveScreen<'a> {
142144
Menu(VerticalMenuScreen<ShortMenuVec>),
143145
About(TextScreen<Paragraphs<[Paragraph<'a>; 2]>>),
146+
Regulatory(RegulatoryScreen),
144147

145148
// used only during `DeviceMenuScreen::new`
146149
Empty,
@@ -183,8 +186,9 @@ impl<'a> DeviceMenuScreen<'a> {
183186
};
184187

185188
let about = screen.add_subscreen(Subscreen::AboutScreen);
189+
let regulatory = screen.add_subscreen(Subscreen::RegulatoryScreen);
186190
let security = screen.add_security_menu();
187-
let device = screen.add_device_menu(device_name, about, auto_lock_delay);
191+
let device = screen.add_device_menu(device_name, regulatory, about, auto_lock_delay);
188192
let settings = screen.add_settings_menu(security, device);
189193

190194
let is_connected = !paired_devices.is_empty(); // FIXME after BLE API has this
@@ -284,6 +288,7 @@ impl<'a> DeviceMenuScreen<'a> {
284288
fn add_device_menu(
285289
&mut self,
286290
device_name: Option<TString<'static>>,
291+
regulatory_index: usize,
287292
about_index: usize,
288293
auto_lock_delay: TString<'static>,
289294
) -> usize {
@@ -311,6 +316,11 @@ impl<'a> DeviceMenuScreen<'a> {
311316
unwrap!(items.push(autolock_delay_item));
312317
}
313318

319+
unwrap!(items.push(MenuItem::new(
320+
TR::regulatory_certification__title.into(),
321+
Some(Action::GoTo(regulatory_index))
322+
)));
323+
314324
unwrap!(items.push(MenuItem::new(
315325
"About".into(),
316326
Some(Action::GoTo(about_index))
@@ -431,6 +441,9 @@ impl<'a> DeviceMenuScreen<'a> {
431441
.with_header(Header::new("About".into()).with_close_button()),
432442
);
433443
}
444+
Subscreen::RegulatoryScreen => {
445+
*self.active_screen.deref_mut() = ActiveScreen::Regulatory(RegulatoryScreen::new());
446+
}
434447
}
435448
}
436449

@@ -490,6 +503,9 @@ impl<'a> Component for DeviceMenuScreen<'a> {
490503
ActiveScreen::About(about) => {
491504
about.place(bounds);
492505
}
506+
ActiveScreen::Regulatory(regulatory) => {
507+
regulatory.place(bounds);
508+
}
493509
ActiveScreen::Empty => {}
494510
};
495511

@@ -525,6 +541,11 @@ impl<'a> Component for DeviceMenuScreen<'a> {
525541
return self.go_back(ctx);
526542
}
527543
}
544+
(Subscreen::RegulatoryScreen, ActiveScreen::Regulatory(regulatory)) => {
545+
if let Some(RegulatoryMsg::Cancelled) = regulatory.event(ctx, event) {
546+
return self.go_back(ctx);
547+
}
548+
}
528549
_ => {}
529550
}
530551

@@ -535,6 +556,7 @@ impl<'a> Component for DeviceMenuScreen<'a> {
535556
match self.active_screen.deref() {
536557
ActiveScreen::Menu(menu) => menu.render(target),
537558
ActiveScreen::About(about) => about.render(target),
559+
ActiveScreen::Regulatory(regulatory) => regulatory.render(target),
538560
ActiveScreen::Empty => {}
539561
};
540562
}

core/embed/rust/src/ui/layout_eckhart/firmware/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mod homescreen;
1212
mod keyboard;
1313
mod progress_screen;
1414
mod qr_screen;
15+
mod regulatory_screen;
1516
mod select_word_screen;
1617
mod share_words;
1718
mod text_screen;
@@ -41,6 +42,7 @@ pub use keyboard::{
4142
};
4243
pub use progress_screen::ProgressScreen;
4344
pub use qr_screen::{QrMsg, QrScreen};
45+
pub use regulatory_screen::{RegulatoryMsg, RegulatoryScreen};
4446
pub use select_word_screen::{SelectWordMsg, SelectWordScreen};
4547
pub use share_words::{ShareWordsScreen, ShareWordsScreenMsg};
4648
pub use text_screen::{AllowedTextContent, TextScreen, TextScreenMsg};

0 commit comments

Comments
 (0)