[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:
		
							parent
							
								
									8b6c466058
								
							
						
					
					
						commit
						2eafae6b90
					
				| @ -75,6 +75,5 @@ bool archive_scene_rename_on_event(void* context, SceneManagerEvent event) { | |||||||
| void archive_scene_rename_on_exit(void* context) { | void archive_scene_rename_on_exit(void* context) { | ||||||
|     ArchiveApp* archive = (ArchiveApp*)context; |     ArchiveApp* archive = (ArchiveApp*)context; | ||||||
|     // Clear view
 |     // Clear view
 | ||||||
|     text_input_set_header_text(archive->text_input, NULL); |     text_input_clean(archive->text_input); | ||||||
|     text_input_set_result_callback(archive->text_input, NULL, NULL, NULL, 0, false); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -369,15 +369,7 @@ TextInput* text_input_alloc() { | |||||||
|     view_set_draw_callback(text_input->view, text_input_view_draw_callback); |     view_set_draw_callback(text_input->view, text_input_view_draw_callback); | ||||||
|     view_set_input_callback(text_input->view, text_input_view_input_callback); |     view_set_input_callback(text_input->view, text_input_view_input_callback); | ||||||
| 
 | 
 | ||||||
|     with_view_model( |     text_input_clean(text_input); | ||||||
|         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; |  | ||||||
|         }); |  | ||||||
| 
 | 
 | ||||||
|     return text_input; |     return text_input; | ||||||
| } | } | ||||||
| @ -388,6 +380,23 @@ void text_input_free(TextInput* text_input) { | |||||||
|     free(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) { | View* text_input_get_view(TextInput* text_input) { | ||||||
|     furi_assert(text_input); |     furi_assert(text_input); | ||||||
|     return text_input->view; |     return text_input->view; | ||||||
| @ -407,6 +416,11 @@ void text_input_set_result_callback( | |||||||
|             model->text_buffer = text_buffer; |             model->text_buffer = text_buffer; | ||||||
|             model->text_buffer_size = text_buffer_size; |             model->text_buffer_size = text_buffer_size; | ||||||
|             model->clear_default_text = clear_default_text; |             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; |             return true; | ||||||
|         }); |         }); | ||||||
| } | } | ||||||
|  | |||||||
| @ -9,32 +9,31 @@ extern "C" { | |||||||
| typedef struct TextInput TextInput; | typedef struct TextInput TextInput; | ||||||
| typedef void (*TextInputCallback)(void* context); | typedef void (*TextInputCallback)(void* context); | ||||||
| 
 | 
 | ||||||
| /** 
 | /** Allocate and initialize text input
 | ||||||
|  * @brief Allocate and initialize text input |  * This text input is used to enter string | ||||||
|  *        This text input is used to enter string |  * @return TextInput instance | ||||||
|  *  |  | ||||||
|  */ |  */ | ||||||
| TextInput* text_input_alloc(); | TextInput* text_input_alloc(); | ||||||
| 
 | 
 | ||||||
| /** 
 | /** Deinitialize and free text input
 | ||||||
|  * @brief Deinitialize and free text input |  * @param text_input - TextInput instance | ||||||
|  *  |  | ||||||
|  * @param text_input - Text input instance |  | ||||||
|  */ |  */ | ||||||
| void text_input_free(TextInput* text_input); | void text_input_free(TextInput* text_input); | ||||||
| 
 | 
 | ||||||
| /**
 | /** Clean text input view
 | ||||||
|  * @brief Get text input view |  * Note: this function does not free memory | ||||||
|  *  |  | ||||||
|  * @param text_input - Text input instance |  * @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 |  * @return View instance that can be used for embedding | ||||||
|  */ |  */ | ||||||
| View* text_input_get_view(TextInput* text_input); | View* text_input_get_view(TextInput* text_input); | ||||||
| 
 | 
 | ||||||
| /**
 | /** Set text input result callback
 | ||||||
|  * @brief Set text input result callback |  * @param text_input - TextInput instance | ||||||
|  *  |  | ||||||
|  * @param text_input - Text input instance |  | ||||||
|  * @param callback - callback fn |  * @param callback - callback fn | ||||||
|  * @param callback_context - callback context |  * @param callback_context - callback context | ||||||
|  * @param text_buffer - pointer to YOUR text buffer, that we going to modify |  * @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, |     size_t text_buffer_size, | ||||||
|     bool clear_default_text); |     bool clear_default_text); | ||||||
| 
 | 
 | ||||||
| /** 
 | /** Set text input header text
 | ||||||
|  * @brief Set text input header text |  * @param text_input - TextInput instance | ||||||
|  *  |  | ||||||
|  * @param text input - Text input instance |  | ||||||
|  * @param text - text to be shown |  * @param text - text to be shown | ||||||
|  */ |  */ | ||||||
| void text_input_set_header_text(TextInput* text_input, const char* text); | 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) { | void iButtonSceneSaveName::on_exit(iButtonApp* app) { | ||||||
|     TextInput* text_input = app->get_view_manager()->get_text_input(); |     TextInput* text_input = app->get_view_manager()->get_text_input(); | ||||||
|     text_input_set_header_text(text_input, ""); |     text_input_clean(text_input); | ||||||
|     text_input_set_result_callback(text_input, NULL, NULL, NULL, 0, false); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void iButtonSceneSaveName::text_input_callback(void* context) { | void iButtonSceneSaveName::text_input_callback(void* context) { | ||||||
|  | |||||||
| @ -60,6 +60,5 @@ void nfc_scene_save_name_on_exit(void* context) { | |||||||
|     Nfc* nfc = (Nfc*)context; |     Nfc* nfc = (Nfc*)context; | ||||||
| 
 | 
 | ||||||
|     // Clear view
 |     // Clear view
 | ||||||
|     text_input_set_header_text(nfc->text_input, NULL); |     text_input_clean(nfc->text_input); | ||||||
|     text_input_set_result_callback(nfc->text_input, NULL, NULL, NULL, 0, false); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -61,6 +61,5 @@ void subghz_scene_save_name_on_exit(void* context) { | |||||||
|     SubGhz* subghz = context; |     SubGhz* subghz = context; | ||||||
| 
 | 
 | ||||||
|     // Clear view
 |     // Clear view
 | ||||||
|     text_input_set_header_text(subghz->text_input, NULL); |     text_input_clean(subghz->text_input); | ||||||
|     text_input_set_result_callback(subghz->text_input, NULL, NULL, NULL, 0, false); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -13,8 +13,7 @@ View* TextInputVM::get_view() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextInputVM::clean() { | void TextInputVM::clean() { | ||||||
|     set_result_callback(NULL, NULL, NULL, 0, false); |     text_input_clean(text_input); | ||||||
|     set_header_text(""); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TextInputVM::set_result_callback( | void TextInputVM::set_result_callback( | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 gornekich
						gornekich