flipp_pomodoro_scene_timer.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 { SceneEventConusmed = true, SceneEventNotConusmed = false };
  9. void flipp_pomodoro_scene_timer_sync_view_state(void* ctx) {
  10. furi_assert(ctx);
  11. FlippPomodoroApp* app = ctx;
  12. flipp_pomodoro_view_timer_set_state(
  13. flipp_pomodoro_view_timer_get_view(app->timer_view), app->state);
  14. };
  15. void flipp_pomodoro_scene_timer_on_next_stage(void* ctx) {
  16. furi_assert(ctx);
  17. FlippPomodoroApp* app = ctx;
  18. view_dispatcher_send_custom_event(app->view_dispatcher, FlippPomodoroAppCustomEventStageSkip);
  19. };
  20. void flipp_pomodoro_scene_timer_on_enter(void* ctx) {
  21. furi_assert(ctx);
  22. FlippPomodoroApp* app = ctx;
  23. if(flipp_pomodoro__is_stage_expired(app->state)) {
  24. flipp_pomodoro__destroy(app->state);
  25. app->state = flipp_pomodoro__new();
  26. }
  27. view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
  28. flipp_pomodoro_scene_timer_sync_view_state(app);
  29. flipp_pomodoro_view_timer_set_on_right_cb(
  30. app->timer_view, flipp_pomodoro_scene_timer_on_next_stage, app);
  31. };
  32. void flipp_pomodoro_scene_timer_handle_custom_event(
  33. FlippPomodoroApp* app,
  34. FlippPomodoroAppCustomEvent custom_event) {
  35. if(custom_event == FlippPomodoroAppCustomEventTimerTick &&
  36. flipp_pomodoro__is_stage_expired(app->state)) {
  37. view_dispatcher_send_custom_event(
  38. app->view_dispatcher, FlippPomodoroAppCustomEventStageComplete);
  39. }
  40. if(custom_event == FlippPomodoroAppCustomEventStateUpdated) {
  41. flipp_pomodoro_scene_timer_sync_view_state(app);
  42. }
  43. };
  44. bool flipp_pomodoro_scene_timer_on_event(void* ctx, SceneManagerEvent event) {
  45. furi_assert(ctx);
  46. FlippPomodoroApp* app = ctx;
  47. switch(event.type) {
  48. case SceneManagerEventTypeCustom:
  49. flipp_pomodoro_scene_timer_handle_custom_event(app, event.event);
  50. return SceneEventConusmed;
  51. case SceneManagerEventTypeBack:
  52. scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneInfo);
  53. return SceneEventConusmed;
  54. default:
  55. break;
  56. };
  57. return SceneEventNotConusmed;
  58. };
  59. void flipp_pomodoro_scene_timer_on_exit(void* ctx) {
  60. UNUSED(ctx);
  61. };