flipp_pomodoro_scene_timer.c 2.1 KB

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