#pragma once #include "desktop.h" #include "animations/animation_manager.h" #include "views/desktop_view_pin_timeout.h" #include "views/desktop_view_pin_input.h" #include "views/desktop_view_locked.h" #include "views/desktop_view_main.h" #include "views/desktop_view_lock_menu.h" #include "views/desktop_view_debug.h" #include "views/desktop_view_slideshow.h" #include #include #include #include #include #include #include #include #include #define STATUS_BAR_Y_SHIFT 13 typedef enum { DesktopViewIdMain, DesktopViewIdLockMenu, DesktopViewIdLocked, DesktopViewIdDebug, DesktopViewIdPopup, DesktopViewIdPinInput, DesktopViewIdPinTimeout, DesktopViewIdSlideshow, DesktopViewIdTotal, } DesktopViewId; typedef struct { uint8_t hour; uint8_t minute; bool format_12; // 1 - 12 hour, 0 - 24H } DesktopClock; struct Desktop { // Scene FuriThread* scene_thread; // GUI Gui* gui; ViewDispatcher* view_dispatcher; SceneManager* scene_manager; Popup* popup; DesktopLockMenuView* lock_menu; DesktopDebugView* debug_view; DesktopViewLocked* locked_view; DesktopMainView* main_view; DesktopViewPinTimeout* pin_timeout_view; DesktopSlideshowView* slideshow_view; ViewStack* main_view_stack; ViewStack* locked_view_stack; DesktopSettings settings; DesktopViewPinInput* pin_input_view; ViewPort* lock_icon_viewport; ViewPort* dummy_mode_icon_viewport; ViewPort* clock_viewport; ViewPort* stealth_mode_icon_viewport; AnimationManager* animation_manager; Loader* loader; NotificationApp* notification; FuriPubSubSubscription* app_start_stop_subscription; FuriPubSub* input_events_pubsub; FuriPubSubSubscription* input_events_subscription; FuriTimer* auto_lock_timer; FuriTimer* update_clock_timer; FuriPubSub* status_pubsub; DesktopClock clock; bool in_transition : 1; bool locked : 1; FuriSemaphore* animation_semaphore; }; Desktop* desktop_alloc(void); void desktop_free(Desktop* desktop); void desktop_lock(Desktop* desktop); void desktop_unlock(Desktop* desktop); void desktop_set_dummy_mode_state(Desktop* desktop, bool enabled); void desktop_set_stealth_mode_state(Desktop* desktop, bool enabled);