diff --git a/applications/main/bad_usb/bad_usb_app.c b/applications/main/bad_usb/bad_usb_app.c index bb29d3be5..5f2aa4789 100644 --- a/applications/main/bad_usb/bad_usb_app.c +++ b/applications/main/bad_usb/bad_usb_app.c @@ -33,9 +33,26 @@ static void bad_usb_load_settings(BadUsbApp* app) { !storage_file_eof(settings_file) && !isspace(chr)) { furi_string_push_back(app->keyboard_layout, chr); } + } else { + furi_string_reset(app->keyboard_layout); } storage_file_close(settings_file); storage_file_free(settings_file); + + if(!furi_string_empty(app->keyboard_layout)) { + Storage* fs_api = furi_record_open(RECORD_STORAGE); + FileInfo layout_file_info; + FS_Error file_check_err = storage_common_stat( + fs_api, furi_string_get_cstr(app->keyboard_layout), &layout_file_info); + furi_record_close(RECORD_STORAGE); + if(file_check_err != FSE_OK) { + furi_string_reset(app->keyboard_layout); + return; + } + if(layout_file_info.size != 256) { + furi_string_reset(app->keyboard_layout); + } + } } static void bad_usb_save_settings(BadUsbApp* app) { diff --git a/applications/main/bad_usb/bad_usb_app_i.h b/applications/main/bad_usb/bad_usb_app_i.h index b3fbb1679..1bd1964c8 100644 --- a/applications/main/bad_usb/bad_usb_app_i.h +++ b/applications/main/bad_usb/bad_usb_app_i.h @@ -16,7 +16,7 @@ #include "views/bad_usb_view.h" #define BAD_USB_APP_BASE_FOLDER ANY_PATH("badusb") -#define BAD_USB_APP_PATH_LAYOUT_FOLDER BAD_USB_APP_BASE_FOLDER "/layouts" +#define BAD_USB_APP_PATH_LAYOUT_FOLDER BAD_USB_APP_BASE_FOLDER "/assets/layouts" #define BAD_USB_APP_SCRIPT_EXTENSION ".txt" #define BAD_USB_APP_LAYOUT_EXTENSION ".kl" diff --git a/applications/main/bad_usb/bad_usb_script.c b/applications/main/bad_usb/bad_usb_script.c index a784ef1a6..1416acfee 100644 --- a/applications/main/bad_usb/bad_usb_script.c +++ b/applications/main/bad_usb/bad_usb_script.c @@ -120,8 +120,6 @@ static const char ducky_cmd_altchar[] = {"ALTCHAR "}; static const char ducky_cmd_altstr_1[] = {"ALTSTRING "}; static const char ducky_cmd_altstr_2[] = {"ALTCODE "}; -static const char ducky_cmd_lang[] = {"DUCKY_LANG"}; - static const uint8_t numpad_keys[10] = { HID_KEYPAD_0, HID_KEYPAD_1, @@ -257,9 +255,6 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { // ID - executed in ducky_script_preload return (0); - } else if(strncmp(line_tmp, ducky_cmd_lang, strlen(ducky_cmd_lang)) == 0) { - // DUCKY_LANG - ignore command to retain compatibility with existing scripts - return (0); } else if(strncmp(line_tmp, ducky_cmd_delay, strlen(ducky_cmd_delay)) == 0) { // DELAY line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c index 44dcd55af..7708ed1d8 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c +++ b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c @@ -17,6 +17,8 @@ static bool bad_usb_layout_select(BadUsbApp* bad_usb) { DialogsFileBrowserOptions browser_options; dialog_file_browser_set_basic_options( &browser_options, BAD_USB_APP_LAYOUT_EXTENSION, &I_keyboard_10px); + browser_options.base_path = BAD_USB_APP_PATH_LAYOUT_FOLDER; + browser_options.skip_assets = false; // Input events and views are managed by file_browser bool res = dialog_file_browser_show( diff --git a/applications/services/gui/modules/file_browser_worker.c b/applications/services/gui/modules/file_browser_worker.c index 9a68330f5..6058a3376 100644 --- a/applications/services/gui/modules/file_browser_worker.c +++ b/applications/services/gui/modules/file_browser_worker.c @@ -15,7 +15,6 @@ #define TAG "BrowserWorker" #define ASSETS_DIR "assets" -#define BADUSB_LAYOUTS_DIR "layouts" #define SUBGHZ_TEMP_DIR "tmp_history" #define BROWSER_ROOT STORAGE_ANY_PATH_PREFIX #define FILE_NAME_LEN_MAX 256 @@ -93,7 +92,6 @@ static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, boo // Skip assets folders (if enabled) if(browser->skip_assets) { return ((furi_string_cmp_str(name, ASSETS_DIR) == 0) ? (false) : (true)) && - ((furi_string_cmp_str(name, BADUSB_LAYOUTS_DIR) == 0) ? (false) : (true)) && ((furi_string_cmp_str(name, SUBGHZ_TEMP_DIR) == 0) ? (false) : (true)); } else { return true; diff --git a/assets/resources/badusb/layouts/ba-BA.kl b/assets/resources/badusb/assets/layouts/ba-BA.kl similarity index 100% rename from assets/resources/badusb/layouts/ba-BA.kl rename to assets/resources/badusb/assets/layouts/ba-BA.kl diff --git a/assets/resources/badusb/layouts/cz_CS.kl b/assets/resources/badusb/assets/layouts/cz_CS.kl similarity index 100% rename from assets/resources/badusb/layouts/cz_CS.kl rename to assets/resources/badusb/assets/layouts/cz_CS.kl diff --git a/assets/resources/badusb/layouts/da-DA.kl b/assets/resources/badusb/assets/layouts/da-DA.kl similarity index 100% rename from assets/resources/badusb/layouts/da-DA.kl rename to assets/resources/badusb/assets/layouts/da-DA.kl diff --git a/assets/resources/badusb/layouts/de-CH.kl b/assets/resources/badusb/assets/layouts/de-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/de-CH.kl rename to assets/resources/badusb/assets/layouts/de-CH.kl diff --git a/assets/resources/badusb/layouts/de-DE.kl b/assets/resources/badusb/assets/layouts/de-DE.kl similarity index 100% rename from assets/resources/badusb/layouts/de-DE.kl rename to assets/resources/badusb/assets/layouts/de-DE.kl diff --git a/assets/resources/badusb/layouts/dvorak.kl b/assets/resources/badusb/assets/layouts/dvorak.kl similarity index 100% rename from assets/resources/badusb/layouts/dvorak.kl rename to assets/resources/badusb/assets/layouts/dvorak.kl diff --git a/assets/resources/badusb/layouts/en-UK.kl b/assets/resources/badusb/assets/layouts/en-UK.kl similarity index 100% rename from assets/resources/badusb/layouts/en-UK.kl rename to assets/resources/badusb/assets/layouts/en-UK.kl diff --git a/assets/resources/badusb/layouts/en-US.kl b/assets/resources/badusb/assets/layouts/en-US.kl similarity index 100% rename from assets/resources/badusb/layouts/en-US.kl rename to assets/resources/badusb/assets/layouts/en-US.kl diff --git a/assets/resources/badusb/layouts/es-ES.kl b/assets/resources/badusb/assets/layouts/es-ES.kl similarity index 100% rename from assets/resources/badusb/layouts/es-ES.kl rename to assets/resources/badusb/assets/layouts/es-ES.kl diff --git a/assets/resources/badusb/layouts/fr-BE.kl b/assets/resources/badusb/assets/layouts/fr-BE.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-BE.kl rename to assets/resources/badusb/assets/layouts/fr-BE.kl diff --git a/assets/resources/badusb/layouts/fr-CH.kl b/assets/resources/badusb/assets/layouts/fr-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-CH.kl rename to assets/resources/badusb/assets/layouts/fr-CH.kl diff --git a/assets/resources/badusb/layouts/fr-FR.kl b/assets/resources/badusb/assets/layouts/fr-FR.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-FR.kl rename to assets/resources/badusb/assets/layouts/fr-FR.kl diff --git a/assets/resources/badusb/layouts/hr-HR.kl b/assets/resources/badusb/assets/layouts/hr-HR.kl similarity index 100% rename from assets/resources/badusb/layouts/hr-HR.kl rename to assets/resources/badusb/assets/layouts/hr-HR.kl diff --git a/assets/resources/badusb/layouts/hu-HU.kl b/assets/resources/badusb/assets/layouts/hu-HU.kl similarity index 100% rename from assets/resources/badusb/layouts/hu-HU.kl rename to assets/resources/badusb/assets/layouts/hu-HU.kl diff --git a/assets/resources/badusb/layouts/it-IT.kl b/assets/resources/badusb/assets/layouts/it-IT.kl similarity index 100% rename from assets/resources/badusb/layouts/it-IT.kl rename to assets/resources/badusb/assets/layouts/it-IT.kl diff --git a/assets/resources/badusb/layouts/nb-NO.kl b/assets/resources/badusb/assets/layouts/nb-NO.kl similarity index 100% rename from assets/resources/badusb/layouts/nb-NO.kl rename to assets/resources/badusb/assets/layouts/nb-NO.kl diff --git a/assets/resources/badusb/layouts/nl-NL.kl b/assets/resources/badusb/assets/layouts/nl-NL.kl similarity index 100% rename from assets/resources/badusb/layouts/nl-NL.kl rename to assets/resources/badusb/assets/layouts/nl-NL.kl diff --git a/assets/resources/badusb/layouts/pt-BR.kl b/assets/resources/badusb/assets/layouts/pt-BR.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-BR.kl rename to assets/resources/badusb/assets/layouts/pt-BR.kl diff --git a/assets/resources/badusb/layouts/pt-PT.kl b/assets/resources/badusb/assets/layouts/pt-PT.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-PT.kl rename to assets/resources/badusb/assets/layouts/pt-PT.kl diff --git a/assets/resources/badusb/layouts/si-SI.kl b/assets/resources/badusb/assets/layouts/si-SI.kl similarity index 100% rename from assets/resources/badusb/layouts/si-SI.kl rename to assets/resources/badusb/assets/layouts/si-SI.kl diff --git a/assets/resources/badusb/layouts/sk-SK.kl b/assets/resources/badusb/assets/layouts/sk-SK.kl similarity index 100% rename from assets/resources/badusb/layouts/sk-SK.kl rename to assets/resources/badusb/assets/layouts/sk-SK.kl diff --git a/assets/resources/badusb/layouts/sv-SE.kl b/assets/resources/badusb/assets/layouts/sv-SE.kl similarity index 100% rename from assets/resources/badusb/layouts/sv-SE.kl rename to assets/resources/badusb/assets/layouts/sv-SE.kl diff --git a/assets/resources/badusb/layouts/tr-TR.kl b/assets/resources/badusb/assets/layouts/tr-TR.kl similarity index 100% rename from assets/resources/badusb/layouts/tr-TR.kl rename to assets/resources/badusb/assets/layouts/tr-TR.kl