diff options
Diffstat (limited to 'src/displayapp/screens')
-rw-r--r-- | src/displayapp/screens/Notifications.cpp | 57 | ||||
-rw-r--r-- | src/displayapp/screens/Notifications.h | 16 | ||||
-rw-r--r-- | src/displayapp/screens/settings/QuickSettings.cpp | 2 |
3 files changed, 59 insertions, 16 deletions
diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 5c23ed1f..5eecb421 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -11,8 +11,13 @@ extern lv_font_t jetbrains_mono_bold_20; Notifications::Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, Modes mode) - : Screen(app), notificationManager {notificationManager}, alertNotificationService {alertNotificationService}, mode {mode} { + : Screen(app), + notificationManager{notificationManager}, + alertNotificationService{alertNotificationService}, + motorController{motorController}, + mode{mode} { notificationManager.ClearNewNotificationFlag(); auto notification = notificationManager.GetLastNotification(); if (notification.valid) { @@ -23,7 +28,10 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController, + &timeoutTickCountEnd, + &timeoutTickCountStart); validDisplay = true; } else { currentItem = std::make_unique<NotificationItem>("Notification", @@ -32,7 +40,10 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), Modes::Preview, - alertNotificationService); + alertNotificationService, + motorController, + &timeoutTickCountEnd, + &timeoutTickCountStart); } if (mode == Modes::Preview) { @@ -54,7 +65,7 @@ Notifications::~Notifications() { } bool Notifications::Refresh() { - if (mode == Modes::Preview) { + if (mode == Modes::Preview && !currentItem->timeoutOnHold) { auto tick = xTaskGetTickCount(); int32_t pos = 240 - ((tick - timeoutTickCountStart) / ((timeoutTickCountEnd - timeoutTickCountStart) / 240)); if (pos < 0) @@ -63,7 +74,9 @@ bool Notifications::Refresh() { timeoutLinePoints[1].x = pos; lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } - + //make sure we stop any vibrations before exiting + if (!running) + motorController.stopRunning(); return running; } @@ -92,7 +105,10 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { previousNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController, + &timeoutTickCountEnd, + &timeoutTickCountStart); } return true; case Pinetime::Applications::TouchEvents::SwipeUp: { @@ -117,7 +133,10 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { nextNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController, + &timeoutTickCountEnd, + &timeoutTickCountStart); } return true; case Pinetime::Applications::TouchEvents::LongTap: { @@ -152,9 +171,12 @@ Notifications::NotificationItem::NotificationItem(const char* title, Controllers::NotificationManager::Categories category, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { - + Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, + uint32_t* timeoutEnd, + uint32_t* timeoutStart) + : notifNr{notifNr}, notifNb{notifNb}, mode{mode}, alertNotificationService{alertNotificationService}, + motorController{motorController}, timeoutEnd{timeoutEnd}, timeoutStart{timeoutStart} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); @@ -236,6 +258,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text(label_mute, Symbols::volumMute); lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + timeoutOnHold = true; } break; } @@ -249,24 +272,32 @@ Notifications::NotificationItem::NotificationItem(const char* title, void Notifications::NotificationItem::OnAcceptIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + callPreviewInteraction(); alertNotificationService.AcceptIncomingCall(); } void Notifications::NotificationItem::OnMuteIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + callPreviewInteraction(); alertNotificationService.MuteIncomingCall(); } void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + callPreviewInteraction(); alertNotificationService.RejectIncomingCall(); } +inline void Notifications::NotificationItem::callPreviewInteraction() { + *timeoutStart = xTaskGetTickCount(); + *timeoutEnd = *timeoutStart + (5 * 1024); + timeoutOnHold = false; + motorController.stopRunning(); +} + + Notifications::NotificationItem::~NotificationItem() { lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 51ca81da..32bd0770 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -5,6 +5,7 @@ #include <memory> #include "Screen.h" #include "components/ble/NotificationManager.h" +#include "components/motor/MotorController.h" namespace Pinetime { namespace Controllers { @@ -19,6 +20,7 @@ namespace Pinetime { explicit Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, Modes mode); ~Notifications() override; @@ -33,7 +35,10 @@ namespace Pinetime { Controllers::NotificationManager::Categories, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService); + Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, + uint32_t* timeoutEnd, + uint32_t* timeoutStart); ~NotificationItem(); bool Refresh() { return false; @@ -41,8 +46,11 @@ namespace Pinetime { void OnAcceptIncomingCall(lv_event_t event); void OnMuteIncomingCall(lv_event_t event); void OnRejectIncomingCall(lv_event_t event); - + + bool timeoutOnHold = false; private: + void callPreviewInteraction(); + uint8_t notifNr = 0; uint8_t notifNb = 0; char pageText[4]; @@ -58,8 +66,11 @@ namespace Pinetime { lv_obj_t* label_mute; lv_obj_t* label_reject; lv_obj_t* bottomPlaceholder; + uint32_t* timeoutEnd; + uint32_t* timeoutStart; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; + Controllers::MotorController& motorController; }; private: @@ -72,6 +83,7 @@ namespace Pinetime { Modes mode = Modes::Normal; std::unique_ptr<NotificationItem> currentItem; Controllers::NotificationManager::Notification::Id currentId; + Controllers::MotorController& motorController; bool validDisplay = false; lv_point_t timeoutLinePoints[2] {{0, 1}, {239, 1}}; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 2cd24876..5e46e2e5 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -140,7 +140,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::ON); - motorController.SetDuration(35); + motorController.runForDuration(35); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::OFF); |