flip_store_i.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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. FlipStoreApp* app = (FlipStoreApp*)malloc(sizeof(FlipStoreApp));
  6. Gui* gui = furi_record_open(RECORD_GUI);
  7. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  8. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  9. return NULL;
  10. }
  11. // Allocate the text input buffer
  12. app->uart_text_input_buffer_size_ssid = 64;
  13. app->uart_text_input_buffer_size_pass = 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_pass, app->uart_text_input_buffer_size_pass)) {
  24. return NULL;
  25. }
  26. if(!easy_flipper_set_buffer(
  27. &app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass)) {
  28. return NULL;
  29. }
  30. // Allocate ViewDispatcher
  31. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  32. return NULL;
  33. }
  34. // Main view
  35. if(!easy_flipper_set_view(
  36. &app->view_main,
  37. FlipStoreViewMain,
  38. flip_store_view_draw_callback_main,
  39. NULL,
  40. callback_to_app_list,
  41. &app->view_dispatcher,
  42. app)) {
  43. return NULL;
  44. }
  45. if(!easy_flipper_set_view(
  46. &app->view_app_info,
  47. FlipStoreViewAppInfo,
  48. flip_store_view_draw_callback_app_list,
  49. flip_store_input_callback,
  50. callback_to_app_list,
  51. &app->view_dispatcher,
  52. app)) {
  53. return NULL;
  54. }
  55. // Widget
  56. if(!easy_flipper_set_widget(
  57. &app->widget,
  58. FlipStoreViewAbout,
  59. "Welcome to the FlipStore!\n------\nDownload apps via WiFi and\nrun them on your Flipper!\n------\nwww.github.com/jblanked",
  60. callback_to_submenu,
  61. &app->view_dispatcher)) {
  62. return NULL;
  63. }
  64. // Popup
  65. if(!easy_flipper_set_popup(
  66. &app->popup,
  67. FlipStoreViewPopup,
  68. "Failed",
  69. 0,
  70. 0,
  71. "You are not connected to Wifi.\n\nIf you have the FlipperHTTP\nflash installed, then update\nyour WiFi credentials.",
  72. 0,
  73. 10,
  74. popup_callback,
  75. callback_to_submenu,
  76. &app->view_dispatcher,
  77. app)) {
  78. FURI_LOG_E(TAG, "Failed to create popup");
  79. }
  80. // Dialog
  81. if(!easy_flipper_set_dialog_ex(
  82. &app->dialog_delete,
  83. FlipStoreViewAppDelete,
  84. "Delete App",
  85. 0,
  86. 0,
  87. "Are you sure you want to delete this app?",
  88. 0,
  89. 10,
  90. "No",
  91. "Yes",
  92. NULL,
  93. dialog_callback,
  94. callback_to_app_list,
  95. &app->view_dispatcher,
  96. app)) {
  97. return NULL;
  98. }
  99. // Text Input
  100. if(!easy_flipper_set_uart_text_input(
  101. &app->uart_text_input_ssid,
  102. FlipStoreViewTextInputSSID,
  103. "Enter SSID",
  104. app->uart_text_input_temp_buffer_ssid,
  105. app->uart_text_input_buffer_size_ssid,
  106. flip_store_text_updated_ssid,
  107. callback_to_submenu,
  108. &app->view_dispatcher,
  109. app)) {
  110. return NULL;
  111. }
  112. if(!easy_flipper_set_uart_text_input(
  113. &app->uart_text_input_pass,
  114. FlipStoreViewTextInputPass,
  115. "Enter Password",
  116. app->uart_text_input_temp_buffer_pass,
  117. app->uart_text_input_buffer_size_pass,
  118. flip_store_text_updated_pass,
  119. callback_to_submenu,
  120. &app->view_dispatcher,
  121. app)) {
  122. return NULL;
  123. }
  124. // Variable Item List
  125. if(!easy_flipper_set_variable_item_list(
  126. &app->variable_item_list,
  127. FlipStoreViewSettings,
  128. settings_item_selected,
  129. callback_to_submenu,
  130. &app->view_dispatcher,
  131. app)) {
  132. return NULL;
  133. }
  134. app->variable_item_ssid =
  135. variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  136. app->variable_item_pass =
  137. variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  138. // Submenu
  139. if(!easy_flipper_set_submenu(
  140. &app->submenu,
  141. FlipStoreViewSubmenu,
  142. "FlipStore",
  143. callback_exit_app,
  144. &app->view_dispatcher)) {
  145. return NULL;
  146. }
  147. if(!easy_flipper_set_submenu(
  148. &app->submenu_app_list,
  149. FlipStoreViewAppList,
  150. "App Catalog",
  151. callback_to_submenu,
  152. &app->view_dispatcher)) {
  153. return NULL;
  154. }
  155. if(!easy_flipper_set_submenu(
  156. &app->submenu_app_list_bluetooth,
  157. FlipStoreViewAppListBluetooth,
  158. "Bluetooth",
  159. callback_to_app_list,
  160. &app->view_dispatcher)) {
  161. return NULL;
  162. }
  163. if(!easy_flipper_set_submenu(
  164. &app->submenu_app_list_games,
  165. FlipStoreViewAppListGames,
  166. "Games",
  167. callback_to_app_list,
  168. &app->view_dispatcher)) {
  169. return NULL;
  170. }
  171. if(!easy_flipper_set_submenu(
  172. &app->submenu_app_list_gpio,
  173. FlipStoreViewAppListGPIO,
  174. "GPIO",
  175. callback_to_app_list,
  176. &app->view_dispatcher)) {
  177. return NULL;
  178. }
  179. if(!easy_flipper_set_submenu(
  180. &app->submenu_app_list_infrared,
  181. FlipStoreViewAppListInfrared,
  182. "Infrared",
  183. callback_to_app_list,
  184. &app->view_dispatcher)) {
  185. return NULL;
  186. }
  187. if(!easy_flipper_set_submenu(
  188. &app->submenu_app_list_ibutton,
  189. FlipStoreViewAppListiButton,
  190. "iButton",
  191. callback_to_app_list,
  192. &app->view_dispatcher)) {
  193. return NULL;
  194. }
  195. if(!easy_flipper_set_submenu(
  196. &app->submenu_app_list_media,
  197. FlipStoreViewAppListMedia,
  198. "Media",
  199. callback_to_app_list,
  200. &app->view_dispatcher)) {
  201. return NULL;
  202. }
  203. if(!easy_flipper_set_submenu(
  204. &app->submenu_app_list_nfc,
  205. FlipStoreViewAppListNFC,
  206. "NFC",
  207. callback_to_app_list,
  208. &app->view_dispatcher)) {
  209. return NULL;
  210. }
  211. if(!easy_flipper_set_submenu(
  212. &app->submenu_app_list_rfid,
  213. FlipStoreViewAppListRFID,
  214. "RFID",
  215. callback_to_app_list,
  216. &app->view_dispatcher)) {
  217. return NULL;
  218. }
  219. if(!easy_flipper_set_submenu(
  220. &app->submenu_app_list_subghz,
  221. FlipStoreViewAppListSubGHz,
  222. "Sub-GHz",
  223. callback_to_app_list,
  224. &app->view_dispatcher)) {
  225. return NULL;
  226. }
  227. if(!easy_flipper_set_submenu(
  228. &app->submenu_app_list_tools,
  229. FlipStoreViewAppListTools,
  230. "Tools",
  231. callback_to_app_list,
  232. &app->view_dispatcher)) {
  233. return NULL;
  234. }
  235. if(!easy_flipper_set_submenu(
  236. &app->submenu_app_list_usb,
  237. FlipStoreViewAppListUSB,
  238. "USB",
  239. callback_to_app_list,
  240. &app->view_dispatcher)) {
  241. return NULL;
  242. }
  243. submenu_add_item(
  244. app->submenu, "Catalog", FlipStoreSubmenuIndexAppList, callback_submenu_choices, app);
  245. submenu_add_item(
  246. app->submenu, "About", FlipStoreSubmenuIndexAbout, callback_submenu_choices, app);
  247. submenu_add_item(
  248. app->submenu, "Settings", FlipStoreSubmenuIndexSettings, callback_submenu_choices, app);
  249. //
  250. submenu_add_item(
  251. app->submenu_app_list,
  252. "Bluetooth",
  253. FlipStoreSubmenuIndexAppListBluetooth,
  254. callback_submenu_choices,
  255. app);
  256. submenu_add_item(
  257. app->submenu_app_list,
  258. "Games",
  259. FlipStoreSubmenuIndexAppListGames,
  260. callback_submenu_choices,
  261. app);
  262. submenu_add_item(
  263. app->submenu_app_list,
  264. "GPIO",
  265. FlipStoreSubmenuIndexAppListGPIO,
  266. callback_submenu_choices,
  267. app);
  268. submenu_add_item(
  269. app->submenu_app_list,
  270. "Infrared",
  271. FlipStoreSubmenuIndexAppListInfrared,
  272. callback_submenu_choices,
  273. app);
  274. submenu_add_item(
  275. app->submenu_app_list,
  276. "iButton",
  277. FlipStoreSubmenuIndexAppListiButton,
  278. callback_submenu_choices,
  279. app);
  280. submenu_add_item(
  281. app->submenu_app_list,
  282. "Media",
  283. FlipStoreSubmenuIndexAppListMedia,
  284. callback_submenu_choices,
  285. app);
  286. submenu_add_item(
  287. app->submenu_app_list,
  288. "NFC",
  289. FlipStoreSubmenuIndexAppListNFC,
  290. callback_submenu_choices,
  291. app);
  292. submenu_add_item(
  293. app->submenu_app_list,
  294. "RFID",
  295. FlipStoreSubmenuIndexAppListRFID,
  296. callback_submenu_choices,
  297. app);
  298. submenu_add_item(
  299. app->submenu_app_list,
  300. "Sub-GHz",
  301. FlipStoreSubmenuIndexAppListSubGHz,
  302. callback_submenu_choices,
  303. app);
  304. submenu_add_item(
  305. app->submenu_app_list,
  306. "Tools",
  307. FlipStoreSubmenuIndexAppListTools,
  308. callback_submenu_choices,
  309. app);
  310. submenu_add_item(
  311. app->submenu_app_list,
  312. "USB",
  313. FlipStoreSubmenuIndexAppListUSB,
  314. callback_submenu_choices,
  315. app);
  316. //
  317. // dont add any items to the app list submenu of each category yet
  318. // load settings
  319. if(load_settings(
  320. app->uart_text_input_buffer_ssid,
  321. app->uart_text_input_buffer_size_ssid,
  322. app->uart_text_input_buffer_pass,
  323. app->uart_text_input_buffer_size_pass)) {
  324. // Update variable items
  325. if(app->variable_item_ssid)
  326. variable_item_set_current_value_text(
  327. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  328. // do not display the password
  329. // Copy items into their temp buffers with safety checks
  330. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  331. strncpy(
  332. app->uart_text_input_temp_buffer_ssid,
  333. app->uart_text_input_buffer_ssid,
  334. app->uart_text_input_buffer_size_ssid - 1);
  335. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  336. '\0';
  337. }
  338. if(app->uart_text_input_buffer_pass && app->uart_text_input_temp_buffer_pass) {
  339. strncpy(
  340. app->uart_text_input_temp_buffer_pass,
  341. app->uart_text_input_buffer_pass,
  342. app->uart_text_input_buffer_size_pass - 1);
  343. app->uart_text_input_temp_buffer_pass[app->uart_text_input_buffer_size_pass - 1] =
  344. '\0';
  345. }
  346. }
  347. // Switch to the main view
  348. view_dispatcher_switch_to_view(app->view_dispatcher, FlipStoreViewSubmenu);
  349. return app;
  350. }
  351. #endif // FLIP_STORE_I_H