[dialer] Move the stuff from the tpCaller qml plugin into DialerUtils

Less hassle needed with env vars
This commit is contained in:
Martin Klapetek 2015-06-19 01:24:46 +02:00
parent def5d16a22
commit cf00cb85f3
5 changed files with 119 additions and 51 deletions

View file

@ -28,7 +28,7 @@ import "../Dialpad"
Item {
id: callPage
property string status: ofonoWrapper.status
property string status: dialerUtils.callState
property string providerId: ofonoWrapper.providerId
@ -168,10 +168,10 @@ Item {
//STATUS_INCOMING
visible: status == "incoming"
onAccepted: {
ofonoWrapper.answer();
dialerUtils.acceptCall();
}
onRejected: {
ofonoWrapper.hangup();
dialerUtils.rejectCall();
}
}
@ -183,7 +183,7 @@ Item {
Layout.fillWidth: true
text: i18n("End Call")
onClicked: {
tpCaller.hangUp();
dialerUtils.hangUp();
}
}
}

View file

@ -24,7 +24,6 @@ import QtQuick.Layouts 1.1
import QtQuick.LocalStorage 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.private.tpcaller 1.0
ApplicationWindow {
id: root
@ -39,6 +38,7 @@ ApplicationWindow {
property string providerId: ofonoWrapper.providerId
//was the last call an incoming one?
property bool isIncoming
//END PROPERTIES
//BEGIN SIGNAL HANDLERS
@ -59,8 +59,7 @@ ApplicationWindow {
//BEGIN FUNCTIONS
function call(number) {
tpCaller.dial(number);
//ofonoWrapper.call(number);
dialerUtils.dial(number);
}
function insertCallInHistory(number, duration, callType) {
@ -149,19 +148,15 @@ ApplicationWindow {
id: ofonoWrapper
}
TpCaller {
id: tpCaller
}
//END MODELS
//BEGIN UI
PlasmaExtras.ConditionalLoader {
anchors.fill: parent
when: root.visible && !tpCaller.callInProgress
when: root.visible && dialerUtils.callState == "idle"
source: Qt.resolvedUrl("Dialer/DialPage.qml")
z: !tpCaller.callInProgress ? 2 : 0
opacity: !tpCaller.callInProgress ? 1 : 0
z: dialerUtils.callState == "idle" ? 2 : 0
opacity: dialerUtils.callState == "idle" ? 1 : 0
Behavior on opacity {
OpacityAnimator {
duration: units.shortDuration
@ -172,10 +167,10 @@ ApplicationWindow {
PlasmaExtras.ConditionalLoader {
anchors.fill: parent
when: tpCaller.callInProgress
when: dialerUtils.callState != "idle"
source: Qt.resolvedUrl("Call/CallPage.qml")
opacity: tpCaller.callInProgress ? 1 : 0
z: tpCaller.callInProgress ? 2 : 0
opacity: dialerUtils.callState != "idle" ? 1 : 0
z: dialerUtils.callState != "idle" ? 2 : 0
Behavior on opacity {
OpacityAnimator {
duration: units.shortDuration

View file

@ -21,17 +21,67 @@
#include <QDebug>
#include <KLocalizedString>
#include <TelepathyQt/PendingOperation>
#include <TelepathyQt/PendingChannelRequest>
#include <TelepathyQt/PendingReady>
#include <TelepathyQt/Constants>
#include <TelepathyQt/PendingContacts>
#include <TelepathyQt/Types>
#include <TelepathyQt/ContactManager>
DialerUtils::DialerUtils(QObject *parent)
DialerUtils::DialerUtils(const Tp::AccountPtr &simAccount, QObject *parent)
: QObject(parent),
m_missedCalls(0)
m_missedCalls(0),
m_simAccount(simAccount)
{
Tp::PendingReady *op = m_simAccount->becomeReady(Tp::Features() << Tp::Account::FeatureCore);
connect(op, &Tp::PendingOperation::finished, [=](){
if (op->isError()) {
qWarning() << "SIM card account failed to get ready:" << op->errorMessage();
} else {
qDebug() << "SIM Account ready to use";
}
});
}
DialerUtils::~DialerUtils()
{
}
void DialerUtils::dial(const QString &number)
{
// FIXME: this should be replaced by kpeople thing
auto pendingContact = m_simAccount->connection()->contactManager()->contactsForIdentifiers(QStringList() << number);
connect(pendingContact, &Tp::PendingOperation::finished, [=](){
if (pendingContact->contacts().size() < 1) {
qWarning() << " no contacts";
return;
}
qDebug() << "Starting call...";
Tp::PendingChannelRequest *pendingChannel = m_simAccount->ensureAudioCall(pendingContact->contacts().first());
connect(pendingChannel, &Tp::PendingChannelRequest::finished, [=](){
if (pendingChannel->isError()) {
qWarning() << "Error when requesting channel" << pendingChannel->errorMessage();
}
});
});
}
QString DialerUtils::callState() const
{
return m_callState;
}
void DialerUtils::setCallState(const QString &state)
{
if (m_callState != state) {
m_callState = state;
Q_EMIT callStateChanged();
}
}
void DialerUtils::notifyMissedCall(const QString &caller, const QString &description)
{
qWarning() << "Missed Call.";

View file

@ -23,26 +23,39 @@
#include <QPointer>
#include <KNotification>
#include <TelepathyQt/Account>
class DialerUtils : public QObject
{
Q_OBJECT
Q_PROPERTY(QString callState READ callState NOTIFY callStateChanged);
public:
DialerUtils(QObject *parent = 0);
DialerUtils(const Tp::AccountPtr &simAccount, QObject *parent = 0);
virtual ~DialerUtils();
QString callState() const;
void setCallState(const QString &state);
Q_INVOKABLE void notifyMissedCall(const QString &caller, const QString &description);
Q_INVOKABLE void resetMissedCalls();
Q_INVOKABLE void notifyRinging();
Q_INVOKABLE void stopRinging();
Q_INVOKABLE void dial(const QString &number);
Q_SIGNALS:
void missedCallsActionTriggered();
void callStateChanged();
void acceptCall();
void rejectCall();
void hangUp();
private:
QPointer <KNotification> m_callsNotification;
QPointer <KNotification> m_ringingNotification;
int m_missedCalls;
QString m_callState;
Tp::AccountPtr m_simAccount;
};

View file

@ -72,6 +72,43 @@ int main(int argc, char **argv)
parser.process(app);
Tp::registerTypes();
Tp::AccountFactoryPtr accountFactory = Tp::AccountFactory::create(QDBusConnection::sessionBus(),
Tp::Features() << Tp::Account::FeatureCore
);
Tp::ConnectionFactoryPtr connectionFactory = Tp::ConnectionFactory::create(QDBusConnection::sessionBus(),
Tp::Features() << Tp::Connection::FeatureCore
<< Tp::Connection::FeatureSelfContact
<< Tp::Connection::FeatureConnected
);
Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus());
channelFactory->addCommonFeatures(Tp::Channel::FeatureCore);
channelFactory->addFeaturesForCalls(Tp::Features() << Tp::CallChannel::FeatureContents
<< Tp::CallChannel::FeatureCallState
<< Tp::CallChannel::FeatureCallMembers
<< Tp::CallChannel::FeatureLocalHoldState
);
// channelFactory->addFeaturesForTextChats(Tp::Features() << Tp::TextChannel::FeatureMessageQueue
// << Tp::TextChannel::FeatureMessageSentSignal
// << Tp::TextChannel::FeatureChatState
// << Tp::TextChannel::FeatureMessageCapabilities);
Tp::ContactFactoryPtr contactFactory = Tp::ContactFactory::create(Tp::Features() << Tp::Contact::FeatureAlias
<< Tp::Contact::FeatureAvatarData
);
Tp::ClientRegistrarPtr registrar =
Tp::ClientRegistrar::create(accountFactory, connectionFactory,
channelFactory, contactFactory);
Tp::AccountPtr simAccount = Tp::Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME, QStringLiteral("/org/freedesktop/Telepathy/Account/ofono/ofono/account0"),
connectionFactory, channelFactory);
const QString packagePath("org.kde.phone.dialer");
//usually we have an ApplicationWindow here, so we do not need to create a window by ourselves
@ -81,7 +118,7 @@ int main(int argc, char **argv)
obj->loadPackage(packagePath);
obj->engine()->rootContext()->setContextProperty("commandlineArguments", parser.positionalArguments());
DialerUtils *dialerUtils = new DialerUtils;
DialerUtils *dialerUtils = new DialerUtils(simAccount);
obj->engine()->rootContext()->setContextProperty("dialerUtils", QVariant::fromValue(dialerUtils));
obj->completeInitialization();
@ -90,6 +127,9 @@ int main(int argc, char **argv)
return -1;
}
Tp::SharedPtr<CallHandler> callHandler(new CallHandler(dialerUtils));
registrar->registerClient(Tp::AbstractClientPtr::dynamicCast(callHandler), "Phone.Dialer");
KPluginMetaData data = obj->package().metadata();
// About data
KAboutData aboutData(data.pluginId(), data.name(), data.version(), data.description(), KAboutLicense::byKeyword(data.license()).key());
@ -133,36 +173,6 @@ int main(int argc, char **argv)
qWarning() << "Error loading the ApplicationWindow";
}
Tp::AccountFactoryPtr accountFactory = Tp::AccountFactory::create(QDBusConnection::sessionBus(),
Tp::Features() << Tp::Account::FeatureCore
);
Tp::ConnectionFactoryPtr connectionFactory = Tp::ConnectionFactory::create(QDBusConnection::sessionBus(),
Tp::Features() << Tp::Connection::FeatureCore
<< Tp::Connection::FeatureSelfContact
);
Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus());
channelFactory->addCommonFeatures(Tp::Channel::FeatureCore);
channelFactory->addFeaturesForCalls(Tp::Features() << Tp::CallChannel::FeatureContents
<< Tp::CallChannel::FeatureCallState
<< Tp::CallChannel::FeatureCallMembers
<< Tp::CallChannel::FeatureLocalHoldState
);
Tp::ContactFactoryPtr contactFactory = Tp::ContactFactory::create(Tp::Features() << Tp::Contact::FeatureAlias
<< Tp::Contact::FeatureAvatarData
);
// app.setQuitOnLastWindowClosed(true);
Tp::ClientRegistrarPtr registrar =
Tp::ClientRegistrar::create(accountFactory, connectionFactory,
channelFactory, contactFactory);
Tp::SharedPtr<CallHandler> callHandler(new CallHandler(dialerUtils));
registrar->registerClient(Tp::AbstractClientPtr::dynamicCast(callHandler), "Phone.Dialer");
return app.exec();
}