2 * dialer - Declarative Dialer UX Main Window.
3 * Copyright (c) 2011, Tom Swindell.
5 * This program is licensed under the terms and conditions of the
6 * Apache License, version 2.0. The full text of the Apache License is at
7 * http://www.apache.org/licenses/LICENSE-2.0
12 #include "qmldialer.h"
13 #include "dialerapplication.h"
14 #include "dialercontext.h"
15 #include "callmanager.h"
16 #include "managerproxy.h"
18 #define CONFIG_KEY_VOICEMAIL_NUMBER "/apps/dialer/voicemail/number"
20 class QMLDialerPrivate
27 QMLCallItem *currentCall;
30 QMLDialer::QMLDialer(QObject *parent)
31 : QObject(parent), d(new QMLDialerPrivate)
34 CallManager *cm = ManagerProxy::instance()->callManager();
37 connect(ManagerProxy::instance(), SIGNAL(callManagerChanged()), SLOT(onCallManagerChanged()));
39 if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
42 QMLDialer::~QMLDialer()
48 QString QMLDialer::mailbox() const
52 if(ManagerProxy::instance()->voicemail()->isConnected())
54 return ManagerProxy::instance()->voicemail()->mailbox();
57 // Fall back to GConf voicemail setting.
58 return MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).value().toString();
61 bool QMLDialer::modemOnline()
63 if(ManagerProxy::instance()->modem() &&
64 ManagerProxy::instance()->modem()->isValid())
66 return ManagerProxy::instance()->modem()->powered();
72 void QMLDialer::setMailbox(const QString &number)
76 if(ManagerProxy::instance()->voicemail()->isConnected())
78 ManagerProxy::instance()->voicemail()->setMailbox(number);
82 // Fall back to GConf voicemail setting.
83 MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).set(number);
86 void QMLDialer::setModemOnline(bool online)
88 if (ManagerProxy::instance() && ManagerProxy::instance()->modem())
90 if(ManagerProxy::instance()->modem()->isValid())
92 ManagerProxy::instance()->modem()->setPowered(online);
98 QString QMLDialer::speedDial(int index) const
101 return MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).value().toString();
104 void QMLDialer::setSpeedDial(int index, const QString &number)
107 MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).set(number);
110 QMLCallItem* QMLDialer::currentCall() const
113 return d->currentCall;
116 void QMLDialer::dial(const QString &msisdn)
119 CallManager *cm = ManagerProxy::instance()->callManager();
120 if (cm && cm->isValid())
127 void QMLDialer::hangupAll()
130 CallManager *cm = ManagerProxy::instance()->callManager();
131 if ((cm && cm->isValid()))
137 void QMLDialer::silenceRingtone()
139 if(ManagerProxy::instance()->volumeManager()->isConnected())
141 qDebug() << "Attempting to mute call with volume manager.";
142 ManagerProxy::instance()->volumeManager()->setMuted(true);
144 else if(d->currentCall)
146 qDebug() << "Attempting to mute call with call item signaller.";
147 d->currentCall->proxy()->silenceRingtone();
151 qDebug() << "Couldn't decide how to mute ringtone!";
155 void QMLDialer::sendTones(const QString &tones)
158 CallManager *cm = ManagerProxy::instance()->callManager();
159 if (cm && cm->isValid())
160 cm->sendTones(tones);
163 void QMLDialer::transfer()
166 CallManager *cm = ManagerProxy::instance()->callManager();
167 if (cm && cm->isValid())
171 void QMLDialer::swapCalls()
174 CallManager *cm = ManagerProxy::instance()->callManager();
175 if (cm && cm->isValid())
179 void QMLDialer::releaseAndAnswer()
182 CallManager *cm = ManagerProxy::instance()->callManager();
183 if (cm && cm->isValid())
184 cm->releaseAndAnswer();
187 void QMLDialer::holdAndAnswer()
190 CallManager *cm = ManagerProxy::instance()->callManager();
191 if (cm && cm->isValid())
195 void QMLDialer::createMultiparty()
198 CallManager *cm = ManagerProxy::instance()->callManager();
199 if (cm && cm->isValid())
200 cm->createMultiparty();
204 void QMLDialer::hangupMultiparty()
208 CallManager *cm = ManagerProxy::instance()->callManager();
209 if (cm && cm->isValid())
210 cm->hangupMultiparty();
214 void QMLDialer::privateChat(const QMLCallItem &call)
217 CallManager *cm = ManagerProxy::instance()->callManager();
218 if (cm && cm->isValid())
219 cm->privateChat(*call.proxy());
222 void QMLDialer::onCallsChanged()
225 CallManager *cm = ManagerProxy::instance()->callManager();
229 this->onIncomingCall(cm->activeCall());
233 delete d->currentCall;
234 d->currentCall = NULL;
238 void QMLDialer::onIncomingCall(CallItem *callitem)
242 d->currentCall = new QMLCallItem(callitem, this);
243 emit this->incomingCall();
246 void QMLDialer::connectAll()
249 CallManager *cm = ManagerProxy::instance()->callManager();
251 if (cm && cm->isValid())
253 disconnect(cm, SIGNAL(callsChanged()));
254 disconnect(cm, SIGNAL(incomingCall(CallItem*)));
255 connect(cm, SIGNAL(callsChanged()), this, SLOT(onCallsChanged()));
256 connect(cm, SIGNAL(incomingCall(CallItem*)), SLOT(onIncomingCall(CallItem*)));
257 qDebug() << QString("CallMgr is connected");
261 disconnect(cm, SIGNAL(connected()));
262 connect(cm, SIGNAL(connected()), this, SLOT(connectAll()));
263 qDebug() << QString("CallMgr is not yet valid");
267 void QMLDialer::onCallManagerChanged()
271 CallManager *cm = ManagerProxy::instance()->callManager();
273 if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);