Properly Functioning Paging System for Passwords
This commit is contained in:
parent
2181319f75
commit
ab35b7ec24
4 changed files with 89 additions and 31 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue