summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Nurmenniemi <sami.nurmenniemi@qt.io>2017-10-31 13:46:40 +0200
committerSami Nurmenniemi <sami.nurmenniemi@qt.io>2017-11-22 10:41:58 +0000
commitd1fcfe58025603ae28e8fda31d96519a92cdb7dd (patch)
treeff1dc34b7a97fe5695e82504d7313678fad4c6d3
parent50b66ec25694e30caa5fbc556bc172d6319522ba (diff)
Add Wi-Fi enable button to network settings
Task-number: QTBUG-64230 Change-Id: I2aad07fb98a45997b116fc9a06924ba8be3dff2a Reviewed-by: Kari Oikarinen <kari.oikarinen@qt.io> Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
-rw-r--r--src/imports/networksettings/plugin.cpp10
-rw-r--r--src/imports/networksettings/plugins.qmltypes20
-rw-r--r--src/networksettings/qnetworksettingsmanager.cpp21
-rw-r--r--src/networksettings/qnetworksettingsmanager.h4
-rw-r--r--src/settingsui/bluetooth/Bluetooth.qml1
-rw-r--r--src/settingsui/common/CustomSwitch.qml (renamed from src/settingsui/bluetooth/CustomSwitch.qml)0
-rw-r--r--src/settingsui/network/NetworkSettings.qml78
-rw-r--r--src/settingsui/settingsuiapp.qrc2
-rw-r--r--src/settingsui/settingsuiplugin/plugin.qrc2
9 files changed, 126 insertions, 12 deletions
diff --git a/src/imports/networksettings/plugin.cpp b/src/imports/networksettings/plugin.cpp
index 665cb6a..431a099 100644
--- a/src/imports/networksettings/plugin.cpp
+++ b/src/imports/networksettings/plugin.cpp
@@ -32,6 +32,7 @@
#include <qnetworksettingsservice.h>
#include <qnetworksettingsuseragent.h>
#include <qnetworksettingsservicemodel.h>
+#include <qnetworksettingsinterface.h>
#include <qnetworksettingsinterfacemodel.h>
#include <qqml.h>
@@ -122,6 +123,14 @@
*/
/*!
+ \qmlmethod NetworkInterface NetworkSettingsManager::interface(int type, int instance)
+
+ Returns the interface with type \a type and order number of \a instance
+
+ \sa NetworkInterface
+*/
+
+/*!
\qmlmethod NetworkSettingsManager::userAgent.setPassphrase(string passphrase)
Sets the \a passphrase for connecting to a Wifi network.
@@ -162,6 +171,7 @@ void NetworksettingspluginPlugin::registerTypes(const char *uri)
{
Q_ASSERT(QLatin1String(uri) == QLatin1String("QtDeviceUtilities.NetworkSettings"));
qmlRegisterUncreatableType<QNetworkSettingsService>(uri, 1, 0, "NetworkService", "Cannot be instantiated directly.");
+ qmlRegisterUncreatableType<QNetworkSettingsInterface>(uri, 1, 0, "NetworkInterface", "Cannot be instantiated directly.");
qmlRegisterUncreatableType<QNetworkSettingsIPv4>(uri, 1, 0, "NetworkSettingsIPv4", "Cannot be instantiated directly.");
qmlRegisterUncreatableType<QNetworkSettingsIPv6>(uri, 1, 0, "NetworkSettingsIPv6", "Cannot be instantiated directly.");
qmlRegisterUncreatableType<QNetworkSettingsProxy>(uri, 1, 0, "NetworkSettingsProxy", "Cannot be instantiated directly.");
diff --git a/src/imports/networksettings/plugins.qmltypes b/src/imports/networksettings/plugins.qmltypes
index 5022d6f..ac0d3fc 100644
--- a/src/imports/networksettings/plugins.qmltypes
+++ b/src/imports/networksettings/plugins.qmltypes
@@ -7,7 +7,7 @@ import QtQuick.tooling 1.2
// 'qmlplugindump -nonrelocatable QtDeviceUtilities.NetworkSettings 1.0'
Module {
- dependencies: []
+ dependencies: ["QtQuick 2.8"]
Component {
name: "QNetworkSettingsIPv4"
prototype: "QObject"
@@ -56,6 +56,18 @@ Module {
Property { name: "prefixLength"; type: "int" }
}
Component {
+ name: "QNetworkSettingsInterface"
+ prototype: "QObject"
+ exports: ["QtDeviceUtilities.NetworkSettings/NetworkInterface 1.0"]
+ isCreatable: false
+ exportMetaObjectRevisions: [0]
+ Property { name: "name"; type: "string"; isReadonly: true }
+ Property { name: "state"; type: "QNetworkSettingsState::States"; isReadonly: true }
+ Property { name: "type"; type: "QNetworkSettingsType::Types"; isReadonly: true }
+ Property { name: "powered"; type: "bool" }
+ Method { name: "scanServices" }
+ }
+ Component {
name: "QNetworkSettingsManager"
prototype: "QObject"
exports: [
@@ -88,6 +100,12 @@ Module {
Parameter { name: "name"; type: "string" }
Parameter { name: "type"; type: "int" }
}
+ Method {
+ name: "interface"
+ type: "QNetworkSettingsInterface*"
+ Parameter { name: "type"; type: "int" }
+ Parameter { name: "instance"; type: "int" }
+ }
}
Component {
name: "QNetworkSettingsProxy"
diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp
index caf6057..eb687d1 100644
--- a/src/networksettings/qnetworksettingsmanager.cpp
+++ b/src/networksettings/qnetworksettingsmanager.cpp
@@ -29,6 +29,7 @@
#include "qnetworksettingsmanager.h"
#include "qnetworksettingsservice.h"
#include "qnetworksettingsservicemodel.h"
+#include "qnetworksettingsinterface.h"
#include "qnetworksettingsinterfacemodel.h"
#include "qnetworksettingsmanager_p.h"
#include <QStringListModel>
@@ -51,7 +52,7 @@ QNetworkSettingsInterfaceModel *QNetworkSettingsManager::interfaces()
return &d->m_interfaceModel;
}
-QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, const int type)
+QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, int type)
{
Q_D(QNetworkSettingsManager);
@@ -60,7 +61,23 @@ QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, c
return service;
}
}
- return NULL;
+ return nullptr;
+}
+
+QNetworkSettingsInterface* QNetworkSettingsManager::interface(int type, int instance)
+{
+ Q_D(QNetworkSettingsManager);
+ int matchingInstance = 0;
+
+ foreach (QNetworkSettingsInterface* interface, d->m_interfaceModel.getModel()) {
+ if (interface->type() == type) {
+ if (matchingInstance == instance) {
+ return interface;
+ }
+ matchingInstance++;
+ }
+ }
+ return nullptr;
}
void QNetworkSettingsManager::setUserAgent(QNetworkSettingsUserAgent *agent)
diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h
index 7e7cfad..3ce5095 100644
--- a/src/networksettings/qnetworksettingsmanager.h
+++ b/src/networksettings/qnetworksettingsmanager.h
@@ -38,6 +38,7 @@ QT_FORWARD_DECLARE_CLASS(QNetworkSettingsService)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceModel)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsUserAgent)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceFilter)
+QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterface)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterfaceModel)
QT_BEGIN_NAMESPACE
@@ -57,7 +58,8 @@ public:
void setUserAgent(QNetworkSettingsUserAgent *agent);
QNetworkSettingsUserAgent* userAgent();
- Q_INVOKABLE QNetworkSettingsService* service(const QString& name, const int type);
+ Q_INVOKABLE QNetworkSettingsService* service(const QString& name, int type);
+ Q_INVOKABLE QNetworkSettingsInterface* interface(int type, int instance);
Q_SIGNALS:
void servicesChanged();
diff --git a/src/settingsui/bluetooth/Bluetooth.qml b/src/settingsui/bluetooth/Bluetooth.qml
index 13572a8..e89476f 100644
--- a/src/settingsui/bluetooth/Bluetooth.qml
+++ b/src/settingsui/bluetooth/Bluetooth.qml
@@ -30,6 +30,7 @@ import QtQuick 2.6
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.0
import QtDeviceUtilities.BluetoothSettings 1.0
+import "../common"
Item {
id: root
diff --git a/src/settingsui/bluetooth/CustomSwitch.qml b/src/settingsui/common/CustomSwitch.qml
index fa9f9aa..fa9f9aa 100644
--- a/src/settingsui/bluetooth/CustomSwitch.qml
+++ b/src/settingsui/common/CustomSwitch.qml
diff --git a/src/settingsui/network/NetworkSettings.qml b/src/settingsui/network/NetworkSettings.qml
index b3a6350..719ce77 100644
--- a/src/settingsui/network/NetworkSettings.qml
+++ b/src/settingsui/network/NetworkSettings.qml
@@ -30,13 +30,79 @@ import QtQuick 2.6
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.2
import QtDeviceUtilities.NetworkSettings 1.0
+import QtDeviceUtilities.BluetoothSettings 1.0
+import "../common"
Item {
- NetworkListView {
- id: networkList
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.bottom: parent.bottom
+ id: root
+ property string title: qsTr("Network Settings")
+
+ Column {
+ id: networkSettingsColumn
+ spacing: pluginMain.spacing
+ anchors.margins: viewSettings.pageMargin
+
+ Row {
+ spacing: root.width * 0.025
+ leftPadding: pluginMain.margin
+ Text {
+ text: qsTr("Wi-Fi")
+ anchors.verticalCenter: parent.verticalCenter
+ font.pixelSize: pluginMain.subTitleFontSize
+ font.family: appFont
+ color: "white"
+ }
+
+ CustomSwitch {
+ id: wifiSwitch
+ indicatorWidth: root.width * 0.15
+ indicatorHeight: root.height * 0.06
+ property bool wiFiAvailable: NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0) !== null
+ enabled: wiFiAvailable && !wifiSwitchTimer.running
+ onCheckedChanged: {
+ // Power on/off all WiFi interfaces
+ for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
+ NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i).powered = checked
+ wifiSwitchTimer.start()
+ }
+ }
+ Component.onCompleted: {
+ // If any of the WiFi interfaces is powered on, switch is checked
+ var checkedStatus = false;
+ for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
+ if (NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i).powered) {
+ checkedStatus = true;
+ break;
+ }
+ }
+ checked = checkedStatus;
+ }
+
+ // At least 1s between switching on/off
+ Timer {
+ id: wifiSwitchTimer
+ interval: 1000
+ running: false
+ }
+ }
+ }
+
+ Text {
+ text: qsTr("Network list:")
+ font.pixelSize: pluginMain.subTitleFontSize
+ font.family: appFont
+ font.styleName: "SemiBold"
+ color: "white"
+ }
+
+ Row {
+ id: listViewRow
+ leftPadding: pluginMain.margin
+ NetworkListView {
+ id: networkList
+ width: root.width - listViewRow.leftPadding
+ height: root.height - listViewRow.y - networkSettingsColumn.anchors.margins
+ }
+ }
}
}
diff --git a/src/settingsui/settingsuiapp.qrc b/src/settingsui/settingsuiapp.qrc
index 618d761..a3e7ca5 100644
--- a/src/settingsui/settingsuiapp.qrc
+++ b/src/settingsui/settingsuiapp.qrc
@@ -6,7 +6,7 @@
<file>power/Power.qml</file>
<file>timedate/ManualTime.qml</file>
<file>timedate/CustomComboBox.qml</file>
- <file>bluetooth/CustomSwitch.qml</file>
+ <file>common/CustomSwitch.qml</file>
<file>network/PassphraseEnter.qml</file>
<file>locale/TableKey.qml</file>
<file>locale/TableValue.qml</file>
diff --git a/src/settingsui/settingsuiplugin/plugin.qrc b/src/settingsui/settingsuiplugin/plugin.qrc
index 733c164..e6d02ea 100644
--- a/src/settingsui/settingsuiplugin/plugin.qrc
+++ b/src/settingsui/settingsuiplugin/plugin.qrc
@@ -27,7 +27,7 @@
<file>../power/Power.qml</file>
<file>../timedate/ManualTime.qml</file>
<file>../timedate/CustomComboBox.qml</file>
- <file>../bluetooth/CustomSwitch.qml</file>
+ <file>../common/CustomSwitch.qml</file>
<file>../network/NetworkListView.qml</file>
<file>../network/PassphraseEnter.qml</file>
<file>../locale/TableKey.qml</file>