diff --git a/scenes/seader_scene_card_menu.c b/scenes/seader_scene_card_menu.c index f1ef30b..0c7915e 100644 --- a/scenes/seader_scene_card_menu.c +++ b/scenes/seader_scene_card_menu.c @@ -60,32 +60,27 @@ bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state( seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSave); seader->credential->save_format = SeaderCredentialSaveFormatAgnostic; - scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); - consumed = true; + consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionPrepareSave); } else if(event.event == SubmenuIndexSavePicopass) { scene_manager_set_scene_state( seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSavePicopass); seader->credential->save_format = SeaderCredentialSaveFormatPicopass; - scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); - consumed = true; + consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionPrepareSave); } else if(event.event == SubmenuIndexSaveRFID) { scene_manager_set_scene_state( seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveRFID); seader->credential->save_format = SeaderCredentialSaveFormatRFID; - scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); - consumed = true; + consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionPrepareSave); } else if(event.event == SubmenuIndexSaveSR) { scene_manager_set_scene_state( seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveSR); seader->credential->save_format = SeaderCredentialSaveFormatSR; - scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); - consumed = true; + consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionPrepareSave); } else if(event.event == SubmenuIndexSaveMFC) { scene_manager_set_scene_state( seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveMFC); seader->credential->save_format = SeaderCredentialSaveFormatMFC; - scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); - consumed = true; + consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionPrepareSave); } } else if(event.type == SceneManagerEventTypeBack) { consumed = scene_manager_previous_scene(seader->scene_manager); diff --git a/seader.c b/seader.c index 02d7c03..e65f9b9 100644 --- a/seader.c +++ b/seader.c @@ -1412,6 +1412,9 @@ bool seader_hf_finish_teardown_action(Seader* seader) { seader->board_status = SeaderBoardStatusRetryRequested; scene_manager_next_scene(seader->scene_manager, SeaderSceneStart); return true; + case SeaderHfTeardownActionPrepareSave: + scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName); + return true; case SeaderHfTeardownActionRestartRead: scene_manager_next_scene(seader->scene_manager, SeaderSceneRead); return true; diff --git a/seader.h b/seader.h index 94cebf7..64eadf6 100644 --- a/seader.h +++ b/seader.h @@ -27,6 +27,7 @@ typedef enum { SeaderHfTeardownActionSamPresent, SeaderHfTeardownActionBoardMissing, SeaderHfTeardownActionAutoRecover, + SeaderHfTeardownActionPrepareSave, SeaderHfTeardownActionRestartRead, SeaderHfTeardownActionStopApp, } SeaderHfTeardownAction;