From 75db95f0e6a7b55a770372a1e5d92c034bd934b3 Mon Sep 17 00:00:00 2001 From: Kimmo Ollila Date: Mon, 6 Jun 2016 15:04:03 +0300 Subject: Fixed WPA supplicant and made it default backend for wifi settings. Change-Id: Ic539098e2edc5d736da0331e06f5bfc6c51947e1 Reviewed-by: Teemu Holappa --- src/imports/networksettings/plugin.cpp | 2 +- src/networksettings/networksettings.pro | 6 +++--- src/networksettings/qnetworksettingsmanager.cpp | 6 ++++++ src/networksettings/qnetworksettingsmanager.h | 3 +++ .../wpasupplicant/qnetworksettingsinterface_p.cpp | 2 +- .../wpasupplicant/qnetworksettingsmanager_p.cpp | 25 ++++++++++++++-------- .../wpasupplicant/qnetworksettingsmanager_p.h | 7 +++--- .../wpasupplicant/qnetworksettingsservice_p.cpp | 8 +++---- src/settingsui/network/WifiSelectorDelegate.qml | 9 ++++---- src/settingsui/network/WifiSettings.qml | 10 +++++---- .../settingsuiplugin/settingsuiplugin_plugin.cpp | 2 +- 11 files changed, 50 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/imports/networksettings/plugin.cpp b/src/imports/networksettings/plugin.cpp index c535fff..5427082 100644 --- a/src/imports/networksettings/plugin.cpp +++ b/src/imports/networksettings/plugin.cpp @@ -53,6 +53,6 @@ void NetworksettingspluginPlugin::registerTypes(const char *uri) qmlRegisterUncreatableType(uri, 1, 0, "NetworkSettingsType", "Cannot be instantiated directly."); qmlRegisterUncreatableType(uri, 1, 0, "NetworkSettingsState", "Cannot be instantiated directly."); + qRegisterMetaType("QNetworkSettingsUserAgent*"); qmlRegisterSingletonType(uri, 1, 0, "NetworkSettingsManager", &instance); - qmlRegisterSingletonType(uri, 1, 0, "NetworkSettingsUserAgent", &instance); } diff --git a/src/networksettings/networksettings.pro b/src/networksettings/networksettings.pro index 9ae1bb3..7220625 100644 --- a/src/networksettings/networksettings.pro +++ b/src/networksettings/networksettings.pro @@ -9,11 +9,11 @@ QT = core network MODULE = networksettings load(qt_module) -wpasupplicant { - include(wpasupplicant.pri) +connman { + include(connman.pri) } else { - include(connman.pri) + include(wpasupplicant.pri) } # Input diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index 2bd5a96..787a382 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -68,3 +68,9 @@ void QNetworkSettingsManager::setUserAgent(QNetworkSettingsUserAgent *agent) Q_D(QNetworkSettingsManager); d->setUserAgent(agent); } + +QNetworkSettingsUserAgent* QNetworkSettingsManager::getUserAgent() +{ + Q_D(QNetworkSettingsManager); + return d->getUserAgent(); +} diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index 9b978f8..5d2ad13 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -43,11 +43,14 @@ class Q_DECL_EXPORT QNetworkSettingsManager : public QObject Q_ENUMS(StateTypes NetworkTypeTypes) Q_PROPERTY(QAbstractItemModel* services READ services NOTIFY servicesChanged) Q_PROPERTY(QAbstractItemModel* interfaces READ interfaces NOTIFY interfacesChanged) + Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ getUserAgent CONSTANT) + public: explicit QNetworkSettingsManager(QObject* parent = 0); QAbstractItemModel* services(); QAbstractItemModel* interfaces(); void setUserAgent(QNetworkSettingsUserAgent *agent); + QNetworkSettingsUserAgent* getUserAgent(); Q_INVOKABLE QNetworkSettingsService* getService(const QString& name, const int type); diff --git a/src/networksettings/wpasupplicant/qnetworksettingsinterface_p.cpp b/src/networksettings/wpasupplicant/qnetworksettingsinterface_p.cpp index 6cb80ec..a2440a1 100644 --- a/src/networksettings/wpasupplicant/qnetworksettingsinterface_p.cpp +++ b/src/networksettings/wpasupplicant/qnetworksettingsinterface_p.cpp @@ -34,7 +34,7 @@ QNetworkSettingsInterfacePrivate::QNetworkSettingsInterfacePrivate(QNetworkSetti :QObject(parent) ,q_ptr(parent) { - m_name = QWifiDevice::wifiInterfaceName(); + m_name = QString::fromLatin1(QWifiDevice::wifiInterfaceName()); m_type.setType(QNetworkSettingsType::Wifi); m_powered = true; //We don't really know } diff --git a/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.cpp b/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.cpp index 7664427..30f3f61 100644 --- a/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.cpp @@ -38,7 +38,14 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM :QObject(parent) ,q_ptr(parent) { - m_serviceFilter.setSourceModel(&m_serviceModel); + + QNetworkSettingsUserAgent* userAgent = new QNetworkSettingsUserAgent(this); + this->setUserAgent(userAgent); + + m_serviceModel = new QNetworkSettingsServiceModel(this); + m_serviceFilter = new QNetworkSettingsServiceFilter(this); + m_serviceFilter->setSourceModel(m_serviceModel); + m_wifiController = new QWifiController(this); m_wifiController->asyncCall(QWifiController::InitializeBackend); @@ -97,7 +104,7 @@ void QNetworkSettingsManagerPrivate::connectNetwork(const QString& ssid) void QNetworkSettingsManagerPrivate::userInteractionReady(bool cancel) { if (cancel) { - m_currentSSID = ""; + m_currentSSID = QStringLiteral(""); return; } bool networkKnown = false; @@ -323,7 +330,7 @@ WpaSupplicantService* QNetworkSettingsManagerPrivate::networkForSSID(const QStri WpaSupplicantService* QNetworkSettingsManagerPrivate::networkForSSID(const QString& ssid, int& pos) { - QList services = m_serviceModel.getModel(); + QList services = m_serviceModel->getModel(); pos = 0; foreach (QNetworkSettingsService *service, services) { if (service->name() == ssid) { @@ -384,20 +391,20 @@ void QNetworkSettingsManagerPrivate::parseScanResults(const QString &results) network->setFlags(info.at(3)); network->wirelessConfig()->setSignalStrength(signalStrength); network->setName(ssid); - m_serviceModel.append(network); + m_serviceModel->append(network); } else { if (knownNetwork->wirelessConfig()->outOfRange()) { // known network has come back into a range knownNetwork->wirelessConfig()->setOutOfRange(false); - m_serviceModel.append(knownNetwork); - pos = m_serviceModel.getModel().size() - 1; + m_serviceModel->append(knownNetwork); + pos = m_serviceModel->getModel().size() - 1; } // ssids are the same, compare bssids.. if (knownNetwork->id() == info.at(0)) { // same access point, simply update the signal strength knownNetwork->wirelessConfig()->setSignalStrength(signalStrength); knownNetwork->wirelessConfig()->setOutOfRange(false); - m_serviceModel.updated(pos); + m_serviceModel->updated(pos); } else if (knownNetwork->wirelessConfig()->signalStrength() < signalStrength) { // replace with a stronger access point within the same network knownNetwork->wirelessConfig()->setOutOfRange(false); @@ -405,7 +412,7 @@ void QNetworkSettingsManagerPrivate::parseScanResults(const QString &results) knownNetwork->setFlags(info.at(3)); knownNetwork->wirelessConfig()->setSignalStrength(signalStrength); knownNetwork->setName(ssid); - m_serviceModel.updated(pos); + m_serviceModel->updated(pos); } } } @@ -414,7 +421,7 @@ void QNetworkSettingsManagerPrivate::parseScanResults(const QString &results) for (int i = 0; i < networks.size();) { if (!sensibleNetworks.contains(networks.at(i)->name())) { WpaSupplicantService *n = qobject_cast(networks.at(i)); - m_serviceModel.remove(i); + m_serviceModel->remove(i); if (n) { n->wirelessConfig()->setOutOfRange(true); m_outOfRangeServiceModel.append(n); diff --git a/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.h b/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.h index 572166e..d042ece 100644 --- a/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.h +++ b/src/networksettings/wpasupplicant/qnetworksettingsmanager_p.h @@ -51,6 +51,7 @@ public: void disconnectNetwork(); QString call(const QString &command); bool checkedCall(const QString &command); + QNetworkSettingsUserAgent *getUserAgent() {return m_agent;} protected: bool event(QEvent *event); @@ -73,11 +74,11 @@ private: WpaSupplicantService* outOfRangeListContains(const QString& ssid); QNetworkSettingsInterfaceModel m_interfaceModel; - QNetworkSettingsServiceModel m_serviceModel; + QNetworkSettingsServiceModel *m_serviceModel; QNetworkSettingsServiceModel m_outOfRangeServiceModel; - QNetworkSettingsServiceFilter m_serviceFilter; + QNetworkSettingsServiceFilter *m_serviceFilter; QWifiController *m_wifiController; - QNetworkSettingsUserAgent *m_agent; //Not owned + QNetworkSettingsUserAgent *m_agent; QWifiController::BackendState m_backendState; QString m_currentSSID; diff --git a/src/networksettings/wpasupplicant/qnetworksettingsservice_p.cpp b/src/networksettings/wpasupplicant/qnetworksettingsservice_p.cpp index 30fcacd..974f85b 100644 --- a/src/networksettings/wpasupplicant/qnetworksettingsservice_p.cpp +++ b/src/networksettings/wpasupplicant/qnetworksettingsservice_p.cpp @@ -78,7 +78,7 @@ void QNetworkSettingsServicePrivate::setupIpv4Config() } WpaSupplicantService::WpaSupplicantService(QNetworkSettingsManagerPrivate* manager, QObject* parent) - :QNetworkSettingsService("", parent) + :QNetworkSettingsService(QStringLiteral(""), parent) { Q_D(QNetworkSettingsService); d->setManager(manager); @@ -101,13 +101,13 @@ void WpaSupplicantService::setFlags(const QString& aFlags) { Q_D(QNetworkSettingsService); - if (aFlags.contains("WPA-")) { + if (aFlags.contains(QStringLiteral("WPA-"))) { d->m_wifiConfig.setSecurity(QNetworkSettingsWireless::WPA); } - if (aFlags.contains("WPA2-")) { + if (aFlags.contains(QStringLiteral("WPA2-"))) { d->m_wifiConfig.setSecurity(QNetworkSettingsWireless::WPA2); } - if (aFlags.contains("WEP-")) { + if (aFlags.contains(QStringLiteral("WEP-"))) { d->m_wifiConfig.setSecurity(QNetworkSettingsWireless::WEP); } } diff --git a/src/settingsui/network/WifiSelectorDelegate.qml b/src/settingsui/network/WifiSelectorDelegate.qml index 56cd021..ea044f6 100644 --- a/src/settingsui/network/WifiSelectorDelegate.qml +++ b/src/settingsui/network/WifiSelectorDelegate.qml @@ -34,14 +34,13 @@ import QtDeviceUtilities.NetworkSettings 1.0 ItemDelegate { id: root autoExclusive: true - property bool connect: modelData["connected"] - width: parent.width + property bool connect: connected contentItem: Item { width: root.width Label { id: text - leftPadding: root.indicator.width + root.spacing + leftPadding: root.spacing anchors.left: parent.left anchors.top:parent.top anchors.right: signalMonitor.left @@ -49,13 +48,15 @@ ItemDelegate { elide: Text.ElideRight horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - text:modelData["name"] + text: modelData["name"] } WifiSignalMonitor { id: signalMonitor anchors.right: parent.right height: parent.height width: height + signalStrength: modelData.wirelessConfig["signalStrength"] + connected: connected } } } diff --git a/src/settingsui/network/WifiSettings.qml b/src/settingsui/network/WifiSettings.qml index 0944ef6..5514ece 100644 --- a/src/settingsui/network/WifiSettings.qml +++ b/src/settingsui/network/WifiSettings.qml @@ -54,7 +54,7 @@ Item { Layout.preferredWidth: root.width * 0.382 Layout.alignment: Qt.AlignVCenter horizontalAlignment: Text.AlignRight - text: selectedInterface.powered ? qsTr("Wi-Fi OFF") : qsTr("Wi-Fi ON") + text: selectedInterface.powered ? qsTr("Wi-Fi ON") : qsTr("Wi-Fi OFF") } Switch { checked: selectedInterface.powered @@ -70,6 +70,7 @@ Item { text: qsTr("Current network") horizontalAlignment: Text.AlignRight Layout.alignment: Qt.AlignVCenter + } ComboBoxEntry { id: networkSelection @@ -79,7 +80,8 @@ Item { onCurrentIndexChanged: if (currentIndex >= 0) model.itemFromRow(currentIndex).connectService(); delegate: WifiSelectorDelegate { - onConnectChanged: if (connect) networkSelection.currentIndex = networkSelection.find(modelData.name) + width: networkSelection.width + onConnectChanged: if (connect) networkSelection.currentIndex = index } } } @@ -152,7 +154,7 @@ Item { text: qsTr("Connect") onClicked: { connectView.visible = false - NetworkSettingsUserAgent.setUserCredentials("", password.text) + NetworkSettingsManager.userAgent.setUserCredentials("", password.text) } } Button { @@ -175,7 +177,7 @@ Item { } } Connections { - target: NetworkSettingsUserAgent + target: NetworkSettingsManager.userAgent onShowUserCredentialsInput : { connectView.visible = true } diff --git a/src/settingsui/settingsuiplugin/settingsuiplugin_plugin.cpp b/src/settingsui/settingsuiplugin/settingsuiplugin_plugin.cpp index 6471d73..8b141e3 100644 --- a/src/settingsui/settingsuiplugin/settingsuiplugin_plugin.cpp +++ b/src/settingsui/settingsuiplugin/settingsuiplugin_plugin.cpp @@ -32,6 +32,6 @@ void SettingsuipluginPlugin::registerTypes(const char *uri) { // @uri QtDeviceUtilities.SettingsUI + Q_ASSERT(uri == QLatin1String("QtDeviceUtilities.SettingsUI")); qmlRegisterType(QUrl("qrc:/pluginMain.qml"), uri, 1, 0, "SettingsUI"); } - -- cgit v1.2.3