Temp fix for input hang on loader error on keybind

This commit is contained in:
Willy-JL
2023-07-01 11:44:12 +01:00
parent 523e063d19
commit 565713ba98
6 changed files with 49 additions and 4 deletions
+3 -3
View File
@@ -468,11 +468,11 @@ void desktop_run_keybind(Desktop* instance, InputType _type, InputKey _key) {
if(!strnlen(keybind, MAX_KEYBIND_LENGTH)) return;
if(!strncmp(keybind, "Apps Menu", MAX_KEYBIND_LENGTH)) {
loader_start_with_gui_error(instance->loader, LOADER_APPLICATIONS_NAME, NULL);
loader_start_detached_with_gui_error(instance->loader, LOADER_APPLICATIONS_NAME, NULL);
} else if(!strncmp(keybind, "Archive", MAX_KEYBIND_LENGTH)) {
view_dispatcher_send_custom_event(instance->view_dispatcher, DesktopMainEventOpenArchive);
} else if(!strncmp(keybind, "Device Info", MAX_KEYBIND_LENGTH)) {
loader_start_with_gui_error(instance->loader, "Power", "about_battery");
loader_start_detached_with_gui_error(instance->loader, "Power", "about_battery");
} else if(!strncmp(keybind, "Lock Menu", MAX_KEYBIND_LENGTH)) {
view_dispatcher_send_custom_event(instance->view_dispatcher, DesktopMainEventOpenLockMenu);
} else if(!strncmp(keybind, "Lock Keypad", MAX_KEYBIND_LENGTH)) {
@@ -480,7 +480,7 @@ void desktop_run_keybind(Desktop* instance, InputType _type, InputKey _key) {
} else if(!strncmp(keybind, "Lock with PIN", MAX_KEYBIND_LENGTH)) {
view_dispatcher_send_custom_event(instance->view_dispatcher, DesktopMainEventLockWithPin);
} else {
loader_start_with_gui_error(instance->loader, keybind, NULL);
loader_start_detached_with_gui_error(instance->loader, keybind, NULL);
}
}
@@ -122,7 +122,7 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
break;
case DesktopLockMenuEventXtreme:
desktop_scene_lock_menu_save_settings(desktop);
loader_start_with_gui_error(desktop->loader, "Xtreme", NULL);
loader_start_detached_with_gui_error(desktop->loader, "Xtreme", NULL);
consumed = true;
break;
case DesktopLockMenuEventStealthModeOn:
+35
View File
@@ -57,6 +57,15 @@ LoaderStatus loader_start_with_gui_error(Loader* loader, const char* name, const
return status;
}
void loader_start_detached_with_gui_error(Loader* loader, const char* name, const char* args) {
LoaderMessage message;
message.type = LoaderMessageTypeStartByNameDetachedWithGuiError;
message.start.name = name;
message.start.args = args;
furi_message_queue_put(loader->queue, &message, FuriWaitForever);
}
bool loader_lock(Loader* loader) {
LoaderMessage message;
LoaderMessageBoolResult result;
@@ -569,6 +578,32 @@ int32_t loader_srv(void* p) {
loader, message.start.name, message.start.args, message.start.error_message);
api_lock_unlock(message.api_lock);
break;
case LoaderMessageTypeStartByNameDetachedWithGuiError: {
FuriString* error_message = furi_string_alloc();
LoaderStatus status = loader_do_start_by_name(
loader, message.start.name, message.start.args, error_message);
if(status == LoaderStatusErrorUnknownApp || status == LoaderStatusErrorInternal) {
DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
DialogMessage* message = dialog_message_alloc();
dialog_message_set_header(message, "Error", 64, 0, AlignCenter, AlignTop);
dialog_message_set_buttons(message, NULL, NULL, NULL);
furi_string_replace(error_message, ":", "\n");
dialog_message_set_text(
message,
furi_string_get_cstr(error_message),
64,
32,
AlignCenter,
AlignCenter);
dialog_message_show(dialogs, message);
dialog_message_free(message);
furi_record_close(RECORD_DIALOGS);
}
furi_string_free(error_message);
break;
}
case LoaderMessageTypeShowMenu:
loader_do_menu_show(loader, false);
break;
+8
View File
@@ -46,6 +46,14 @@ LoaderStatus
*/
LoaderStatus loader_start_with_gui_error(Loader* loader, const char* name, const char* args);
/**
* @brief Start application detached with GUI error message
* @param[in] instance loader instance
* @param[in] name application name
* @param[in] args application arguments
*/
void loader_start_detached_with_gui_error(Loader* loader, const char* name, const char* args);
/**
* @brief Lock application start
* @param[in] instance loader instance
+1
View File
@@ -25,6 +25,7 @@ struct Loader {
typedef enum {
LoaderMessageTypeStartByName,
LoaderMessageTypeStartByNameDetachedWithGuiError,
LoaderMessageTypeAppClosed,
LoaderMessageTypeShowMenu,
LoaderMessageTypeShowSettings,
+1
View File
@@ -1928,6 +1928,7 @@ 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_detached_with_gui_error,void,"Loader*, const char*, const char*"
Function,+,loader_start_with_gui_error,LoaderStatus,"Loader*, const char*, const char*"
Function,+,loader_unlock,void,Loader*
Function,+,loading_alloc,Loading*,
1 entry status name type params
1928 Function + loader_show_menu void Loader*
1929 Function + loader_show_settings void Loader*
1930 Function + loader_start LoaderStatus Loader*, const char*, const char*, FuriString*
1931 Function + loader_start_detached_with_gui_error void Loader*, const char*, const char*
1932 Function + loader_start_with_gui_error LoaderStatus Loader*, const char*, const char*
1933 Function + loader_unlock void Loader*
1934 Function + loading_alloc Loading*