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

core: call close_others() in place of ButtonRequest

this makes sense, really: close_others() requests UI exclusivity, and
that is something that generally happens at the same places we emit a
ButtonRequest
This commit is contained in:
matejcik 2020-05-25 12:49:16 +02:00 committed by matejcik
parent 0c3bbef81b
commit 01832d5ae9
7 changed files with 36 additions and 21 deletions

View File

@ -1,3 +1,19 @@
from micropython import const from micropython import const
from trezor import workflow
from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
if False:
from trezor import wire
from trezor.messages.ButtonRequest import EnumTypeButtonRequestType
HARDENED = const(0x80000000) HARDENED = const(0x80000000)
async def button_request(
ctx: wire.GenericContext, code: EnumTypeButtonRequestType = ButtonRequestType.Other
) -> None:
workflow.close_others()
await ctx.call(ButtonRequest(code=code), ButtonAck)

View File

@ -1,12 +1,13 @@
from trezor import wire from trezor import wire
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
from trezor.ui.confirm import CONFIRMED, INFO, Confirm, HoldToConfirm, InfoConfirm from trezor.ui.confirm import CONFIRMED, INFO, Confirm, HoldToConfirm, InfoConfirm
from . import button_request
if __debug__: if __debug__:
from trezor.ui.scroll import Paginated from trezor.ui.scroll import Paginated
if False: if False:
from typing import Any, Callable, Optional from typing import Any, Callable, Optional
from trezor import ui from trezor import ui
@ -25,7 +26,7 @@ async def confirm(
cancel_style: ButtonStyleType = Confirm.DEFAULT_CANCEL_STYLE, cancel_style: ButtonStyleType = Confirm.DEFAULT_CANCEL_STYLE,
major_confirm: bool = False, major_confirm: bool = False,
) -> bool: ) -> bool:
await ctx.call(ButtonRequest(code=code), ButtonAck) await button_request(ctx, code=code)
if content.__class__.__name__ == "Paginated": if content.__class__.__name__ == "Paginated":
# The following works because asserts are omitted in non-debug builds. # The following works because asserts are omitted in non-debug builds.
@ -61,7 +62,7 @@ async def info_confirm(
info: ButtonContent = InfoConfirm.DEFAULT_INFO, info: ButtonContent = InfoConfirm.DEFAULT_INFO,
info_style: ButtonStyleType = InfoConfirm.DEFAULT_INFO_STYLE, info_style: ButtonStyleType = InfoConfirm.DEFAULT_INFO_STYLE,
) -> bool: ) -> bool:
await ctx.call(ButtonRequest(code=code), ButtonAck) await button_request(ctx, code=code)
dialog = InfoConfirm( dialog = InfoConfirm(
content, confirm, confirm_style, cancel, cancel_style, info, info_style content, confirm, confirm_style, cancel, cancel_style, info, info_style
@ -86,7 +87,7 @@ async def hold_to_confirm(
loader_style: LoaderStyleType = HoldToConfirm.DEFAULT_LOADER_STYLE, loader_style: LoaderStyleType = HoldToConfirm.DEFAULT_LOADER_STYLE,
cancel: bool = True, cancel: bool = True,
) -> bool: ) -> bool:
await ctx.call(ButtonRequest(code=code), ButtonAck) await button_request(ctx, code=code)
if content.__class__.__name__ == "Paginated": if content.__class__.__name__ == "Paginated":
# The following works because asserts are omitted in non-debug builds. # The following works because asserts are omitted in non-debug builds.

View File

@ -3,14 +3,14 @@ from micropython import const
import storage.device import storage.device
from trezor import wire, workflow from trezor import wire, workflow
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
from trezor.messages.PassphraseAck import PassphraseAck from trezor.messages.PassphraseAck import PassphraseAck
from trezor.messages.PassphraseRequest import PassphraseRequest from trezor.messages.PassphraseRequest import PassphraseRequest
from trezor.ui import ICON_CONFIG, draw_simple from trezor.ui import ICON_CONFIG, draw_simple
from trezor.ui.passphrase import CANCELLED, PassphraseKeyboard from trezor.ui.passphrase import CANCELLED, PassphraseKeyboard
from trezor.ui.text import Text from trezor.ui.text import Text
from . import button_request
_MAX_PASSPHRASE_LEN = const(50) _MAX_PASSPHRASE_LEN = const(50)
@ -56,7 +56,7 @@ async def _request_on_host(ctx: wire.Context) -> str:
async def _request_on_device(ctx: wire.Context) -> str: async def _request_on_device(ctx: wire.Context) -> str:
await ctx.call(ButtonRequest(code=ButtonRequestType.PassphraseEntry), ButtonAck) await button_request(ctx, code=ButtonRequestType.PassphraseEntry)
keyboard = PassphraseKeyboard("Enter passphrase", _MAX_PASSPHRASE_LEN) keyboard = PassphraseKeyboard("Enter passphrase", _MAX_PASSPHRASE_LEN)
passphrase = await ctx.wait(keyboard) passphrase = await ctx.wait(keyboard)

View File

@ -3,14 +3,13 @@ import utime
import storage.sd_salt import storage.sd_salt
from trezor import config, ui, wire from trezor import config, ui, wire
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
from trezor.pin import pin_to_int from trezor.pin import pin_to_int
from trezor.ui.pin import CANCELLED, PinDialog from trezor.ui.pin import CANCELLED, PinDialog
from trezor.ui.popup import Popup from trezor.ui.popup import Popup
from trezor.ui.text import Text from trezor.ui.text import Text
from apps.common.sdcard import SdCardUnavailable, request_sd_salt from . import button_request
from .sdcard import SdCardUnavailable, request_sd_salt
if False: if False:
from typing import Any, NoReturn, Optional, Tuple from typing import Any, NoReturn, Optional, Tuple
@ -30,7 +29,7 @@ async def request_pin(
attempts_remaining: int = None, attempts_remaining: int = None,
allow_cancel: bool = True, allow_cancel: bool = True,
) -> str: ) -> str:
await ctx.call(ButtonRequest(code=ButtonRequestType.PinEntry), ButtonAck) await button_request(ctx, code=ButtonRequestType.PinEntry)
if attempts_remaining is None: if attempts_remaining is None:
subprompt = None subprompt = None

