diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 6f199e31bb..cb4c42668a 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -628,7 +628,11 @@ if FROZEN: ] if not SDCARD else [] )) SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/debug/*.py')) - SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/homescreen/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/homescreen/*.py', + exclude=[ + SOURCE_PY_DIR + 'apps/homescreen/device_menu.py', + ] if TREZOR_MODEL != "T3W1" else []) + ) SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/management/*.py', exclude=[ SOURCE_PY_DIR + 'apps/management/sd_protect.py', diff --git a/core/SConscript.unix b/core/SConscript.unix index 559f14c2a8..35152cfb1d 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -680,7 +680,11 @@ if FROZEN: ] if "sd_card" not in FEATURES_AVAILABLE else [] )) SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/debug/*.py')) - SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/homescreen/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/homescreen/*.py', + exclude=[ + SOURCE_PY_DIR + 'apps/homescreen/device_menu.py', + ] if TREZOR_MODEL != "T3W1" else []) + ) SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/management/*.py', exclude=[ SOURCE_PY_DIR + 'apps/management/sd_protect.py', diff --git a/core/src/all_modules.py b/core/src/all_modules.py index 493dc6d5dd..f44ec06a04 100644 --- a/core/src/all_modules.py +++ b/core/src/all_modules.py @@ -367,6 +367,8 @@ apps.debug.load_device import apps.debug.load_device apps.homescreen import apps.homescreen +apps.homescreen.device_menu +import apps.homescreen.device_menu apps.management.apply_flags import apps.management.apply_flags apps.management.apply_settings @@ -375,6 +377,8 @@ apps.management.authenticate_device import apps.management.authenticate_device apps.management.backup_device import apps.management.backup_device +apps.management.ble.pair_new_device +import apps.management.ble.pair_new_device apps.management.change_language import apps.management.change_language apps.management.change_pin diff --git a/core/src/apps/homescreen/__init__.py b/core/src/apps/homescreen/__init__.py index 2ff40323f4..fee3a4ff1f 100644 --- a/core/src/apps/homescreen/__init__.py +++ b/core/src/apps/homescreen/__init__.py @@ -3,9 +3,8 @@ from typing import Coroutine import storage import storage.cache import storage.device -from trezor import config, wire +from trezor import config, utils, wire from trezor.enums import MessageType -from trezor.ui.layouts import raise_if_not_confirmed from trezor.ui.layouts.homescreen import Busyscreen, Homescreen, Lockscreen from apps.base import busy_expiry_ms, lock_device @@ -22,7 +21,7 @@ async def busyscreen() -> None: async def homescreen() -> None: from trezor import TR - from trezorui_api import INFO, show_device_menu + from trezorui_api import INFO if storage.device.is_initialized(): label = storage.device.get_label() @@ -56,36 +55,16 @@ async def homescreen() -> None: ) try: res = await obj.get_result() - if res is INFO: - - ##### MOCK DATA - failed_backup = True - battery_percentage = 22 - paired_devices = ["Suite on my de-Googled Phone"] - ##### - - menu_result = await raise_if_not_confirmed(show_device_menu(failed_backup=failed_backup, battery_percentage=battery_percentage, paired_devices=paired_devices), "device_menu") - print(menu_result) - if menu_result == "DevicePair": - from trezor import ui - import trezorui_api - await raise_if_not_confirmed( - trezorui_api.show_pairing_device_name( - device_name="My Trez", - ), - "device_name" - ) - await raise_if_not_confirmed( - trezorui_api.show_pairing_code( - code="123456", - ), - "pairing_code" - ) - else: - lock_device() finally: obj.__del__() + if utils.INTERNAL_MODEL == "T3W1": + if res is INFO: + from .device_menu import handle_device_menu + + return await handle_device_menu() + lock_device() + async def _lockscreen(screensaver: bool = False) -> None: from apps.base import unlock_device diff --git a/core/src/apps/homescreen/device_menu.py b/core/src/apps/homescreen/device_menu.py new file mode 100644 index 0000000000..045f38b819 --- /dev/null +++ b/core/src/apps/homescreen/device_menu.py @@ -0,0 +1,25 @@ +import trezorui_api +from trezor.ui.layouts import raise_if_not_confirmed + + +async def handle_device_menu() -> None: + # MOCK DATA + failed_backup = True + battery_percentage = 22 + paired_devices = ["Trezor Suite"] + # #### + + menu_result = await raise_if_not_confirmed( + trezorui_api.show_device_menu( + failed_backup=failed_backup, + battery_percentage=battery_percentage, + paired_devices=paired_devices, + ), + None, + ) + if menu_result == "DevicePair": + from apps.management.ble.pair_new_device import pair_new_device + + await pair_new_device() + else: + raise RuntimeError(f"Unknown menu {menu_result}") diff --git a/core/src/apps/management/ble/pair_new_device.py b/core/src/apps/management/ble/pair_new_device.py new file mode 100644 index 0000000000..d80daf0524 --- /dev/null +++ b/core/src/apps/management/ble/pair_new_device.py @@ -0,0 +1,17 @@ +import trezorui_api +from trezor.ui.layouts import interact + + +async def pair_new_device() -> None: + label = "Trezor T3W1" + await interact( + trezorui_api.show_pairing_device_name(device_name=label), + None, + raise_on_cancel=None, # for UI testing + ) + + code = 12345 + await interact( + trezorui_api.show_pairing_code(code=f"{code:0>6}"), + None, + )