From cf2a1265db2baed3fd13f1d0fb9abff852f90308 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 16 Jan 2023 19:18:28 +0000 Subject: [PATCH 1/3] Add a cycle animations setting --- .../desktop/animations/animation_manager.c | 5 +++- .../services/desktop/desktop_settings.h | 1 + .../scenes/desktop_settings_scene_start.c | 28 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index 9f6df386c..f76c45383 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -118,9 +118,12 @@ static void animation_manager_check_blocking_callback(const void* message, void* static void animation_manager_timer_callback(void* context) { furi_assert(context); AnimationManager* animation_manager = context; - if(animation_manager->new_idle_callback) { + DesktopSettings* settings = malloc(sizeof(DesktopSettings)); + DESKTOP_SETTINGS_LOAD(settings); + if(!settings->dont_cycle_animations && animation_manager->new_idle_callback) { animation_manager->new_idle_callback(animation_manager->context); } + free(settings); } static void animation_manager_interact_callback(void* context) { diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 55d8640f5..c8be1d6b6 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -64,4 +64,5 @@ typedef struct { uint8_t displayBatteryPercentage; bool is_sfwmode; uint8_t sfw_mode; + uint8_t dont_cycle_animations; } DesktopSettings; diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c index 9901740b6..6e64fe80d 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c @@ -39,6 +39,14 @@ const uint32_t displayBatteryPercentage_value[BATTERY_VIEW_COUNT] = { uint8_t origBattDisp_value = 0; +#define CYCLE_ANIMATIONS_COUNT 2 +const char* const cycle_animations_text[CYCLE_ANIMATIONS_COUNT] = { + "ON", + "OFF", +}; +const uint32_t cycle_animations_value[CYCLE_ANIMATIONS_COUNT] = + {0, 1}; + static void desktop_settings_scene_start_var_list_enter_callback(void* context, uint32_t index) { DesktopSettingsApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); @@ -60,6 +68,14 @@ static void desktop_settings_scene_start_battery_view_changed(VariableItem* item app->settings.displayBatteryPercentage = index; } +static void desktop_settings_scene_start_cycle_animations_changed(VariableItem* item) { + DesktopSettingsApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + variable_item_set_current_value_text(item, cycle_animations_text[index]); + app->settings.dont_cycle_animations = auto_lock_delay_value[index]; +} + void desktop_settings_scene_start_on_enter(void* context) { DesktopSettingsApp* app = context; VariableItemList* variable_item_list = app->variable_item_list; @@ -102,6 +118,18 @@ void desktop_settings_scene_start_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, battery_view_count_text[value_index]); + item = variable_item_list_add( + variable_item_list, + "Cycle animations", + CYCLE_ANIMATIONS_COUNT, + desktop_settings_scene_start_cycle_animations_changed, + app); + + value_index = value_index_uint32( + app->settings.dont_cycle_animations, cycle_animations_value, CYCLE_ANIMATIONS_COUNT); + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, cycle_animations_text[value_index]); + variable_item_list_set_enter_callback( variable_item_list, desktop_settings_scene_start_var_list_enter_callback, app); view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewVarItemList); From f2c19216380d40ade04fe5918ebb41e2ad205b99 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 16 Jan 2023 20:02:40 +0000 Subject: [PATCH 2/3] Change cycle anims setting to control anim length --- .../desktop/animations/animation_manager.c | 15 +++++++------ applications/services/desktop/desktop.c | 4 ++++ .../services/desktop/desktop_settings.h | 2 +- .../scenes/desktop_settings_scene_start.c | 21 +++++++++++++------ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index f76c45383..cadd50ded 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -118,12 +118,9 @@ static void animation_manager_check_blocking_callback(const void* message, void* static void animation_manager_timer_callback(void* context) { furi_assert(context); AnimationManager* animation_manager = context; - DesktopSettings* settings = malloc(sizeof(DesktopSettings)); - DESKTOP_SETTINGS_LOAD(settings); - if(!settings->dont_cycle_animations && animation_manager->new_idle_callback) { + if(animation_manager->new_idle_callback) { animation_manager->new_idle_callback(animation_manager->context); } - free(settings); } static void animation_manager_interact_callback(void* context) { @@ -203,7 +200,10 @@ static void animation_manager_start_new_idle(AnimationManager* animation_manager const BubbleAnimation* bubble_animation = animation_storage_get_bubble_animation(animation_manager->current_animation); animation_manager->state = AnimationManagerStateIdle; - furi_timer_start(animation_manager->idle_animation_timer, bubble_animation->duration * 1000); + DesktopSettings* settings = malloc(sizeof(DesktopSettings)); + DESKTOP_SETTINGS_LOAD(settings); + furi_timer_start(animation_manager->idle_animation_timer, (settings->cycle_animations_s - 1) * 1000); + free(settings); } static bool animation_manager_check_blocking(AnimationManager* animation_manager) { @@ -513,8 +513,11 @@ void animation_manager_load_and_continue_animation(AnimationManager* animation_m } else { const BubbleAnimation* animation = animation_storage_get_bubble_animation( animation_manager->current_animation); + DesktopSettings* settings = malloc(sizeof(DesktopSettings)); + DESKTOP_SETTINGS_LOAD(settings); furi_timer_start( - animation_manager->idle_animation_timer, animation->duration * 1000); + animation_manager->idle_animation_timer, (settings->cycle_animations_s - 1) * 1000); + free(settings); } } } else { diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index e43e6e6e0..b0f3eac34 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -322,6 +322,10 @@ int32_t desktop_srv(void* p) { DESKTOP_SETTINGS_SAVE(&desktop->settings); } + if(!desktop->settings.cycle_animations_s) { + desktop->settings.cycle_animations_s = 3601; + } + desktop_main_set_sfw_mode_state(desktop->main_view, desktop->settings.sfw_mode); scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index c8be1d6b6..dd9231b39 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -64,5 +64,5 @@ typedef struct { uint8_t displayBatteryPercentage; bool is_sfwmode; uint8_t sfw_mode; - uint8_t dont_cycle_animations; + uint8_t cycle_animations_s; } DesktopSettings; diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c index 6e64fe80d..b158384e0 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c @@ -39,13 +39,22 @@ const uint32_t displayBatteryPercentage_value[BATTERY_VIEW_COUNT] = { uint8_t origBattDisp_value = 0; -#define CYCLE_ANIMATIONS_COUNT 2 +#define CYCLE_ANIMATIONS_COUNT 10 const char* const cycle_animations_text[CYCLE_ANIMATIONS_COUNT] = { - "ON", "OFF", + "5 M", + "10 M", + "15 M", + "30 M", + "1 H", + "2 H", + "6 H", + "12 H", + "24 H", }; +// Values are offset by 1 so that 0 is not a valid value and desktop.c can detect this to set a default value (3601 / 1 H) const uint32_t cycle_animations_value[CYCLE_ANIMATIONS_COUNT] = - {0, 1}; + {1, 301, 601, 901, 1801, 3601, 7201, 21601, 43201, 86401}; static void desktop_settings_scene_start_var_list_enter_callback(void* context, uint32_t index) { DesktopSettingsApp* app = context; @@ -73,7 +82,7 @@ static void desktop_settings_scene_start_cycle_animations_changed(VariableItem* uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, cycle_animations_text[index]); - app->settings.dont_cycle_animations = auto_lock_delay_value[index]; + app->settings.cycle_animations_s = cycle_animations_value[index]; } void desktop_settings_scene_start_on_enter(void* context) { @@ -120,13 +129,13 @@ void desktop_settings_scene_start_on_enter(void* context) { item = variable_item_list_add( variable_item_list, - "Cycle animations", + "Cycle Animations", CYCLE_ANIMATIONS_COUNT, desktop_settings_scene_start_cycle_animations_changed, app); value_index = value_index_uint32( - app->settings.dont_cycle_animations, cycle_animations_value, CYCLE_ANIMATIONS_COUNT); + app->settings.cycle_animations_s, cycle_animations_value, CYCLE_ANIMATIONS_COUNT); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, cycle_animations_text[value_index]); From 2566106a56db87d58739d707b279731cd9ec2654 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 16 Jan 2023 20:16:38 +0000 Subject: [PATCH 3/3] Fix cycle anims setting --- .../services/desktop/animations/animation_manager.c | 8 ++++---- applications/services/desktop/desktop.c | 1 + applications/services/desktop/desktop_settings.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index cadd50ded..37cd4fd53 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -197,8 +197,8 @@ static void animation_manager_start_new_idle(AnimationManager* animation_manager StorageAnimation* new_animation = animation_manager_select_idle_animation(animation_manager); animation_manager_replace_current_animation(animation_manager, new_animation); - const BubbleAnimation* bubble_animation = - animation_storage_get_bubble_animation(animation_manager->current_animation); + // const BubbleAnimation* bubble_animation = + // animation_storage_get_bubble_animation(animation_manager->current_animation); animation_manager->state = AnimationManagerStateIdle; DesktopSettings* settings = malloc(sizeof(DesktopSettings)); DESKTOP_SETTINGS_LOAD(settings); @@ -511,8 +511,8 @@ void animation_manager_load_and_continue_animation(AnimationManager* animation_m animation_manager->idle_animation_timer, animation_manager->freezed_animation_time_left); } else { - const BubbleAnimation* animation = animation_storage_get_bubble_animation( - animation_manager->current_animation); + // const BubbleAnimation* animation = animation_storage_get_bubble_animation( + // animation_manager->current_animation); DesktopSettings* settings = malloc(sizeof(DesktopSettings)); DESKTOP_SETTINGS_LOAD(settings); furi_timer_start( diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index b0f3eac34..719ed3018 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -324,6 +324,7 @@ int32_t desktop_srv(void* p) { if(!desktop->settings.cycle_animations_s) { desktop->settings.cycle_animations_s = 3601; + DESKTOP_SETTINGS_SAVE(&desktop->settings); } desktop_main_set_sfw_mode_state(desktop->main_view, desktop->settings.sfw_mode); diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index dd9231b39..35299a295 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -64,5 +64,5 @@ typedef struct { uint8_t displayBatteryPercentage; bool is_sfwmode; uint8_t sfw_mode; - uint8_t cycle_animations_s; + uint32_t cycle_animations_s; } DesktopSettings;