155 lines
No EOL
4 KiB
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;
|
|
} |