Skip to content

Commit ec38afd

Browse files
committed
Invalid pin config logic & dialog
1 parent d3dc37b commit ec38afd

File tree

3 files changed

+32
-58
lines changed

3 files changed

+32
-58
lines changed

scenes/mag_scene_config.h

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ ADD_SCENE(mag, start, Start)
22
ADD_SCENE(mag, about, About)
33
ADD_SCENE(mag, read, Read)
44
ADD_SCENE(mag, settings, Settings)
5-
ADD_SCENE(mag, settings_invalid, SettingsInvalid)
65
ADD_SCENE(mag, emulate, Emulate)
76
ADD_SCENE(mag, emulate_config, EmulateConfig)
87
ADD_SCENE(mag, file_select, FileSelect)

scenes/mag_scene_settings.c

+32-7
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,43 @@ void mag_scene_settings_on_enter(void* context) {
6363
view_dispatcher_switch_to_view(mag->view_dispatcher, MagViewVariableItemList);
6464
}
6565

66+
void mag_scene_invalid_dialog(Mag* mag) {
67+
SceneManager* scene_manager = mag->scene_manager;
68+
69+
DialogMessage* message = dialog_message_alloc();
70+
71+
dialog_message_set_header(message, "Invalid Pin Configuration!", 64, 0, AlignCenter, AlignTop);
72+
dialog_message_set_buttons(message, "Modify", NULL, "Reset");
73+
dialog_message_set_text(
74+
message,
75+
"Pins cannot overlap\nChange, or reset to defaults.",
76+
64,
77+
32,
78+
AlignCenter,
79+
AlignCenter);
80+
DialogMessageButton res = dialog_message_show(furi_record_open(RECORD_DIALOGS), message);
81+
dialog_message_free(message);
82+
furi_record_close(RECORD_DIALOGS);
83+
if(res == DialogMessageButtonRight) {
84+
mag_state_gpio_reset(&mag->state);
85+
scene_manager_previous_scene(scene_manager);
86+
}
87+
}
88+
6689
bool mag_scene_settings_on_event(void* context, SceneManagerEvent event) {
6790
Mag* mag = context;
6891
SceneManager* scene_manager = mag->scene_manager;
6992
bool consumed = false;
7093

71-
UNUSED(mag);
72-
UNUSED(scene_manager);
73-
UNUSED(event);
94+
if(event.type == SceneManagerEventTypeBack) {
95+
consumed = true;
96+
97+
if(!mag_state_gpio_is_valid(&mag->state)) {
98+
mag_scene_invalid_dialog(mag);
99+
} else {
100+
scene_manager_previous_scene(scene_manager);
101+
}
102+
}
74103

75104
return consumed;
76105
}
@@ -80,9 +109,5 @@ void mag_scene_settings_on_exit(void* context) {
80109

81110
variable_item_list_reset(mag->variable_item_list);
82111

83-
if(!mag_state_gpio_is_valid(&mag->state)) {
84-
scene_manager_next_scene(mag->scene_manager, MagSceneSettingsInvalid);
85-
}
86-
87112
mag_state_save(&mag->state);
88113
}

scenes/mag_scene_settings_invalid.c

-50
This file was deleted.

0 commit comments

Comments
 (0)