[FL-2505] Active RPC session icon (#2583)

* Active RPC session icon
* Add RpcOwner, don't show the RPC icon when the session was started from BLE
* Fix rpc_test and f18 api
* Bump API version

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Astra
2023-04-19 11:30:26 +03:00
committed by GitHub
parent f68c3b2a65
commit 2c7eb53cac
9 changed files with 60 additions and 11 deletions

View File

@@ -2,6 +2,7 @@
#include "rpc_i.h"
#include "gui.pb.h"
#include <gui/gui_i.h>
#include <assets_icons.h>
#define TAG "RpcGui"
@@ -31,6 +32,8 @@ typedef struct {
uint32_t input_key_counter[InputKeyMAX];
uint32_t input_counter;
ViewPort* rpc_session_active_viewport;
} RpcGuiSystem;
static const PB_Gui_ScreenOrientation rpc_system_gui_screen_orientation_map[] = {
@@ -352,6 +355,12 @@ static void rpc_system_gui_virtual_display_frame_process(const PB_Main* request,
(void)session;
}
static void rpc_active_session_icon_draw_callback(Canvas* canvas, void* context) {
UNUSED(context);
furi_assert(canvas);
canvas_draw_icon(canvas, 0, 0, &I_Rpc_active_7x8);
}
void* rpc_system_gui_alloc(RpcSession* session) {
furi_assert(session);
@@ -359,6 +368,18 @@ void* rpc_system_gui_alloc(RpcSession* session) {
rpc_gui->gui = furi_record_open(RECORD_GUI);
rpc_gui->session = session;
// Active session icon
rpc_gui->rpc_session_active_viewport = view_port_alloc();
view_port_set_width(rpc_gui->rpc_session_active_viewport, icon_get_width(&I_Rpc_active_7x8));
view_port_draw_callback_set(
rpc_gui->rpc_session_active_viewport, rpc_active_session_icon_draw_callback, session);
if(rpc_session_get_owner(rpc_gui->session) != RpcOwnerBle) {
view_port_enabled_set(rpc_gui->rpc_session_active_viewport, true);
} else {
view_port_enabled_set(rpc_gui->rpc_session_active_viewport, false);
}
gui_add_view_port(rpc_gui->gui, rpc_gui->rpc_session_active_viewport, GuiLayerStatusBarLeft);
RpcHandler rpc_handler = {
.message_handler = NULL,
.decode_submessage = NULL,
@@ -399,6 +420,9 @@ void rpc_system_gui_free(void* context) {
rpc_gui->virtual_display_not_empty = false;
}
gui_remove_view_port(rpc_gui->gui, rpc_gui->rpc_session_active_viewport);
view_port_free(rpc_gui->rpc_session_active_viewport);
if(rpc_gui->is_streaming) {
rpc_gui->is_streaming = false;
// Remove GUI framebuffer callback
@@ -415,4 +439,4 @@ void rpc_system_gui_free(void* context) {
}
furi_record_close(RECORD_GUI);
free(rpc_gui);
}
}