Add exit dialog when entering passphrase

Fixes / required changes:
* Issue #510 'Behavior of back button confusing when entering password'
* Updated test suite accordingly
This commit is contained in:
alvroble
2024-06-30 13:48:35 +02:00
parent c94725e7fa
commit 59bcfdab7b
6 changed files with 50 additions and 12 deletions
+2 -2
View File
@@ -850,11 +850,11 @@ class SeedAddPassphraseScreen(BaseTopNavScreen):
self.hw_button3.is_selected = True
self.hw_button3.render()
self.renderer.show_image()
return self.passphrase
return self.passphrase, None
elif input == HardwareButtonsConstants.KEY_PRESS and self.top_nav.is_selected:
# Back button clicked
return self.top_nav.selected_button
return self.passphrase, self.top_nav.selected_button
# Check for keyboard swaps
if input == HardwareButtonsConstants.KEY1:
+38 -6
View File
@@ -323,19 +323,51 @@ class SeedAddPassphraseView(View):
def run(self):
ret = self.run_screen(seed_screens.SeedAddPassphraseScreen, passphrase=self.seed.passphrase)
ret_passphrase, ret_btn = self.run_screen(seed_screens.SeedAddPassphraseScreen, passphrase=self.seed.passphrase)
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_passphrase)
if ret_btn == RET_CODE__BACK_BUTTON:
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):
EXIT = ("Exit", None, None, "red")
CONTINUE = "Continue editing"
def __init__(self):
super().__init__()
self.seed = self.controller.storage.get_pending_seed()
def run(self):
passphrase = self.seed.passphrase
button_data = [self.EXIT, self.CONTINUE]
selected_menu_num = self.run_screen(
WarningScreen,
title="Exit",
status_headline=None,
text=f"Please confirm that you want to exit",
show_back_button=False,
button_data=button_data,
)
if button_data[selected_menu_num] == self.EXIT:
self.seed.set_passphrase("")
return Destination(SeedFinalizeView)
elif button_data[selected_menu_num] == self.CONTINUE:
return Destination(SeedAddPassphraseView)
class SeedReviewPassphraseView(View):
"""
+1
View File
@@ -134,6 +134,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
@@ -78,7 +78,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=seed_views.SeedFinalizeView.PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="abc"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=("abc", None)),
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=seed_views.SeedFinalizeView.PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="muhpassphrase"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=("muhpassphrase",RET_CODE__BACK_BUTTON)),
FlowStep(seed_views.SeedAddPassphraseExitDialogView, button_data_selection=seed_views.SeedAddPassphraseExitDialogView.EXIT),
FlowStep(seed_views.SeedFinalizeView, button_data_selection=seed_views.SeedFinalizeView.PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=("muhpassphrase",RET_CODE__BACK_BUTTON)),
FlowStep(seed_views.SeedAddPassphraseExitDialogView, button_data_selection=seed_views.SeedAddPassphraseExitDialogView.CONTINUE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=("muhpassphrase",None)),
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=("muhpassphrase2",None)),
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=seed_views.SeedFinalizeView.PASSPHRASE),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value="mypassphrase"),
FlowStep(seed_views.SeedAddPassphraseView, screen_return_value=("mypassphrase",None)),
FlowStep(seed_views.SeedReviewPassphraseView, button_data_selection=seed_views.SeedReviewPassphraseView.DONE),
FlowStep(seed_views.SeedOptionsView, is_redirect=True),
FlowStep(seed_views.SeedExportXpubScriptTypeView),