@@ -63,14 +63,43 @@ void mag_scene_settings_on_enter(void* context) {
63
63
view_dispatcher_switch_to_view (mag -> view_dispatcher , MagViewVariableItemList );
64
64
}
65
65
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
+
66
89
bool mag_scene_settings_on_event (void * context , SceneManagerEvent event ) {
67
90
Mag * mag = context ;
68
91
SceneManager * scene_manager = mag -> scene_manager ;
69
92
bool consumed = false;
70
93
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
+ }
74
103
75
104
return consumed ;
76
105
}
@@ -80,9 +109,5 @@ void mag_scene_settings_on_exit(void* context) {
80
109
81
110
variable_item_list_reset (mag -> variable_item_list );
82
111
83
- if (!mag_state_gpio_is_valid (& mag -> state )) {
84
- scene_manager_next_scene (mag -> scene_manager , MagSceneSettingsInvalid );
85
- }
86
-
87
112
mag_state_save (& mag -> state );
88
113
}
0 commit comments