1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-23 23:08:14 +00:00

refactor(core/ui): use new_lines=False in layouts

This commit is contained in:
Martin Milata 2021-02-25 00:28:04 +01:00 committed by matejcik
parent f39abc8356
commit b7cab90e3c
3 changed files with 57 additions and 49 deletions

View File

@ -5,7 +5,7 @@ from trezor.enums import ButtonRequestType
from trezor.ui.container import Container
from trezor.ui.loader import LoaderDanger
from trezor.ui.qr import Qr
from trezor.utils import chunks
from trezor.utils import chunks, chunks_intersperse
from ..components.common import break_path_to_lines
from ..components.common.confirm import is_confirmed, raise_if_cancelled
@ -33,10 +33,9 @@ if False:
NoReturn,
)
from ..components.common.text import TextContent
ExceptionType = Union[BaseException, Type[BaseException]]
__all__ = (
"confirm_action",
"confirm_reset_device",
@ -148,15 +147,15 @@ async def confirm_reset_device(ctx: wire.GenericContext, prompt: str) -> None:
# TODO cleanup @ redesign
async def confirm_backup(ctx: wire.GenericContext) -> bool:
text1 = Text("Success", ui.ICON_CONFIRM, ui.GREEN)
text1.bold("New wallet created", "successfully!")
text1 = Text("Success", ui.ICON_CONFIRM, ui.GREEN, new_lines=False)
text1.bold("New wallet created successfully!\n")
text1.br_half()
text1.normal("You should back up your", "new wallet right now.")
text1.normal("You should back up your new wallet right now.")
text2 = Text("Warning", ui.ICON_WRONG, ui.RED)
text2.bold("Are you sure you want", "to skip the backup?")
text2 = Text("Warning", ui.ICON_WRONG, ui.RED, new_lines=False)
text2.bold("Are you sure you want to skip the backup?\n")
text2.br_half()
text2.normal("You can back up your", "Trezor once, at any time.")
text2.normal("You can back up your Trezor once, at any time.")
if is_confirmed(
await interact(
@ -207,7 +206,7 @@ def _show_qr(
def _split_address(address: str) -> Iterator[str]:
return chunks(address, MONO_CHARS_PER_LINE)
return chunks_intersperse(address, MONO_CHARS_PER_LINE)
def _truncate_hex(
@ -225,7 +224,7 @@ def _truncate_hex(
)
else:
hex_data = hex_data[: (width * lines - 3)] + "..."
return chunks(hex_data, width)
return chunks_intersperse(hex_data, width)
def _show_address(
@ -233,9 +232,9 @@ def _show_address(
desc: str,
network: str | None = None,
) -> Confirm:
text = Text(desc, ui.ICON_RECEIVE, ui.GREEN)
text = Text(desc, ui.ICON_RECEIVE, ui.GREEN, new_lines=False)
if network is not None:
text.normal("%s network" % network)
text.normal("%s network\n" % network)
text.mono(*_split_address(address))
return Confirm(text, cancel="QR", cancel_style=ButtonDefault)
@ -243,8 +242,8 @@ def _show_address(
def _show_xpub(xpub: str, desc: str, cancel: str) -> Paginated:
pages: list[ui.Component] = []
for lines in chunks(list(chunks(xpub, 16)), 5):
text = Text(desc, ui.ICON_RECEIVE, ui.GREEN)
for lines in chunks(list(chunks_intersperse(xpub, 16)), TEXT_MAX_LINES * 2):
text = Text(desc, ui.ICON_RECEIVE, ui.GREEN, new_lines=False)
text.mono(*lines)
pages.append(text)
@ -440,8 +439,8 @@ async def confirm_output(
address: str,
amount: str,
) -> None:
text = Text("Confirm sending", ui.ICON_SEND, ui.GREEN)
text.normal(amount + " to")
text = Text("Confirm sending", ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal(amount + " to\n")
text.mono(*_split_address(address))
await raise_if_cancelled(
interact(ctx, Confirm(text), "confirm_output", ButtonRequestType.ConfirmOutput)
@ -453,9 +452,9 @@ async def confirm_decred_sstx_submission(
address: str,
amount: str,
) -> None:
text = Text("Purchase ticket", ui.ICON_SEND, ui.GREEN)
text = Text("Purchase ticket", ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal(amount)
text.normal("with voting rights to")
text.normal("\nwith voting rights to\n")
text.mono(*_split_address(address))
await raise_if_cancelled(
interact(
@ -500,10 +499,10 @@ async def confirm_hex(
async def confirm_total(
ctx: wire.GenericContext, total_amount: str, fee_amount: str
) -> None:
text = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN)
text.normal("Total amount:")
text = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal("Total amount:\n")
text.bold(total_amount)
text.normal("including fee:")
text.normal("\nincluding fee:\n")
text.bold(fee_amount)
await raise_if_cancelled(
interact(ctx, HoldToConfirm(text), "confirm_total", ButtonRequestType.SignTx)
@ -513,10 +512,10 @@ async def confirm_total(
async def confirm_joint_total(
ctx: wire.GenericContext, spending_amount: str, total_amount: str
) -> None:
text = Text("Joint transaction", ui.ICON_SEND, ui.GREEN)
text.normal("You are contributing:")
text = Text("Joint transaction", ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal("You are contributing:\n")
text.bold(spending_amount)
text.normal("to the total amount:")
text.normal("\nto the total amount:\n")
text.bold(total_amount)
await raise_if_cancelled(
interact(
@ -545,8 +544,8 @@ async def confirm_metadata(
async def confirm_replacement(
ctx: wire.GenericContext, description: str, txid: str
) -> None:
text = Text(description, ui.ICON_SEND, ui.GREEN)
text.normal("Confirm transaction ID:")
text = Text(description, ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal("Confirm transaction ID:\n")
text.mono(*_truncate_hex(txid, TEXT_MAX_LINES - 1))
await raise_if_cancelled(
interact(ctx, Confirm(text), "confirm_replacement", ButtonRequestType.SignTx)
@ -560,19 +559,19 @@ async def confirm_modify_output(
amount_change: str,
amount_new: str,
) -> None:
page1 = Text("Modify amount", ui.ICON_SEND, ui.GREEN)
page1.normal("Address:")
page1 = Text("Modify amount", ui.ICON_SEND, ui.GREEN, new_lines=False)
page1.normal("Address:\n")
page1.br_half()
page1.mono(*_split_address(address))
page2 = Text("Modify amount", ui.ICON_SEND, ui.GREEN)
page2 = Text("Modify amount", ui.ICON_SEND, ui.GREEN, new_lines=False)
if sign < 0:
page2.normal("Decrease amount by:")
page2.normal("Decrease amount by:\n")
else:
page2.normal("Increase amount by:")
page2.normal("Increase amount by:\n")
page2.bold(amount_change)
page2.br_half()
page2.normal("New amount:")
page2.normal("\nNew amount:\n")
page2.bold(amount_new)
await raise_if_cancelled(
@ -591,17 +590,18 @@ async def confirm_modify_fee(
user_fee_change: str,
total_fee_new: str,
) -> None:
text = Text("Modify fee", ui.ICON_SEND, ui.GREEN)
text = Text("Modify fee", ui.ICON_SEND, ui.GREEN, new_lines=False)
if sign == 0:
text.normal("Your fee did not change.")
text.normal("Your fee did not change.\n")
else:
if sign < 0:
text.normal("Decrease your fee by:")
text.normal("Decrease your fee by:\n")
else:
text.normal("Increase your fee by:")
text.normal("Increase your fee by:\n")
text.bold(user_fee_change)
text.br()
text.br_half()
text.normal("Transaction fee:")
text.normal("Transaction fee:\n")
text.bold(total_fee_new)
await raise_if_cancelled(
interact(ctx, HoldToConfirm(text), "modify_fee", ButtonRequestType.SignTx)
@ -626,15 +626,11 @@ async def confirm_coinjoin(
async def confirm_sign_identity(
ctx: wire.GenericContext, proto: str, identity: str, challenge_visual: str | None
) -> None:
lines: list[TextContent] = []
text = Text("Sign %s" % proto, new_lines=False)
if challenge_visual:
lines.append(challenge_visual)
lines.append(ui.MONO)
lines.extend(chunks(identity, 18))
text = Text("Sign %s" % proto)
text.normal(*lines)
text.normal(challenge_visual)
text.br()
text.mono(*chunks_intersperse(identity, 18))
await raise_if_cancelled(
interact(ctx, Confirm(text), "sign_identity", ButtonRequestType.Other)
)
@ -648,8 +644,8 @@ async def confirm_signverify(
font = ui.MONO
br_type = "verify_message"
text = Text(header)
text.bold("Confirm address:")
text = Text(header, new_lines=False)
text.bold("Confirm address:\n")
text.mono(*_split_address(address))
await raise_if_cancelled(
interact(ctx, Confirm(text), br_type, ButtonRequestType.Other)

View File

@ -113,6 +113,18 @@ def chunks(items: Chunkable, size: int) -> Iterator[Chunkable]:
yield items[i : i + size]
def chunks_intersperse(
items: Chunkable, size: int, sep: str = "\n"
) -> Iterator[Chunkable]:
first = True
for i in range(0, len(items), size):
if not first:
yield sep
else:
first = False
yield items[i : i + size]
if False:
class HashContext(Protocol):

View File

@ -79,7 +79,7 @@ def test_autolock_interrupts_signing(device_handler):
assert "1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1" in layout.text.replace(" ", "")
layout = debug.click(buttons.OK, wait=True)
assert "Total amount: 0.0039 BTC" in layout.text
assert "Total amount: 0.0039 BTC" in layout.text
# wait for autolock to kick in
time.sleep(10.1)