flip_store_alloc.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include <alloc/flip_store_alloc.h>
  2. // Function to allocate resources for the FlipStoreApp
  3. FlipStoreApp *flip_store_app_alloc()
  4. {
  5. FlipStoreApp *app = (FlipStoreApp *)malloc(sizeof(FlipStoreApp));
  6. Gui *gui = furi_record_open(RECORD_GUI);
  7. // Allocate the text input buffer
  8. app->uart_text_input_buffer_size_ssid = 64;
  9. app->uart_text_input_buffer_size_pass = 64;
  10. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  11. {
  12. return NULL;
  13. }
  14. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  15. {
  16. return NULL;
  17. }
  18. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass))
  19. {
  20. return NULL;
  21. }
  22. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass))
  23. {
  24. return NULL;
  25. }
  26. // Allocate ViewDispatcher
  27. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  28. {
  29. return NULL;
  30. }
  31. view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_store_custom_event_callback);
  32. // Main view
  33. if (!easy_flipper_set_view(&app->view_loader, FlipStoreViewLoader, flip_store_loader_draw_callback, NULL, callback_to_submenu_options, &app->view_dispatcher, app))
  34. {
  35. return NULL;
  36. }
  37. flip_store_loader_init(app->view_loader);
  38. if (!easy_flipper_set_widget(&app->widget_result, FlipStoreViewWidgetResult, "Error, try again.", callback_to_submenu_options, &app->view_dispatcher))
  39. {
  40. return NULL;
  41. }
  42. // Main view
  43. if (!easy_flipper_set_view(&app->view_app_info, FlipStoreViewAppInfo, flip_store_view_draw_callback_app_list, flip_store_input_callback, callback_to_app_list, &app->view_dispatcher, app))
  44. {
  45. return NULL;
  46. }
  47. // Popup
  48. if (!easy_flipper_set_popup(&app->popup, FlipStoreViewPopup, "Failed", 0, 0, "You are not connected to Wifi.\n\nIf you have the FlipperHTTP\nflash installed, then update\nyour WiFi credentials.", 0, 10, popup_callback, callback_to_submenu, &app->view_dispatcher, app))
  49. {
  50. FURI_LOG_E(TAG, "Failed to create popup");
  51. }
  52. // Dialog
  53. if (!easy_flipper_set_dialog_ex(
  54. &app->dialog_delete,
  55. FlipStoreViewAppDelete,
  56. "Delete App",
  57. 0,
  58. 0,
  59. "Are you sure you want to delete this app?",
  60. 0,
  61. 10,
  62. "No",
  63. "Yes",
  64. NULL,
  65. dialog_delete_callback,
  66. callback_to_app_list,
  67. &app->view_dispatcher,
  68. app))
  69. {
  70. return NULL;
  71. }
  72. if (!easy_flipper_set_dialog_ex(
  73. &app->dialog_firmware,
  74. FlipStoreViewFirmwareDialog,
  75. "Download Firmware",
  76. 0,
  77. 0,
  78. "Are you sure you want to\ndownload this firmware?",
  79. 0,
  80. 10,
  81. "No",
  82. "Yes",
  83. NULL,
  84. dialog_firmware_callback,
  85. callback_to_firmware_list,
  86. &app->view_dispatcher,
  87. app))
  88. {
  89. return NULL;
  90. }
  91. // Text Input
  92. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipStoreViewTextInputSSID, "Enter SSID", app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid, flip_store_text_updated_ssid, callback_to_submenu, &app->view_dispatcher, app))
  93. {
  94. return NULL;
  95. }
  96. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_pass, FlipStoreViewTextInputPass, "Enter Password", app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass, flip_store_text_updated_pass, callback_to_submenu, &app->view_dispatcher, app))
  97. {
  98. return NULL;
  99. }
  100. // Variable Item List
  101. if (!easy_flipper_set_variable_item_list(&app->variable_item_list, FlipStoreViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  102. {
  103. return NULL;
  104. }
  105. app->variable_item_ssid = variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  106. app->variable_item_pass = variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  107. // Submenu
  108. if (!easy_flipper_set_submenu(&app->submenu_main, FlipStoreViewSubmenu, "FlipStore v0.7.1", callback_exit_app, &app->view_dispatcher))
  109. {
  110. return NULL;
  111. }
  112. if (!easy_flipper_set_submenu(&app->submenu_options, FlipStoreViewSubmenuOptions, "Browse", callback_to_submenu, &app->view_dispatcher))
  113. {
  114. return NULL;
  115. }
  116. if (!easy_flipper_set_submenu(&app->submenu_app_list, FlipStoreViewAppList, "App Catalog", callback_to_submenu_options, &app->view_dispatcher))
  117. {
  118. return NULL;
  119. }
  120. if (!easy_flipper_set_submenu(&app->submenu_firmwares, FlipStoreViewFirmwares, "ESP32 Firmwares", callback_to_submenu_options, &app->view_dispatcher))
  121. {
  122. return NULL;
  123. }
  124. //
  125. submenu_add_item(app->submenu_main, "Browse", FlipStoreSubmenuIndexOptions, callback_submenu_choices, app);
  126. submenu_add_item(app->submenu_main, "About", FlipStoreSubmenuIndexAbout, callback_submenu_choices, app);
  127. submenu_add_item(app->submenu_main, "Settings", FlipStoreSubmenuIndexSettings, callback_submenu_choices, app);
  128. //
  129. submenu_add_item(app->submenu_options, "App Catalog", FlipStoreSubmenuIndexAppList, callback_submenu_choices, app);
  130. submenu_add_item(app->submenu_options, "ESP32 Firmwares", FlipStoreSubmenuIndexFirmwares, callback_submenu_choices, app);
  131. //
  132. submenu_add_item(app->submenu_app_list, "Bluetooth", FlipStoreSubmenuIndexAppListBluetooth, callback_submenu_choices, app);
  133. submenu_add_item(app->submenu_app_list, "Games", FlipStoreSubmenuIndexAppListGames, callback_submenu_choices, app);
  134. submenu_add_item(app->submenu_app_list, "GPIO", FlipStoreSubmenuIndexAppListGPIO, callback_submenu_choices, app);
  135. submenu_add_item(app->submenu_app_list, "Infrared", FlipStoreSubmenuIndexAppListInfrared, callback_submenu_choices, app);
  136. submenu_add_item(app->submenu_app_list, "iButton", FlipStoreSubmenuIndexAppListiButton, callback_submenu_choices, app);
  137. submenu_add_item(app->submenu_app_list, "Media", FlipStoreSubmenuIndexAppListMedia, callback_submenu_choices, app);
  138. submenu_add_item(app->submenu_app_list, "NFC", FlipStoreSubmenuIndexAppListNFC, callback_submenu_choices, app);
  139. submenu_add_item(app->submenu_app_list, "RFID", FlipStoreSubmenuIndexAppListRFID, callback_submenu_choices, app);
  140. submenu_add_item(app->submenu_app_list, "Sub-GHz", FlipStoreSubmenuIndexAppListSubGHz, callback_submenu_choices, app);
  141. submenu_add_item(app->submenu_app_list, "Tools", FlipStoreSubmenuIndexAppListTools, callback_submenu_choices, app);
  142. submenu_add_item(app->submenu_app_list, "USB", FlipStoreSubmenuIndexAppListUSB, callback_submenu_choices, app);
  143. //
  144. // dont add any items to the app list submenu of each category yet
  145. // load settings
  146. if (load_settings(app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid, app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass))
  147. {
  148. // Update variable items
  149. if (app->variable_item_ssid)
  150. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  151. // do not display the password
  152. // Copy items into their temp buffers with safety checks
  153. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  154. {
  155. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  156. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  157. }
  158. if (app->uart_text_input_buffer_pass && app->uart_text_input_temp_buffer_pass)
  159. {
  160. strncpy(app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass - 1);
  161. app->uart_text_input_temp_buffer_pass[app->uart_text_input_buffer_size_pass - 1] = '\0';
  162. }
  163. }
  164. // Switch to the main view
  165. view_dispatcher_switch_to_view(app->view_dispatcher, FlipStoreViewSubmenu);
  166. return app;
  167. }