flipp_pomodoro_scene_timer.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <furi.h>
  2. #include <gui/scene_manager.h>
  3. #include <gui/view_dispatcher.h>
  4. #include "../flipp_pomodoro_app.h"
  5. #include "../views/flipp_pomodoro_timer_view.h"
  6. enum
  7. {
  8. SceneEventConusmed = true,
  9. SceneEventNotConusmed = false
  10. };
  11. uint8_t ExitSignal = 0;
  12. void flipp_pomodoro_scene_timer_sync_view_state(void *ctx)
  13. {
  14. furi_assert(ctx);
  15. FlippPomodoroApp *app = ctx;
  16. flipp_pomodoro_view_timer_set_state(
  17. flipp_pomodoro_view_timer_get_view(app->timer_view),
  18. app->state);
  19. };
  20. void flipp_pomodoro_scene_timer_on_next_stage(void *ctx)
  21. {
  22. furi_assert(ctx);
  23. FlippPomodoroApp *app = ctx;
  24. view_dispatcher_send_custom_event(
  25. app->view_dispatcher,
  26. FlippPomodoroAppCustomEventStageSkip);
  27. };
  28. void flipp_pomodoro_scene_timer_on_enter(void *ctx)
  29. {
  30. furi_assert(ctx);
  31. FlippPomodoroApp *app = ctx;
  32. view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
  33. flipp_pomodoro_scene_timer_sync_view_state(app);
  34. flipp_pomodoro_view_timer_set_on_right_cb(
  35. app->timer_view,
  36. flipp_pomodoro_scene_timer_on_next_stage,
  37. app);
  38. };
  39. void flipp_pomodoro_scene_timer_handle_custom_event(FlippPomodoroApp *app, FlippPomodoroAppCustomEvent custom_event)
  40. {
  41. if (custom_event == FlippPomodoroAppCustomEventTimerTick && flipp_pomodoro__is_stage_expired(app->state))
  42. {
  43. view_dispatcher_send_custom_event(
  44. app->view_dispatcher,
  45. FlippPomodoroAppCustomEventStageComplete);
  46. }
  47. if (custom_event == FlippPomodoroAppCustomEventStateUpdated)
  48. {
  49. flipp_pomodoro_scene_timer_sync_view_state(app);
  50. }
  51. };
  52. bool flipp_pomodoro_scene_timer_on_event(void *ctx, SceneManagerEvent event)
  53. {
  54. furi_assert(ctx);
  55. FlippPomodoroApp *app = ctx;
  56. switch (event.type)
  57. {
  58. case SceneManagerEventTypeCustom:
  59. flipp_pomodoro_scene_timer_handle_custom_event(
  60. app,
  61. event.event);
  62. return SceneEventConusmed;
  63. case SceneManagerEventTypeBack:
  64. return ExitSignal;
  65. default:
  66. break;
  67. };
  68. return SceneEventNotConusmed;
  69. };
  70. void flipp_pomodoro_scene_timer_on_exit(void *ctx)
  71. {
  72. UNUSED(ctx);
  73. };