From f43b76efc21bd7cb248d7dc14d232fb6b2617a95 Mon Sep 17 00:00:00 2001 From: Nikolay Minaylov Date: Tue, 27 Dec 2022 11:03:56 +0300 Subject: [PATCH] [FL-3021] USB/BLE HID Remote icon fix (#2179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- .../hid_app/assets/Ble_disconnected_15x15.png | Bin 3632 -> 657 bytes applications/plugins/hid_app/hid.c | 14 +++++++++----- .../plugins/hid_app/views/hid_keyboard.c | 9 ++++++++- .../plugins/hid_app/views/hid_keynote.c | 15 +++++++++++---- .../plugins/hid_app/views/hid_media.c | 15 +++++++++++---- .../plugins/hid_app/views/hid_mouse.c | 15 +++++++++++---- .../plugins/hid_app/views/hid_mouse_jiggler.c | 18 ++++++++++++++---- .../plugins/hid_app/views/hid_tiktok.c | 15 +++++++++++---- 8 files changed, 75 insertions(+), 26 deletions(-) diff --git a/applications/plugins/hid_app/assets/Ble_disconnected_15x15.png b/applications/plugins/hid_app/assets/Ble_disconnected_15x15.png index 0858bb93f43d7cfc81e3f6f3b7540bd1a5e17ebf..bd54646d891976d838ecdf1acb1d05ee1f3ba40c 100644 GIT binary patch delta 392 zcmdlWGm&+IvK<3kfKQ0)|2hUBV0ZLc3#5utBRtc5eHpZXYz_t{MneWBAWIR5)!H)| zSb#Jm5PJYI!{kIB1rs36ynvB`8AvmNq!uv274a`%MzBE|T2IA$1C^Cbp3Nma`3;wj zaD;Dwf^&XRs)CuGfu4bq9hZW_ zN&}yC+C4=^_C}p+7pp(c*RPG+WFRMY!+)9eNuJG762JFz%im^jo_*=zKTt?`y85}S Ib4q9e01jJVn*aa+ delta 3367 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 O;LMDyQB?@n$o~M7G41{U diff --git a/applications/plugins/hid_app/hid.c b/applications/plugins/hid_app/hid.c index 1d2235e0..7f63f0cc 100644 --- a/applications/plugins/hid_app/hid.c +++ b/applications/plugins/hid_app/hid.c @@ -42,10 +42,12 @@ static void bt_hid_connection_status_changed_callback(BtStatus status, void* con furi_assert(context); Hid* hid = context; bool connected = (status == BtStatusConnected); - if(connected) { - notification_internal_message(hid->notifications, &sequence_set_blue_255); - } else { - notification_internal_message(hid->notifications, &sequence_reset_blue); + if(hid->transport == HidTransportBle) { + if(connected) { + notification_internal_message(hid->notifications, &sequence_set_blue_255); + } else { + notification_internal_message(hid->notifications, &sequence_reset_blue); + } } hid_keynote_set_connected_status(hid->hid_keynote, connected); hid_keyboard_set_connected_status(hid->hid_keyboard, connected); @@ -186,7 +188,9 @@ void hid_free(Hid* app) { furi_assert(app); // Reset notification - notification_internal_message(app->notifications, &sequence_reset_blue); + if(app->transport == HidTransportBle) { + notification_internal_message(app->notifications, &sequence_reset_blue); + } // Free views view_dispatcher_remove_view(app->view_dispatcher, HidViewSubmenu); diff --git a/applications/plugins/hid_app/views/hid_keyboard.c b/applications/plugins/hid_app/views/hid_keyboard.c index 3e3b6328..8b12e8fd 100644 --- a/applications/plugins/hid_app/views/hid_keyboard.c +++ b/applications/plugins/hid_app/views/hid_keyboard.c @@ -25,6 +25,7 @@ typedef struct { bool back_pressed; bool connected; char key_string[5]; + HidTransport transport; } HidKeyboardModel; typedef struct { @@ -207,7 +208,7 @@ static void hid_keyboard_draw_callback(Canvas* canvas, void* context) { HidKeyboardModel* model = context; // Header - if(!model->connected) { + if((!model->connected) && (model->transport == HidTransportBle)) { canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Keyboard"); @@ -361,6 +362,12 @@ HidKeyboard* hid_keyboard_alloc(Hid* bt_hid) { view_set_draw_callback(hid_keyboard->view, hid_keyboard_draw_callback); view_set_input_callback(hid_keyboard->view, hid_keyboard_input_callback); + with_view_model( + hid_keyboard->view, + HidKeyboardModel * model, + { model->transport = bt_hid->transport; }, + true); + return hid_keyboard; } diff --git a/applications/plugins/hid_app/views/hid_keynote.c b/applications/plugins/hid_app/views/hid_keynote.c index c95f4278..5e5eeb79 100644 --- a/applications/plugins/hid_app/views/hid_keynote.c +++ b/applications/plugins/hid_app/views/hid_keynote.c @@ -19,6 +19,7 @@ typedef struct { bool ok_pressed; bool back_pressed; bool connected; + HidTransport transport; } HidKeynoteModel; static void hid_keynote_draw_arrow(Canvas* canvas, uint8_t x, uint8_t y, CanvasDirection dir) { @@ -39,11 +40,14 @@ static void hid_keynote_draw_callback(Canvas* canvas, void* context) { HidKeynoteModel* model = context; // Header - if(model->connected) { - canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); - } else { - canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + if(model->transport == HidTransportBle) { + if(model->connected) { + canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); + } else { + canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + } } + canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Keynote"); @@ -186,6 +190,9 @@ HidKeynote* hid_keynote_alloc(Hid* hid) { view_set_draw_callback(hid_keynote->view, hid_keynote_draw_callback); view_set_input_callback(hid_keynote->view, hid_keynote_input_callback); + with_view_model( + hid_keynote->view, HidKeynoteModel * model, { model->transport = hid->transport; }, true); + return hid_keynote; } diff --git a/applications/plugins/hid_app/views/hid_media.c b/applications/plugins/hid_app/views/hid_media.c index 5d764f73..468529d5 100644 --- a/applications/plugins/hid_app/views/hid_media.c +++ b/applications/plugins/hid_app/views/hid_media.c @@ -21,6 +21,7 @@ typedef struct { bool down_pressed; bool ok_pressed; bool connected; + HidTransport transport; } HidMediaModel; static void hid_media_draw_arrow(Canvas* canvas, uint8_t x, uint8_t y, CanvasDirection dir) { @@ -41,11 +42,14 @@ static void hid_media_draw_callback(Canvas* canvas, void* context) { HidMediaModel* model = context; // Header - if(model->connected) { - canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); - } else { - canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + if(model->transport == HidTransportBle) { + if(model->connected) { + canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); + } else { + canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + } } + canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Media"); canvas_set_font(canvas, FontSecondary); @@ -190,6 +194,9 @@ HidMedia* hid_media_alloc(Hid* hid) { view_set_draw_callback(hid_media->view, hid_media_draw_callback); view_set_input_callback(hid_media->view, hid_media_input_callback); + with_view_model( + hid_media->view, HidMediaModel * model, { model->transport = hid->transport; }, true); + return hid_media; } diff --git a/applications/plugins/hid_app/views/hid_mouse.c b/applications/plugins/hid_app/views/hid_mouse.c index d1d76c15..30a9d9d0 100644 --- a/applications/plugins/hid_app/views/hid_mouse.c +++ b/applications/plugins/hid_app/views/hid_mouse.c @@ -20,6 +20,7 @@ typedef struct { bool left_mouse_held; bool right_mouse_pressed; bool connected; + HidTransport transport; } HidMouseModel; static void hid_mouse_draw_callback(Canvas* canvas, void* context) { @@ -27,11 +28,14 @@ static void hid_mouse_draw_callback(Canvas* canvas, void* context) { HidMouseModel* model = context; // Header - if(model->connected) { - canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); - } else { - canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + if(model->transport == HidTransportBle) { + if(model->connected) { + canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); + } else { + canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + } } + canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Mouse"); canvas_set_font(canvas, FontSecondary); @@ -198,6 +202,9 @@ HidMouse* hid_mouse_alloc(Hid* hid) { view_set_draw_callback(hid_mouse->view, hid_mouse_draw_callback); view_set_input_callback(hid_mouse->view, hid_mouse_input_callback); + with_view_model( + hid_mouse->view, HidMouseModel * model, { model->transport = hid->transport; }, true); + return hid_mouse; } diff --git a/applications/plugins/hid_app/views/hid_mouse_jiggler.c b/applications/plugins/hid_app/views/hid_mouse_jiggler.c index a2b07c7a..d8f1f892 100644 --- a/applications/plugins/hid_app/views/hid_mouse_jiggler.c +++ b/applications/plugins/hid_app/views/hid_mouse_jiggler.c @@ -16,6 +16,7 @@ typedef struct { bool connected; bool running; uint8_t counter; + HidTransport transport; } HidMouseJigglerModel; static void hid_mouse_jiggler_draw_callback(Canvas* canvas, void* context) { @@ -23,11 +24,14 @@ static void hid_mouse_jiggler_draw_callback(Canvas* canvas, void* context) { HidMouseJigglerModel* model = context; // Header - if(model->connected) { - canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); - } else { - canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + if(model->transport == HidTransportBle) { + if(model->connected) { + canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); + } else { + canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + } } + canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Mouse Jiggler"); @@ -120,6 +124,12 @@ HidMouseJiggler* hid_mouse_jiggler_alloc(Hid* hid) { hid_mouse_jiggler->timer = furi_timer_alloc( hid_mouse_jiggler_timer_callback, FuriTimerTypePeriodic, hid_mouse_jiggler); + with_view_model( + hid_mouse_jiggler->view, + HidMouseJigglerModel * model, + { model->transport = hid->transport; }, + true); + return hid_mouse_jiggler; } diff --git a/applications/plugins/hid_app/views/hid_tiktok.c b/applications/plugins/hid_app/views/hid_tiktok.c index 42abf414..e1f9f4be 100644 --- a/applications/plugins/hid_app/views/hid_tiktok.c +++ b/applications/plugins/hid_app/views/hid_tiktok.c @@ -19,6 +19,7 @@ typedef struct { bool ok_pressed; bool connected; bool is_cursor_set; + HidTransport transport; } HidTikTokModel; static void hid_tiktok_draw_callback(Canvas* canvas, void* context) { @@ -26,11 +27,14 @@ static void hid_tiktok_draw_callback(Canvas* canvas, void* context) { HidTikTokModel* model = context; // Header - if(model->connected) { - canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); - } else { - canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + if(model->transport == HidTransportBle) { + if(model->connected) { + canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15); + } else { + canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15); + } } + canvas_set_font(canvas, FontPrimary); elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "TikTok"); canvas_set_font(canvas, FontSecondary); @@ -207,6 +211,9 @@ HidTikTok* hid_tiktok_alloc(Hid* bt_hid) { view_set_draw_callback(hid_tiktok->view, hid_tiktok_draw_callback); view_set_input_callback(hid_tiktok->view, hid_tiktok_input_callback); + with_view_model( + hid_tiktok->view, HidTikTokModel * model, { model->transport = bt_hid->transport; }, true); + return hid_tiktok; }