summaryrefslogtreecommitdiffstats
path: root/src/plugins/bearer/connman/qconnmanengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/bearer/connman/qconnmanengine.cpp')
-rw-r--r--src/plugins/bearer/connman/qconnmanengine.cpp40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp
index 6ea34b17f5..eac0d2b813 100644
--- a/src/plugins/bearer/connman/qconnmanengine.cpp
+++ b/src/plugins/bearer/connman/qconnmanengine.cpp
@@ -65,6 +65,9 @@ QConnmanEngine::QConnmanEngine(QObject *parent)
: QBearerEngineImpl(parent),
connmanManager(new QConnmanManagerInterface(this))
{
+ qDBusRegisterMetaType<ConnmanMap>();
+ qDBusRegisterMetaType<ConnmanMapList>();
+ qRegisterMetaType<ConnmanMapList>("ConnmanMapList");
}
QConnmanEngine::~QConnmanEngine()
@@ -82,6 +85,9 @@ void QConnmanEngine::initialize()
connect(connmanManager,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)),
this,SLOT(propertyChangedContext(QString,QString,QDBusVariant)));
+ connect(connmanManager,SIGNAL(servicesChanged(ConnmanMapList, QList<QDBusObjectPath>)),
+ this, SLOT(updateServices(ConnmanMapList, QList<QDBusObjectPath>)));
+
foreach (const QString &techPath, connmanManager->getTechnologies()) {
QConnmanTechnologyInterface *tech;
tech = new QConnmanTechnologyInterface(techPath, this);
@@ -172,6 +178,22 @@ void QConnmanEngine::requestUpdate()
QTimer::singleShot(0, this, SLOT(doRequestUpdate()));
}
+void QConnmanEngine::updateServices(const ConnmanMapList &changed, const QList<QDBusObjectPath> &removed)
+{
+ foreach (const QDBusObjectPath &objectPath, removed) {
+ removeConfiguration(QString::number(qHash(objectPath.path())));
+ }
+
+ foreach (const ConnmanMap &connmanMap, changed) {
+ const QString id = QString::number(qHash(connmanMap.objectPath.path()));
+ if (accessPointConfigurations.contains(id)) {
+ configurationChange(id);
+ } else {
+ addServiceConfiguration(connmanMap.objectPath.path());
+ }
+ }
+}
+
QString QConnmanEngine::serviceFromId(const QString &id)
{
QMutexLocker locker(&mutex);
@@ -394,21 +416,23 @@ QNetworkConfiguration::StateFlags QConnmanEngine::getStateForService(const QStri
QMutexLocker locker(&mutex);
QConnmanServiceInterface serv(service);
QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined;
- if( serv.getType() == "cellular") {
- if(serv.isSetupRequired()) {
+ if (serv.getType() == "cellular") {
+ if (serv.isSetupRequired() || !serv.isAutoConnect() || (serv.isRoaming() && isAlwaysAskRoaming())) {
flag = ( flag | QNetworkConfiguration::Defined);
} else {
flag = ( flag | QNetworkConfiguration::Discovered);
}
} else {
- if(serv.isFavorite()) {
- flag = ( flag | QNetworkConfiguration::Discovered);
+ if (serv.isFavorite()) {
+ if (serv.isAutoConnect()) {
+ flag = ( flag | QNetworkConfiguration::Discovered);
+ }
} else {
flag = QNetworkConfiguration::Undefined;
}
}
- if(serv.getState() == "ready" || serv.getState() == "online") {
+ if (serv.getState() == "ready" || serv.getState() == "online") {
flag = ( flag | QNetworkConfiguration::Active);
}
@@ -569,6 +593,12 @@ bool QConnmanEngine::requiresPolling() const
return false;
}
+bool QConnmanEngine::isAlwaysAskRoaming()
+{
+ QSettings confFile(QStringLiteral("nemomobile"), QStringLiteral("connectionagent"));
+ confFile.beginGroup(QStringLiteral("Connectionagent"));
+ return confFile.value(QStringLiteral("askForRoaming")).toBool();
+}
QT_END_NAMESPACE
#endif // QT_NO_DBUS