Skip to content

Commit 5cee3bd

Browse files
committed
fix cnt down timer & update pomodoro
1 parent 793f8fa commit 5cee3bd

15 files changed

+402
-7
lines changed

flipp_pomodoro_app.c

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "flipp_pomodoro_app_i.h"
22

3+
#define TAG "FlippPomodoro"
4+
35
enum {
46
CustomEventConsumed = true,
57
CustomEventNotConsumed = false,
@@ -32,6 +34,9 @@ static bool flipp_pomodoro_app_custom_event_callback(void* ctx, uint32_t event)
3234
if(flipp_pomodoro__get_stage(app->state) == FlippPomodoroStageFocus) {
3335
// REGISTER a deed on work stage complete to get an acheivement
3436
dolphin_deed(DolphinDeedPluginGameWin);
37+
FURI_LOG_I(TAG, "Focus stage reward added");
38+
39+
flipp_pomodoro_statistics__increase_focus_stages_completed(app->statistics);
3540
};
3641

3742
flipp_pomodoro__toggle_stage(app->state);
@@ -56,6 +61,8 @@ FlippPomodoroApp* flipp_pomodoro_app_alloc() {
5661
app->notification_app = furi_record_open(RECORD_NOTIFICATION);
5762

5863
app->view_dispatcher = view_dispatcher_alloc();
64+
app->statistics = flipp_pomodoro_statistics__new();
65+
5966
view_dispatcher_enable_queue(app->view_dispatcher);
6067
view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
6168
view_dispatcher_set_custom_event_callback(
@@ -67,31 +74,45 @@ FlippPomodoroApp* flipp_pomodoro_app_alloc() {
6774
app->view_dispatcher, flipp_pomodoro_app_back_event_callback);
6875

6976
app->timer_view = flipp_pomodoro_view_timer_alloc();
77+
app->info_view = flipp_pomodoro_info_view_alloc();
7078

7179
view_dispatcher_add_view(
7280
app->view_dispatcher,
7381
FlippPomodoroAppViewTimer,
7482
flipp_pomodoro_view_timer_get_view(app->timer_view));
7583

76-
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
84+
view_dispatcher_add_view(
85+
app->view_dispatcher,
86+
FlippPomodoroAppViewInfo,
87+
flipp_pomodoro_info_view_get_view(app->info_view));
7788

89+
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
90+
FURI_LOG_I(TAG, "Alloc complete");
7891
return app;
7992
};
8093

8194
void flipp_pomodoro_app_free(FlippPomodoroApp* app) {
8295
view_dispatcher_remove_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
96+
view_dispatcher_remove_view(app->view_dispatcher, FlippPomodoroAppViewInfo);
8397
view_dispatcher_free(app->view_dispatcher);
8498
scene_manager_free(app->scene_manager);
8599
flipp_pomodoro_view_timer_free(app->timer_view);
100+
flipp_pomodoro_info_view_free(app->info_view);
101+
flipp_pomodoro_statistics__destroy(app->statistics);
102+
flipp_pomodoro__destroy(app->state);
86103
free(app);
87104
furi_record_close(RECORD_GUI);
88105
furi_record_close(RECORD_NOTIFICATION);
89106
};
90107

91108
int32_t flipp_pomodoro_app(void* p) {
92109
UNUSED(p);
110+
FURI_LOG_I(TAG, "Initial");
93111
FlippPomodoroApp* app = flipp_pomodoro_app_alloc();
94112

113+
FURI_LOG_I(TAG, "Run deed added");
114+
dolphin_deed(DolphinDeedPluginGameStart);
115+
95116
view_dispatcher_run(app->view_dispatcher);
96117

97118
flipp_pomodoro_app_free(app);

flipp_pomodoro_app.h

+6
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@
77
#include <gui/scene_manager.h>
88
#include <notification/notification_messages.h>
99
#include "views/flipp_pomodoro_timer_view.h"
10+
#include "views/flipp_pomodoro_info_view.h"
1011

1112
#include "modules/flipp_pomodoro.h"
13+
#include "modules/flipp_pomodoro_statistics.h"
1214

1315
typedef enum {
1416
// Reserve first 100 events for button types and indexes, starting from 0
1517
FlippPomodoroAppCustomEventStageSkip = 100,
1618
FlippPomodoroAppCustomEventStageComplete, // By Expiration
1719
FlippPomodoroAppCustomEventTimerTick,
1820
FlippPomodoroAppCustomEventStateUpdated,
21+
FlippPomodoroAppCustomEventResumeTimer,
1922
} FlippPomodoroAppCustomEvent;
2023

2124
typedef struct {
@@ -24,9 +27,12 @@ typedef struct {
2427
Gui* gui;
2528
NotificationApp* notification_app;
2629
FlippPomodoroTimerView* timer_view;
30+
FlippPomodoroInfoView* info_view;
2731
FlippPomodoroState* state;
32+
FlippPomodoroStatistics* statistics;
2833
} FlippPomodoroApp;
2934

3035
typedef enum {
3136
FlippPomodoroAppViewTimer,
37+
FlippPomodoroAppViewInfo,
3238
} FlippPomodoroAppView;

flipp_pomodoro_app_i.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#define FURI_DEBUG 1
3+
// #define FURI_DEBUG 1
44

55
/**
66
* Index of dependencies for the main app
1.21 KB
Loading

modules/flipp_pomodoro.c

+5
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ char* flipp_pomodoro__next_stage_label(FlippPomodoroState* state) {
5555
return next_stage_label[flipp_pomodoro__stage_by_index(state->current_stage_index + 1)];
5656
};
5757

58+
void flipp_pomodoro__destroy(FlippPomodoroState* state) {
59+
furi_assert(state);
60+
free(state);
61+
};
62+
5863
uint32_t flipp_pomodoro__current_stage_total_duration(FlippPomodoroState* state) {
5964
const int32_t stage_duration_seconds_map[] = {
6065
[FlippPomodoroStageFocus] = 25 * TIME_SECONDS_IN_MINUTE,

modules/flipp_pomodoro.h

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ typedef enum {
1212

1313
/// @brief State of the pomodoro timer
1414
typedef struct {
15-
PomodoroStage stage;
1615
uint8_t current_stage_index;
1716
uint32_t started_at_timestamp;
1817
} FlippPomodoroState;

modules/flipp_pomodoro_statistics.c

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "flipp_pomodoro_statistics.h"
2+
3+
FlippPomodoroStatistics* flipp_pomodoro_statistics__new() {
4+
FlippPomodoroStatistics* statistics = malloc(sizeof(FlippPomodoroStatistics));
5+
6+
statistics->focus_stages_completed = 0;
7+
8+
return statistics;
9+
}
10+
11+
// Return the number of completed focus stages
12+
uint8_t
13+
flipp_pomodoro_statistics__get_focus_stages_completed(FlippPomodoroStatistics* statistics) {
14+
return statistics->focus_stages_completed;
15+
}
16+
17+
// Increase the number of completed focus stages by one
18+
void flipp_pomodoro_statistics__increase_focus_stages_completed(
19+
FlippPomodoroStatistics* statistics) {
20+
statistics->focus_stages_completed++;
21+
}
22+
23+
void flipp_pomodoro_statistics__destroy(FlippPomodoroStatistics* statistics) {
24+
furi_assert(statistics);
25+
free(statistics);
26+
};

modules/flipp_pomodoro_statistics.h

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#pragma once
2+
#include <furi_hal.h>
3+
4+
/** @brief FlippPomodoroStatistics structure
5+
*
6+
* This structure is used to keep track of completed focus stages.
7+
*/
8+
typedef struct {
9+
uint8_t focus_stages_completed;
10+
} FlippPomodoroStatistics;
11+
12+
/** @brief Allocate and initialize a new FlippPomodoroStatistics
13+
*
14+
* This function allocates a new FlippPomodoroStatistics structure, initializes its members
15+
* and returns a pointer to it.
16+
*
17+
* @return A pointer to a new FlippPomodoroStatistics structure
18+
*/
19+
FlippPomodoroStatistics* flipp_pomodoro_statistics__new();
20+
21+
/** @brief Get the number of completed focus stages
22+
*
23+
* This function retrieves the number of completed focus stages in a FlippPomodoroStatistics structure.
24+
*
25+
* @param statistics A pointer to a FlippPomodoroStatistics structure
26+
* @return The number of completed focus stages
27+
*/
28+
uint8_t flipp_pomodoro_statistics__get_focus_stages_completed(FlippPomodoroStatistics* statistics);
29+
30+
/** @brief Increase the number of completed focus stages
31+
*
32+
* This function increases the count of the completed focus stages by one in a FlippPomodoroStatistics structure.
33+
*
34+
* @param statistics A pointer to a FlippPomodoroStatistics structure
35+
*/
36+
void flipp_pomodoro_statistics__increase_focus_stages_completed(
37+
FlippPomodoroStatistics* statistics);
38+
39+
/** @brief Free a FlippPomodoroStatistics structure
40+
*
41+
* This function frees the memory used by a FlippPomodoroStatistics structure.
42+
*
43+
* @param statistics A pointer to a FlippPomodoroStatistics structure
44+
*/
45+
void flipp_pomodoro_statistics__destroy(FlippPomodoroStatistics* state);
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
ADD_SCENE(flipp_pomodoro, info, Info)
12
ADD_SCENE(flipp_pomodoro, timer, Timer)

scenes/flipp_pomodoro_scene.h

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#pragma once
12
#include <gui/scene_manager.h>
23

34
// Generate scene id and total number

scenes/flipp_pomodoro_scene_info.c

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <furi.h>
2+
#include <gui/view_dispatcher.h>
3+
#include <gui/scene_manager.h>
4+
#include "flipp_pomodoro_scene.h"
5+
#include "../flipp_pomodoro_app.h"
6+
#include "../views/flipp_pomodoro_info_view.h"
7+
8+
enum { SceneEventConusmed = true, SceneEventNotConusmed = false };
9+
10+
void flipp_pomodoro_scene_info_on_back_to_timer(void* ctx) {
11+
furi_assert(ctx);
12+
FlippPomodoroApp* app = ctx;
13+
14+
view_dispatcher_send_custom_event(
15+
app->view_dispatcher, FlippPomodoroAppCustomEventResumeTimer);
16+
};
17+
18+
void flipp_pomodoro_scene_info_on_enter(void* ctx) {
19+
furi_assert(ctx);
20+
FlippPomodoroApp* app = ctx;
21+
22+
view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewInfo);
23+
flipp_pomodoro_info_view_set_pomodoros_completed(
24+
flipp_pomodoro_info_view_get_view(app->info_view),
25+
flipp_pomodoro_statistics__get_focus_stages_completed(app->statistics));
26+
flipp_pomodoro_info_view_set_mode(
27+
flipp_pomodoro_info_view_get_view(app->info_view), FlippPomodoroInfoViewModeStats);
28+
flipp_pomodoro_info_view_set_resume_timer_cb(
29+
app->info_view, flipp_pomodoro_scene_info_on_back_to_timer, app);
30+
};
31+
32+
void flipp_pomodoro_scene_info_handle_custom_event(
33+
FlippPomodoroApp* app,
34+
FlippPomodoroAppCustomEvent custom_event) {
35+
if(custom_event == FlippPomodoroAppCustomEventResumeTimer) {
36+
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
37+
}
38+
};
39+
40+
bool flipp_pomodoro_scene_info_on_event(void* ctx, SceneManagerEvent event) {
41+
furi_assert(ctx);
42+
FlippPomodoroApp* app = ctx;
43+
44+
switch(event.type) {
45+
case SceneManagerEventTypeBack:
46+
view_dispatcher_stop(app->view_dispatcher);
47+
return SceneEventConusmed;
48+
case SceneManagerEventTypeCustom:
49+
flipp_pomodoro_scene_info_handle_custom_event(app, event.event);
50+
return SceneEventConusmed;
51+
default:
52+
break;
53+
};
54+
return SceneEventNotConusmed;
55+
};
56+
57+
void flipp_pomodoro_scene_info_on_exit(void* ctx) {
58+
UNUSED(ctx);
59+
};

scenes/flipp_pomodoro_scene_timer.c

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#include <furi.h>
22
#include <gui/scene_manager.h>
33
#include <gui/view_dispatcher.h>
4+
#include <gui/scene_manager.h>
5+
#include "flipp_pomodoro_scene.h"
46
#include "../flipp_pomodoro_app.h"
57
#include "../views/flipp_pomodoro_timer_view.h"
68

79
enum { SceneEventConusmed = true, SceneEventNotConusmed = false };
810

9-
uint8_t ExitSignal = 0;
10-
1111
void flipp_pomodoro_scene_timer_sync_view_state(void* ctx) {
1212
furi_assert(ctx);
1313

@@ -30,6 +30,11 @@ void flipp_pomodoro_scene_timer_on_enter(void* ctx) {
3030

3131
FlippPomodoroApp* app = ctx;
3232

33+
if(flipp_pomodoro__is_stage_expired(app->state)) {
34+
flipp_pomodoro__destroy(app->state);
35+
app->state = flipp_pomodoro__new();
36+
}
37+
3338
view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
3439
flipp_pomodoro_scene_timer_sync_view_state(app);
3540
flipp_pomodoro_view_timer_set_on_right_cb(
@@ -59,7 +64,8 @@ bool flipp_pomodoro_scene_timer_on_event(void* ctx, SceneManagerEvent event) {
5964
flipp_pomodoro_scene_timer_handle_custom_event(app, event.event);
6065
return SceneEventConusmed;
6166
case SceneManagerEventTypeBack:
62-
return ExitSignal;
67+
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneInfo);
68+
return SceneEventConusmed;
6369
default:
6470
break;
6571
};

0 commit comments

Comments
 (0)