#pragma once #include "ui/apps/app.h" #include "ui/apps/iotdis/settings/settings_handler.h" #include "ui/apps/iotdis/ui/main_handler.h" #include "ui/apps/iotdis/ui/settings_handler.h" #include "io/nvs_handler.h" #include #include // Forward declarations class MainUIHandler; class SettingsUIHandler; /** * @brief IotDis (Discord Integration) App * * Manages Discord voice state monitoring and control via UDP bridge. * Features: * - Real-time voice state monitoring (muted/unmuted) * - Manual mute/unmute control * - Settings for bridge IP/port configuration * - Connection error detection and notification * - NVS storage for persistent settings */ class IotDisApp : public UIApp { public: IotDisApp(); ~IotDisApp() override; esp_err_t init(lv_obj_t* container, InteractionHandler* interaction_handler) override; esp_err_t deinit(void) override; std::string get_name(void) const override; bool on_back_button_pressed(void) override; private: // UI handlers std::unique_ptr main_ui_handler_; std::unique_ptr settings_ui_handler_; // Current page tracking enum class Page { MAIN, SETTINGS }; Page current_page_; // Settings handler (shared across handlers) std::unique_ptr setting_handler_; // Interaction handler (not owned) InteractionHandler* interaction_handler_; static constexpr const char* NVS_NAMESPACE = "discord_app"; // Private methods void show_settings_page(); // UI callback forwarders static void on_settings_button_clicked_static(lv_event_t* e); };