flip_library_alloc.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include "alloc/flip_library_alloc.h"
  2. // Function to allocate resources for the FlipLibraryApp
  3. FlipLibraryApp* flip_library_app_alloc() {
  4. FlipLibraryApp* app = (FlipLibraryApp*)malloc(sizeof(FlipLibraryApp));
  5. Gui* gui = furi_record_open(RECORD_GUI);
  6. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  7. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  8. return NULL;
  9. }
  10. // Allocate the text input buffer
  11. app->uart_text_input_buffer_size_ssid = 64;
  12. app->uart_text_input_buffer_size_password = 64;
  13. app->uart_text_input_buffer_size_query = 64;
  14. if(!easy_flipper_set_buffer(
  15. &app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  16. return NULL;
  17. }
  18. if(!easy_flipper_set_buffer(
  19. &app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  20. return NULL;
  21. }
  22. if(!easy_flipper_set_buffer(
  23. &app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password)) {
  24. return NULL;
  25. }
  26. if(!easy_flipper_set_buffer(
  27. &app->uart_text_input_temp_buffer_password,
  28. app->uart_text_input_buffer_size_password)) {
  29. return NULL;
  30. }
  31. if(!easy_flipper_set_buffer(
  32. &app->uart_text_input_buffer_query, app->uart_text_input_buffer_size_query)) {
  33. return NULL;
  34. }
  35. if(!easy_flipper_set_buffer(
  36. &app->uart_text_input_temp_buffer_query, app->uart_text_input_buffer_size_query)) {
  37. return NULL;
  38. }
  39. // Allocate ViewDispatcher
  40. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  41. return NULL;
  42. }
  43. view_dispatcher_set_custom_event_callback(
  44. app->view_dispatcher, flip_library_custom_event_callback);
  45. // Main view
  46. if(!easy_flipper_set_view(
  47. &app->view_loader,
  48. FlipLibraryViewLoader,
  49. flip_library_loader_draw_callback,
  50. NULL,
  51. callback_to_random_facts,
  52. &app->view_dispatcher,
  53. app)) {
  54. return NULL;
  55. }
  56. flip_library_loader_init(app->view_loader);
  57. // Widget
  58. if(!easy_flipper_set_widget(
  59. &app->widget_about,
  60. FlipLibraryViewAbout,
  61. "FlipLibrary v1.3\n-----\nDictionary, random facts, and\nmore.\n-----\nwww.github.com/jblanked",
  62. callback_to_submenu,
  63. &app->view_dispatcher)) {
  64. return NULL;
  65. }
  66. if(!easy_flipper_set_widget(
  67. &app->widget_result,
  68. FlipLibraryViewWidgetResult,
  69. "Error, try again.",
  70. callback_to_random_facts,
  71. &app->view_dispatcher)) {
  72. return NULL;
  73. }
  74. // Text Input
  75. if(!easy_flipper_set_uart_text_input(
  76. &app->uart_text_input_ssid,
  77. FlipLibraryViewTextInputSSID,
  78. "Enter SSID",
  79. app->uart_text_input_temp_buffer_ssid,
  80. app->uart_text_input_buffer_size_ssid,
  81. text_updated_ssid,
  82. callback_to_wifi_settings,
  83. &app->view_dispatcher,
  84. app)) {
  85. return NULL;
  86. }
  87. if(!easy_flipper_set_uart_text_input(
  88. &app->uart_text_input_password,
  89. FlipLibraryViewTextInputPassword,
  90. "Enter Password",
  91. app->uart_text_input_temp_buffer_password,
  92. app->uart_text_input_buffer_size_password,
  93. text_updated_password,
  94. callback_to_wifi_settings,
  95. &app->view_dispatcher,
  96. app)) {
  97. return NULL;
  98. }
  99. if(!easy_flipper_set_uart_text_input(
  100. &app->uart_text_input_query,
  101. FlipLibraryViewTextInputQuery,
  102. "Enter Query",
  103. app->uart_text_input_temp_buffer_query,
  104. app->uart_text_input_buffer_size_query,
  105. text_updated_query,
  106. callback_to_submenu,
  107. &app->view_dispatcher,
  108. app)) {
  109. return NULL;
  110. }
  111. // Variable Item List
  112. if(!easy_flipper_set_variable_item_list(
  113. &app->variable_item_list_wifi,
  114. FlipLibraryViewSettings,
  115. settings_item_selected,
  116. callback_to_submenu,
  117. &app->view_dispatcher,
  118. app)) {
  119. return NULL;
  120. }
  121. app->variable_item_ssid =
  122. variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  123. app->variable_item_password =
  124. variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  125. variable_item_set_current_value_text(app->variable_item_ssid, "");
  126. variable_item_set_current_value_text(app->variable_item_password, "");
  127. // Submenu
  128. if(!easy_flipper_set_submenu(
  129. &app->submenu_main,
  130. FlipLibraryViewSubmenuMain,
  131. "FlipLibrary v1.3",
  132. callback_exit_app,
  133. &app->view_dispatcher)) {
  134. return NULL;
  135. }
  136. if(!easy_flipper_set_submenu(
  137. &app->submenu_random_facts,
  138. FlipLibraryViewRandomFacts,
  139. "Random Facts",
  140. callback_to_submenu,
  141. &app->view_dispatcher)) {
  142. return NULL;
  143. }
  144. submenu_add_item(
  145. app->submenu_main,
  146. "Random Fact",
  147. FlipLibrarySubmenuIndexRandomFacts,
  148. callback_submenu_choices,
  149. app);
  150. submenu_add_item(
  151. app->submenu_main,
  152. "Wikipedia",
  153. FlipLibrarySubmenuIndexRandomFactsWiki,
  154. callback_submenu_choices,
  155. app);
  156. submenu_add_item(
  157. app->submenu_main,
  158. "Dictionary",
  159. FlipLibrarySubmenuIndexDictionary,
  160. callback_submenu_choices,
  161. app);
  162. submenu_add_item(
  163. app->submenu_main, "About", FlipLibrarySubmenuIndexAbout, callback_submenu_choices, app);
  164. submenu_add_item(
  165. app->submenu_main, "WiFi", FlipLibrarySubmenuIndexSettings, callback_submenu_choices, app);
  166. //
  167. submenu_add_item(
  168. app->submenu_random_facts,
  169. "Cats",
  170. FlipLibrarySubmenuIndexRandomFactsCats,
  171. callback_submenu_choices,
  172. app);
  173. submenu_add_item(
  174. app->submenu_random_facts,
  175. "Dogs",
  176. FlipLibrarySubmenuIndexRandomFactsDogs,
  177. callback_submenu_choices,
  178. app);
  179. submenu_add_item(
  180. app->submenu_random_facts,
  181. "Quotes",
  182. FlipLibrarySubmenuIndexRandomFactsQuotes,
  183. callback_submenu_choices,
  184. app);
  185. submenu_add_item(
  186. app->submenu_random_facts,
  187. "Random",
  188. FlipLibrarySubmenuIndexRandomFactsAll,
  189. callback_submenu_choices,
  190. app);
  191. // load settings
  192. if(load_settings(
  193. app->uart_text_input_buffer_ssid,
  194. app->uart_text_input_buffer_size_ssid,
  195. app->uart_text_input_buffer_password,
  196. app->uart_text_input_buffer_size_password)) {
  197. // Update variable items
  198. if(app->variable_item_ssid) {
  199. variable_item_set_current_value_text(
  200. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  201. }
  202. // dont show password
  203. // Copy items into their temp buffers with safety checks
  204. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  205. strncpy(
  206. app->uart_text_input_temp_buffer_ssid,
  207. app->uart_text_input_buffer_ssid,
  208. app->uart_text_input_buffer_size_ssid - 1);
  209. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  210. '\0';
  211. }
  212. if(app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password) {
  213. strncpy(
  214. app->uart_text_input_temp_buffer_password,
  215. app->uart_text_input_buffer_password,
  216. app->uart_text_input_buffer_size_password - 1);
  217. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] =
  218. '\0';
  219. }
  220. }
  221. // assign app instance
  222. app_instance = app;
  223. // start with the main view
  224. view_dispatcher_switch_to_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
  225. return app;
  226. }