From 2215248c450b6bd3f728e813f289f099d4301523 Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Thu, 26 Apr 2018 11:57:16 +0300 Subject: Add support for wi-fi networks with hidden SSID Task-number: QTBUG-62661 Change-Id: I894f37d2ac397ca2a10db92b1daec9997a9733bb Reviewed-by: Teemu Holappa --- .../connman/qnetworksettingsmanager_p.cpp | 55 +++++++++++++++++++ .../connman/qnetworksettingsmanager_p.h | 10 ++++ .../connman/qnetworksettingsservice_p.cpp | 10 ++++ .../connman/qnetworksettingsuseragent_p.cpp | 62 ++++++++++++++++------ .../connman/qnetworksettingsuseragent_p.h | 3 ++ src/networksettings/qnetworksettingsmanager.cpp | 52 ++++++++++++++++++ src/networksettings/qnetworksettingsmanager.h | 9 +++- src/networksettings/qnetworksettingsservice.cpp | 6 +++ src/networksettings/qnetworksettingsservice.h | 4 ++ .../qnetworksettingsservicemodel.cpp | 12 +++++ src/networksettings/qnetworksettingsservicemodel.h | 1 + src/networksettings/qnetworksettingsuseragent.cpp | 12 +++++ src/networksettings/qnetworksettingsuseragent.h | 3 ++ src/settingsui/network/NetworkListView.qml | 8 ++- src/settingsui/network/NetworkSettings.qml | 21 ++++++++ src/settingsui/network/PassphraseEnter.qml | 34 +++++++++++- src/settingsui/settingsuiplugin/SettingsHeader.qml | 26 +++++++-- 17 files changed, 304 insertions(+), 24 deletions(-) diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index b3373ee..ea9e682 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -44,6 +44,7 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM , m_serviceFilter(Q_NULLPTR) , m_manager(Q_NULLPTR) , m_agent(Q_NULLPTR) + , m_currentWifiConnection(Q_NULLPTR) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); @@ -86,6 +87,40 @@ void QNetworkSettingsManagerPrivate::requestInput(const QString& service, const emit m_agent->showUserCredentialsInput(); } +void QNetworkSettingsManagerPrivate::connectBySsid(const QString &name) +{ + m_unnamedServicesForSsidConnection = m_unnamedServices; + tryNextConnection(); + m_currentSsid = name; +} + +void QNetworkSettingsManagerPrivate::clearConnectionState() +{ + m_unnamedServicesForSsidConnection.clear(); + m_currentSsid.clear(); +} + +void QNetworkSettingsManagerPrivate::tryNextConnection() +{ + Q_Q(QNetworkSettingsManager); + QNetworkSettingsService* service = nullptr; + if (!m_currentSsid.isEmpty()) { + service = m_serviceModel->getByName(m_currentSsid); + m_currentSsid.clear(); + } + if (!service) { + if (!m_unnamedServicesForSsidConnection.isEmpty()) { + service = *m_unnamedServicesForSsidConnection.begin(); + m_unnamedServicesForSsidConnection.erase(m_unnamedServicesForSsidConnection.begin()); + } else { + q->clearConnectionState(); + } + } + if (service) { + service->doConnectService(); + } +} + void QNetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher *watcher) { Q_Q(QNetworkSettingsManager); @@ -129,6 +164,11 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan { foreach (QDBusObjectPath path, removed) { m_serviceModel->removeService(path.path()); + auto serviceIter = m_unnamedServices.find(path.path()); + if (serviceIter != m_unnamedServices.end()) { + serviceIter.value()->deleteLater(); + m_unnamedServices.erase(serviceIter); + } } QStringList newServices; @@ -155,6 +195,14 @@ void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath QNetworkSettingsService *service = new QNetworkSettingsService(servicePath, this); + connect(service, &QNetworkSettingsService::connectionStateCleared, + q, &QNetworkSettingsManager::clearConnectionState); + + connect(service, &QNetworkSettingsService::serviceConnected, + q, &QNetworkSettingsManager::setCurrentWifiConnection); + connect(service, &QNetworkSettingsService::serviceDisconnected, + q, &QNetworkSettingsManager::clearCurrentWifiConnection); + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { m_serviceModel->append(service); emit q->servicesChanged(); @@ -179,8 +227,15 @@ void QNetworkSettingsManagerPrivate::serviceReady() Q_Q(QNetworkSettingsManager); QNetworkSettingsService* service = qobject_cast(sender()); + + if (service->type() != QNetworkSettingsType::Unknown + && service->type() == QNetworkSettingsType::Wifi) { + m_unnamedServices.insert(service->id(), service); + } + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { service->disconnect(this); + m_unnamedServices.remove(service->id()); m_serviceModel->append(service); emit q->servicesChanged(); if (service->type() == QNetworkSettingsType::Wired) { diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h index 579d857..cfc2e64 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.h +++ b/src/networksettings/connman/qnetworksettingsmanager_p.h @@ -42,6 +42,7 @@ #include #include +#include #include "connmancommon.h" #include "qnetworksettingsmanager.h" #include "qnetworksettingsinterfacemodel.h" @@ -66,6 +67,11 @@ public: QNetworkSettingsInterfaceModel* interfaceModel() {return &m_interfaceModel;} QNetworkSettingsServiceModel* serviceModel() const {return m_serviceModel;} QNetworkSettingsServiceFilter* serviceFilter() const {return m_serviceFilter;} + void connectBySsid(const QString &name); + void clearConnectionState(); + void tryNextConnection(); + void setCurrentWifiConnection(QNetworkSettingsService *connection) {m_currentWifiConnection = connection;} + QNetworkSettingsService* currentWifiConnection() const {return m_currentWifiConnection;} public slots: void getServicesFinished(QDBusPendingCallWatcher *watcher); @@ -78,10 +84,14 @@ private: protected: QNetworkSettingsInterfaceModel m_interfaceModel; QNetworkSettingsServiceModel *m_serviceModel; + QMap m_unnamedServices; + QMap m_unnamedServicesForSsidConnection; QNetworkSettingsServiceFilter *m_serviceFilter; private: NetConnmanManagerInterface *m_manager; QNetworkSettingsUserAgent *m_agent; + QString m_currentSsid; + QNetworkSettingsService *m_currentWifiConnection; }; QT_END_NAMESPACE diff --git a/src/networksettings/connman/qnetworksettingsservice_p.cpp b/src/networksettings/connman/qnetworksettingsservice_p.cpp index 3912ec2..65653aa 100644 --- a/src/networksettings/connman/qnetworksettingsservice_p.cpp +++ b/src/networksettings/connman/qnetworksettingsservice_p.cpp @@ -396,8 +396,14 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV } else if (key == PropertyState) { QString value = qdbus_cast(val); + QNetworkSettingsState oldState; + oldState.setState(m_state.state()); value >> m_state; emit q->stateChanged(); + if (m_state.state() == QNetworkSettingsState::Ready && m_type.type() == QNetworkSettingsType::Wifi) + emit q->serviceConnected(q); + if (m_state.state() == QNetworkSettingsState::Disconnect && m_type.type() == QNetworkSettingsType::Wifi) + emit q->serviceDisconnected(q); } else if (key == PropertyName) { m_name = qdbus_cast(val); @@ -407,6 +413,10 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV QString value = qdbus_cast(val); value >> m_type; emit q->typeChanged(); + if (m_state.state() == QNetworkSettingsState::Ready && m_type.type() == QNetworkSettingsType::Wifi) + emit q->serviceConnected(q); + if (m_state.state() == QNetworkSettingsState::Disconnect && m_type.type() == QNetworkSettingsType::Wifi) + emit q->serviceDisconnected(q); } else if (key == PropertyStrength) { m_wifiConfig.setSignalStrength(val.toInt()); diff --git a/src/networksettings/connman/qnetworksettingsuseragent_p.cpp b/src/networksettings/connman/qnetworksettingsuseragent_p.cpp index e9e8063..5052b74 100644 --- a/src/networksettings/connman/qnetworksettingsuseragent_p.cpp +++ b/src/networksettings/connman/qnetworksettingsuseragent_p.cpp @@ -67,7 +67,10 @@ void QNetworkSettingsUserAgentPrivate::ReportError(const QDBusObjectPath &path, Q_Q(QNetworkSettingsUserAgent); Q_UNUSED(path); Q_UNUSED(param); - emit q->error(); + if (!m_ssid.isEmpty()) + q->requestNextConnection(); + else + emit q->error(); } void QNetworkSettingsUserAgentPrivate::registerAgent() @@ -80,28 +83,55 @@ QVariantMap QNetworkSettingsUserAgentPrivate::RequestInput(const QDBusObjectPath { Q_Q(QNetworkSettingsUserAgent); Q_UNUSED(path); - Q_UNUSED(params); - msg.setDelayedReply(true); - - m_pendingReply = true; - m_pendingMessage = msg; - emit q->showUserCredentialsInput(); - return QVariantMap(); + QVariant name = params[PropertyName]; + if (!name.isValid()) { + m_ssid.clear(); + } + QVariantMap response; + QVariant passPhrase = params[PropertyPassphrase]; + if (name.isValid() && !m_ssid.isEmpty()) { + response[PropertyName] = m_ssid; + } + if (passPhrase.isValid()) { + if (!m_passphrase.isEmpty()) { + response[PropertyPassphrase] = m_passphrase; + } else { + msg.setDelayedReply(true); + m_pendingMessage = msg; + m_pendingReply = true; + emit q->showUserCredentialsInput(); + return QVariantMap(); + } + } + return response; } void QNetworkSettingsUserAgentPrivate::setPassphrase(const QString& passphrase) { m_passphrase = passphrase; - if (!m_pendingReply) - return; + if (m_pendingReply) { + QVariantMap response; + if (!m_ssid.isEmpty()) { + response[PropertyName] = m_ssid; + } + response[PropertyPassphrase] = m_passphrase; + QDBusMessage reply = m_pendingMessage.createReply(); + reply << response; + m_pendingReply = false; + QDBusConnection::systemBus().send(reply); + } +} - QVariantMap response; - response[PropertyPassphrase] = m_passphrase; +void QNetworkSettingsUserAgentPrivate::setSsidAndPassphrase(const QString &ssid, const QString &passphrase) +{ + m_ssid = ssid; + m_passphrase = passphrase; +} - QDBusMessage reply = m_pendingMessage.createReply(); - reply << response; - m_pendingReply = false; - QDBusConnection::systemBus().send(reply); +void QNetworkSettingsUserAgentPrivate::clearConnectionState() +{ + m_passphrase.clear(); + m_ssid.clear(); } QT_END_NAMESPACE diff --git a/src/networksettings/connman/qnetworksettingsuseragent_p.h b/src/networksettings/connman/qnetworksettingsuseragent_p.h index 180eea5..31170d3 100644 --- a/src/networksettings/connman/qnetworksettingsuseragent_p.h +++ b/src/networksettings/connman/qnetworksettingsuseragent_p.h @@ -65,6 +65,8 @@ public: QString passphrase() const {return m_passphrase;} void cancel(); void release(); + void setSsidAndPassphrase(const QString &ssid, const QString &passphrase); + void clearConnectionState(); public Q_SLOTS: // Dbus methods void ReportError(const QDBusObjectPath &path, const QString ¶m); QVariantMap RequestInput(const QDBusObjectPath &path, const QVariantMap ¶ms, @@ -75,6 +77,7 @@ private: QDBusMessage m_pendingMessage; bool m_pendingReply; QString m_passphrase; + QString m_ssid; }; QT_END_NAMESPACE diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index 71aa081..cda66e7 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -32,6 +32,7 @@ #include "qnetworksettingsinterface.h" #include "qnetworksettingsinterfacemodel.h" #include "qnetworksettingsmanager_p.h" +#include "qnetworksettingsuseragent.h" #include QT_BEGIN_NAMESPACE @@ -66,6 +67,55 @@ QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, i return nullptr; } +void QNetworkSettingsManager::connectBySsid(const QString &name, const QString &passphrase) +{ + Q_D(QNetworkSettingsManager); + QNetworkSettingsUserAgent* agent = userAgent(); + if (agent) + agent->setSsidAndPassphrase(name, passphrase); + d->connectBySsid(name); +} + +void QNetworkSettingsManager::clearConnectionState() +{ + Q_D(QNetworkSettingsManager); + d->clearConnectionState(); + QNetworkSettingsUserAgent* agent = userAgent(); + if (agent) + agent->clearConnectionState(); +} + +void QNetworkSettingsManager::tryNextConnection() +{ + Q_D(QNetworkSettingsManager); + d->tryNextConnection(); +} + +void QNetworkSettingsManager::clearCurrentWifiConnection(QNetworkSettingsService* service) +{ + Q_D(QNetworkSettingsManager); + QNetworkSettingsService *currentService = d->currentWifiConnection(); + if (service == currentService) { + d->setCurrentWifiConnection(nullptr); + emit currentWifiConnectionChanged(); + } +} + +void QNetworkSettingsManager::setCurrentWifiConnection(QNetworkSettingsService* service) +{ + Q_D(QNetworkSettingsManager); + QNetworkSettingsService *currentService = d->currentWifiConnection(); + d->setCurrentWifiConnection(service); + if (service != currentService) + emit currentWifiConnectionChanged(); +} + +QNetworkSettingsService* QNetworkSettingsManager::currentWifiConnection() +{ + Q_D(QNetworkSettingsManager); + return d->currentWifiConnection(); +} + QNetworkSettingsInterface* QNetworkSettingsManager::interface(int type, int instance) { Q_D(QNetworkSettingsManager); @@ -86,6 +136,8 @@ void QNetworkSettingsManager::setUserAgent(QNetworkSettingsUserAgent *agent) { Q_D(QNetworkSettingsManager); d->setUserAgent(agent); + connect(agent, &QNetworkSettingsUserAgent::requestNextConnection, + this, &QNetworkSettingsManager::tryNextConnection); } QNetworkSettingsUserAgent* QNetworkSettingsManager::userAgent() diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index 3ce5095..103bc77 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -50,6 +50,7 @@ class Q_DECL_EXPORT QNetworkSettingsManager : public QObject Q_PROPERTY(QNetworkSettingsServiceFilter* services READ services NOTIFY servicesChanged) Q_PROPERTY(QNetworkSettingsInterfaceModel* interfaces READ interfaces NOTIFY interfacesChanged) Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ userAgent CONSTANT) + Q_PROPERTY(QNetworkSettingsService* currentWifiConnection READ currentWifiConnection NOTIFY currentWifiConnectionChanged) public: explicit QNetworkSettingsManager(QObject* parent = Q_NULLPTR); @@ -59,12 +60,18 @@ public: QNetworkSettingsUserAgent* userAgent(); Q_INVOKABLE QNetworkSettingsService* service(const QString& name, int type); + Q_INVOKABLE void connectBySsid(const QString& name, const QString &passphrase); + void clearConnectionState(); + void tryNextConnection(); + void clearCurrentWifiConnection(QNetworkSettingsService* service); + void setCurrentWifiConnection(QNetworkSettingsService* service); + QNetworkSettingsService* currentWifiConnection(); Q_INVOKABLE QNetworkSettingsInterface* interface(int type, int instance); Q_SIGNALS: void servicesChanged(); void interfacesChanged(); - + void currentWifiConnectionChanged(); protected: QNetworkSettingsManagerPrivate *d_ptr; diff --git a/src/networksettings/qnetworksettingsservice.cpp b/src/networksettings/qnetworksettingsservice.cpp index 0c142b2..d3ea020 100644 --- a/src/networksettings/qnetworksettingsservice.cpp +++ b/src/networksettings/qnetworksettingsservice.cpp @@ -321,6 +321,12 @@ void QNetworkSettingsService::setupNetworkSettingsProxy() \sa disconnectService() */ void QNetworkSettingsService::connectService() +{ + emit connectionStateCleared(); + doConnectService(); +} + +void QNetworkSettingsService::doConnectService() { Q_D(QNetworkSettingsService); d->connectService(); diff --git a/src/networksettings/qnetworksettingsservice.h b/src/networksettings/qnetworksettingsservice.h index 4f3ad00..6f5a87e 100644 --- a/src/networksettings/qnetworksettingsservice.h +++ b/src/networksettings/qnetworksettingsservice.h @@ -74,6 +74,7 @@ public: Q_INVOKABLE void setupNetworkSettingsProxy(); //Wireless config Q_INVOKABLE void connectService(); + void doConnectService(); Q_INVOKABLE void disconnectService(); Q_INVOKABLE void removeService(); Q_SIGNALS: @@ -86,6 +87,9 @@ Q_SIGNALS: void domainsChanged(); void nameserversChanged(); void wirelessChanged(); + void connectionStateCleared(); + void serviceConnected(QNetworkSettingsService* service); + void serviceDisconnected(QNetworkSettingsService* service); protected: QNetworkSettingsServicePrivate *d_ptr; diff --git a/src/networksettings/qnetworksettingsservicemodel.cpp b/src/networksettings/qnetworksettingsservicemodel.cpp index 3040dab..0fe3f47 100644 --- a/src/networksettings/qnetworksettingsservicemodel.cpp +++ b/src/networksettings/qnetworksettingsservicemodel.cpp @@ -162,6 +162,18 @@ void QNetworkSettingsServiceModel::updated(int row) dataChanged(createIndex(row, 0), createIndex(row, 0)); } +QNetworkSettingsService* QNetworkSettingsServiceModel::getByName(const QString& name) +{ + QNetworkSettingsService* ret = nullptr; + foreach (QNetworkSettingsService* item, m_items) { + if (item->name() == name) { + ret = item; + break; + } + } + return ret; +} + QList QNetworkSettingsServiceModel::getModel() { return m_items; diff --git a/src/networksettings/qnetworksettingsservicemodel.h b/src/networksettings/qnetworksettingsservicemodel.h index 91f3b6d..8c34e89 100644 --- a/src/networksettings/qnetworksettingsservicemodel.h +++ b/src/networksettings/qnetworksettingsservicemodel.h @@ -52,6 +52,7 @@ public: void remove(int row); bool removeService(const QString &id); void updated(int row); + QNetworkSettingsService* getByName(const QString& name); QList getModel(); enum Roles { diff --git a/src/networksettings/qnetworksettingsuseragent.cpp b/src/networksettings/qnetworksettingsuseragent.cpp index 8740cf4..cdf1e45 100644 --- a/src/networksettings/qnetworksettingsuseragent.cpp +++ b/src/networksettings/qnetworksettingsuseragent.cpp @@ -55,4 +55,16 @@ QString QNetworkSettingsUserAgent::passphrase() const return d->passphrase(); } +void QNetworkSettingsUserAgent::setSsidAndPassphrase(const QString &ssid, const QString &passphrase) +{ + Q_D(QNetworkSettingsUserAgent); + d->setSsidAndPassphrase(ssid, passphrase); +} + +void QNetworkSettingsUserAgent::clearConnectionState() +{ + Q_D(QNetworkSettingsUserAgent); + d->clearConnectionState(); +} + QT_END_NAMESPACE diff --git a/src/networksettings/qnetworksettingsuseragent.h b/src/networksettings/qnetworksettingsuseragent.h index 2f6cf12..7b76c15 100644 --- a/src/networksettings/qnetworksettingsuseragent.h +++ b/src/networksettings/qnetworksettingsuseragent.h @@ -43,11 +43,14 @@ public: Q_INVOKABLE void setPassphrase(const QString &passphrase); Q_INVOKABLE void cancelInput(); QString passphrase() const; + void setSsidAndPassphrase(const QString &ssid, const QString &passphrase); + void clearConnectionState(); Q_SIGNALS: void showUserCredentialsInput(); void error(); void ready(bool cancel); + void requestNextConnection(); private: QNetworkSettingsUserAgentPrivate *d_ptr; diff --git a/src/settingsui/network/NetworkListView.qml b/src/settingsui/network/NetworkListView.qml index cbad890..d18a793 100644 --- a/src/settingsui/network/NetworkListView.qml +++ b/src/settingsui/network/NetworkListView.qml @@ -37,8 +37,14 @@ ListView { clip: true property var connectingService: null property bool retryConnectAfterIdle: false + function connectBySsid() { + passphraseEnter.showSsid = true + passphraseEnter.visible = true + } - Component.onCompleted: NetworkSettingsManager.services.type = NetworkSettingsType.Unknown; + Component.onCompleted: { + NetworkSettingsManager.services.type = NetworkSettingsType.Unknown; + } model: NetworkSettingsManager.services delegate: Item { diff --git a/src/settingsui/network/NetworkSettings.qml b/src/settingsui/network/NetworkSettings.qml index c357671..58d51b7 100644 --- a/src/settingsui/network/NetworkSettings.qml +++ b/src/settingsui/network/NetworkSettings.qml @@ -30,6 +30,7 @@ import QtQuick 2.6 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.2 import QtDeviceUtilities.NetworkSettings 1.0 +import QtDeviceUtilities.QtButtonImageProvider 1.0 import "../common" Item { @@ -84,6 +85,26 @@ Item { running: false } } + QtButton { + id: manualConnect + visible: true + height: pluginMain.buttonHeight + text: qsTr("Connect manually") + onClicked: { + networkList.connectBySsid() + } + } + QtButton { + id: manualDisconnect + visible: true + height: pluginMain.buttonHeight + text: qsTr("Disconnect wireless") + onClicked: { + if (NetworkSettingsManager.currentWifiConnection) { + NetworkSettingsManager.currentWifiConnection.disconnectService(); + } + } + } } Text { diff --git a/src/settingsui/network/PassphraseEnter.qml b/src/settingsui/network/PassphraseEnter.qml index 1881866..1ed8d92 100644 --- a/src/settingsui/network/PassphraseEnter.qml +++ b/src/settingsui/network/PassphraseEnter.qml @@ -38,6 +38,7 @@ Rectangle { color: viewSettings.backgroundColor opacity: 0.9 property string extraInfo: "" + property bool showSsid: false Rectangle { id: frame @@ -53,6 +54,27 @@ Rectangle { anchors.centerIn: parent spacing: viewSettings.spacing + Text { + visible: showSsid + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + color: "white" + text: qsTr("Enter SSID") + } + + TextField { + id: ssidField + visible: showSsid + width: root.width * 0.4 + height: root.height * 0.075 + color: "white" + background: Rectangle{ + color: "transparent" + border.color: ssidField.focus ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor + border.width: ssidField.focus ? width * 0.01 : 2 + } + } + Text { font.pixelSize: pluginMain.subTitleFontSize font.family: appFont @@ -87,7 +109,12 @@ Rectangle { id: setButton text: qsTr("SET") onClicked: { - NetworkSettingsManager.userAgent.setPassphrase(passField.text) + if (showSsid) { + NetworkSettingsManager.connectBySsid(ssidField.text, passField.text) + showSsid = false + } else { + NetworkSettingsManager.userAgent.setPassphrase(passField.text) + } passphrasePopup.visible = false; } } @@ -97,7 +124,10 @@ Rectangle { borderColor: "transparent" fillColor: viewSettings.buttonGrayColor onClicked: { - NetworkSettingsManager.userAgent.cancelInput() + if (!showSsid) { + NetworkSettingsManager.userAgent.cancelInput() + } + showSsid = false passphrasePopup.visible = false; } } diff --git a/src/settingsui/settingsuiplugin/SettingsHeader.qml b/src/settingsui/settingsuiplugin/SettingsHeader.qml index 9432789..37469e2 100644 --- a/src/settingsui/settingsuiplugin/SettingsHeader.qml +++ b/src/settingsui/settingsuiplugin/SettingsHeader.qml @@ -54,7 +54,7 @@ Item { break; } } - ipItem.text = qsTr("Device IP: ") + ipAddress; + ipItem.text = qsTr("Wired IP: ") + ipAddress; } Image { @@ -90,8 +90,8 @@ Item { Text { id: ipItem width: parent.width * 0.25 - height: parent.height - anchors.verticalCenter: settingsText.verticalCenter + height: parent.height/2 + anchors.top: settingsText.top anchors.right: parent.right anchors.rightMargin: pluginMain.margin horizontalAlignment: Text.AlignRight @@ -100,7 +100,7 @@ Item { color: "white" font.family: appFont font.styleName: "SemiBold" - text: qsTr("Device IP: ") + text: qsTr("Wired IP: ") MouseArea { anchors.fill: parent @@ -108,6 +108,24 @@ Item { } } + Text { + id: wifiIpItem + width: parent.width * 0.25 + height: parent.height/2 + anchors.top: ipItem.bottom + anchors.right: parent.right + anchors.rightMargin: pluginMain.margin + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + font.pixelSize: parent.height * 0.3 + color: "white" + font.family: appFont + font.styleName: "SemiBold" + text: qsTr((NetworkSettingsManager.currentWifiConnection ? + "Wireless IP: " + + NetworkSettingsManager.currentWifiConnection.ipv4.address : "")) + } + Component.onCompleted: { var networkCount = NetworkSettingsManager.services.sourceModel.rowCount(); for (var i = 0; i < networkCount; ++i) { -- cgit v1.2.3