// Header #include "ui.h" // Functions UIManager* ui_create() { // Creating the UI Manager UIManager* result = malloc(sizeof(UIManager)); // Creating Storage result->store = store_load(); // Wait, do we need to register? if (!result->store->valid) { FURI_LOG_E(TAG, "You are not registered!"); store_save("Hello, World"); FURI_LOG_I(TAG, "Created new user."); } // Defining basic variables result->running = true; result->selection = 0; result->page = 0; result->press_avail = true; result->press_used = false; // Creating a GUI result->gui = furi_record_open(RECORD_GUI); // Creating a canvas result->canvas = view_port_alloc(); view_port_draw_callback_set(result->canvas, ui_draw, result); view_port_input_callback_set(result->canvas, ui_input, result); gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen); // Returning the UI Manager return result; } void ui_input(InputEvent* event, void* ctx) { // Turning the context back into the UI Manager UIManager* manager = (UIManager*)ctx; // Getting input if (event->type == InputTypePress && manager->press_avail) { manager->press_avail = false; manager->press_used = true; switch(event->key) { case InputKeyUp: manager->input = Up; break; case InputKeyDown: manager->input = Down; break; case InputKeyLeft: manager->input = Left; break; case InputKeyRight: manager->input = Right; break; case InputKeyOk: manager->input = Ok; break; case InputKeyBack: manager->input = Back; break; default: break; } } else if (event->type == InputTypeRelease) { manager->press_avail = true; } } void ui_quit(UIManager* manager) { if (!(manager->press_used && manager->input == Back)) {return;} if(manager->page == 0) { manager->running = false; } else { manager->press_used = false; manager->page = 0; } } void ui_draw(Canvas* canvas, void* ctx) { // Context into Result UIManager* manager = (UIManager*)ctx; // Switching page switch(manager->page){ case 0: // Main Menu ui_p_mainmenu(canvas, manager); break; case 1: // About Me ui_p_about(canvas); break; case 2: // Create Password ui_p_view(canvas, manager); break; } } void ui_p_mainmenu(Canvas* canvas, UIManager* manager) { // Menu Options canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 2, 11, "FlippyPass"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 25, "View Passwords"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 45, "View Archive"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 35, "Create Password"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 55, "About"); // Cursor if(manager->press_used) { // We used a press manager->press_used = false; // Reacting switch (manager->input){ case Up: manager->selection--; break; case Down: manager->selection++; break; case Ok: switch(manager->selection) { case 0: // View Passwords manager->page = 2; break; case 3: // About Me manager->page = 1; break; default: break; } break; default: break; } // Min & Max if (manager->selection > 3) { manager->selection = 0; } else if (manager->selection < 0) { manager->selection = 3; } } // Placing the spot at the cursor canvas_draw_box(canvas, 15, 20 + (manager->selection * 10), 2, 2); } void ui_p_about(Canvas* canvas) { canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 2, 11, "FlippyPass"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 3, 23, "A really easy to use Password"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 3, 32, "Manager for the Flipper-Zero."); } void ui_p_view(Canvas* canvas, UIManager* manager){ canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 2, 11, "FlippyPass"); /* canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 15, 23, "Apple"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 15, 33, "Microsoft"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 15, 43, "Google"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 15, 53, "Facebook"); */ canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 15, 23, manager->store->data); if (manager->press_used) { manager->press_used = false; switch (manager->input) { case Up: break; case Down: break; case Ok: break; default: break; } } canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 106, 62, "1/1"); } void ui_delete(UIManager* manager) { store_unload(manager->store); view_port_enabled_set(manager->canvas, false); gui_remove_view_port(manager->gui, manager->canvas); view_port_free(manager->canvas); furi_record_close(RECORD_GUI); free(manager); }