When that happens, signal subsccriptions and lists of objects should be refreshed
SIM toolkit bindings. This requires implementing a d-bus agent and some
kind of reasonable test.
- same for CallHistory.
-
-When automatic modem selection is used, and ofono-qt class moves to using a
-new modem, in addition to property change signal also other d-bus signal
-subscriptions should be moved to the new modem path.
-
-When interface availability changes, in addition to properties also lists of
-object paths (such as voice calls, messages, GPRS contexts etc) should be
-refreshed.
this, SLOT(setPropertyFailed(const QString&)));
connect(m_if, SIGNAL(requestPropertyComplete(bool, const QString&, const QVariant&)),
this, SLOT(requestPropertyComplete(bool, const QString&, const QVariant&)));
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+
+ connect(modem(), SIGNAL(pathChanged(QString)), this, SLOT(pathChanged(const QString&)));
+
+ connectDbusSignals(path());
+}
+
+OfonoCallBarring::~OfonoCallBarring()
+{
+}
+
+void OfonoCallBarring::pathChanged(const QString& path)
+{
+ connectDbusSignals(path);
+}
+
+void OfonoCallBarring::connectDbusSignals(const QString& path)
+{
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"IncomingBarringInEffect",
this,
SIGNAL(incomingBarringInEffect()));
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
+ "OutgoingBarringInEffect",
+ this,
+ SIGNAL(outgoingBarringInEffect()));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "IncomingBarringInEffect",
+ this,
+ SIGNAL(incomingBarringInEffect()));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
"OutgoingBarringInEffect",
this,
SIGNAL(outgoingBarringInEffect()));
-}
-
-OfonoCallBarring::~OfonoCallBarring()
-{
}
void OfonoCallBarring::changePassword(const QString &old_password,
void disableAllOutgoingComplete(bool success);
private slots:
+ void pathChanged(const QString& path);
void propertyChanged(const QString& property, const QVariant& value);
void setPropertyFailed(const QString& property);
void changePasswordResp();
void disableAllOutgoingResp();
void disableAllOutgoingErr(QDBusError error);
void requestPropertyComplete(bool success, const QString& property, const QVariant& value);
+private:
+ void connectDbusSignals(const QString& path);
};
#endif /* !OFONOCALLBARRING_H */
OfonoConnMan::OfonoConnMan(OfonoModem::SelectionSetting modemSetting, const QString &modemPath, QObject *parent)
: OfonoModemInterface(modemSetting, modemPath, "org.ofono.ConnectionManager", OfonoGetAllOnStartup, parent)
{
+ qDBusRegisterMetaType<OfonoConnmanStruct>();
+ qDBusRegisterMetaType<OfonoConnmanList>();
+
+ m_contextlist = getContextList();
+ connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
+ this, SLOT(propertyChanged(const QString&, const QVariant&)));
+ connect(this, SIGNAL(validityChanged(bool)),
+ this, SLOT(validityChanged(bool)));
+ connect(modem(), SIGNAL(pathChanged(QString)), this, SLOT(pathChanged(const QString&)));
+
+ connectDbusSignals(path());
+}
+
+OfonoConnMan::~OfonoConnMan()
+{
+}
+
+void OfonoConnMan::validityChanged(bool /*validity*/)
+{
+ m_contextlist = getContextList();
+}
+
+void OfonoConnMan::pathChanged(const QString& path)
+{
+ connectDbusSignals(path);
+}
+
+QStringList OfonoConnMan::getContextList()
+{
QDBusReply<OfonoConnmanList> reply;
OfonoConnmanList contexts;
+ QStringList contextList;
QDBusMessage request;
- qDBusRegisterMetaType<OfonoConnmanStruct>();
- qDBusRegisterMetaType<OfonoConnmanList>();
-
request = QDBusMessage::createMethodCall("org.ofono",
path(), m_if->ifname(),
"GetContexts");
contexts = reply;
foreach(OfonoConnmanStruct context, contexts) {
- m_contextlist<< context.path.path();
+ contextList << context.path.path();
}
+ return contextList;
+}
+void OfonoConnMan::connectDbusSignals(const QString& path)
+{
+ QDBusConnection::systemBus().disconnect("org.ofono",QString(),m_if->ifname(),
+ "ContextAdded", this,
+ SLOT(contextAddedChanged(const QDBusObjectPath&, const QVariantMap&)));
- connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
- this, SLOT(propertyChanged(const QString&, const QVariant&)));
+ QDBusConnection::systemBus().disconnect("org.ofono",QString(),m_if->ifname(),
+ "ContextRemoved", this,
+ SLOT(contextRemovedChanged(const QDBusObjectPath&)));
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+ QDBusConnection::systemBus().connect("org.ofono",path,m_if->ifname(),
"ContextAdded", this,
SLOT(contextAddedChanged(const QDBusObjectPath&, const QVariantMap&)));
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+ QDBusConnection::systemBus().connect("org.ofono",path,m_if->ifname(),
"ContextRemoved", this,
SLOT(contextRemovedChanged(const QDBusObjectPath&)));
-}
-OfonoConnMan::~OfonoConnMan()
-{
}
void OfonoConnMan::deactivateAll()
void setRoamingAllowedFailed();
private slots:
+ void validityChanged(bool);
+ void pathChanged(const QString& path);
void propertyChanged(const QString& property, const QVariant& value);
void contextAddedChanged(const QDBusObjectPath &path, const QVariantMap &properties);
void contextRemovedChanged(const QDBusObjectPath &path);
void removeContextErr(const QDBusError& error);
void setPropertyFailed(const QString& property);
private:
+ QStringList getContextList();
+ void connectDbusSignals(const QString& path);
+private:
QStringList m_contextlist;
};
OfonoMessageManager::OfonoMessageManager(OfonoModem::SelectionSetting modemSetting, const QString &modemPath, QObject *parent)
: OfonoModemInterface(modemSetting, modemPath, "org.ofono.MessageManager", OfonoGetAllOnFirstRequest, parent)
{
+ qDBusRegisterMetaType<OfonoMessageManagerStruct>();
+ qDBusRegisterMetaType<OfonoMessageManagerList>();
+
+ m_messagelist = getMessageList();
+
+ connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
+ this, SLOT(propertyChanged(const QString&, const QVariant&)));
+ connect(m_if, SIGNAL(setPropertyFailed(const QString&)),
+ this, SLOT(setPropertyFailed(const QString&)));
+ connect(m_if, SIGNAL(requestPropertyComplete(bool, const QString&, const QVariant&)),
+ this, SLOT(requestPropertyComplete(bool, const QString&, const QVariant&)));
+ connect(this, SIGNAL(validityChanged(bool)),
+ this, SLOT(validityChanged(bool)));
+ connect(modem(), SIGNAL(pathChanged(QString)), this, SLOT(pathChanged(const QString&)));
+
+ connectDbusSignals(path());
+}
+
+OfonoMessageManager::~OfonoMessageManager()
+{
+}
+
+void OfonoMessageManager::validityChanged(bool /*validity*/)
+{
+ m_messagelist = getMessageList();
+}
+
+void OfonoMessageManager::pathChanged(const QString& path)
+{
+ connectDbusSignals(path);
+}
+
+QStringList OfonoMessageManager::getMessageList()
+{
QDBusReply<OfonoMessageManagerList> reply;
OfonoMessageManagerList messages;
QDBusMessage request;
-
- qDBusRegisterMetaType<OfonoMessageManagerStruct>();
- qDBusRegisterMetaType<OfonoMessageManagerList>();
+ QStringList messageList;
request = QDBusMessage::createMethodCall("org.ofono",
path(), m_if->ifname(),
messages = reply;
foreach(OfonoMessageManagerStruct message, messages) {
- m_messagelist << message.path.path();
+ messageList << message.path.path();
}
+ return messageList;
+}
- connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
- this, SLOT(propertyChanged(const QString&, const QVariant&)));
- connect(m_if, SIGNAL(setPropertyFailed(const QString&)),
- this, SLOT(setPropertyFailed(const QString&)));
- connect(m_if, SIGNAL(requestPropertyComplete(bool, const QString&, const QVariant&)),
- this, SLOT(requestPropertyComplete(bool, const QString&, const QVariant&)));
-
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+void OfonoMessageManager::connectDbusSignals(const QString& path)
+{
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"MessageAdded",
this,
SLOT(onMessageAdded(const QDBusObjectPath&, const QVariantMap&)));
-
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"MessageRemoved",
this,
SLOT(onMessageRemoved(const QDBusObjectPath&)));
-
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"IncomingMessage",
this,
SIGNAL(incomingMessage(QString, QVariantMap)));
-
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"ImmediateMessage",
this,
SIGNAL(immediateMessage(QString, QVariantMap)));
-}
-OfonoMessageManager::~OfonoMessageManager()
-{
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "MessageAdded",
+ this,
+ SLOT(onMessageAdded(const QDBusObjectPath&, const QVariantMap&)));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "MessageRemoved",
+ this,
+ SLOT(onMessageRemoved(const QDBusObjectPath&)));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "IncomingMessage",
+ this,
+ SIGNAL(incomingMessage(QString, QVariantMap)));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "ImmediateMessage",
+ this,
+ SIGNAL(immediateMessage(QString, QVariantMap)));
}
void OfonoMessageManager::requestServiceCenterAddress()
void incomingMessage(const QString &message, const QVariantMap &info);
private slots:
+ void validityChanged(bool);
+ void pathChanged(const QString& path);
void propertyChanged(const QString &property, const QVariant &value);
void setPropertyFailed(const QString &property);
void requestPropertyComplete(bool success, const QString &property, const QVariant &value);
void sendMessageErr(QDBusError error);
private:
+ QStringList getMessageList();
+ void connectDbusSignals(const QString& path);
+
+private:
QStringList m_messagelist;
};
OfonoSupplementaryServices::OfonoSupplementaryServices(OfonoModem::SelectionSetting modemSetting, const QString &modemPath, QObject *parent)
: OfonoModemInterface(modemSetting, modemPath, "org.ofono.SupplementaryServices", OfonoGetAllOnStartup, parent)
{
-
connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
this, SLOT(propertyChanged(const QString&, const QVariant&)));
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+ connect(modem(), SIGNAL(pathChanged(QString)), this, SLOT(pathChanged(const QString&)));
+
+ connectDbusSignals(path());
+}
+
+void OfonoSupplementaryServices::pathChanged(const QString& path)
+{
+ connectDbusSignals(path);
+}
+
+void OfonoSupplementaryServices::connectDbusSignals(const QString& path)
+{
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
+ "NotificationReceived",
+ this,
+ SIGNAL(notificationReceived(QString)));
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
+ "RequestReceived",
+ this,
+ SIGNAL(requestReceived(QString)));
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
"NotificationReceived",
this,
SIGNAL(notificationReceived(QString)));
- QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
"RequestReceived",
this,
SIGNAL(requestReceived(QString)));
void cancelComplete(bool success);
private slots:
+ void pathChanged(const QString& path);
void propertyChanged(const QString& property, const QVariant& value);
void initiateResp(QString message, QDBusVariant details);
void initiateErr(QDBusError error);
void respondErr(QDBusError error);
void cancelResp();
void cancelErr(QDBusError error);
-
private:
+ void connectDbusSignals(const QString& path);
};
OfonoVoiceCallManager::OfonoVoiceCallManager(OfonoModem::SelectionSetting modemSetting, const QString &modemPath, QObject *parent)
: OfonoModemInterface(modemSetting, modemPath, "org.ofono.VoiceCallManager", OfonoGetAllOnStartup, parent)
{
+ qDBusRegisterMetaType<OfonoVoiceCallManagerStruct>();
+ qDBusRegisterMetaType<OfonoVoiceCallManagerList>();
+
+ m_calllist = getCallList();
+
+ connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
+ this, SLOT(propertyChanged(const QString&, const QVariant&)));
+ connect(this, SIGNAL(validityChanged(bool)),
+ this, SLOT(validityChanged(bool)));
+ connect(modem(), SIGNAL(pathChanged(QString)), this, SLOT(pathChanged(const QString&)));
+
+ connectDbusSignals(path());
+}
+
+OfonoVoiceCallManager::~OfonoVoiceCallManager()
+{
+}
+
+
+void OfonoVoiceCallManager::validityChanged(bool /*validity*/)
+{
+ m_calllist = getCallList();
+}
+
+void OfonoVoiceCallManager::pathChanged(const QString& path)
+{
+ connectDbusSignals(path);
+}
+
+QStringList OfonoVoiceCallManager::getCallList()
+{
QDBusReply<OfonoVoiceCallManagerList> reply;
OfonoVoiceCallManagerList calls;
QDBusMessage request;
+ QStringList messageList;
qDBusRegisterMetaType<OfonoVoiceCallManagerStruct>();
qDBusRegisterMetaType<OfonoVoiceCallManagerList>();
calls = reply;
foreach(OfonoVoiceCallManagerStruct call, calls) {
- m_calllist<< call.path.path();
+ messageList<< call.path.path();
}
+ return messageList;
+}
- connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
- this, SLOT(propertyChanged(const QString&, const QVariant&)));
-
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+void OfonoVoiceCallManager::connectDbusSignals(const QString& path)
+{
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"CallAdded", this,
SLOT(callAddedChanged(const QDBusObjectPath&, const QVariantMap&)));
- QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
+ QDBusConnection::systemBus().disconnect("org.ofono", QString(), m_if->ifname(),
"CallRemoved", this,
SLOT(callRemovedChanged(const QDBusObjectPath&)));
-}
-OfonoVoiceCallManager::~OfonoVoiceCallManager()
-{
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "CallAdded", this,
+ SLOT(callAddedChanged(const QDBusObjectPath&, const QVariantMap&)));
+
+ QDBusConnection::systemBus().connect("org.ofono", path, m_if->ifname(),
+ "CallRemoved", this,
+ SLOT(callRemovedChanged(const QDBusObjectPath&)));
}
void OfonoVoiceCallManager::dial(const QString &number, const QString &callerid_hide)
void hangupMultipartyComplete(const bool status);
private slots:
+ void validityChanged(bool);
+ void pathChanged(const QString& path);
void propertyChanged(const QString &property, const QVariant &value);
void callAddedChanged(const QDBusObjectPath &call, const QVariantMap &properties);
void callRemovedChanged(const QDBusObjectPath &call);
void hangupMultipartyResp();
void hangupMultipartyErr(const QDBusError &error);
-
+private:
+ QStringList getCallList();
+ void connectDbusSignals(const QString& path);
private:
QStringList m_calllist;
};