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 <me@willyjl.dev>
This commit is contained in:
Aaron Tulino
2025-07-20 01:46:11 +01:00
committed by GitHub
parent bd88e42622
commit b33456d243
5 changed files with 47 additions and 9 deletions

View File

@@ -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:

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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)},

View File

@@ -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;