2 * hfdialer - Hands Free Voice Call Manager
3 * Copyright (c) 2012, Intel Corporation.
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
11 #include "managerproxy.h"
12 #include "manager_interface.h"
13 #include "dialerapplication.h"
16 ManagerProxy *ManagerProxy::gManager = 0;
18 ManagerProxy::ManagerProxy(const QString &service,
20 const QDBusConnection &connection,
22 : org::ofono::Manager(service, path, connection, parent),
32 qFatal("ManagerProxy: There can be only one!");
35 qDebug() << "Failed to connect to Ofono: \n\t" << lastError().message();
37 QDBusPendingReply<QArrayOfPathProperties> reply;
38 QDBusPendingCallWatcher * watcher;
41 watcher = new QDBusPendingCallWatcher(reply);
43 // Force this to be sync to ensure we have initial properties
44 watcher->waitForFinished();
45 managerDBusGetModemsDone(watcher);
48 SIGNAL(ModemAdded(const QDBusObjectPath&, const QVariantMap&)),
49 SLOT(modemAdded(const QDBusObjectPath&, const QVariantMap&)));
51 SIGNAL(ModemRemoved(const QDBusObjectPath&)),
52 SLOT(modemRemoved(const QDBusObjectPath&)));
58 if (m_modem && m_modem->isValid() && !m_modem->powered())
59 m_modem->setPowered(true);
62 ManagerProxy::~ManagerProxy()
66 delete m_volumeManager;
88 void ManagerProxy::managerDBusGetModemsDone(QDBusPendingCallWatcher *call)
90 QDBusPendingReply<QArrayOfPathProperties> reply = *call;
92 if (reply.isError()) {
93 // TODO: Handle this properly, by setting states, or disabling features
94 qWarning() << "org.ofono.Manager.GetModems() failed: " <<
95 reply.error().message();
97 QArrayOfPathProperties modems = reply.value();
98 if (modems.count() >= 1) {
99 // FIXME: Handle multiple modems...
100 foreach (OfonoPathProperties p, modems)
102 qDebug() << "modem: " << p.path.path();
103 m_modemList << QString(p.path.path());
106 OfonoPathProperties p = modems[0];
107 if (m_modemPath.isNull() || m_modemPath.isEmpty()) {
108 qDebug() << QString("\n======\nUsing modem: \"%1\"\n======").arg(p.path.path());
109 m_modemPath = QString(p.path.path());
110 setModem(m_modemPath);
111 setNetwork(m_modemPath);
112 setCallManager(m_modemPath);
113 setVolumeManager(m_modemPath);
114 setVoicemail(m_modemPath);
115 // TODO: Connect to service proxies as available/needed here
121 void ManagerProxy::modemAdded(const QDBusObjectPath &in0,const QVariantMap &in1)
126 // TODO: Handle modem additions, maybe...
127 qWarning() << QString("Unhandled ModemAdded event: \"%1\"")
130 qDebug() << QString("modem added: %1").arg(in0.path());
131 m_modemList << QString(in0.path());
132 m_modemList.removeDuplicates();
134 setModem(in0.path());
135 setCallManager(m_modemPath);
138 void ManagerProxy::modemRemoved(const QDBusObjectPath &in0)
142 // TODO: Handle modem removals, currently active for sure, others, maybe...
143 qWarning() << QString("Unhandled ModemRemoved event: \"%1\"")
146 qDebug() << QString("modem removed: ").arg(in0.path());
147 m_modemList.removeOne(QString(in0.path()));
150 ManagerProxy *ManagerProxy::instance()
153 gManager = new ManagerProxy();
158 ModemProxy* ManagerProxy::modem() const
163 NetworkProxy* ManagerProxy::network() const
168 CallManager* ManagerProxy::callManager() const
170 return m_callManager;
173 VolumeManager* ManagerProxy::volumeManager() const
175 return m_volumeManager;
178 VoicemailProxy* ManagerProxy::voicemail() const
183 QStringList ManagerProxy::getModemList()
188 void ManagerProxy::setModem(QString modemPath)
191 m_modem->isValid() &&
192 m_modem->path() == modemPath)
194 //If we have a modem, it's valid, but not powered, power it up.
195 if (!m_modem->powered())
196 m_modem->setPowered(true);
203 if (m_modemList.contains(m_modem->path()))
205 m_modemList.removeAll(m_modem->path());
211 if (m_modemList.contains(modemPath)) {
212 m_modem = new ModemProxy(modemPath);
217 void ManagerProxy::setNetwork(QString modempath)
219 if (!m_modem || !m_modem->isValid())
222 if (modempath == m_modem->path()) {
223 if (m_network && m_network->isValid()) {
228 m_network = new NetworkProxy(modempath);
229 emit networkChanged();
233 if(m_network || !m_network->isValid()) {
235 m_network = new NetworkProxy(modempath);
236 emit networkChanged();
241 void ManagerProxy::setCallManager(QString modempath)
244 if (!m_modem || !m_modem->isValid())
247 if (modempath == m_modem->path()) {
248 if (m_callManager && m_callManager->isValid()) {
252 delete m_callManager;
253 m_callManager = new CallManager(modempath);
254 emit callManagerChanged();
260 delete m_callManager;
262 m_callManager = new CallManager(modempath);
263 connect(m_callManager, SIGNAL(connected()), this, SIGNAL(callManagerChanged()));
264 emit callManagerChanged();
268 void ManagerProxy::setVolumeManager(QString modempath)
270 if (!m_modem || !m_modem->isValid())
273 if (modempath == m_modem->path()) {
274 if (m_volumeManager && m_volumeManager->isValid()) {
278 delete m_volumeManager;
279 m_volumeManager = new VolumeManager(modempath);
280 emit volumeManagerChanged();
284 if(m_volumeManager || !m_volumeManager->isValid()) {
285 delete m_volumeManager;
286 m_volumeManager = new VolumeManager(modempath);
287 emit volumeManagerChanged();
292 void ManagerProxy::setVoicemail(QString modempath)
294 if (!m_modem || !m_modem->isValid())
297 if (modempath == m_modem->path()) {
298 if (m_voicemail && m_voicemail->isValid()) {
303 m_voicemail = new VoicemailProxy(modempath);
304 emit voicemailChanged();
308 if(m_voicemail || !m_voicemail->isValid()) {
310 m_voicemail = new VoicemailProxy(modempath);
311 emit voicemailChanged();
316 /* Local Variables: */
318 /* c-basic-offset:4 */
319 /* indent-tabs-mode: nil */