From 3e68d4589f644a3e4a1440fec3434c1a06f217f4 Mon Sep 17 00:00:00 2001 From: Martin Klapetek Date: Mon, 29 Jun 2015 18:16:10 +0200 Subject: [PATCH] [dialer] Add call timer to the call page --- dialer/package/contents/ui/Call/CallPage.qml | 2 +- dialer/src/call-manager.cpp | 16 ++++++++++++++++ dialer/src/dialerutils.cpp | 14 +++++++++++++- dialer/src/dialerutils.h | 5 +++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/dialer/package/contents/ui/Call/CallPage.qml b/dialer/package/contents/ui/Call/CallPage.qml index c80c2345..0b7b2f16 100644 --- a/dialer/package/contents/ui/Call/CallPage.qml +++ b/dialer/package/contents/ui/Call/CallPage.qml @@ -122,7 +122,7 @@ Item { //STATUS_DIALING } else if (ofonoWrapper.status == "dialing") { return i18n("Calling..."); - } else if (ofonoWrapper.duration > 0) { + } else if (dialerUtils.duration > 0) { return secondsToTimeString(ofonoWrapper.duration); } else { return ''; diff --git a/dialer/src/call-manager.cpp b/dialer/src/call-manager.cpp index 28b67dc1..38791d73 100644 --- a/dialer/src/call-manager.cpp +++ b/dialer/src/call-manager.cpp @@ -16,6 +16,7 @@ */ #include "call-manager.h" #include "dialerutils.h" +#include #include #include @@ -36,6 +37,7 @@ struct CallManager::Private KNotification *ringingNotification; KNotification *callsNotification; uint missedCalls; + QTimer *callTimer; }; CallManager::CallManager(const Tp::CallChannelPtr &callChannel, DialerUtils *dialerUtils, QObject *parent) @@ -58,6 +60,7 @@ CallManager::CallManager(const Tp::CallChannelPtr &callChannel, DialerUtils *dia d->ringingNotification = nullptr; d->callsNotification = nullptr; + d->callTimer = nullptr; //create the channel handler // d->channelHandler = new CallChannelHandler(callChannel, this); @@ -147,6 +150,12 @@ void CallManager::onCallStateChanged(Tp::CallState state) // delete d->approver.data(); } d->dialerUtils->setCallState("active"); + d->callTimer = new QTimer(this); + connect(d->callTimer, &QTimer::timeout, [=]() { + d->dialerUtils->setCallDuration(d->dialerUtils->callDuration() + 1); + }); + d->callTimer->start(1000); + // ensureCallWindow(); // d->callWindow.data()->setStatus(CallWindow::StatusActive); break; @@ -178,6 +187,13 @@ void CallManager::onCallStateChanged(Tp::CallState state) d->callsNotification->update(); } } + + if (d->callTimer) { + d->callTimer->stop(); + d->callTimer->deleteLater(); + d->callTimer = nullptr; + d->dialerUtils->setCallDuration(0); + } //if we requested the call, make sure we have a window to show the error (if any) // if (d->callChannel->isRequested()) { // ensureCallWindow(); diff --git a/dialer/src/dialerutils.cpp b/dialer/src/dialerutils.cpp index 59c7a893..8a547748 100644 --- a/dialer/src/dialerutils.cpp +++ b/dialer/src/dialerutils.cpp @@ -32,7 +32,8 @@ DialerUtils::DialerUtils(const Tp::AccountPtr &simAccount, QObject *parent) : QObject(parent), m_missedCalls(0), - m_simAccount(simAccount) + m_simAccount(simAccount), + m_callDuration(0), { Tp::PendingReady *op = m_simAccount->becomeReady(Tp::Features() << Tp::Account::FeatureCore); @@ -82,6 +83,17 @@ void DialerUtils::setCallState(const QString &state) } } +uint DialerUtils::callDuration() const +{ + return m_callDuration; +} + +void DialerUtils::setCallDuration(uint duration) +{ + m_callDuration = duration; + Q_EMIT callDurationChanged(); +} + void DialerUtils::resetMissedCalls() { m_missedCalls = 0; diff --git a/dialer/src/dialerutils.h b/dialer/src/dialerutils.h index 936460f8..af792101 100644 --- a/dialer/src/dialerutils.h +++ b/dialer/src/dialerutils.h @@ -29,6 +29,7 @@ class DialerUtils : public QObject { Q_OBJECT Q_PROPERTY(QString callState READ callState NOTIFY callStateChanged); + Q_PROPERTY(uint callDuration READ callDuration NOTIFY callDurationChanged); public: DialerUtils(const Tp::AccountPtr &simAccount, QObject *parent = 0); @@ -37,12 +38,15 @@ public: QString callState() const; void setCallState(const QString &state); + uint callDuration() const; + void setCallDuration(uint duration); Q_INVOKABLE void resetMissedCalls(); Q_INVOKABLE void dial(const QString &number); Q_SIGNALS: void missedCallsActionTriggered(); void callStateChanged(); + void callDurationChanged(); void acceptCall(); void rejectCall(); void hangUp(); @@ -53,6 +57,7 @@ private: int m_missedCalls; QString m_callState; Tp::AccountPtr m_simAccount; + uint m_callDuration; };