nfc_scene_saved_menu.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "../nfc_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexEmulate,
  4. SubmenuIndexEditUid,
  5. SubmenuIndexRename,
  6. SubmenuIndexDelete,
  7. SubmenuIndexInfo,
  8. SubmenuIndexRestoreOriginal,
  9. };
  10. void nfc_scene_saved_menu_submenu_callback(void* context, uint32_t index) {
  11. Nfc* nfc = context;
  12. view_dispatcher_send_custom_event(nfc->view_dispatcher, index);
  13. }
  14. void nfc_scene_saved_menu_on_enter(void* context) {
  15. Nfc* nfc = context;
  16. Submenu* submenu = nfc->submenu;
  17. if(nfc->dev->format == NfcDeviceSaveFormatUid ||
  18. nfc->dev->format == NfcDeviceSaveFormatMifareDesfire ||
  19. nfc->dev->format == NfcDeviceSaveFormatBankCard) {
  20. submenu_add_item(
  21. submenu,
  22. "Emulate UID",
  23. SubmenuIndexEmulate,
  24. nfc_scene_saved_menu_submenu_callback,
  25. nfc);
  26. if(nfc->dev->dev_data.protocol == NfcDeviceProtocolUnknown) {
  27. submenu_add_item(
  28. submenu,
  29. "Edit UID",
  30. SubmenuIndexEditUid,
  31. nfc_scene_saved_menu_submenu_callback,
  32. nfc);
  33. }
  34. } else if(
  35. nfc->dev->format == NfcDeviceSaveFormatMifareUl ||
  36. nfc->dev->format == NfcDeviceSaveFormatMifareClassic) {
  37. submenu_add_item(
  38. submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_saved_menu_submenu_callback, nfc);
  39. }
  40. submenu_add_item(
  41. submenu, "Info", SubmenuIndexInfo, nfc_scene_saved_menu_submenu_callback, nfc);
  42. submenu_set_selected_item(
  43. nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneSavedMenu));
  44. if(nfc->dev->shadow_file_exist) {
  45. submenu_add_item(
  46. submenu,
  47. "Restore to original",
  48. SubmenuIndexRestoreOriginal,
  49. nfc_scene_saved_menu_submenu_callback,
  50. nfc);
  51. }
  52. submenu_add_item(
  53. submenu, "Rename", SubmenuIndexRename, nfc_scene_saved_menu_submenu_callback, nfc);
  54. submenu_add_item(
  55. submenu, "Delete", SubmenuIndexDelete, nfc_scene_saved_menu_submenu_callback, nfc);
  56. view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu);
  57. }
  58. bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
  59. Nfc* nfc = context;
  60. bool consumed = false;
  61. if(event.type == SceneManagerEventTypeCustom) {
  62. scene_manager_set_scene_state(nfc->scene_manager, NfcSceneSavedMenu, event.event);
  63. if(event.event == SubmenuIndexEmulate) {
  64. if(nfc->dev->format == NfcDeviceSaveFormatMifareUl) {
  65. scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightEmulate);
  66. } else if(nfc->dev->format == NfcDeviceSaveFormatMifareClassic) {
  67. scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate);
  68. } else {
  69. scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
  70. }
  71. consumed = true;
  72. } else if(event.event == SubmenuIndexRename) {
  73. scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
  74. consumed = true;
  75. } else if(event.event == SubmenuIndexEditUid) {
  76. scene_manager_next_scene(nfc->scene_manager, NfcSceneSetUid);
  77. consumed = true;
  78. } else if(event.event == SubmenuIndexDelete) {
  79. scene_manager_next_scene(nfc->scene_manager, NfcSceneDelete);
  80. consumed = true;
  81. } else if(event.event == SubmenuIndexInfo) {
  82. scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo);
  83. consumed = true;
  84. } else if(event.event == SubmenuIndexRestoreOriginal) {
  85. scene_manager_next_scene(nfc->scene_manager, NfcSceneRestoreOriginalConfirm);
  86. consumed = true;
  87. }
  88. }
  89. return consumed;
  90. }
  91. void nfc_scene_saved_menu_on_exit(void* context) {
  92. Nfc* nfc = context;
  93. submenu_reset(nfc->submenu);
  94. }