flipperzero-firmware_official_dev 728 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. commit 9ae58f5462b1a4d8efba88e0ac24cd1fff83ede6
  2. Author: Nikolay Minaylov <nm29719@gmail.com>
  3. Date: Mon Feb 27 17:04:14 2023 +0300
  4. [FL-3116, FL-3136] BadUSB UI fixes (#2439)
  5. diff --git a/applications/main/bad_usb/bad_usb_app.c b/applications/main/bad_usb/bad_usb_app.c
  6. index 1b2495791..ea97c4487 100644
  7. --- a/applications/main/bad_usb/bad_usb_app.c
  8. +++ b/applications/main/bad_usb/bad_usb_app.c
  9. @@ -142,10 +142,6 @@ void bad_usb_app_free(BadUsbApp* app) {
  10. app->bad_usb_script = NULL;
  11. }
  12. - if(app->usb_if_prev) {
  13. - furi_check(furi_hal_usb_set_config(app->usb_if_prev, NULL));
  14. - }
  15. -
  16. // Views
  17. view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewWork);
  18. bad_usb_free(app->bad_usb_view);
  19. @@ -172,6 +168,10 @@ void bad_usb_app_free(BadUsbApp* app) {
  20. furi_string_free(app->file_path);
  21. furi_string_free(app->keyboard_layout);
  22. + if(app->usb_if_prev) {
  23. + furi_check(furi_hal_usb_set_config(app->usb_if_prev, NULL));
  24. + }
  25. +
  26. free(app);
  27. }
  28. diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_work.c b/applications/main/bad_usb/scenes/bad_usb_scene_work.c
  29. index 187b83bd9..6f2b82693 100644
  30. --- a/applications/main/bad_usb/scenes/bad_usb_scene_work.c
  31. +++ b/applications/main/bad_usb/scenes/bad_usb_scene_work.c
  32. @@ -16,7 +16,9 @@ bool bad_usb_scene_work_on_event(void* context, SceneManagerEvent event) {
  33. if(event.type == SceneManagerEventTypeCustom) {
  34. if(event.event == InputKeyLeft) {
  35. - scene_manager_next_scene(app->scene_manager, BadUsbSceneConfig);
  36. + if(bad_usb_is_idle_state(app->bad_usb_view)) {
  37. + scene_manager_next_scene(app->scene_manager, BadUsbSceneConfig);
  38. + }
  39. consumed = true;
  40. } else if(event.event == InputKeyOk) {
  41. bad_usb_script_toggle(app->bad_usb_script);
  42. diff --git a/applications/main/bad_usb/views/bad_usb_view.c b/applications/main/bad_usb/views/bad_usb_view.c
  43. index bb9dc3b7e..9ee9dc341 100644
  44. --- a/applications/main/bad_usb/views/bad_usb_view.c
  45. +++ b/applications/main/bad_usb/views/bad_usb_view.c
  46. @@ -48,17 +48,13 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
  47. if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone) ||
  48. (model->state.state == BadUsbStateNotConnected)) {
  49. elements_button_center(canvas, "Run");
  50. + elements_button_left(canvas, "Config");
  51. } else if((model->state.state == BadUsbStateRunning) || (model->state.state == BadUsbStateDelay)) {
  52. elements_button_center(canvas, "Stop");
  53. } else if(model->state.state == BadUsbStateWillRun) {
  54. elements_button_center(canvas, "Cancel");
  55. }
  56. - if((model->state.state == BadUsbStateNotConnected) ||
  57. - (model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) {
  58. - elements_button_left(canvas, "Config");
  59. - }
  60. -
  61. if(model->state.state == BadUsbStateNotConnected) {
  62. canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
  63. canvas_set_font(canvas, FontPrimary);
  64. @@ -203,6 +199,7 @@ void bad_usb_set_layout(BadUsb* bad_usb, const char* layout) {
  65. { strlcpy(model->layout, layout, MAX_NAME_LEN); },
  66. true);
  67. }
  68. +
  69. void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) {
  70. furi_assert(st);
  71. with_view_model(
  72. @@ -214,3 +211,19 @@ void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) {
  73. },
  74. true);
  75. }
  76. +
  77. +bool bad_usb_is_idle_state(BadUsb* bad_usb) {
  78. + bool is_idle = false;
  79. + with_view_model(
  80. + bad_usb->view,
  81. + BadUsbModel * model,
  82. + {
  83. + if((model->state.state == BadUsbStateIdle) ||
  84. + (model->state.state == BadUsbStateDone) ||
  85. + (model->state.state == BadUsbStateNotConnected)) {
  86. + is_idle = true;
  87. + }
  88. + },
  89. + false);
  90. + return is_idle;
  91. +}
  92. diff --git a/applications/main/bad_usb/views/bad_usb_view.h b/applications/main/bad_usb/views/bad_usb_view.h
  93. index 8447fb055..2fc01688a 100644
  94. --- a/applications/main/bad_usb/views/bad_usb_view.h
  95. +++ b/applications/main/bad_usb/views/bad_usb_view.h
  96. @@ -19,3 +19,5 @@ void bad_usb_set_file_name(BadUsb* bad_usb, const char* name);
  97. void bad_usb_set_layout(BadUsb* bad_usb, const char* layout);
  98. void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st);
  99. +
  100. +bool bad_usb_is_idle_state(BadUsb* bad_usb);