aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp')
-rw-r--r--src/displayapp/Apps.h29
-rw-r--r--src/displayapp/Controllers.h51
-rw-r--r--src/displayapp/DisplayApp.cpp102
-rw-r--r--src/displayapp/DisplayApp.h5
-rw-r--r--src/displayapp/UserApps.h36
-rw-r--r--src/displayapp/screens/Alarm.cpp4
-rw-r--r--src/displayapp/screens/Alarm.h26
-rw-r--r--src/displayapp/screens/ApplicationList.cpp24
-rw-r--r--src/displayapp/screens/ApplicationList.h38
-rw-r--r--src/displayapp/screens/Clock.h11
-rw-r--r--src/displayapp/screens/HeartRate.h9
-rw-r--r--src/displayapp/screens/InfiniPaint.h11
-rw-r--r--src/displayapp/screens/Metronome.h9
-rw-r--r--src/displayapp/screens/Motion.h10
-rw-r--r--src/displayapp/screens/Music.h11
-rw-r--r--src/displayapp/screens/Navigation.h11
-rw-r--r--src/displayapp/screens/Paddle.h11
-rw-r--r--src/displayapp/screens/Steps.h11
-rw-r--r--src/displayapp/screens/StopWatch.h89
-rw-r--r--src/displayapp/screens/Tile.cpp1
-rw-r--r--src/displayapp/screens/Timer.cpp2
-rw-r--r--src/displayapp/screens/Timer.h64
-rw-r--r--src/displayapp/screens/Twos.h9
-rw-r--r--src/displayapp/screens/Weather.h13
24 files changed, 420 insertions, 167 deletions
diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h
index f253bc03..d96e6ea7 100644
--- a/src/displayapp/Apps.h
+++ b/src/displayapp/Apps.h
@@ -1,5 +1,5 @@
#pragma once
-
+#include <cstddef>
namespace Pinetime {
namespace Applications {
enum class Apps {
@@ -37,7 +37,32 @@ namespace Pinetime {
SettingChimes,
SettingShakeThreshold,
SettingBluetooth,
- Error
+ Error,
+ Weather
+ };
+ template <Apps>
+ struct AppTraits {};
+
+ template<Apps ...As>
+ struct TypeList {
+ static constexpr size_t Count = sizeof...(As);
};
+
+ using UserAppTypes = TypeList<Apps::Alarm,
+ Apps::HeartRate,
+ Apps::Paint,
+ Apps::Metronome,
+ Apps::Music,
+ Apps::Navigation,
+ Apps::Paddle,
+ Apps::Steps,
+ Apps::StopWatch,
+ Apps::Timer,
+ Apps::Twos
+ /*
+ Apps::Weather,
+ Apps::Motion
+ */
+ >;
}
}
diff --git a/src/displayapp/Controllers.h b/src/displayapp/Controllers.h
new file mode 100644
index 00000000..cef98986
--- /dev/null
+++ b/src/displayapp/Controllers.h
@@ -0,0 +1,51 @@
+#pragma once
+namespace Pinetime {
+ namespace Applications {
+ class DisplayApp;
+ }
+ namespace Components {
+ class LittleVgl;
+ }
+ namespace Controllers {
+ class Battery;
+ class Ble;
+ class DateTime;
+ class NotificationManager;
+ class HeartRateController;
+ class Settings;
+ class MotorController;
+ class MotionController;
+ class AlarmController;
+ class BrightnessController;
+ class WeatherService;
+ class FS;
+ class Timer;
+ class MusicService;
+ class NavigationService;
+ }
+ namespace System {
+ class SystemTask;
+ }
+ namespace Applications {
+ struct AppControllers {
+ const Pinetime::Controllers::Battery& batteryController;
+ const Pinetime::Controllers::Ble& bleController;
+ Pinetime::Controllers::DateTime& dateTimeController;
+ Pinetime::Controllers::NotificationManager& notificationManager;
+ Pinetime::Controllers::HeartRateController& heartRateController;
+ Pinetime::Controllers::Settings& settingsController;
+ Pinetime::Controllers::MotorController& motorController;
+ Pinetime::Controllers::MotionController& motionController;
+ Pinetime::Controllers::AlarmController& alarmController;
+ Pinetime::Controllers::BrightnessController& brightnessController;
+ Pinetime::Controllers::WeatherService* weatherController;
+ Pinetime::Controllers::FS& filesystem;
+ Pinetime::Controllers::Timer& timer;
+ Pinetime::System::SystemTask* systemTask;
+ Pinetime::Applications::DisplayApp* displayApp;
+ Pinetime::Components::LittleVgl& lvgl;
+ Pinetime::Controllers::MusicService* musicService;
+ Pinetime::Controllers::NavigationService* navigationService;
+ };
+ }
+} \ No newline at end of file
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() {
diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h
index f537651d..7dbac850 100644
--- a/src/displayapp/DisplayApp.h
+++ b/src/displayapp/DisplayApp.h
@@ -20,6 +20,7 @@
#include "BootErrors.h"
#include "utility/StaticStack.h"
+#include "displayapp/Controllers.h"
namespace Pinetime {
@@ -73,6 +74,9 @@ namespace Pinetime {
void SetFullRefresh(FullRefreshDirections direction);
void Register(Pinetime::System::SystemTask* systemTask);
+ void Register(Pinetime::Controllers::WeatherService* weatherService);
+ void Register(Pinetime::Controllers::MusicService* musicService);
+ void Register(Pinetime::Controllers::NavigationService* NavigationService);
private:
Pinetime::Drivers::St7789& lcd;
@@ -96,6 +100,7 @@ namespace Pinetime {
Pinetime::Components::LittleVgl lvgl;
Pinetime::Controllers::Timer timer;
+ AppControllers controllers;
TaskHandle_t taskHandle;
States state = States::Running;
diff --git a/src/displayapp/UserApps.h b/src/displayapp/UserApps.h
new file mode 100644
index 00000000..d0165cf9
--- /dev/null
+++ b/src/displayapp/UserApps.h
@@ -0,0 +1,36 @@
+#pragma once
+#include "Apps.h"
+#include "Controllers.h"
+
+#include "displayapp/screens/Alarm.h"
+#include "displayapp/screens/Timer.h"
+#include "displayapp/screens/Twos.h"
+#include "displayapp/screens/Tile.h"
+#include "displayapp/screens/ApplicationList.h"
+#include "displayapp/screens/Clock.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class Screen;
+ }
+
+ struct AppDescription {
+ Apps app;
+ const char* icon;
+ Screens::Screen* (*create)(AppControllers& controllers);
+ };
+
+ template <Apps t>
+ consteval AppDescription CreateAppDescription() {
+ return {AppTraits<t>::app, AppTraits<t>::icon, &AppTraits<t>::Create};
+ }
+
+ template <template<Apps...> typename T, Apps ...ts>
+ consteval std::array<AppDescription, sizeof...(ts)> CreateAppDescriptions(T<ts...>) {
+ return {CreateAppDescription<ts>()...};
+ }
+
+ constexpr auto userApps = CreateAppDescriptions(UserAppTypes {});
+ }
+}
diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp
index 4e6ce797..cbc702f3 100644
--- a/src/displayapp/screens/Alarm.cpp
+++ b/src/displayapp/screens/Alarm.cpp
@@ -19,6 +19,10 @@
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/Symbols.h"
#include "displayapp/InfiniTimeTheme.h"
+#include "components/settings/Settings.h"
+#include "components/alarm/AlarmController.h"
+#include "components/motor/MotorController.h"
+#include "systemtask/SystemTask.h"
using namespace Pinetime::Applications::Screens;
using Pinetime::Controllers::AlarmController;
diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h
index 91177366..efa38eb7 100644
--- a/src/displayapp/screens/Alarm.h
+++ b/src/displayapp/screens/Alarm.h
@@ -17,21 +17,22 @@
*/
#pragma once
+#include "displayapp/Apps.h"
+#include "components/settings/Settings.h"
#include "displayapp/screens/Screen.h"
-#include "systemtask/SystemTask.h"
-#include "displayapp/LittleVgl.h"
-#include "components/alarm/AlarmController.h"
#include "displayapp/widgets/Counter.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
namespace Screens {
class Alarm : public Screen {
public:
- Alarm(Controllers::AlarmController& alarmController,
- Controllers::Settings::ClockType clockType,
- System::SystemTask& systemTask,
- Controllers::MotorController& motorController);
+ explicit Alarm(Controllers::AlarmController& alarmController,
+ Controllers::Settings::ClockType clockType,
+ System::SystemTask& systemTask,
+ Controllers::MotorController& motorController);
~Alarm() override;
void SetAlerting();
void OnButtonEvent(lv_obj_t* obj, lv_event_t event);
@@ -63,6 +64,15 @@ namespace Pinetime {
Widgets::Counter hourCounter = Widgets::Counter(0, 23, jetbrains_mono_76);
Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
};
+ }
+ template<>
+ struct AppTraits<Apps::Alarm> {
+ static constexpr Apps app = Apps::Alarm;
+ static constexpr const char* icon = Screens::Symbols::clock;
+ static Screens::Screen *Create(AppControllers& controllers) { return new Screens::Alarm(controllers.alarmController,
+ controllers.settingsController.GetClockType(),
+ *controllers.systemTask,
+ controllers.motorController); };
};
- };
+ }
}
diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp
index 6014cf53..e5e26098 100644
--- a/src/displayapp/screens/ApplicationList.cpp
+++ b/src/displayapp/screens/ApplicationList.cpp
@@ -1,8 +1,9 @@
#include "displayapp/screens/ApplicationList.h"
+#include "displayapp/screens/Tile.h"
#include <lvgl/lvgl.h>
#include <functional>
-#include "displayapp/Apps.h"
-#include "displayapp/DisplayApp.h"
+#include <algorithm>
+#include "components/settings/Settings.h"
using namespace Pinetime::Applications::Screens;
@@ -16,18 +17,20 @@ auto ApplicationList::CreateScreenList() const {
return screens;
}
-ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp* app,
+ApplicationList::ApplicationList(DisplayApp* app,
Pinetime::Controllers::Settings& settingsController,
const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController,
- Pinetime::Controllers::FS& filesystem)
+ Pinetime::Controllers::FS& filesystem,
+ std::array<Tile::Applications, UserAppTypes::Count>&& apps)
: app {app},
settingsController {settingsController},
batteryController {batteryController},
bleController {bleController},
dateTimeController {dateTimeController},
filesystem{filesystem},
+ apps{std::move(apps)},
screens {app, settingsController.GetAppMenu(), CreateScreenList(), Screens::ScreenListModes::UpDown} {
}
@@ -40,9 +43,14 @@ bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
}
std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) const {
- std::array<Tile::Applications, appsPerScreen> apps;
- for (int i = 0; i < appsPerScreen; i++) {
- apps[i] = applications[screenNum * appsPerScreen + i];
+ std::array<Tile::Applications, appsPerScreen> pageApps;
+
+ for(int i = 0; i < appsPerScreen; i++) {
+ if(i+(screenNum * appsPerScreen) >= apps.size()) {
+ pageApps[i] = {"", Pinetime::Applications::Apps::None, false};
+ } else {
+ pageApps[i] = apps[i + (screenNum * appsPerScreen)];
+ }
}
return std::make_unique<Screens::Tile>(screenNum,
@@ -52,5 +60,5 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) co
batteryController,
bleController,
dateTimeController,
- apps);
+ pageApps);
}
diff --git a/src/displayapp/screens/ApplicationList.h b/src/displayapp/screens/ApplicationList.h
index 371ee710..2ad9c7c7 100644
--- a/src/displayapp/screens/ApplicationList.h
+++ b/src/displayapp/screens/ApplicationList.h
@@ -2,15 +2,12 @@
#include <array>
#include <memory>
-
-#include "displayapp/screens/Screen.h"
-#include "displayapp/screens/ScreenList.h"
-#include "components/datetime/DateTimeController.h"
-#include "components/settings/Settings.h"
-#include "components/battery/BatteryController.h"
-#include "displayapp/screens/Symbols.h"
-#include "displayapp/screens/Tile.h"
-#include "displayapp/screens/Navigation.h"
+#include "displayapp/Apps.h"
+#include "Screen.h"
+#include "ScreenList.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
+#include "Tile.h"
namespace Pinetime {
namespace Applications {
@@ -22,7 +19,8 @@ namespace Pinetime {
const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController,
- Pinetime::Controllers::FS& filesystem);
+ Pinetime::Controllers::FS& filesystem,
+ std::array<Tile::Applications, UserAppTypes::Count>&& apps);
~ApplicationList() override;
bool OnTouchEvent(TouchEvents event) override;
@@ -36,29 +34,13 @@ namespace Pinetime {
const Pinetime::Controllers::Ble& bleController;
Controllers::DateTime& dateTimeController;
Pinetime::Controllers::FS& filesystem;
+ std::array<Tile::Applications, UserAppTypes::Count> apps;
static constexpr int appsPerScreen = 6;
// Increment this when more space is needed
- static constexpr int nScreens = 2;
-
- std::array<Tile::Applications, appsPerScreen * nScreens> applications {{
- {Symbols::stopWatch, Apps::StopWatch, true},
- {Symbols::clock, Apps::Alarm, true},
- {Symbols::hourGlass, Apps::Timer, true},
- {Symbols::shoe, Apps::Steps, true},
- {Symbols::heartBeat, Apps::HeartRate, true},
- {Symbols::music, Apps::Music, true},
-
- {Symbols::paintbrush, Apps::Paint, true},
- {Symbols::paddle, Apps::Paddle, true},
- {"2", Apps::Twos, true},
- {Symbols::drum, Apps::Metronome, true},
- {Symbols::map, Apps::Navigation, Applications::Screens::Navigation::IsAvailable(filesystem)},
- {Symbols::none, Apps::None, false},
+ static constexpr int nScreens = (UserAppTypes::Count/appsPerScreen)+1;
- // {"M", Apps::Motion},
- }};
ScreenList<nScreens> screens;
};
}
diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h
index f3591f43..e67c0260 100644
--- a/src/displayapp/screens/Clock.h
+++ b/src/displayapp/screens/Clock.h
@@ -1,13 +1,12 @@
#pragma once
-#include <lvgl/src/lv_core/lv_obj.h>
#include <chrono>
#include <cstdint>
#include <memory>
-#include <components/heartrate/HeartRateController.h>
+#include "displayapp/Controllers.h"
#include "displayapp/screens/Screen.h"
-#include "components/datetime/DateTimeController.h"
-#include "components/ble/weather/WeatherService.h"
+#include "displayapp/Apps.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -16,6 +15,10 @@ namespace Pinetime {
class Ble;
class NotificationManager;
class MotionController;
+ class DateTime;
+ class HeartRateController;
+ class WeatherService;
+ class FS;
}
namespace Applications {
diff --git a/src/displayapp/screens/HeartRate.h b/src/displayapp/screens/HeartRate.h
index 78ae63db..85da8dee 100644
--- a/src/displayapp/screens/HeartRate.h
+++ b/src/displayapp/screens/HeartRate.h
@@ -4,6 +4,7 @@
#include <chrono>
#include "displayapp/screens/Screen.h"
#include "systemtask/SystemTask.h"
+#include "Symbols.h"
#include <lvgl/src/lv_core/lv_style.h>
#include <lvgl/src/lv_core/lv_obj.h>
@@ -37,5 +38,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::HeartRate> {
+ static constexpr Apps app = Apps::HeartRate;
+ static constexpr const char* icon = Screens::Symbols::heartBeat;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::HeartRate(controllers.heartRateController, *controllers.systemTask);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/InfiniPaint.h b/src/displayapp/screens/InfiniPaint.h
index ec184c44..a25ace55 100644
--- a/src/displayapp/screens/InfiniPaint.h
+++ b/src/displayapp/screens/InfiniPaint.h
@@ -5,6 +5,9 @@
#include <algorithm> // std::fill
#include "displayapp/screens/Screen.h"
#include "components/motor/MotorController.h"
+#include "Symbols.h"
+#include <displayapp/Apps.h>
+#include <displayapp/Controllers.h>
namespace Pinetime {
namespace Components {
@@ -35,5 +38,13 @@ namespace Pinetime {
uint8_t color = 2;
};
}
+ template <>
+ struct AppTraits<Apps::Paint> {
+ static constexpr Apps app = Apps::Paint;
+ static constexpr const char* icon = Screens::Symbols::paintbrush;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::InfiniPaint(controllers.lvgl, controllers.motorController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h
index 13b0d664..8820962d 100644
--- a/src/displayapp/screens/Metronome.h
+++ b/src/displayapp/screens/Metronome.h
@@ -3,6 +3,7 @@
#include "systemtask/SystemTask.h"
#include "components/motor/MotorController.h"
#include "displayapp/screens/Screen.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
@@ -36,5 +37,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Metronome> {
+ static constexpr Apps app = Apps::Metronome;
+ static constexpr const char* icon = Screens::Symbols::drum;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Metronome(controllers.motorController, *controllers.systemTask);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h
index e4cbe483..3ef570d6 100644
--- a/src/displayapp/screens/Motion.h
+++ b/src/displayapp/screens/Motion.h
@@ -6,6 +6,8 @@
#include <lvgl/src/lv_core/lv_style.h>
#include <lvgl/src/lv_core/lv_obj.h>
#include <components/motion/MotionController.h>
+#include "displayapp/Controllers.h"
+#include "displayapp/Apps.h"
namespace Pinetime {
namespace Applications {
@@ -30,5 +32,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Motion> {
+ static constexpr Apps app = Apps::Motion;
+ static constexpr const char* icon = "M";
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Motion(controllers.motionController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h
index 847c6e74..acbb6312 100644
--- a/src/displayapp/screens/Music.h
+++ b/src/displayapp/screens/Music.h
@@ -21,6 +21,9 @@
#include <lvgl/src/lv_core/lv_obj.h>
#include <string>
#include "displayapp/screens/Screen.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -82,5 +85,13 @@ namespace Pinetime {
/** Watchapp */
};
}
+ template <>
+ struct AppTraits<Apps::Music> {
+ static constexpr Apps app = Apps::Music;
+ static constexpr const char* icon = Screens::Symbols::music;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Music(*controllers.musicService);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Navigation.h b/src/displayapp/screens/Navigation.h
index eb243b01..d54df13c 100644
--- a/src/displayapp/screens/Navigation.h
+++ b/src/displayapp/screens/Navigation.h
@@ -22,6 +22,9 @@
#include <string>
#include "displayapp/screens/Screen.h"
#include <array>
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -55,5 +58,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Navigation> {
+ static constexpr Apps app = Apps::Navigation;
+ static constexpr const char* icon = Screens::Symbols::map;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Navigation(*controllers.navigationService);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Paddle.h b/src/displayapp/screens/Paddle.h
index 33dac191..0670e5b1 100644
--- a/src/displayapp/screens/Paddle.h
+++ b/src/displayapp/screens/Paddle.h
@@ -3,6 +3,9 @@
#include <lvgl/lvgl.h>
#include <cstdint>
#include "displayapp/screens/Screen.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Components {
@@ -45,5 +48,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Paddle> {
+ static constexpr Apps app = Apps::Paddle;
+ static constexpr const char* icon = Screens::Symbols::paddle;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Paddle(controllers.lvgl);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h
index 5dc07eff..5299d67f 100644
--- a/src/displayapp/screens/Steps.h
+++ b/src/displayapp/screens/Steps.h
@@ -4,6 +4,9 @@
#include <lvgl/lvgl.h>
#include "displayapp/screens/Screen.h"
#include <components/motion/MotionController.h>
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
@@ -39,5 +42,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Steps> {
+ static constexpr Apps app = Apps::Steps;
+ static constexpr const char* icon = Screens::Symbols::shoe;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Steps(controllers.motionController, controllers.settingsController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h
index d1acd162..c3550fc4 100644
--- a/src/displayapp/screens/StopWatch.h
+++ b/src/displayapp/screens/StopWatch.h
@@ -7,50 +7,65 @@
#include "portmacro_cmsis.h"
#include "systemtask/SystemTask.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
-namespace Pinetime::Applications::Screens {
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
- enum class States { Init, Running, Halted };
+ enum class States { Init, Running, Halted };
- struct TimeSeparated_t {
- int hours;
- int mins;
- int secs;
- int hundredths;
- };
+ struct TimeSeparated_t {
+ int hours;
+ int mins;
+ int secs;
+ int hundredths;
+ };
- class StopWatch : public Screen {
- public:
- explicit StopWatch(System::SystemTask& systemTask);
- ~StopWatch() override;
- void Refresh() override;
+ class StopWatch : public Screen {
+ public:
+ explicit StopWatch(System::SystemTask& systemTask);
+ ~StopWatch() override;
+ void Refresh() override;
- void playPauseBtnEventHandler();
- void stopLapBtnEventHandler();
- bool OnButtonPushed() override;
+ void playPauseBtnEventHandler();
+ void stopLapBtnEventHandler();
+ bool OnButtonPushed() override;
- private:
- void SetInterfacePaused();
- void SetInterfaceRunning();
- void SetInterfaceStopped();
+ private:
+ void SetInterfacePaused();
+ void SetInterfaceRunning();
+ void SetInterfaceStopped();
- void Reset();
- void Start();
- void Pause();
+ void Reset();
+ void Start();
+ void Pause();
- Pinetime::System::SystemTask& systemTask;
- States currentState = States::Init;
- TickType_t startTime;
- TickType_t oldTimeElapsed = 0;
- TickType_t blinkTime = 0;
- static constexpr int maxLapCount = 20;
- TickType_t laps[maxLapCount + 1];
- static constexpr int displayedLaps = 2;
- int lapsDone = 0;
- lv_obj_t *time, *msecTime, *btnPlayPause, *btnStopLap, *txtPlayPause, *txtStopLap;
- lv_obj_t* lapText;
- bool isHoursLabelUpdated = false;
+ Pinetime::System::SystemTask& systemTask;
+ States currentState = States::Init;
+ TickType_t startTime;
+ TickType_t oldTimeElapsed = 0;
+ TickType_t blinkTime = 0;
+ static constexpr int maxLapCount = 20;
+ TickType_t laps[maxLapCount + 1];
+ static constexpr int displayedLaps = 2;
+ int lapsDone = 0;
+ lv_obj_t *time, *msecTime, *btnPlayPause, *btnStopLap, *txtPlayPause, *txtStopLap;
+ lv_obj_t* lapText;
+ bool isHoursLabelUpdated = false;
- lv_task_t* taskRefresh;
- };
+ lv_task_t* taskRefresh;
+ };
+ }
+ template <>
+ struct AppTraits<Apps::StopWatch> {
+ static constexpr Apps app = Apps::StopWatch;
+ static constexpr const char* icon = Screens::Symbols::stopWatch;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::StopWatch(*controllers.systemTask);
+ };
+ };
+ }
}
diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp
index 343755e3..7c392c59 100644
--- a/src/displayapp/screens/Tile.cpp
+++ b/src/displayapp/screens/Tile.cpp
@@ -1,5 +1,4 @@
#include "displayapp/screens/Tile.h"
-#include "displayapp/DisplayApp.h"
#include "displayapp/screens/BatteryIcon.h"
#include "components/ble/BleController.h"
#include "displayapp/InfiniTimeTheme.h"
diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp
index d9488740..a1ede6be 100644
--- a/src/displayapp/screens/Timer.cpp
+++ b/src/displayapp/screens/Timer.cpp
@@ -62,7 +62,7 @@ Timer::Timer(Controllers::Timer& timerController) : timer {timerController} {
txtPlayPause = lv_label_create(lv_scr_act(), nullptr);
lv_obj_align(txtPlayPause, btnPlayPause, LV_ALIGN_CENTER, 0, 0);
- if (timerController.IsRunning()) {
+ if (timer.IsRunning()) {
SetTimerRunning();
} else {
SetTimerStopped();
diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h
index e452a9d9..f8e337c2 100644
--- a/src/displayapp/screens/Timer.h
+++ b/src/displayapp/screens/Timer.h
@@ -8,38 +8,48 @@
#include <lvgl/lvgl.h>
#include "components/timer/Timer.h"
+#include "Symbols.h"
-namespace Pinetime::Applications::Screens {
- class Timer : public Screen {
- public:
- Timer(Controllers::Timer& timerController);
- ~Timer() override;
- void Refresh() override;
- void Reset();
- void ToggleRunning();
- void ButtonPressed();
- void MaskReset();
+namespace Pinetime::Applications{
+ namespace Screens {
+ class Timer : public Screen {
+ public:
+ Timer(Controllers::Timer& timerController);
+ ~Timer() override;
+ void Refresh() override;
+ void Reset();
+ void ToggleRunning();
+ void ButtonPressed();
+ void MaskReset();
- private:
- void SetTimerRunning();
- void SetTimerStopped();
- void UpdateMask();
- Controllers::Timer& timer;
+ private:
+ void SetTimerRunning();
+ void SetTimerStopped();
+ void UpdateMask();
+ Pinetime::Controllers::Timer& timer;
- lv_obj_t* btnPlayPause;
- lv_obj_t* txtPlayPause;
+ lv_obj_t* btnPlayPause;
+ lv_obj_t* txtPlayPause;
- lv_obj_t* btnObjectMask;
- lv_obj_t* highlightObjectMask;
- lv_objmask_mask_t* btnMask;
- lv_objmask_mask_t* highlightMask;
+ lv_obj_t* btnObjectMask;
+ lv_obj_t* highlightObjectMask;
+ lv_objmask_mask_t* btnMask;
+ lv_objmask_mask_t* highlightMask;
- lv_task_t* taskRefresh;
- Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
- Widgets::Counter secondCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
+ lv_task_t* taskRefresh;
+ Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
+ Widgets::Counter secondCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
- bool buttonPressing = false;
- lv_coord_t maskPosition = 0;
- TickType_t pressTime = 0;
+ bool buttonPressing = false;
+ lv_coord_t maskPosition = 0;
+ TickType_t pressTime = 0;
+ };
+ }
+
+ template<>
+ struct AppTraits<Apps::Timer> {
+ static constexpr Apps app = Apps::Timer;
+ static constexpr const char* icon = Screens::Symbols::hourGlass;
+ static Screens::Screen *Create(AppControllers& controllers) { return new Screens::Timer(controllers.timer); };
};
}
diff --git a/src/displayapp/screens/Twos.h b/src/displayapp/screens/Twos.h
index e731eae6..4e6980f5 100644
--- a/src/displayapp/screens/Twos.h
+++ b/src/displayapp/screens/Twos.h
@@ -1,7 +1,8 @@
#pragma once
-#include <lvgl/src/lv_core/lv_obj.h>
+#include "displayapp/Apps.h"
#include "displayapp/screens/Screen.h"
+#include "displayapp/Controllers.h"
namespace Pinetime {
namespace Applications {
@@ -35,5 +36,11 @@ namespace Pinetime {
bool placeNewTile();
};
}
+ template<>
+ struct AppTraits<Apps::Twos> {
+ static constexpr Apps app = Apps::Twos;
+ static constexpr const char* icon = "2";
+ static Screens::Screen *Create(AppControllers& /*controllers*/) { return new Screens::Twos(); };
+ };
}
}
diff --git a/src/displayapp/screens/Weather.h b/src/displayapp/screens/Weather.h
index 459534aa..888dc257 100644
--- a/src/displayapp/screens/Weather.h
+++ b/src/displayapp/screens/Weather.h
@@ -1,9 +1,12 @@
#pragma once
#include <memory>
-#include <components/ble/weather/WeatherService.h>
+#include "components/ble/weather/WeatherService.h"
#include "Screen.h"
#include "ScreenList.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
@@ -41,5 +44,13 @@ namespace Pinetime {
std::unique_ptr<Screen> CreateScreenHumidity();
};
}
+ template <>
+ struct AppTraits<Apps::Weather> {
+ static constexpr Apps app = Apps::Weather;
+ static constexpr const char* icon = Screens::Symbols::sun;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Weather(controllers.displayApp, *controllers.weatherController);
+ };
+ };
}
}