#include "ui/apps/travel/app.h" #include "ui/apps/travel/ui/main_handler.h" #include "ui/apps/travel/ui/settings_handler.h" #include "common/system_context.h" #include "esp_log.h" static const char* TAG = "TravelApp"; TravelApp::TravelApp() : main_ui_handler_(nullptr) , settings_ui_handler_(nullptr) , current_page_(Page::MAIN) , setting_handler_(nullptr) , network_handler_(nullptr) , interaction_handler_(nullptr) { setting_handler_ = std::make_unique( std::make_unique(TravelApp::NVS_NAMESPACE) ); } TravelApp::~TravelApp() { } esp_err_t TravelApp::init(lv_obj_t* container, InteractionHandler* interaction_handler) { ESP_LOGI(TAG, "Initializing Travel app"); container_ = container; interaction_handler_ = interaction_handler; // Initialize storage setting_handler_->init(nullptr); // Load saved settings setting_handler_->load_settings(); // Get network handler from system context network_handler_ = SystemContext::instance().get_network_handler(); // Create main UI handler main_ui_handler_ = std::make_unique(); main_ui_handler_->init(container, interaction_handler_, setting_handler_.get(), network_handler_); // Register settings button callback main_ui_handler_->register_on_settings_button_clicked(on_settings_button_clicked_static, this); current_page_ = Page::MAIN; return ESP_OK; } esp_err_t TravelApp::deinit() { ESP_LOGI(TAG, "Deinitializing Travel app"); // Clean up UI handlers if (settings_ui_handler_) { settings_ui_handler_->deinit(); settings_ui_handler_.reset(); } if (main_ui_handler_) { main_ui_handler_->deinit(); main_ui_handler_.reset(); } return ESP_OK; } std::string TravelApp::get_name() const { return "Travel"; } bool TravelApp::on_back_button_pressed() { // If on settings page, go back to main page if (current_page_ == Page::SETTINGS) { // Clean up settings handler if (settings_ui_handler_) { settings_ui_handler_->deinit(); settings_ui_handler_.reset(); } // Reload settings in case they were updated setting_handler_->load_settings(); // Recreate main UI handler with updated settings if (!main_ui_handler_) { main_ui_handler_ = std::make_unique(); main_ui_handler_->init(container_, interaction_handler_, setting_handler_.get(), network_handler_); main_ui_handler_->register_on_settings_button_clicked(on_settings_button_clicked_static, this); } current_page_ = Page::MAIN; return true; } // Let system handle back (return to app icons) return false; } void TravelApp::set_network_handler(NetworkHandler* network_handler) { network_handler_ = network_handler; } // ============================================================================ // Private Methods // ============================================================================ void TravelApp::show_settings_page() { ESP_LOGI(TAG, "Showing settings page"); // Hide main UI handler if (main_ui_handler_) { main_ui_handler_->deinit(); main_ui_handler_.reset(); } // Create settings UI handler settings_ui_handler_ = std::make_unique(); settings_ui_handler_->init(container_, interaction_handler_, setting_handler_.get(), network_handler_); current_page_ = Page::SETTINGS; } // ============================================================================ // Static Callbacks // ============================================================================ void TravelApp::on_settings_button_clicked_static(void* user_data) { TravelApp* app = static_cast(user_data); if (app) { app->show_settings_page(); } }