From e1ed6a4e35b03aded27f8c505aa2f6ee9f94098b Mon Sep 17 00:00:00 2001 From: Sami Nurmenniemi Date: Tue, 7 Nov 2017 15:16:21 +0200 Subject: More user friendly handling of WiFi passphrase Task-number: QTBUG-64230 Change-Id: I9de0f5668b419e322a3b0466f2e30a6f957e617e Reviewed-by: Kari Oikarinen Reviewed-by: Teemu Holappa --- src/settingsui/network/NetworkListView.qml | 58 +++++++++++----- src/settingsui/network/PassphraseEnter.qml | 103 ++++++++++++++++++----------- 2 files changed, 106 insertions(+), 55 deletions(-) (limited to 'src/settingsui/network') diff --git a/src/settingsui/network/NetworkListView.qml b/src/settingsui/network/NetworkListView.qml index e658760..cbad890 100644 --- a/src/settingsui/network/NetworkListView.qml +++ b/src/settingsui/network/NetworkListView.qml @@ -35,7 +35,8 @@ import QtQuick.Controls 2.1 ListView { id: list clip: true - property bool connecting: false + property var connectingService: null + property bool retryConnectAfterIdle: false Component.onCompleted: NetworkSettingsManager.services.type = NetworkSettingsType.Unknown; model: NetworkSettingsManager.services @@ -84,7 +85,9 @@ ListView { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft color: connected ? viewSettings.buttonGreenColor : "white" - text: connected ? NetworkSettingsManager.services.itemFromRow(index).ipv4.address : qsTr("Not connected") + text: connected ? NetworkSettingsManager.services.itemFromRow(index).ipv4.address + : (NetworkSettingsManager.services.itemFromRow(index).state === NetworkSettingsState.Idle) ? + qsTr("Not connected") : qsTr("Connecting") font.pixelSize: pluginMain.valueFontSize font.family: appFont font.styleName: connected ? "SemiBold" : "Regular" @@ -103,10 +106,11 @@ ListView { if (connected) { NetworkSettingsManager.services.itemFromRow(index).disconnectService(); } else { - var service = NetworkSettingsManager.services.itemFromRow(index) - if (service) { - list.connecting = true - service.connectService(); + list.connectingService = NetworkSettingsManager.services.itemFromRow(index) + if (list.connectingService) { + passphraseEnter.extraInfo = ""; + list.connectingService.connectService(); + list.connectingService.stateChanged.connect(connectingServiceStateChange); } } } @@ -121,17 +125,41 @@ ListView { } Behavior on height { NumberAnimation { duration: 200} } - Connections { - target: NetworkSettingsManager.userAgent - onShowUserCredentialsInput : { - settingsLoader.source = "qrc:/network/PassphraseEnter.qml" - list.connecting = false - } - onError: { - list.connecting = false - console.log("ERROR OCCURRED") + } + + Connections { + target: NetworkSettingsManager.userAgent + onShowUserCredentialsInput : { + passphraseEnter.visible = true; + } + } + + // Popup for entering passphrase + PassphraseEnter { + id: passphraseEnter + parent: root + visible: false + } + + function connectingServiceStateChange() { + if (connectingService !== null) { + if (connectingService.state === NetworkSettingsState.Failure) { + // If authentication failed, request connection again. That will + // initiate new passphrase request. + retryConnectAfterIdle = true + } else if (connectingService.state === NetworkSettingsState.Ready) { + // If connection succeeded, we no longer have service connecting + connectingService = null; + retryConnectAfterIdle = false; + } else if (connectingService.state === NetworkSettingsState.Idle) { + if (retryConnectAfterIdle) { + passphraseEnter.extraInfo = qsTr("Invalid passphrase"); + connectingService.connectService(); + } + retryConnectAfterIdle = false; } } } + focus: true } diff --git a/src/settingsui/network/PassphraseEnter.qml b/src/settingsui/network/PassphraseEnter.qml index 2841745..1881866 100644 --- a/src/settingsui/network/PassphraseEnter.qml +++ b/src/settingsui/network/PassphraseEnter.qml @@ -27,56 +27,79 @@ ** ****************************************************************************/ import QtQuick 2.0 -import QtGraphicalEffects 1.0 import QtQuick.Controls 2.0 import QtDeviceUtilities.QtButtonImageProvider 1.0 import QtDeviceUtilities.NetworkSettings 1.0 -Item { - id: root - Column { - spacing: pluginMain.spacing - anchors.margins: viewSettings.pageMargin +Rectangle { + id: passphrasePopup + width: root.width + height: root.height + color: viewSettings.backgroundColor + opacity: 0.9 + property string extraInfo: "" - Text { - id: enterPassphraseText - font.pixelSize: pluginMain.subTitleFontSize - font.family: appFont - color: "white" - text: qsTr("Enter Passphrase") - } + Rectangle { + id: frame + color: viewSettings.backgroundColor + border.color: viewSettings.borderColor + border.width: 3 + anchors.centerIn: parent + width: passphraseColumn.width * 1.1 + height: passphraseColumn.height * 1.1 + + Column { + id: passphraseColumn + anchors.centerIn: parent + spacing: viewSettings.spacing - TextField { - id: passField - width: root.width * 0.4 - height: root.height * 0.075 - color: "white" - echoMode: TextInput.Password - background: Rectangle { - color: "transparent" - border.color: passField.focus ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor - border.width: passField.focus ? width * 0.01 : 2 + Text { + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + color: "white" + text: qsTr("Enter Passphrase") } - } - Row{ - spacing: parent.width * 0.025 - QtButton { - id: setButton - text: qsTr("SET") - onClicked: { - passField.focus = false - NetworkSettingsManager.userAgent.setPassphrase(passField.text) + Text { + font.pixelSize: pluginMain.valueFontSize + font.family: appFont + color: "red" + text: extraInfo + visible: (extraInfo !== "") + } + + TextField { + id: passField + width: root.width * 0.4 + height: root.height * 0.075 + color: "white" + echoMode: TextInput.Password + background: Rectangle{ + color: "transparent" + border.color: passField.focus ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor + border.width: passField.focus ? width * 0.01 : 2 } } - QtButton { - id: cancelButton - text: qsTr("CANCEL") - borderColor: "transparent" - fillColor: viewSettings.buttonGrayColor - onClicked: { - NetworkSettingsManager.userAgent.cancelInput() - settingsLoader.source = "qrc:/network/NetworkSettings.qml" + + Row { + spacing: parent.width * 0.025 + QtButton{ + id: setButton + text: qsTr("SET") + onClicked: { + NetworkSettingsManager.userAgent.setPassphrase(passField.text) + passphrasePopup.visible = false; + } + } + QtButton { + id: cancelButton + text: qsTr("CANCEL") + borderColor: "transparent" + fillColor: viewSettings.buttonGrayColor + onClicked: { + NetworkSettingsManager.userAgent.cancelInput() + passphrasePopup.visible = false; + } } } } -- cgit v1.2.3