mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-22 06:18:07 +00:00
chore(core/ui): unify UI2 layouts that raise when not confirmed
[no changelog]
This commit is contained in:
parent
23a0a37a45
commit
be93dad604
@ -9,14 +9,16 @@ import trezorui2
|
||||
from ..common import button_request, interact
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Awaitable, Iterable, NoReturn, Sequence
|
||||
from typing import Any, Awaitable, Iterable, NoReturn, Sequence, TypeVar
|
||||
|
||||
from ..common import PropertyType, ExceptionType
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
class _RustLayout(ui.Layout):
|
||||
# pylint: disable=super-init-not-called
|
||||
def __init__(self, layout: Any, is_backup=False):
|
||||
def __init__(self, layout: Any, is_backup: bool = False):
|
||||
self.layout = layout
|
||||
self.timer = loop.Timer()
|
||||
self.layout.attach_timer_fn(self.set_timer)
|
||||
@ -46,9 +48,9 @@ class _RustLayout(ui.Layout):
|
||||
)
|
||||
|
||||
def read_content(self) -> list[str]:
|
||||
result = []
|
||||
result: list[str] = []
|
||||
|
||||
def callback(*args):
|
||||
def callback(*args: Any) -> None:
|
||||
for arg in args:
|
||||
result.append(str(arg))
|
||||
|
||||
@ -97,7 +99,7 @@ class _RustLayout(ui.Layout):
|
||||
end = ">"
|
||||
start_pos = content.index(start)
|
||||
end_pos = content.index(end, start_pos)
|
||||
words = []
|
||||
words: list[str] = []
|
||||
for line in content[start_pos + len(start) : end_pos].split("\n"):
|
||||
line = line.strip()
|
||||
if not line:
|
||||
@ -158,6 +160,13 @@ class _RustLayout(ui.Layout):
|
||||
return self.layout.page_count()
|
||||
|
||||
|
||||
async def raise_if_not_confirmed(a: Awaitable[T], exc: Any = wire.ActionCancelled) -> T:
|
||||
result = await a
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise exc
|
||||
return result
|
||||
|
||||
|
||||
async def confirm_action(
|
||||
ctx: wire.GenericContext,
|
||||
br_type: str,
|
||||
@ -189,24 +198,25 @@ async def confirm_action(
|
||||
log.error(__name__, "confirm_action description_param_font not implemented")
|
||||
description = description.format(description_param)
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_action(
|
||||
title=title.upper(),
|
||||
action=action,
|
||||
description=description,
|
||||
verb=verb,
|
||||
verb_cancel=verb_cancel,
|
||||
hold=hold,
|
||||
reverse=reverse,
|
||||
)
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_action(
|
||||
title=title.upper(),
|
||||
action=action,
|
||||
description=description,
|
||||
verb=verb,
|
||||
verb_cancel=verb_cancel,
|
||||
hold=hold,
|
||||
reverse=reverse,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
exc,
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise exc
|
||||
|
||||
|
||||
async def confirm_reset_device(
|
||||
@ -217,19 +227,21 @@ async def confirm_reset_device(
|
||||
else:
|
||||
title = "CREATE NEW WALLET"
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_reset_device(
|
||||
title=title.upper(),
|
||||
prompt=prompt.replace("\n", " "),
|
||||
)
|
||||
),
|
||||
"recover_device" if recovery else "setup_device",
|
||||
ButtonRequestType.ProtectCall if recovery else ButtonRequestType.ResetDevice,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_reset_device(
|
||||
title=title.upper(),
|
||||
prompt=prompt.replace("\n", " "),
|
||||
)
|
||||
),
|
||||
"recover_device" if recovery else "setup_device",
|
||||
ButtonRequestType.ProtectCall
|
||||
if recovery
|
||||
else ButtonRequestType.ResetDevice,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
# TODO cleanup @ redesign
|
||||
@ -271,19 +283,19 @@ async def confirm_backup(ctx: wire.GenericContext) -> bool:
|
||||
async def confirm_path_warning(
|
||||
ctx: wire.GenericContext, path: str, path_type: str = "Path"
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_warning(
|
||||
title="Unknown path",
|
||||
description=path,
|
||||
)
|
||||
),
|
||||
"path_warning",
|
||||
ButtonRequestType.UnknownDerivationPath,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_warning(
|
||||
title="Unknown path",
|
||||
description=path,
|
||||
)
|
||||
),
|
||||
"path_warning",
|
||||
ButtonRequestType.UnknownDerivationPath,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
def _show_xpub(xpub: str, title: str, cancel: str) -> ui.Layout:
|
||||
@ -300,14 +312,14 @@ def _show_xpub(xpub: str, title: str, cancel: str) -> ui.Layout:
|
||||
async def show_xpub(
|
||||
ctx: wire.GenericContext, xpub: str, title: str, cancel: str
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_show_xpub(xpub, title, cancel),
|
||||
"show_xpub",
|
||||
ButtonRequestType.PublicKey,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_show_xpub(xpub, title, cancel),
|
||||
"show_xpub",
|
||||
ButtonRequestType.PublicKey,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def show_address(
|
||||
@ -423,21 +435,21 @@ async def show_warning(
|
||||
icon: str = ui.ICON_WRONG,
|
||||
icon_color: int = ui.RED,
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_warning(
|
||||
title=content.replace("\n", " "),
|
||||
description=subheader or "",
|
||||
button=button.upper(),
|
||||
allow_cancel=False,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_warning(
|
||||
title=content.replace("\n", " "),
|
||||
description=subheader or "",
|
||||
button=button.upper(),
|
||||
allow_cancel=False,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def show_success(
|
||||
@ -447,21 +459,21 @@ async def show_success(
|
||||
subheader: str | None = None,
|
||||
button: str = "CONTINUE",
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_success(
|
||||
title=content.replace("\n", " "),
|
||||
description=subheader or "",
|
||||
button=button.upper(),
|
||||
allow_cancel=False,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Success,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.show_success(
|
||||
title=content.replace("\n", " "),
|
||||
description=subheader or "",
|
||||
button=button.upper(),
|
||||
allow_cancel=False,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Success,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_output(
|
||||
@ -483,35 +495,35 @@ async def confirm_output(
|
||||
if title.startswith("CONFIRM "):
|
||||
title = title[len("CONFIRM ") :]
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title,
|
||||
description="To:",
|
||||
value=address,
|
||||
)
|
||||
),
|
||||
"confirm_output",
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title,
|
||||
description="To:",
|
||||
value=address,
|
||||
)
|
||||
),
|
||||
"confirm_output",
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title,
|
||||
description="Amount:",
|
||||
value=amount,
|
||||
)
|
||||
),
|
||||
"confirm_output",
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title,
|
||||
description="Amount:",
|
||||
value=amount,
|
||||
)
|
||||
),
|
||||
"confirm_output",
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_payment_request(
|
||||
@ -605,22 +617,22 @@ async def confirm_blob(
|
||||
if isinstance(data, bytes):
|
||||
data = hexlify(data).decode()
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title.upper(),
|
||||
description=description or "",
|
||||
data=data,
|
||||
ask_pagination=ask_pagination,
|
||||
hold=hold,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title.upper(),
|
||||
description=description or "",
|
||||
data=data,
|
||||
ask_pagination=ask_pagination,
|
||||
hold=hold,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
def confirm_address(
|
||||
@ -706,53 +718,54 @@ async def confirm_total(
|
||||
br_type: str = "confirm_total",
|
||||
br_code: ButtonRequestType = ButtonRequestType.SignTx,
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title.upper(),
|
||||
description="Fee:",
|
||||
value=fee_amount,
|
||||
)
|
||||
),
|
||||
"confirm_total",
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_output(
|
||||
title=title.upper(),
|
||||
description="Fee:",
|
||||
value=fee_amount,
|
||||
)
|
||||
),
|
||||
"confirm_total",
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_total(
|
||||
title=title.upper(),
|
||||
description="Total amount:",
|
||||
value=total_amount,
|
||||
)
|
||||
),
|
||||
"confirm_total",
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_total(
|
||||
title=title.upper(),
|
||||
description="Total amount:",
|
||||
value=total_amount,
|
||||
)
|
||||
),
|
||||
"confirm_total",
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_joint_total(
|
||||
ctx: wire.GenericContext, spending_amount: str, total_amount: str
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_joint_total(
|
||||
spending_amount=spending_amount,
|
||||
total_amount=total_amount,
|
||||
)
|
||||
),
|
||||
"confirm_joint_total",
|
||||
ButtonRequestType.SignTx,
|
||||
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_joint_total(
|
||||
spending_amount=spending_amount,
|
||||
total_amount=total_amount,
|
||||
)
|
||||
),
|
||||
"confirm_joint_total",
|
||||
ButtonRequestType.SignTx,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_metadata(
|
||||
@ -794,34 +807,33 @@ async def confirm_metadata(
|
||||
hold=hold,
|
||||
)
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(layout),
|
||||
br_type,
|
||||
br_code,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(layout),
|
||||
br_type,
|
||||
br_code,
|
||||
)
|
||||
)
|
||||
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_replacement(
|
||||
ctx: wire.GenericContext, description: str, txid: str
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=description.upper(),
|
||||
description="Confirm transaction ID:",
|
||||
data=txid,
|
||||
)
|
||||
),
|
||||
"confirm_replacement",
|
||||
ButtonRequestType.SignTx,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=description.upper(),
|
||||
description="Confirm transaction ID:",
|
||||
data=txid,
|
||||
)
|
||||
),
|
||||
"confirm_replacement",
|
||||
ButtonRequestType.SignTx,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_modify_output(
|
||||
@ -831,21 +843,21 @@ async def confirm_modify_output(
|
||||
amount_change: str,
|
||||
amount_new: str,
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_modify_output(
|
||||
address=address,
|
||||
sign=sign,
|
||||
amount_change=amount_change,
|
||||
amount_new=amount_new,
|
||||
)
|
||||
),
|
||||
"modify_output",
|
||||
ButtonRequestType.ConfirmOutput,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_modify_output(
|
||||
address=address,
|
||||
sign=sign,
|
||||
amount_change=amount_change,
|
||||
amount_new=amount_new,
|
||||
)
|
||||
),
|
||||
"modify_output",
|
||||
ButtonRequestType.ConfirmOutput,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_modify_fee(
|
||||
@ -855,39 +867,39 @@ async def confirm_modify_fee(
|
||||
total_fee_new: str,
|
||||
fee_rate_amount: str | None = None,
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_modify_fee(
|
||||
sign=sign,
|
||||
user_fee_change=user_fee_change,
|
||||
total_fee_new=total_fee_new,
|
||||
)
|
||||
),
|
||||
"modify_fee",
|
||||
ButtonRequestType.SignTx,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_modify_fee(
|
||||
sign=sign,
|
||||
user_fee_change=user_fee_change,
|
||||
total_fee_new=total_fee_new,
|
||||
)
|
||||
),
|
||||
"modify_fee",
|
||||
ButtonRequestType.SignTx,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def confirm_coinjoin(
|
||||
ctx: wire.GenericContext, coin_name: str, max_rounds: int, max_fee_per_vbyte: str
|
||||
) -> None:
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_coinjoin(
|
||||
coin_name=coin_name,
|
||||
max_rounds=str(max_rounds),
|
||||
max_feerate=f"{max_fee_per_vbyte} sats/vbyte",
|
||||
)
|
||||
),
|
||||
"coinjoin_final",
|
||||
ButtonRequestType.Other,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_coinjoin(
|
||||
coin_name=coin_name,
|
||||
max_rounds=str(max_rounds),
|
||||
max_feerate=f"{max_fee_per_vbyte} sats/vbyte",
|
||||
)
|
||||
),
|
||||
"coinjoin_final",
|
||||
ButtonRequestType.Other,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
# TODO cleanup @ redesign
|
||||
@ -907,35 +919,35 @@ async def confirm_signverify(
|
||||
title = f"SIGN {coin} MESSAGE"
|
||||
br_type = "sign_message"
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title,
|
||||
description="Confirm address:",
|
||||
data=address,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Other,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title,
|
||||
description="Confirm address:",
|
||||
data=address,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Other,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
result = await interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title,
|
||||
description="Confirm message:",
|
||||
data=message,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Other,
|
||||
await raise_if_not_confirmed(
|
||||
interact(
|
||||
ctx,
|
||||
_RustLayout(
|
||||
trezorui2.confirm_blob(
|
||||
title=title,
|
||||
description="Confirm message:",
|
||||
data=message,
|
||||
)
|
||||
),
|
||||
br_type,
|
||||
ButtonRequestType.Other,
|
||||
)
|
||||
)
|
||||
if result is not trezorui2.CONFIRMED:
|
||||
raise wire.ActionCancelled
|
||||
|
||||
|
||||
async def show_popup(
|
||||
@ -946,7 +958,7 @@ async def show_popup(
|
||||
timeout_ms: int = 3000,
|
||||
) -> None:
|
||||
if subtitle:
|
||||
title += f"\n{subtitle}".format(subtitle)
|
||||
title += f"\n{subtitle}"
|
||||
await _RustLayout(
|
||||
trezorui2.show_error(
|
||||
title=title,
|
||||
|
Loading…
Reference in New Issue
Block a user