diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 71aa4720c..b3e158a58 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -142,20 +142,20 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { elements_scrollbar(canvas, model->position, SubmenuItemArray_size(model->items)); if(model->locked_message_visible) { - canvas_set_font(canvas, FontSecondary); canvas_set_color(canvas, ColorWhite); canvas_draw_box(canvas, 8, 10, 110, 48); canvas_set_color(canvas, ColorBlack); canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42); canvas_draw_rframe(canvas, 8, 8, 112, 50, 3); canvas_draw_rframe(canvas, 9, 9, 110, 48, 2); - elements_multiline_text( + elements_multiline_text_aligned( canvas, - 62, - 20, + 84, + 32, + AlignCenter, + AlignCenter, furi_string_get_cstr( SubmenuItemArray_get(model->items, model->position)->locked_message)); - canvas_set_font(canvas, FontKeyboard); } } @@ -222,7 +222,7 @@ Submenu* submenu_alloc() { view_set_draw_callback(submenu->view, submenu_view_draw_callback); view_set_input_callback(submenu->view, submenu_view_input_callback); - submenu->timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); + submenu->locked_timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); with_view_model( submenu->view, @@ -249,8 +249,8 @@ void submenu_free(Submenu* submenu) { SubmenuItemArray_clear(model->items); }, true); - furi_timer_stop(submenu->timer); - furi_timer_free(submenu->timer); + furi_timer_stop(submenu->locked_timer); + furi_timer_free(submenu->locked_timer); view_free(submenu->view); free(submenu); } @@ -416,7 +416,7 @@ void submenu_process_ok(Submenu* submenu) { } if(item && item->locked) { model->locked_message_visible = true; - furi_timer_start(submenu->timer, furi_kernel_get_tick_frequency() * 4); + furi_timer_start(submenu->locked_timer, furi_kernel_get_tick_frequency() * 4); } }, true); diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index c01fa2336..83ec0e764 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -167,7 +167,19 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context) furi_assert(variable_item_list); bool consumed = false; - if(event->type == InputTypeShort) { + bool locked_message_visible = false; + with_view_model( + variable_item_list->view, + VariableItemListModel * model, + { locked_message_visible = model->locked_message_visible; }, + false); + + if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) && + locked_message_visible) { + with_view_model( + variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); + consumed = true; + } else if(event->type == InputTypeShort) { switch(event->key) { case InputKeyUp: consumed = true; @@ -222,9 +234,6 @@ void variable_item_list_process_up(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { - if(model->locked_message_visible) { - model->locked_message_visible = false; - } uint8_t items_on_screen = 4; if(model->position > 0) { model->position--; @@ -248,9 +257,6 @@ void variable_item_list_process_down(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { - if(model->locked_message_visible) { - model->locked_message_visible = false; - } uint8_t items_on_screen = 4; if(model->position < (VariableItemArray_size(model->items) - 1)) { model->position++; @@ -293,9 +299,7 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index > 0) { @@ -315,9 +319,7 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index < (item->values_count - 1)) { @@ -332,23 +334,19 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { } void variable_item_list_process_ok(VariableItemList* variable_item_list) { - bool update = false; with_view_model( variable_item_list->view, VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - update = true; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(variable_item_list->callback) { variable_item_list->callback(variable_item_list->context, model->position); } }, - update); + true); } static void variable_item_list_scroll_timer_callback(void* context) {