flipp_pomodoro_scene_timer.c 2.4 KB

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