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 ManagerProxy::~ManagerProxy()
62 delete m_volumeManager;
84 void ManagerProxy::managerDBusGetModemsDone(QDBusPendingCallWatcher *call)
86 QDBusPendingReply<QArrayOfPathProperties> reply = *call;
88 if (reply.isError()) {
89 // TODO: Handle this properly, by setting states, or disabling features
90 qWarning() << "org.ofono.Manager.GetModems() failed: " <<
91 reply.error().message();
93 QArrayOfPathProperties modems = reply.value();
94 if (modems.count() >= 1) {
95 // FIXME: Handle multiple modems...
96 foreach (OfonoPathProperties p, modems)
98 qDebug() << "modem: " << p.path.path();
99 m_modemList << QString(p.path.path());
102 OfonoPathProperties p = modems[0];
103 if (m_modemPath.isNull() || m_modemPath.isEmpty()) {
104 qDebug() << QString("\n======\nUsing modem: \"%1\"\n======").arg(p.path.path());
105 m_modemPath = QString(p.path.path());
106 setModem(m_modemPath);
107 setNetwork(m_modemPath);
108 setCallManager(m_modemPath);
109 setVolumeManager(m_modemPath);
110 setVoicemail(m_modemPath);
111 // TODO: Connect to service proxies as available/needed here
117 void ManagerProxy::modemAdded(const QDBusObjectPath &in0,const QVariantMap &in1)
122 // TODO: Handle modem additions, maybe...
123 qWarning() << QString("Unhandled ModemAdded event: \"%1\"")
126 qDebug() << QString("modem added: %1").arg(in0.path());
127 m_modemList << QString(in0.path());
128 m_modemList.removeDuplicates();
130 setModem(in0.path());
133 void ManagerProxy::modemRemoved(const QDBusObjectPath &in0)
137 // TODO: Handle modem removals, currently active for sure, others, maybe...
138 qWarning() << QString("Unhandled ModemRemoved event: \"%1\"")
141 qDebug() << QString("modem removed: ").arg(in0.path());
142 m_modemList.removeOne(QString(in0.path()));
145 ManagerProxy *ManagerProxy::instance()
148 gManager = new ManagerProxy();
153 ModemProxy* ManagerProxy::modem() const
158 NetworkProxy* ManagerProxy::network() const
163 CallManager* ManagerProxy::callManager() const
165 return m_callManager;
168 VolumeManager* ManagerProxy::volumeManager() const
170 return m_volumeManager;
173 VoicemailProxy* ManagerProxy::voicemail() const
178 QStringList ManagerProxy::getModemList()
183 void ManagerProxy::setModem(QString modemPath)
186 m_modem->isValid() &&
187 m_modem->path() == modemPath)
192 if (m_modemList.contains(m_modem->path()))
194 m_modemList.removeAll(m_modem->path());
200 if (m_modemList.contains(modemPath)) {
201 m_modem = new ModemProxy(modemPath);
206 void ManagerProxy::setNetwork(QString modempath)
208 if (!m_modem || !m_modem->isValid())
211 if (modempath == m_modem->path()) {
212 if (m_network && m_network->isValid()) {
217 m_network = new NetworkProxy(modempath);
218 emit networkChanged();
222 if(m_network || !m_network->isValid()) {
224 m_network = new NetworkProxy(modempath);
225 emit networkChanged();
230 void ManagerProxy::setCallManager(QString modempath)
232 if (!m_modem || !m_modem->isValid())
235 if (modempath == m_modem->path()) {
236 if (m_callManager && m_callManager->isValid()) {
240 delete m_callManager;
241 m_callManager = new CallManager(modempath);
242 emit callManagerChanged();
246 if(m_callManager || !m_callManager->isValid()) {
247 delete m_callManager;
248 m_callManager = new CallManager(modempath);
249 emit callManagerChanged();
254 void ManagerProxy::setVolumeManager(QString modempath)
256 if (!m_modem || !m_modem->isValid())
259 if (modempath == m_modem->path()) {
260 if (m_volumeManager && m_volumeManager->isValid()) {
264 delete m_volumeManager;
265 m_volumeManager = new VolumeManager(modempath);
266 emit volumeManagerChanged();
270 if(m_volumeManager || !m_volumeManager->isValid()) {
271 delete m_volumeManager;
272 m_volumeManager = new VolumeManager(modempath);
273 emit volumeManagerChanged();
278 void ManagerProxy::setVoicemail(QString modempath)
280 if (!m_modem || !m_modem->isValid())
283 if (modempath == m_modem->path()) {
284 if (m_voicemail && m_voicemail->isValid()) {
289 m_voicemail = new VoicemailProxy(modempath);
290 emit voicemailChanged();
294 if(m_voicemail || !m_voicemail->isValid()) {
296 m_voicemail = new VoicemailProxy(modempath);
297 emit voicemailChanged();