From 6a0e813b6c6599d30d4d23ef572c0e73455b90ad Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:53:09 +0100 Subject: [PATCH] Add option to show seconds on lockscreen --- .../xtreme_app_scene_interface_lockscreen.c | 17 ++++++++++++ .../desktop/views/desktop_view_locked.c | 26 +++++++++++------- applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 3 +- assets/icons/Interface/Lockscreen.png | Bin 5453 -> 12122 bytes 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c index 5544ee941..59ac287fc 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -18,6 +18,14 @@ static void xtreme_app_scene_interface_lockscreen_show_time_changed(VariableItem app->save_settings = true; } +static void xtreme_app_scene_interface_lockscreen_show_seconds_changed(VariableItem* item) { + XtremeApp* 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"); + XTREME_SETTINGS()->lockscreen_seconds = value; + app->save_settings = true; +} + static void xtreme_app_scene_interface_lockscreen_show_date_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); @@ -57,6 +65,15 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, + "Show Seconds", + 2, + xtreme_app_scene_interface_lockscreen_show_seconds_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_seconds); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_seconds ? "ON" : "OFF"); + item = variable_item_list_add( var_item_list, "Show Date", diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 9a24414f7..6d3aeb819 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -67,22 +67,24 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { DesktopViewLockedModel* model = m; int y = model->cover_offset; char time_str[9]; + char second_str[5]; char date_str[14]; char meridian_str[3]; FuriHalRtcDateTime datetime; furi_hal_rtc_get_datetime(&datetime); LocaleTimeFormat time_format = locale_get_time_format(); LocaleDateFormat date_format = locale_get_date_format(); + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); + bool pm; if(time_format == LocaleTimeFormat24h) { - snprintf(time_str, 9, "%.2d:%.2d", datetime.hour, datetime.minute); + pm = false; } else { - bool pm = datetime.hour > 12; - bool pm12 = datetime.hour >= 12; - snprintf( - time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); - snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); + pm = datetime.hour > 12; + snprintf(meridian_str, 3, datetime.hour >= 12 ? "PM" : "AM"); } + snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); + snprintf(second_str, 5, ":%.2d", datetime.second); if(date_format == LocaleDateFormatYMD) { snprintf(date_str, 14, "%.4d-%.2d-%.2d", datetime.year, datetime.month, datetime.day); @@ -92,15 +94,19 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); } - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); canvas_draw_icon(canvas, 0, 0 + y, XTREME_ASSETS()->I_Lockscreen); if(xtreme_settings->lockscreen_time) { canvas_set_font(canvas, FontBigNumbers); canvas_draw_str(canvas, 0, 64 + y, time_str); - if(time_format == LocaleTimeFormat12h) { - int meridian_offset = canvas_string_width(canvas, time_str) + 2; + int offset = canvas_string_width(canvas, time_str) + 2; + if(xtreme_settings->lockscreen_seconds) { canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + canvas_draw_str(canvas, 0 + offset, 64 + y, second_str); + offset += canvas_string_width(canvas, ":00") + 2; + } + if(time_format == LocaleTimeFormat12h) { + canvas_set_font(canvas, FontKeyboard); + canvas_draw_str(canvas, 0 + offset, 64 + y, meridian_str); } } if(xtreme_settings->lockscreen_date) { diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index a5b7ee6cb..ec1f89ecf 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -51,6 +51,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->fallback_anim = true; // ON xtreme_settings->wii_menu = true; // ON xtreme_settings->lockscreen_time = true; // ON + xtreme_settings->lockscreen_seconds = false; // ON xtreme_settings->lockscreen_date = true; // ON xtreme_settings->lockscreen_statusbar = true; // ON xtreme_settings->lockscreen_prompt = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index ea4838e5a..0261b68ae 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -13,7 +13,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (10) +#define XTREME_SETTINGS_VERSION (11) #define XTREME_SETTINGS_MAGIC (0x69) #define XTREME_SETTINGS_OLD_INT_PATH INT_PATH(".xtreme.settings") #define XTREME_SETTINGS_OLD_PATH EXT_PATH(".xtreme.settings") @@ -29,6 +29,7 @@ typedef struct { bool fallback_anim; bool wii_menu; bool lockscreen_time; + bool lockscreen_seconds; bool lockscreen_date; bool lockscreen_statusbar; bool lockscreen_prompt; diff --git a/assets/icons/Interface/Lockscreen.png b/assets/icons/Interface/Lockscreen.png index c9aa8bcd7e906e0fcd650f1437884709a7b2ee28..ab4f0a739ca48280c52537153d9f84655f808828 100644 GIT binary patch delta 7828 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 b;m7&~9D|XzFsLxu00000NkvXXu0mjfq+c*Z