diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h index b059ed5a3..dfe115522 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h @@ -3,6 +3,7 @@ ADD_SCENE(xtreme_app, interface, Interface) ADD_SCENE(xtreme_app, interface_graphics, InterfaceGraphics) ADD_SCENE(xtreme_app, interface_mainmenu, InterfaceMainmenu) ADD_SCENE(xtreme_app, interface_mainmenu_add, InterfaceMainmenuAdd) +ADD_SCENE(xtreme_app, interface_lockscreen, InterfaceLockscreen) ADD_SCENE(xtreme_app, interface_statusbar, InterfaceStatusbar) ADD_SCENE(xtreme_app, interface_common, InterfaceCommon) ADD_SCENE(xtreme_app, protocols, Protocols) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c index e732dbd2a..a033e4746 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c @@ -3,6 +3,7 @@ enum VarItemListIndex { VarItemListIndexGraphics, VarItemListIndexMainmenu, + VarItemListIndexLockscreen, VarItemListIndexStatusbar, VarItemListIndexCommon, }; @@ -18,6 +19,7 @@ void xtreme_app_scene_interface_on_enter(void* context) { variable_item_list_add(var_item_list, "Graphics", 0, NULL, app); variable_item_list_add(var_item_list, "Mainmenu", 0, NULL, app); + variable_item_list_add(var_item_list, "Lockscreen", 0, NULL, app); variable_item_list_add(var_item_list, "Statusbar", 0, NULL, app); variable_item_list_add(var_item_list, "Common", 0, NULL, app); @@ -44,6 +46,9 @@ bool xtreme_app_scene_interface_on_event(void* context, SceneManagerEvent event) case VarItemListIndexMainmenu: scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceMainmenu); break; + case VarItemListIndexLockscreen: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceLockscreen); + break; case VarItemListIndexStatusbar: scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceStatusbar); break; 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 new file mode 100644 index 000000000..1dbde0a03 --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -0,0 +1,86 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexShowClock, + VarItemListIndexShowDate, +}; + +void xtreme_app_scene_interface_lockscreen_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_interface_lockscreen_show_time_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_time = 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); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->lockscreen_date = value; + app->save_settings = true; +} + +static void xtreme_app_scene_interface_lockscreen_show_statusbar_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_statusbar = value; + app->save_settings = true; +} + +void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { + XtremeApp* app = context; + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Show Time", 2, xtreme_app_scene_interface_lockscreen_show_time_changed, app); + 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 Date", 2, xtreme_app_scene_interface_lockscreen_show_date_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "Show Statusbar", 2, xtreme_app_scene_interface_lockscreen_show_statusbar_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_interface_lockscreen_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event); + consumed = true; + switch(event.event) { + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_interface_lockscreen_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 31b355ea2..223b19d30 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -91,17 +91,23 @@ 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); - canvas_set_font(canvas, FontBigNumbers); - canvas_draw_str(canvas, 0, 64 + y, time_str); - int meridian_offset = canvas_string_width(canvas, time_str) + 2; - canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 0, 48 + y, date_str); - if(time_format == LocaleTimeFormat12h) { - canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + 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; + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + } + } + if(xtreme_settings->lockscreen_date) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); } - canvas_set_font(canvas, FontBatteryPercent); if(model->view_state == DesktopViewLockedStateLockedHintShown) { + canvas_set_font(canvas, FontBatteryPercent); canvas_draw_str_aligned(canvas, 79, 6 + y, AlignRight, AlignCenter, "Press 3x"); canvas_draw_icon(canvas, 81, 2 + y, &I_Pin_back_arrow_10x8); } diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 61d9294f8..69bc14cd0 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -40,6 +40,9 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->cycle_anims = 0; // Meta.txt xtreme_settings->unlock_anims = false; // OFF xtreme_settings->wii_menu = true; // ON + xtreme_settings->lockscreen_time = true; // ON + xtreme_settings->lockscreen_date = true; // ON + xtreme_settings->lockscreen_statusbar = true; // ON xtreme_settings->battery_icon = BatteryIconBarPercent; // Bar % xtreme_settings->status_icons = true; // ON xtreme_settings->bar_borders = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index e61984e0c..167bf4a60 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,7 +15,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (7) +#define XTREME_SETTINGS_VERSION (8) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -28,6 +28,9 @@ typedef struct { int32_t cycle_anims; bool unlock_anims; bool wii_menu; + bool lockscreen_time; + bool lockscreen_date; + bool lockscreen_statusbar; BatteryIcon battery_icon; bool status_icons; bool bar_borders;