/* * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD * * SPDX-License-Identifier: MIT */ #include "app_launcher.h" #include #include #include #include #include using namespace mooncake; void AppLauncher::onLauncherCreate() { mclog::tagInfo(getAppInfo().name, "on create"); // 打开自己 open(); } void AppLauncher::onLauncherOpen() { mclog::tagInfo(getAppInfo().name, "on open"); LvglLockGuard lock; _view = std::make_unique(); _view->init(getAppProps()); _view->onAppClicked = [&](int appID) { mclog::tagInfo(getAppInfo().name, "handle open app, app id: {}", appID); openApp(appID); }; } void AppLauncher::onLauncherRunning() { LvglLockGuard lock; _view->update(); screensaver_update(); GetStackChan().update(); } void AppLauncher::onLauncherClose() { mclog::tagInfo(getAppInfo().name, "on close"); LvglLockGuard lock; _view.reset(); } void AppLauncher::onLauncherDestroy() { mclog::tagInfo(getAppInfo().name, "on close"); } void AppLauncher::screensaver_update() { const uint32_t SCREENSAVER_TIMEOUT_MS = 30000; uint32_t idle_time = lv_display_get_inactive_time(NULL); if (idle_time >= SCREENSAVER_TIMEOUT_MS) { if (!_screensaver) { _screensaver = std::make_unique(); _screensaver->init(); } } else if (_screensaver) { _screensaver.reset(); } // Update in 30ms interval if (_screensaver && GetHAL().millis() - _screensaver_timecount > 30) { _screensaver_timecount = GetHAL().millis(); _screensaver->update(); } }