diff --git a/CHANGELOG.md b/CHANGELOG.md index 0047dfb45e..5764a840b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,7 +103,9 @@ - Added typedocs for all extra JS modules in Momentum (by @Willy-JL) - RPC: Added ASCII event support (#284 by @Willy-JL) - FBT/SDK: New app flag UnloadAssetPacks to free RAM in heavy apps like NFC, MFKey, uPython (#260 by @Willy-JL) -- OFW: Settings: Clock editing & Alarm function (目覚め時計) (by @skotopes) +- Settings: + - OFW: Clock editing & Alarm function (目覚め時計) (by @skotopes) + - Add warnings for some settings you shouldn't touch like Debug, Sleep Method, Heap Trace (#296 by @Willy-JL) - BadKB: - OFW: Add linux/gnome badusb demo files (by @thomasnemer) - Add older qFlipper install demos for windows and macos (by @DXVVAY & @grugnoymeme) @@ -179,7 +181,9 @@ - Move more commands as plugins on SD, refactor plugin wrapper (#276 by @Willy-JL) - FBT: Optimize icons blob, scrub unused icons (#291 by @Willy-JL) - OFW: BadKB: Improve ChromeOS and GNOME demo scripts (by @kowalski7cc) -- OFW: GUI: Change dialog_ex text ownership model (by @skotopes) +- GUI: + - OFW: Change dialog_ex text ownership model (by @skotopes) + - Improve some error messages to be more clear, like Sub-GHz region missing and Main Menu .fap file missing (#296 by @Willy-JL) - OFW: CCID: App changes and improvements (by @kidbomb) - OFW: API: Exposed `view_dispatcher_get_event_loop` (by @CookiePLMonster) - Furi: diff --git a/applications/main/subghz/subghz_i.c b/applications/main/subghz/subghz_i.c index 9b5e26bdf1..d8cf5240a1 100644 --- a/applications/main/subghz/subghz_i.c +++ b/applications/main/subghz/subghz_i.c @@ -51,7 +51,7 @@ void subghz_dialog_message_freq_error(SubGhz* subghz, SubGhzTx can_tx) { default: return; case SubGhzTxBlockedRegionNotProvisioned: - message_text = "Region is not\nprovisioned.\nUpdate firmware\nor bypass region."; + message_text = "Missing region file.\nReinstall firmware\nwith Web/App\nor bypass region."; break; case SubGhzTxBlockedRegion: message_text = "Frequency outside\nof region range.\nMNTM > Protocols\n> Bypass Region"; diff --git a/applications/services/cli/cli.c b/applications/services/cli/cli.c index e9c123081c..9756d1eef6 100644 --- a/applications/services/cli/cli.c +++ b/applications/services/cli/cli.c @@ -596,7 +596,7 @@ void cli_plugin_wrapper(const char* name, Cli* cli, FuriString* args, void* cont handler(cli, args, context); } else { printf( - "CLI plugin '%s' failed (code %" PRIu16 "), update firmware or check logs\r\n", + "CLI plugin '%s' failed (code %" PRIu16 "), reinstall firmware or check logs\r\n", name, error); } diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 7efae76d1c..bcaa9b2509 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -107,7 +107,7 @@ static void loader_show_gui_error( Storage* storage = furi_record_open(RECORD_STORAGE); if(storage_sd_status(storage) == FSE_OK) { header = "Update needed"; - text = "Update firmware\nto run this app"; + text = "Reinstall firmware\nto run this app"; } else { header = "SD card needed"; text = "Install SD card\nto run this app"; diff --git a/applications/services/loader/loader_menu_storage.c b/applications/services/loader/loader_menu_storage.c index 8823ec2087..755ee12430 100644 --- a/applications/services/loader/loader_menu_storage.c +++ b/applications/services/loader/loader_menu_storage.c @@ -46,10 +46,10 @@ int32_t loader_menu_storage_settings(void* context) { dialog_ex_set_header(dialog_ex, "Update needed", 64, 0, AlignCenter, AlignTop); dialog_ex_set_text( dialog_ex, - "Update firmware\n" - "to run this app\n" + "Reinstall firmware\n" + "to run this app.\n" "Can format SD\n" - "here if needed", + "here if needed.", 3, 17, AlignLeft, diff --git a/applications/settings/system/system_settings.c b/applications/settings/system/system_settings.c index b853abd337..43163dc170 100644 --- a/applications/settings/system/system_settings.c +++ b/applications/settings/system/system_settings.c @@ -2,6 +2,21 @@ #include #include #include +#include + +enum VarItemListIndex { + VarItemListIndexHandOrient, + VarItemListIndexUnits, + VarItemListIndexTimeFormat, + VarItemListIndexDateFormat, + VarItemListIndexLogLevel, + VarItemListIndexLogDevice, + VarItemListIndexLogBaudRate, + VarItemListIndexDebug, + VarItemListIndexHeapTrace, + VarItemListIndexSleepMethod, + VarItemListIndexFileNaming, +}; const char* const log_level_text[] = { "Default", @@ -80,10 +95,11 @@ const char* const debug_text[] = { }; static void debug_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, debug_text[index]); if(index) { - furi_hal_rtc_set_flag(FuriHalRtcFlagDebug); + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexDebug); } else { furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug); } @@ -108,9 +124,13 @@ const uint32_t heap_trace_mode_value[] = { }; static void heap_trace_mode_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, heap_trace_mode_text[index]); furi_hal_rtc_set_heap_track_mode(heap_trace_mode_value[index]); + if(index) { + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexHeapTrace); + } } const char* const measurement_units_text[] = { @@ -184,10 +204,11 @@ const char* const sleep_method[] = { }; static void sleep_method_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, sleep_method[index]); if(index) { - furi_hal_rtc_set_flag(FuriHalRtcFlagLegacySleep); + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexSleepMethod); } else { furi_hal_rtc_reset_flag(FuriHalRtcFlagLegacySleep); } @@ -213,6 +234,81 @@ static uint32_t system_settings_exit(void* context) { return VIEW_NONE; } +static bool system_settings_custom_event_callback(void* context, uint32_t event) { + furi_assert(context); + SystemSettings* app = context; + + VariableItem* item = variable_item_list_get(app->var_item_list, event); + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + DialogMessage* msg = dialog_message_alloc(); + dialog_message_set_buttons(msg, "No", NULL, "Yes"); + + switch(event) { + case VarItemListIndexDebug: + dialog_message_set_header(msg, "Enable Debug?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "This consumes 400% more\n" + "battery life. Don't use unless\n" + "you know exactly what\n" + "you're doing.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) == DialogMessageButtonRight) { + furi_hal_rtc_set_flag(FuriHalRtcFlagDebug); + } else { + variable_item_set_current_value_text(item, debug_text[0]); + variable_item_set_current_value_index(item, 0); + } + break; + case VarItemListIndexSleepMethod: + dialog_message_set_header(msg, "Disable DeepSleep?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "Disabling will consume 400%\n" + "more battery life. Only\n" + "disable if you have a\n" + "specific reason.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) == DialogMessageButtonRight) { + furi_hal_rtc_set_flag(FuriHalRtcFlagLegacySleep); + } else { + variable_item_set_current_value_text(item, sleep_method[0]); + variable_item_set_current_value_index(item, 0); + } + break; + case VarItemListIndexHeapTrace: + dialog_message_set_header(msg, "Enable Heap Trace?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "Will use more RAM and might\n" + "cause Out Of Memory errors.\n" + "Don't enable without a\n" + "specific reason.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) != DialogMessageButtonRight) { + furi_hal_rtc_set_heap_track_mode(heap_trace_mode_value[0]); + variable_item_set_current_value_text(item, heap_trace_mode_text[0]); + variable_item_set_current_value_index(item, 0); + } + break; + default: + break; + } + + dialog_message_free(msg); + furi_record_close(RECORD_DIALOGS); + return true; +} + SystemSettings* system_settings_alloc(void) { SystemSettings* app = malloc(sizeof(SystemSettings)); @@ -221,6 +317,8 @@ SystemSettings* system_settings_alloc(void) { app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_set_event_callback_context(app->view_dispatcher, app); + view_dispatcher_set_custom_event_callback( + app->view_dispatcher, system_settings_custom_event_callback); view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);