diff options
Diffstat (limited to 'src/displayapp/DisplayApp.cpp')
| -rw-r--r-- | src/displayapp/DisplayApp.cpp | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 682ea12c..a195361d 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -50,6 +50,7 @@ #include "displayapp/screens/settings/SettingBluetooth.h" #include "libs/lv_conf.h" +#include "UserApps.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -96,7 +97,12 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, touchHandler {touchHandler}, filesystem {filesystem}, lvgl {lcd, filesystem}, - timer(this, TimerCallback) { + timer(this, TimerCallback), + controllers{ + batteryController, bleController, dateTimeController, notificationManager, heartRateController, + settingsController, motorController, motionController, alarmController, brightnessController, + nullptr, filesystem, timer, nullptr, this, lvgl, nullptr, nullptr} + { } void DisplayApp::Start(System::BootErrors error) { @@ -402,14 +408,21 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio SetFullRefresh(direction); switch (app) { - case Apps::Launcher: - currentScreen = - std::make_unique<Screens::ApplicationList>(this, settingsController, batteryController, bleController, dateTimeController, filesystem); - break; - case Apps::Motion: - // currentScreen = std::make_unique<Screens::Motion>(motionController); - // break; - case Apps::None: + case Apps::Launcher: { + std::array<Screens::Tile::Applications, UserAppTypes::Count> apps; + int i = 0; + for (const auto& userApp : userApps) { + apps[i++] = Screens::Tile::Applications {userApp.icon, userApp.app, true}; + } + currentScreen = std::make_unique<Screens::ApplicationList>(this, + settingsController, + batteryController, + bleController, + dateTimeController, + filesystem, + std::move(apps)); + } + break; case Apps::Clock: currentScreen = std::make_unique<Screens::Clock>(dateTimeController, batteryController, @@ -421,7 +434,6 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio systemTask->nimble().weather(), filesystem); break; - case Apps::Error: currentScreen = std::make_unique<Screens::Error>(bootError); break; @@ -453,14 +465,6 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio *systemTask, Screens::Notifications::Modes::Preview); break; - case Apps::Timer: - currentScreen = std::make_unique<Screens::Timer>(timer); - break; - case Apps::Alarm: - currentScreen = std::make_unique<Screens::Alarm>(alarmController, settingsController.GetClockType(), *systemTask, motorController); - break; - - // Settings case Apps::QuickSettings: currentScreen = std::make_unique<Screens::QuickSettings>(this, batteryController, @@ -516,38 +520,25 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio case Apps::FlashLight: currentScreen = std::make_unique<Screens::FlashLight>(*systemTask, brightnessController); break; - case Apps::StopWatch: - currentScreen = std::make_unique<Screens::StopWatch>(*systemTask); - break; - case Apps::Twos: - currentScreen = std::make_unique<Screens::Twos>(); - break; - case Apps::Paint: - currentScreen = std::make_unique<Screens::InfiniPaint>(lvgl, motorController); - break; - case Apps::Paddle: - currentScreen = std::make_unique<Screens::Paddle>(lvgl); - break; - case Apps::Music: - currentScreen = std::make_unique<Screens::Music>(systemTask->nimble().music()); - break; - case Apps::Navigation: - currentScreen = std::make_unique<Screens::Navigation>(systemTask->nimble().navigation()); - break; - case Apps::HeartRate: - currentScreen = std::make_unique<Screens::HeartRate>(heartRateController, *systemTask); - break; - case Apps::Metronome: - currentScreen = std::make_unique<Screens::Metronome>(motorController, *systemTask); - break; - /* Weather debug app - case Apps::Weather: - currentScreen = std::make_unique<Screens::Weather>(this, systemTask->nimble().weather()); - break; - */ - case Apps::Steps: - currentScreen = std::make_unique<Screens::Steps>(motionController, settingsController); + default: { + const auto* d = std::find_if(userApps.begin(), userApps.end(), [app](const AppDescription& appDescription) { + return appDescription.app == app; + }); + if (d != userApps.end()) + currentScreen.reset(d->create(controllers)); + else { + currentScreen = std::make_unique<Screens::Clock>(dateTimeController, + batteryController, + bleController, + notificationManager, + settingsController, + heartRateController, + motionController, + systemTask->nimble().weather(), + filesystem); + } break; + } } currentApp = app; } @@ -605,6 +596,19 @@ void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) { void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) { this->systemTask = systemTask; + this->controllers.systemTask = systemTask; +} + +void DisplayApp::Register(Pinetime::Controllers::WeatherService* weatherService) { + this->controllers.weatherController = weatherService; +} + +void DisplayApp::Register(Pinetime::Controllers::MusicService* musicService) { + this->controllers.musicService = musicService; +} + +void DisplayApp::Register(Pinetime::Controllers::NavigationService* NavigationService) { + this->controllers.navigationService = NavigationService; } void DisplayApp::ApplyBrightness() { |
