diff --git a/CMakeLists.txt b/CMakeLists.txt index e496cb93..d78c4f7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ include(FeatureSummary) find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core Gui Widgets Qml Quick Test) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma Service Declarative I18n) -find_package(KF5 REQUIRED COMPONENTS PlasmaQuick DBusAddons) +find_package(KF5 REQUIRED COMPONENTS PlasmaQuick DBusAddons Notifications) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/dialer/package/contents/ui/main.qml b/dialer/package/contents/ui/main.qml index 10726900..8e9dbce9 100644 --- a/dialer/package/contents/ui/main.qml +++ b/dialer/package/contents/ui/main.qml @@ -33,15 +33,39 @@ ApplicationWindow { width: 600 height: 800 - property int status: voiceCallmanager.activeVoiceCall ? voiceCallmanager.activeVoiceCall.status : 0 + //keep track of the status we were in + property int previousStatus + //keep track if we were visible when ringing + property bool wasVisible //END PROPERTIES //BEGIN SIGNAL HANDLERS onStatusChanged: { //STATUS_INCOMING if (status == 5) { + wasVisible = root.visible; root.visible = true; + //Was STATUS_INCOMING now is STATUS_DISCONNECTED: Missed call! + } else if (status == 7 && previousStatus == 5) { + dialerUtils.notifyMissedCall(); + root.visible = wasVisible; + } + + previousStatus = status; + } + + Connections { + target: dialerUtils + onMissedCallsActionTriggered: { + root.visible = true; + } + } + + onVisibleChanged: { + //reset missed calls if the status is not STATUS_INCOMING when got visible + if (visible && status != 5) { + dialerUtils.resetMissedCalls(); } } //END SIGNAL HANDLERS diff --git a/dialer/src/CMakeLists.txt b/dialer/src/CMakeLists.txt index e3c452ed..c2980082 100644 --- a/dialer/src/CMakeLists.txt +++ b/dialer/src/CMakeLists.txt @@ -19,6 +19,8 @@ target_link_libraries(plasmaphonedialer KF5::Package KF5::QuickAddons KF5::DBusAddons + KF5::Notifications ) install(TARGETS plasmaphonedialer ${INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES plasma_dialer.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFY5RCDIR}) diff --git a/dialer/src/dialerutils.cpp b/dialer/src/dialerutils.cpp index 745a4da3..0b14e04a 100644 --- a/dialer/src/dialerutils.cpp +++ b/dialer/src/dialerutils.cpp @@ -20,14 +20,54 @@ #include +#include + DialerUtils::DialerUtils(QObject *parent) -: QObject(parent) +: QObject(parent), + m_missedCalls(0) { - } DialerUtils::~DialerUtils() { } +void DialerUtils::notifyMissedCall() +{ + qWarning() << "Missed Call."; + + ++m_missedCalls; + if (!m_callsNotification) { + m_callsNotification = new KNotification("callMissed", KNotification::Persistent, 0); + } + m_callsNotification->setComponentName("plasma_dialer"); + m_callsNotification->setIconName("call-start"); + m_callsNotification->setTitle(i18np("One call missed", "%1 calls missed", m_missedCalls)); + + QStringList actions; + actions.append(i18n("View")); + m_callsNotification->setActions(actions); + QObject::connect(m_callsNotification.data(), &KNotification::action1Activated, + [=]() { + qWarning()<<"View action activated"; + emit missedCallsActionTriggered(); + resetMissedCalls(); + }); + + if (m_missedCalls == 1) { + m_callsNotification->sendEvent(); + } else { + m_callsNotification->update(); + } +} + +void DialerUtils::resetMissedCalls() +{ + m_missedCalls = 0; + if (m_callsNotification) { + m_callsNotification->close(); + } + m_callsNotification.clear(); +} + #include "moc_dialerutils.cpp" diff --git a/dialer/src/dialerutils.h b/dialer/src/dialerutils.h index ae2d5d23..dde482b6 100644 --- a/dialer/src/dialerutils.h +++ b/dialer/src/dialerutils.h @@ -20,6 +20,8 @@ #define DIALERUTILS_H #include +#include +#include class DialerUtils : public QObject { @@ -29,8 +31,15 @@ public: DialerUtils(QObject *parent = 0); virtual ~DialerUtils(); + Q_INVOKABLE void notifyMissedCall(); + Q_INVOKABLE void resetMissedCalls(); + +Q_SIGNALS: + void missedCallsActionTriggered(); + private: - + QPointer m_callsNotification; + int m_missedCalls; }; diff --git a/dialer/src/plasma_dialer.notifyrc b/dialer/src/plasma_dialer.notifyrc new file mode 100644 index 00000000..c1c51e4b --- /dev/null +++ b/dialer/src/plasma_dialer.notifyrc @@ -0,0 +1,9 @@ +[Global] +IconName=call-start +Comment=Plasma Phone Dialer + +[Event/callMissed] +Name=Missed Call +Comment=A call has been missed +Action=Popup +