from typing import TYPE_CHECKING if TYPE_CHECKING: from trezorlib.debuglink import DebugLink, LayoutContent def _enter_word(debug: "DebugLink", word: str, is_slip39: bool = False) -> None: typed_word = word[:4] for coords in debug.button_actions.type_word(typed_word, is_slip39=is_slip39): debug.click(coords, wait=False) debug.click(debug.screen_buttons.mnemonic_confirm()) def confirm_recovery(debug: "DebugLink") -> None: debug.click(debug.screen_buttons.ok()) def select_number_of_words( debug: "DebugLink", tag_version: tuple | None, num_of_words: int = 20 ) -> None: if "SelectWordCount" not in debug.read_layout().all_components(): debug.click(debug.screen_buttons.ok()) if tag_version is None or tag_version > (2, 8, 8): # layout changed after adding the cancel button coords = debug.screen_buttons.word_count_all_word(num_of_words) else: word_option_offset = 6 word_options = (12, 18, 20, 24, 33) index = word_option_offset + word_options.index( num_of_words ) # raises if num of words is invalid coords = debug.screen_buttons.grid34(index % 3, index // 3) debug.click(coords) def enter_share(debug: "DebugLink", share: str) -> "LayoutContent": debug.click(debug.screen_buttons.ok()) for word in share.split(" "): _enter_word(debug, word, is_slip39=True) return debug.read_layout()