From ed346fc465ce3e91f03ac09dabb8afd55423633a Mon Sep 17 00:00:00 2001 From: uli Date: Sat, 28 May 2022 14:34:13 +0200 Subject: [PATCH] Add Setting to display UTC. Change Clockfaces to actually do it --- src/components/settings/Settings.h | 2 +- src/displayapp/screens/WatchFaceAnalog.cpp | 54 +++++++++++-------- src/displayapp/screens/WatchFaceDigital.cpp | 23 +++++--- .../screens/WatchFacePineTimeStyle.cpp | 5 ++ src/displayapp/screens/WatchFaceTerminal.cpp | 39 ++++++++------ .../screens/settings/SettingTimeFormat.cpp | 7 ++- .../screens/settings/SettingTimeFormat.h | 2 +- 7 files changed, 85 insertions(+), 47 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 44a1a85c..c2e9106f 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -8,7 +8,7 @@ namespace Pinetime { namespace Controllers { class Settings { public: - enum class ClockType : uint8_t { H24, H12 }; + enum class ClockType : uint8_t { H24, H12, UTC }; enum class Notification : uint8_t { ON, OFF }; enum class ChimesOption : uint8_t { None, Hours, HalfHours }; enum class WakeUpMode : uint8_t { diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index dd5b2929..39111fb1 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -1,5 +1,6 @@ #include "displayapp/screens/WatchFaceAnalog.h" #include +#include #include #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" @@ -12,35 +13,33 @@ LV_IMG_DECLARE(bg_clock); using namespace Pinetime::Applications::Screens; namespace { -constexpr int16_t HourLength = 70; -constexpr int16_t MinuteLength = 90; -constexpr int16_t SecondLength = 110; + constexpr int16_t HourLength = 70; + constexpr int16_t MinuteLength = 90; + constexpr int16_t SecondLength = 110; -// sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor -const auto LV_TRIG_SCALE = _lv_trigo_sin(90); + // sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor + const auto LV_TRIG_SCALE = _lv_trigo_sin(90); -int16_t Cosine(int16_t angle) { - return _lv_trigo_sin(angle + 90); -} + int16_t Cosine(int16_t angle) { + return _lv_trigo_sin(angle + 90); + } -int16_t Sine(int16_t angle) { - return _lv_trigo_sin(angle); -} + int16_t Sine(int16_t angle) { + return _lv_trigo_sin(angle); + } -int16_t CoordinateXRelocate(int16_t x) { - return (x + LV_HOR_RES / 2); -} + int16_t CoordinateXRelocate(int16_t x) { + return (x + LV_HOR_RES / 2); + } -int16_t CoordinateYRelocate(int16_t y) { - return std::abs(y - LV_HOR_RES / 2); -} + int16_t CoordinateYRelocate(int16_t y) { + return std::abs(y - LV_HOR_RES / 2); + } -lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { - return lv_point_t{ - .x = CoordinateXRelocate(radius * static_cast(Sine(angle)) / LV_TRIG_SCALE), - .y = CoordinateYRelocate(radius * static_cast(Cosine(angle)) / LV_TRIG_SCALE) - }; -} + lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { + return lv_point_t {.x = CoordinateXRelocate(radius * static_cast(Sine(angle)) / LV_TRIG_SCALE), + .y = CoordinateYRelocate(radius * static_cast(Cosine(angle)) / LV_TRIG_SCALE)}; + } } @@ -145,6 +144,15 @@ void WatchFaceAnalog::UpdateClock() { uint8_t minute = dateTimeController.Minutes(); uint8_t second = dateTimeController.Seconds(); + if (settingsController.GetClockType() == Controllers::Settings::ClockType::UTC) { + auto utcDateTime = dateTimeController.UTCDateTime(); + auto dp = date::floor(utcDateTime); + auto time = date::make_time(utcDateTime - dp); + hour = time.hours().count(); + minute = time.minutes().count(); + second = time.seconds().count(); + } + if (sMinute != minute) { auto const angle = minute * 6; minute_point[0] = CoordinateRelocate(30, angle); diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 1df38255..41d57b21 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -120,6 +120,10 @@ void WatchFaceDigital::Refresh() { currentDateTime = dateTimeController.CurrentDateTime(); + if (settingsController.GetClockType() == Controllers::Settings::ClockType::UTC) { + currentDateTime = dateTimeController.UTCDateTime(); + } + if (currentDateTime.IsUpdated()) { auto newDateTime = currentDateTime.Get(); @@ -159,12 +163,19 @@ void WatchFaceDigital::Refresh() { } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - lv_label_set_text_fmt( - label_date, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); - } else { - lv_label_set_text_fmt( - label_date, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); + switch (settingsController.GetClockType()) { + default: + case Controllers::Settings::ClockType::H24: + lv_label_set_text_fmt( + label_date, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); + break; + case Controllers::Settings::ClockType::H12: + lv_label_set_text_fmt( + label_date, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); + case Controllers::Settings::ClockType::UTC: + lv_label_set_text_fmt( + label_date, "%d-%d-%d", year, static_cast(month), day); + break; } lv_obj_realign(label_date); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index a7772417..ca050703 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -383,6 +383,11 @@ void WatchFacePineTimeStyle::Refresh() { } currentDateTime = dateTimeController.CurrentDateTime(); + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::UTC) { + currentDateTime = dateTimeController.UTCDateTime(); + } + if (currentDateTime.IsUpdated()) { auto newDateTime = currentDateTime.Get(); diff --git a/src/displayapp/screens/WatchFaceTerminal.cpp b/src/displayapp/screens/WatchFaceTerminal.cpp index 80d736cf..143694c1 100644 --- a/src/displayapp/screens/WatchFaceTerminal.cpp +++ b/src/displayapp/screens/WatchFaceTerminal.cpp @@ -89,7 +89,7 @@ void WatchFaceTerminal::Refresh() { bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - if(!bleRadioEnabled.Get()) { + if (!bleRadioEnabled.Get()) { lv_label_set_text_static(connectState, "[STAT]#0082fc Disabled#"); } else { if (bleState.Get()) { @@ -111,6 +111,10 @@ void WatchFaceTerminal::Refresh() { currentDateTime = dateTimeController.CurrentDateTime(); + if (settingsController.GetClockType() == Controllers::Settings::ClockType::UTC) { + currentDateTime = dateTimeController.UTCDateTime(); + } + if (currentDateTime.IsUpdated()) { auto newDateTime = currentDateTime.Get(); @@ -132,24 +136,29 @@ void WatchFaceTerminal::Refresh() { displayedMinute = minute; displayedSecond = second; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { - char ampmChar[3] = "AM"; - if (hour == 0) { - hour = 12; - } else if (hour == 12) { - ampmChar[0] = 'P'; - } else if (hour > 12) { - hour = hour - 12; - ampmChar[0] = 'P'; - } - lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d %s#", hour, minute, second, ampmChar); - } else { - lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d", hour, minute, second); + switch (settingsController.GetClockType()) { + case Controllers::Settings::ClockType::H12: { + char ampmChar[3] = "AM"; + if (hour == 0) { + hour = 12; + } else if (hour == 12) { + ampmChar[0] = 'P'; + } else if (hour > 12) { + hour = hour - 12; + ampmChar[0] = 'P'; + } + lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d %s#", hour, minute, second, ampmChar); + } break; + case Controllers::Settings::ClockType::H24: + lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d", hour, minute, second); + break; + case Controllers::Settings::ClockType::UTC: + lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02dZ", hour, minute, second); } } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - lv_label_set_text_fmt(label_date, "[DATE]#007fff %04d.%02d.%02d#", short(year), char(month), char(day)); + lv_label_set_text_fmt(label_date, "[DATE]#007fff %04d-%02d-%02d#", short(year), char(month), char(day)); currentYear = year; currentMonth = month; diff --git a/src/displayapp/screens/settings/SettingTimeFormat.cpp b/src/displayapp/screens/settings/SettingTimeFormat.cpp index 5502794b..f9f5c01f 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.cpp +++ b/src/displayapp/screens/settings/SettingTimeFormat.cpp @@ -14,7 +14,7 @@ namespace { } } -constexpr std::array SettingTimeFormat::options; +constexpr std::array SettingTimeFormat::options; SettingTimeFormat::SettingTimeFormat(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) : Screen(app), settingsController {settingsController} { @@ -54,6 +54,8 @@ SettingTimeFormat::SettingTimeFormat(Pinetime::Applications::DisplayApp* app, Pi lv_checkbox_set_checked(cbOption[0], true); } else if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { lv_checkbox_set_checked(cbOption[1], true); + } else if (settingsController.GetClockType() == Controllers::Settings::ClockType::UTC) { + lv_checkbox_set_checked(cbOption[2], true); } } @@ -74,6 +76,9 @@ void SettingTimeFormat::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (i == 1) { settingsController.SetClockType(Controllers::Settings::ClockType::H24); }; + if (i == 2) { + settingsController.SetClockType(Controllers::Settings::ClockType::UTC); + }; } else { lv_checkbox_set_checked(cbOption[i], false); diff --git a/src/displayapp/screens/settings/SettingTimeFormat.h b/src/displayapp/screens/settings/SettingTimeFormat.h index 818edf0c..04f5ef00 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.h +++ b/src/displayapp/screens/settings/SettingTimeFormat.h @@ -20,7 +20,7 @@ namespace Pinetime { void UpdateSelected(lv_obj_t* object, lv_event_t event); private: - static constexpr std::array options = {" 12-hour", " 24-hour"}; + static constexpr std::array options = {" 12-hour", " 24-hour", " UTC"}; Controllers::Settings& settingsController; lv_obj_t* cbOption[options.size()]; };