Initial lock menu rework
@@ -4,6 +4,8 @@
|
|||||||
#include <toolbox/saved_struct.h>
|
#include <toolbox/saved_struct.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <loader/loader.h>
|
#include <loader/loader.h>
|
||||||
|
// #include <loader/loader_i.h>
|
||||||
|
#include <xtreme/settings.h>
|
||||||
|
|
||||||
#include "../desktop_i.h"
|
#include "../desktop_i.h"
|
||||||
#include <desktop/desktop_settings.h>
|
#include <desktop/desktop_settings.h>
|
||||||
@@ -26,7 +28,7 @@ void desktop_scene_lock_menu_on_enter(void* context) {
|
|||||||
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
|
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
|
||||||
desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop);
|
desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop);
|
||||||
desktop_lock_menu_set_pin_state(desktop->lock_menu, desktop->settings.pin_code.length > 0);
|
desktop_lock_menu_set_pin_state(desktop->lock_menu, desktop->settings.pin_code.length > 0);
|
||||||
desktop_lock_menu_set_idx(desktop->lock_menu, 0);
|
desktop_lock_menu_set_idx(desktop->lock_menu, 3);
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu);
|
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu);
|
||||||
}
|
}
|
||||||
@@ -55,52 +57,59 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
|
|||||||
}
|
}
|
||||||
} else if(event.type == SceneManagerEventTypeCustom) {
|
} else if(event.type == SceneManagerEventTypeCustom) {
|
||||||
switch(event.event) {
|
switch(event.event) {
|
||||||
|
// case DesktopLockMenuEventPinLock:
|
||||||
|
// if(desktop->settings.pin_code.length > 0) {
|
||||||
|
// desktop_pin_lock(&desktop->settings);
|
||||||
|
// desktop_lock(desktop);
|
||||||
|
// } else {
|
||||||
|
// LoaderStatus status =
|
||||||
|
// loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG);
|
||||||
|
// if(status == LoaderStatusOk) {
|
||||||
|
// scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1);
|
||||||
|
// } else {
|
||||||
|
// FURI_LOG_E(TAG, "Unable to start desktop settings");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// consumed = true;
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case DesktopLockMenuEventPinLockShutdown:
|
||||||
|
// if(desktop->settings.pin_code.length > 0) {
|
||||||
|
// desktop_pin_lock(&desktop->settings);
|
||||||
|
// desktop_lock(desktop);
|
||||||
|
// Power* power = furi_record_open(RECORD_POWER);
|
||||||
|
// furi_delay_ms(666);
|
||||||
|
// power_off(power);
|
||||||
|
// furi_record_close(RECORD_POWER);
|
||||||
|
// } else {
|
||||||
|
// LoaderStatus status =
|
||||||
|
// loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG);
|
||||||
|
// if(status == LoaderStatusOk) {
|
||||||
|
// scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2);
|
||||||
|
// } else {
|
||||||
|
// FURI_LOG_E(TAG, "Unable to start desktop settings");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// consumed = true;
|
||||||
|
// break;
|
||||||
|
|
||||||
|
case DesktopLockMenuEventSettings:
|
||||||
|
// loader_start(desktop->loader, "Settings", NULL);
|
||||||
|
// view_dispatcher_switch_to_view(desktop->loader->view_dispatcher, LoaderMenuViewSettings);
|
||||||
|
consumed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case DesktopLockMenuEventLock:
|
case DesktopLockMenuEventLock:
|
||||||
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
|
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
|
||||||
desktop_lock(desktop);
|
desktop_lock(desktop);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DesktopLockMenuEventPinLock:
|
case DesktopLockMenuEventXtreme:
|
||||||
if(desktop->settings.pin_code.length > 0) {
|
loader_start(desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap"));
|
||||||
desktop_pin_lock(&desktop->settings);
|
|
||||||
desktop_lock(desktop);
|
|
||||||
} else {
|
|
||||||
LoaderStatus status =
|
|
||||||
loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG);
|
|
||||||
if(status == LoaderStatusOk) {
|
|
||||||
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1);
|
|
||||||
} else {
|
|
||||||
FURI_LOG_E(TAG, "Unable to start desktop settings");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
consumed = true;
|
consumed = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DesktopLockMenuEventPinLockShutdown:
|
|
||||||
if(desktop->settings.pin_code.length > 0) {
|
|
||||||
desktop_pin_lock(&desktop->settings);
|
|
||||||
desktop_lock(desktop);
|
|
||||||
Power* power = furi_record_open(RECORD_POWER);
|
|
||||||
furi_delay_ms(666);
|
|
||||||
power_off(power);
|
|
||||||
furi_record_close(RECORD_POWER);
|
|
||||||
} else {
|
|
||||||
LoaderStatus status =
|
|
||||||
loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG);
|
|
||||||
if(status == LoaderStatusOk) {
|
|
||||||
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2);
|
|
||||||
} else {
|
|
||||||
FURI_LOG_E(TAG, "Unable to start desktop settings");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
consumed = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DesktopLockMenuEventXtremeSettings:
|
|
||||||
loader_start(
|
|
||||||
desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap"));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,11 +39,9 @@ typedef enum {
|
|||||||
DesktopDebugEventSaveState,
|
DesktopDebugEventSaveState,
|
||||||
DesktopDebugEventExit,
|
DesktopDebugEventExit,
|
||||||
|
|
||||||
|
DesktopLockMenuEventSettings,
|
||||||
DesktopLockMenuEventLock,
|
DesktopLockMenuEventLock,
|
||||||
DesktopLockMenuEventPinLock,
|
DesktopLockMenuEventXtreme,
|
||||||
DesktopLockMenuEventPinLockShutdown,
|
|
||||||
DesktopLockMenuEventExit,
|
|
||||||
DesktopLockMenuEventXtremeSettings,
|
|
||||||
|
|
||||||
DesktopAnimationEventCheckAnimation,
|
DesktopAnimationEventCheckAnimation,
|
||||||
DesktopAnimationEventNewIdleAnimation,
|
DesktopAnimationEventNewIdleAnimation,
|
||||||
|
|||||||
@@ -1,15 +1,28 @@
|
|||||||
#include <furi.h>
|
#include <furi.h>
|
||||||
#include <gui/elements.h>
|
#include <gui/elements.h>
|
||||||
#include <assets_icons.h>
|
#include <assets_icons.h>
|
||||||
|
#include <xtreme/settings.h>
|
||||||
|
#include <furi_hal_rtc.h>
|
||||||
|
|
||||||
#include "../desktop_i.h"
|
#include "../desktop_i.h"
|
||||||
#include "desktop_view_lock_menu.h"
|
#include "desktop_view_lock_menu.h"
|
||||||
|
|
||||||
|
static const NotificationSequence sequence_note_c = {
|
||||||
|
&message_note_c5,
|
||||||
|
&message_delay_100,
|
||||||
|
&message_sound_off,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
DesktopLockMenuIndexLefthandedMode,
|
||||||
|
DesktopLockMenuIndexSettings,
|
||||||
|
DesktopLockMenuIndexDarkMode,
|
||||||
DesktopLockMenuIndexLock,
|
DesktopLockMenuIndexLock,
|
||||||
DesktopLockMenuIndexPinLock,
|
DesktopLockMenuIndexBluetooth,
|
||||||
DesktopLockMenuIndexPinLockShutdown,
|
DesktopLockMenuIndexXtreme,
|
||||||
DesktopLockMenuIndexXtremeSettings,
|
DesktopLockMenuIndexBrightness,
|
||||||
|
DesktopLockMenuIndexVolume,
|
||||||
|
|
||||||
DesktopLockMenuIndexTotalCount
|
DesktopLockMenuIndexTotalCount
|
||||||
} DesktopLockMenuIndex;
|
} DesktopLockMenuIndex;
|
||||||
@@ -42,36 +55,96 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) {
|
|||||||
DesktopLockMenuViewModel* m = model;
|
DesktopLockMenuViewModel* m = model;
|
||||||
|
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
canvas_draw_icon(canvas, -57, 0 + STATUS_BAR_Y_SHIFT, &I_DoorLeft_70x55);
|
|
||||||
canvas_draw_icon(canvas, 116, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55);
|
|
||||||
canvas_set_font(canvas, FontBatteryPercent);
|
canvas_set_font(canvas, FontBatteryPercent);
|
||||||
|
|
||||||
|
int x, y, w, h;
|
||||||
|
bool selected, toggle;
|
||||||
|
bool enabled = false;
|
||||||
|
uint value = 0;
|
||||||
|
int total = 58;
|
||||||
|
const Icon* icon = NULL;
|
||||||
for(size_t i = 0; i < DesktopLockMenuIndexTotalCount; ++i) {
|
for(size_t i = 0; i < DesktopLockMenuIndexTotalCount; ++i) {
|
||||||
const char* str = NULL;
|
selected = m->idx == i;
|
||||||
|
toggle = i < 6;
|
||||||
if(i == DesktopLockMenuIndexLock) {
|
if(toggle) {
|
||||||
str = "Lock";
|
x = 2 + 32 * (i / 2);
|
||||||
} else if(i == DesktopLockMenuIndexPinLock) {
|
y = 2 + 32 * (i % 2);
|
||||||
if(m->pin_is_set) {
|
w = 28;
|
||||||
str = "Lock with PIN";
|
h = 28;
|
||||||
} else {
|
enabled = false;
|
||||||
str = "Set PIN";
|
} else {
|
||||||
}
|
x = 98 + 16 * (i % 2);
|
||||||
} else if(i == DesktopLockMenuIndexPinLockShutdown) {
|
y = 2;
|
||||||
if(m->pin_is_set) {
|
w = 12;
|
||||||
str = "Lock with PIN + Off";
|
h = 60;
|
||||||
} else {
|
value = 0;
|
||||||
str = "Set PIN + Off";
|
|
||||||
}
|
|
||||||
} else if(i == DesktopLockMenuIndexXtremeSettings) {
|
|
||||||
str = "Xtreme Settings";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(str) //-V547
|
switch(i) {
|
||||||
canvas_draw_str_aligned(
|
case DesktopLockMenuIndexLefthandedMode:
|
||||||
canvas, 64, 9 + (i * 12) + STATUS_BAR_Y_SHIFT, AlignCenter, AlignCenter, str);
|
icon = &I_CC_LefthandedMode_16x16;
|
||||||
|
enabled = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient);
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexSettings:
|
||||||
|
icon = &I_CC_Settings_16x16;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexDarkMode:
|
||||||
|
icon = &I_CC_DarkMode_16x16;
|
||||||
|
enabled = XTREME_SETTINGS()->dark_mode;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexLock:
|
||||||
|
icon = &I_CC_Lock_16x16;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexBluetooth:
|
||||||
|
icon = &I_CC_Bluetooth_16x16;
|
||||||
|
enabled = m->lock_menu->bt->bt_settings.enabled;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexXtreme:
|
||||||
|
icon = &I_CC_Xtreme_16x16;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexBrightness:
|
||||||
|
icon = &I_Pin_star_7x7;
|
||||||
|
value = total - m->lock_menu->notification->settings.display_brightness * total;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexVolume:
|
||||||
|
icon = &I_Volup_8x6;
|
||||||
|
value = total - m->lock_menu->notification->settings.speaker_volume * total;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(m->idx == i) elements_frame(canvas, 15, 1 + (i * 12) + STATUS_BAR_Y_SHIFT, 98, 15);
|
if(selected) {
|
||||||
|
elements_bold_rounded_frame(canvas, x - 1, y - 1, w + 1, h + 1);
|
||||||
|
} else {
|
||||||
|
canvas_draw_rframe(canvas, x, y, w, h, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(toggle) {
|
||||||
|
if(enabled) {
|
||||||
|
canvas_draw_rbox(canvas, x, y, w, h, 5);
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
}
|
||||||
|
canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon);
|
||||||
|
if(enabled) {
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon);
|
||||||
|
canvas_set_color(canvas, ColorXOR);
|
||||||
|
canvas_draw_box(canvas, x + 1, y + 1 + value, w - 2, h - 2 - value);
|
||||||
|
if(selected) {
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
} else {
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
}
|
||||||
|
canvas_draw_dot(canvas, x + 1, y + 1);
|
||||||
|
canvas_draw_dot(canvas, x + 1, y + h - 2);
|
||||||
|
canvas_draw_dot(canvas, x + w - 2, y + 1);
|
||||||
|
canvas_draw_dot(canvas, x + w - 2, y + h - 2);
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
canvas_draw_rframe(canvas, x, y, w, h, 5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,47 +159,113 @@ 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 consumed = false;
|
bool consumed = true;
|
||||||
bool update = false;
|
|
||||||
|
|
||||||
with_view_model(
|
with_view_model(
|
||||||
lock_menu->view,
|
lock_menu->view,
|
||||||
DesktopLockMenuViewModel * model,
|
DesktopLockMenuViewModel * model,
|
||||||
{
|
{
|
||||||
if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) {
|
if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) {
|
||||||
if(event->key == InputKeyUp) {
|
if(model->idx < 6) {
|
||||||
if(model->idx == 0) {
|
if(event->key == InputKeyUp || event->key == InputKeyDown) {
|
||||||
model->idx = DesktopLockMenuIndexTotalCount - 1;
|
if(model->idx % 2) {
|
||||||
} else {
|
model->idx--;
|
||||||
model->idx = CLAMP(model->idx - 1, DesktopLockMenuIndexTotalCount - 1, 0);
|
} 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
update = true;
|
} else {
|
||||||
consumed = true;
|
if(event->key == InputKeyLeft) {
|
||||||
} else if(event->key == InputKeyDown) {
|
model->idx--;
|
||||||
if(model->idx == DesktopLockMenuIndexTotalCount - 1) {
|
} else if(event->key == InputKeyRight) {
|
||||||
model->idx = 0;
|
if(model->idx >= 7) {
|
||||||
} else {
|
model->idx = 1;
|
||||||
model->idx = CLAMP(model->idx + 1, DesktopLockMenuIndexTotalCount - 1, 0);
|
} else {
|
||||||
|
model->idx++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
update = true;
|
|
||||||
consumed = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
idx = model->idx;
|
idx = model->idx;
|
||||||
},
|
},
|
||||||
update);
|
true);
|
||||||
|
|
||||||
if(event->key == InputKeyOk) {
|
UNUSED(idx);
|
||||||
if((idx == DesktopLockMenuIndexLock) && (event->type == InputTypeShort)) {
|
if(event->key == InputKeyBack) {
|
||||||
lock_menu->callback(DesktopLockMenuEventLock, lock_menu->context);
|
consumed = false;
|
||||||
} else if((idx == DesktopLockMenuIndexPinLock) && (event->type == InputTypeShort)) {
|
} else if(event->type == InputTypeShort) {
|
||||||
lock_menu->callback(DesktopLockMenuEventPinLock, lock_menu->context);
|
if(event->key == InputKeyOk) {
|
||||||
} else if((idx == DesktopLockMenuIndexPinLockShutdown) && (event->type == InputTypeShort)) {
|
DesktopEvent event = 0;
|
||||||
lock_menu->callback(DesktopLockMenuEventPinLockShutdown, lock_menu->context);
|
switch(idx) {
|
||||||
} else if((idx == DesktopLockMenuIndexXtremeSettings) && (event->type == InputTypeShort)) {
|
case DesktopLockMenuIndexLefthandedMode:
|
||||||
lock_menu->callback(DesktopLockMenuEventXtremeSettings, lock_menu->context);
|
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) {
|
||||||
|
furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient);
|
||||||
|
} else {
|
||||||
|
furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexSettings:
|
||||||
|
event = DesktopLockMenuEventSettings;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexDarkMode:
|
||||||
|
XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode;
|
||||||
|
XTREME_SETTINGS_SAVE();
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexLock:
|
||||||
|
event = DesktopLockMenuEventLock;
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexBluetooth:
|
||||||
|
lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled;
|
||||||
|
bt_settings_save(&lock_menu->bt->bt_settings);
|
||||||
|
break;
|
||||||
|
case DesktopLockMenuIndexXtreme:
|
||||||
|
event = DesktopLockMenuEventXtreme;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(event) {
|
||||||
|
lock_menu->callback(event, lock_menu->context);
|
||||||
|
}
|
||||||
|
} else if(idx >= 6) {
|
||||||
|
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);
|
||||||
|
notification_message_save_settings(lock_menu->notification);
|
||||||
|
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);
|
||||||
|
notification_message_save_settings(lock_menu->notification);
|
||||||
|
notification_message(lock_menu->notification, &sequence_note_c);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
consumed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return consumed;
|
return consumed;
|
||||||
@@ -134,8 +273,15 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) {
|
|||||||
|
|
||||||
DesktopLockMenuView* desktop_lock_menu_alloc() {
|
DesktopLockMenuView* desktop_lock_menu_alloc() {
|
||||||
DesktopLockMenuView* lock_menu = malloc(sizeof(DesktopLockMenuView));
|
DesktopLockMenuView* lock_menu = malloc(sizeof(DesktopLockMenuView));
|
||||||
|
lock_menu->bt = furi_record_open(RECORD_BT);
|
||||||
|
lock_menu->notification = furi_record_open(RECORD_NOTIFICATION);
|
||||||
lock_menu->view = view_alloc();
|
lock_menu->view = view_alloc();
|
||||||
view_allocate_model(lock_menu->view, ViewModelTypeLocking, sizeof(DesktopLockMenuViewModel));
|
view_allocate_model(lock_menu->view, ViewModelTypeLocking, sizeof(DesktopLockMenuViewModel));
|
||||||
|
with_view_model(
|
||||||
|
lock_menu->view,
|
||||||
|
DesktopLockMenuViewModel * model,
|
||||||
|
{ model->lock_menu = lock_menu; },
|
||||||
|
false);
|
||||||
view_set_context(lock_menu->view, lock_menu);
|
view_set_context(lock_menu->view, lock_menu);
|
||||||
view_set_draw_callback(lock_menu->view, (ViewDrawCallback)desktop_lock_menu_draw_callback);
|
view_set_draw_callback(lock_menu->view, (ViewDrawCallback)desktop_lock_menu_draw_callback);
|
||||||
view_set_input_callback(lock_menu->view, desktop_lock_menu_input_callback);
|
view_set_input_callback(lock_menu->view, desktop_lock_menu_input_callback);
|
||||||
@@ -147,5 +293,7 @@ void desktop_lock_menu_free(DesktopLockMenuView* lock_menu_view) {
|
|||||||
furi_assert(lock_menu_view);
|
furi_assert(lock_menu_view);
|
||||||
|
|
||||||
view_free(lock_menu_view->view);
|
view_free(lock_menu_view->view);
|
||||||
|
furi_record_close(RECORD_NOTIFICATION);
|
||||||
|
furi_record_close(RECORD_BT);
|
||||||
free(lock_menu_view);
|
free(lock_menu_view);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <gui/view.h>
|
#include <gui/view.h>
|
||||||
#include "desktop_events.h"
|
#include "desktop_events.h"
|
||||||
|
#include <bt/bt_service/bt.h>
|
||||||
|
#include <bt/bt_service/bt_i.h>
|
||||||
|
|
||||||
#define HINT_TIMEOUT 2
|
#define HINT_TIMEOUT 2
|
||||||
|
|
||||||
@@ -12,12 +14,15 @@ typedef void (*DesktopLockMenuViewCallback)(DesktopEvent event, void* context);
|
|||||||
struct DesktopLockMenuView {
|
struct DesktopLockMenuView {
|
||||||
View* view;
|
View* view;
|
||||||
DesktopLockMenuViewCallback callback;
|
DesktopLockMenuViewCallback callback;
|
||||||
|
NotificationApp* notification;
|
||||||
|
Bt* bt;
|
||||||
void* context;
|
void* context;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t idx;
|
uint8_t idx;
|
||||||
bool pin_is_set;
|
bool pin_is_set;
|
||||||
|
DesktopLockMenuView* lock_menu;
|
||||||
} DesktopLockMenuViewModel;
|
} DesktopLockMenuViewModel;
|
||||||
|
|
||||||
void desktop_lock_menu_set_callback(
|
void desktop_lock_menu_set_callback(
|
||||||
|
|||||||
BIN
assets/icons/ControlCenter/CC_Bluetooth_16x16.png
Normal file
|
After Width: | Height: | Size: 639 B |
BIN
assets/icons/ControlCenter/CC_DarkMode_16x16.png
Normal file
|
After Width: | Height: | Size: 635 B |
BIN
assets/icons/ControlCenter/CC_LefthandedMode_16x16.png
Normal file
|
After Width: | Height: | Size: 638 B |
BIN
assets/icons/ControlCenter/CC_Lock_16x16.png
Normal file
|
After Width: | Height: | Size: 622 B |
BIN
assets/icons/ControlCenter/CC_Settings_16x16.png
Normal file
|
After Width: | Height: | Size: 666 B |
BIN
assets/icons/ControlCenter/CC_Xtreme_16x16.png
Normal file
|
After Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 564 B |
|
Before Width: | Height: | Size: 570 B |