mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-06-10 19:23:31 -07:00
Add back loader_show_settings
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -25,6 +25,7 @@ typedef enum {
|
||||
LoaderMessageTypeStartByName,
|
||||
LoaderMessageTypeAppClosed,
|
||||
LoaderMessageTypeShowMenu,
|
||||
LoaderMessageTypeShowSettings,
|
||||
LoaderMessageTypeMenuClosed,
|
||||
LoaderMessageTypeApplicationsClosed,
|
||||
LoaderMessageTypeLock,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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*
|
||||
|
||||
|
Reference in New Issue
Block a user