mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-14 18:08:35 -07:00
Desktop: Unload animations before FAP is loaded
This commit is contained in:
@@ -32,10 +32,12 @@ static void desktop_loader_callback(const void* message, void* context) {
|
|||||||
Desktop* desktop = context;
|
Desktop* desktop = context;
|
||||||
const LoaderEvent* event = message;
|
const LoaderEvent* event = message;
|
||||||
|
|
||||||
if(event->type == LoaderEventTypeApplicationStarted) {
|
if(event->type == LoaderEventTypeApplicationBeforeLoad) {
|
||||||
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalBeforeAppStarted);
|
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalBeforeAppStarted);
|
||||||
furi_check(furi_semaphore_acquire(desktop->animation_semaphore, 3000) == FuriStatusOk);
|
furi_check(furi_semaphore_acquire(desktop->animation_semaphore, 3000) == FuriStatusOk);
|
||||||
} else if(event->type == LoaderEventTypeApplicationStopped) {
|
} else if(
|
||||||
|
event->type == LoaderEventTypeApplicationLoadFailed ||
|
||||||
|
event->type == LoaderEventTypeApplicationStopped) {
|
||||||
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalAfterAppFinished);
|
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalAfterAppFinished);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -255,6 +255,9 @@ static void loader_start_internal_app(
|
|||||||
const FlipperInternalApplication* app,
|
const FlipperInternalApplication* app,
|
||||||
const char* args) {
|
const char* args) {
|
||||||
FURI_LOG_I(TAG, "Starting %s", app->name);
|
FURI_LOG_I(TAG, "Starting %s", app->name);
|
||||||
|
LoaderEvent event;
|
||||||
|
event.type = LoaderEventTypeApplicationBeforeLoad;
|
||||||
|
furi_pubsub_publish(loader->pubsub, &event);
|
||||||
|
|
||||||
// store args
|
// store args
|
||||||
furi_assert(loader->app.args == NULL);
|
furi_assert(loader->app.args == NULL);
|
||||||
@@ -309,6 +312,9 @@ static LoaderStatus loader_start_external_app(
|
|||||||
const char* args,
|
const char* args,
|
||||||
FuriString* error_message) {
|
FuriString* error_message) {
|
||||||
LoaderStatus status = loader_make_success_status(error_message);
|
LoaderStatus status = loader_make_success_status(error_message);
|
||||||
|
LoaderEvent event;
|
||||||
|
event.type = LoaderEventTypeApplicationBeforeLoad;
|
||||||
|
furi_pubsub_publish(loader->pubsub, &event);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
loader->app.fap = flipper_application_alloc(storage, firmware_api_interface);
|
loader->app.fap = flipper_application_alloc(storage, firmware_api_interface);
|
||||||
@@ -356,6 +362,8 @@ static LoaderStatus loader_start_external_app(
|
|||||||
if(status != LoaderStatusOk) {
|
if(status != LoaderStatusOk) {
|
||||||
flipper_application_free(loader->app.fap);
|
flipper_application_free(loader->app.fap);
|
||||||
loader->app.fap = NULL;
|
loader->app.fap = NULL;
|
||||||
|
event.type = LoaderEventTypeApplicationLoadFailed;
|
||||||
|
furi_pubsub_publish(loader->pubsub, &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ typedef enum {
|
|||||||
} LoaderStatus;
|
} LoaderStatus;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
LoaderEventTypeApplicationBeforeLoad,
|
||||||
|
LoaderEventTypeApplicationLoadFailed,
|
||||||
LoaderEventTypeApplicationStarted,
|
LoaderEventTypeApplicationStarted,
|
||||||
LoaderEventTypeApplicationStopped
|
LoaderEventTypeApplicationStopped
|
||||||
} LoaderEventType;
|
} LoaderEventType;
|
||||||
|
|||||||
Reference in New Issue
Block a user