show checkmark for non-default values in settings menus

This commit is contained in:
Peter D. Gray 2023-12-08 09:44:22 -05:00
parent 1ad42867bc
commit 913b7304d6
No known key found for this signature in database
GPG Key ID: A2DCD558C2BE5D7C
4 changed files with 48 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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),

View File

@ -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