diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 84fa603622..657b3aa8ef 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -651,6 +651,12 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio case Apps::FlashLight: currentScreen = std::make_unique(*systemTask, brightnessController); break; + case Apps::Weather: + currentScreen = std::make_unique(settingsController, *controllers.weatherController); + break; + case Apps::Steps: + currentScreen = std::make_unique(motionController, settingsController); + break; default: { const auto* d = std::ranges::find_if(userApps, [app](const AppDescription& appDescription) { return appDescription.app == app; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index a037abfe16..16e7b344b7 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -16,7 +16,15 @@ using namespace Pinetime::Applications::Screens; -WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, +namespace { + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); + screen->OnButtonEvent(obj, event); + } +} + +WatchFaceDigital::WatchFaceDigital(DisplayApp* app, + Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, const Controllers::AlarmController& alarmController, @@ -25,7 +33,8 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, Controllers::HeartRateController& heartRateController, Controllers::MotionController& motionController, Controllers::SimpleWeatherService& weatherService) - : currentDateTime {{}}, + : app {app}, + currentDateTime {{}}, dateTimeController {dateTimeController}, notificationManager {notificationManager}, settingsController {settingsController}, @@ -42,6 +51,10 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); weatherIcon = lv_label_create(lv_scr_act(), nullptr); + weatherIcon->user_data = this; + lv_obj_set_click(weatherIcon, true); + lv_obj_set_ext_click_area(weatherIcon, 25, 25, 25, 25); + lv_obj_set_event_cb(weatherIcon, ButtonEventHandler); lv_obj_set_style_local_text_color(weatherIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_obj_set_style_local_text_font(weatherIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &fontawesome_weathericons); lv_label_set_text(weatherIcon, ""); @@ -82,6 +95,10 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); stepIcon = lv_label_create(lv_scr_act(), nullptr); + stepIcon->user_data = this; + lv_obj_set_click(stepIcon, true); + lv_obj_set_ext_click_area(stepIcon, 0, 25, 25, 0); + lv_obj_set_event_cb(stepIcon, ButtonEventHandler); lv_obj_set_style_local_text_color(stepIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FFE7)); lv_label_set_text_static(stepIcon, Symbols::shoe); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); @@ -192,3 +209,14 @@ void WatchFaceDigital::Refresh() { lv_obj_realign(weatherIcon); } } + +void WatchFaceDigital::OnButtonEvent(lv_obj_t* object, lv_event_t event) { + if (event != LV_EVENT_CLICKED) { + return; + } + if (object == stepIcon) { + app->StartApp(Apps::Steps, DisplayApp::FullRefreshDirections::Up); + } else if (object == weatherIcon) { + app->StartApp(Apps::Weather, DisplayApp::FullRefreshDirections::Up); + } +} diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index e3a1ac649a..5a60c955f0 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -28,7 +28,8 @@ namespace Pinetime { class WatchFaceDigital : public Screen { public: - WatchFaceDigital(Controllers::DateTime& dateTimeController, + WatchFaceDigital(DisplayApp* app, + Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, const Controllers::AlarmController& alarmController, @@ -39,9 +40,12 @@ namespace Pinetime { Controllers::SimpleWeatherService& weather); ~WatchFaceDigital() override; + void OnButtonEvent(lv_obj_t* object, lv_event_t event); + void Refresh() override; private: + DisplayApp* app; uint8_t displayedHour = -1; uint8_t displayedMinute = -1; @@ -83,7 +87,8 @@ namespace Pinetime { static constexpr const char* name = "Digital"; static Screens::Screen* Create(AppControllers& controllers) { - return new Screens::WatchFaceDigital(controllers.dateTimeController, + return new Screens::WatchFaceDigital(controllers.displayApp, + controllers.dateTimeController, controllers.batteryController, controllers.bleController, controllers.alarmController,