Add Setting to display UTC. Change Clockfaces to actually do it

This commit is contained in:
uli 2022-05-28 14:34:13 +02:00
parent 961ef6ca77
commit ed346fc465
7 changed files with 85 additions and 47 deletions

View File

@ -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 {

View File

@ -1,5 +1,6 @@
#include "displayapp/screens/WatchFaceAnalog.h"
#include <cmath>
#include <date/date.h>
#include <lvgl/lvgl.h>
#include "displayapp/screens/BatteryIcon.h"
#include "displayapp/screens/BleIcon.h"
@ -36,10 +37,8 @@ int16_t CoordinateYRelocate(int16_t y) {
}
lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) {
return lv_point_t{
.x = CoordinateXRelocate(radius * static_cast<int32_t>(Sine(angle)) / LV_TRIG_SCALE),
.y = CoordinateYRelocate(radius * static_cast<int32_t>(Cosine(angle)) / LV_TRIG_SCALE)
};
return lv_point_t {.x = CoordinateXRelocate(radius * static_cast<int32_t>(Sine(angle)) / LV_TRIG_SCALE),
.y = CoordinateYRelocate(radius * static_cast<int32_t>(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<date::days>(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);

View File

@ -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) {
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);
} else {
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<uint8_t>(month), day);
break;
}
lv_obj_realign(label_date);

View File

@ -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();

View File

@ -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,7 +136,8 @@ void WatchFaceTerminal::Refresh() {
displayedMinute = minute;
displayedSecond = second;
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
switch (settingsController.GetClockType()) {
case Controllers::Settings::ClockType::H12: {
char ampmChar[3] = "AM";
if (hour == 0) {
hour = 12;
@ -143,13 +148,17 @@ void WatchFaceTerminal::Refresh() {
ampmChar[0] = 'P';
}
lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d %s#", hour, minute, second, ampmChar);
} else {
} 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;

View File

@ -14,7 +14,7 @@ namespace {
}
}
constexpr std::array<const char*, 2> SettingTimeFormat::options;
constexpr std::array<const char*, 3> 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);

View File

@ -20,7 +20,7 @@ namespace Pinetime {
void UpdateSelected(lv_obj_t* object, lv_event_t event);
private:
static constexpr std::array<const char*, 2> options = {" 12-hour", " 24-hour"};
static constexpr std::array<const char*, 3> options = {" 12-hour", " 24-hour", " UTC"};
Controllers::Settings& settingsController;
lv_obj_t* cbOption[options.size()];
};