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