diff --git a/project/backend/manager.c b/project/backend/manager.c index bed67b6..1221e0f 100644 --- a/project/backend/manager.c +++ b/project/backend/manager.c @@ -58,6 +58,11 @@ void manager_switchpage(Manager* manager, int dir) { // Loading names manager_loadnames(manager, manager->page); + + // Too far? + if (manager->names[0][0] == '\0') { + manager_switchpage(manager, -1); + } } void manager_loadnames(Manager* manager, int page){ // DEBUG @@ -120,6 +125,12 @@ void manager_loadnames(Manager* manager, int page){ } } + if (i_name < 4) { + for (int i = i_name; i < 4; i++) { + manager->names[i] = "\0"; + } + } + // Cleanup free(split); } diff --git a/project/backend/ui.c b/project/backend/ui.c index 1673a06..0ab617e 100644 --- a/project/backend/ui.c +++ b/project/backend/ui.c @@ -1,6 +1,50 @@ // Header #include "ui.h" +// Functions - Private +void int_to_str(int num, char* str) { + int i = 0; + int is_negative = 0; + + // Handle 0 explicitly + if (num == 0) { + str[i++] = '0'; + str[i] = '\0'; + return; + } + + // Handle negative numbers + if (num < 0) { + is_negative = 1; + num = -num; + } + + // Process each digit + while (num != 0) { + str[i++] = (num % 10) + '0'; + num = num / 10; + } + + // If the number was negative, append '-' + if (is_negative) { + str[i++] = '-'; + } + + // Append the null terminator + str[i] = '\0'; + + // Reverse the string + int start = 0; + int end = i - 1; + while (start < end) { + char temp = str[start]; + str[start] = str[end]; + str[end] = temp; + start++; + end--; + } +} + // Functions UIManager* ui_create() { // Creating the UI Manager @@ -11,8 +55,8 @@ UIManager* ui_create() { result->selection = 0; result->page = 0; - result->press_avail = true; - result->is_pressing = false; + result->p_avail = true; + result->p_ready = false; // Creating a GUI result->gui = furi_record_open(RECORD_GUI); @@ -36,10 +80,11 @@ void ui_input(InputEvent* event, void* ctx) { UIManager* manager = (UIManager*)ctx; // Getting input - if (event->type == InputTypePress - && manager->press_avail) { - manager->press_avail = false; - manager->is_pressing = true; + if ((event->type == InputTypePress + || event->type == InputTypeShort) + && manager->p_avail) { + manager->p_avail = false; + manager->p_ready = true; switch(event->key) { case InputKeyUp: @@ -63,17 +108,19 @@ void ui_input(InputEvent* event, void* ctx) { default: break; } - } else if (event->type == InputTypeRelease) { - manager->press_avail = true; + } + if (event->type == InputTypeRelease) { + manager->p_avail = true; + manager->input = None; } } void ui_quit(UIManager* manager) { - if (!(manager->is_pressing && manager->input == Back)) {return;} + if (!(manager->p_ready && manager->input == Back)) {return;} if(manager->page == 0) { manager->running = false; } else { - manager->is_pressing = false; + manager->p_ready = false; manager->page = 0; } } @@ -113,9 +160,9 @@ void ui_p_mainmenu(Canvas* canvas, UIManager* manager) { canvas_draw_str(canvas, 22, 55, "About"); // Cursor - if(manager->is_pressing) { + if(manager->p_ready) { // We used a press - manager->is_pressing = false; + manager->p_ready = false; // Reacting switch (manager->input){ @@ -168,18 +215,6 @@ 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"); */ - // Counting through password names for (int i = 0; i < 4; i++) { if (manager->manager->names[i] != NULL) { @@ -188,14 +223,20 @@ void ui_p_view(Canvas* canvas, UIManager* manager){ } } - if (manager->is_pressing) { - manager->is_pressing = false; + if (manager->p_ready) { + manager->p_ready = false; switch (manager->input) { case Up: break; case Down: break; + case Left: + manager_switchpage(manager->manager, -1); + break; + case Right: + manager_switchpage(manager->manager, 1); + break; case Ok: break; default: @@ -203,11 +244,15 @@ void ui_p_view(Canvas* canvas, UIManager* manager){ } } + char page[12]; + int_to_str(manager->manager->page, page + 1); + canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 106, 62, "1/1"); + canvas_draw_str(canvas, 106, 62, page); } void ui_delete(UIManager* manager) { + manager_delete(manager->manager); view_port_enabled_set(manager->canvas, false); gui_remove_view_port(manager->gui, manager->canvas); view_port_free(manager->canvas); diff --git a/project/backend/ui.h b/project/backend/ui.h index e057016..af493d1 100644 --- a/project/backend/ui.h +++ b/project/backend/ui.h @@ -21,7 +21,9 @@ typedef struct { Right, Ok, - Back + Back, + + None } input; Manager* manager; @@ -30,8 +32,8 @@ typedef struct { int page; bool running; - bool is_pressing; - bool press_avail; + bool p_avail; + bool p_ready; } UIManager; // Constructors diff --git a/project/flippypass.c b/project/flippypass.c index 214c995..a9b4b19 100644 --- a/project/flippypass.c +++ b/project/flippypass.c @@ -9,7 +9,7 @@ int32_t flippypass_app(void* p) { UNUSED(p); // Saving to a default file: - store_save("Data", "Apple|example@objnull.net|password|0|Microsoft|person@objnull.net|password|0|Google|user1@objnull.net|password|0|Facebook|user2@objnull.net|password|0|Twitter|user3@objnull.net|password|0|Instagram|user4@objnull.net|password|0|LinkedIn|user5@objnull.net|password|0|GitHub|user6@objnull.net|password|0|Reddit|user7@objnull.net|password|0|Spotify|user8@objnull.net|password|0|Netflix|user9@objnull.net|password|0|Dropbox|user10@objnull.net|password|0"); + store_save("Data", "Apple|example@objnull.net|password|0|Microsoft|person@objnull.net|password|0|Google|user1@objnull.net|password|0|Facebook|user2@objnull.net|password|0|Twitter|user3@objnull.net|password|0|Instagram|user4@objnull.net|password|0|LinkedIn|user5@objnull.net|password|0|GitHub|user6@objnull.net|password|0|Reddit|user7@objnull.net|password|0|Spotify|user8@objnull.net|password|0|Netflix|user9@objnull.net|password|0|Dropbox|user10@objnull.net|password|0|Proton|user54@objnull.net|password|0|Authentik|user19@objnull.net|password|0"); // Creating the UI struct UIManager* ui = ui_create();