diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 244bc77ff..299d403e6 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -102,8 +102,7 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { // break; case DesktopLockMenuEventSettings: - // loader_start(desktop->loader, "Settings", NULL); - // view_dispatcher_switch_to_view(desktop->loader->view_dispatcher, LoaderMenuViewSettings); + loader_show_settings(); consumed = true; break; diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 219a649a9..988b0a0b7 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -14,7 +14,8 @@ #define TAG "LoaderSrv" #define LOADER_THREAD_FLAG_SHOW_MENU (1 << 0) -#define LOADER_THREAD_FLAG_ALL (LOADER_THREAD_FLAG_SHOW_MENU) +#define LOADER_THREAD_FLAG_SHOW_SETTINGS (1 << 1) +#define LOADER_THREAD_FLAG_ALL (LOADER_THREAD_FLAG_SHOW_MENU | LOADER_THREAD_FLAG_SHOW_SETTINGS) static Loader* loader_instance = NULL; @@ -497,6 +498,11 @@ void loader_show_menu() { furi_thread_flags_set(loader_instance->loader_thread, LOADER_THREAD_FLAG_SHOW_MENU); } +void loader_show_settings() { + furi_assert(loader_instance); + furi_thread_flags_set(loader_instance->loader_thread, LOADER_THREAD_FLAG_SHOW_SETTINGS); +} + void loader_update_menu() { menu_reset(loader_instance->primary_menu); loader_build_menu(); @@ -531,6 +537,14 @@ int32_t loader_srv(void* p) { view_dispatcher_switch_to_view( loader_instance->view_dispatcher, LoaderMenuViewPrimary); view_dispatcher_run(loader_instance->view_dispatcher); + } else if(flags & LOADER_THREAD_FLAG_SHOW_SETTINGS) { + view_set_previous_callback( + submenu_get_view(loader_instance->settings_menu), loader_hide_menu); + view_dispatcher_switch_to_view( + loader_instance->view_dispatcher, LoaderMenuViewSettings); + view_dispatcher_run(loader_instance->view_dispatcher); + view_set_previous_callback( + submenu_get_view(loader_instance->settings_menu), loader_back_to_primary_menu); } } diff --git a/applications/services/loader/loader.h b/applications/services/loader/loader.h index 32eb068e5..58516b339 100644 --- a/applications/services/loader/loader.h +++ b/applications/services/loader/loader.h @@ -50,6 +50,9 @@ bool loader_is_locked(const Loader* instance); /** Show primary loader */ void loader_show_menu(); +/** Show settings menu */ +void loader_show_settings(); + /** Show primary loader */ void loader_update_menu(); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 0963fad50..1a12551d6 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1894,6 +1894,7 @@ Function,+,loader_get_pubsub,FuriPubSub*,Loader* Function,+,loader_is_locked,_Bool,const Loader* Function,+,loader_lock,_Bool,Loader* Function,+,loader_show_menu,void, +Function,+,loader_show_settings,void, Function,+,loader_start,LoaderStatus,"Loader*, const char*, const char*" Function,+,loader_unlock,void,Loader* Function,+,loader_update_menu,void,