diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 4cf4392157..7a6c1b57bd 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -47,8 +47,9 @@ static void StopAlarmTaskCallback(lv_task_t* task) { Alarm::Alarm(Controllers::AlarmController& alarmController, Controllers::Settings::ClockType clockType, System::SystemTask& systemTask, - Controllers::MotorController& motorController) - : alarmController {alarmController}, wakeLock(systemTask), motorController {motorController} { + Controllers::MotorController& motorController, + Controllers::DateTime& dateTimeController) + : dateTimeController {dateTimeController}, alarmController {alarmController}, wakeLock(systemTask), motorController {motorController} { hourCounter.Create(); lv_obj_align(hourCounter.GetObject(), nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); @@ -107,6 +108,18 @@ Alarm::Alarm(Controllers::AlarmController& alarmController, lv_obj_t* txtInfo = lv_label_create(btnInfo, nullptr); lv_label_set_text_static(txtInfo, "i"); + btnCurrentTime = lv_btn_create(lv_scr_act(), nullptr); + btnCurrentTime->user_data = this; + lv_obj_set_event_cb(btnCurrentTime, btnEventHandler); + lv_obj_set_size(btnCurrentTime, 50, 50); + lv_obj_align(btnCurrentTime, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 135); + lv_obj_set_style_local_bg_color(btnCurrentTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, bgColor); + lv_obj_set_style_local_border_width(btnCurrentTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_border_color(btnCurrentTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + + lv_obj_t* btnClock = lv_label_create(btnCurrentTime, nullptr); + lv_label_set_text_static(btnClock, Symbols::clock); + enableSwitch = lv_switch_create(lv_scr_act(), nullptr); enableSwitch->user_data = this; lv_obj_set_event_cb(enableSwitch, btnEventHandler); @@ -149,6 +162,10 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { ShowInfo(); return; } + if (obj == btnCurrentTime) { + SetCurrentTime(); + return; + } if (obj == btnMessage) { HideInfo(); return; @@ -205,6 +222,7 @@ void Alarm::SetAlerting() { lv_obj_set_hidden(enableSwitch, true); lv_obj_set_hidden(btnRecur, true); lv_obj_set_hidden(btnInfo, true); + lv_obj_set_hidden(btnCurrentTime, true); hourCounter.HideControls(); minuteCounter.HideControls(); lv_obj_set_hidden(btnStop, false); @@ -226,6 +244,7 @@ void Alarm::StopAlerting() { hourCounter.ShowControls(); minuteCounter.ShowControls(); lv_obj_set_hidden(btnInfo, false); + lv_obj_set_hidden(btnCurrentTime, false); lv_obj_set_hidden(btnRecur, false); lv_obj_set_hidden(enableSwitch, false); } @@ -304,3 +323,16 @@ void Alarm::ToggleRecurrence() { } SetRecurButtonState(); } + +void Alarm::SetCurrentTime() { + uint8_t hour = dateTimeController.Hours(); + uint8_t minute = dateTimeController.Minutes(); + + hourCounter.SetValue(hour); + minuteCounter.SetValue(minute); + alarmController.SetAlarmTime(hour, minute); + + if (lblampm != nullptr) { + lv_label_set_text_static(lblampm, hour >= 12 ? "PM" : "AM"); + } +} diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index 2dde6e8754..1d9f0c16d9 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -33,7 +33,8 @@ namespace Pinetime { explicit Alarm(Controllers::AlarmController& alarmController, Controllers::Settings::ClockType clockType, System::SystemTask& systemTask, - Controllers::MotorController& motorController); + Controllers::MotorController& motorController, + Controllers::DateTime& dateTimeController); ~Alarm() override; void SetAlerting(); void OnButtonEvent(lv_obj_t* obj, lv_event_t event); @@ -41,13 +42,15 @@ namespace Pinetime { bool OnTouchEvent(TouchEvents event) override; void OnValueChanged(); void StopAlerting(); + void SetCurrentTime(); private: + Controllers::DateTime& dateTimeController; Controllers::AlarmController& alarmController; System::WakeLock wakeLock; Controllers::MotorController& motorController; - lv_obj_t *btnStop, *txtStop, *btnRecur, *txtRecur, *btnInfo, *enableSwitch; + lv_obj_t *btnStop, *txtStop, *btnRecur, *txtRecur, *btnInfo, *enableSwitch, *btnCurrentTime; lv_obj_t* lblampm = nullptr; lv_obj_t* txtMessage = nullptr; lv_obj_t* btnMessage = nullptr; @@ -76,7 +79,8 @@ namespace Pinetime { return new Screens::Alarm(controllers.alarmController, controllers.settingsController.GetClockType(), *controllers.systemTask, - controllers.motorController); + controllers.motorController, + controllers.dateTimeController); }; static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) {