View File

@ -79,12 +79,12 @@ if __debug__:
content = await layout_change_chan.take() content = await layout_change_chan.take()
await ctx.write(DebugLinkLayout(lines=content)) await ctx.write(DebugLinkLayout(lines=content))
async def dispatch_DebugLinkWatchLayout( # type: ignore async def dispatch_DebugLinkWatchLayout(
ctx: wire.Context, msg: DebugLinkWatchLayout ctx: wire.Context, msg: DebugLinkWatchLayout
) -> Success: ) -> Success:
global watch_layout_changes global watch_layout_changes
layout_change_chan.putters.clear() layout_change_chan.putters.clear()
watch_layout_changes = msg.watch watch_layout_changes = bool(msg.watch)
log.debug(__name__, "Watch layout changes: {}".format(watch_layout_changes)) log.debug(__name__, "Watch layout changes: {}".format(watch_layout_changes))
return Success() return Success()

View File

@ -2,12 +2,11 @@ import storage.recovery
from trezor import strings, ui, wire from trezor import strings, ui, wire
from trezor.crypto.slip39 import MAX_SHARE_COUNT from trezor.crypto.slip39 import MAX_SHARE_COUNT
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
from trezor.ui.scroll import Paginated from trezor.ui.scroll import Paginated
from trezor.ui.text import Text from trezor.ui.text import Text
from trezor.ui.word_select import WordSelector from trezor.ui.word_select import WordSelector
from apps.common import button_request
from apps.common.confirm import confirm, info_confirm, require_confirm from apps.common.confirm import confirm, info_confirm, require_confirm
from apps.common.layout import show_success, show_warning from apps.common.layout import show_success, show_warning
from apps.management import backup_types from apps.management import backup_types
@ -34,7 +33,7 @@ async def confirm_abort(ctx: wire.GenericContext, dry_run: bool = False) -> bool
async def request_word_count(ctx: wire.GenericContext, dry_run: bool) -> int: async def request_word_count(ctx: wire.GenericContext, dry_run: bool) -> int:
await ctx.call(ButtonRequest(code=ButtonRequestType.MnemonicWordCount), ButtonAck) await button_request(ctx, code=ButtonRequestType.MnemonicWordCount)
if dry_run: if dry_run:
text = Text("Seed check", ui.ICON_RECOVERY) text = Text("Seed check", ui.ICON_RECOVERY)
@ -52,7 +51,7 @@ async def request_word_count(ctx: wire.GenericContext, dry_run: bool) -> int:
async def request_mnemonic( async def request_mnemonic(
ctx: wire.GenericContext, word_count: int, backup_type: Optional[EnumTypeBackupType] ctx: wire.GenericContext, word_count: int, backup_type: Optional[EnumTypeBackupType]
) -> Optional[str]: ) -> Optional[str]:
await ctx.call(ButtonRequest(code=ButtonRequestType.MnemonicInput), ButtonAck) await button_request(ctx, code=ButtonRequestType.MnemonicInput)
words = [] # type: List[str] words = [] # type: List[str]
for i in range(word_count): for i in range(word_count):

View File

@ -1,9 +1,9 @@
from trezor import strings, ui, utils from trezor import strings, ui, utils
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.messages.ButtonAck import ButtonAck
from trezor.messages.ButtonRequest import ButtonRequest
from trezor.ui.text import Text from trezor.ui.text import Text
from apps.common import button_request
async def naive_pagination( async def naive_pagination(
ctx, lines, title, icon=ui.ICON_RESET, icon_color=ui.ORANGE, per_page=5 ctx, lines, title, icon=ui.ICON_RESET, icon_color=ui.ORANGE, per_page=5
@ -25,7 +25,7 @@ async def naive_pagination(
paginated = PaginatedWithButtons(pages, one_by_one=True) paginated = PaginatedWithButtons(pages, one_by_one=True)
while True: while True:
await ctx.call(ButtonRequest(code=ButtonRequestType.SignTx), ButtonAck) await button_request(ctx, code=ButtonRequestType.SignTx)
result = await ctx.wait(paginated) result = await ctx.wait(paginated)
if result is CONFIRMED: if result is CONFIRMED:
return True return True