// 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->temp) { // Boolean bool is_field = true; // Checking if it's any of the following: if (!strcmp(app->temp, "Username")) {is_field = false;} if (!strcmp(app->temp, "Password")) {is_field = false;} // We're good! if(is_field) { // Did we already start a password? if (!app->manager->new) { app->manager->new = malloc(sizeof(Password)); } // Checking what we selected switch (app->selection) { case 0: // Name // Does name already exist? if (app->manager->new->name) { free(app->manager->new->name); } // Copying it app->manager->new->name = malloc(sizeof(char*)); strcpy(app->manager->new->name, app->temp); break; case 1: // Username // Does user already exist? if (app->manager->new->user) { free(app->manager->new->user); } // Copying it app->manager->new->user = malloc(sizeof(char*)); strcpy(app->manager->new->user, app->temp); break; case 2: // Password // Does phrase already exist? if (app->manager->new->phrase) { free(app->manager->new->phrase); } // Copying it app->manager->new->phrase = malloc(sizeof(char*)); strcpy(app->manager->new->phrase, app->temp); break; } } // Freeing temp free(app->temp); } // 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; }