Skip to content

Commit

Permalink
WatchFaceDigital: Add weather display
Browse files Browse the repository at this point in the history
If weather is available, display the cloud icon and temperature.
  • Loading branch information
vkareh committed Nov 23, 2023
1 parent f3d4f04 commit 200c8df
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/displayapp/screens/Clock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ std::unique_ptr<Screen> Clock::WatchFaceDigitalScreen() {
notificationManager,
settingsController,
heartRateController,
motionController);
motionController,
weatherService);
}

std::unique_ptr<Screen> Clock::WatchFaceAnalogScreen() {
Expand Down
44 changes: 43 additions & 1 deletion src/displayapp/screens/WatchFaceDigital.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "components/ble/NotificationManager.h"
#include "components/heartrate/HeartRateController.h"
#include "components/motion/MotionController.h"
#include "components/ble/weather/WeatherService.h"
#include "components/settings/Settings.h"

using namespace Pinetime::Applications::Screens;
Expand All @@ -19,13 +20,15 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController,
Controllers::NotificationManager& notificationManager,
Controllers::Settings& settingsController,
Controllers::HeartRateController& heartRateController,
Controllers::MotionController& motionController)
Controllers::MotionController& motionController,
Controllers::WeatherService& weatherService)
: currentDateTime {{}},
dateTimeController {dateTimeController},
notificationManager {notificationManager},
settingsController {settingsController},
heartRateController {heartRateController},
motionController {motionController},
weatherService {weatherService},
statusIcons(batteryController, bleController) {

statusIcons.Create();
Expand All @@ -35,6 +38,17 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController,
lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(false));
lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0);

weatherIcon = lv_label_create(lv_scr_act(), nullptr);
lv_obj_set_style_local_text_color(weatherIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_set_style_local_text_font(weatherIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &fontawesome_weathericons);
lv_label_set_text(weatherIcon, "");
lv_obj_align(weatherIcon, nullptr, LV_ALIGN_IN_TOP_MID, -20, 0);
lv_obj_set_auto_realign(weatherIcon, true);

temperature = lv_label_create(lv_scr_act(), nullptr);
lv_obj_set_style_local_text_color(temperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_align(temperature, nullptr, LV_ALIGN_IN_TOP_MID, 20, 0);

label_date = lv_label_create(lv_scr_act(), nullptr);
lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60);
lv_obj_set_style_local_text_color(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
Expand Down Expand Up @@ -153,4 +167,32 @@ void WatchFaceDigital::Refresh() {
lv_obj_realign(stepValue);
lv_obj_realign(stepIcon);
}

if (weatherService.GetCurrentTemperature()->timestamp != 0 && weatherService.GetCurrentClouds()->timestamp != 0 &&
weatherService.GetCurrentPrecipitation()->timestamp != 0) {
nowTemp = (weatherService.GetCurrentTemperature()->temperature / 100);
clouds = (weatherService.GetCurrentClouds()->amount);
precip = (weatherService.GetCurrentPrecipitation()->amount);
if (nowTemp.IsUpdated()) {
lv_label_set_text_fmt(temperature, "%d°", nowTemp.Get());
if ((clouds <= 30) && (precip == 0)) {
lv_label_set_text(weatherIcon, Symbols::sun);
} else if ((clouds >= 70) && (clouds <= 90) && (precip == 1)) {
lv_label_set_text(weatherIcon, Symbols::cloudSunRain);
} else if ((clouds > 90) && (precip == 0)) {
lv_label_set_text(weatherIcon, Symbols::cloud);
} else if ((clouds > 70) && (precip >= 2)) {
lv_label_set_text(weatherIcon, Symbols::cloudShowersHeavy);
} else {
lv_label_set_text(weatherIcon, Symbols::cloudSun);
};
lv_obj_realign(temperature);
lv_obj_realign(weatherIcon);
}
} else {
lv_label_set_text_static(temperature, "");
lv_label_set_text(weatherIcon, "");
lv_obj_realign(temperature);
lv_obj_realign(weatherIcon);
}
}
10 changes: 9 additions & 1 deletion src/displayapp/screens/WatchFaceDigital.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <memory>
#include "displayapp/screens/Screen.h"
#include "components/datetime/DateTimeController.h"
#include "components/ble/weather/WeatherService.h"
#include "components/ble/BleController.h"
#include "displayapp/widgets/StatusIcons.h"
#include "utility/DirtyValue.h"
Expand All @@ -31,7 +32,8 @@ namespace Pinetime {
Controllers::NotificationManager& notificationManager,
Controllers::Settings& settingsController,
Controllers::HeartRateController& heartRateController,
Controllers::MotionController& motionController);
Controllers::MotionController& motionController,
Controllers::WeatherService& weather);
~WatchFaceDigital() override;

void Refresh() override;
Expand All @@ -49,6 +51,9 @@ namespace Pinetime {
Utility::DirtyValue<uint8_t> heartbeat {};
Utility::DirtyValue<bool> heartbeatRunning {};
Utility::DirtyValue<bool> notificationState {};
Utility::DirtyValue<int16_t> nowTemp {};
int16_t clouds = 0;
int16_t precip = 0;
using days = std::chrono::duration<int32_t, std::ratio<86400>>; // TODO: days is standard in c++20
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, days>> currentDate;

Expand All @@ -60,12 +65,15 @@ namespace Pinetime {
lv_obj_t* stepIcon;
lv_obj_t* stepValue;
lv_obj_t* notificationIcon;
lv_obj_t* weatherIcon;
lv_obj_t* temperature;

Controllers::DateTime& dateTimeController;
Controllers::NotificationManager& notificationManager;
Controllers::Settings& settingsController;
Controllers::HeartRateController& heartRateController;
Controllers::MotionController& motionController;
Controllers::WeatherService& weatherService;

lv_task_t* taskRefresh;
Widgets::StatusIcons statusIcons;
Expand Down

0 comments on commit 200c8df

Please sign in to comment.