This commit is contained in:
Willy-JL
2023-03-20 21:26:20 +00:00
parent 7231ddf857
commit 89e98dea4e
18 changed files with 207 additions and 138 deletions

View File

@@ -89,7 +89,8 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) {
break;
case DesktopLockedEventUpdate:
if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) {
notification_message(desktop->notification, &sequence_display_backlight_off_delay_1000);
notification_message(
desktop->notification, &sequence_display_backlight_off_delay_1000);
}
desktop_view_locked_update(desktop->locked_view);
consumed = true;

View File

@@ -79,7 +79,8 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) {
} else {
bool pm = datetime.hour > 12;
bool pm12 = datetime.hour >= 12;
snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute);
snprintf(
time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute);
snprintf(meridian_str, 3, pm12 ? "PM" : "AM");
}
@@ -106,13 +107,16 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) {
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str);
}
if(model->view_state == DesktopViewLockedStateLockedHintShown && xtreme_settings->lockscreen_prompt) {
if(model->view_state == DesktopViewLockedStateLockedHintShown &&
xtreme_settings->lockscreen_prompt) {
canvas_set_font(canvas, FontSecondary);
if(model->pin_locked) {
elements_bubble_str(canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom);
elements_bubble_str(
canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom);
canvas_draw_icon(canvas, 45, 16 + y, &I_Pin_arrow_up_7x9);
} else {
elements_bubble_str(canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom);
elements_bubble_str(
canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom);
canvas_draw_icon(canvas, 43, 17 + y, &I_Pin_back_arrow_10x8);
}
}
@@ -122,12 +126,14 @@ static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool d
bool stop = false;
if(down) {
if(model->cover_offset < COVER_OFFSET_END) {
model->cover_offset = CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START);
model->cover_offset =
CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START);
stop = true;
}
} else {
if(model->cover_offset > COVER_OFFSET_START) {
model->cover_offset = CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START);
model->cover_offset =
CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START);
stop = true;
}
}
@@ -152,10 +158,12 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) {
if(view_state == DesktopViewLockedStateCoverClosing &&
!desktop_view_locked_cover_move(model, true)) {
model->view_state = DesktopViewLockedStateLocked;
} else if(view_state == DesktopViewLockedStateCoverOpening &&
!desktop_view_locked_cover_move(model, false)) {
} else if(
view_state == DesktopViewLockedStateCoverOpening &&
!desktop_view_locked_cover_move(model, false)) {
model->view_state = DesktopViewLockedStateUnlocked;
xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY);
xTimerChangePeriod(
locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY);
} else if(view_state == DesktopViewLockedStateLockedHintShown) {
model->view_state = DesktopViewLockedStateLocked;
} else if(view_state == DesktopViewLockedStateUnlockedHintShown) {
@@ -164,7 +172,8 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) {
view_commit_model(locked_view->view, true);
if(view_state != DesktopViewLockedStateCoverClosing && view_state != DesktopViewLockedStateCoverOpening) {
if(view_state != DesktopViewLockedStateCoverClosing &&
view_state != DesktopViewLockedStateCoverOpening) {
xTimerStop(locked_view->timer, portMAX_DELAY);
}
}
@@ -175,9 +184,9 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) {
canvas_set_color(canvas, ColorBlack);
if(view_state == DesktopViewLockedStateLocked ||
view_state == DesktopViewLockedStateLockedHintShown ||
view_state == DesktopViewLockedStateCoverClosing ||
view_state == DesktopViewLockedStateCoverOpening) {
view_state == DesktopViewLockedStateLockedHintShown ||
view_state == DesktopViewLockedStateCoverClosing ||
view_state == DesktopViewLockedStateCoverOpening) {
desktop_view_locked_draw_lockscreen(canvas, m);
}
}

View File

@@ -622,8 +622,9 @@ void elements_scrollable_text_line(
}
}
if (centered) {
canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line));
if(centered) {
canvas_draw_str_aligned(
canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line));
} else {
canvas_draw_str(canvas, x, y, furi_string_get_cstr(line));
}

View File

