Skip to content

Commit 5669ea4

Browse files
authored
Merge pull request #7 from bettse/write_fail
Picopass: Properly indicate write success/failure
2 parents e0ff4ce + adf64fc commit 5669ea4

5 files changed

+74
-5
lines changed

scenes/picopass_scene_config.h

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ADD_SCENE(picopass, delete, Delete)
1111
ADD_SCENE(picopass, delete_success, DeleteSuccess)
1212
ADD_SCENE(picopass, write_card, WriteCard)
1313
ADD_SCENE(picopass, write_card_success, WriteCardSuccess)
14+
ADD_SCENE(picopass, write_card_failure, WriteCardFailure)
1415
ADD_SCENE(picopass, read_factory_success, ReadFactorySuccess)
1516
ADD_SCENE(picopass, write_key, WriteKey)
1617
ADD_SCENE(picopass, key_menu, KeyMenu)

scenes/picopass_scene_start.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ bool picopass_scene_start_on_event(void* context, SceneManagerEvent event) {
5858
consumed = true;
5959
} else if(event.event == SubmenuIndexLoclass) {
6060
scene_manager_set_scene_state(
61-
picopass->scene_manager, PicopassSceneLoclass, PicopassSceneLoclass);
61+
picopass->scene_manager, PicopassSceneStart, PicopassSceneLoclass);
6262
scene_manager_next_scene(picopass->scene_manager, PicopassSceneLoclass);
6363
consumed = true;
6464
}

scenes/picopass_scene_write_card.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
void picopass_write_card_worker_callback(PicopassWorkerEvent event, void* context) {
55
UNUSED(event);
66
Picopass* picopass = context;
7-
view_dispatcher_send_custom_event(picopass->view_dispatcher, PicopassCustomEventWorkerExit);
7+
view_dispatcher_send_custom_event(picopass->view_dispatcher, event);
88
}
99

1010
void picopass_scene_write_card_on_enter(void* context) {
@@ -33,7 +33,10 @@ bool picopass_scene_write_card_on_event(void* context, SceneManagerEvent event)
3333
bool consumed = false;
3434

3535
if(event.type == SceneManagerEventTypeCustom) {
36-
if(event.event == PicopassCustomEventWorkerExit) {
36+
if(event.event == PicopassWorkerEventFail) {
37+
scene_manager_next_scene(picopass->scene_manager, PicopassSceneWriteCardFailure);
38+
consumed = true;
39+
} else if(event.event == PicopassWorkerEventSuccess) {
3740
scene_manager_next_scene(picopass->scene_manager, PicopassSceneWriteCardSuccess);
3841
consumed = true;
3942
}
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include "../picopass_i.h"
2+
#include <dolphin/dolphin.h>
3+
4+
void picopass_scene_write_card_failure_widget_callback(
5+
GuiButtonType result,
6+
InputType type,
7+
void* context) {
8+
furi_assert(context);
9+
Picopass* picopass = context;
10+
11+
if(type == InputTypeShort) {
12+
view_dispatcher_send_custom_event(picopass->view_dispatcher, result);
13+
}
14+
}
15+
16+
void picopass_scene_write_card_failure_on_enter(void* context) {
17+
Picopass* picopass = context;
18+
Widget* widget = picopass->widget;
19+
FuriString* str = furi_string_alloc_set("Write Failure!");
20+
21+
widget_add_button_element(
22+
widget,
23+
GuiButtonTypeLeft,
24+
"Retry",
25+
picopass_scene_write_card_failure_widget_callback,
26+
picopass);
27+
28+
widget_add_button_element(
29+
widget,
30+
GuiButtonTypeRight,
31+
"Menu",
32+
picopass_scene_write_card_failure_widget_callback,
33+
picopass);
34+
35+
widget_add_string_element(
36+
widget, 64, 5, AlignCenter, AlignCenter, FontSecondary, furi_string_get_cstr(str));
37+
38+
furi_string_free(str);
39+
40+
view_dispatcher_switch_to_view(picopass->view_dispatcher, PicopassViewWidget);
41+
}
42+
43+
bool picopass_scene_write_card_failure_on_event(void* context, SceneManagerEvent event) {
44+
Picopass* picopass = context;
45+
bool consumed = false;
46+
47+
if(event.type == SceneManagerEventTypeCustom) {
48+
if(event.event == GuiButtonTypeLeft) {
49+
consumed = scene_manager_previous_scene(picopass->scene_manager);
50+
} else if(event.event == GuiButtonTypeRight) {
51+
// Clear device name
52+
picopass_device_set_name(picopass->dev, "");
53+
consumed = scene_manager_search_and_switch_to_previous_scene(
54+
picopass->scene_manager, PicopassSceneStart);
55+
}
56+
}
57+
return consumed;
58+
}
59+
60+
void picopass_scene_write_card_failure_on_exit(void* context) {
61+
Picopass* picopass = context;
62+
63+
// Clear view
64+
widget_reset(picopass->widget);
65+
}

scenes/picopass_scene_write_card_success.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ bool picopass_scene_write_card_success_on_event(void* context, SceneManagerEvent
5555
} else if(event.event == GuiButtonTypeRight) {
5656
// Clear device name
5757
picopass_device_set_name(picopass->dev, "");
58-
scene_manager_next_scene(picopass->scene_manager, PicopassSceneCardMenu);
59-
consumed = true;
58+
consumed = scene_manager_search_and_switch_to_previous_scene(
59+
picopass->scene_manager, PicopassSceneStart);
6060
}
6161
}
6262
return consumed;

0 commit comments

Comments
 (0)