Merge pull request #563 from alvroble/passphrase-exit-dialog

[Enhancement] Add exit dialog when entering passphrase
This commit is contained in:
Nick Klockenga
2024-07-13 21:56:37 -04:00
committed by GitHub
6 changed files with 54 additions and 12 deletions
+3 -2
View File
@@ -844,17 +844,18 @@ class SeedAddPassphraseScreen(BaseTopNavScreen):
keyboard_swap = False
# Check our two possible exit conditions
# TODO: note the unusual return value, consider refactoring to a Response object in the future
if input == HardwareButtonsConstants.KEY3:
# Save!
# First light up key3
self.hw_button3.is_selected = True
self.hw_button3.render()
self.renderer.show_image()
return self.passphrase
return dict(passphrase=self.passphrase)
elif input == HardwareButtonsConstants.KEY_PRESS and self.top_nav.is_selected:
# Back button clicked
return self.top_nav.selected_button
return dict(passphrase=self.passphrase, is_back_button=True)
# Check for keyboard swaps
if input == HardwareButtonsConstants.KEY1:
+41 -6
View File
@@ -355,20 +355,55 @@ class SeedAddPassphraseView(View):
def run(self):
passphrase_title=self.seed.passphrase_label
ret = self.run_screen(seed_screens.SeedAddPassphraseScreen, passphrase=self.seed.passphrase, title=passphrase_title)
ret_dict = self.run_screen(seed_screens.SeedAddPassphraseScreen, passphrase=self.seed.passphrase, title=passphrase_title)
if ret == RET_CODE__BACK_BUTTON:
return Destination(BackStackView)
# The new passphrase will be the return value; it might be empty.
self.seed.set_passphrase(ret)
if len(self.seed.passphrase) > 0:
self.seed.set_passphrase(ret_dict["passphrase"])
if "is_back_button" in ret_dict:
if len(self.seed.passphrase) > 0:
return Destination(SeedAddPassphraseExitDialogView)
else:
return Destination(BackStackView)
elif len(self.seed.passphrase) > 0:
return Destination(SeedReviewPassphraseView)
else:
return Destination(SeedFinalizeView)
class SeedAddPassphraseExitDialogView(View):
EDIT = "Edit passphrase"
DISCARD = ("Discard passphrase", None, None, "red")
def __init__(self):
super().__init__()
self.seed = self.controller.storage.get_pending_seed()
def run(self):
button_data = [self.EDIT, self.DISCARD]
selected_menu_num = self.run_screen(
WarningScreen,
title="Discard passphrase?",
status_headline=None,
text=f"Your current passphrase entry will be erased",
show_back_button=False,
button_data=button_data,
)
if button_data[selected_menu_num] == self.EDIT:
return Destination(SeedAddPassphraseView)
elif button_data[selected_menu_num] == self.DISCARD:
self.seed.set_passphrase("")
return Destination(SeedFinalizeView)
class SeedReviewPassphraseView(View):
"""
Display the completed passphrase back to the user.
+1
View File
@@ -166,6 +166,7 @@ def test_generate_screenshots(target_locale):
seed_views.SeedMnemonicInvalidView,
seed_views.SeedFinalizeView,
seed_views.SeedAddPassphraseView,
seed_views.SeedAddPassphraseExitDialogView,
seed_views.SeedReviewPassphraseView,
(seed_views.SeedOptionsView, dict(seed_num=0)),
+1 -1
View File
@@ -82,7 +82,7 @@ class TestPSBTFlows(FlowTest):
FlowStep(psbt_views.PSBTSelectSeedView, button_data_selection=psbt_views.PSBTSelectSeedView.SCAN_SEED),
FlowStep(scan_views.ScanSeedQRView, before_run=load_seed_into_decoder),
FlowStep(seed_views.SeedFinalizeView, button_data_selection=SettingsConstants.LABEL__BIP39_PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="abc"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="abc")),
FlowStep(seed_views.SeedReviewPassphraseView, button_data_selection=seed_views.SeedReviewPassphraseView.DONE),
FlowStep(seed_views.SeedOptionsView, is_redirect=True),
FlowStep(psbt_views.PSBTOverviewView),
+7 -2
View File
@@ -41,9 +41,14 @@ class TestSeedFlows(FlowTest):
FlowStep(MainMenuView, button_data_selection=MainMenuView.SCAN),
FlowStep(scan_views.ScanView, before_run=load_seed_into_decoder), # simulate read SeedQR; ret val is ignored
FlowStep(seed_views.SeedFinalizeView, button_data_selection=SettingsConstants.LABEL__BIP39_PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="muhpassphrase"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="muhpassphrase", is_back_button=True)),
FlowStep(seed_views.SeedAddPassphraseExitDialogView, button_data_selection=seed_views.SeedAddPassphraseExitDialogView.DISCARD),
FlowStep(seed_views.SeedFinalizeView, button_data_selection=SettingsConstants.LABEL__BIP39_PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="muhpassphrase", is_back_button=True)),
FlowStep(seed_views.SeedAddPassphraseExitDialogView, button_data_selection=seed_views.SeedAddPassphraseExitDialogView.EDIT),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="muhpassphrase")),
FlowStep(seed_views.SeedReviewPassphraseView, button_data_selection=seed_views.SeedReviewPassphraseView.EDIT),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="muhpassphrase2"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="muhpassphrase")),
FlowStep(seed_views.SeedReviewPassphraseView, button_data_selection=seed_views.SeedReviewPassphraseView.DONE),
FlowStep(seed_views.SeedOptionsView),
])
+1 -1
View File
@@ -65,7 +65,7 @@ class TestToolsFlows(FlowTest):
self.run_sequence(
sequence=[
FlowStep(seed_views.SeedFinalizeView, button_data_selection=SettingsConstants.LABEL__BIP39_PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="mypassphrase"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=dict(passphrase="mypassphrase")),
FlowStep(seed_views.SeedReviewPassphraseView, button_data_selection=seed_views.SeedReviewPassphraseView.DONE),
FlowStep(seed_views.SeedOptionsView, is_redirect=True),
FlowStep(seed_views.SeedExportXpubScriptTypeView),