Add lock mode popup to lock menu

This commit is contained in:
Willy-JL
2023-03-25 06:01:17 +00:00
parent 64000fec40
commit df3dfb1aaa
3 changed files with 120 additions and 85 deletions

View File

@@ -53,6 +53,8 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
if(desktop->settings.pin_code.length > 0) { if(desktop->settings.pin_code.length > 0) {
desktop_lock_menu_set_pin_state(desktop->lock_menu, true); desktop_lock_menu_set_pin_state(desktop->lock_menu, true);
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
desktop_pin_lock(&desktop->settings);
desktop_lock(desktop);
} }
} }
} else if(event.type == SceneManagerEventTypeCustom) { } else if(event.type == SceneManagerEventTypeCustom) {

View File

@@ -41,7 +41,10 @@ void desktop_lock_menu_set_pin_state(DesktopLockMenuView* lock_menu, bool pin_is
with_view_model( with_view_model(
lock_menu->view, lock_menu->view,
DesktopLockMenuViewModel * model, DesktopLockMenuViewModel * model,
{ model->pin_is_set = pin_is_set; }, {
model->pin_is_set = pin_is_set;
model->pin_lock = pin_is_set;
},
true); true);
} }
@@ -154,6 +157,14 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) {
canvas_draw_rframe(canvas, x, y, w, h, 5); canvas_draw_rframe(canvas, x, y, w, h, 5);
} }
} }
if(m->show_lock_menu) {
canvas_set_font(canvas, FontSecondary);
elements_bold_rounded_frame(canvas, 24, 10, 80, 44);
canvas_draw_str_aligned(canvas, 64, 24, AlignCenter, AlignCenter, "Keypad Lock");
canvas_draw_str_aligned(canvas, 64, 40, AlignCenter, AlignCenter, "PIN Code Lock");
elements_frame(canvas, 30, m->pin_lock ? 32 : 16, 68, 15);
}
} }
View* desktop_lock_menu_get_view(DesktopLockMenuView* lock_menu) { View* desktop_lock_menu_get_view(DesktopLockMenuView* lock_menu) {
@@ -167,119 +178,139 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) {
DesktopLockMenuView* lock_menu = context; DesktopLockMenuView* lock_menu = context;
uint8_t idx = 0; uint8_t idx = 0;
bool pin_lock = false;
bool show_lock_menu = false;
bool consumed = true; bool consumed = true;
with_view_model( with_view_model(
lock_menu->view, lock_menu->view,
DesktopLockMenuViewModel * model, DesktopLockMenuViewModel * model,
{ {
show_lock_menu = model->show_lock_menu;
if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) { if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) {
if(model->idx < 6) { if(model->show_lock_menu) {
if(event->key == InputKeyUp || event->key == InputKeyDown) { if(event->key == InputKeyUp || event->key == InputKeyDown) {
if(model->idx % 2) { model->pin_lock = !model->pin_lock;
model->idx--; } else if(event->key == InputKeyBack || event->key == InputKeyOk) {
} else { model->show_lock_menu = false;
model->idx++;
}
} else if(event->key == InputKeyLeft) {
if(model->idx < 2) {
model->idx = 7;
} else {
model->idx -= 2;
}
} else if(event->key == InputKeyRight) {
if(model->idx >= 4) {
model->idx = 6;
} else {
model->idx += 2;
}
} }
} else { } else {
if(event->key == InputKeyLeft) { if(model->idx == DesktopLockMenuIndexLock && event->key == InputKeyOk) {
model->idx--; model->show_lock_menu = true;
} else if(event->key == InputKeyRight) { } else if(model->idx < 6) {
if(model->idx >= 7) { if(event->key == InputKeyUp || event->key == InputKeyDown) {
model->idx = 1; if(model->idx % 2) {
} else { model->idx--;
model->idx++; } else {
model->idx++;
}
} else if(event->key == InputKeyLeft) {
if(model->idx < 2) {
model->idx = 7;
} else {
model->idx -= 2;
}
} else if(event->key == InputKeyRight) {
if(model->idx >= 4) {
model->idx = 6;
} else {
model->idx += 2;
}
}
} else {
if(event->key == InputKeyLeft) {
model->idx--;
} else if(event->key == InputKeyRight) {
if(model->idx >= 7) {
model->idx = 1;
} else {
model->idx++;
}
} }
} }
} }
} }
idx = model->idx; idx = model->idx;
pin_lock = model->pin_lock;
}, },
true); true);
UNUSED(idx); DesktopEvent desktop_event = 0;
if(event->key == InputKeyBack) { if(show_lock_menu) {
consumed = false; if(event->key == InputKeyOk && event->type == InputTypeShort) {
} else if(event->key == InputKeyOk && event->type == InputTypeShort) { if(pin_lock) {
DesktopEvent event = 0; desktop_event = DesktopLockMenuEventLockPin;
switch(idx) {
case DesktopLockMenuIndexLefthandedMode:
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) {
furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient);
} else { } else {
furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); desktop_event = DesktopLockMenuEventLock;
} }
break;
case DesktopLockMenuIndexSettings:
event = DesktopLockMenuEventSettings;
break;
case DesktopLockMenuIndexDarkMode:
XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode;
lock_menu->save_xtreme = true;
break;
case DesktopLockMenuIndexLock:
event = DesktopLockMenuEventLock;
break;
case DesktopLockMenuIndexBluetooth:
lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled;
if(lock_menu->bt->bt_settings.enabled) {
furi_hal_bt_start_advertising();
} else {
furi_hal_bt_stop_advertising();
}
lock_menu->save_bt = true;
break;
case DesktopLockMenuIndexXtreme:
event = DesktopLockMenuEventXtreme;
break;
default:
break;
} }
if(event) { } else {
lock_menu->callback(event, lock_menu->context); if(event->key == InputKeyBack) {
} consumed = false;
} else if(idx >= 6 && (event->type == InputTypeShort || event->type == InputTypeRepeat)) { } else if(event->key == InputKeyOk && event->type == InputTypeShort) {
int8_t offset = 0;
if(event->key == InputKeyUp) {
offset = 1;
} else if(event->key == InputKeyDown) {
offset = -1;
}
if(offset) {
float value;
switch(idx) { switch(idx) {
case DesktopLockMenuIndexBrightness: case DesktopLockMenuIndexLefthandedMode:
value = lock_menu->notification->settings.display_brightness + 0.05 * offset; if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) {
lock_menu->notification->settings.display_brightness = furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient);
value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); } else {
lock_menu->save_notification = true; furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient);
notification_message(lock_menu->notification, &sequence_display_backlight_on); }
break; break;
case DesktopLockMenuIndexVolume: case DesktopLockMenuIndexSettings:
value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; desktop_event = DesktopLockMenuEventSettings;
lock_menu->notification->settings.speaker_volume = break;
value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); case DesktopLockMenuIndexDarkMode:
lock_menu->save_notification = true; XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode;
notification_message(lock_menu->notification, &sequence_note_c); lock_menu->save_xtreme = true;
break;
case DesktopLockMenuIndexBluetooth:
lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled;
if(lock_menu->bt->bt_settings.enabled) {
furi_hal_bt_start_advertising();
} else {
furi_hal_bt_stop_advertising();
}
lock_menu->save_bt = true;
break;
case DesktopLockMenuIndexXtreme:
desktop_event = DesktopLockMenuEventXtreme;
break; break;
default: default:
break; break;
} }
} else if(idx >= 6 && (event->type == InputTypeShort || event->type == InputTypeRepeat)) {
int8_t offset = 0;
if(event->key == InputKeyUp) {
offset = 1;
} else if(event->key == InputKeyDown) {
offset = -1;
}
if(offset) {
float value;
switch(idx) {
case DesktopLockMenuIndexBrightness:
value = lock_menu->notification->settings.display_brightness + 0.05 * offset;
lock_menu->notification->settings.display_brightness =
value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value);
lock_menu->save_notification = true;
notification_message(lock_menu->notification, &sequence_display_backlight_on);
break;
case DesktopLockMenuIndexVolume:
value = lock_menu->notification->settings.speaker_volume + 0.05 * offset;
lock_menu->notification->settings.speaker_volume =
value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value);
lock_menu->save_notification = true;
notification_message(lock_menu->notification, &sequence_note_c);
break;
default:
break;
}
}
} }
} }
if(desktop_event) {
lock_menu->callback(desktop_event, lock_menu->context);
}
return consumed; return consumed;
} }

View File

@@ -25,6 +25,8 @@ struct DesktopLockMenuView {
typedef struct { typedef struct {
uint8_t idx; uint8_t idx;
bool pin_is_set; bool pin_is_set;
bool pin_lock;
bool show_lock_menu;
DesktopLockMenuView* lock_menu; DesktopLockMenuView* lock_menu;
} DesktopLockMenuViewModel; } DesktopLockMenuViewModel;