Skip to content

Commit

Permalink
Merge pull request #7 from bettse/write_fail
Browse files Browse the repository at this point in the history
Picopass: Properly indicate write success/failure
  • Loading branch information
skotopes authored Aug 4, 2023
2 parents 20468a8 + 9df58b6 commit d625492
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 5 deletions.
1 change: 1 addition & 0 deletions picopass/scenes/picopass_scene_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ ADD_SCENE(picopass, delete, Delete)
ADD_SCENE(picopass, delete_success, DeleteSuccess)
ADD_SCENE(picopass, write_card, WriteCard)
ADD_SCENE(picopass, write_card_success, WriteCardSuccess)
ADD_SCENE(picopass, write_card_failure, WriteCardFailure)
ADD_SCENE(picopass, read_factory_success, ReadFactorySuccess)
ADD_SCENE(picopass, write_key, WriteKey)
ADD_SCENE(picopass, key_menu, KeyMenu)
Expand Down
2 changes: 1 addition & 1 deletion picopass/scenes/picopass_scene_start.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ bool picopass_scene_start_on_event(void* context, SceneManagerEvent event) {
consumed = true;
} else if(event.event == SubmenuIndexLoclass) {
scene_manager_set_scene_state(
picopass->scene_manager, PicopassSceneLoclass, PicopassSceneLoclass);
picopass->scene_manager, PicopassSceneStart, PicopassSceneLoclass);
scene_manager_next_scene(picopass->scene_manager, PicopassSceneLoclass);
consumed = true;
}
Expand Down
7 changes: 5 additions & 2 deletions picopass/scenes/picopass_scene_write_card.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
void picopass_write_card_worker_callback(PicopassWorkerEvent event, void* context) {
UNUSED(event);
Picopass* picopass = context;
view_dispatcher_send_custom_event(picopass->view_dispatcher, PicopassCustomEventWorkerExit);
view_dispatcher_send_custom_event(picopass->view_dispatcher, event);
}

void picopass_scene_write_card_on_enter(void* context) {
Expand Down Expand Up @@ -33,7 +33,10 @@ bool picopass_scene_write_card_on_event(void* context, SceneManagerEvent event)
bool consumed = false;

if(event.type == SceneManagerEventTypeCustom) {
if(event.event == PicopassCustomEventWorkerExit) {
if(event.event == PicopassWorkerEventFail) {
scene_manager_next_scene(picopass->scene_manager, PicopassSceneWriteCardFailure);
consumed = true;
} else if(event.event == PicopassWorkerEventSuccess) {
scene_manager_next_scene(picopass->scene_manager, PicopassSceneWriteCardSuccess);
consumed = true;
}
Expand Down
65 changes: 65 additions & 0 deletions picopass/scenes/picopass_scene_write_card_failure.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include "../picopass_i.h"
#include <dolphin/dolphin.h>

void picopass_scene_write_card_failure_widget_callback(
GuiButtonType result,
InputType type,
void* context) {
furi_assert(context);
Picopass* picopass = context;

if(type == InputTypeShort) {
view_dispatcher_send_custom_event(picopass->view_dispatcher, result);
}
}

void picopass_scene_write_card_failure_on_enter(void* context) {
Picopass* picopass = context;
Widget* widget = picopass->widget;
FuriString* str = furi_string_alloc_set("Write Failure!");

widget_add_button_element(
widget,
GuiButtonTypeLeft,
"Retry",
picopass_scene_write_card_failure_widget_callback,
picopass);

widget_add_button_element(
widget,
GuiButtonTypeRight,
"Menu",
picopass_scene_write_card_failure_widget_callback,
picopass);

widget_add_string_element(
widget, 64, 5, AlignCenter, AlignCenter, FontSecondary, furi_string_get_cstr(str));

furi_string_free(str);

view_dispatcher_switch_to_view(picopass->view_dispatcher, PicopassViewWidget);
}

bool picopass_scene_write_card_failure_on_event(void* context, SceneManagerEvent event) {
Picopass* picopass = context;
bool consumed = false;

if(event.type == SceneManagerEventTypeCustom) {
if(event.event == GuiButtonTypeLeft) {
consumed = scene_manager_previous_scene(picopass->scene_manager);
} else if(event.event == GuiButtonTypeRight) {
// Clear device name
picopass_device_set_name(picopass->dev, "");
consumed = scene_manager_search_and_switch_to_previous_scene(
picopass->scene_manager, PicopassSceneStart);
}
}
return consumed;
}

void picopass_scene_write_card_failure_on_exit(void* context) {
Picopass* picopass = context;

// Clear view
widget_reset(picopass->widget);
}
4 changes: 2 additions & 2 deletions picopass/scenes/picopass_scene_write_card_success.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ bool picopass_scene_write_card_success_on_event(void* context, SceneManagerEvent
} else if(event.event == GuiButtonTypeRight) {
// Clear device name
picopass_device_set_name(picopass->dev, "");
scene_manager_next_scene(picopass->scene_manager, PicopassSceneCardMenu);
consumed = true;
consumed = scene_manager_search_and_switch_to_previous_scene(
picopass->scene_manager, PicopassSceneStart);
}
}
return consumed;
Expand Down

0 comments on commit d625492

Please sign in to comment.