MX 1 год назад
Родитель
Сommit
e62db22b7d

+ 4 - 1
README.md

@@ -29,4 +29,7 @@ Then run the command:
 The application will be compiled and copied onto your device. 
 
 ## Licensing
-This code is open-source and may be used for whatever you want to do with it. 
+This code is open-source under the conditions of GNU GENERAL PUBLIC LICENSE. 
+
+## Credits
+Thanks to [Willy-JL](https://github.com/Willy-JL) for assisting in the fine-tuning of the app

+ 3 - 3
application.fam

@@ -9,11 +9,11 @@ App(
     ],
     stack_size=2 * 1024,
     order=10,
-    fap_icon="color_guess_10px.png",
+    fap_icon="icons/color_guess_10px.png",
     fap_icon_assets="icons",
-    fap_version="1.2",
+    fap_version="1.5",
     fap_category="Games",
     fap_author="Leedave",
     fap_description="Color Guessing Game",
     fap_weburl="https://github.com/leedave/Leeds-Flipper-Zero-Applications",
-)
+)

+ 21 - 22
color_guess.c

@@ -34,8 +34,7 @@ ColorGuess* color_guess_app_alloc() {
     // Load configs
     color_guess_read_settings(app);
 
-    NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
-    notification_message(notification, &sequence_display_backlight_on);
+    notification_message(app->notification, &sequence_display_backlight_on);
 
     //Scene additions
     app->view_dispatcher = view_dispatcher_alloc();
@@ -49,30 +48,30 @@ ColorGuess* color_guess_app_alloc() {
         app->view_dispatcher, color_guess_tick_event_callback, 100);
     view_dispatcher_set_custom_event_callback(
         app->view_dispatcher, color_guess_custom_event_callback);
-    app->submenu = submenu_alloc();
 
-    view_dispatcher_add_view(
-        app->view_dispatcher, ColorGuessViewIdMenu, submenu_get_view(app->submenu));
-    app->variable_item_list = variable_item_list_alloc();
-    view_dispatcher_add_view(
-        app->view_dispatcher,
-        ColorGuessViewIdSettings,
-        variable_item_list_get_view(app->variable_item_list));
     app->color_guess_startscreen = color_guess_startscreen_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
         ColorGuessViewIdStartscreen,
         color_guess_startscreen_get_view(app->color_guess_startscreen));
+    app->submenu = submenu_alloc();
+    view_dispatcher_add_view(
+        app->view_dispatcher, ColorGuessViewIdMenu, submenu_get_view(app->submenu));
+    app->color_guess_play = color_guess_play_alloc();
+    view_dispatcher_add_view(
+        app->view_dispatcher,
+        ColorGuessViewIdPlay,
+        color_guess_play_get_view(app->color_guess_play));
     app->color_guess_color_set = color_guess_color_set_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
         ColorGuessViewIdColorSet,
         color_guess_color_set_get_view(app->color_guess_color_set));
-    app->color_guess_play = color_guess_play_alloc();
+    app->variable_item_list = variable_item_list_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
-        ColorGuessViewIdPlay,
-        color_guess_play_get_view(app->color_guess_play));
+        ColorGuessViewIdSettings,
+        variable_item_list_get_view(app->variable_item_list));
 
     //End Scene Additions
 
@@ -86,16 +85,21 @@ void color_guess_app_free(ColorGuess* app) {
     scene_manager_free(app->scene_manager);
 
     // View Dispatcher
-    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdMenu);
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdStartscreen);
-    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdColorSet);
+    color_guess_startscreen_free(app->color_guess_startscreen);
+    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdMenu);
+    submenu_free(app->submenu);
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdPlay);
+    color_guess_play_free(app->color_guess_play);
+    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdColorSet);
+    color_guess_color_set_free(app->color_guess_color_set);
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdSettings);
-    submenu_free(app->submenu);
+    variable_item_list_free(app->variable_item_list);
 
     view_dispatcher_free(app->view_dispatcher);
 
-    // GUI
+    // Records
+    furi_record_close(RECORD_NOTIFICATION);
     furi_record_close(RECORD_GUI);
 
     app->view_port = NULL;
