mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 14:58:09 +00:00
fix(core/ui): fix persistent word during recovery
Remove the current word from recovery progress if a user goes to previous word. [no changelog]
This commit is contained in:
parent
65d3fd00f1
commit
f0989e20b8
1
core/.changelog.d/3859.fixed
Normal file
1
core/.changelog.d/3859.fixed
Normal file
@ -0,0 +1 @@
|
||||
Fix persistent word when going to previous word during recovery process.
|
@ -1,10 +1,7 @@
|
||||
use crate::{
|
||||
strutil::TString,
|
||||
ui::{
|
||||
component::{
|
||||
maybe::paint_overlapping, Component, Event, EventCtx, Label, Maybe, Swipe,
|
||||
SwipeDirection,
|
||||
},
|
||||
component::{maybe::paint_overlapping, Component, Event, EventCtx, Label, Maybe},
|
||||
geometry::{Alignment, Grid, Insets, Rect},
|
||||
model_mercury::{
|
||||
component::{Button, ButtonMsg},
|
||||
@ -35,8 +32,6 @@ pub struct MnemonicKeyboard<T> {
|
||||
keypad_area: Rect,
|
||||
/// Key buttons.
|
||||
keys: [Button; MNEMONIC_KEY_COUNT],
|
||||
/// Swipe controller - allowing for going to the previous word.
|
||||
swipe: Swipe,
|
||||
/// Whether going back is allowed (is not on the very first word).
|
||||
can_go_back: bool,
|
||||
}
|
||||
@ -78,7 +73,6 @@ where
|
||||
input: Maybe::new(theme::BG, input, !prompt_visible),
|
||||
keypad_area: Rect::zero(),
|
||||
keys,
|
||||
swipe: Swipe::new().right(),
|
||||
can_go_back,
|
||||
}
|
||||
}
|
||||
@ -136,7 +130,6 @@ where
|
||||
let input_area = input_area.inset(Insets::left(BACK_BUTTON_RIGHT_EXPAND));
|
||||
let keyboard_grid = Grid::new(keypad_area, 3, 3).with_spacing(theme::KEYBOARD_SPACING);
|
||||
|
||||
self.swipe.place(bounds);
|
||||
self.prompt.place(prompt_area);
|
||||
self.erase.place(back_btn_area);
|
||||
self.back.place(back_btn_area);
|
||||
@ -149,14 +142,11 @@ where
|
||||
}
|
||||
|
||||
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
|
||||
// Back button or swipe will cause going back to the previous word when allowed.
|
||||
// Back button will cause going back to the previous word when allowed.
|
||||
if self.can_go_back {
|
||||
if let Some(ButtonMsg::Clicked) = self.back.event(ctx, event) {
|
||||
return Some(MnemonicKeyboardMsg::Previous);
|
||||
}
|
||||
if let Some(SwipeDirection::Right) = self.swipe.event(ctx, event) {
|
||||
return Some(MnemonicKeyboardMsg::Previous);
|
||||
}
|
||||
}
|
||||
|
||||
match self.input.event(ctx, event) {
|
||||
|
@ -27,14 +27,14 @@ async def request_mnemonic(
|
||||
|
||||
await button_request("mnemonic", code=ButtonRequestType.MnemonicInput)
|
||||
|
||||
# Allowing to go back to previous words, therefore cannot use just loop over range(word_count)
|
||||
# Pre-allocate the list to enable going back and overwriting words.
|
||||
words: list[str] = [""] * word_count
|
||||
i = 0
|
||||
while True:
|
||||
# All the words have been entered
|
||||
if i >= word_count:
|
||||
break
|
||||
|
||||
def all_words_entered() -> bool:
|
||||
return i >= word_count
|
||||
|
||||
while not all_words_entered():
|
||||
# Prefilling the previously inputted word in case of going back
|
||||
word = await request_word(
|
||||
i,
|
||||
@ -43,9 +43,10 @@ async def request_mnemonic(
|
||||
prefill_word=words[i],
|
||||
)
|
||||
|
||||
# User has decided to go back
|
||||
if not word:
|
||||
# User has decided to go back
|
||||
if i > 0:
|
||||
words[i] = ""
|
||||
i -= 1
|
||||
continue
|
||||
|
||||
|
@ -222,7 +222,7 @@ def enter_seed_previous_correct(
|
||||
|
||||
if go_back:
|
||||
go_back = False
|
||||
if debug.model in (models.T2T1, models.T3T1):
|
||||
if debug.model in (models.T2T1,):
|
||||
debug.swipe_right(wait=True)
|
||||
for _ in range(len(bad_word)):
|
||||
debug.click(buttons.RECOVERY_DELETE, wait=True)
|
||||
@ -237,6 +237,10 @@ def enter_seed_previous_correct(
|
||||
while layout.get_middle_choice() not in DELETE_BTN_TEXTS:
|
||||
layout = debug.press_left(wait=True)
|
||||
layout = debug.press_middle(wait=True)
|
||||
elif debug.model in (models.T3T1,):
|
||||
debug.click(buttons.RECOVERY_DELETE, wait=True) # Top-left
|
||||
for _ in range(len(bad_word)):
|
||||
debug.click(buttons.RECOVERY_DELETE, wait=True)
|
||||
continue
|
||||
|
||||
if i in bad_indexes:
|
||||
|
Loading…
Reference in New Issue
Block a user