[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…
Reference in New Issue
Block a user