[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:
gornekich 2021-09-29 17:08:24 +03:00 committed by GitHub
parent 8b6c466058
commit 2eafae6b90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 38 deletions

View File

@ -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);
} }

View File

@ -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;
}); });
} }

View File

@ -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);

View File

@ -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) {

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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(