@@ -113,11 +117,6 @@ int32_t color_guess_app(void* p) {
         return 255;
     }
 
-    if(!furi_hal_region_is_provisioned()) {
-        color_guess_app_free(app);
-        return 1;
-    }
-
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
     scene_manager_next_scene(app->scene_manager, ColorGuessSceneStartscreen);

+ 1 - 0
color_guess.h

@@ -17,6 +17,7 @@
 #include "views/color_guess_startscreen.h"
 #include "helpers/color_guess_storage.h"
 
+#define COLOR_GUESS_VERSION "1.5"
 #define TAG "Color_Guess"
 
 typedef struct {

BIN
color_guess_10px.png


+ 19 - 0
docs/changelog.md

@@ -1,3 +1,22 @@
+## 1.5
+- Additional Memory Management fixes by Willy-JL
+- Redraw Issue fixed by Willy-JL
+- Added GNU License
+- Added version number
+
+## 1.4
+- Prevent value changing on win view
+- Fix issues with FW build 0.99.x
+
+## 1.3
+- Patched Memory Leak in storage
+
+## v1.2
+- Updated compatibility to 0.95.0-rc
+
+## v1.1
+- Updated Launch Screen GFX
+
 ## v1.0
 
 First release to Application Catalog

+ 2 - 0
helpers/color_guess_haptic.h

@@ -1,3 +1,5 @@
+#pragma once
+
 #include <notification/notification_messages.h>
 
 void color_guess_play_happy_bump(void* context);

+ 1 - 1
helpers/color_guess_led.h

@@ -1,4 +1,4 @@
-
+#pragma once
 
 void color_guess_led_set_rgb(void* context, int red, int green, int blue);
 

+ 3 - 1
helpers/color_guess_storage.c

@@ -85,6 +85,7 @@ void color_guess_read_settings(void* context) {
         FURI_LOG_E(TAG, "Cannot open file %s", COLOR_GUESS_SETTINGS_SAVE_PATH);
         color_guess_close_config_file(fff_file);
         color_guess_close_storage();
+        furi_string_free(temp_str);
         return;
     }
 
@@ -95,14 +96,15 @@ void color_guess_read_settings(void* context) {
         furi_string_free(temp_str);
         return;
     }
-    furi_string_free(temp_str);
 
     if(file_version < COLOR_GUESS_SETTINGS_FILE_VERSION) {
         FURI_LOG_I(TAG, "old config version, will be removed.");
         color_guess_close_config_file(fff_file);
         color_guess_close_storage();
+        furi_string_free(temp_str);
         return;
     }
+    furi_string_free(temp_str);
 
     flipper_format_read_uint32(fff_file, COLOR_GUESS_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
     flipper_format_read_uint32(fff_file, COLOR_GUESS_SETTINGS_KEY_LED, &app->led, 1);

BIN
icons/color_guess_10px.png


+ 7 - 0
scenes/color_guess_scene_play.c

@@ -39,6 +39,13 @@ bool color_guess_scene_play_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
             break;
         }
+    } else if(event.type == SceneManagerEventTypeTick) {
+        // Redraw on tick event to update timer
+        with_view_model(
+            color_guess_play_get_view(app->color_guess_play),
+            void* model,
+            { UNUSED(model); },
+            true);
     }
 
     return consumed;

+ 0 - 2
views/color_guess_color_set.c

@@ -7,8 +7,6 @@
 #include <gui/elements.h>
 #include <dolphin/dolphin.h>
 
