Properly Functioning Paging System for Passwords

This commit is contained in:
Maddox Werts 2024-09-01 16:14:14 -04:00
parent 2181319f75
commit ab35b7ec24
4 changed files with 89 additions and 31 deletions

View file

@ -58,6 +58,11 @@ void manager_switchpage(Manager* manager, int dir) {
// Loading names // Loading names
manager_loadnames(manager, manager->page); manager_loadnames(manager, manager->page);
// Too far?
if (manager->names[0][0] == '\0') {
manager_switchpage(manager, -1);
}
} }
void manager_loadnames(Manager* manager, int page){ void manager_loadnames(Manager* manager, int page){
// DEBUG // 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 // Cleanup
free(split); free(split);
} }

View file

@ -1,6 +1,50 @@
// Header // Header
#include "ui.h" #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 // Functions
UIManager* ui_create() { UIManager* ui_create() {
// Creating the UI Manager // Creating the UI Manager
@ -11,8 +55,8 @@ UIManager* ui_create() {
result->selection = 0; result->selection = 0;
result->page = 0; result->page = 0;
result->press_avail = true; result->p_avail = true;
result->is_pressing = false; result->p_ready = false;
// Creating a GUI // Creating a GUI
result->gui = furi_record_open(RECORD_GUI); result->gui = furi_record_open(RECORD_GUI);
@ -36,10 +80,11 @@ void ui_input(InputEvent* event, void* ctx) {
UIManager* manager = (UIManager*)ctx; UIManager* manager = (UIManager*)ctx;
// Getting input // Getting input
if (event->type == InputTypePress if ((event->type == InputTypePress
&& manager->press_avail) { || event->type == InputTypeShort)
manager->press_avail = false; && manager->p_avail) {
manager->is_pressing = true; manager->p_avail = false;
manager->p_ready = true;
switch(event->key) { switch(event->key) {
case InputKeyUp: case InputKeyUp:
@ -63,17 +108,19 @@ void ui_input(InputEvent* event, void* ctx) {
default: default:
break; 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) { 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) { if(manager->page == 0) {
manager->running = false; manager->running = false;
} else { } else {
manager->is_pressing = false; manager->p_ready = false;
manager->page = 0; manager->page = 0;
} }
} }
@ -113,9 +160,9 @@ void ui_p_mainmenu(Canvas* canvas, UIManager* manager) {
canvas_draw_str(canvas, 22, 55, "About"); canvas_draw_str(canvas, 22, 55, "About");
// Cursor // Cursor
if(manager->is_pressing) { if(manager->p_ready) {
// We used a press // We used a press
manager->is_pressing = false; manager->p_ready = false;
// Reacting // Reacting
switch (manager->input){ switch (manager->input){
@ -168,18 +215,6 @@ void ui_p_view(Canvas* canvas, UIManager* manager){
canvas_set_font(canvas, FontPrimary); canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 2, 11, "FlippyPass"); 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 // Counting through password names
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (manager->manager->names[i] != NULL) { if (manager->manager->names[i] != NULL) {
@ -188,14 +223,20 @@ void ui_p_view(Canvas* canvas, UIManager* manager){
} }
} }
if (manager->is_pressing) { if (manager->p_ready) {
manager->is_pressing = false; manager->p_ready = false;
switch (manager->input) { switch (manager->input) {
case Up: case Up:
break; break;
case Down: case Down:
break; break;
case Left:
manager_switchpage(manager->manager, -1);
break;
case Right:
manager_switchpage(manager->manager, 1);
break;
case Ok: case Ok:
break; break;
default: 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_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 106, 62, "1/1"); canvas_draw_str(canvas, 106, 62, page);
} }
void ui_delete(UIManager* manager) { void ui_delete(UIManager* manager) {
manager_delete(manager->manager);
view_port_enabled_set(manager->canvas, false); view_port_enabled_set(manager->canvas, false);
gui_remove_view_port(manager->gui, manager->canvas); gui_remove_view_port(manager->gui, manager->canvas);
view_port_free(manager->canvas); view_port_free(manager->canvas);

View file

@ -21,7 +21,9 @@ typedef struct {
Right, Right,
Ok, Ok,
Back Back,
None
} input; } input;
Manager* manager; Manager* manager;
@ -30,8 +32,8 @@ typedef struct {
int page; int page;
bool running; bool running;
bool is_pressing; bool p_avail;
bool press_avail; bool p_ready;
} UIManager; } UIManager;
// Constructors // Constructors

View file

@ -9,7 +9,7 @@ int32_t flippypass_app(void* p) {
UNUSED(p); UNUSED(p);
// Saving to a default file: // 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 // Creating the UI struct
UIManager* ui = ui_create(); UIManager* ui = ui_create();