FlippyPass/project/ui/scenes/create.c

154 lines
No EOL
4 KiB
C

// Header
#include "create.h"
// Structures
typedef enum {
FP_Scene_Create_Event_Name,
FP_Scene_Create_Event_Username,
FP_Scene_Create_Event_Password,
FP_Scene_Create_Event_Done
} FP_Scene_Create_Event;
// Functions
void FP_Scene_Callback_Create(void* context, uint32_t index) {
// Setting context
FP_App* app = context;
// Sending it to the scene manager
scene_manager_handle_custom_event(app->scene_manager, index);
}
void FP_Scene_Enter_Create(void* context) {
// Setting context
FP_App* app = context;
// Reset page
submenu_reset(app->submenu);
// Checking if we typed something before
if (app->keyboard) {
// Did we already start a password?
if (!app->manager->new) {
app->manager->new = pass_init("", "", "", 0);
}
// Checking what we selected
switch (app->selection) {
case 0: // Name
// Does name already exist?
if (app->manager->new->name) {
free(app->manager->new->name);
app->manager->new->name = malloc(sizeof(char*));
}
// Copying it
strcpy(app->manager->new->name, app->keyboard);
break;
case 1: // Username
// Does user already exist?
if (app->manager->new->user) {
free(app->manager->new->user);
app->manager->new->user = malloc(sizeof(char*));
}
// Copying it
strcpy(app->manager->new->user, app->keyboard);
break;
case 2: // Password
// Does phrase already exist?
if (app->manager->new->phrase) {
free(app->manager->new->phrase);
app->manager->new->phrase = malloc(sizeof(char*));
}
// Copying it
strcpy(app->manager->new->phrase, app->keyboard);
break;
}
// Freeing temp
free(app->keyboard);
}
// Options
submenu_add_item(
app->submenu,
"Set Name",
FP_Scene_Create_Event_Name,
FP_Scene_Callback_Create,
app
);
submenu_add_item(
app->submenu,
"Set Username",
FP_Scene_Create_Event_Username,
FP_Scene_Callback_Create,
app
);
submenu_add_item(
app->submenu,
"Set Password",
FP_Scene_Create_Event_Password,
FP_Scene_Callback_Create,
app
);
submenu_add_item(
app->submenu,
"Finish",
FP_Scene_Create_Event_Done,
FP_Scene_Callback_Create,
app
);
// Send view to Flipper
view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_Submenu);
}
void FP_Scene_Exit_Create(void* context) {
// Setting context
FP_App* app = context;
// Reset menu
submenu_reset(app->submenu);
}
bool FP_Scene_Event_Create(void* context, SceneManagerEvent event) {
// Setting context
FP_App* app = context;
bool consumed = false;
// Switching based on event
if (event.type == SceneManagerEventTypeCustom) {
// We consumed it
consumed = true;
// What to do?
switch (event.event) {
case FP_Scene_Create_Event_Name:
case FP_Scene_Create_Event_Username:
case FP_Scene_Create_Event_Password:
// Set selection
app->selection = event.event;
// Switch to keyboard scene
scene_manager_next_scene(app->scene_manager, FP_Scene_Type);
break;
case FP_Scene_Create_Event_Done:
// Save the password
manager_savepass(app->manager->new);
// Reload manager
manager_free(app->manager);
app->manager = manager_init();
// Switching scenes
scene_manager_previous_scene(app->scene_manager);
break;
default:
break;
}
} else {
consumed = false;
}
// Return result
return consumed;
}