You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/core/src/trezor/ui/layouts/progress.py

100 lines
2.9 KiB

from typing import TYPE_CHECKING
import trezorui2
from trezor import TR, config, ui, utils
if TYPE_CHECKING:
from typing import Any
from .common import ProgressLayout
def _storage_message_to_str(message: config.StorageMessage | None) -> str | None:
from trezor import TR
if message is None:
return None
if message == config.StorageMessage.NO_MSG:
return ""
if message == config.StorageMessage.VERIFYING_PIN_MSG:
return TR.storage_msg__title_verifying_pin
if message == config.StorageMessage.PROCESSING_MSG:
return TR.storage_msg__title_processing
if message == config.StorageMessage.STARTING_MSG:
return TR.storage_msg__title_starting
if message == config.StorageMessage.WRONG_PIN_MSG:
return TR.storage_msg__title_wrong_pin
raise RuntimeError # unknown message
class RustProgress:
def __init__(
self,
layout: Any,
):
self.layout = layout
ui.backlight_fade(ui.style.BACKLIGHT_DIM)
self.layout.attach_timer_fn(self.set_timer)
self.layout.paint()
ui.refresh()
ui.backlight_fade(ui.style.BACKLIGHT_NORMAL)
def set_timer(self, token: int, deadline: int) -> None:
raise RuntimeError # progress layouts should not set timers
def report(self, value: int, description: str | None = None):
msg = self.layout.progress_event(value, description or "")
assert msg is None
self.layout.paint()
ui.refresh()
def progress(
description: str | None = None,
title: str | None = None,
indeterminate: bool = False,
) -> ProgressLayout:
if description is None:
description = TR.progress__title_please_wait # def_arg
# elif not utils.MODEL_IS_T2B1:
# TODO: keep this?
# # on TT, uppercase the description which ends up on top of the screen
# # when no title is set
# description = description.upper()
return RustProgress(
layout=trezorui2.show_progress(
description=description,
title=title,
indeterminate=indeterminate,
)
)
def bitcoin_progress(message: str) -> ProgressLayout:
return progress(message)
def coinjoin_progress(message: str) -> ProgressLayout:
return RustProgress(
layout=trezorui2.show_progress_coinjoin(title=message, indeterminate=False)
)
def pin_progress(title: config.StorageMessage, description: str) -> ProgressLayout:
return progress(description=description, title=_storage_message_to_str(title))
if not utils.BITCOIN_ONLY:
def monero_keyimage_sync_progress() -> ProgressLayout:
return progress(TR.progress__syncing)
def monero_live_refresh_progress() -> ProgressLayout:
return progress(TR.progress__refreshing, indeterminate=True)
def monero_transaction_progress_inner() -> ProgressLayout:
return progress(TR.progress__signing_transaction)