File indexing completed on 2024-04-28 16:42:51

0001 // SPDX-FileCopyrightText: 2020 Bhushan Shah <bshah@kde.org>
0002 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru>
0003 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0004 
0005 #pragma once
0006 
0007 #include <KNotification>
0008 #ifdef HAVE_QT5_FEEDBACK
0009 #include <QtFeedback/QFeedbackEffect>
0010 #endif // HAVE_QT5_FEEDBACK
0011 
0012 #include "callhistorydatabaseinterface.h"
0013 #include "callutilsinterface.h"
0014 #include "contact-utils.h"
0015 
0016 class NotificationManager : public QObject
0017 {
0018     Q_OBJECT
0019 public:
0020     NotificationManager(QObject *parent = nullptr);
0021 
0022     void setCallUtils(org::kde::telephony::CallUtils *callUtils);
0023     void setContactUtils(ContactUtils *contactUtils);
0024 
0025 private Q_SLOTS:
0026     void onCallAdded(const QString &deviceUni,
0027                      const QString &callUni,
0028                      const DialerTypes::CallDirection &callDirection,
0029                      const DialerTypes::CallState &callState,
0030                      const DialerTypes::CallStateReason &callStateReason,
0031                      const QString communicationWith);
0032     void onCallDeleted(const QString &deviceUni, const QString &callUni);
0033     void onCallStateChanged(const DialerTypes::CallData &callData);
0034 
0035 private:
0036     std::unique_ptr<KNotification> _ringingNotification;
0037     std::unique_ptr<KNotification> _missedCallNotification;
0038 
0039     void openRingingNotification(const QString &deviceUni, const QString &callUni, const QString callerDisplay, const QString notificationEvent);
0040     void closeRingingNotification();
0041 
0042     void accept(const QString &deviceUni, const QString &callUni);
0043     void hangUp(const QString &deviceUni, const QString &callUni);
0044 
0045     void handleIncomingCall(const QString &deviceUni, const QString &callUni, const QString &communicationWith);
0046     void handleCallInteraction();
0047 
0048     org::kde::telephony::CallHistoryDatabase *_databaseInterface;
0049 
0050     org::kde::telephony::CallUtils *_callUtils;
0051     ContactUtils *_contactUtils;
0052 
0053     bool _callStarted;
0054 
0055     void startHapticsFeedback();
0056     void stopHapticsFeedback();
0057 #ifdef HAVE_QT5_FEEDBACK
0058     std::unique_ptr<QFeedbackHapticsEffect> _ringEffect;
0059 #endif // HAVE_QT5_FEEDBACK
0060 };