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
|
// 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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue