summaryrefslogtreecommitdiff
path: root/src/displayapp/screens/Notifications.h
blob: aafd3e332e23f43f0669faa3166fa6e29167e95b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once

#include <lvgl/lvgl.h>
#include <cstdint>
#include <memory>
#include "Screen.h"
#include "components/ble/NotificationManager.h"

namespace Pinetime {
  namespace Controllers {
    class AlertNotificationService;
  }
  namespace Applications {
    namespace Screens {

      class Notifications : public Screen {
        public:
          enum class Modes {Normal, Preview};
          explicit Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, Modes mode);
          ~Notifications() override;

          bool Refresh() override;
          bool OnButtonPushed() override;
          bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override;

        class NotificationItem {
        public:
          NotificationItem(const char* title, const char* msg, uint8_t notifNr, Controllers::NotificationManager::Categories, uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService);
          ~NotificationItem();
          bool Refresh() {return false;}
          void OnAcceptIncomingCall(lv_event_t event);
          void OnRejectIncomingCall(lv_event_t event);

        private:
          uint8_t notifNr = 0;
          uint8_t notifNb = 0;
          char pageText[4];

          lv_obj_t* container1;
          lv_obj_t* t1;
          lv_obj_t* l1;
          lv_obj_t* l2;
          lv_obj_t* bt_accept;
          lv_obj_t* bt_reject;
          lv_obj_t* label_accept;
          lv_obj_t* label_reject;
          lv_obj_t* bottomPlaceholder;
          Modes mode;
          Pinetime::Controllers::AlertNotificationService& alertNotificationService;


        };

        private:
          bool running = true;

          struct NotificationData {
            const char* title;
            const char* text;
          };
          Pinetime::Controllers::NotificationManager& notificationManager;
          Pinetime::Controllers::AlertNotificationService& alertNotificationService;
          Modes mode = Modes::Normal;
          std::unique_ptr<NotificationItem> currentItem;
          Controllers::NotificationManager::Notification::Id currentId;
          bool validDisplay = false;

          lv_point_t timeoutLinePoints[2]  { {0, 237}, {239, 237} };
          lv_obj_t* timeoutLine;
          uint32_t timeoutTickCountStart;
          uint32_t timeoutTickCountEnd;
      };
    }
  }
}