Skip to content

Commit

Permalink
fix cnt down timer & update pomodoro
Browse files Browse the repository at this point in the history
  • Loading branch information
xMasterX committed Jul 8, 2023
1 parent 793f8fa commit 5cee3bd
Show file tree
Hide file tree
Showing 15 changed files with 402 additions and 7 deletions.
23 changes: 22 additions & 1 deletion flipp_pomodoro_app.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "flipp_pomodoro_app_i.h"

#define TAG "FlippPomodoro"

enum {
CustomEventConsumed = true,
CustomEventNotConsumed = false,
Expand Down Expand Up @@ -32,6 +34,9 @@ static bool flipp_pomodoro_app_custom_event_callback(void* ctx, uint32_t event)
if(flipp_pomodoro__get_stage(app->state) == FlippPomodoroStageFocus) {
// REGISTER a deed on work stage complete to get an acheivement
dolphin_deed(DolphinDeedPluginGameWin);
FURI_LOG_I(TAG, "Focus stage reward added");

flipp_pomodoro_statistics__increase_focus_stages_completed(app->statistics);
};

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

app->view_dispatcher = view_dispatcher_alloc();
app->statistics = flipp_pomodoro_statistics__new();

view_dispatcher_enable_queue(app->view_dispatcher);
view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
view_dispatcher_set_custom_event_callback(
Expand All @@ -67,31 +74,45 @@ FlippPomodoroApp* flipp_pomodoro_app_alloc() {
app->view_dispatcher, flipp_pomodoro_app_back_event_callback);

app->timer_view = flipp_pomodoro_view_timer_alloc();
app->info_view = flipp_pomodoro_info_view_alloc();

view_dispatcher_add_view(
app->view_dispatcher,
FlippPomodoroAppViewTimer,
flipp_pomodoro_view_timer_get_view(app->timer_view));

scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
view_dispatcher_add_view(
app->view_dispatcher,
FlippPomodoroAppViewInfo,
flipp_pomodoro_info_view_get_view(app->info_view));

scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
FURI_LOG_I(TAG, "Alloc complete");
return app;
};

void flipp_pomodoro_app_free(FlippPomodoroApp* app) {
view_dispatcher_remove_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
view_dispatcher_remove_view(app->view_dispatcher, FlippPomodoroAppViewInfo);
view_dispatcher_free(app->view_dispatcher);
scene_manager_free(app->scene_manager);
flipp_pomodoro_view_timer_free(app->timer_view);
flipp_pomodoro_info_view_free(app->info_view);
flipp_pomodoro_statistics__destroy(app->statistics);
flipp_pomodoro__destroy(app->state);
free(app);
furi_record_close(RECORD_GUI);
furi_record_close(RECORD_NOTIFICATION);
};

int32_t flipp_pomodoro_app(void* p) {
UNUSED(p);
FURI_LOG_I(TAG, "Initial");
FlippPomodoroApp* app = flipp_pomodoro_app_alloc();

FURI_LOG_I(TAG, "Run deed added");
dolphin_deed(DolphinDeedPluginGameStart);

view_dispatcher_run(app->view_dispatcher);

flipp_pomodoro_app_free(app);
Expand Down
6 changes: 6 additions & 0 deletions flipp_pomodoro_app.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@
#include <gui/scene_manager.h>
#include <notification/notification_messages.h>
#include "views/flipp_pomodoro_timer_view.h"
#include "views/flipp_pomodoro_info_view.h"

#include "modules/flipp_pomodoro.h"
#include "modules/flipp_pomodoro_statistics.h"

typedef enum {
// Reserve first 100 events for button types and indexes, starting from 0
FlippPomodoroAppCustomEventStageSkip = 100,
FlippPomodoroAppCustomEventStageComplete, // By Expiration
FlippPomodoroAppCustomEventTimerTick,
FlippPomodoroAppCustomEventStateUpdated,
FlippPomodoroAppCustomEventResumeTimer,
} FlippPomodoroAppCustomEvent;

typedef struct {
Expand All @@ -24,9 +27,12 @@ typedef struct {
Gui* gui;
NotificationApp* notification_app;
FlippPomodoroTimerView* timer_view;
FlippPomodoroInfoView* info_view;
FlippPomodoroState* state;
FlippPomodoroStatistics* statistics;
} FlippPomodoroApp;

typedef enum {
FlippPomodoroAppViewTimer,
FlippPomodoroAppViewInfo,
} FlippPomodoroAppView;
2 changes: 1 addition & 1 deletion flipp_pomodoro_app_i.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

#define FURI_DEBUG 1
// #define FURI_DEBUG 1

/**
* Index of dependencies for the main app
Expand Down
Binary file added images/flipp_pomodoro_learn_50x128.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions modules/flipp_pomodoro.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ char* flipp_pomodoro__next_stage_label(FlippPomodoroState* state) {
return next_stage_label[flipp_pomodoro__stage_by_index(state->current_stage_index + 1)];
};

void flipp_pomodoro__destroy(FlippPomodoroState* state) {
furi_assert(state);
free(state);
};

uint32_t flipp_pomodoro__current_stage_total_duration(FlippPomodoroState* state) {
const int32_t stage_duration_seconds_map[] = {
[FlippPomodoroStageFocus] = 25 * TIME_SECONDS_IN_MINUTE,
Expand Down
1 change: 0 additions & 1 deletion modules/flipp_pomodoro.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ typedef enum {

/// @brief State of the pomodoro timer
typedef struct {
PomodoroStage stage;
uint8_t current_stage_index;
uint32_t started_at_timestamp;
} FlippPomodoroState;
Expand Down
26 changes: 26 additions & 0 deletions modules/flipp_pomodoro_statistics.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "flipp_pomodoro_statistics.h"

FlippPomodoroStatistics* flipp_pomodoro_statistics__new() {
FlippPomodoroStatistics* statistics = malloc(sizeof(FlippPomodoroStatistics));

statistics->focus_stages_completed = 0;

return statistics;
}

// Return the number of completed focus stages
uint8_t
flipp_pomodoro_statistics__get_focus_stages_completed(FlippPomodoroStatistics* statistics) {
return statistics->focus_stages_completed;
}

// Increase the number of completed focus stages by one
void flipp_pomodoro_statistics__increase_focus_stages_completed(
FlippPomodoroStatistics* statistics) {
statistics->focus_stages_completed++;
}

void flipp_pomodoro_statistics__destroy(FlippPomodoroStatistics* statistics) {
furi_assert(statistics);
free(statistics);
};
45 changes: 45 additions & 0 deletions modules/flipp_pomodoro_statistics.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#pragma once
#include <furi_hal.h>

/** @brief FlippPomodoroStatistics structure
*
* This structure is used to keep track of completed focus stages.
*/
typedef struct {
uint8_t focus_stages_completed;
} FlippPomodoroStatistics;

/** @brief Allocate and initialize a new FlippPomodoroStatistics
*
* This function allocates a new FlippPomodoroStatistics structure, initializes its members
* and returns a pointer to it.
*
* @return A pointer to a new FlippPomodoroStatistics structure
*/
FlippPomodoroStatistics* flipp_pomodoro_statistics__new();

/** @brief Get the number of completed focus stages
*
* This function retrieves the number of completed focus stages in a FlippPomodoroStatistics structure.
*
* @param statistics A pointer to a FlippPomodoroStatistics structure
* @return The number of completed focus stages
*/
uint8_t flipp_pomodoro_statistics__get_focus_stages_completed(FlippPomodoroStatistics* statistics);

/** @brief Increase the number of completed focus stages
*
* This function increases the count of the completed focus stages by one in a FlippPomodoroStatistics structure.
*
* @param statistics A pointer to a FlippPomodoroStatistics structure
*/
void flipp_pomodoro_statistics__increase_focus_stages_completed(
FlippPomodoroStatistics* statistics);

/** @brief Free a FlippPomodoroStatistics structure
*
* This function frees the memory used by a FlippPomodoroStatistics structure.
*
* @param statistics A pointer to a FlippPomodoroStatistics structure
*/
void flipp_pomodoro_statistics__destroy(FlippPomodoroStatistics* state);
1 change: 1 addition & 0 deletions scenes/config/flipp_pomodoro_scene_config.h
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
ADD_SCENE(flipp_pomodoro, info, Info)
ADD_SCENE(flipp_pomodoro, timer, Timer)
1 change: 1 addition & 0 deletions scenes/flipp_pomodoro_scene.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#pragma once
#include <gui/scene_manager.h>

// Generate scene id and total number
Expand Down
59 changes: 59 additions & 0 deletions scenes/flipp_pomodoro_scene_info.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include <furi.h>
#include <gui/view_dispatcher.h>
#include <gui/scene_manager.h>
#include "flipp_pomodoro_scene.h"
#include "../flipp_pomodoro_app.h"
#include "../views/flipp_pomodoro_info_view.h"

enum { SceneEventConusmed = true, SceneEventNotConusmed = false };

void flipp_pomodoro_scene_info_on_back_to_timer(void* ctx) {
furi_assert(ctx);
FlippPomodoroApp* app = ctx;

view_dispatcher_send_custom_event(
app->view_dispatcher, FlippPomodoroAppCustomEventResumeTimer);
};

void flipp_pomodoro_scene_info_on_enter(void* ctx) {
furi_assert(ctx);
FlippPomodoroApp* app = ctx;

view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewInfo);
flipp_pomodoro_info_view_set_pomodoros_completed(
flipp_pomodoro_info_view_get_view(app->info_view),
flipp_pomodoro_statistics__get_focus_stages_completed(app->statistics));
flipp_pomodoro_info_view_set_mode(
flipp_pomodoro_info_view_get_view(app->info_view), FlippPomodoroInfoViewModeStats);
flipp_pomodoro_info_view_set_resume_timer_cb(
app->info_view, flipp_pomodoro_scene_info_on_back_to_timer, app);
};

void flipp_pomodoro_scene_info_handle_custom_event(
FlippPomodoroApp* app,
FlippPomodoroAppCustomEvent custom_event) {
if(custom_event == FlippPomodoroAppCustomEventResumeTimer) {
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneTimer);
}
};

bool flipp_pomodoro_scene_info_on_event(void* ctx, SceneManagerEvent event) {
furi_assert(ctx);
FlippPomodoroApp* app = ctx;

switch(event.type) {
case SceneManagerEventTypeBack:
view_dispatcher_stop(app->view_dispatcher);
return SceneEventConusmed;
case SceneManagerEventTypeCustom:
flipp_pomodoro_scene_info_handle_custom_event(app, event.event);
return SceneEventConusmed;
default:
break;
};
return SceneEventNotConusmed;
};

void flipp_pomodoro_scene_info_on_exit(void* ctx) {
UNUSED(ctx);
};
12 changes: 9 additions & 3 deletions scenes/flipp_pomodoro_scene_timer.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include <furi.h>
#include <gui/scene_manager.h>
#include <gui/view_dispatcher.h>
#include <gui/scene_manager.h>
#include "flipp_pomodoro_scene.h"
#include "../flipp_pomodoro_app.h"
#include "../views/flipp_pomodoro_timer_view.h"

enum { SceneEventConusmed = true, SceneEventNotConusmed = false };

uint8_t ExitSignal = 0;

void flipp_pomodoro_scene_timer_sync_view_state(void* ctx) {
furi_assert(ctx);

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

FlippPomodoroApp* app = ctx;

if(flipp_pomodoro__is_stage_expired(app->state)) {
flipp_pomodoro__destroy(app->state);
app->state = flipp_pomodoro__new();
}

view_dispatcher_switch_to_view(app->view_dispatcher, FlippPomodoroAppViewTimer);
flipp_pomodoro_scene_timer_sync_view_state(app);
flipp_pomodoro_view_timer_set_on_right_cb(
Expand Down Expand Up @@ -59,7 +64,8 @@ bool flipp_pomodoro_scene_timer_on_event(void* ctx, SceneManagerEvent event) {
flipp_pomodoro_scene_timer_handle_custom_event(app, event.event);
return SceneEventConusmed;
case SceneManagerEventTypeBack:
return ExitSignal;
scene_manager_next_scene(app->scene_manager, FlippPomodoroSceneInfo);
return SceneEventConusmed;
default:
break;
};
Expand Down
Loading

0 comments on commit 5cee3bd

Please sign in to comment.