From b33456d243f79118ee3f8414ebeced20c725627c Mon Sep 17 00:00:00 2001 From: Aaron Tulino Date: Sun, 20 Jul 2025 01:46:11 +0100 Subject: [PATCH] MNTM Settings: Add Skip Sliding Animations option for Lockscreen (#436) * Add Fast Lock/Unlock The cover animation takes time and blocks input while animating, so add options to skip the animations. * Combine options into "Skip Sliding Animation" * Update changelog * Wording --------- Co-authored-by: WillyJL --- CHANGELOG.md | 1 + .../momentum_app_scene_interface_lockscreen.c | 19 +++++++++++ .../desktop/views/desktop_view_locked.c | 33 ++++++++++++++----- lib/momentum/settings.c | 2 ++ lib/momentum/settings.h | 1 + 5 files changed, 47 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c1b25ba3..ea86dd408 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - UL: Nero Radio static parse and display more data (by @xMasterX) - UL: Marantec protocol implement CRC verification display and add manually support (by @xMasterX & @li0ard, original code by @Skorpionm) - UL: Keeloq Comunello add manually support (by @xMasterX) +- MNTM Settings: Add Skip Sliding Animations option for Lockscreen (by @aaronjamt) ### Updated: - Apps: diff --git a/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c b/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c index 5ab144cfb..0c95b4e40 100644 --- a/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c +++ b/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c @@ -110,6 +110,15 @@ static void app->save_settings = true; } +static void + momentum_app_scene_interface_lockscreen_lockscreen_skip_animation_changed(VariableItem* item) { + MomentumApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + momentum_settings.lockscreen_skip_animation = value; + app->save_settings = true; +} + void momentum_app_scene_interface_lockscreen_on_enter(void* context) { MomentumApp* app = context; VariableItemList* var_item_list = app->var_item_list; @@ -220,6 +229,16 @@ void momentum_app_scene_interface_lockscreen_on_enter(void* context) { variable_item_set_current_value_text( item, momentum_settings.lockscreen_transparent ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, + "Skip Sliding Animation", + 2, + momentum_app_scene_interface_lockscreen_lockscreen_skip_animation_changed, + app); + variable_item_set_current_value_index(item, momentum_settings.lockscreen_skip_animation); + variable_item_set_current_value_text( + item, momentum_settings.lockscreen_skip_animation ? "ON" : "OFF"); + variable_item_list_set_enter_callback( var_item_list, momentum_app_scene_interface_lockscreen_var_item_list_callback, app); diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 7281423d4..f21934485 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -288,10 +288,17 @@ void desktop_view_locked_free(DesktopViewLocked* locked_view) { void desktop_view_locked_close_cover(DesktopViewLocked* locked_view) { DesktopViewLockedModel* model = view_get_model(locked_view->view); furi_assert(model->view_state == DesktopViewLockedStateLocked); - model->view_state = DesktopViewLockedStateCoverClosing; - model->cover_offset = COVER_OFFSET_START; - view_commit_model(locked_view->view, true); - furi_timer_start(locked_view->timer, COVER_MOVING_INTERVAL_MS); + + if(momentum_settings.lockscreen_skip_animation) { + locked_view->callback(DesktopLockedEventCoversClosed, locked_view->context); + model->cover_offset = COVER_OFFSET_END; + view_commit_model(locked_view->view, true); + } else { + model->view_state = DesktopViewLockedStateCoverClosing; + model->cover_offset = COVER_OFFSET_START; + view_commit_model(locked_view->view, true); + furi_timer_start(locked_view->timer, COVER_MOVING_INTERVAL_MS); + } } void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked) { @@ -305,11 +312,19 @@ void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked) { void desktop_view_locked_unlock(DesktopViewLocked* locked_view) { locked_view->lock_count = 0; DesktopViewLockedModel* model = view_get_model(locked_view->view); - model->view_state = DesktopViewLockedStateCoverOpening; - model->cover_offset = COVER_OFFSET_END; - model->pin_locked = false; - view_commit_model(locked_view->view, true); - furi_timer_start(locked_view->timer, COVER_MOVING_INTERVAL_MS); + + if(momentum_settings.lockscreen_skip_animation) { + model->view_state = DesktopViewLockedStateUnlocked; + model->cover_offset = COVER_OFFSET_START; + model->pin_locked = false; + view_commit_model(locked_view->view, true); + } else { + model->view_state = DesktopViewLockedStateCoverOpening; + model->cover_offset = COVER_OFFSET_END; + model->pin_locked = false; + view_commit_model(locked_view->view, true); + furi_timer_start(locked_view->timer, COVER_MOVING_INTERVAL_MS); + } } bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view) { diff --git a/lib/momentum/settings.c b/lib/momentum/settings.c index c3ad95aa4..c2030aac1 100644 --- a/lib/momentum/settings.c +++ b/lib/momentum/settings.c @@ -23,6 +23,7 @@ MomentumSettings momentum_settings = { .lockscreen_statusbar = true, // ON .lockscreen_prompt = true, // ON .lockscreen_transparent = false, // OFF + .lockscreen_skip_animation = false, // OFF .battery_icon = BatteryIconBarPercent, // Bar % .status_icons = true, // ON .bar_borders = true, // ON @@ -96,6 +97,7 @@ static const struct { {setting_bool(lockscreen_statusbar)}, {setting_bool(lockscreen_prompt)}, {setting_bool(lockscreen_transparent)}, + {setting_bool(lockscreen_skip_animation)}, {setting_enum(battery_icon, BatteryIconCount)}, {setting_bool(status_icons)}, {setting_bool(bar_borders)}, diff --git a/lib/momentum/settings.h b/lib/momentum/settings.h index 4c202c26d..87a259d09 100644 --- a/lib/momentum/settings.h +++ b/lib/momentum/settings.h @@ -80,6 +80,7 @@ typedef struct { bool lockscreen_statusbar; bool lockscreen_prompt; bool lockscreen_transparent; + bool lockscreen_skip_animation; BatteryIcon battery_icon; bool status_icons; bool bar_borders;