summaryrefslogtreecommitdiff
path: root/src/displayapp/screens
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp/screens')
-rw-r--r--src/displayapp/screens/Notifications.cpp57
-rw-r--r--src/displayapp/screens/Notifications.h16
-rw-r--r--src/displayapp/screens/settings/QuickSettings.cpp2
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);