mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-29 02:48:18 +00:00
storage: add homescreen
This commit is contained in:
parent
34322d5fb6
commit
a56d322eca
@ -11,6 +11,7 @@ _MNEMONIC = const(0x0002) # str
|
|||||||
_LANGUAGE = const(0x0003) # str
|
_LANGUAGE = const(0x0003) # str
|
||||||
_LABEL = const(0x0004) # str
|
_LABEL = const(0x0004) # str
|
||||||
_USE_PASSPHRASE = const(0x0005) # 0x01 or empty
|
_USE_PASSPHRASE = const(0x0005) # 0x01 or empty
|
||||||
|
_HOMESCREEN = const(0x0006) # bytes
|
||||||
|
|
||||||
|
|
||||||
def get_device_id() -> str:
|
def get_device_id() -> str:
|
||||||
@ -37,18 +38,27 @@ def has_passphrase() -> bool:
|
|||||||
return bool(config.get(_APP, _USE_PASSPHRASE))
|
return bool(config.get(_APP, _USE_PASSPHRASE))
|
||||||
|
|
||||||
|
|
||||||
|
def get_homescreen() -> bytes:
|
||||||
|
return config.get(_APP, _HOMESCREEN)
|
||||||
|
|
||||||
|
|
||||||
def load_mnemonic(mnemonic: str):
|
def load_mnemonic(mnemonic: str):
|
||||||
config.set(_APP, _VERSION, _STORAGE_VERSION)
|
config.set(_APP, _VERSION, _STORAGE_VERSION)
|
||||||
config.set(_APP, _MNEMONIC, mnemonic.encode())
|
config.set(_APP, _MNEMONIC, mnemonic.encode())
|
||||||
|
|
||||||
|
|
||||||
def load_settings(label: str = None, use_passphrase: bool = None):
|
def load_settings(label: str=None, use_passphrase: bool=None, homescreen: bytes=None):
|
||||||
if label is not None:
|
if label is not None:
|
||||||
config.set(_APP, _LABEL, label.encode())
|
config.set(_APP, _LABEL, label.encode())
|
||||||
if use_passphrase is True:
|
if use_passphrase is True:
|
||||||
config.set(_APP, _USE_PASSPHRASE, b'\x01')
|
config.set(_APP, _USE_PASSPHRASE, b'\x01')
|
||||||
if use_passphrase is False:
|
if use_passphrase is False:
|
||||||
config.set(_APP, _USE_PASSPHRASE, b'')
|
config.set(_APP, _USE_PASSPHRASE, b'')
|
||||||
|
if homescreen is not None:
|
||||||
|
if homescreen[:8] == b'TOIf\x90\x00\x90\x00':
|
||||||
|
config.set(_APP, _HOMESCREEN, homescreen)
|
||||||
|
else:
|
||||||
|
config.set(_APP, _HOMESCREEN, b'')
|
||||||
|
|
||||||
|
|
||||||
def wipe():
|
def wipe():
|
||||||
|
@ -20,14 +20,18 @@ async def dim_screen():
|
|||||||
async def display_homescreen():
|
async def display_homescreen():
|
||||||
from apps.common import storage
|
from apps.common import storage
|
||||||
|
|
||||||
image = res.load('apps/homescreen/res/homescreen.toif')
|
|
||||||
ui.display.bar(0, 0, ui.SCREEN, ui.SCREEN, ui.BG)
|
|
||||||
ui.display.avatar((ui.SCREEN - 144) // 2, (ui.SCREEN - 144) // 2 - 10, image, ui.WHITE, ui.BLACK)
|
|
||||||
|
|
||||||
if not storage.is_initialized():
|
if not storage.is_initialized():
|
||||||
label = 'Go to trezor.io/start'
|
label = 'Go to trezor.io/start'
|
||||||
|
image = None
|
||||||
else:
|
else:
|
||||||
label = storage.get_label() or 'My TREZOR'
|
label = storage.get_label() or 'My TREZOR'
|
||||||
|
image = storage.get_homescreen()
|
||||||
|
|
||||||
|
if not image:
|
||||||
|
image = res.load('apps/homescreen/res/homescreen.toif')
|
||||||
|
|
||||||
|
ui.display.bar(0, 0, ui.SCREEN, ui.SCREEN, ui.BG)
|
||||||
|
ui.display.avatar((ui.SCREEN - 144) // 2, (ui.SCREEN - 144) // 2 - 10, image, ui.WHITE, ui.BLACK)
|
||||||
ui.display.text_center(ui.SCREEN // 2, ui.SCREEN - 20, label, ui.BOLD, ui.FG, ui.BG)
|
ui.display.text_center(ui.SCREEN // 2, ui.SCREEN - 20, label, ui.BOLD, ui.FG, ui.BG)
|
||||||
|
|
||||||
await dim_screen()
|
await dim_screen()
|
||||||
|
@ -10,18 +10,20 @@ async def layout_apply_settings(ctx, msg):
|
|||||||
from ..common.confirm import require_confirm
|
from ..common.confirm import require_confirm
|
||||||
from ..common import storage
|
from ..common import storage
|
||||||
|
|
||||||
if msg.homescreen is not None:
|
if msg.homescreen is None and msg.label is None and msg.language is None and msg.use_passphrase is None:
|
||||||
raise wire.FailureError(
|
|
||||||
ProcessError, 'ApplySettings.homescreen is not supported')
|
|
||||||
|
|
||||||
if msg.label is None and msg.language is None and msg.use_passphrase is None:
|
|
||||||
raise wire.FailureError(ProcessError, 'No setting provided')
|
raise wire.FailureError(ProcessError, 'No setting provided')
|
||||||
|
|
||||||
|
if msg.homescreen is not None:
|
||||||
|
await require_confirm(ctx, Text(
|
||||||
|
'Change homescreen', ui.ICON_RESET,
|
||||||
|
'Do you really want to', 'change homescreen?'))
|
||||||
|
|
||||||
if msg.label is not None:
|
if msg.label is not None:
|
||||||
await require_confirm(ctx, Text(
|
await require_confirm(ctx, Text(
|
||||||
'Change label', ui.ICON_RESET,
|
'Change label', ui.ICON_RESET,
|
||||||
'Do you really want to', 'change label to',
|
'Do you really want to', 'change label to',
|
||||||
ui.BOLD, '%s' % msg.label))
|
ui.BOLD, '%s' % msg.label,
|
||||||
|
ui.NORMAL, '?'))
|
||||||
|
|
||||||
if msg.language is not None:
|
if msg.language is not None:
|
||||||
await require_confirm(ctx, Text(
|
await require_confirm(ctx, Text(
|
||||||
@ -39,6 +41,7 @@ async def layout_apply_settings(ctx, msg):
|
|||||||
'encryption?'))
|
'encryption?'))
|
||||||
|
|
||||||
storage.load_settings(label=msg.label,
|
storage.load_settings(label=msg.label,
|
||||||
use_passphrase=msg.use_passphrase)
|
use_passphrase=msg.use_passphrase,
|
||||||
|
homescreen=msg.homescreen)
|
||||||
|
|
||||||
return Success(message='Settings applied')
|
return Success(message='Settings applied')
|
||||||
|
Loading…
Reference in New Issue
Block a user