fix(core): allow disabling progress animations in bootloader
What changed, and why it matters
This commit adds a way to turn off progress animations in the Trezor bootloader. When animations are disabled, the progress value is forced to 0 so the screen does not show a moving progress bar. There is no direct security fix here; it is a user-experience or accessibility change, likely to support a setting that disables animations.
No security action required. Treat as normal UI feature commit. If reviewing for release notes, note it as an accessibility/UX improvement for disabling bootloader animations.
Security signals we found
No security-relevant signals present in commit message or diff
Change is purely UI/UX: disabling progress animation based on a runtime flag
No input validation, memory safety, cryptographic, or authorization changes
Evidence from the diff
The change imports animation_disabled() from crate::ui::util in three bootloader UI layout modules (bolt, caesar, delizia). In each module’s progress-drawing function, the incoming progress value is replaced with 0 when animation_disabled() returns true. This suppresses the animated/moving progress indicator. The commit message and diff do not describe any vulnerability, boundary error, or exploit path.
Changed components
core/embed/rust/src/ui/layout_bolt/bootloader/mod.rscore/embed/rust/src/ui/layout_caesar/bootloader/mod.rscore/embed/rust/src/ui/layout_delizia/bootloader/mod.rsInspect captured patch +12 / −1
diff --git a/core/embed/rust/src/ui/layout_bolt/bootloader/mod.rs b/core/embed/rust/src/ui/layout_bolt/bootloader/mod.rs
index 57545740..8b69e3d5 100644
--- a/core/embed/rust/src/ui/layout_bolt/bootloader/mod.rs
+++ b/core/embed/rust/src/ui/layout_bolt/bootloader/mod.rs
@@ -40,6 +40,7 @@ use crate::{
layout::simplified::show,
shape::{self, render_on_display},
ui_bootloader::BootloaderUI,
+ util::animation_disabled,
CommonUI,
},
};
@@ -73,6 +74,8 @@ impl UIBolt {
}
display::sync();
+ let progress = if animation_disabled() { 0 } else { progress };
+
render_on_display(None, Some(bg_color), |target| {
shape::Text::new(
Point::new(SCREEN.width() / 2, SCREEN.height() - 45),
diff --git a/core/embed/rust/src/ui/layout_caesar/bootloader/mod.rs b/core/embed/rust/src/ui/layout_caesar/bootloader/mod.rs
index 32564be7..189a1f8c 100644
--- a/core/embed/rust/src/ui/layout_caesar/bootloader/mod.rs
+++ b/core/embed/rust/src/ui/layout_caesar/bootloader/mod.rs
@@ -34,7 +34,11 @@ mod welcome;
mod connect;
-use crate::{time::Duration, trezorhal::time, ui::ui_bootloader::BootloaderUI};
+use crate::{
+ time::Duration,
+ trezorhal::time,
+ ui::{ui_bootloader::BootloaderUI, util::animation_disabled},
+};
use connect::Connect;
use intro::Intro;
use menu::Menu;
@@ -58,6 +62,7 @@ impl UICaesar {
bg_color: Color,
icon: Option<(Icon, Color)>,
) {
+ let progress = if animation_disabled() { 0 } else { progress };
let progress = if progress < 20 { 20 } else { progress };
display::sync();
diff --git a/core/embed/rust/src/ui/layout_delizia/bootloader/mod.rs b/core/embed/rust/src/ui/layout_delizia/bootloader/mod.rs
index c8f315ad..8b9cb5e4 100644
--- a/core/embed/rust/src/ui/layout_delizia/bootloader/mod.rs
+++ b/core/embed/rust/src/ui/layout_delizia/bootloader/mod.rs
@@ -33,6 +33,7 @@ use crate::{
shape,
shape::render_on_display,
ui_bootloader::BootloaderUI,
+ util::animation_disabled,
CommonUI,
},
};
@@ -71,6 +72,8 @@ impl UIDelizia {
}
display::sync();
+ let progress = if animation_disabled() { 0 } else { progress };
+
render_on_display(None, Some(bg_color), |target| {
shape::Text::new(PROGRESS_TEXT_ORIGIN, text, fonts::FONT_DEMIBOLD)
.with_fg(BLD_FG)
Why this scored 20/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.