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 ++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 15 deletions(-) (limited to 'src/settingsui/network/NetworkListView.qml') 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 } -- cgit v1.2.3