aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp/screens/WatchFacePrideFlag.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp/screens/WatchFacePrideFlag.h')
-rw-r--r--src/displayapp/screens/WatchFacePrideFlag.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/displayapp/screens/WatchFacePrideFlag.h b/src/displayapp/screens/WatchFacePrideFlag.h
new file mode 100644
index 00000000..10a94e8b
--- /dev/null
+++ b/src/displayapp/screens/WatchFacePrideFlag.h
@@ -0,0 +1,102 @@
+#pragma once
+
+#include <lvgl/src/lv_core/lv_obj.h>
+#include <chrono>
+#include <vector>
+#include <cstdint>
+#include <array>
+#include <FreeRTOS.h>
+#include "displayapp/screens/Screen.h"
+#include "utility/DirtyValue.h"
+#include "components/settings/Settings.h"
+#include "components/battery/BatteryController.h"
+
+namespace Pinetime {
+ namespace Controllers {
+ class Settings;
+ class Battery;
+ class Ble;
+ class NotificationManager;
+ class MotionController;
+ }
+
+ namespace Applications {
+ namespace Screens {
+
+ class WatchFacePrideFlag : public Screen {
+ public:
+ WatchFacePrideFlag(Controllers::DateTime& dateTimeController,
+ const Controllers::Battery& batteryController,
+ const Controllers::Ble& bleController,
+ Controllers::NotificationManager& notificationManager,
+ Controllers::Settings& settingsController,
+ Controllers::MotionController& motionController);
+ ~WatchFacePrideFlag() override;
+
+ bool OnTouchEvent(TouchEvents event) override;
+ bool OnButtonPushed() override;
+
+ void Refresh() override;
+
+ void UpdateSelected(lv_obj_t* object, lv_event_t event);
+
+ private:
+ void UpdateScreen(Pinetime::Controllers::Settings::PrideFlag);
+
+ Utility::DirtyValue<uint8_t> batteryPercentRemaining;
+ Utility::DirtyValue<bool> powerPresent;
+ Utility::DirtyValue<bool> bleState;
+ Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>> currentDateTime;
+ Utility::DirtyValue<uint32_t> stepCount;
+ Utility::DirtyValue<bool> notificationState;
+ Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::days>> currentDate;
+ // Must be wrapped in a dirty value, since it is displayed in the day but is updated twice a day
+ Utility::DirtyValue<const char*> ampmChar {"AM"};
+
+ TickType_t savedTick = 0;
+
+ std::vector<lv_obj_t*> backgroundSections;
+ bool themeChanged = false;
+ lv_obj_t* bluetoothStatus;
+ lv_obj_t* labelTime;
+ lv_obj_t* labelDate;
+ lv_obj_t* labelDay;
+ lv_obj_t* batteryValue;
+ lv_obj_t* stepValue;
+ lv_obj_t* notificationText;
+ lv_obj_t* btnClose;
+ lv_obj_t* btnNextFlag;
+ lv_obj_t* btnPrevFlag;
+
+ Controllers::DateTime& dateTimeController;
+ const Controllers::Battery& batteryController;
+ const Controllers::Ble& bleController;
+ Controllers::NotificationManager& notificationManager;
+ Controllers::Settings& settingsController;
+ Controllers::MotionController& motionController;
+
+ lv_task_t* taskRefresh;
+ void CloseMenu();
+ };
+ }
+
+ template <>
+ struct WatchFaceTraits<WatchFace::PrideFlag> {
+ static constexpr WatchFace watchFace = WatchFace::PrideFlag;
+ static constexpr const char* name = "Pride Flag";
+
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::WatchFacePrideFlag(controllers.dateTimeController,
+ controllers.batteryController,
+ controllers.bleController,
+ controllers.notificationManager,
+ controllers.settingsController,
+ controllers.motionController);
+ };
+
+ static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) {
+ return true;
+ }
+ };
+ }
+}