flip_store_i.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #ifndef FLIP_STORE_I_H
  2. #define FLIP_STORE_I_H
  3. // Function to allocate resources for the FlipStoreApp
  4. static FlipStoreApp *flip_store_app_alloc()
  5. {
  6. FlipStoreApp *app = (FlipStoreApp *)malloc(sizeof(FlipStoreApp));
  7. Gui *gui = furi_record_open(RECORD_GUI);
  8. if (!flipper_http_init(flipper_http_rx_callback, app))
  9. {
  10. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  11. return NULL;
  12. }
  13. // Allocate the text input buffer
  14. app->uart_text_input_buffer_size_ssid = 64;
  15. app->uart_text_input_buffer_size_pass = 64;
  16. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  17. {
  18. return NULL;
  19. }
  20. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  21. {
  22. return NULL;
  23. }
  24. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass))
  25. {
  26. return NULL;
  27. }
  28. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass))
  29. {
  30. return NULL;
  31. }
  32. // Allocate ViewDispatcher
  33. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  34. {
  35. return NULL;
  36. }
  37. // Main view
  38. if (!easy_flipper_set_view(&app->view_main, FlipStoreViewMain, flip_store_view_draw_callback_main, NULL, callback_to_app_list, &app->view_dispatcher, app))
  39. {
  40. return NULL;
  41. }
  42. 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))
  43. {
  44. return NULL;
  45. }
  46. // Widget
  47. if (!easy_flipper_set_widget(
  48. &app->widget,
  49. FlipStoreViewAbout,
  50. "Welcome to the FlipStore!\n------\nDownload apps via WiFi and\nrun them on your Flipper!\n------\nwww.github.com/jblanked",
  51. callback_to_submenu,
  52. &app->view_dispatcher))
  53. {
  54. return NULL;
  55. }
  56. // Popup
  57. 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))
  58. {
  59. FURI_LOG_E(TAG, "Failed to create popup");
  60. }
  61. // Dialog
  62. if (!easy_flipper_set_dialog_ex(
  63. &app->dialog_delete,
  64. FlipStoreViewAppDelete,
  65. "Delete App",
  66. 0,
  67. 0,
  68. "Are you sure you want to delete this app?",
  69. 0,
  70. 10,
  71. "No",
  72. "Yes",
  73. NULL,
  74. dialog_callback,
  75. callback_to_app_list,
  76. &app->view_dispatcher,
  77. app))
  78. {
  79. return NULL;
  80. }
  81. // Text Input
  82. 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))
  83. {
  84. return NULL;
  85. }
  86. 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))
  87. {
  88. return NULL;
  89. }
  90. // Variable Item List
  91. if (!easy_flipper_set_variable_item_list(&app->variable_item_list, FlipStoreViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  92. {
  93. return NULL;
  94. }
  95. app->variable_item_ssid = variable_item_list_add(app->variable_item_list, "SSID", 1, NULL, NULL);
  96. app->variable_item_pass = variable_item_list_add(app->variable_item_list, "Password", 1, NULL, NULL);
  97. // Submenu
  98. if (!easy_flipper_set_submenu(&app->submenu, FlipStoreViewSubmenu, "FlipStore", callback_exit_app, &app->view_dispatcher))
  99. {
  100. return NULL;
  101. }
  102. if (!easy_flipper_set_submenu(&app->submenu_app_list, FlipStoreViewAppList, "App Catalog", callback_to_submenu, &app->view_dispatcher))
  103. {
  104. return NULL;
  105. }
  106. if (!easy_flipper_set_submenu(&app->submenu_app_list_bluetooth, FlipStoreViewAppListBluetooth, "Bluetooth", callback_to_app_list, &app->view_dispatcher))
  107. {
  108. return NULL;
  109. }
  110. if (!easy_flipper_set_submenu(&app->submenu_app_list_games, FlipStoreViewAppListGames, "Games", callback_to_app_list, &app->view_dispatcher))
  111. {
  112. return NULL;
  113. }
  114. if (!easy_flipper_set_submenu(&app->submenu_app_list_gpio, FlipStoreViewAppListGPIO, "GPIO", callback_to_app_list, &app->view_dispatcher))
  115. {
  116. return NULL;
  117. }
  118. if (!easy_flipper_set_submenu(&app->submenu_app_list_infrared, FlipStoreViewAppListInfrared, "Infrared", callback_to_app_list, &app->view_dispatcher))
  119. {
  120. return NULL;
  121. }
  122. if (!easy_flipper_set_submenu(&app->submenu_app_list_ibutton, FlipStoreViewAppListiButton, "iButton", callback_to_app_list, &app->view_dispatcher))
  123. {
  124. return NULL;
  125. }
  126. if (!easy_flipper_set_submenu(&app->submenu_app_list_media, FlipStoreViewAppListMedia, "Media", callback_to_app_list, &app->view_dispatcher))
  127. {
  128. return NULL;
  129. }
  130. if (!easy_flipper_set_submenu(&app->submenu_app_list_nfc, FlipStoreViewAppListNFC, "NFC", callback_to_app_list, &app->view_dispatcher))
  131. {
  132. return NULL;
  133. }
  134. if (!easy_flipper_set_submenu(&app->submenu_app_list_rfid, FlipStoreViewAppListRFID, "RFID", callback_to_app_list, &app->view_dispatcher))
  135. {
  136. return NULL;
  137. }
  138. if (!easy_flipper_set_submenu(&app->submenu_app_list_subghz, FlipStoreViewAppListSubGHz, "Sub-GHz", callback_to_app_list, &app->view_dispatcher))
  139. {
  140. return NULL;
  141. }
  142. if (!easy_flipper_set_submenu(&app->submenu_app_list_tools, FlipStoreViewAppListTools, "Tools", callback_to_app_list, &app->view_dispatcher))
  143. {
  144. return NULL;
  145. }
  146. if (!easy_flipper_set_submenu(&app->submenu_app_list_usb, FlipStoreViewAppListUSB, "USB", callback_to_app_list, &app->view_dispatcher))
  147. {
  148. return NULL;
  149. }
  150. submenu_add_item(app->submenu, "Catalog", FlipStoreSubmenuIndexAppList, callback_submenu_choices, app);
  151. submenu_add_item(app->submenu, "About", FlipStoreSubmenuIndexAbout, callback_submenu_choices, app);
  152. submenu_add_item(app->submenu, "Settings", FlipStoreSubmenuIndexSettings, callback_submenu_choices, app);
  153. //
  154. submenu_add_item(app->submenu_app_list, "Bluetooth", FlipStoreSubmenuIndexAppListBluetooth, callback_submenu_choices, app);
  155. submenu_add_item(app->submenu_app_list, "Games", FlipStoreSubmenuIndexAppListGames, callback_submenu_choices, app);
  156. submenu_add_item(app->submenu_app_list, "GPIO", FlipStoreSubmenuIndexAppListGPIO, callback_submenu_choices, app);
  157. submenu_add_item(app->submenu_app_list, "Infrared", FlipStoreSubmenuIndexAppListInfrared, callback_submenu_choices, app);
  158. submenu_add_item(app->submenu_app_list, "iButton", FlipStoreSubmenuIndexAppListiButton, callback_submenu_choices, app);
  159. submenu_add_item(app->submenu_app_list, "Media", FlipStoreSubmenuIndexAppListMedia, callback_submenu_choices, app);
  160. submenu_add_item(app->submenu_app_list, "NFC", FlipStoreSubmenuIndexAppListNFC, callback_submenu_choices, app);
  161. submenu_add_item(app->submenu_app_list, "RFID", FlipStoreSubmenuIndexAppListRFID, callback_submenu_choices, app);
  162. submenu_add_item(app->submenu_app_list, "Sub-GHz", FlipStoreSubmenuIndexAppListSubGHz, callback_submenu_choices, app);
  163. submenu_add_item(app->submenu_app_list, "Tools", FlipStoreSubmenuIndexAppListTools, callback_submenu_choices, app);
  164. submenu_add_item(app->submenu_app_list, "USB", FlipStoreSubmenuIndexAppListUSB, callback_submenu_choices, app);
  165. //
  166. // dont add any items to the app list submenu of each category yet
  167. // load settings
  168. 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))
  169. {
  170. // Update variable items
  171. if (app->variable_item_ssid)
  172. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  173. // do not display the password
  174. // Copy items into their temp buffers with safety checks
  175. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  176. {
  177. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  178. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  179. }
  180. if (app->uart_text_input_buffer_pass && app->uart_text_input_temp_buffer_pass)
  181. {
  182. strncpy(app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass - 1);
  183. app->uart_text_input_temp_buffer_pass[app->uart_text_input_buffer_size_pass - 1] = '\0';
  184. }
  185. }
  186. // Switch to the main view
  187. view_dispatcher_switch_to_view(app->view_dispatcher, FlipStoreViewSubmenu);
  188. return app;
  189. }
  190. #endif // FLIP_STORE_I_H