diff --git a/core/src/trezor/ui/layouts/common.py b/core/src/trezor/ui/layouts/common.py index 8e1b24cb8..9aea3dcce 100644 --- a/core/src/trezor/ui/layouts/common.py +++ b/core/src/trezor/ui/layouts/common.py @@ -25,10 +25,7 @@ async def button_request( if __debug__: log.debug(__name__, "ButtonRequest.type=%s", br_type) workflow.close_others() - if pages is not None: - await context.maybe_call(ButtonRequest(code=code, pages=pages), ButtonAck) - else: - await context.maybe_call(ButtonRequest(code=code), ButtonAck) + await context.maybe_call(ButtonRequest(code=code, pages=pages), ButtonAck) async def interact( @@ -36,10 +33,9 @@ async def interact( br_type: str, br_code: ButtonRequestType = ButtonRequestType.Other, ) -> Any: + pages = None if hasattr(layout, "page_count") and layout.page_count() > 1: # type: ignore [Cannot access member "page_count" for type "LayoutType"] # We know for certain how many pages the layout will have - await button_request(br_type, br_code, pages=layout.page_count()) # type: ignore [Cannot access member "page_count" for type "LayoutType"] - return await context.wait(layout) - else: - await button_request(br_type, br_code) - return await context.wait(layout) + pages = layout.page_count() # type: ignore [Cannot access member "page_count" for type "LayoutType"] + await button_request(br_type, br_code, pages) + return await context.wait(layout) diff --git a/core/src/trezor/ui/layouts/tr/__init__.py b/core/src/trezor/ui/layouts/tr/__init__.py index d78f2b976..68a4ecef0 100644 --- a/core/src/trezor/ui/layouts/tr/__init__.py +++ b/core/src/trezor/ui/layouts/tr/__init__.py @@ -1098,15 +1098,15 @@ def request_passphrase_on_host() -> None: async def request_passphrase_on_device(max_len: int) -> str: - await button_request("passphrase_device", code=ButtonRequestType.PassphraseEntry) - - result = await ctx_wait( + result = await interact( RustLayout( trezorui2.request_passphrase( prompt="ENTER PASSPHRASE", max_len=max_len, ) - ) + ), + "passphrase_device", + ButtonRequestType.PassphraseEntry, ) if result is CANCELLED: raise ActionCancelled("Passphrase entry cancelled") @@ -1132,18 +1132,19 @@ async def request_pin_on_device( else: subprompt = f"{attempts_remaining} tries left" - await button_request("pin_device", code=ButtonRequestType.PinEntry) - - dialog = RustLayout( - trezorui2.request_pin( - prompt=prompt, - subprompt=subprompt, - allow_cancel=allow_cancel, - wrong_pin=wrong_pin, - ) + result = await interact( + RustLayout( + trezorui2.request_pin( + prompt=prompt, + subprompt=subprompt, + allow_cancel=allow_cancel, + wrong_pin=wrong_pin, + ) + ), + "pin_device", + ButtonRequestType.PinEntry, ) - result = await ctx_wait(dialog) if result is CANCELLED: raise wire.PinCancelled assert isinstance(result, str) diff --git a/core/src/trezor/ui/layouts/tt_v2/__init__.py b/core/src/trezor/ui/layouts/tt_v2/__init__.py index a5c03b33e..0c38ef996 100644 --- a/core/src/trezor/ui/layouts/tt_v2/__init__.py +++ b/core/src/trezor/ui/layouts/tt_v2/__init__.py @@ -1137,12 +1137,13 @@ def request_passphrase_on_host() -> None: async def request_passphrase_on_device(max_len: int) -> str: - await button_request("passphrase_device", code=ButtonRequestType.PassphraseEntry) - - keyboard = RustLayout( - trezorui2.request_passphrase(prompt="Enter passphrase", max_len=max_len) + result = await interact( + RustLayout( + trezorui2.request_passphrase(prompt="Enter passphrase", max_len=max_len) + ), + "passphrase_device", + ButtonRequestType.PassphraseEntry, ) - result = await ctx_wait(keyboard) if result is CANCELLED: raise ActionCancelled("Passphrase entry cancelled") @@ -1158,8 +1159,6 @@ async def request_pin_on_device( ) -> str: from trezor.wire import PinCancelled - await button_request("pin_device", code=ButtonRequestType.PinEntry) - if attempts_remaining is None: subprompt = "" elif attempts_remaining == 1: @@ -1167,15 +1166,18 @@ async def request_pin_on_device( else: subprompt = f"{attempts_remaining} tries left" - dialog = RustLayout( - trezorui2.request_pin( - prompt=prompt, - subprompt=subprompt, - allow_cancel=allow_cancel, - wrong_pin=wrong_pin, - ) + result = await interact( + RustLayout( + trezorui2.request_pin( + prompt=prompt, + subprompt=subprompt, + allow_cancel=allow_cancel, + wrong_pin=wrong_pin, + ) + ), + "pin_device", + ButtonRequestType.PinEntry, ) - result = await ctx_wait(dialog) if result is CANCELLED: raise PinCancelled assert isinstance(result, str)