@@ -33,10 +33,6 @@ typedef struct {
33
33
size_t token_secret_length ;
34
34
bool saved ;
35
35
Control selected_control ;
36
- InputTextSceneContext * token_name_input_context ;
37
- InputTextSceneContext * token_secret_input_context ;
38
- InputTextSceneState * input_state ;
39
- bool text_input_mode ;
40
36
int16_t screen_y_offset ;
41
37
TokenHashAlgo algo ;
42
38
uint8_t digits_count_index ;
@@ -51,24 +47,6 @@ struct TotpAddContext {
51
47
52
48
enum TotpIteratorUpdateTokenResultsEx { TotpIteratorUpdateTokenResultInvalidSecret = 1 };
53
49
54
- static void on_token_name_user_comitted (InputTextSceneCallbackResult * result ) {
55
- SceneState * scene_state = result -> callback_data ;
56
- free (scene_state -> token_name );
57
- scene_state -> token_name = result -> user_input ;
58
- scene_state -> token_name_length = result -> user_input_length ;
59
- scene_state -> text_input_mode = false;
60
- free (result );
61
- }
62
-
63
- static void on_token_secret_user_comitted (InputTextSceneCallbackResult * result ) {
64
- SceneState * scene_state = result -> callback_data ;
65
- free (scene_state -> token_secret );
66
- scene_state -> token_secret = result -> user_input ;
67
- scene_state -> token_secret_length = result -> user_input_length ;
68
- scene_state -> text_input_mode = false;
69
- free (result );
70
- }
71
-
72
50
static void update_duration_text (SceneState * scene_state ) {
73
51
furi_string_printf (scene_state -> duration_text , "%d sec." , scene_state -> duration );
74
52
}
@@ -95,6 +73,26 @@ static TotpIteratorUpdateTokenResult add_token_handler(TokenInfo* tokenInfo, con
95
73
return TotpIteratorUpdateTokenResultSuccess ;
96
74
}
97
75
76
+ static void ask_user_input (
77
+ const PluginState * plugin_state ,
78
+ const char * header ,
79
+ char * * user_input ,
80
+ size_t * user_input_length ) {
81
+ InputTextResult input_result ;
82
+ if (* user_input != NULL ) {
83
+ strlcpy (input_result .user_input , * user_input , INPUT_BUFFER_SIZE );
84
+ }
85
+
86
+ totp_input_text (plugin_state -> gui , header , & input_result );
87
+ if (input_result .success ) {
88
+ if (* user_input != NULL ) {
89
+ free (* user_input );
90
+ }
91
+ * user_input = strdup (input_result .user_input );
92
+ * user_input_length = input_result .user_input_length ;
93
+ }
94
+ }
95
+
98
96
void totp_scene_add_new_token_activate (PluginState * plugin_state ) {
99
97
SceneState * scene_state = malloc (sizeof (SceneState ));
100
98
furi_check (scene_state != NULL );
@@ -104,34 +102,17 @@ void totp_scene_add_new_token_activate(PluginState* plugin_state) {
104
102
scene_state -> token_secret = "Secret" ;
105
103
scene_state -> token_secret_length = strlen (scene_state -> token_secret );
106
104
107
- scene_state -> token_name_input_context = malloc (sizeof (InputTextSceneContext ));
108
- furi_check (scene_state -> token_name_input_context != NULL );
109
- scene_state -> token_name_input_context -> header_text = "Enter token name" ;
110
- scene_state -> token_name_input_context -> callback_data = scene_state ;
111
- scene_state -> token_name_input_context -> callback = on_token_name_user_comitted ;
112
-
113
- scene_state -> token_secret_input_context = malloc (sizeof (InputTextSceneContext ));
114
- furi_check (scene_state -> token_secret_input_context != NULL );
115
- scene_state -> token_secret_input_context -> header_text = "Enter token secret" ;
116
- scene_state -> token_secret_input_context -> callback_data = scene_state ;
117
- scene_state -> token_secret_input_context -> callback = on_token_secret_user_comitted ;
118
-
119
105
scene_state -> screen_y_offset = 0 ;
120
106
121
107
scene_state -> digits_count_index = 1 ;
122
108
123
- scene_state -> input_state = NULL ;
124
109
scene_state -> duration = TOTP_TOKEN_DURATION_DEFAULT ;
125
110
scene_state -> duration_text = furi_string_alloc ();
126
111
update_duration_text (scene_state );
127
112
}
128
113
129
- void totp_scene_add_new_token_render (Canvas * const canvas , PluginState * plugin_state ) {
130
- SceneState * scene_state = plugin_state -> current_scene_state ;
131
- if (scene_state -> text_input_mode ) {
132
- totp_input_text_render (canvas , scene_state -> input_state );
133
- return ;
134
- }
114
+ void totp_scene_add_new_token_render (Canvas * const canvas , const PluginState * plugin_state ) {
115
+ const SceneState * scene_state = plugin_state -> current_scene_state ;
135
116
136
117
ui_control_text_box_render (
137
118
canvas ,
@@ -195,31 +176,13 @@ void update_screen_y_offset(SceneState* scene_state) {
195
176
}
196
177
}
197
178
198
- bool totp_scene_add_new_token_handle_event (PluginEvent * const event , PluginState * plugin_state ) {
179
+ bool totp_scene_add_new_token_handle_event (const PluginEvent * const event , PluginState * plugin_state ) {
199
180
if (event -> type != EventTypeKey ) {
200
181
return true;
201
182
}
202
183
203
184
SceneState * scene_state = plugin_state -> current_scene_state ;
204
185
205
- if (event -> input .type == InputTypeLong && event -> input .key == InputKeyBack ) {
206
- if (scene_state -> text_input_mode ) {
207
- scene_state -> text_input_mode = false;
208
- } else {
209
- return false;
210
- }
211
- }
212
-
213
- if (scene_state -> text_input_mode ) {
214
- if (event -> input .type == InputTypeShort && event -> input .key == InputKeyBack ) {
215
- PluginEvent long_back_cb_evt = {
216
- .type = event -> type , .input .key = InputKeyBack , .input .type = InputTypeLong };
217
- return totp_input_text_handle_event (& long_back_cb_evt , scene_state -> input_state );
218
- }
219
-
220
- return totp_input_text_handle_event (event , scene_state -> input_state );
221
- }
222
-
223
186
if (event -> input .type == InputTypePress ) {
224
187
switch (event -> input .key ) {
225
188
case InputKeyUp :
@@ -277,22 +240,18 @@ bool totp_scene_add_new_token_handle_event(PluginEvent* const event, PluginState
277
240
} else if (event -> input .type == InputTypeRelease && event -> input .key == InputKeyOk ) {
278
241
switch (scene_state -> selected_control ) {
279
242
case TokenNameTextBox :
280
- if (scene_state -> input_state != NULL ) {
281
- totp_input_text_free (scene_state -> input_state );
282
- }
283
- scene_state -> input_state =
284
- totp_input_text_activate (scene_state -> token_name_input_context );
285
-
286
- scene_state -> text_input_mode = true;
243
+ ask_user_input (
244
+ plugin_state ,
245
+ "Token name" ,
246
+ & scene_state -> token_name ,
247
+ & scene_state -> token_name_length );
287
248
break ;
288
249
case TokenSecretTextBox :
289
- if (scene_state -> input_state != NULL ) {
290
- totp_input_text_free (scene_state -> input_state );
291
- }
292
- scene_state -> input_state =
293
- totp_input_text_activate (scene_state -> token_secret_input_context );
294
-
295
- scene_state -> text_input_mode = true;
250
+ ask_user_input (
251
+ plugin_state ,
252
+ "Token secret" ,
253
+ & scene_state -> token_secret ,
254
+ & scene_state -> token_secret_length );
296
255
break ;
297
256
case TokenAlgoSelect :
298
257
break ;
@@ -344,18 +303,8 @@ void totp_scene_add_new_token_deactivate(PluginState* plugin_state) {
344
303
free (scene_state -> token_name );
345
304
free (scene_state -> token_secret );
346
305
347
- free (scene_state -> token_name_input_context -> header_text );
348
- free (scene_state -> token_name_input_context );
349
-
350
- free (scene_state -> token_secret_input_context -> header_text );
351
- free (scene_state -> token_secret_input_context );
352
-
353
306
furi_string_free (scene_state -> duration_text );
354
307
355
- if (scene_state -> input_state != NULL ) {
356
- totp_input_text_free (scene_state -> input_state );
357
- }
358
-
359
308
free (plugin_state -> current_scene_state );
360
309
plugin_state -> current_scene_state = NULL ;
361
310
}
0 commit comments