FlippyPass/project/ui/scenes/create.c

155 lines
No EOL
4 KiB
C

// Header
#include "create.h"
// Constants
#define KEYBOARD_STR_LEN 64
// 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
free(app->manager->new->name);
app->manager->new->name = malloc(sizeof(char) * KEYBOARD_STR_LEN);
strcpy(app->manager->new->name, app->keyboard);
break;
case 1: // Username
free(app->manager->new->user);
app->manager->new->user = malloc(sizeof(char) * KEYBOARD_STR_LEN);
strcpy(app->manager->new->user, app->keyboard);
break;
case 2: // Password
free(app->manager->new->phrase);
app->manager->new->phrase = malloc(sizeof(char) * KEYBOARD_STR_LEN);
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;
// Setting the title
app->keyboard = malloc(sizeof(char*));
switch(app->selection){
case 0:
app->keyboard = "Name";
break;
case 1:
app->keyboard = "Username";
break;
case 2:
app->keyboard = "Password";
break;
}
// 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;
}