-//extern const Icon* digits[17];
-
 struct ColorGuessColorSet {
     View* view;
     ColorGuessColorSetCallback callback;

+ 25 - 18
views/color_guess_play.c

@@ -8,8 +8,7 @@
 #include <input/input.h>
 #include <gui/elements.h>
 #include <dolphin/dolphin.h>
-
-//extern const Icon* digits[17];
+#include <lib/datetime/datetime.h>
 
 struct ColorGuessPlay {
     View* view;
@@ -215,9 +214,11 @@ bool color_guess_play_input(InputEvent* event, void* context) {
                 instance->view,
                 ColorGuessPlayModel * model,
                 {
-                    model->cursorpos--;
-                    if(model->cursorpos < 0) {
-                        model->cursorpos = 5;
+                    if(model->success != 1) {
+                        model->cursorpos--;
+                        if(model->cursorpos < 0) {
+                            model->cursorpos = 5;
+                        }
                     }
                 },
                 true);
@@ -227,9 +228,11 @@ bool color_guess_play_input(InputEvent* event, void* context) {
                 instance->view,
                 ColorGuessPlayModel * model,
                 {
-                    model->cursorpos++;
-                    if(model->cursorpos > 5) {
-                        model->cursorpos = 0;
+                    if(model->success != 1) {
+                        model->cursorpos++;
+                        if(model->cursorpos > 5) {
+                            model->cursorpos = 0;
+                        }
                     }
                 },
                 true);
@@ -239,12 +242,14 @@ bool color_guess_play_input(InputEvent* event, void* context) {
                 instance->view,
                 ColorGuessPlayModel * model,
                 {
-                    model->digit[model->cursorpos]++;
-                    if(model->digit[model->cursorpos] > 15) {
-                        model->digit[model->cursorpos] = 0;
+                    if(model->success != 1) {
+                        model->digit[model->cursorpos]++;
+                        if(model->digit[model->cursorpos] > 15) {
+                            model->digit[model->cursorpos] = 0;
+                        }
+                        color_guess_play_calculate_closeness(instance, model);
+                        play_haptic(instance->context, model);
                     }
-                    color_guess_play_calculate_closeness(instance, model);
-                    play_haptic(instance->context, model);
                 },
                 true);
             break;
@@ -253,12 +258,14 @@ bool color_guess_play_input(InputEvent* event, void* context) {
                 instance->view,
                 ColorGuessPlayModel * model,
                 {
-                    model->digit[model->cursorpos]--;
-                    if(model->digit[model->cursorpos] < 0) {
-                        model->digit[model->cursorpos] = 15;
+                    if(model->success != 1) {
+                        model->digit[model->cursorpos]--;
+                        if(model->digit[model->cursorpos] < 0) {
+                            model->digit[model->cursorpos] = 15;
+                        }
+                        color_guess_play_calculate_closeness(instance, model);
+                        play_haptic(instance->context, model);
                     }
-                    color_guess_play_calculate_closeness(instance, model);
-                    play_haptic(instance->context, model);
                 },
                 true);
             break;

+ 3 - 2
views/color_guess_startscreen.c

@@ -28,6 +28,7 @@ void color_guess_startscreen_set_callback(
 
 void color_guess_startscreen_draw(Canvas* canvas, ColorGuessStartscreenModel* model) {
     UNUSED(model);
+    char buffer[64];
     canvas_clear(canvas);
     canvas_set_color(canvas, ColorBlack);
     canvas_set_font(canvas, FontPrimary);
@@ -36,6 +37,8 @@ void color_guess_startscreen_draw(Canvas* canvas, ColorGuessStartscreenModel* mo
     canvas_set_font(canvas, FontSecondary);
     canvas_draw_str_aligned(canvas, 54, 22, AlignLeft, AlignTop, "Guess the color");
     canvas_draw_str_aligned(canvas, 54, 32, AlignLeft, AlignTop, "on Flipper's LED");
+    snprintf(buffer, sizeof(buffer), "Ver. %s", COLOR_GUESS_VERSION);
+    canvas_draw_str_aligned(canvas, 92, 56, AlignLeft, AlignTop, buffer);
     elements_button_center(canvas, "Start");
 }
 
@@ -115,8 +118,6 @@ ColorGuessStartscreen* color_guess_startscreen_alloc() {
 void color_guess_startscreen_free(ColorGuessStartscreen* instance) {
     furi_assert(instance);
 
-    with_view_model(
-        instance->view, ColorGuessStartscreenModel * model, { UNUSED(model); }, true);
     view_free(instance->view);
     free(instance);
 }