[FL-1498] Keyboard save focus (#730)
* text_input: set focus on Save button if text is set * text_input: add clear API, format documentation * all: rework text input clean with new API
This commit is contained in:
		| @@ -75,6 +75,5 @@ bool archive_scene_rename_on_event(void* context, SceneManagerEvent event) { | ||||
| void archive_scene_rename_on_exit(void* context) { | ||||
|     ArchiveApp* archive = (ArchiveApp*)context; | ||||
|     // Clear view | ||||
|     text_input_set_header_text(archive->text_input, NULL); | ||||
|     text_input_set_result_callback(archive->text_input, NULL, NULL, NULL, 0, false); | ||||
|     text_input_clean(archive->text_input); | ||||
| } | ||||
|   | ||||
| @@ -369,15 +369,7 @@ TextInput* text_input_alloc() { | ||||
|     view_set_draw_callback(text_input->view, text_input_view_draw_callback); | ||||
|     view_set_input_callback(text_input->view, text_input_view_input_callback); | ||||
|  | ||||
|     with_view_model( | ||||
|         text_input->view, (TextInputModel * model) { | ||||
|             model->text_buffer_size = 0; | ||||
|             model->header = ""; | ||||
|             model->selected_row = 0; | ||||
|             model->selected_column = 0; | ||||
|             model->clear_default_text = false; | ||||
|             return true; | ||||
|         }); | ||||
|     text_input_clean(text_input); | ||||
|  | ||||
|     return text_input; | ||||
| } | ||||
| @@ -388,6 +380,23 @@ void text_input_free(TextInput* text_input) { | ||||
|     free(text_input); | ||||
| } | ||||
|  | ||||
| void text_input_clean(TextInput* text_input) { | ||||
|     furi_assert(text_input); | ||||
|     with_view_model( | ||||
|         text_input->view, (TextInputModel * model) { | ||||
|             model->text_buffer_size = 0; | ||||
|             model->header = ""; | ||||
|             model->selected_row = 0; | ||||
|             model->selected_column = 0; | ||||
|             model->clear_default_text = false; | ||||
|             model->text_buffer = NULL; | ||||
|             model->text_buffer_size = 0; | ||||
|             model->callback = NULL; | ||||
|             model->callback_context = NULL; | ||||
|             return true; | ||||
|         }); | ||||
| } | ||||
|  | ||||
| View* text_input_get_view(TextInput* text_input) { | ||||
|     furi_assert(text_input); | ||||
|     return text_input->view; | ||||
| @@ -407,6 +416,11 @@ void text_input_set_result_callback( | ||||
|             model->text_buffer = text_buffer; | ||||
|             model->text_buffer_size = text_buffer_size; | ||||
|             model->clear_default_text = clear_default_text; | ||||
|             if(text_buffer && text_buffer[0] != '\0') { | ||||
|                 // Set focus on Save | ||||
|                 model->selected_row = 2; | ||||
|                 model->selected_column = 8; | ||||
|             } | ||||
|             return true; | ||||
|         }); | ||||
| } | ||||
|   | ||||
| @@ -9,32 +9,31 @@ extern "C" { | ||||
| typedef struct TextInput TextInput; | ||||
| typedef void (*TextInputCallback)(void* context); | ||||
|  | ||||
| /**  | ||||
|  * @brief Allocate and initialize text input | ||||
| /** Allocate and initialize text input | ||||
|  * This text input is used to enter string | ||||
|  *  | ||||
|  * @return TextInput instance | ||||
|  */ | ||||
| TextInput* text_input_alloc(); | ||||
|  | ||||
| /**  | ||||
|  * @brief Deinitialize and free text input | ||||
|  *  | ||||
|  * @param text_input - Text input instance | ||||
| /** Deinitialize and free text input | ||||
|  * @param text_input - TextInput instance | ||||
|  */ | ||||
| void text_input_free(TextInput* text_input); | ||||
|  | ||||
| /** | ||||
|  * @brief Get text input view | ||||
|  *  | ||||
| /** Clean text input view | ||||
|  * Note: this function does not free memory | ||||
|  * @param text_input - Text input instance | ||||
|  */ | ||||
| void text_input_clean(TextInput* text_input); | ||||
|  | ||||
| /** Get text input view | ||||
|  * @param text_input - TextInput instance | ||||
|  * @return View instance that can be used for embedding | ||||
|  */ | ||||
| View* text_input_get_view(TextInput* text_input); | ||||
|  | ||||
| /** | ||||
|  * @brief Set text input result callback | ||||
|  *  | ||||
|  * @param text_input - Text input instance | ||||
| /** Set text input result callback | ||||
|  * @param text_input - TextInput instance | ||||
|  * @param callback - callback fn | ||||
|  * @param callback_context - callback context | ||||
|  * @param text_buffer - pointer to YOUR text buffer, that we going to modify | ||||
| @@ -49,10 +48,8 @@ void text_input_set_result_callback( | ||||
|     size_t text_buffer_size, | ||||
|     bool clear_default_text); | ||||
|  | ||||
| /**  | ||||
|  * @brief Set text input header text | ||||
|  *  | ||||
|  * @param text input - Text input instance | ||||
| /** Set text input header text | ||||
|  * @param text_input - TextInput instance | ||||
|  * @param text - text to be shown | ||||
|  */ | ||||
| void text_input_set_header_text(TextInput* text_input, const char* text); | ||||
|   | ||||
| @@ -48,8 +48,7 @@ bool iButtonSceneSaveName::on_event(iButtonApp* app, iButtonEvent* event) { | ||||
|  | ||||
| void iButtonSceneSaveName::on_exit(iButtonApp* app) { | ||||
|     TextInput* text_input = app->get_view_manager()->get_text_input(); | ||||
|     text_input_set_header_text(text_input, ""); | ||||
|     text_input_set_result_callback(text_input, NULL, NULL, NULL, 0, false); | ||||
|     text_input_clean(text_input); | ||||
| } | ||||
|  | ||||
| void iButtonSceneSaveName::text_input_callback(void* context) { | ||||
|   | ||||
| @@ -60,6 +60,5 @@ void nfc_scene_save_name_on_exit(void* context) { | ||||
|     Nfc* nfc = (Nfc*)context; | ||||
|  | ||||
|     // Clear view | ||||
|     text_input_set_header_text(nfc->text_input, NULL); | ||||
|     text_input_set_result_callback(nfc->text_input, NULL, NULL, NULL, 0, false); | ||||
|     text_input_clean(nfc->text_input); | ||||
| } | ||||
|   | ||||
| @@ -61,6 +61,5 @@ void subghz_scene_save_name_on_exit(void* context) { | ||||
|     SubGhz* subghz = context; | ||||
|  | ||||
|     // Clear view | ||||
|     text_input_set_header_text(subghz->text_input, NULL); | ||||
|     text_input_set_result_callback(subghz->text_input, NULL, NULL, NULL, 0, false); | ||||
|     text_input_clean(subghz->text_input); | ||||
| } | ||||
|   | ||||
| @@ -13,8 +13,7 @@ View* TextInputVM::get_view() { | ||||
| } | ||||
|  | ||||
| void TextInputVM::clean() { | ||||
|     set_result_callback(NULL, NULL, NULL, 0, false); | ||||
|     set_header_text(""); | ||||
|     text_input_clean(text_input); | ||||
| } | ||||
|  | ||||
| void TextInputVM::set_result_callback( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user