gui-test.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include <furi.h>
  2. #include <gui/gui.h>
  3. #include <gui/view_port.h>
  4. #include <gui/view.h>
  5. #include <gui/view_dispatcher.h>
  6. #include <gui/modules/dialog.h>
  7. #include <gui/modules/dialog_ex.h>
  8. #include <gui/modules/submenu.h>
  9. #include <gui/modules/text_input.h>
  10. #include <gui/modules/byte_input.h>
  11. #include <gui/modules/popup.h>
  12. typedef enum {
  13. GuiTesterViewTextInput = 0,
  14. GuiTesterViewSubmenu,
  15. GuiTesterViewDialog,
  16. GuiTesterViewDialogEx,
  17. GuiTesterViewPopup,
  18. GuiTesterViewByteInput,
  19. GuiTesterViewLast
  20. } GuiTesterView;
  21. typedef struct {
  22. ViewDispatcher* view_dispatcher;
  23. Dialog* dialog;
  24. DialogEx* dialog_ex;
  25. Submenu* submenu;
  26. TextInput* text_input;
  27. Popup* popup;
  28. ByteInput* byte_input;
  29. GuiTesterView view_index;
  30. } GuiTester;
  31. static GuiTester* gui_test_alloc(void) {
  32. GuiTester* gui_tester = furi_alloc(sizeof(GuiTester));
  33. gui_tester->view_dispatcher = view_dispatcher_alloc();
  34. gui_tester->view_index = GuiTesterViewByteInput;
  35. gui_tester->dialog = dialog_alloc();
  36. view_dispatcher_add_view(
  37. gui_tester->view_dispatcher, GuiTesterViewDialog, dialog_get_view(gui_tester->dialog));
  38. gui_tester->dialog_ex = dialog_ex_alloc();
  39. view_dispatcher_add_view(
  40. gui_tester->view_dispatcher,
  41. GuiTesterViewDialogEx,
  42. dialog_ex_get_view(gui_tester->dialog_ex));
  43. gui_tester->submenu = submenu_alloc();
  44. view_dispatcher_add_view(
  45. gui_tester->view_dispatcher, GuiTesterViewSubmenu, submenu_get_view(gui_tester->submenu));
  46. gui_tester->text_input = text_input_alloc();
  47. view_dispatcher_add_view(
  48. gui_tester->view_dispatcher,
  49. GuiTesterViewTextInput,
  50. text_input_get_view(gui_tester->text_input));
  51. gui_tester->popup = popup_alloc();
  52. view_dispatcher_add_view(
  53. gui_tester->view_dispatcher, GuiTesterViewPopup, popup_get_view(gui_tester->popup));
  54. gui_tester->byte_input = byte_input_alloc();
  55. view_dispatcher_add_view(
  56. gui_tester->view_dispatcher,
  57. GuiTesterViewByteInput,
  58. byte_input_get_view(gui_tester->byte_input));
  59. return gui_tester;
  60. }
  61. static void next_view(void* context) {
  62. furi_assert(context);
  63. GuiTester* gui_tester = context;
  64. gui_tester->view_index++;
  65. if(gui_tester->view_index >= GuiTesterViewLast) {
  66. gui_tester->view_index = 0;
  67. }
  68. view_dispatcher_switch_to_view(gui_tester->view_dispatcher, gui_tester->view_index);
  69. }
  70. static void popup_callback(void* context) {
  71. next_view(context);
  72. }
  73. static void submenu_callback(void* context, uint32_t index) {
  74. next_view(context);
  75. }
  76. static void dialog_callback(DialogResult result, void* context) {
  77. next_view(context);
  78. }
  79. static void dialog_ex_callback(DialogExResult result, void* context) {
  80. next_view(context);
  81. }
  82. static void text_input_callback(void* context, char* text) {
  83. next_view(context);
  84. }
  85. static void byte_input_callback(void* context, uint8_t* bytes, uint8_t bytes_count) {
  86. next_view(context);
  87. }
  88. int32_t gui_test(void* param) {
  89. (void)param;
  90. GuiTester* gui_tester = gui_test_alloc();
  91. Gui* gui = furi_record_open("gui");
  92. view_dispatcher_attach_to_gui(gui_tester->view_dispatcher, gui, ViewDispatcherTypeFullscreen);
  93. // Submenu
  94. submenu_add_item(gui_tester->submenu, "Read", 0, submenu_callback, gui_tester);
  95. submenu_add_item(gui_tester->submenu, "Saved", 0, submenu_callback, gui_tester);
  96. submenu_add_item(gui_tester->submenu, "Emulate", 0, submenu_callback, gui_tester);
  97. submenu_add_item(gui_tester->submenu, "Enter manually", 0, submenu_callback, gui_tester);
  98. submenu_add_item(gui_tester->submenu, "Blah blah", 0, submenu_callback, gui_tester);
  99. submenu_add_item(gui_tester->submenu, "Set time", 0, submenu_callback, gui_tester);
  100. submenu_add_item(gui_tester->submenu, "Gender-bender", 0, submenu_callback, gui_tester);
  101. submenu_add_item(
  102. gui_tester->submenu, "Hack American Elections", 0, submenu_callback, gui_tester);
  103. submenu_add_item(gui_tester->submenu, "Hack the White House", 0, submenu_callback, gui_tester);
  104. // Dialog
  105. dialog_set_result_callback(gui_tester->dialog, dialog_callback);
  106. dialog_set_context(gui_tester->dialog, gui_tester);
  107. dialog_set_header_text(gui_tester->dialog, "Delete Abc123?");
  108. dialog_set_text(gui_tester->dialog, "ID: F0 00 01 02 03 04\nAre you shure?");
  109. dialog_set_left_button_text(gui_tester->dialog, "Yes");
  110. dialog_set_right_button_text(gui_tester->dialog, "No");
  111. // Dialog extended
  112. dialog_ex_set_result_callback(gui_tester->dialog_ex, dialog_ex_callback);
  113. dialog_ex_set_context(gui_tester->dialog_ex, gui_tester);
  114. dialog_ex_set_header(gui_tester->dialog_ex, "Dallas", 95, 12, AlignCenter, AlignCenter);
  115. dialog_ex_set_text(
  116. gui_tester->dialog_ex, "F6 E5 D4\nC3 B2 A1", 95, 32, AlignCenter, AlignCenter);
  117. dialog_ex_set_icon(gui_tester->dialog_ex, 0, 1, I_DolphinExcited_64x63);
  118. dialog_ex_set_left_button_text(gui_tester->dialog_ex, "More");
  119. dialog_ex_set_right_button_text(gui_tester->dialog_ex, "Save");
  120. // Popup
  121. popup_set_callback(gui_tester->popup, popup_callback);
  122. popup_set_context(gui_tester->popup, gui_tester);
  123. popup_set_icon(gui_tester->popup, 0, 2, I_DolphinMafia_115x62);
  124. popup_set_text(gui_tester->popup, "Deleted", 83, 19, AlignLeft, AlignBottom);
  125. popup_set_timeout(gui_tester->popup, 5000);
  126. popup_enable_timeout(gui_tester->popup);
  127. // Text input
  128. const uint8_t text_input_text_len = 64;
  129. char* text_input_text = calloc(text_input_text_len + 1, 1);
  130. memcpy(text_input_text, "New_ke", strlen("New_ke"));
  131. text_input_set_result_callback(
  132. gui_tester->text_input,
  133. text_input_callback,
  134. gui_tester,
  135. text_input_text,
  136. text_input_text_len);
  137. text_input_set_header_text(gui_tester->text_input, "Name the key");
  138. const uint8_t byte_input_bytes_len = 16;
  139. uint8_t byte_input_bytes[16] = {
  140. 0x00,
  141. 0x01,
  142. 0x02,
  143. 0x03,
  144. 0x04,
  145. 0x05,
  146. 0x06,
  147. 0x07,
  148. 0x08,
  149. 0x09,
  150. 0x0A,
  151. 0x0B,
  152. 0x0C,
  153. 0x0D,
  154. 0x0E,
  155. 0x0F};
  156. byte_input_set_result_callback(
  157. gui_tester->byte_input,
  158. byte_input_callback,
  159. NULL,
  160. gui_tester,
  161. byte_input_bytes,
  162. byte_input_bytes_len);
  163. byte_input_set_header_text(gui_tester->byte_input, "Enter the key");
  164. view_dispatcher_switch_to_view(gui_tester->view_dispatcher, gui_tester->view_index);
  165. while(1) {
  166. osDelay(1000);
  167. }
  168. return 0;
  169. }