#include "app_manager.h" #include namespace roro { AppManager::AppManager(App& launcher) : launcher_(launcher), foreground_(&launcher) {} void AppManager::registerApp(const AppInfo& info) { apps_.push_back(info); } std::vector AppManager::visibleApps() const { std::vector visible; for (auto& info : apps_) if (!info.hidden) visible.push_back(&info); return visible; } void AppManager::begin() { foreground_ = &launcher_; launcher_.onEnter(); redraw_ = true; } bool AppManager::open(const char* id) { for (auto& info : apps_) { if (std::strcmp(info.id, id) == 0) { switchTo(*info.app); return true; } } return false; } void AppManager::home() { switchTo(launcher_); } void AppManager::handleKey(const KeyEvent& event) { if (event.key == Key::Home) { home(); return; } bool consumed = foreground_->onKey(event); if (!consumed && event.key == Key::Back) home(); } bool AppManager::takeRedraw() { bool r = redraw_ | foreground_->consumeRedraw(); redraw_ = false; return r; } void AppManager::switchTo(App& app) { if (&app == foreground_) return; foreground_->onExit(); foreground_ = &app; foreground_->onEnter(); redraw_ = true; } } // namespace roro