9
9
#include " components/heartrate/HeartRateController.h"
10
10
#include " components/motion/MotionController.h"
11
11
#include " components/settings/Settings.h"
12
+ #include " components/ble/SimpleWeatherService.h"
13
+ #include " displayapp/screens/WeatherSymbols.h"
14
+ #include " displayapp/InfiniTimeTheme.h"
12
15
13
16
using namespace Pinetime ::Applications::Screens;
14
17
18
+
15
19
WatchFaceTerminal::WatchFaceTerminal (Controllers::DateTime& dateTimeController,
16
20
const Controllers::Battery& batteryController,
17
21
const Controllers::Ble& bleController,
18
22
Controllers::NotificationManager& notificationManager,
19
23
Controllers::Settings& settingsController,
20
24
Controllers::HeartRateController& heartRateController,
21
- Controllers::MotionController& motionController)
25
+ Controllers::MotionController& motionController,
26
+ Controllers::SimpleWeatherService& weatherService)
22
27
: currentDateTime {{}},
23
28
dateTimeController {dateTimeController},
24
29
batteryController {batteryController},
25
30
bleController {bleController},
26
31
notificationManager {notificationManager},
27
32
settingsController {settingsController},
28
33
heartRateController {heartRateController},
29
- motionController {motionController} {
34
+ motionController {motionController},
35
+ weatherService {weatherService} {
30
36
batteryValue = lv_label_create (lv_scr_act (), nullptr );
31
37
lv_label_set_recolor (batteryValue, true );
32
38
lv_obj_align (batteryValue, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , -20 );
@@ -47,7 +53,7 @@ WatchFaceTerminal::WatchFaceTerminal(Controllers::DateTime& dateTimeController,
47
53
lv_label_set_text_static (label_prompt_1, " user@watch:~ $ now" );
48
54
49
55
label_prompt_2 = lv_label_create (lv_scr_act (), nullptr );
50
- lv_obj_align (label_prompt_2, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , 60 );
56
+ lv_obj_align (label_prompt_2, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , 80 );
51
57
lv_label_set_text_static (label_prompt_2, " user@watch:~ $" );
52
58
53
59
label_time = lv_label_create (lv_scr_act (), nullptr );
@@ -62,6 +68,10 @@ WatchFaceTerminal::WatchFaceTerminal(Controllers::DateTime& dateTimeController,
62
68
lv_label_set_recolor (stepValue, true );
63
69
lv_obj_align (stepValue, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , 0 );
64
70
71
+ weather = lv_label_create (lv_scr_act (), nullptr );
72
+ lv_label_set_recolor (weather, true );
73
+ lv_obj_align (weather, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , 60 );
74
+
65
75
taskRefresh = lv_task_create (RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this );
66
76
Refresh ();
67
77
}
@@ -148,4 +158,25 @@ void WatchFaceTerminal::Refresh() {
148
158
if (stepCount.IsUpdated ()) {
149
159
lv_label_set_text_fmt (stepValue, " [STEP]#ee3377 %lu steps#" , stepCount.Get ());
150
160
}
161
+
162
+ currentWeather = weatherService.Current ();
163
+ if (currentWeather.IsUpdated ()) {
164
+ auto optCurrentWeather = currentWeather.Get ();
165
+ if (optCurrentWeather) {
166
+ int16_t temp = optCurrentWeather->temperature .Celsius ();
167
+ char tempUnit = ' C' ;
168
+ if (settingsController.GetWeatherFormat () == Controllers::Settings::WeatherFormat::Imperial) {
169
+ temp = optCurrentWeather->temperature .Fahrenheit ();
170
+ tempUnit = ' F' ;
171
+ }
172
+ lv_label_set_text_fmt (weather,
173
+ " [WTHR]#ffdd00 %d°%c %s#" ,
174
+ temp,
175
+ tempUnit,
176
+ // Change to GetSimpleCondition with pull request #2134 (Add shorter/simpler weather condition options)
177
+ Symbols::GetCondition (optCurrentWeather->iconId ));
178
+ } else {
179
+ lv_label_set_text (weather, " [WTHR]#ffdd00 ---°" );
180
+ }
181
+ }
151
182
}
0 commit comments