1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 01:18:28 +00:00

fix(core) Fix auto-mover hitting wall scenario

This commit is contained in:
Lukas Bielesch 2024-08-27 15:05:44 +02:00
parent a1ab50017d
commit caa5ed22e0

View File

@ -557,6 +557,15 @@ where
&self.choices &self.choices
} }
/// Check possibility of going left/right.
fn can_move(&self, button: ButtonPos) -> bool {
match button {
ButtonPos::Left => self.has_previous_choice() || self.is_carousel,
ButtonPos::Right => self.has_next_choice() || self.is_carousel,
_ => false,
}
}
/// Go to the choice visually on the left. /// Go to the choice visually on the left.
fn move_left(&mut self, ctx: &mut EventCtx) { fn move_left(&mut self, ctx: &mut EventCtx) {
if self.has_previous_choice() { if self.has_previous_choice() {
@ -641,10 +650,14 @@ where
// Possible automatic movement when user is holding left or right button. // Possible automatic movement when user is holding left or right button.
if let Some(auto_move_direction) = self.holding_mover.event(ctx, event) { if let Some(auto_move_direction) = self.holding_mover.event(ctx, event) {
match auto_move_direction { if self.can_move(auto_move_direction) {
ButtonPos::Left => self.move_left(ctx), match auto_move_direction {
ButtonPos::Right => self.move_right(ctx), ButtonPos::Left => self.move_left(ctx),
_ => {} ButtonPos::Right => self.move_right(ctx),
_ => {}
}
} else {
self.holding_mover.stop_moving();
} }
return None; return None;
} }
@ -667,8 +680,8 @@ where
} }
} }
} else if let Some(ButtonControllerMsg::Pressed(pos)) = button_event { } else if let Some(ButtonControllerMsg::Pressed(pos)) = button_event {
// Starting the movement when left/right button is pressed. // Starting the movement when required movement can be done.
if matches!(pos, ButtonPos::Left | ButtonPos::Right) { if self.can_move(pos) {
self.holding_mover.start_moving(ctx, pos); self.holding_mover.start_moving(ctx, pos);
} }
} }