diff --git a/project/backend/ui.c b/project/backend/ui.c index 942d12f..51ededd 100644 --- a/project/backend/ui.c +++ b/project/backend/ui.c @@ -10,6 +10,7 @@ typedef enum { FP_Scene_MainMenu, FP_Scene_Overview, FP_Scene_View, + FP_Scene_Cred, FP_Scene_Send, FP_Scene_Create, FP_Scene_Archive, @@ -18,14 +19,7 @@ typedef enum { } FP_Scene; /* Types of Views */ -typedef enum { FP_View_VariableItemList, FP_View_Submenu, FP_View_Dialog, FP_View_Popup } FP_View; - -/* All events */ -typedef enum { - FP_Event_SwitchTo_About, - FP_Event_SwitchTo_Overview, - FP_Event_SwitchTo_Create -} FP_Event; +typedef enum { FP_View_VariableItemList, FP_View_Submenu, FP_View_TextBox, FP_View_Dialog, FP_View_Popup } FP_View; /* Scene events */ typedef enum { @@ -34,6 +28,11 @@ typedef enum { FP_Scene_MainMenu_Event_Archive, FP_Scene_MainMenu_Event_About } FP_Scene_MainMenu_Event; +typedef enum { + FP_Scene_View_Event_Username, + FP_Scene_View_Event_Password, + FP_Scene_View_Event_BadUSB +} FP_Scene_View_Event; /* Extras */ typedef struct { @@ -55,21 +54,8 @@ void FP_Scene_Callback_MainMenu(void* context, uint32_t index) { // Setting context FP_App* app = context; - // Switching on Index - switch (index) { - case FP_Scene_MainMenu_Event_About: - scene_manager_handle_custom_event(app->scene_manager, FP_Event_SwitchTo_About); - break; - case FP_Scene_MainMenu_Event_View: - scene_manager_handle_custom_event(app->scene_manager, FP_Event_SwitchTo_Overview); - break; - case FP_Scene_MainMenu_Event_Create: - scene_manager_handle_custom_event(app->scene_manager, FP_Event_SwitchTo_Create); - break; - default: - FURI_LOG_I(TAG, "S_MAINMENU: Unimplemented!"); - break; - } + // Sending it to the scene manager + scene_manager_handle_custom_event(app->scene_manager, index); } void FP_Scene_Callback_Overview(void* context, uint32_t index) { // Setting context @@ -78,12 +64,19 @@ void FP_Scene_Callback_Overview(void* context, uint32_t index) { // Sending it to the scene manager scene_manager_handle_custom_event(app->scene_manager, index); } -void FP_Scene_Callback_View(DialogExResult result, void* context) { +void FP_Scene_Callback_View(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, result); + scene_manager_handle_custom_event(app->scene_manager, index); +} +void FP_Scene_Callback_Cred(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_Callback_Send(DialogExResult result, void* context) { // Setting context @@ -173,43 +166,56 @@ void FP_Scene_Enter_View(void* context) { FP_App* app = context; // Freeing Dialog - dialog_ex_reset(app->dialog); - - // Username - FuriString* text = furi_string_alloc(); - furi_string_printf(text, "U: %s", app->manager->current->user); + submenu_reset(app->submenu); // Adding some content - dialog_ex_set_header( - app->dialog, - app->manager->current->name, - 0, 0, - AlignLeft, - AlignTop + submenu_add_item( + app->submenu, + "View Username", + FP_Scene_View_Event_Username, + FP_Scene_Callback_View, + app ); - dialog_ex_set_text( - app->dialog, - furi_string_get_cstr(text), - 5, - 15, - AlignLeft, - AlignTop + submenu_add_item( + app->submenu, + "View Password", + FP_Scene_View_Event_Password, + FP_Scene_Callback_View, + app ); - dialog_ex_set_left_button_text( - app->dialog, - "Show" + submenu_add_item( + app->submenu, + "BadUSB", + FP_Scene_View_Event_BadUSB, + FP_Scene_Callback_View, + app ); - dialog_ex_set_right_button_text( - app->dialog, - "BadUSB" - ); - - // Left & Right - dialog_ex_set_result_callback(app->dialog, FP_Scene_Callback_View); - dialog_ex_set_context(app->dialog, app); // Sending view to Flipper - view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_Dialog); + view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_Submenu); +} +void FP_Scene_Enter_Cred(void* context) { + // Set context + FP_App* app = context; + + // Reset view + text_box_reset(app->textbox); + + // Setting text + if (!strcmp(app->temp, "Username")) { + text_box_set_text( + app->textbox, + app->manager->current->user + ); + } else { + text_box_set_text( + app->textbox, + app->manager->current->phrase + ); + } + + // Send view to Flipper + view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_TextBox); } void FP_Scene_Enter_Send(void* context) { // Setting context @@ -261,21 +267,21 @@ void FP_Scene_Enter_Create(void* context) { app->varitemlist, "Name", 1, - FP_Scene_Callback_Create_Change, + NULL, app ); variable_item_list_add( app->varitemlist, "Username", 1, - FP_Scene_Callback_Create_Change, + NULL, app ); variable_item_list_add( app->varitemlist, "Password", 1, - FP_Scene_Callback_Create_Change, + NULL, app ); variable_item_list_add( @@ -318,6 +324,16 @@ void FP_Scene_Exit_View(void* context) { // Reset menu dialog_ex_reset(app->dialog); } +void FP_Scene_Exit_Cred(void* context) { + // Setting context + FP_App* app = context; + + // Free the temp string + free(app->temp); + + // Reset menu + dialog_ex_reset(app->dialog); +} void FP_Scene_Exit_Send(void* context) { // Setting context FP_App* app = context; @@ -345,13 +361,13 @@ bool FP_Scene_Event_MainMenu(void* context, SceneManagerEvent event) { // What to do? switch (event.event) { - case FP_Event_SwitchTo_About: + case FP_Scene_MainMenu_Event_About: scene_manager_next_scene(app->scene_manager, FP_Scene_About); break; - case FP_Event_SwitchTo_Overview: + case FP_Scene_MainMenu_Event_View: scene_manager_next_scene(app->scene_manager, FP_Scene_Overview); break; - case FP_Event_SwitchTo_Create: + case FP_Scene_MainMenu_Event_Create: scene_manager_next_scene(app->scene_manager, FP_Scene_Create); break; default: @@ -404,33 +420,49 @@ bool FP_Scene_Event_View(void* context, SceneManagerEvent event) { // What did we press? switch (event.event) { - case DialogExResultLeft: - // Getting password and storing it in memory - FuriString* text = furi_string_alloc(); - furi_string_printf(text, "U: %s\nP: %s", - app->manager->current->user, - app->manager->current->phrase - ); - - dialog_ex_set_text( - app->dialog, - furi_string_get_cstr(text), - 5,15, - AlignLeft, - AlignTop - ); - dialog_ex_set_left_button_text(app->dialog, NULL); + case FP_Scene_View_Event_Username: + app->temp = malloc(sizeof(char*)); + app->temp = "Username"; + scene_manager_next_scene(app->scene_manager, FP_Scene_Cred); break; - case DialogExResultRight: - // Changing scenes + case FP_Scene_View_Event_Password: + app->temp = malloc(sizeof(char*)); + app->temp = "Password"; + scene_manager_next_scene(app->scene_manager, FP_Scene_Cred); + break; + case FP_Scene_View_Event_BadUSB: scene_manager_next_scene(app->scene_manager, FP_Scene_Send); break; default: break; } + } else { + consumed = false; + } + + // Return result + return consumed; +} +bool FP_Scene_Event_Cred(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; + + // Debug log about what we pressed + FURI_LOG_D(TAG, "Pressed %li", event.event); - // Switching based on event UNUSED(app); + + // What to do? + switch (event.event) { + default: + break; + } } else { consumed = false; } @@ -495,6 +527,7 @@ void (*const FP_Scene_Enter_Handlers[])(void*) = { FP_Scene_Enter_MainMenu, FP_Scene_Enter_Overview, FP_Scene_Enter_View, + FP_Scene_Enter_Cred, FP_Scene_Enter_Send, FP_Scene_Enter_Create }; @@ -502,6 +535,7 @@ bool (*const FP_Scene_Event_Handlers[])(void*, SceneManagerEvent) = { FP_Scene_Event_MainMenu, FP_Scene_Event_Overview, FP_Scene_Event_View, + FP_Scene_Event_Cred, FP_Scene_Event_Send, FP_Scene_Event_Create }; @@ -509,6 +543,7 @@ void (*const FP_Scene_Exit_Handlers[])(void*) = { FP_Scene_Exit_MainMenu, FP_Scene_Exit_Overview, FP_Scene_Exit_View, + FP_Scene_Exit_Cred, FP_Scene_Exit_Send, FP_Scene_Exit_Create }; @@ -561,6 +596,7 @@ FP_App* fp_app_init() { result->varitemlist = variable_item_list_alloc(); result->dialog = dialog_ex_alloc(); result->submenu = submenu_alloc(); + result->textbox = text_box_alloc(); result->popup = popup_alloc(); // Event handling @@ -570,8 +606,9 @@ FP_App* fp_app_init() { // Adding views to dispatcher view_dispatcher_add_view(result->view_dispatcher, FP_View_VariableItemList, variable_item_list_get_view(result->varitemlist)); - view_dispatcher_add_view(result->view_dispatcher, FP_View_Submenu, submenu_get_view(result->submenu)); + view_dispatcher_add_view(result->view_dispatcher, FP_View_TextBox, text_box_get_view(result->textbox)); view_dispatcher_add_view(result->view_dispatcher, FP_View_Dialog, dialog_ex_get_view(result->dialog)); + view_dispatcher_add_view(result->view_dispatcher, FP_View_Submenu, submenu_get_view(result->submenu)); view_dispatcher_add_view(result->view_dispatcher, FP_View_Popup, popup_get_view(result->popup)); // Return app @@ -601,11 +638,13 @@ void fp_app_free(FP_App* app) { scene_manager_free(app->scene_manager); view_dispatcher_remove_view(app->view_dispatcher, FP_View_VariableItemList); view_dispatcher_remove_view(app->view_dispatcher, FP_View_Submenu); + view_dispatcher_remove_view(app->view_dispatcher, FP_View_TextBox); view_dispatcher_remove_view(app->view_dispatcher, FP_View_Dialog); view_dispatcher_remove_view(app->view_dispatcher, FP_View_Popup); view_dispatcher_free(app->view_dispatcher); variable_item_list_free(app->varitemlist); dialog_ex_free(app->dialog); + text_box_free(app->textbox); submenu_free(app->submenu); popup_free(app->popup); free(app); diff --git a/project/backend/ui.h b/project/backend/ui.h index c07443b..d0454a4 100644 --- a/project/backend/ui.h +++ b/project/backend/ui.h @@ -14,6 +14,7 @@ #include #include #include +#include #include "app.h" #include "manager.h" @@ -25,9 +26,11 @@ typedef struct { VariableItemList* varitemlist; DialogEx* dialog; Submenu* submenu; + TextBox* textbox; Popup* popup; Manager* manager; + char* temp; } FP_App; // Constructors