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()));
38 connect(cm, SIGNAL(callCountChanged()), SIGNAL(callCountChanged(cm->callCount())));
40 if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
43 QMLDialer::~QMLDialer()
49 QString QMLDialer::mailbox() const
53 if(ManagerProxy::instance()->voicemail()->isConnected())
55 return ManagerProxy::instance()->voicemail()->mailbox();
58 // Fall back to GConf voicemail setting.
59 return MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).value().toString();
62 bool QMLDialer::modemOnline()
64 if(ManagerProxy::instance()->modem() &&
65 ManagerProxy::instance()->modem()->isValid())
67 return ManagerProxy::instance()->modem()->powered();
73 void QMLDialer::setMailbox(const QString &number)
77 if(ManagerProxy::instance()->voicemail()->isConnected())
79 ManagerProxy::instance()->voicemail()->setMailbox(number);
83 // Fall back to GConf voicemail setting.
84 MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).set(number);
87 void QMLDialer::setModemOnline(bool online)
89 if (ManagerProxy::instance() && ManagerProxy::instance()->modem())
91 if(ManagerProxy::instance()->modem()->isValid())
93 ManagerProxy::instance()->modem()->setPowered(online);
99 QString QMLDialer::speedDial(int index) const
102 return MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).value().toString();
105 void QMLDialer::setSpeedDial(int index, const QString &number)
108 MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).set(number);
111 QMLCallItem* QMLDialer::currentCall() const
114 return d->currentCall;
117 int QMLDialer::callCount()
120 CallManager *cm = ManagerProxy::instance()->callManager();
121 return cm->callCount();
125 void QMLDialer::dial(const QString &msisdn)
128 CallManager *cm = ManagerProxy::instance()->callManager();
129 if (cm && cm->isValid())
136 void QMLDialer::hangupAll()
139 CallManager *cm = ManagerProxy::instance()->callManager();
140 if ((cm && cm->isValid()))
146 void QMLDialer::silenceRingtone()
148 if(ManagerProxy::instance()->volumeManager()->isConnected())
150 qDebug() << "Attempting to mute call with volume manager.";
151 ManagerProxy::instance()->volumeManager()->setMuted(true);
153 else if(d->currentCall)
155 qDebug() << "Attempting to mute call with call item signaller.";
156 d->currentCall->proxy()->silenceRingtone();
160 qDebug() << "Couldn't decide how to mute ringtone!";
164 void QMLDialer::sendTones(const QString &tones)
167 CallManager *cm = ManagerProxy::instance()->callManager();
168 if (cm && cm->isValid())
169 cm->sendTones(tones);
172 void QMLDialer::transfer()
175 CallManager *cm = ManagerProxy::instance()->callManager();
176 if (cm && cm->isValid())
180 void QMLDialer::swapCalls()
183 CallManager *cm = ManagerProxy::instance()->callManager();
184 if (cm && cm->isValid())
188 void QMLDialer::releaseAndAnswer()
191 CallManager *cm = ManagerProxy::instance()->callManager();
192 if (cm && cm->isValid())
193 cm->releaseAndAnswer();
196 void QMLDialer::holdAndAnswer()
199 CallManager *cm = ManagerProxy::instance()->callManager();
200 if (cm && cm->isValid())
204 void QMLDialer::createMultiparty()
208 void QMLDialer::hangupMultiparty()
212 void QMLDialer::privateChat(const QMLCallItem &call)
215 CallManager *cm = ManagerProxy::instance()->callManager();
216 if (cm && cm->isValid())
217 cm->privateChat(*call.proxy());
220 void QMLDialer::onCallsChanged()
223 CallManager *cm = ManagerProxy::instance()->callManager();
227 this->onIncomingCall(cm->activeCall());
231 delete d->currentCall;
232 d->currentCall = NULL;
233 emit callCountChanged(cm->callCount());
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 (ManagerProxy::instance()->modem() && ManagerProxy::instance()->modem()->isValid())
253 connect(ManagerProxy::instance()->modem(), SIGNAL(poweredChanged(bool)), this, SIGNAL(modemOnlineChanged(bool)));
256 if (cm && cm->isValid())
258 disconnect(cm, SIGNAL(callsChanged()));
259 disconnect(cm, SIGNAL(incomingCall(CallItem*)));
260 connect(cm, SIGNAL(callsChanged()), this, SLOT(onCallsChanged()));
261 connect(cm, SIGNAL(incomingCall(CallItem*)), SLOT(onIncomingCall(CallItem*)));
262 qDebug() << QString("CallMgr is connected");
266 disconnect(cm, SIGNAL(connected()));
267 connect(cm, SIGNAL(connected()), this, SLOT(connectAll()));
268 qDebug() << QString("CallMgr is not yet valid");
272 void QMLDialer::onCallManagerChanged()
276 CallManager *cm = ManagerProxy::instance()->callManager();
278 if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
281 /* Local Variables: */
283 /* c-basic-offset:4 */
284 /* indent-tabs-mode: nil */