mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-26 00:18:15 +00:00
fix(core): don't send ButtonRequest
s during menu handling
Use `LayoutContent.page_count()` instead of `ButtonRequest.pages`. [no changelog]
This commit is contained in:
parent
9d9f3732a3
commit
09be64d1e7
@ -80,6 +80,7 @@ async def confirm_with_menu(
|
|||||||
) -> None:
|
) -> None:
|
||||||
while True:
|
while True:
|
||||||
result = await interact(main, br_name, br_code)
|
result = await interact(main, br_name, br_code)
|
||||||
|
br_name = None # ButtonRequest should be sent once (for the main layout)
|
||||||
if result is trezorui_api.INFO:
|
if result is trezorui_api.INFO:
|
||||||
await show_menu(menu, br_name, br_code)
|
await show_menu(menu, br_name, br_code)
|
||||||
else:
|
else:
|
||||||
|
@ -930,9 +930,13 @@ class DebugUI:
|
|||||||
|
|
||||||
def default_input_flow(self) -> InputFlowType:
|
def default_input_flow(self) -> InputFlowType:
|
||||||
while True:
|
while True:
|
||||||
yield from self._handle_button_request()
|
br = yield
|
||||||
|
if br.code == messages.ButtonRequestType.PinEntry:
|
||||||
|
self.debuglink.input(self.get_pin())
|
||||||
|
else:
|
||||||
|
self._paginate_and_confirm(br.pages)
|
||||||
|
|
||||||
def _visit_menu_items(self) -> InputFlowType:
|
def _visit_menu_items(self) -> None:
|
||||||
layout = self.debuglink.read_layout()
|
layout = self.debuglink.read_layout()
|
||||||
if not layout.has_menu():
|
if not layout.has_menu():
|
||||||
return
|
return
|
||||||
@ -942,54 +946,48 @@ class DebugUI:
|
|||||||
|
|
||||||
# enter info menu layout and paginate through its items
|
# enter info menu layout and paginate through its items
|
||||||
self.debuglink.press_info()
|
self.debuglink.press_info()
|
||||||
br = yield
|
menu_items_count = self.debuglink.read_layout().page_count()
|
||||||
assert br.pages is not None
|
for _ in range(menu_items_count):
|
||||||
for _ in range(br.pages):
|
|
||||||
self.debuglink.press_middle()
|
self.debuglink.press_middle()
|
||||||
# paginate through all properties and confirm
|
# paginate through all properties and confirm
|
||||||
yield from self._handle_button_request()
|
self._paginate_and_confirm(None)
|
||||||
# paginate to next menu item
|
# paginate to next menu item
|
||||||
br = yield
|
|
||||||
self.debuglink.press_right()
|
self.debuglink.press_right()
|
||||||
|
|
||||||
# cancel info menu layout
|
# cancel info menu layout
|
||||||
self.debuglink.press_no()
|
self.debuglink.press_no()
|
||||||
# back to the main layout
|
|
||||||
br = yield
|
|
||||||
|
|
||||||
def _handle_button_request(self) -> InputFlowType:
|
def _paginate_and_confirm(self, pages: int | None) -> None:
|
||||||
br = yield
|
if pages is None:
|
||||||
if br.code == messages.ButtonRequestType.PinEntry:
|
pages = self.debuglink.read_layout().page_count()
|
||||||
self.debuglink.input(self.get_pin())
|
|
||||||
else:
|
|
||||||
# Paginating (going as further as possible)
|
|
||||||
if br.pages is not None:
|
|
||||||
for _ in range(br.pages - 1):
|
|
||||||
if self.debuglink.model is models.T3W1:
|
|
||||||
self.debuglink.click(self.debuglink.screen_buttons.ok())
|
|
||||||
else:
|
|
||||||
self.debuglink.swipe_up()
|
|
||||||
|
|
||||||
# Visit info menus (if exist)
|
# Paginating (going as further as possible)
|
||||||
yield from self._visit_menu_items()
|
for _ in range(pages - 1):
|
||||||
|
if self.debuglink.model is models.T3W1:
|
||||||
|
self.debuglink.click(self.debuglink.screen_buttons.ok())
|
||||||
|
else:
|
||||||
|
self.debuglink.swipe_up()
|
||||||
|
|
||||||
# Confirm current layout
|
# Visit info menus (if exist)
|
||||||
if self.debuglink.model is models.T3T1:
|
self._visit_menu_items()
|
||||||
layout = self.debuglink.read_layout()
|
|
||||||
if "PromptScreen" in layout.all_components():
|
# Confirm current layout
|
||||||
self.debuglink.press_yes()
|
if self.debuglink.model is models.T3T1:
|
||||||
elif "SwipeContent" in layout.all_components():
|
layout = self.debuglink.read_layout()
|
||||||
self.debuglink.swipe_up()
|
if "PromptScreen" in layout.all_components():
|
||||||
else:
|
self.debuglink.press_yes()
|
||||||
self.debuglink.press_yes()
|
elif "SwipeContent" in layout.all_components():
|
||||||
elif self.debuglink.model is models.T3W1:
|
self.debuglink.swipe_up()
|
||||||
layout = self.debuglink.read_layout()
|
|
||||||
if "TextScreen" in layout.all_components():
|
|
||||||
self.debuglink.click(self.debuglink.screen_buttons.ok())
|
|
||||||
else:
|
|
||||||
self.debuglink.press_yes()
|
|
||||||
else:
|
else:
|
||||||
self.debuglink.press_yes()
|
self.debuglink.press_yes()
|
||||||
|
elif self.debuglink.model is models.T3W1:
|
||||||
|
layout = self.debuglink.read_layout()
|
||||||
|
if "TextScreen" in layout.all_components():
|
||||||
|
self.debuglink.click(self.debuglink.screen_buttons.ok())
|
||||||
|
else:
|
||||||
|
self.debuglink.press_yes()
|
||||||
|
else:
|
||||||
|
self.debuglink.press_yes()
|
||||||
|
|
||||||
def button_request(self, br: messages.ButtonRequest) -> None:
|
def button_request(self, br: messages.ButtonRequest) -> None:
|
||||||
self.debuglink.snapshot_legacy()
|
self.debuglink.snapshot_legacy()
|
||||||
|
Loading…
Reference in New Issue
Block a user