show checkmark for non-default values in settings menus
This commit is contained in:
parent
1ad42867bc
commit
913b7304d6
@ -419,11 +419,18 @@ async def show_nickname(nick):
|
||||
|
||||
async def pick_killkey(*a):
|
||||
# Setting: kill seed sometimes (requires mk4)
|
||||
if await ux_show_story('''\
|
||||
if version.has_qwerty:
|
||||
msg = '''\
|
||||
If you press this key at any point during login, \
|
||||
your seed phrase will be immediately wiped.'''
|
||||
else:
|
||||
msg = '''\
|
||||
If you press this key while the anti- phishing words are shown during login, \
|
||||
your seed phrase will be immediately wiped.
|
||||
|
||||
Best if this does not match the first number of the second half of your PIN.''') != 'y':
|
||||
Best if this does not match the first number of the second half of your PIN.'''
|
||||
|
||||
if await ux_show_story(msg) != 'y':
|
||||
return
|
||||
|
||||
from choosers import kill_key_chooser
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#
|
||||
from glob import settings
|
||||
from nvstore import SettingsObject
|
||||
from version import has_qwerty
|
||||
|
||||
def max_fee_chooser():
|
||||
from psbt import DEFAULT_MAX_FEE_PERCENTAGE
|
||||
@ -86,11 +87,16 @@ def kill_key_chooser():
|
||||
# kbtn = single keypress after anti-phishing words will wipe seed
|
||||
|
||||
s = SettingsObject.prelogin()
|
||||
which = s.get('kbtn', -1)
|
||||
del s
|
||||
which = int(which) + 1
|
||||
|
||||
ch = ['Disable'] + [str(d) for d in range(10)]
|
||||
if not has_qwerty:
|
||||
ch = ['Disable'] + [str(d) for d in range(10)]
|
||||
else:
|
||||
ch = ['Disable'] + [chr(65+i) for i in range(26)] + [i for i in '\',./']
|
||||
|
||||
try:
|
||||
which = ch.index(s.get('kbtn', None))
|
||||
except ValueError:
|
||||
which = 0
|
||||
|
||||
def set(idx, text):
|
||||
# save it, but "outside" of login PIN
|
||||
@ -98,7 +104,7 @@ def kill_key_chooser():
|
||||
if idx == 0:
|
||||
s.remove_key('kbtn')
|
||||
else:
|
||||
s.set('kbtn', str(idx-1))
|
||||
s.set('kbtn', text)
|
||||
s.save()
|
||||
del s
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#
|
||||
# flow.py - Menu structure
|
||||
#
|
||||
from menu import MenuItem, ToggleMenuItem
|
||||
from menu import MenuItem, ToggleMenuItem, NonDefaultMenuItem
|
||||
import version, charcodes
|
||||
from glob import settings
|
||||
|
||||
@ -93,12 +93,12 @@ with the Coldcard.''',
|
||||
LoginPrefsMenu = [
|
||||
# xxxxxxxxxxxxxxxx
|
||||
MenuItem('Change Main PIN', f=pin_changer, arg='main'),
|
||||
MenuItem('Trick PINs', menu=trick_pin_menu),
|
||||
MenuItem('Set Nickname', f=pick_nickname),
|
||||
MenuItem('Scramble Keypad', f=pick_scramble),
|
||||
MenuItem('Kill Key', f=pick_killkey),
|
||||
MenuItem('Login Countdown', chooser=countdown_chooser),
|
||||
MenuItem('MicroSD 2FA', menu=microsd_2fa, predicate=se2_and_real_secret),
|
||||
NonDefaultMenuItem('Trick PINs', 'tp', menu=trick_pin_menu),
|
||||
NonDefaultMenuItem('Set Nickname', 'nick', prelogin=True, f=pick_nickname),
|
||||
NonDefaultMenuItem('Scramble Keys', 'rngk', prelogin=True, f=pick_scramble),
|
||||
NonDefaultMenuItem('Kill Key', 'kbtn', prelogin=True, f=pick_killkey),
|
||||
NonDefaultMenuItem('Login Countdown', 'lgto', prelogin=True, chooser=countdown_chooser),
|
||||
NonDefaultMenuItem('MicroSD 2FA', 'sd2fa', menu=microsd_2fa, predicate=se2_and_real_secret),
|
||||
MenuItem('Test Login Now', f=login_now, arg=1),
|
||||
]
|
||||
|
||||
@ -106,7 +106,7 @@ SettingsMenu = [
|
||||
# xxxxxxxxxxxxxxxx
|
||||
MenuItem('Login Settings', menu=LoginPrefsMenu),
|
||||
MenuItem('Hardware On/Off', menu=HWTogglesMenu),
|
||||
MenuItem('Multisig Wallets', menu=make_multisig_menu),
|
||||
NonDefaultMenuItem('Multisig Wallets', 'multisig', menu=make_multisig_menu),
|
||||
MenuItem('Display Units', chooser=value_resolution_chooser),
|
||||
MenuItem('Max Network Fee', chooser=max_fee_chooser),
|
||||
MenuItem('Idle Timeout', chooser=idle_timeout_chooser),
|
||||
|
||||
@ -105,6 +105,26 @@ class MenuItem:
|
||||
if m:
|
||||
the_ux.push(m)
|
||||
|
||||
class NonDefaultMenuItem(MenuItem):
|
||||
# Show a checkmark if setting is defined and not the default ... so know know it's set
|
||||
def __init__(self, label, nvkey, prelogin=False, default_value=None, **kws):
|
||||
super().__init__(label, **kws)
|
||||
self.nvkey = nvkey
|
||||
self.prelogin = prelogin
|
||||
self.def_value = default_value # treated the same as missing
|
||||
|
||||
def is_chosen(self):
|
||||
# should we show a check in parent menu?
|
||||
if self.prelogin:
|
||||
from nvstore import SettingsObject
|
||||
s = SettingsObject.prelogin()
|
||||
else:
|
||||
from glob import settings
|
||||
s = settings
|
||||
|
||||
return bool(s.get(self.nvkey, self.def_value))
|
||||
|
||||
|
||||
class ToggleMenuItem(MenuItem):
|
||||
# Handle toggles: must use undefined (missing) as default
|
||||
# - can remap values a little, but default is to store 0/1/2
|
||||
|
||||
Loading…
Reference in New Issue
Block a user