diff --git a/core/src/apps/cardano/layout.py b/core/src/apps/cardano/layout.py index f21d225eb..85d99ed1a 100644 --- a/core/src/apps/cardano/layout.py +++ b/core/src/apps/cardano/layout.py @@ -85,11 +85,14 @@ async def confirm_sending( page1.bold(format_coin_amount(ada_amount)) page1.normal("to") - to_lines = list(chunks(to, 17)) - page1.bold(to_lines[0]) - - comp: ui.Component = page1 # otherwise `[page1]` is of the wrong type - pages = [comp] + _paginate_lines(to_lines, 1, "Confirm transaction", ui.ICON_SEND) + pages = _paginate_text( + page1, + "Confirm transaction", + ui.ICON_SEND, + to, + lines_per_page=4, + lines_used_on_first_page=3, + ) await require_confirm(ctx, Paginated(pages)) @@ -414,22 +417,8 @@ async def confirm_catalyst_registration( page4 = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN) page4.normal("Rewards go to:") - lines_per_page = 5 - lines_used_on_first_page = 1 - address_lines = list(chunks(reward_address, 17)) - - for address_line in address_lines[: lines_per_page - lines_used_on_first_page]: - page4.bold(address_line) - pages.append(page4) - pages.extend( - _paginate_lines( - address_lines, - lines_per_page - lines_used_on_first_page, - "Confirm transaction", - ui.ICON_SEND, - 5, - ) + _paginate_text(page4, "Confirm transaction", ui.ICON_SEND, reward_address) ) last_page = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN) @@ -479,21 +468,13 @@ async def show_address( lines_per_page, ) - address_lines = list(chunks(address, 17)) - for address_line in address_lines[: lines_per_page - lines_used_on_first_page]: - page1.bold(address_line) - - pages: list[ui.Component] = [] - pages.append(page1) - # append remaining pages containing the rest of the address - pages.extend( - _paginate_lines( - address_lines, - lines_per_page - lines_used_on_first_page, - address_type_label, - ui.ICON_RECEIVE, - lines_per_page, - ) + pages = _paginate_text( + page1, + address_type_label, + ui.ICON_RECEIVE, + address, + lines_per_page=lines_per_page, + lines_used_on_first_page=lines_used_on_first_page, ) return await confirm( @@ -505,14 +486,26 @@ async def show_address( ) -def _paginate_lines( - lines: list[str], offset: int, desc: str, icon: str, lines_per_page: int = 4 +def _paginate_text( + first_page: Text, + page_desc: str, + page_icon: str, + text: str, + lines_per_page: int = 5, + lines_used_on_first_page: int = 1, ) -> list[ui.Component]: - pages: list[ui.Component] = [] + lines = list(chunks(text, 17)) + + offset = lines_per_page - lines_used_on_first_page + + for text_line in lines[:offset]: + first_page.bold(text_line) + + pages: list[ui.Component] = [first_page] if len(lines) > offset: to_pages = list(chunks(lines[offset:], lines_per_page)) for page in to_pages: - t = Text(desc, icon, ui.GREEN) + t = Text(page_desc, page_icon, ui.GREEN) for line in page: t.bold(line) pages.append(t)