flip_library_alloc.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "alloc/flip_library_alloc.h"
  2. // Function to allocate resources for the FlipLibraryApp
  3. FlipLibraryApp *flip_library_app_alloc()
  4. {
  5. FlipLibraryApp *app = (FlipLibraryApp *)malloc(sizeof(FlipLibraryApp));
  6. Gui *gui = furi_record_open(RECORD_GUI);
  7. if (!flipper_http_init(flipper_http_rx_callback, app))
  8. {
  9. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  10. return NULL;
  11. }
  12. // Allocate the text input buffer
  13. app->uart_text_input_buffer_size_ssid = 64;
  14. app->uart_text_input_buffer_size_password = 64;
  15. app->uart_text_input_buffer_size_query = 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_password, app->uart_text_input_buffer_size_password))
  25. {
  26. return NULL;
  27. }
  28. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password))
  29. {
  30. return NULL;
  31. }
  32. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_query, app->uart_text_input_buffer_size_query))
  33. {
  34. return NULL;
  35. }
  36. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_query, app->uart_text_input_buffer_size_query))
  37. {
  38. return NULL;
  39. }
  40. // Allocate ViewDispatcher
  41. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  42. {
  43. return NULL;
  44. }
  45. view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_library_custom_event_callback);
  46. // Main view
  47. if (!easy_flipper_set_view(&app->view_loader, FlipLibraryViewLoader, flip_library_loader_draw_callback, NULL, callback_to_random_facts, &app->view_dispatcher, app))
  48. {
  49. return NULL;
  50. }
  51. flip_library_loader_init(app->view_loader);
  52. // Widget
  53. if (!easy_flipper_set_widget(&app->widget_about, FlipLibraryViewAbout, "FlipLibrary v1.4\n-----\nUtilize WiFi to retrieve data\nfrom 20 different APIs.\n-----\nCreated by JBlanked and\nDerek Jamison.\n-----\nwww.github.com/jblanked/\nFlipLibrary\n-----\nPress BACK to return.", callback_to_submenu, &app->view_dispatcher))
  54. {
  55. return NULL;
  56. }
  57. if (!easy_flipper_set_widget(&app->widget_result, FlipLibraryViewWidgetResult, "Error, try again.", callback_to_random_facts, &app->view_dispatcher))
  58. {
  59. return NULL;
  60. }
  61. // Text Input
  62. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipLibraryViewTextInputSSID, "Enter SSID", app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid, text_updated_ssid, callback_to_wifi_settings, &app->view_dispatcher, app))
  63. {
  64. return NULL;
  65. }
  66. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_password, FlipLibraryViewTextInputPassword, "Enter Password", app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password, text_updated_password, callback_to_wifi_settings, &app->view_dispatcher, app))
  67. {
  68. return NULL;
  69. }
  70. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_query, FlipLibraryViewTextInputQuery, "Enter Query", app->uart_text_input_temp_buffer_query, app->uart_text_input_buffer_size_query, text_updated_query, callback_to_submenu_library, &app->view_dispatcher, app))
  71. {
  72. return NULL;
  73. }
  74. // Variable Item List
  75. if (!easy_flipper_set_variable_item_list(&app->variable_item_list_wifi, FlipLibraryViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  76. {
  77. return NULL;
  78. }
  79. app->variable_item_ssid = variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  80. app->variable_item_password = variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  81. variable_item_set_current_value_text(app->variable_item_ssid, "");
  82. variable_item_set_current_value_text(app->variable_item_password, "");
  83. // Submenu
  84. if (!easy_flipper_set_submenu(&app->submenu_main, FlipLibraryViewSubmenuMain, "FlipLibrary v1.4", callback_exit_app, &app->view_dispatcher))
  85. {
  86. return NULL;
  87. }
  88. if (!easy_flipper_set_submenu(&app->submenu_library, FlipLibraryViewSubmenuLibrary, "Library", callback_to_submenu, &app->view_dispatcher))
  89. {
  90. return NULL;
  91. }
  92. if (!easy_flipper_set_submenu(&app->submenu_random_facts, FlipLibraryViewRandomFacts, "Random", callback_to_submenu_library, &app->view_dispatcher))
  93. {
  94. return NULL;
  95. }
  96. if (!easy_flipper_set_submenu(&app->submenu_predict, FlipLibraryViewPredict, "Predict", callback_to_submenu_library, &app->view_dispatcher))
  97. {
  98. return NULL;
  99. }
  100. submenu_add_item(app->submenu_main, "Library", FlipLibrarySubmenuIndexLibrary, callback_submenu_choices, app);
  101. submenu_add_item(app->submenu_main, "About", FlipLibrarySubmenuIndexAbout, callback_submenu_choices, app);
  102. submenu_add_item(app->submenu_main, "WiFi", FlipLibrarySubmenuIndexSettings, callback_submenu_choices, app);
  103. submenu_add_item(app->submenu_library, "Wikipedia", FlipLibrarySubmenuIndexWiki, callback_submenu_choices, app);
  104. submenu_add_item(app->submenu_library, "Dictionary", FlipLibrarySubmenuIndexDictionary, callback_submenu_choices, app);
  105. submenu_add_item(app->submenu_library, "Predict", FlipLibrarySubmenuIndexPredict, callback_submenu_choices, app);
  106. submenu_add_item(app->submenu_library, "Random", FlipLibrarySubmenuIndexRandomFacts, callback_submenu_choices, app);
  107. submenu_add_item(app->submenu_library, "Weather", FlipLibrarySubmenuIndexWeather, callback_submenu_choices, app);
  108. submenu_add_item(app->submenu_library, "GPS", FlipLibrarySubmenuIndexGPS, callback_submenu_choices, app);
  109. submenu_add_item(app->submenu_library, "Elevation", FlipLibrarySubmenuIndexElevation, callback_submenu_choices, app);
  110. submenu_add_item(app->submenu_library, "Asset Price", FlipLibrarySubmenuIndexAssetPrice, callback_submenu_choices, app);
  111. submenu_add_item(app->submenu_library, "Next Holiday", FlipLibrarySubmenuIndexNextHoliday, callback_submenu_choices, app);
  112. //
  113. submenu_add_item(app->submenu_random_facts, "Trivia", FlipLibrarySubmenuIndexRandomTrivia, callback_submenu_choices, app);
  114. submenu_add_item(app->submenu_random_facts, "Advice", FlipLibrarySubmenuIndexRandomAdvice, callback_submenu_choices, app);
  115. submenu_add_item(app->submenu_random_facts, "Quote", FlipLibrarySubmenuIndexRandomFactsQuotes, callback_submenu_choices, app);
  116. submenu_add_item(app->submenu_random_facts, "Fact", FlipLibrarySubmenuIndexRandomFactsAll, callback_submenu_choices, app);
  117. submenu_add_item(app->submenu_random_facts, "Cat Fact", FlipLibrarySubmenuIndexRandomFactsCats, callback_submenu_choices, app);
  118. submenu_add_item(app->submenu_random_facts, "Dog Fact", FlipLibrarySubmenuIndexRandomFactsDogs, callback_submenu_choices, app);
  119. submenu_add_item(app->submenu_random_facts, "Tech Phrase", FlipLibrarySubmenuIndexRandomTechPhrase, callback_submenu_choices, app);
  120. submenu_add_item(app->submenu_random_facts, "UUID", FlipLibrarySubmenuIndexRandomUUID, callback_submenu_choices, app);
  121. submenu_add_item(app->submenu_random_facts, "Address", FlipLibrarySubmenuIndexRandomAddress, callback_submenu_choices, app);
  122. submenu_add_item(app->submenu_random_facts, "Credit Card", FlipLibrarySubmenuIndexRandomCreditCard, callback_submenu_choices, app);
  123. submenu_add_item(app->submenu_random_facts, "User Info", FlipLibrarySubmenuIndexRandomUserInfo, callback_submenu_choices, app);
  124. //
  125. submenu_add_item(app->submenu_predict, "Age", FlipLibrarySubmenuIndexPredictAge, callback_submenu_choices, app);
  126. submenu_add_item(app->submenu_predict, "Ethnicity", FlipLibrarySubmenuIndexPredictEthnicity, callback_submenu_choices, app);
  127. submenu_add_item(app->submenu_predict, "Gender", FlipLibrarySubmenuIndexPredictGender, callback_submenu_choices, app);
  128. // load settings
  129. if (load_settings(app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
  130. {
  131. // Update variable items
  132. if (app->variable_item_ssid)
  133. {
  134. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  135. }
  136. // dont show password
  137. // Copy items into their temp buffers with safety checks
  138. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  139. {
  140. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  141. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  142. }
  143. if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
  144. {
  145. strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
  146. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
  147. }
  148. }
  149. // assign app instance
  150. app_instance = app;
  151. // start with the main view
  152. view_dispatcher_switch_to_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
  153. return app;
  154. }