Add Setting to display UTC. Change Clockfaces to actually do it
This commit is contained in:
parent
961ef6ca77
commit
ed346fc465
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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()];
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user