64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
from enum import Enum, auto
|
|
from typing import List
|
|
from ragger.firmware import Firmware
|
|
from ragger.navigator import Navigator, NavInsID, NavIns
|
|
|
|
class SettingID(Enum):
|
|
BLIND_SIGNING = auto()
|
|
DEBUG_DATA = auto()
|
|
NONCE = auto()
|
|
VERBOSE_EIP712 = auto()
|
|
VERBOSE_ENS = auto()
|
|
|
|
def get_device_settings(device: str) -> list[SettingID]:
|
|
if device == "nanos":
|
|
return [
|
|
SettingID.BLIND_SIGNING,
|
|
SettingID.DEBUG_DATA,
|
|
SettingID.NONCE
|
|
]
|
|
if (device == "nanox") or (device == "nanosp") or (device == "stax"):
|
|
return [
|
|
SettingID.BLIND_SIGNING,
|
|
SettingID.DEBUG_DATA,
|
|
SettingID.NONCE,
|
|
SettingID.VERBOSE_EIP712,
|
|
SettingID.VERBOSE_ENS
|
|
]
|
|
return []
|
|
|
|
settings_per_page = 3
|
|
|
|
def get_setting_position(device: str, setting: NavInsID) -> tuple[int, int]:
|
|
screen_height = 672 # px
|
|
header_height = 85 # px
|
|
footer_height = 124 # px
|
|
usable_height = screen_height - (header_height + footer_height)
|
|
setting_height = usable_height // settings_per_page
|
|
index_in_page = get_device_settings(device).index(setting) % settings_per_page
|
|
return 350, header_height + (setting_height * index_in_page) + (setting_height // 2)
|
|
|
|
def settings_toggle(fw: Firmware, nav: Navigator, to_toggle: list[SettingID]):
|
|
moves = list()
|
|
settings = get_device_settings(fw.device)
|
|
# Assume the app is on the home page
|
|
if fw.device.startswith("nano"):
|
|
moves += [NavInsID.RIGHT_CLICK] * 2
|
|
moves += [NavInsID.BOTH_CLICK]
|
|
for setting in settings:
|
|
if setting in to_toggle:
|
|
moves += [NavInsID.BOTH_CLICK]
|
|
moves += [NavInsID.RIGHT_CLICK]
|
|
moves += [NavInsID.BOTH_CLICK] # Back
|
|
else:
|
|
moves += [NavInsID.USE_CASE_HOME_SETTINGS]
|
|
moves += [NavInsID.USE_CASE_SETTINGS_NEXT]
|
|
for setting in settings:
|
|
setting_idx = settings.index(setting)
|
|
if (setting_idx > 0) and (setting_idx % settings_per_page) == 0:
|
|
moves += [NavInsID.USE_CASE_SETTINGS_NEXT]
|
|
if setting in to_toggle:
|
|
moves += [NavIns(NavInsID.TOUCH, get_setting_position(fw.device, setting))]
|
|
moves += [NavInsID.USE_CASE_SETTINGS_MULTI_PAGE_EXIT]
|
|
nav.navigate(moves, screen_change_before_first_instruction=False)
|