From 5793d5271c22a4de58f894b349afa6ce8169f57c Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Thu, 4 Apr 2024 03:01:41 -0700 Subject: [PATCH 1/2] Hide unlock with reader for MFU-C (#3553) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- .../nfc_scene_mf_ultralight_unlock_menu.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c index 4d97040ee..a23e4b306 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c @@ -20,12 +20,17 @@ void nfc_scene_mf_ultralight_unlock_menu_on_enter(void* context) { uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneMfUltralightUnlockMenu); if(nfc_device_get_protocol(nfc->nfc_device) == NfcProtocolMfUltralight) { - submenu_add_item( - submenu, - "Unlock With Reader", - SubmenuIndexMfUlUnlockMenuReader, - nfc_scene_mf_ultralight_unlock_menu_submenu_callback, - nfc); + const MfUltralightData* mfu_data = + nfc_device_get_data(nfc->nfc_device, NfcProtocolMfUltralight); + // Hide for MFU-C since it uses 3DES + if(mfu_data->type != MfUltralightTypeMfulC) { + submenu_add_item( + submenu, + "Unlock With Reader", + SubmenuIndexMfUlUnlockMenuReader, + nfc_scene_mf_ultralight_unlock_menu_submenu_callback, + nfc); + } } submenu_add_item( submenu, From 54312574703dd90641f22c9812a1e6a9831921a0 Mon Sep 17 00:00:00 2001 From: Sergei Gavrilov Date: Thu, 4 Apr 2024 22:42:58 +1000 Subject: [PATCH 2/2] [FL-3765][FL-3737] Desktop: ensure that animation is unloaded before app start (#3569) * Desktop: ensure that animation is unloaded before app start * Desktop: unload animation only if it is loaded --- applications/services/desktop/desktop.c | 8 +++++++- applications/services/desktop/desktop_i.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 74979d128..49aa04e35 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -34,10 +34,12 @@ static void desktop_loader_callback(const void* message, void* context) { if(event->type == LoaderEventTypeApplicationStarted) { view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalBeforeAppStarted); + furi_check(furi_semaphore_acquire(desktop->animation_semaphore, 3000) == FuriStatusOk); } else if(event->type == LoaderEventTypeApplicationStopped) { view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalAfterAppFinished); } } + static void desktop_lock_icon_draw_callback(Canvas* canvas, void* context) { UNUSED(context); furi_assert(canvas); @@ -120,8 +122,11 @@ static bool desktop_custom_event_callback(void* context, uint32_t event) { switch(event) { case DesktopGlobalBeforeAppStarted: - animation_manager_unload_and_stall_animation(desktop->animation_manager); + if(animation_manager_is_animation_loaded(desktop->animation_manager)) { + animation_manager_unload_and_stall_animation(desktop->animation_manager); + } desktop_auto_lock_inhibit(desktop); + furi_semaphore_release(desktop->animation_semaphore); return true; case DesktopGlobalAfterAppFinished: animation_manager_load_and_continue_animation(desktop->animation_manager); @@ -270,6 +275,7 @@ void desktop_set_stealth_mode_state(Desktop* desktop, bool enabled) { Desktop* desktop_alloc(void) { Desktop* desktop = malloc(sizeof(Desktop)); + desktop->animation_semaphore = furi_semaphore_alloc(1, 0); desktop->animation_manager = animation_manager_alloc(); desktop->gui = furi_record_open(RECORD_GUI); desktop->scene_thread = furi_thread_alloc(); diff --git a/applications/services/desktop/desktop_i.h b/applications/services/desktop/desktop_i.h index f6eeef6b1..c0b29f922 100644 --- a/applications/services/desktop/desktop_i.h +++ b/applications/services/desktop/desktop_i.h @@ -80,6 +80,8 @@ struct Desktop { bool time_format_12 : 1; // 1 - 12 hour, 0 - 24H bool in_transition : 1; + + FuriSemaphore* animation_semaphore; }; Desktop* desktop_alloc(void);