FlippyPass/project/ui/scenes/send.c
2024-09-09 00:16:37 -04:00

107 lines
No EOL
2.5 KiB
C

// Header
#include "send.h"
// Libraries
#include "../../workers/sender.h"
// Functions
void FP_Scene_Callback_Send(DialogExResult result, void* context) {
// Setting context
FP_App* app = context;
// Sending it to the scene manager
scene_manager_handle_custom_event(app->scene_manager, result);
}
void FP_Scene_Enter_Send(void* context) {
// Setting context
FP_App* app = context;
// Reset view
dialog_ex_reset(app->dialog);
// Sender worker
FuriHalUsbInterface* usb_mode_prev = sender_init();
app->usb_prev_mode = usb_mode_prev;
// Adding dialog content
dialog_ex_set_header(
app->dialog,
"Send via BadUSB",
0,0,
AlignLeft,
AlignTop
);
dialog_ex_set_text(
app->dialog,
"This will type out either the Username or Password using BadUSB",
5,15,
AlignLeft,
AlignTop
);
dialog_ex_set_left_button_text(
app->dialog,
"User"
);
dialog_ex_set_center_button_text(
app->dialog,
"Enter"
);
dialog_ex_set_right_button_text(
app->dialog,
"Pass"
);
// Setting context and callback
dialog_ex_set_result_callback(app->dialog, FP_Scene_Callback_Send);
dialog_ex_set_context(app->dialog, app);
// Send view to Flipper
view_dispatcher_switch_to_view(app->view_dispatcher, FP_View_Dialog);
}
void FP_Scene_Exit_Send(void* context) {
// Setting context
FP_App* app = context;
// Exit
FuriHalUsbInterface* usb_mode_prev = app->usb_prev_mode;
sender_free(usb_mode_prev);
// Free reference
free(usb_mode_prev);
// Reset menu
submenu_reset(app->submenu);
}
bool FP_Scene_Event_Send(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;
UNUSED(app);
// What to do?
switch (event.event) {
case DialogExResultLeft: // Username
sender_execute(app->manager->current->user);
break;
case DialogExResultCenter:
sender_return();
break;
case DialogExResultRight: // Password
sender_execute(app->manager->current->phrase);
break;
default:
break;
}
} else {
consumed = false;
}
// Return result
return consumed;
}