From 24c73c9460b85cdb4ffa9c22ccb7a3abfa7cfc83 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 26 Jun 2023 00:54:53 +0100 Subject: [PATCH] Add back API mismatch ignore dialog --- applications/services/loader/loader.c | 33 ++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 703405a45..e7646bec9 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -328,7 +328,10 @@ static LoaderStatus loader_start_external_app( FlipperApplicationPreloadStatus preload_res = flipper_application_preload(loader->app.fap, path); - if(preload_res != FlipperApplicationPreloadStatusSuccess) { + bool api_mismatch = false; + if(preload_res == FlipperApplicationPreloadStatusApiMismatch) { + api_mismatch = true; + } else if(preload_res != FlipperApplicationPreloadStatusSuccess) { const char* err_msg = flipper_application_preload_status_to_string(preload_res); status = loader_make_status_error( LoaderStatusErrorInternal, error_message, "Preload failed %s: %s", path, err_msg); @@ -338,14 +341,32 @@ static LoaderStatus loader_start_external_app( FURI_LOG_I(TAG, "Mapping"); FlipperApplicationLoadStatus load_status = flipper_application_map_to_memory(loader->app.fap); + FURI_LOG_I(TAG, "Loaded in %zums", (size_t)(furi_get_tick() - start)); if(load_status != FlipperApplicationLoadStatusSuccess) { const char* err_msg = flipper_application_load_status_to_string(load_status); status = loader_make_status_error( LoaderStatusErrorInternal, error_message, "Load failed %s: %s", path, err_msg); break; + } else if(api_mismatch) { + // Successful map, but found api mismatch -> warn user + DialogMessage* message = dialog_message_alloc(); + dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop); + dialog_message_set_buttons(message, "Cancel", NULL, "Continue"); + dialog_message_set_text( + message, + "This app might not\nwork correctly\nContinue anyways?", + 64, + 32, + AlignCenter, + AlignCenter); + DialogMessageButton res = dialog_message_show(furi_record_open(RECORD_DIALOGS), message); + dialog_message_free(message); + furi_record_close(RECORD_DIALOGS); + if(res != DialogMessageButtonRight) { + break; + } } - FURI_LOG_I(TAG, "Loaded in %zums", (size_t)(furi_get_tick() - start)); FURI_LOG_I(TAG, "Starting app"); loader->app.thread = flipper_application_alloc_thread(loader->app.fap, args); @@ -363,12 +384,12 @@ static LoaderStatus loader_start_external_app( } loader_start_app_thread(loader, FlipperInternalApplicationFlagDefault); + + return status; } while(0); - if(status != LoaderStatusOk) { - flipper_application_free(loader->app.fap); - loader->app.fap = NULL; - } + flipper_application_free(loader->app.fap); + loader->app.fap = NULL; return status; }