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
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);
}

View file

@ -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);

View file

@ -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

View file

@ -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();