From 72ed3660e537c59c18ef6962d26099ea765bdb35 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:35:35 +0200 Subject: [PATCH] Move desktop keybinds to external file --- applications/services/desktop/desktop.c | 22 +++++++++++-------- applications/services/desktop/desktop_i.h | 1 + .../services/desktop/desktop_settings.c | 10 +++++++++ .../services/desktop/desktop_settings.h | 13 +++++++---- .../desktop_settings_scene_keybinds_choose.c | 11 ++++++---- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index ed2776f0e..1cf35caad 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -464,7 +464,7 @@ void desktop_run_keybind(Desktop* instance, InputType _type, InputKey _key) { KeybindType type = keybind_types[_type]; KeybindKey key = keybind_keys[_key]; - const char* keybind = instance->settings.keybinds[type][key].data; + const char* keybind = instance->keybinds[type][key].data; if(!strnlen(keybind, MAX_KEYBIND_LENGTH)) return; if(!strncmp(keybind, "Archive", MAX_KEYBIND_LENGTH)) { @@ -498,18 +498,22 @@ int32_t desktop_srv(void* p) { } if(!ok) { memset(&desktop->settings, 0, sizeof(desktop->settings)); - strcpy(desktop->settings.keybinds[KeybindTypePress][KeybindKeyUp].data, "Lock Menu"); - strcpy(desktop->settings.keybinds[KeybindTypePress][KeybindKeyDown].data, "Archive"); - strcpy(desktop->settings.keybinds[KeybindTypePress][KeybindKeyRight].data, "Passport"); - strcpy( - desktop->settings.keybinds[KeybindTypePress][KeybindKeyLeft].data, - EXT_PATH("apps/Misc/nightstand.fap")); - strcpy(desktop->settings.keybinds[KeybindTypeHold][KeybindKeyRight].data, "Device Info"); - strcpy(desktop->settings.keybinds[KeybindTypeHold][KeybindKeyLeft].data, "Lock with PIN"); furi_hal_rtc_reset_flag(FuriHalRtcFlagLock); furi_hal_rtc_set_pin_fails(0); } + if(!DESKTOP_KEYBINDS_LOAD(&desktop->keybinds, sizeof(desktop->keybinds))) { + memset(&desktop->keybinds, 0, sizeof(desktop->keybinds)); + strcpy(desktop->keybinds[KeybindTypePress][KeybindKeyUp].data, "Lock Menu"); + strcpy(desktop->keybinds[KeybindTypePress][KeybindKeyDown].data, "Archive"); + strcpy(desktop->keybinds[KeybindTypePress][KeybindKeyRight].data, "Passport"); + strcpy( + desktop->keybinds[KeybindTypePress][KeybindKeyLeft].data, + EXT_PATH("apps/Misc/nightstand.fap")); + strcpy(desktop->keybinds[KeybindTypeHold][KeybindKeyRight].data, "Device Info"); + strcpy(desktop->keybinds[KeybindTypeHold][KeybindKeyLeft].data, "Lock with PIN"); + } + desktop_clock_toggle_view(desktop, XTREME_SETTINGS()->statusbar_clock); scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); diff --git a/applications/services/desktop/desktop_i.h b/applications/services/desktop/desktop_i.h index 65c09d112..d42bf2616 100644 --- a/applications/services/desktop/desktop_i.h +++ b/applications/services/desktop/desktop_i.h @@ -55,6 +55,7 @@ struct Desktop { ViewStack* locked_view_stack; DesktopSettings settings; + Keybind keybinds[KeybindTypeCount][KeybindKeyCount]; DesktopViewPinInput* pin_input_view; ViewPort* lock_icon_viewport; diff --git a/applications/services/desktop/desktop_settings.c b/applications/services/desktop/desktop_settings.c index d1df4a9a6..48d12b3ce 100644 --- a/applications/services/desktop/desktop_settings.c +++ b/applications/services/desktop/desktop_settings.c @@ -17,3 +17,13 @@ bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x) { DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); } + +bool DESKTOP_KEYBINDS_SAVE(Keybind (*x)[KeybindTypeCount][KeybindKeyCount], size_t size) { + return saved_struct_save( + DESKTOP_KEYBINDS_PATH, x, size, DESKTOP_KEYBINDS_MAGIC, DESKTOP_KEYBINDS_VER); +} + +bool DESKTOP_KEYBINDS_LOAD(Keybind (*x)[KeybindTypeCount][KeybindKeyCount], size_t size) { + return saved_struct_load( + DESKTOP_KEYBINDS_PATH, x, size, DESKTOP_KEYBINDS_MAGIC, DESKTOP_KEYBINDS_VER); +} diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 74acf6bfb..3cd85870e 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -6,12 +6,14 @@ #include #include -#define DESKTOP_SETTINGS_VER (11) - #define DESKTOP_SETTINGS_OLD_PATH CFG_PATH("desktop.settings") #define DESKTOP_SETTINGS_PATH INT_PATH(".desktop.settings") #define DESKTOP_SETTINGS_MAGIC (0x17) -#define PIN_MAX_LENGTH 12 +#define DESKTOP_SETTINGS_VER (11) + +#define DESKTOP_KEYBINDS_PATH CFG_PATH(".desktop.keybinds") +#define DESKTOP_KEYBINDS_MAGIC (0x14) +#define DESKTOP_KEYBINDS_VER (1) #define DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG "run_pin_setup" @@ -46,9 +48,12 @@ typedef struct { PinCode pin_code; uint32_t auto_lock_delay_ms; bool auto_lock_with_pin; - Keybind keybinds[KeybindTypeCount][KeybindKeyCount]; } DesktopSettings; bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x); bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); + +bool DESKTOP_KEYBINDS_SAVE(Keybind (*x)[KeybindTypeCount][KeybindKeyCount], size_t size); + +bool DESKTOP_KEYBINDS_LOAD(Keybind (*x)[KeybindTypeCount][KeybindKeyCount], size_t size); diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_choose.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_choose.c index d65a20e5b..363ad057d 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_choose.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_choose.c @@ -34,9 +34,10 @@ static void desktop_settings_scene_keybinds_choose_main_callback(void* context, scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsType); KeybindKey key = scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsKey); - char* keybind = app->desktop->settings.keybinds[type][key].data; + char* keybind = app->desktop->keybinds[type][key].data; strncpy(keybind, FLIPPER_APPS[index].name, MAX_KEYBIND_LENGTH); + DESKTOP_KEYBINDS_SAVE(&app->desktop->keybinds, sizeof(app->desktop->keybinds)); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); @@ -49,7 +50,7 @@ static void desktop_settings_scene_keybinds_choose_ext_callback(void* context, u scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsType); KeybindKey key = scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsKey); - char* keybind = app->desktop->settings.keybinds[type][key].data; + char* keybind = app->desktop->keybinds[type][key].data; const DialogsFileBrowserOptions browser_options = { .extension = ".fap", @@ -71,6 +72,7 @@ static void desktop_settings_scene_keybinds_choose_ext_callback(void* context, u if(dialog_file_browser_show(app->dialogs, temp_path, temp_path, &browser_options)) { submenu_reset(app->submenu); // Prevent menu from being shown when we exiting scene strncpy(keybind, furi_string_get_cstr(temp_path), MAX_KEYBIND_LENGTH); + DESKTOP_KEYBINDS_SAVE(&app->desktop->keybinds, sizeof(app->desktop->keybinds)); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); @@ -84,9 +86,10 @@ static void desktop_settings_scene_keybinds_choose_extra_callback(void* context, scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsType); KeybindKey key = scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsKey); - char* keybind = app->desktop->settings.keybinds[type][key].data; + char* keybind = app->desktop->keybinds[type][key].data; strncpy(keybind, EXTRA_OPTIONS[index - FLIPPER_APPS_COUNT], MAX_KEYBIND_LENGTH); + DESKTOP_KEYBINDS_SAVE(&app->desktop->keybinds, sizeof(app->desktop->keybinds)); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager); @@ -102,7 +105,7 @@ void desktop_settings_scene_keybinds_choose_on_enter(void* context) { KeybindKey key = scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneKeybindsKey); uint32_t pre_select_item = 0; - char* keybind = app->desktop->settings.keybinds[type][key].data; + char* keybind = app->desktop->keybinds[type][key].data; size_t submenu_i = -1; for(size_t i = 0; i < FLIPPER_APPS_COUNT; i++) {