From 0993ca04345878d2d6ced5fc9e9f39f7b3bcff93 Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Wed, 1 May 2024 15:21:09 +0200 Subject: [PATCH] feat(core): lockscreen for mercury_ui [no changelog] --- .../model_mercury/component/homescreen/mod.rs | 152 ++++++++---------- .../ui/model_mercury/res/central_circle.png | Bin 0 -> 5670 bytes .../ui/model_mercury/res/central_circle.toif | Bin 0 -> 854 bytes .../rust/src/ui/model_mercury/res/key30.png | Bin 0 -> 4716 bytes .../rust/src/ui/model_mercury/res/key30.toif | Bin 0 -> 122 bytes .../model_mercury/res/lockscreen_filter.png | Bin 0 -> 16683 bytes .../model_mercury/res/lockscreen_filter.toif | Bin 0 -> 3673 bytes .../rust/src/ui/model_mercury/theme/mod.rs | 8 + 8 files changed, 72 insertions(+), 88 deletions(-) create mode 100644 core/embed/rust/src/ui/model_mercury/res/central_circle.png create mode 100644 core/embed/rust/src/ui/model_mercury/res/central_circle.toif create mode 100644 core/embed/rust/src/ui/model_mercury/res/key30.png create mode 100644 core/embed/rust/src/ui/model_mercury/res/key30.toif create mode 100644 core/embed/rust/src/ui/model_mercury/res/lockscreen_filter.png create mode 100644 core/embed/rust/src/ui/model_mercury/res/lockscreen_filter.toif diff --git a/core/embed/rust/src/ui/model_mercury/component/homescreen/mod.rs b/core/embed/rust/src/ui/model_mercury/component/homescreen/mod.rs index 62e95cc0f..fe6bb95e3 100644 --- a/core/embed/rust/src/ui/model_mercury/component/homescreen/mod.rs +++ b/core/embed/rust/src/ui/model_mercury/component/homescreen/mod.rs @@ -7,8 +7,8 @@ use crate::{ translations::TR, trezorhal::usb::usb_configured, ui::{ - component::{Component, Event, EventCtx, Pad, TimerToken}, - display::{self, tjpgd::jpeg_info, toif::Icon, Color, Font}, + component::{Component, Event, EventCtx, TimerToken}, + display::{tjpgd::jpeg_info, toif::Icon, Color, Font}, event::{TouchEvent, USBEvent}, geometry::{Alignment, Alignment2D, Insets, Offset, Point, Rect}, layout::util::get_user_custom_image, @@ -20,13 +20,16 @@ use crate::{ use crate::{ trezorhal::{buffers::BufferJpegWork, uzlib::UZLIB_WINDOW_SIZE}, ui::{ - constant::HEIGHT, + constant::{screen, HEIGHT}, display::{ tjpgd::BufferInput, toif::{Toif, ToifFormat}, }, - model_mercury::component::homescreen::render::{ - HomescreenJpeg, HomescreenToif, HOMESCREEN_TOIF_SIZE, + model_mercury::{ + component::homescreen::render::{HomescreenJpeg, HomescreenToif, HOMESCREEN_TOIF_SIZE}, + theme::{ + GREEN_LIGHT, GREY_LIGHT, ICON_CENTRAL_CIRCLE, ICON_KEY, ICON_LOCKSCREEN_FILTER, + }, }, }, }; @@ -54,8 +57,6 @@ pub struct Homescreen { custom_image: Option>, hold_to_lock: bool, loader: Loader, - pad: Pad, - paint_notification_only: bool, delay: Option, } @@ -75,8 +76,6 @@ impl Homescreen { custom_image: get_user_custom_image().ok(), hold_to_lock, loader: Loader::with_lock_icon().with_durations(LOADER_DURATION, LOADER_DURATION / 3), - pad: Pad::with_background(theme::BG), - paint_notification_only: false, delay: None, } } @@ -133,13 +132,8 @@ impl Homescreen { self.loader.render(target) } - pub fn set_paint_notification(&mut self) { - self.paint_notification_only = true; - } - fn event_usb(&mut self, ctx: &mut EventCtx, event: Event) { if let Event::USB(USBEvent::Connected(_)) = event { - self.paint_notification_only = true; ctx.request_paint(); } } @@ -165,8 +159,6 @@ impl Homescreen { } Event::Timer(token) if Some(token) == self.delay => { self.delay = None; - self.pad.clear(); - self.paint_notification_only = false; self.loader.start_growing(ctx, Instant::now()); } _ => {} @@ -178,8 +170,6 @@ impl Homescreen { } Some(LoaderMsg::ShrunkCompletely) => { self.loader.reset(); - self.pad.clear(); - self.paint_notification_only = false; ctx.request_paint() } None => {} @@ -193,7 +183,6 @@ impl Component for Homescreen { type Msg = HomescreenMsg; fn place(&mut self, bounds: Rect) -> Rect { - self.pad.place(AREA); self.loader.place(AREA.translate(LOADER_OFFSET)); bounds } @@ -268,7 +257,6 @@ impl Component for Homescreen { } fn render<'s>(&'s self, target: &mut impl Renderer<'s>) { - self.pad.render(target); if self.loader.is_animating() || self.loader.is_completely_grown(Instant::now()) { self.render_loader(target); } else { @@ -278,7 +266,7 @@ impl Component for Homescreen { }; if is_image_jpeg(img_data) { - shape::JpegImage::new(self.pad.area.center(), img_data) + shape::JpegImage::new(AREA.center(), img_data) .with_align(Alignment2D::CENTER) .render(target); } else if is_image_toif(img_data) { @@ -296,7 +284,7 @@ impl Component for Homescreen { .render(target); let style = theme::TEXT_DEMIBOLD; - let pos = Point::new(self.pad.area.center().x, LABEL_Y); + let pos = Point::new(AREA.center().x, LABEL_Y); shape::Text::new(pos, t) .with_align(Alignment::Center) .with_font(style.text_font) @@ -309,9 +297,7 @@ impl Component for Homescreen { const NOTIFICATION_BORDER: i16 = 6; const TEXT_ICON_SPACE: i16 = 8; - let banner = self - .pad - .area + let banner = AREA .inset(Insets::sides(NOTIFICATION_BORDER)) .with_height(NOTIFICATION_HEIGHT) .translate(Offset::y(NOTIFICATION_BORDER)); @@ -350,7 +336,7 @@ impl Component for Homescreen { #[cfg(feature = "ui_bounds")] fn bounds(&self, sink: &mut dyn FnMut(Rect)) { self.loader.bounds(sink); - sink(self.pad.area); + sink(AREA); } } @@ -477,15 +463,25 @@ impl Component for Lockscreen<'_> { shape::JpegImage::new(center, img_data) .with_align(Alignment2D::CENTER) .with_blur(4) - .with_dim(140) - .render(target); - } else if is_image_toif(img_data) { - shape::ToifImage::new(center, unwrap!(Toif::new(img_data))) - .with_align(Alignment2D::CENTER) - //.with_blur(5) + .with_dim(102) .render(target); } + shape::ToifImage::new(center, ICON_LOCKSCREEN_FILTER.toif) + .with_align(Alignment2D::CENTER) + .with_fg(Color::black()) + .render(target); + + shape::ToifImage::new(center + Offset::y(12), ICON_CENTRAL_CIRCLE.toif) + .with_align(Alignment2D::CENTER) + .with_fg(GREEN_LIGHT) + .render(target); + + shape::ToifImage::new(center + Offset::y(12), ICON_KEY.toif) + .with_align(Alignment2D::CENTER) + .with_fg(GREY_LIGHT) + .render(target); + let (locked, tap) = if self.bootscreen { ( TR::lockscreen__title_not_connected, @@ -498,69 +494,49 @@ impl Component for Lockscreen<'_> { let mut label_style = theme::TEXT_DEMIBOLD; label_style.text_color = theme::GREY_LIGHT; - let mut texts: &[HomescreenText] = &[ - HomescreenText { - text: "".into(), - style: theme::TEXT_NORMAL, - offset: Offset::new(2, COINJOIN_Y), - icon: Some(theme::ICON_COINJOIN), - }, - HomescreenText { - text: locked.into(), - style: theme::TEXT_BOLD, - offset: Offset::y(LOCKED_Y), - icon: Some(theme::ICON_LOCK), - }, - HomescreenText { - text: tap.into(), - style: theme::TEXT_NORMAL, - offset: Offset::y(TAP_Y), - icon: None, - }, - HomescreenText { - text: self.label, - style: label_style, - offset: Offset::y(LABEL_Y), - icon: None, - }, - ]; + let mut offset = 0; - if !self.coinjoin_authorized { - texts = &texts[1..]; - } + self.label.map(|t| { + offset = theme::TEXT_DEMIBOLD.text_font.visible_text_height(t); + + let text_pos = Point::new(0, offset); + + shape::Text::new(text_pos, t) + .with_font(theme::TEXT_DEMIBOLD.text_font) + .with_fg(theme::GREY_LIGHT) + .render(target); + }); - for item in texts.iter() { - item.text.map(|t| { - const TEXT_ICON_SPACE: i16 = 2; + offset += 6; - let icon_width = match item.icon { - Some(icon) => icon.toif.width() + TEXT_ICON_SPACE, - None => 0, - }; + locked.map_translated(|t| { + offset += theme::TEXT_SUB_GREY.text_font.visible_text_height(t); - let area = constant::screen(); + let text_pos = Point::new(0, offset); - let text_pos = Point::new( - item.style - .text_font - .horz_center(area.x0 + icon_width, area.x1, t), - 0, - ) + item.offset; + shape::Text::new(text_pos, t) + .with_font(theme::TEXT_SUB_GREY.text_font) + .with_fg(theme::TEXT_SUB_GREY.text_color) + .render(target); + }); - shape::Text::new(text_pos, t) - .with_font(item.style.text_font) - .with_fg(item.style.text_color) - .render(target); + tap.map_translated(|t| { + offset = theme::TEXT_SUB_GREY.text_font.text_baseline(); - if let Some(icon) = item.icon { - let icon_pos = Point::new(text_pos.x - icon_width, text_pos.y); - shape::ToifImage::new(icon_pos, icon.toif) - .with_align(Alignment2D::BOTTOM_LEFT) - .with_fg(item.style.text_color) - .render(target); - } - }); - } + let text_pos = Point::new( + theme::TEXT_SUB_GREY + .text_font + .horz_center(screen().x0, screen().x1, t), + screen().y1 - offset, + ); + + shape::Text::new(text_pos, t) + .with_font(theme::TEXT_SUB_GREY.text_font) + .with_fg(theme::GREY_DARK) + .render(target); + }); + + // TODO coinjoin authorized text } } diff --git a/core/embed/rust/src/ui/model_mercury/res/central_circle.png b/core/embed/rust/src/ui/model_mercury/res/central_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..d52ede6ec2fc03ecff0be95083d3eee1307b557d GIT binary patch literal 5670 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 literal 0 HcmV?d00001 diff --git a/core/embed/rust/src/ui/model_mercury/res/key30.png b/core/embed/rust/src/ui/model_mercury/res/key30.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd4b5ae83e42a20a09aaf14075f46692c8cda20 GIT binary patch literal 4716 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 literal 0 HcmV?d00001 diff --git a/core/embed/rust/src/ui/model_mercury/res/key30.toif b/core/embed/rust/src/ui/model_mercury/res/key30.toif new file mode 100644 index 0000000000000000000000000000000000000000..24c033a8548b0734b33c48791dbf783b91db79b5 GIT binary patch literal 122 zcmV-=0EPclPf14}03HBt0001EV4yK5e0`n`!BhDA|Nng^IQPPTAdrP~zx~%Q{NE4f z{`oJ*@MAxm3)IQ}@jnvxzuYG{SK;6P|L^~uhjA}~4E~>wWGfKxqDaD=0hauCUIIxH c$%PcBX32%PwwYT5PKL`BV7l25pRS5u~ zDDlu09u}P(``NvXngwo+;|3BLg%Xy?SpMtd)ags8v0&nft4&veo?y@Q2&Gc@(aTS} z?w-)8i;Mfyz~50HUM~agf5Rm^Q5(%27IXy~zMeg8KcNV*q}Gp-I?mrOp)Do~5z13ts_NYG+ip&=LnB9xLezD|hr|qeS`!I~%<2V%ZY@6TxN~mX#!u5JxOj>;X zyXNxrqNAWBeRqlaxI*&Nrtybg0eEA|!ZMo$Sg#LzYdzgD!hx@0&cc+BHn+EjMyK}^ z*}CHfx+jlZRZi+Y#xCnS7{2aa$aRlH1$|5_Pl6BYqbG{=S(|}Zevudy+h57ykT}+y zH%?J=$q&2@?ENuz6OIF#D{!UPj$*1e#9K1(M2pClUvC+<%@-WpcJb zUSp)a?0H)KeNJ?)Nf);Dbl+lTz-HS>5J6GV^Cd3If9KMc<$3#lst0>X0y`aE=1&3V%=ZzEo}G~j zJ)bsAI@W=R%jinXZc&lvhRfq^xsKH2%$o&m!HIh=?+Ikf3HjRvXPeHH-R+)|Jh|W* zh)u92W$m~f6}d`9kI%nI9pRm?&>=VUq;;H}k&g#xtud?%<*sJKK~%k0uB;neW{gjD z^xxGfgyaPN@D5$cAg#$86wD09;-CL!uF<)kywk0s*}XAG8@F1$tmBo2%&7hoDW$Hf zBEWY(%w&aKsi@t_$tQ=Yx|qt#8y#oq#&mG;Ib8s! zedi1*U^=r1>BM!ysoZt0K~-YjZ=!? z*p_TI(vhDMP}uzhBKe{(H0nql1=?>$)hP;o7iM6bd&z|ET96(DqibE=J%(T z$FgZ%$r?U1vo?l4U@14OOn+x9O4>-y7d9xgZq7b1Kh5LOq{xaP0~YF(8aD> z<$V@s%^3o!W`u!GQwMOjgR;SB{PD8HRKh_I=9$p64S9Ca4U-`|c#j0$@jhARkYf4S ztNy%z*}Gn$VX6gznoT(q$I!CuqZsZQMv2pKOYfcu{AZFlXS3?DZu_gD)aHrq3M)bn zKkUrL>Oi9bln+p2T8ob3^=CUHJ7xPuQ70`(U(CO@zKbDehLkmIX{wUZ`l#T7pY2dvdniNsxyfVM<~_REJ=?-fF@|0_vQ>kHj6TcT0D7o(rh@ z#ZjH#;|g^{N^xd!CV)$g=F z$%na{ItCD`@^Lmz@1i8!DVLpp3^mlx+5G`?zG*ei38v4iPj^em$7IfdZSx)>5(71( z%b%dd>d3RBg}`CMxi^R|&=v~4(1b@kG)i$m&kxXGsLDk1`(jp=C z(-Y+oNa2ST3mp}V`=9p-eu;F|!)u4wBERx1-h+So_k-}rvM4)y7d=aH@!iyit!(B)QrM(QxZoO|CM+@-6 z&IJ@D-#F|M;YG98sh4WDcA{u#n=#t4Ep@vvr3;>r0evgpJgH|Zg>rQjo3gaP}2VNv|`$L-}{!&2@`8A9CzJzM%rn7V_XAPp;I z2&6(+d-xwQKosH5uLV6`620 z3tK(*BkED0BwZ4+TA6*hMmilb^^Ap=8W19Na>DNW&?@2gi1Tunw&6VB+^LU7`td2Xq$egM{$P4#d(1- zSaC8TDW~Tpsa5O5S))-~%3L`U`|JTSuS2%n} zmKOmzzqMEex}dkjxSYzMFIz^7_*@Q#tdnd=)WR-Li5Z2Iu5vUNOCo2cz@==4g-#{5 zkoHi!g64;Jj>(saSIL%unpsAeNj8X!k`aLpA7dc{6hWn9cGHjazsn_oF0-mc(ucTm zIEWc*L!A7nfh=V@IHA8gF$*AGM1bfDx+B5N-f4-88dV{eTUFuE9#L#8Nr0A*`H*BG z)`6}Q1aAxRTfc5E+aH<^!kcqRuTg0|q>G}Ao=Y62#8U?cKv> zoo%pWumyuVRHfmCt`1|twc;2%(PCmzi&$8{)4_^78j=v3W}^cU?4oRCT9yO>$(s8p zZUhD!W&`{nm>YJ@Mx&;1^84HOg3zGxMRNvG@CA6`syA(i%shgc4LbeN@k6t zI$SlQ`DcmxAlj)NYk;UA>U6db$?29bHc788O@?aq0Mgt@aR+MwVfi#JmV`+RB+roF~O!06SkO$bi$7A z`%)1DM^dVJNSfrEJ}3QC@)CZU`tMVKu`I3b<_s8!WLRH5!6f4K8-Sy}k8O#lJTqQM zX+ZOl$U)JE`EE}j4m%eZVVui+g6` z58}N^%C_D7C($e>;4pKTqz=8`tW=Xx@3dlF2cElA$Evopd~d1m7M<}t+95&5aa0tp zf~4*jIDv!IVU;O?T7#u<%O!0d$F=eHA?W-I=vhL|cQvgz7<#Z&Meo52?B=J`QaC%= zjfK64qj8N10nI63>g7S1EBlj26|W$o@5YxDI9HPKcI+5#HX4jQSlo~z0edM2&U_iJDTMRH!Q)xK_5C7tqS-Ik1%5%X-0b*R6w>%0 zJJqN>d2BO5HlM}ns2J0}`$0FN@2!m^St#0>$8?iSI{(feZVT#|iGba7T*68|s-8(_ zh$O{TO<3GdshOeEtUtHnt5tPysr!lvp_$nz>)Cv`8>*k~LSR3}4zuH^@&u%4v{%2K zAl5zQezaZxngad6^h~Y?X%d2FpYyP1ttr&?^es=58iZjkoT)??Y8ZF4GO?Kl23#TK zb(IMuh!X}&tVGg*T~<1v?_lJFQ?q59L;_+*LDTB`vEC#&WnJ<^gc!MEWmnx<*mRM; z1m1!7Vz#l69~n2M^_iVBwI*b+EF+@Q`H}KG1u->ABU*;YhjLvlT#qktbrK6W1pcmw zzRC?~*<5Ut@2d);1df_wDl1@W=9{m-)D{B$C~a9VL?J;ngQ?+Y2Qw^d%|s+apEaWz zEM(btNOY;BOS@n&JB=W$8PKEmOcQr4yFX^v4+ z&5x14$8Rk(o}crMs}BDXlN+?diNo9oNiiIib!j(P3+%-tU zYXtjDQ=ZyGc5X|-B1<9O$VOG^9a=z{tBi=7M>uAtr%GfS&@;*SJ!i!nt(`qZJshHO z4<}Kiu9u>`FDQJJZ7%LgFUeLe%q{*m#xV)Ewug4hkvH~q2uWOd(0noOsZ>cNZ*XIc z5{0tpD5ZA-rvqvMPR$DGk0;c5>{QsGX5oiUQL;)?Xa>fl(`lw2(4;uDqI1dA0!cfTes2dx(#{_*gwb<;&iEmGOdmKfNKdS}=g~s=$6T6da=3 z)X=;Qk;qOaS}EM>u8RvxQ^--^e8F~WU2rO7>MuRmxo-_26D<8MNi0(plac;ilY{KN zM1_6T!2+Lif6L&1K!=!aHEhoLATnV-k0QD~vz}Z(g2MFmK54%jjL4A!hh9*9(R|p9 zFQKmXLBS;a2UV+B>xh2Hg_0H)Gt!acu_7HcGaNjZ?s*&KS4Be?kCy-qx94{d<&8p7 z=Kiw+Rm6C(B4L?oa*=JK5FTV0ImJ;Gi?=E|F%(>gkabill3DoJm<1Gxm1Nf=r9L(O zl(2c*>4gAsgH`qscPfd?q_yldk+`yy(iXuNuMkYy%vdp3qdKV6reLjRz19Y{o2h{< zPycUK@W?H|wgTJlzL*BL2ZwR4wRAO{j?^k|0aWZNaTbaSG?a&AuB zB659*$e&ndCsmd=maC++%=W)n#%{SWq9)&(>Et1$WG{YZ|)roH+VE<9x%D_wZ zrEGP+{9}v0$0Z=^unsWQyo60X*m7~hh?p>b38hIyC-3mmDv-^x2hFfLboe&Zdc$k@ zpwvw8`3(Sf%M9$B6zpq>Jt%#)+*>TdKWfSZg;aXk7mD(!0F{Z6Kk{@%4Ghqfw>ZOo zNUBucBto|4+6qUpjizFPL7qlIiIlkHVg{4e;C1>sZNY!E4u_ysyIQ&E-6{?CfPi%n zSwI?#w=or_)x}ne)HNmAB4k4>FU-1BkQCIqeNMJjQ@j+J(x58B2*L8*ijho}-y^Vv zN^V?;M9njOj`_-;&q>$dkaN+X>+i>9e2#qf>weX;R!6ik9K%NQS>G3S-I`a_5gUP}?VUL-ygM(HCZ}fOIRZh0N_))9kDq)3j2nIqLXSPw{rmV~LY-gE8t6<6aot&kI^5LUj_3tV__nT0VF2xX9&}1ybnxQEEUe)QdxF z_(~MpdK#g>WgR~0V*`^H9xxD>I>uBRP|043s-iQXO!vF5#iV5@DAN>IccG&$?2Dlt^{PIF#pJ33o4{O&3BND zdv}9~l?2_~+{=_w!_Z#YHY%xj#+k`_`cLdDWgkn-qk>Bzo+>D7iR6hH22On*JHi%_ zwB~R;o`GB=Xf?j4@(!W^(x9fojJ>L?`ULH4nQd0s&0~DUYKg%jhhFh@-m{(4N~{g* zw&5aJ=ZgFEBvI_*P;K=mOB{uGHtwL>VodxA$aIM6n>$H`_aBwQIMuJ})r+v`Mvxs^ zE~w-0?}Fs$NOQ+h8%oa1oxMzdoh&Bf<3v%BX$5E$pzjcj(^xBf2bN-H^%u*^V+!C zK2^592X#pU8*y~LP3#z)C<{;hq+!5y08<3 z)J?jb$$&JuT7IE?XB%%L4u8f|B-%m~e*=fawzkqKJ@aEJ;|l|cq_))RuJ2vmg=05v z7*vR%G%J@=b~6+R*+Va=>C;c~24mUp&3*J<`ZW|>5u6v^G#0W|pPyH_m~AbGYIU^$ z0I=APV7d`Rbe#E2$A#Y5$j~^|DtvcRY@6K#Yc_{q;77VB-K3V|2jcEL27ubxB0Tcu z9k&+UcA)G5*ON*j^!w3pYrJX8{t>ED36=VkS6f_2*Aw49P8q^>LO&dgJ~=aoo6b5~ z_=26(EjSC6b(gr^PE;wEk}7pF9X0ILD}gdvVWPh7%u-ZUjWH_+O@$^vKyV>%W~Uu_ zu_^NYtEZvy&l6=n7&>2vV5j^;=uT>J%l897L9vMa;E#cd_xm|o&^Us71cwsn$5}Z| zsy8b!lck~-8j_?dSMgD+QPV3c)|2oxj3nLY7GD&Oj)!YfIlsdlpCx*R#fdUlxY|Uu zBQu+rTQLE7*WoW=RSTUXyz&t>hqrW~$g;vjI3@>AM9rpkjzTPMN#~t&LP9XgwOP2U0nIF4l z6tybTGk=oe*k6?@*h@0yuEzB!#HE)(c=nU=tPLV@cdw64MG0w?Eo0#QCng(%)&$2Y z?T@zX$;|F(yD<6C&oTr8@l&8m#s+nLL3d=*n%cUNwzgQbtn;=toX_;~YR3GafGttD zW|faChAgy$^X8=d`@v%zTAc4j2@nmXtGDXz1cFebl88KNZxVi>I4D^VEFRmcci@%8 zEuarMJOTGy$c!6)7Fvyp%&gHoTKX3zVK4xb3khd?@;u{ABlHj?lw^k8j}Z?XarcIUNz1$62WDnZbJ zI!0#+Fbhg!6Y=CA`?Q^Ppu=-2SE*^#P{N08uSh|Es-eS+?FV!g~C;d>FHlOFk)S_t|zKOz- zVK;*t@@dPE*NY&-my>_k#+iR>unmRa)9y^T{@jKUx_bsZvLl(II1G@ISb~7p*|j=R zi&6FdY;;eX0xBGuOK!j`J1+Wo<^~sQw0McWY;x8gw=}bUGJEo%lmjfCYs`3YKvj02 z)R(n8qCMy%Hu(xtoF1x|T5#26V1KUWX1y+lY@v?S-p{gPLRj7}SmN$X06MCQ zwRin24!|ScUqUzx?svejrqsnHh%?OGS--cjaiE4$3k{iDCh*@O?;$f$S4P4_H#!k0 zRZ?ahWSEDDM%bK2P|UacmDdx5*Fx~l`Nk!0O?6r|LxEHTKt&sP_C46*;vsx;E|8c( z3ckGxOL>nDCM+Af_u6)zu!%?h)78bVqS3Y<88th<@HMm*SQRy%5r2MuGNxC>vykrY zmiRX1NJYf@(CESlA(5tPp#(_*qVsfrqTbK^-g0Yum&zTwxm)pzOnW zHd9-BvtOqT;UeAC6v6t@m^!%Uf-xea)^+jCeMG+w6&U&kJd+j3;Fu?fk&Z^uJ(;6x zsU$`_SKq1Jx+5cMu4f0eczExfwG-o0c5TQ|aIGBj)=uvAKnVmzdDbM{A*(h&L?Zse z^2{%9KfKkVq7sfg2o-Qp!4f(u{NH;OdQTbhl7Y8ShRN2d7S&VxHRcIil)`n%uTSQKd1%MAhyETyoh@|4RWJ%rRyS zjP6P}X*u)fcAay(4UNL+%Svmd0DH&@y1;q1_YQ*MQI+D}!^Mx8f&Qo>uu|@-k5{*F z{Oma3kRB>%30OEo5nmn;lu|15NLnZU6=USHGqIx*T9pA8#ls&9P~+DN0?`tFk;OCO zoIAPWoj2`%Dy;p2qL+k|f>CYLn2H1$QW||}m z&G(69jj_NGH=`es5U)Z$Z^}-WhbkA6q-iz6K3V%2^0R!0{Dp-3NE}}~B~xG03@zbM z*#V9_cNM!5#pv9XOM3ift`H?;P}iOByZW<*ricm#iwyO|&d$va$KU1_$gp1?Lxh&$ z9&{b|TPx;W29MZ~>Ofs}zebuac?G(k=p|f0XA6jQlP>vT_4=XS=+G4?tQO%LzXjzc z&GF8mrby_Jzt9E7u0T9fwBYvCR+Ws%6lZ{d2UE2^#`tvIE;b1{3xKVMMa|N~s>Y}) zrk@>$nK>)jZ%KRzZ3$Tn-w*3@+?o8vbfu%;VrZRcE3tk>Fu)ftpypTp4FY5-8$GFU z*L&~aWZI?A1{VTwrKO4LJo&3fs=0|#-bsbkD3wzpW?LJ4MD@xs_7XjY10*-@zKN7F z9Vxhv61Js}6|D~^2P9$D}`fqOVxOyv1uAh4-CUDaK| z-uCszTE6szF_BwSv8;;ZR0Ou)7ig6dRtY2czIstBy)#pEG$C4jslT*V#Y;1wo^}q+ z#+512`|$V7%2cSi`l%F#hzy%^n#nMpzu-L4qzPg?4lZE$V zm9F{ev*fg~{geFY(W+wOz%+g%fjl4}bq0fLARU@s^o&TOjZ^JlF*3JGF;pz7WVEGg zt{YG@)hik0hT(e2KThZ0je2mq4~xV*=Bso;r zc8659_h~tdSaaDDFi`eoiR(g@l4L}t+_<*wxw=xgclzaj*t0J+pLYB@cDb2O|6(4S zKBfl%Kv39-i>t_ri~nQ0%G)NDy!@mtxd9dQ@SXuvYAY_N;*<3tfMxO$kyw`T;}1too!Z&zO1yIPqv>XF$C{4 z4CTbmtD-d2F>lLrs=i=os=4x^qey%$A9QNI`nkuRHl(9Bw4I=kGlcfDXVZ?nT>@Yg*KNWtD>_w z$l6B6*A=AhtE6G>YiG`9K_M)JDBulzBX9t@o054u*gLuby#*=$;sw6_|I^GuLG~BK z-A<4~M^S}L+{qP0#>vdd%*rI`ZR5#KA%sXK;A&wBRFjbUJH^|XAceKNyEBl5#mmc! z*^7hO$<>O5jgOCyg_WI!ot^0o!Q|%S=x*xG5+FBoR~u({8z)DyKb)p! zP9E-p6clg$WdDfI!C6u9pY)Dye^=p64;F7zXBIYQRu%^bmVdQybC>jdBl&wk|62<; zjki5gENUP(Cl6P1kfbNb(Vg;NDJ;zYY47aeYX4U{7UnDd|FU`$``?i6HkSV**1yH}r{}M9{xy&{^MCUG8~Pu){{?-{+my}JoQn^{ z_b*hkj&AOzj^?00RBze*_1Ls>ljburvP+`d5pJy{Wt9n}HyO zf{mkx_y0gOY#c!9?xug#WaDAu2D*o>^ zuMTqg+u7fyfW6IMU1Vf`l`YWJ{BKU&Og%vse>r-y`&*Z}wW*^O=xu)gy`cWlZu7qx zED$FLD;v8dACozcDJK)BnWY7jDF-hr6Avf1IUk3a1(yYg^WWLsoGjhFOkF{uR&SZU zW%E`*e`P~P`3t?mOr!l z9~ld<{C_kN_zUnamw`9CzqP$xUf!-&EdRV*{av#^GX6jO{CzC`A9{GB{;!k&NZP79Q^7|jXhSyPym21bTJYc35up= z!RN*qjG#L;VdK-89-0~EnBq;C_TMl5RhyR=GB@~*XlVXE-3BzzZe!g8d%KXv-LI>9 zycj-(VVH%p<*TiArpx%KKJFIxh|i@Dtktp0S%ztHs&{9p#OGb%oFgv|f(|XO+iJQjg)S2TwJs%}uYN~& zi5VG;H4rj096lp!o0Sh5Lh(qK#qIytq{qJg6&S2+p}ML*BA;`e0?uP98efz-p7lkE zjm^xEKSADPVcZ)G%GC*5ceh~~IWErVoR>SjZh-}uz;ykZISq5wVRG{;UuygC0)>vOEpl8RT;0suZ=;fOxHRzn0~vjIeY-$DXZB+t{brmdxE zVZ;Cc+sf6ifmQWKOW!y0sYgjaI*l|}D2#W_a}(s4b-A0!fKq>EJ&y@+(<@7hC5cRI z=$A1-0>C++PQOOzcGrx4rk^YIXG*Sg<=}JNdj|j{Tp%%eV^P^f<&rSVZnooYOOfY| z?3hK~L*uq3?Mzc?2V0$t<>XY$pfy(BTJSVey>E(Aj=YB&>Xc^SWTQ54gfaUTaH-u? zYKF3-3tqb%Q(+WWFLx%AK0e?w2^*J=YQBfS#l!35FP%(}`j*6*vxpJp#QY80wUw8R zv5(;;Rcj<8-PKDmf#DOUQjFW6asBVofyeY0P{9U-_tNgV3wDl%Yp57j!{Jd2R+DBJ7+LQEQ+=y|G-^WZtJ)FT*nwe@MW055pxcY=Ft8yWx@`1_0pN z${+-mtAC`%B_*>b}i48@)U0Cyw&@*NDzU~OfVtM;FL^B+d{5!O@yWSys9 z&rNWr2oM#k1CJwfF%WF(<|m@Mh%?_`k^l;)lllT->Z7=+^C{P7zcYJbmLP0Gw@;@C zKmb(w<>lVx_{%%t%vx;UJq_SM09tWaD*z%MQRqCW*(!`kzUrr$?+I(1s2FG*f<^O@!)?$Bpbz1S#k)ET}HR zWp@yZhz<(B?7gQ37(2@2CDK7e*eR$|6=soYctijzxp=>F#+y@warOa%>B(Q@D$N9!1W$&b&Bd zThXnq81ZoKt*!`x#Gl-UL{A#leP=N41AYT*7(VJ~JupU)%=5&o#O_$?5H8C&lR0bR znioU_DfHt0^FmC7%)+P)P#mB(Aa}Hmy<Oe32fxSVYVadsBj%}W?)A)s zA5FcM9g$%{x+*@-x+1i7rO}YyPvbiH@dc{Pm9*%l60GVSa$Gv0oJ~}+g^iV&WTG9l zdf?c0TvL@6@|+>3y6^bsxdWj1xq7HCQ9`1PJCP#D^CYq$y?y6Jfuwg_3M z&28g;+ETVeEH(`mkrbAxO#^gbn1gpY?4*xYQ?@?UnG*}s-f$GmG$3^Kplk!Rbla7C z9dKmh*Op-!PAg#257z6CbGA4{2Xb*ws_I6Cakd9q4;%3H&Yz>yFN`B>2#Mcj6UKn- zI;4>AB6cK}j>eiTm93yvYrN zQf%5YB9_6gt?aC`Ez+HR1kf+`*#U*on0w}%-l+s6X28pmy>I&tm%%Tyx-R`nNUrvs zIu*y3V2MvG3+$!Nwf?xvN2_J@s5|niTsZ!eCJudw&yA!m$ImFqY6D~5nqu>`ATuE} zU4h`K>m8`e_hJP=D~&r6dVagdbBf#hn5|towJM{;?;k7kg1Vk#VImTQ1EvY21ipOh zR|Z4@wqk_50EK8>!cbtb_of68*7bl($rom*pxDlafDzxWR$OgBA*O+0!Km;nBw&d! zXaFhyb{z`bgQ_A1QMdu!?%;-o*RjaO?p8~=dWe7?ZV0WpRYI5@tk=$QDj`}nWuITG&#+6P2<$DxfUKWh^G@<-aX^+c>anR4MNZeoJCH1g&QxCI?@idVl^V%L( z!3pr1lU|tsnM&flhko-F%tBf7jPx}(9Ck8Xc=OWqbj8_CzD$$NB)jN@mREA^cJ|7H zy7s!IS3*U@;jtT^buu^|b4GW$GBND5ab*Bzp(SJH2scR0f{CTe418nn&VH$LGLZyn zlo^wwY$8{b1{@OOt=6h0O;Z+4;A524@`bO+4__TSPnqqp{04 zx+LH1(S{DZCq46$tCy$jR+Jpm8WhzMR9BaP^9WTiJTMnr!$!F{w2H1{G8f7R8L8;g zp#Gx)c=^Cg=g{ek^dnESF^H>TW1@!pV{z}lH~f0vLJ z)g8a~2Dq{B9UI7w=i&s+TD*2E*g@`MwE0^|JW@&R#OKV4u6{6dPdko*{L^1E!iF+k2)117r5)H(XHdk_O)1+%g5|roYgo_ES@@W- zNdq2BPC2}3A&29iLnVr284n)g<-K_>OwvA3PVHH`(kQhuIECxY0pzcnb_|z1P*`H2 zyT}ziQZoANaX@C~<7u zJfFl6sT}t2NR8&5D3NNhp!If;a_q+k8?)TsimSPKjuP;oGt^Coc}rF@FsgU+n^?)% zjy;1ZOv^ZdR4|Sh!?n{Im=g^2kb>&n!X|TcAGapJQw(heU}!+GiI`5@KT z3^#vFyCM|yYjiT{mm!pw;c#phRu1cpFI{*C0~}7$`)O2$h(rKmzcVJsRgRvRjsM6M zgRi@_TD=jL?#|?8OiU1+=epqK#OU-HnI@cBFw4_fsONMALF2>6pnE}MrYG@onMKK^ zQ7gt(EBS9|mfLbyW7BB_M%zQJ9~uX*DW#n*R8N?e42Om4z06DeAkW(aS0fEVzu|qq z%x|W+yb69QlI3=)1P{C-oGnp)2+T@+MvIFE79Yg>0X@l7K_W0v_EJ-dRXrSD~iG{Oh=Q*x%{?ywk zL8kzL3?ra04gHpWs`b-pCc}p56ba5#TP@DBG$82i0tq0JGtrgJL}k$BF$d&uLeW68 z{xPjF-ks@?m(d}_FN68z%BcFmt5r;WApqT^F-}g(_?tZ1L-;o!C!L*EQ8bG)QSNtE zVC1~fX=ba#0>j&Tt!NsZ%j(4Roi8PmNmQ5ygl?{Sd${Lz%cj*W5}Hl&44eUE>4D-4 z-zqy16t5TTYL5foZr$8lEV7537pnx82Gc?usbfH5$0KY%1;Wsu(bS zhu!MB;qk50s|ny@%Iti5Wu$pEQPIU(@2>BnY_`Bpnzw{loV}-VS|Wu~_pXm<*wnoH z!vX*szNmmMz83U-UpMC*vHb#0z_0@7R2p-Tv~~MnO}1*OFZup363Z`mjQCrS8tu8@ta-3n}!R zUQcS`G841?`S(xqoZs4e*9zlN|4jX`Pa9?*e6Psdt3UF{u#eUYd#~L8k@*Eq-Xq`a zuMc(;@BQO17aqVme)(jsUf7owtYNW>#Bz1O_GU_cqOGm{j34I^ zGv&TokFO5Z5*znaHaiCYy>?j5TQ+1<*ARtfYQ|lK-7=M(&{xA!-%q4YRT_;_vk@n- z)kkxly*6;$8q9pn4<7xqUi@YVkEd(G4H7+3?CIeZR8Y@vi$~CjN3}@$7w8oB`T0xc zeQKvd#ZsRw;sl5$YS3j+(n7>NsuAdmm(YCm{L{7~sgOFmWG-Sm2)dUj%eOl{5_IF9 zH&5amC;v3?U4#6rZOLY$*ix}Ld`<;IX@|_SnMI))s+L#>f)wBCsLga%ap$` zvFac6MHa-BLb|BrM3vkih2(V42yr>lK|EQ-X3s9ZVk=Qp&#&&$t80}ESfPH|WuDw7 ztI~@qK=ffDt*NTGU8Ls3Akjr3nmKXtcxmj)4`u5^R<(RpHp@pNOvH3yHzq_vDTz(U z*%~b@oZGqL>=A!XGhEH^z$j8;qa;yJPNckf!)VrpD!858sw;UH*gY=9{Y0V6B1ilQ zzwi?s5h7eL+{`Ie5%ai6Dfq)#=Y)oozgXnccIpKEH&U z!;5{}W=vqKtO0ubx$#)5Cg^UCIY<#9TG+s-r%=>+Lg^`{vsJFWkNWdLk2vNwBVlAa z$)`TSa5`gu{rbRKh16Sq^}f8jm*i}5xQH-9vVztfVl^XX45*7}R*VuwZEs&(N0v6c z%MUh_gmtpvR1+P@2R-GG8>Wzsm}4AURN5`C+d;qi!j~lQ-Gs#q;`x3 zyIkOYrA5+Xn^bBg6{~j^5B)^PrQs=&Bsy<=+Qr9kBrhh5LFL4i+%If5lb?W(SvT(a zI44qX|9UOogzz$fanJHmW84jMC^&T15jH`TfoCjN5LHSkOjo)M9nJUU_k0Yl`c`6O zC$}NYtIgwIaK!DSUY_hEpLkjf*`|9rFuO9gPg5K5B$DG{;!{*fp7XTvvXzcG9Pb!= zo;*N7Na zIf_}PPl-XR(Kx&A0ITs1Ei}&6oWTLiUD!G8T41B=QR*DG{urNhOr$*4T$RFvD$o#@ z*h^_3LtM`h^ZBq*q4~mWCj?H4w_Oy{alSF*MKgWofZGicBFbU?F*ctzpZg0xi!yrevO4I118xfj8s?=6IN`j>T8(gEhD-cNmt2+fNUtGdz#Uex9LR(7@@U)4yrsH%$C7FW3SPO6r!ek_ zbFPdxBm6jbyLImToJ-UZ>wL1zQKOd*wf-5AB$e4Sz)c!$R?5VTpt;d}&S5?PhvrhF{>H#K`2*lk)J+;*ItqG$gt8?aQjdxW@}chx{+Nub)fMHGGLTaOPdA5`S3+0p|5)TNT1OxVNHB zB$G$v!%+h$nNuZDBfgSGXh!Z8)ndl1MH;nq&K<^}Moo4C-Zl1Kf&3<~MONaxW9|?| zWijpiN)$AC?KCMbry8Ufu4oaz61ADUWpqv~r>`7y!!(k=tTR-iWne9r*D0|Yms9o8 z7_I~6W$-Hzv$|?yF*dGAi7!DC(uWwGIOCF}Tj%;wJn(tFwwS9&a%n3my{ zSAvgAU^h_)%Vwl^M^bFL@}b-4vkF#)Q45o;o9tOED$S$qKs-eysZbsESUaen6F5+EMJI)FqRsG}5kZ;vh+{72lvkX0>LN8;y3Hfp zrb)xI0?%#8+o=-VrM$d!S|mL*QDVUm$2?4wMWsi0Dmk3wf@3ZUJ#C+MlzW39OSB3u z+c_n!bRYjv&@smf*bh5MG|P?_H$2QQQwsjXxzg>ZN1RXMSj+6i!iFc<$l`|m{4UJM zZf-G0+-hbd0jyvowq%>$k$tB7R^j*Mw=2`#Fi>*C5)x^7|*i{`_SzlD{L1D zPYR9uB|UrbqY8P8+URF1nDD|$2c+E=e%r;#1nHPj=_=G}AF#NYZSelF1wOr=s8<(B z4`|3_OlS%|?yG9Na|euOVVk5vw13{0n@Jw(a&8p{GQ~y6!Si@k+~NU?PNL6+*h=%k z_u|XcVI>CP?`53wCxboCR zh7SRc5mV@B{^?Vf;Jz2ZY>}hKN3%xEomGxkh{2)(3$2N08vlI6q&nJvD@-VvVJ#v<%5 zFp1_Zovs65TW)R-?!eP1(r#wE!q4#b8ph1JhI{m{qDP6#NDfzQ zA@1=o(P7W`CG5mh~ERT>TMly-v*@1pS< zJJ#+gkk#E83wuP)7{pQHR{3hq#W45X^=%KSYqr0Vlec$p+JcR;-4>!OXPp-HRca-$ z5u9K%QNPZ1M`YG@#)`06=~0iIF-*^hq;y_i^%+>rOLSOpz$3C?*?Mz_X;;ojyBGfh zY*$k#ChD%&bo{vv<(`&CpOJs3L_@R*L;gsJghFbT?M53yO>G4B2_Z{0A?;pl2o|%Y z2-4n+8S8AfzY*A{(PZjJr{W%>v=HB_gWb&!X68K6ZYOq&#~S#DL8m&{^$|VvvF-kY z0S{w$=|k zBB78vQ-|vQRGC9ncjx%|wfK1mKY~QZ>(XBBXP4Nhp*^x^JX<;B&Bl!Dqqhcrcs1&@ z=FUgo)8&JAcuiY)F>e0p_KYjamJ64#T{<2}|Hc?*cbB)Wm ruRz_MY2aKf?uO^Gjcu_)SKYGX`Tq%5u3Wit<;s;SSFT*Ss-^x9D>+de literal 0 HcmV?d00001 diff --git a/core/embed/rust/src/ui/model_mercury/theme/mod.rs b/core/embed/rust/src/ui/model_mercury/theme/mod.rs index 27b5af85a..0cb5244d1 100644 --- a/core/embed/rust/src/ui/model_mercury/theme/mod.rs +++ b/core/embed/rust/src/ui/model_mercury/theme/mod.rs @@ -91,6 +91,7 @@ include_icon!(ICON_CLOSE, "model_mercury/res/close30.toif"); include_icon!(ICON_CONFIRM_INPUT, "model_mercury/res/confirm_input30.toif"); include_icon!(ICON_DELETE, "model_mercury/res/delete30.toif"); include_icon!(ICON_MENU, "model_mercury/res/menu30.toif"); +include_icon!(ICON_KEY, "model_mercury/res/key30.toif"); include_icon!( ICON_SIMPLE_CHECKMARK, "model_mercury/res/simple_checkmark30.toif" @@ -101,6 +102,13 @@ include_icon!(ICON_SIGN, "model_mercury/res/sign30.toif"); include_icon!(ICON_MINUS, "model_mercury/res/minus40.toif"); include_icon!(ICON_PLUS, "model_mercury/res/plus40.toif"); +// Homescreen +include_icon!( + ICON_LOCKSCREEN_FILTER, + "model_mercury/res/lockscreen_filter.toif" +); +include_icon!(ICON_CENTRAL_CIRCLE, "model_mercury/res/central_circle.toif"); + // TODO remove TT icons: // Button icons.