From 9f9ceee1493f4c857735baf2034d590a4de60146 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:37:42 +0300 Subject: [PATCH] fix storage settings scene exit via favs --- .../scenes/storage_settings_scene_benchmark.c | 20 +++++++++++++++---- ...storage_settings_scene_benchmark_confirm.c | 8 +++++++- .../storage_settings_scene_factory_reset.c | 8 +++++++- .../storage_settings_scene_format_confirm.c | 8 +++++++- .../storage_settings_scene_formatting.c | 10 ++++++++-- .../storage_settings_scene_internal_info.c | 8 +++++++- .../scenes/storage_settings_scene_sd_info.c | 8 +++++++- .../storage_settings_scene_unmount_confirm.c | 8 +++++++- .../scenes/storage_settings_scene_unmounted.c | 10 ++++++++-- .../storage_settings/storage_settings.c | 3 +++ .../storage_settings/storage_settings.h | 2 ++ 11 files changed, 79 insertions(+), 14 deletions(-) diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark.c b/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark.c index c07ab1ae6..b4f52b879 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark.c @@ -156,14 +156,26 @@ bool storage_settings_scene_benchmark_on_event(void* context, SceneManagerEvent if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case DialogExResultCenter: - consumed = scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, StorageSettingsStart); + if(app->from_favorites) { + storage_settings_scene_benchmark_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_search_and_switch_to_previous_scene( + app->scene_manager, StorageSettingsStart); + } break; } } else if(event.type == SceneManagerEventTypeBack) { if(sd_status == FSE_OK) { - consumed = scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, StorageSettingsStart); + if(app->from_favorites) { + storage_settings_scene_benchmark_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_search_and_switch_to_previous_scene( + app->scene_manager, StorageSettingsStart); + } } else { consumed = true; } diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark_confirm.c b/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark_confirm.c index 2f8644761..462aa4cee 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark_confirm.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_benchmark_confirm.c @@ -48,7 +48,13 @@ bool storage_settings_scene_benchmark_confirm_on_event(void* context, SceneManag switch(event.event) { case DialogExResultLeft: case DialogExResultCenter: - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_benchmark_confirm_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; case DialogExResultRight: scene_manager_next_scene(app->scene_manager, StorageSettingsBenchmark); diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_factory_reset.c b/applications/settings/storage_settings/scenes/storage_settings_scene_factory_reset.c index 0f8e1aa96..7fa925487 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_factory_reset.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_factory_reset.c @@ -44,7 +44,13 @@ bool storage_settings_scene_factory_reset_on_event(void* context, SceneManagerEv switch(event.event) { case DialogExResultLeft: scene_manager_set_scene_state(app->scene_manager, StorageSettingsFactoryReset, 0); - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_factory_reset_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; case DialogExResultRight: counter++; diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_format_confirm.c b/applications/settings/storage_settings/scenes/storage_settings_scene_format_confirm.c index 13b368d3f..2670f1495 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_format_confirm.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_format_confirm.c @@ -41,7 +41,13 @@ bool storage_settings_scene_format_confirm_on_event(void* context, SceneManagerE switch(event.event) { case DialogExResultLeft: case DialogExResultCenter: - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_format_confirm_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; case DialogExResultRight: scene_manager_next_scene(app->scene_manager, StorageSettingsFormatting); diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_formatting.c b/applications/settings/storage_settings/scenes/storage_settings_scene_formatting.c index 6a958610e..0ae18741e 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_formatting.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_formatting.c @@ -69,8 +69,14 @@ bool storage_settings_scene_formatting_on_event(void* context, SceneManagerEvent if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case DialogExResultLeft: - consumed = scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, StorageSettingsStart); + if(app->from_favorites) { + storage_settings_scene_formatting_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_search_and_switch_to_previous_scene( + app->scene_manager, StorageSettingsStart); + } break; } } else if(event.type == SceneManagerEventTypeBack) { diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_internal_info.c b/applications/settings/storage_settings/scenes/storage_settings_scene_internal_info.c index 87a7ac655..e3e5ffe96 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_internal_info.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_internal_info.c @@ -56,7 +56,13 @@ bool storage_settings_scene_internal_info_on_event(void* context, SceneManagerEv if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case DialogExResultLeft: - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_internal_info_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; } } diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c b/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c index cad3fbfaf..d168894b4 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c @@ -78,7 +78,13 @@ bool storage_settings_scene_sd_info_on_event(void* context, SceneManagerEvent ev switch(event.event) { case DialogExResultLeft: case DialogExResultCenter: - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_sd_info_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; case DialogExResultRight: scene_manager_next_scene(app->scene_manager, StorageSettingsUnmounted); diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_unmount_confirm.c b/applications/settings/storage_settings/scenes/storage_settings_scene_unmount_confirm.c index 1b9970f9f..65049c33f 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_unmount_confirm.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_unmount_confirm.c @@ -46,7 +46,13 @@ bool storage_settings_scene_unmount_confirm_on_event(void* context, SceneManager switch(event.event) { case DialogExResultCenter: case DialogExResultLeft: - consumed = scene_manager_previous_scene(app->scene_manager); + if(app->from_favorites) { + storage_settings_scene_unmount_confirm_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_previous_scene(app->scene_manager); + } break; case DialogExResultRight: scene_manager_next_scene(app->scene_manager, StorageSettingsUnmounted); diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_unmounted.c b/applications/settings/storage_settings/scenes/storage_settings_scene_unmounted.c index 86398b1c9..5b64adb63 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_unmounted.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_unmounted.c @@ -57,8 +57,14 @@ bool storage_settings_scene_unmounted_on_event(void* context, SceneManagerEvent if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case DialogExResultCenter: - consumed = scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, StorageSettingsStart); + if(app->from_favorites) { + storage_settings_scene_unmounted_on_exit(app); + view_dispatcher_stop(app->view_dispatcher); + return true; + } else { + consumed = scene_manager_search_and_switch_to_previous_scene( + app->scene_manager, StorageSettingsStart); + } break; } } else if(event.type == SceneManagerEventTypeBack) { diff --git a/applications/settings/storage_settings/storage_settings.c b/applications/settings/storage_settings/storage_settings.c index 07656431c..570ca3411 100644 --- a/applications/settings/storage_settings/storage_settings.c +++ b/applications/settings/storage_settings/storage_settings.c @@ -98,7 +98,10 @@ int32_t storage_settings_app(void* p) { StorageSettings* app = storage_settings_alloc(); if(!submenu_settings_helpers_app_start(app->settings_helper, p)) { + app->from_favorites = false; scene_manager_next_scene(app->scene_manager, StorageSettingsStart); + } else { + app->from_favorites = true; } view_dispatcher_run(app->view_dispatcher); diff --git a/applications/settings/storage_settings/storage_settings.h b/applications/settings/storage_settings/storage_settings.h index 5f4c6404e..a0f7a81b4 100644 --- a/applications/settings/storage_settings/storage_settings.h +++ b/applications/settings/storage_settings/storage_settings.h @@ -44,6 +44,8 @@ typedef struct { // helpers SubmenuSettingsHelperDescriptor* helper_descriptor; SubmenuSettingsHelper* settings_helper; + + bool from_favorites; } StorageSettings; typedef enum {