#include #include #include #include #include #include #include #include #include #include "upython.h" #include "upython_icons.h" Action action = ActionNone; bool mp_flipper_select_python_file(FuriString* file_path) { DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); DialogsFileBrowserOptions browser_options; dialog_file_browser_set_basic_options(&browser_options, "py", NULL); browser_options.hide_ext = false; browser_options.base_path = STORAGE_APP_DATA_PATH_PREFIX; bool result = dialog_file_browser_show(dialogs, file_path, file_path, &browser_options); furi_record_close(RECORD_DIALOGS); return result; } static void on_input(const void* event, void* ctx) { UNUSED(ctx); InputKey key = ((InputEvent*)event)->key; InputType type = ((InputEvent*)event)->type; if(type != InputTypeRelease) { return; } switch(key) { case InputKeyOk: action = ActionOpen; break; case InputKeyBack: action = ActionExit; break; default: action = ActionNone; break; } } Action mp_flipper_splash_screen() { if(action != ActionNone) { return action; } Gui* gui = furi_record_open(RECORD_GUI); FuriPubSub* input_event_queue = furi_record_open(RECORD_INPUT_EVENTS); FuriPubSubSubscription* input_event = furi_pubsub_subscribe(input_event_queue, on_input, NULL); ViewPort* view_port = view_port_alloc(); gui_add_view_port(gui, view_port, GuiLayerFullscreen); Canvas* canvas = gui_direct_draw_acquire(gui); canvas_draw_icon(canvas, 0, 0, &I_splash); canvas_draw_icon(canvas, 82, 17, &I_qrcode); canvas_set_color(canvas, ColorBlack); canvas_set_font(canvas, FontSecondary); canvas_draw_str_aligned(canvas, 66, 3, AlignLeft, AlignTop, "Micro"); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 90, 2, AlignLeft, AlignTop, "Python"); canvas_set_font(canvas, FontSecondary); canvas_draw_icon(canvas, 65, 53, &I_Pin_back_arrow_10x8); canvas_draw_str_aligned(canvas, 78, 54, AlignLeft, AlignTop, "Exit"); canvas_draw_icon(canvas, 98, 54, &I_ButtonCenter_7x7); canvas_draw_str_aligned(canvas, 107, 54, AlignLeft, AlignTop, "Open"); canvas_commit(canvas); while(action == ActionNone) { furi_delay_ms(1); } furi_pubsub_unsubscribe(input_event_queue, input_event); gui_direct_draw_release(gui); gui_remove_view_port(gui, view_port); view_port_free(view_port); furi_record_close(RECORD_INPUT_EVENTS); furi_record_close(RECORD_GUI); return action; }