Add back loader_show_settings

This commit is contained in:
Willy-JL
2023-06-25 23:53:11 +01:00
parent 81f1135839
commit ef0203f778
7 changed files with 47 additions and 22 deletions
@@ -80,8 +80,8 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
switch(event.event) {
case DesktopLockMenuEventSettings:
desktop_scene_lock_menu_save_settings(desktop);
// loader_show_settings(furi_record_open(RECORD_LOADER));
// furi_record_close(RECORD_LOADER);
loader_show_settings(furi_record_open(RECORD_LOADER));
furi_record_close(RECORD_LOADER);
consumed = true;
break;
case DesktopLockMenuEventLock:
+12 -3
View File
@@ -88,6 +88,12 @@ void loader_show_menu(Loader* loader) {
furi_message_queue_put(loader->queue, &message, FuriWaitForever);
}
void loader_show_settings(Loader* loader) {
LoaderMessage message;
message.type = LoaderMessageTypeShowSettings;
furi_message_queue_put(loader->queue, &message, FuriWaitForever);
}
FuriPubSub* loader_get_pubsub(Loader* loader) {
furi_assert(loader);
// it's safe to return pubsub without locking
@@ -312,9 +318,9 @@ static LoaderStatus loader_start_external_app(
// process messages
static void loader_do_menu_show(Loader* loader) {
static void loader_do_menu_show(Loader* loader, bool settings) {
if(!loader->loader_menu) {
loader->loader_menu = loader_menu_alloc(loader_menu_closed_callback, loader);
loader->loader_menu = loader_menu_alloc(loader_menu_closed_callback, loader, settings);
}
}
@@ -475,7 +481,10 @@ int32_t loader_srv(void* p) {
api_lock_unlock(message.api_lock);
break;
case LoaderMessageTypeShowMenu:
loader_do_menu_show(loader);
loader_do_menu_show(loader, false);
break;
case LoaderMessageTypeShowSettings:
loader_do_menu_show(loader, true);
break;
case LoaderMessageTypeMenuClosed:
loader_do_menu_closed(loader);
+6
View File
@@ -72,6 +72,12 @@ bool loader_is_locked(Loader* instance);
*/
void loader_show_menu(Loader* instance);
/**
* @brief Show settings menu
* @param[in] instance loader instance
*/
void loader_show_settings(Loader* instance);
/**
* @brief Get loader pubsub
* @param[in] instance loader instance
+1
View File
@@ -25,6 +25,7 @@ typedef enum {
LoaderMessageTypeStartByName,
LoaderMessageTypeAppClosed,
LoaderMessageTypeShowMenu,
LoaderMessageTypeShowSettings,
LoaderMessageTypeMenuClosed,
LoaderMessageTypeApplicationsClosed,
LoaderMessageTypeLock,
+23 -15
View File
@@ -12,16 +12,18 @@
struct LoaderMenu {
FuriThread* thread;
bool settings;
void (*closed_cb)(void*);
void* context;
};
static int32_t loader_menu_thread(void* p);
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context) {
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context, bool settings) {
LoaderMenu* loader_menu = malloc(sizeof(LoaderMenu));
loader_menu->closed_cb = closed_cb;
loader_menu->context = context;
loader_menu->settings = settings;
loader_menu->thread = furi_thread_alloc_ex(TAG, 1024, loader_menu_thread, loader_menu);
furi_thread_start(loader_menu->thread);
return loader_menu;
@@ -44,6 +46,7 @@ typedef struct {
ViewDispatcher* view_dispatcher;
Menu* primary_menu;
Submenu* settings_menu;
bool settings;
} LoaderMenuApp;
static void loader_menu_start(const char* name) {
@@ -123,37 +126,42 @@ static LoaderMenuApp* loader_menu_app_alloc(LoaderMenu* loader_menu) {
LoaderMenuApp* app = malloc(sizeof(LoaderMenuApp));
app->gui = furi_record_open(RECORD_GUI);
app->view_dispatcher = view_dispatcher_alloc();
app->primary_menu = menu_alloc();
app->settings_menu = submenu_alloc();
loader_menu_build_menu(app, loader_menu);
loader_menu_build_submenu(app, loader_menu);
app->settings = loader_menu->settings;
// Primary menu
View* primary_view = menu_get_view(app->primary_menu);
view_set_context(primary_view, app->primary_menu);
view_set_previous_callback(primary_view, loader_menu_exit);
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewPrimary, primary_view);
if(!app->settings) {
app->primary_menu = menu_alloc();
loader_menu_build_menu(app, loader_menu);
View* primary_view = menu_get_view(app->primary_menu);
view_set_context(primary_view, app->primary_menu);
view_set_previous_callback(primary_view, loader_menu_exit);
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewPrimary, primary_view);
}
// Settings menu
app->settings_menu = submenu_alloc();
loader_menu_build_submenu(app, loader_menu);
View* settings_view = submenu_get_view(app->settings_menu);
view_set_context(settings_view, app->settings_menu);
view_set_previous_callback(settings_view, loader_menu_switch_to_primary);
view_set_previous_callback(settings_view, app->settings ? loader_menu_exit : loader_menu_switch_to_primary);
view_dispatcher_add_view(app->view_dispatcher, LoaderMenuViewSettings, settings_view);
view_dispatcher_enable_queue(app->view_dispatcher);
view_dispatcher_switch_to_view(app->view_dispatcher, LoaderMenuViewPrimary);
view_dispatcher_switch_to_view(app->view_dispatcher, app->settings ? LoaderMenuViewSettings : LoaderMenuViewPrimary);
return app;
}
static void loader_menu_app_free(LoaderMenuApp* app) {
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewPrimary);
if(!app->settings) {
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewPrimary);
menu_free(app->primary_menu);
}
view_dispatcher_remove_view(app->view_dispatcher, LoaderMenuViewSettings);
submenu_free(app->settings_menu);
view_dispatcher_free(app->view_dispatcher);
menu_free(app->primary_menu);
submenu_free(app->settings_menu);
furi_record_close(RECORD_GUI);
free(app);
}
+2 -2
View File
@@ -7,10 +7,10 @@ extern "C" {
typedef struct LoaderMenu LoaderMenu;
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context);
LoaderMenu* loader_menu_alloc(void (*closed_cb)(void*), void* context, bool settings);
void loader_menu_free(LoaderMenu* loader_menu);
#ifdef __cplusplus
}
#endif
#endif
+1
View File
@@ -1918,6 +1918,7 @@ Function,+,loader_get_pubsub,FuriPubSub*,Loader*
Function,+,loader_is_locked,_Bool,Loader*
Function,+,loader_lock,_Bool,Loader*
Function,+,loader_show_menu,void,Loader*
Function,+,loader_show_settings,void,Loader*
Function,+,loader_start,LoaderStatus,"Loader*, const char*, const char*, FuriString*"
Function,+,loader_start_with_gui_error,LoaderStatus,"Loader*, const char*, const char*"
Function,+,loader_unlock,void,Loader*
1 entry status name type params
1918 Function + loader_is_locked _Bool Loader*
1919 Function + loader_lock _Bool Loader*
1920 Function + loader_show_menu void Loader*
1921 Function + loader_show_settings void Loader*
1922 Function + loader_start LoaderStatus Loader*, const char*, const char*, FuriString*
1923 Function + loader_start_with_gui_error LoaderStatus Loader*, const char*, const char*
1924 Function + loader_unlock void Loader*