@@ -78,7 +78,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
}
item = MenuItemArray_get(model->items, item_i);
if(item->icon) {
canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon);
canvas_draw_icon_animation(
canvas,
(40 - item->icon->icon->width) / 2 + x_off,
(20 - item->icon->icon->height) / 2 + y_off,
item->icon);
}
furi_string_set(name, item->label);
if(furi_string_start_with_str(name, "[")) {
@@ -88,14 +92,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
}
}
elements_scrollable_text_line(
canvas,
20 + x_off,
26 + y_off,
36,
name,
scroll_counter,
false,
true);
canvas, 20 + x_off, 26 + y_off, 36, name, scroll_counter, false, true);
if(item_i == position) {
canvas_set_color(canvas, ColorBlack);
} else {
@@ -108,7 +105,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
shift_position = (0 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position);
if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 3 + (14 - item->icon->icon->height) / 2, item->icon);
canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
3 + (14 - item->icon->icon->height) / 2,
item->icon);
}
canvas_draw_str(canvas, 22, 14, item->label);
// Second line main
@@ -116,7 +117,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
shift_position = (1 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position);
if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 25 + (14 - item->icon->icon->height) / 2, item->icon);
canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
25 + (14 - item->icon->icon->height) / 2,
item->icon);
}
size_t scroll_counter = model->scroll_counter;
if(scroll_counter < 1) {
@@ -125,21 +130,17 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
scroll_counter -= 1;
}
furi_string_set(name, item->label);
elements_scrollable_text_line(
canvas,
22,
36,
98,
name,
scroll_counter,
false,
false);
elements_scrollable_text_line(canvas, 22, 36, 98, name, scroll_counter, false, false);
// Third line
canvas_set_font(canvas, FontSecondary);
shift_position = (2 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position);
if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 47 + (14 - item->icon->icon->height) / 2, item->icon);
canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
47 + (14 - item->icon->icon->height) / 2,
item->icon);
}
canvas_draw_str(canvas, 22, 58, item->label);
// Frame and scrollbar
@@ -159,49 +160,49 @@ static bool menu_input_callback(InputEvent* event, void* context) {
if(event->type == InputTypeShort) {
switch(event->key) {
case InputKeyUp:
consumed = true;
menu_process_up(menu);
break;
case InputKeyDown:
consumed = true;
menu_process_down(menu);
break;
case InputKeyLeft:
consumed = true;
menu_process_left(menu);
break;
case InputKeyRight:
consumed = true;
menu_process_right(menu);
break;
case InputKeyOk:
consumed = true;
menu_process_ok(menu);
break;
default:
break;
case InputKeyUp:
consumed = true;
menu_process_up(menu);
break;
case InputKeyDown:
consumed = true;
menu_process_down(menu);
break;
case InputKeyLeft:
consumed = true;
menu_process_left(menu);
break;
case InputKeyRight:
consumed = true;
menu_process_right(menu);
break;
case InputKeyOk:
consumed = true;
menu_process_ok(menu);
break;
default:
break;
}
} else if(event->type == InputTypeRepeat) {
switch(event->key) {
case InputKeyUp:
consumed = true;
menu_process_up(menu);
break;
case InputKeyDown:
consumed = true;
menu_process_down(menu);
break;
case InputKeyLeft:
consumed = true;
menu_process_left(menu);
break;
case InputKeyRight:
consumed = true;
menu_process_right(menu);
break;
default:
break;
case InputKeyUp:
consumed = true;
menu_process_up(menu);
break;
case InputKeyDown:
consumed = true;
menu_process_down(menu);
break;
case InputKeyLeft:
consumed = true;
menu_process_left(menu);
break;
case InputKeyRight:
consumed = true;
menu_process_right(menu);
break;
default:
break;
}
}
@@ -255,8 +256,7 @@ Menu* menu_alloc() {
view_set_enter_callback(menu->view, menu_enter);
view_set_exit_callback(menu->view, menu_exit);
menu->scroll_timer =
furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu);
menu->scroll_timer = furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu);
with_view_model(
menu->view,
@@ -458,7 +458,7 @@ static void menu_process_right(Menu* menu) {
if(model->position == count - 1) {
model->position = 0;
} else if(model->position == count - 2) {
model->position = count -1;
model->position = count - 1;
} else {
model->position += 2;
}

View File

@@ -177,7 +177,10 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context)
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);
variable_item_list->view,
VariableItemListModel * model,
{ model->locked_message_visible = false; },
true);
consumed = true;
} else if(event->type == InputTypeShort) {
switch(event->key) {
@@ -301,7 +304,8 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) {
model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
furi_timer_start(
variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index > 0) {
item->current_value_index--;
model->scroll_counter = 0;
@@ -321,7 +325,8 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) {
model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
furi_timer_start(
variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index < (item->values_count - 1)) {
item->current_value_index++;
model->scroll_counter = 0;
@@ -341,7 +346,8 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) {
model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
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);
}
@@ -352,7 +358,10 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) {
static void variable_item_list_scroll_timer_callback(void* context) {
VariableItemList* variable_item_list = context;
with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->scroll_counter++; }, true);
variable_item_list->view,
VariableItemListModel * model,
{ model->scroll_counter++; },
true);
}
void variable_item_list_locked_timer_callback(void* context) {
@@ -360,7 +369,10 @@ void variable_item_list_locked_timer_callback(void* context) {
VariableItemList* variable_item_list = context;
with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true);
variable_item_list->view,
VariableItemListModel * model,
{ model->locked_message_visible = false; },
true);
}
VariableItemList* variable_item_list_alloc() {
@@ -372,7 +384,8 @@ VariableItemList* variable_item_list_alloc() {
view_set_draw_callback(variable_item_list->view, variable_item_list_draw_callback);
view_set_input_callback(variable_item_list->view, variable_item_list_input_callback);
variable_item_list->locked_timer = furi_timer_alloc(variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list);
variable_item_list->locked_timer = furi_timer_alloc(
variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list);
with_view_model(
variable_item_list->view,
@@ -384,8 +397,8 @@ VariableItemList* variable_item_list_alloc() {
model->scroll_counter = 0;
},
true);
variable_item_list->scroll_timer =
furi_timer_alloc(variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list);
variable_item_list->scroll_timer = furi_timer_alloc(
variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list);
furi_timer_start(variable_item_list->scroll_timer, 333);
return variable_item_list;