mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-27 07:40:59 +00:00
Swap path with address type on screen in cardano get address
This commit is contained in:
parent
51246ce52d
commit
638977db7d
@ -1,3 +1,4 @@
|
|||||||
|
import math
|
||||||
from ubinascii import hexlify
|
from ubinascii import hexlify
|
||||||
|
|
||||||
from trezor import ui
|
from trezor import ui
|
||||||
@ -43,6 +44,9 @@ CERTIFICATE_TYPE_NAMES = {
|
|||||||
CardanoCertificateType.STAKE_DELEGATION: "Stake delegation",
|
CardanoCertificateType.STAKE_DELEGATION: "Stake delegation",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Maximum number of characters per line in monospace font.
|
||||||
|
_MAX_MONO_LINE = 18
|
||||||
|
|
||||||
|
|
||||||
def format_coin_amount(amount: int) -> str:
|
def format_coin_amount(amount: int) -> str:
|
||||||
return "%s %s" % (format_amount(amount, 6), "ADA")
|
return "%s %s" % (format_amount(amount, 6), "ADA")
|
||||||
@ -195,18 +199,37 @@ async def show_address(
|
|||||||
Custom show_address function is needed because cardano addresses don't
|
Custom show_address function is needed because cardano addresses don't
|
||||||
fit on a single screen.
|
fit on a single screen.
|
||||||
"""
|
"""
|
||||||
path_str = address_n_to_str(path)
|
|
||||||
t1 = Text(path_str, ui.ICON_RECEIVE, ui.GREEN)
|
address_type_label = "%s address" % ADDRESS_TYPE_NAMES[address_type]
|
||||||
|
t1 = Text(address_type_label, ui.ICON_RECEIVE, ui.GREEN)
|
||||||
|
|
||||||
|
lines_per_page = 5
|
||||||
|
first_page_lines_used = 0
|
||||||
|
|
||||||
|
# assemble first page to be displayed (path + network + whatever part of the address fits)
|
||||||
if network is not None:
|
if network is not None:
|
||||||
t1.normal("%s network" % protocol_magics.to_ui_string(network))
|
t1.normal("%s network" % protocol_magics.to_ui_string(network))
|
||||||
t1.normal("%s address" % ADDRESS_TYPE_NAMES[address_type])
|
first_page_lines_used += 1
|
||||||
|
|
||||||
|
path_str = address_n_to_str(path)
|
||||||
|
t1.mono(path_str)
|
||||||
|
first_page_lines_used = min(
|
||||||
|
first_page_lines_used + math.ceil(len(path_str) / _MAX_MONO_LINE),
|
||||||
|
lines_per_page,
|
||||||
|
)
|
||||||
|
|
||||||
address_lines = list(chunks(address, 17))
|
address_lines = list(chunks(address, 17))
|
||||||
t1.bold(address_lines[0])
|
for address_line in address_lines[: lines_per_page - first_page_lines_used]:
|
||||||
t1.bold(address_lines[1])
|
t1.bold(address_line)
|
||||||
t1.bold(address_lines[2])
|
|
||||||
|
|
||||||
pages = [t1] + _paginate_lines(address_lines, 3, path_str, ui.ICON_RECEIVE)
|
# append remaining pages containing the rest of the address
|
||||||
|
pages = [t1] + _paginate_lines(
|
||||||
|
address_lines,
|
||||||
|
lines_per_page - first_page_lines_used,
|
||||||
|
address_type_label,
|
||||||
|
ui.ICON_RECEIVE,
|
||||||
|
lines_per_page,
|
||||||
|
)
|
||||||
|
|
||||||
return await confirm(
|
return await confirm(
|
||||||
ctx,
|
ctx,
|
||||||
@ -218,11 +241,11 @@ async def show_address(
|
|||||||
|
|
||||||
|
|
||||||
def _paginate_lines(
|
def _paginate_lines(
|
||||||
lines: List[str], offset: int, desc: str, icon: str, per_page: int = 4
|
lines: List[str], offset: int, desc: str, icon: str, lines_per_page: int = 4
|
||||||
) -> List[ui.Component]:
|
) -> List[ui.Component]:
|
||||||
pages = []
|
pages = []
|
||||||
if len(lines) > offset:
|
if len(lines) > offset:
|
||||||
to_pages = list(chunks(lines[offset:], per_page))
|
to_pages = list(chunks(lines[offset:], lines_per_page))
|
||||||
for page in to_pages:
|
for page in to_pages:
|
||||||
t = Text(desc, icon, ui.GREEN)
|
t = Text(desc, icon, ui.GREEN)
|
||||||
for line in page:
|
for line in page:
|
||||||
|
Loading…
Reference in New Issue
Block a user