Просмотр исходного кода

Allow "Detect reader" for unsaved card (#2045)

* Allow "Detect reader" for unsaved card
* Add missed detect reader deed

Co-authored-by: あく <alleteam@gmail.com>
Никита Тимофеев 3 лет назад
Родитель
Сommit
b70395eba9

+ 14 - 6
applications/main/nfc/scenes/nfc_scene_mf_classic_menu.c

@@ -4,6 +4,7 @@
 enum SubmenuIndex {
     SubmenuIndexSave,
     SubmenuIndexEmulate,
+    SubmenuIndexDetectReader,
     SubmenuIndexInfo,
 };
 
@@ -21,6 +22,14 @@ void nfc_scene_mf_classic_menu_on_enter(void* context) {
         submenu, "Save", SubmenuIndexSave, nfc_scene_mf_classic_menu_submenu_callback, nfc);
     submenu_add_item(
         submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_mf_classic_menu_submenu_callback, nfc);
+    if(!mf_classic_is_card_read(&nfc->dev->dev_data.mf_classic_data)) {
+        submenu_add_item(
+            submenu,
+            "Detect reader",
+            SubmenuIndexDetectReader,
+            nfc_scene_mf_classic_menu_submenu_callback,
+            nfc);
+    }
     submenu_add_item(
         submenu, "Info", SubmenuIndexInfo, nfc_scene_mf_classic_menu_submenu_callback, nfc);
 
@@ -35,17 +44,14 @@ bool nfc_scene_mf_classic_menu_on_event(void* context, SceneManagerEvent event)
     bool consumed = false;
 
     if(event.type == SceneManagerEventTypeCustom) {
+        scene_manager_set_scene_state(nfc->scene_manager, NfcSceneMfClassicMenu, event.event);
         if(event.event == SubmenuIndexSave) {
-            scene_manager_set_scene_state(
-                nfc->scene_manager, NfcSceneMfClassicMenu, SubmenuIndexSave);
             nfc->dev->format = NfcDeviceSaveFormatMifareClassic;
             // Clear device name
             nfc_device_set_name(nfc->dev, "");
             scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
             consumed = true;
         } else if(event.event == SubmenuIndexEmulate) {
-            scene_manager_set_scene_state(
-                nfc->scene_manager, NfcSceneMfClassicMenu, SubmenuIndexEmulate);
             scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate);
             if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetType)) {
                 DOLPHIN_DEED(DolphinDeedNfcAddEmulate);
@@ -53,9 +59,11 @@ bool nfc_scene_mf_classic_menu_on_event(void* context, SceneManagerEvent event)
                 DOLPHIN_DEED(DolphinDeedNfcEmulate);
             }
             consumed = true;
+        } else if(event.event == SubmenuIndexDetectReader) {
+            scene_manager_next_scene(nfc->scene_manager, NfcSceneDetectReader);
+            DOLPHIN_DEED(DolphinDeedNfcDetectReader);
+            consumed = true;
         } else if(event.event == SubmenuIndexInfo) {
-            scene_manager_set_scene_state(
-                nfc->scene_manager, NfcSceneMfClassicMenu, SubmenuIndexInfo);
             scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo);
             consumed = true;
         }

+ 1 - 0
applications/main/nfc/scenes/nfc_scene_saved_menu.c

@@ -123,6 +123,7 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
         } else if(event.event == SubmenuIndexDetectReader) {
             scene_manager_next_scene(nfc->scene_manager, NfcSceneDetectReader);
+            DOLPHIN_DEED(DolphinDeedNfcDetectReader);
             consumed = true;
         } else if(event.event == SubmenuIndexWrite) {
             scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicWrite);