Skip to content

Commit 56fe2e4

Browse files
committed
WatchFaceTerminal: Simplify time update check
1 parent d251a47 commit 56fe2e4

2 files changed

Lines changed: 25 additions & 44 deletions

File tree

src/displayapp/screens/WatchFaceTerminal.cpp

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -104,45 +104,33 @@ void WatchFaceTerminal::Refresh() {
104104
}
105105
}
106106

107-
currentDateTime = dateTimeController.CurrentDateTime();
108-
107+
currentDateTime = std::chrono::time_point_cast<std::chrono::seconds>(dateTimeController.CurrentDateTime());
109108
if (currentDateTime.IsUpdated()) {
110-
auto hour = dateTimeController.Hours();
111-
auto minute = dateTimeController.Minutes();
112-
auto second = dateTimeController.Seconds();
113-
auto year = dateTimeController.Year();
114-
auto month = dateTimeController.Month();
115-
auto dayOfWeek = dateTimeController.DayOfWeek();
116-
auto day = dateTimeController.Day();
117-
118-
if (displayedHour != hour || displayedMinute != minute || displayedSecond != second) {
119-
displayedHour = hour;
120-
displayedMinute = minute;
121-
displayedSecond = second;
122-
123-
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
124-
char ampmChar[3] = "AM";
125-
if (hour == 0) {
126-
hour = 12;
127-
} else if (hour == 12) {
128-
ampmChar[0] = 'P';
129-
} else if (hour > 12) {
130-
hour = hour - 12;
131-
ampmChar[0] = 'P';
132-
}
133-
lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d %s#", hour, minute, second, ampmChar);
134-
} else {
135-
lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d", hour, minute, second);
109+
uint8_t hour = dateTimeController.Hours();
110+
uint8_t minute = dateTimeController.Minutes();
111+
uint8_t second = dateTimeController.Seconds();
112+
113+
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
114+
char ampmChar[3] = "AM";
115+
if (hour == 0) {
116+
hour = 12;
117+
} else if (hour == 12) {
118+
ampmChar[0] = 'P';
119+
} else if (hour > 12) {
120+
hour = hour - 12;
121+
ampmChar[0] = 'P';
136122
}
123+
lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d %s#", hour, minute, second, ampmChar);
124+
} else {
125+
lv_label_set_text_fmt(label_time, "[TIME]#11cc55 %02d:%02d:%02d", hour, minute, second);
137126
}
138127

139-
if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) {
128+
currentDate = std::chrono::time_point_cast<days>(currentDateTime.Get());
129+
if (currentDate.IsUpdated()) {
130+
uint16_t year = dateTimeController.Year();
131+
Controllers::DateTime::Months month = dateTimeController.Month();
132+
uint8_t day = dateTimeController.Day();
140133
lv_label_set_text_fmt(label_date, "[DATE]#007fff %04d-%02d-%02d#", short(year), char(month), char(day));
141-
142-
currentYear = year;
143-
currentMonth = month;
144-
currentDayOfWeek = dayOfWeek;
145-
currentDay = day;
146134
}
147135
}
148136

src/displayapp/screens/WatchFaceTerminal.h

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,18 @@ namespace Pinetime {
3535
void Refresh() override;
3636

3737
private:
38-
uint8_t displayedHour = -1;
39-
uint8_t displayedMinute = -1;
40-
uint8_t displayedSecond = -1;
41-
42-
uint16_t currentYear = 1970;
43-
Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown;
44-
Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown;
45-
uint8_t currentDay = 0;
46-
4738
Utility::DirtyValue<int> batteryPercentRemaining {};
4839
Utility::DirtyValue<bool> powerPresent {};
4940
Utility::DirtyValue<bool> bleState {};
5041
Utility::DirtyValue<bool> bleRadioEnabled {};
51-
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>> currentDateTime {};
42+
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>> currentDateTime {};
5243
Utility::DirtyValue<bool> motionSensorOk {};
5344
Utility::DirtyValue<uint32_t> stepCount {};
5445
Utility::DirtyValue<uint8_t> heartbeat {};
5546
Utility::DirtyValue<bool> heartbeatRunning {};
5647
Utility::DirtyValue<bool> notificationState {};
48+
using days = std::chrono::duration<int32_t, std::ratio<86400>>; // TODO: days is standard in c++20
49+
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, days>> currentDate;
5750

5851
lv_obj_t* label_time;
5952
lv_obj_t* label_date;

0 commit comments

Comments
 (0)