Move desktop keybinds to external file

This commit is contained in:
Willy-JL
2023-06-29 18:35:35 +02:00
parent d547ef7bcc
commit 72ed3660e5
5 changed files with 40 additions and 17 deletions
+13 -9
View File
@@ -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);
@@ -55,6 +55,7 @@ struct Desktop {
ViewStack* locked_view_stack;
DesktopSettings settings;
Keybind keybinds[KeybindTypeCount][KeybindKeyCount];
DesktopViewPinInput* pin_input_view;
ViewPort* lock_icon_viewport;
@@ -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);
}
@@ -6,12 +6,14 @@
#include <toolbox/saved_struct.h>
#include <storage/storage.h>
#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);
@@ -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++) {