فهرست منبع

Invalid pin config logic & dialog

Zachary Weiss 1 سال پیش
والد
کامیت
ec38afd4ff
3فایلهای تغییر یافته به همراه32 افزوده شده و 58 حذف شده
  1. 0 1
      scenes/mag_scene_config.h
  2. 32 7
      scenes/mag_scene_settings.c
  3. 0 50
      scenes/mag_scene_settings_invalid.c

+ 0 - 1
scenes/mag_scene_config.h

@@ -2,7 +2,6 @@ ADD_SCENE(mag, start, Start)
 ADD_SCENE(mag, about, About)
 ADD_SCENE(mag, read, Read)
 ADD_SCENE(mag, settings, Settings)
-ADD_SCENE(mag, settings_invalid, SettingsInvalid)
 ADD_SCENE(mag, emulate, Emulate)
 ADD_SCENE(mag, emulate_config, EmulateConfig)
 ADD_SCENE(mag, file_select, FileSelect)

+ 32 - 7
scenes/mag_scene_settings.c

@@ -63,14 +63,43 @@ void mag_scene_settings_on_enter(void* context) {
     view_dispatcher_switch_to_view(mag->view_dispatcher, MagViewVariableItemList);
 }
 
+void mag_scene_invalid_dialog(Mag* mag) {
+    SceneManager* scene_manager = mag->scene_manager;
+
+    DialogMessage* message = dialog_message_alloc();
+
+    dialog_message_set_header(message, "Invalid Pin Configuration!", 64, 0, AlignCenter, AlignTop);
+    dialog_message_set_buttons(message, "Modify", NULL, "Reset");
+    dialog_message_set_text(
+        message,
+        "Pins cannot overlap\nChange, or reset to defaults.",
+        64,
+        32,
+        AlignCenter,
+        AlignCenter);
+    DialogMessageButton res = dialog_message_show(furi_record_open(RECORD_DIALOGS), message);
+    dialog_message_free(message);
+    furi_record_close(RECORD_DIALOGS);
+    if(res == DialogMessageButtonRight) {
+        mag_state_gpio_reset(&mag->state);
+        scene_manager_previous_scene(scene_manager);
+    }
+}
+
 bool mag_scene_settings_on_event(void* context, SceneManagerEvent event) {
     Mag* mag = context;
     SceneManager* scene_manager = mag->scene_manager;
     bool consumed = false;
 
-    UNUSED(mag);
-    UNUSED(scene_manager);
-    UNUSED(event);
+    if(event.type == SceneManagerEventTypeBack) {
+        consumed = true;
+
+        if(!mag_state_gpio_is_valid(&mag->state)) {
+            mag_scene_invalid_dialog(mag);
+        } else {
+            scene_manager_previous_scene(scene_manager);
+        }
+    }
 
     return consumed;
 }
@@ -80,9 +109,5 @@ void mag_scene_settings_on_exit(void* context) {
 
     variable_item_list_reset(mag->variable_item_list);
 
-    if(!mag_state_gpio_is_valid(&mag->state)) {
-        scene_manager_next_scene(mag->scene_manager, MagSceneSettingsInvalid);
-    }
-
     mag_state_save(&mag->state);
 }

+ 0 - 50
scenes/mag_scene_settings_invalid.c

@@ -1,50 +0,0 @@
-#include "../mag_i.h"
-#include "../helpers/mag_helpers.h"
-
-void mag_scene_settings_invalid_on_enter(void* context) {
-    Mag* mag = context;
-    Widget* widget = mag->widget;
-
-    FuriString* tmp_str;
-    tmp_str = furi_string_alloc();
-
-    furi_string_printf(tmp_str, "\e#Invalid Pin Configuration!#\e");
-
-    //TODO: print concise summary of data on card? Would need to vary by card/track type
-
-    widget_add_text_box_element(
-        widget, 0, 0, 128, 27, AlignCenter, AlignCenter, furi_string_get_cstr(tmp_str), true);
-    widget_add_button_element(widget, GuiButtonTypeLeft, "Modify", mag_widget_callback, mag);
-    widget_add_button_element(widget, GuiButtonTypeRight, "Reset", mag_widget_callback, mag);
-
-    view_dispatcher_switch_to_view(mag->view_dispatcher, MagViewWidget);
-
-    furi_string_free(tmp_str);
-}
-
-bool mag_scene_settings_invalid_on_event(void* context, SceneManagerEvent event) {
-    Mag* mag = context;
-    SceneManager* scene_manager = mag->scene_manager;
-    bool consumed = false;
-
-    if(event.type == SceneManagerEventTypeCustom) {
-        if(event.event == GuiButtonTypeRight) {
-            consumed = true;
-            // reset to defaults here
-            // once impl'd saved settings, reset to last save? or still to defaults?
-            mag_state_gpio_reset(&mag->state);
-
-            scene_manager_search_and_switch_to_previous_scene(mag->scene_manager, MagSceneStart);
-        } else if(event.event == GuiButtonTypeLeft) {
-            consumed = true;
-            scene_manager_previous_scene(scene_manager);
-        }
-    }
-
-    return consumed;
-}
-
-void mag_scene_settings_invalid_on_exit(void* context) {
-    Mag* mag = context;
-    widget_reset(mag->widget);
-}