99#include " components/heartrate/HeartRateController.h"
1010#include " components/motion/MotionController.h"
1111#include " components/settings/Settings.h"
12+ #include " components/ble/SimpleWeatherService.h"
13+ #include " displayapp/screens/WeatherSymbols.h"
14+ #include " displayapp/InfiniTimeTheme.h"
1215
1316using namespace Pinetime ::Applications::Screens;
1417
@@ -18,15 +21,17 @@ WatchFaceTerminal::WatchFaceTerminal(Controllers::DateTime& dateTimeController,
1821 Controllers::NotificationManager& notificationManager,
1922 Controllers::Settings& settingsController,
2023 Controllers::HeartRateController& heartRateController,
21- Controllers::MotionController& motionController)
24+ Controllers::MotionController& motionController,
25+ Controllers::SimpleWeatherService& weatherService)
2226 : currentDateTime {{}},
2327 dateTimeController {dateTimeController},
2428 batteryController {batteryController},
2529 bleController {bleController},
2630 notificationManager {notificationManager},
2731 settingsController {settingsController},
2832 heartRateController {heartRateController},
29- motionController {motionController} {
33+ motionController {motionController},
34+ weatherService {weatherService} {
3035 batteryValue = lv_label_create (lv_scr_act (), nullptr );
3136 lv_label_set_recolor (batteryValue, true );
3237 lv_obj_align (batteryValue, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , -20 );
@@ -47,7 +52,7 @@ WatchFaceTerminal::WatchFaceTerminal(Controllers::DateTime& dateTimeController,
4752 lv_label_set_text_static (label_prompt_1, " user@watch:~ $ now" );
4853
4954 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 );
5156 lv_label_set_text_static (label_prompt_2, " user@watch:~ $" );
5257
5358 label_time = lv_label_create (lv_scr_act (), nullptr );
@@ -62,6 +67,10 @@ WatchFaceTerminal::WatchFaceTerminal(Controllers::DateTime& dateTimeController,
6267 lv_label_set_recolor (stepValue, true );
6368 lv_obj_align (stepValue, lv_scr_act (), LV_ALIGN_IN_LEFT_MID, 0 , 0 );
6469
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+
6574 taskRefresh = lv_task_create (RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this );
6675 Refresh ();
6776}
@@ -148,4 +157,25 @@ void WatchFaceTerminal::Refresh() {
148157 if (stepCount.IsUpdated ()) {
149158 lv_label_set_text_fmt (stepValue, " [STEP]#ee3377 %lu steps#" , stepCount.Get ());
150159 }
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+ }
151181}
0 commit comments