aboutsummaryrefslogtreecommitdiffstats
path: root/qml/wifi-settings/wifi-settings-app.qml
diff options
context:
space:
mode:
authorsrimaldia <hariasti.srimaldia-1@jp.alps.com>2016-12-09 20:05:35 +0900
committersrimaldia <hariasti.srimaldia-1@jp.alps.com>2016-12-13 15:15:33 +0900
commit311d8f14ceec5b57066228f7ada4483cc4598c80 (patch)
treefde557a29d03e8e1b221f465de14b787f42daf0e /qml/wifi-settings/wifi-settings-app.qml
parent8751c24a726afeb0d65e9aeb031fe7c9240cb5b4 (diff)
add standalone wifi app
Signed-off-by: srimaldia <hariasti.srimaldia-1@jp.alps.com>
Diffstat (limited to 'qml/wifi-settings/wifi-settings-app.qml')
-rwxr-xr-xqml/wifi-settings/wifi-settings-app.qml625
1 files changed, 625 insertions, 0 deletions
diff --git a/qml/wifi-settings/wifi-settings-app.qml b/qml/wifi-settings/wifi-settings-app.qml
new file mode 100755
index 0000000..77990f7
--- /dev/null
+++ b/qml/wifi-settings/wifi-settings-app.qml
@@ -0,0 +1,625 @@
+/* Copyright 2016 ALPS ELECTRIC CO., LTD.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import QtQuick 2.0
+import QtQuick.Layouts 1.1
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 1.0
+import QtQuick.Controls.Styles 1.0
+import system 1.0
+
+import "../../doc/"
+import "../../imports/system/"
+
+ApplicationWindow {
+
+ visible: true
+ //width: 768
+ //height: 1024
+ width: 1080
+ height: 1920
+ property string protocol: 'http://'
+ property string ipAddress: '127.0.0.1'
+ property string portNumber: Qt.application.arguments[1]
+ property string tokenString: Qt.application.arguments[2]
+ property string wifiAPI: '/api/wifi-manager/'
+
+ property string wifiAPIpath: protocol + ipAddress + ':' + portNumber + wifiAPI
+
+ function showRequestInfo(text) {
+ log.text = log.text + "\n" + text
+ console.log(text)
+ }
+
+ Text {
+ id: log
+ anchors.fill: parent
+ anchors.margins: 10
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ //text: "log"
+ }
+
+ GridLayout {
+ ExclusiveGroup {
+ id: wifiPowerGroup
+ }
+ visible: true
+
+ id: seekDeviceType
+ //x: 400
+ //y: 105
+ anchors.top: parent.top
+ anchors.topMargin: 30
+
+ //anchors.bottomMargin: -30 //-20
+ anchors.horizontalCenter: parent.horizontalCenter
+ //visible: !tuningMethodManualSwitchButton.checked
+
+ //anchors.top: functionalityCheckBoxGrid.bottom
+ columns: 13
+ rows: 1
+
+ columnSpacing: 60
+
+ Text {
+ text: qsTr("WiFi power")
+ }
+
+ RadioButton {
+ id: wifiPowerOFF
+ exclusiveGroup: wifiPowerGroup
+ checked: true
+ onClicked: {
+
+ console.log("OFF")
+
+ request(wifiAPIpath + 'deactivate', function (o) {
+
+ // log the json response
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ }
+ Text {
+ text: qsTr("OFF")
+ anchors.left: parent.left
+ anchors.leftMargin: 30
+ }
+ }
+
+ RadioButton {
+ id: wifiPowerON
+ exclusiveGroup: wifiPowerGroup
+ onClicked: {
+
+ console.log("ON")
+
+ request(wifiAPIpath + 'activate', function (o) {
+
+ // log the json response
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ periodicRefresh.start()
+ }
+
+ Text {
+ text: qsTr("ON")
+ anchors.left: parent.left
+ anchors.leftMargin: 30
+ //color: checkBoxTextStyleBands.fontColor
+ //font.pixelSize: checkBoxTextStyleBands.fontSize
+ }
+ }
+ }
+
+
+ // onTechnologyEnabledChanged: {
+ // console.log("Wifi set to", technologyEnabled)
+
+ // if (technologyEnabled == true) {
+
+ // //start periodic refresh, only for now
+ // periodicRefresh.start()
+
+ // request(wifiAPIpath + 'activate', function (o) {
+
+ // // log the json response
+ // showRequestInfo(o.responseText)
+ // console.log(o.responseText)
+ // })
+ // } else {
+
+ // //console.log(networkPath)
+ // networkList.clear()
+
+ // request(wifiAPIpath + 'deactivate', function (o) {
+
+ // // log the json response
+ // showRequestInfo(o.responseText)
+ // console.log(o.responseText)
+ // })
+ // }
+ // }
+ Text {
+ anchors.centerIn: parent
+ font.pixelSize: 40
+ color: "white"
+ visible: false
+ text: "Wifi TB by ALCZ"
+ }
+
+ function listWifiNetworks() {
+ console.log("test #4")
+ }
+
+ ListModel {
+ id: networkList
+ }
+
+ Rectangle {
+ id: buttonNetworkList
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+
+ anchors.margins: 10
+ width: buttonNetworkListText.width + 10
+ height: buttonScanText.height + 10
+ border.width: buttonNetworkListMouseArea.pressed ? 2 : 1
+ radius: 5
+ antialiasing: true
+ color: "#222"
+ border.color: "white"
+
+ Text {
+ color: "white"
+ id: buttonNetworkListText
+ anchors.centerIn: parent
+ text: "GET NETWORK LIST"
+ font.pixelSize: 40
+ }
+
+ ListModel {
+ id: listModel
+ }
+
+ MouseArea {
+ id: buttonNetworkListMouseArea
+ anchors.fill: parent
+
+ onClicked: {
+ log.text = ""
+ console.log("\n")
+
+ networkList.clear()
+
+ request(wifiAPIpath + 'scan_result', function (o) {
+
+ // log the json response
+ console.log(o.responseText)
+
+ // translate response into object
+ var jsonObject = eval('(' + o.responseText + ')')
+
+ var jsonObjectNetworks = eval(
+ '(' + JSON.stringify(jsonObject.response) + ')')
+
+ //console.log(jsonObject.response)
+ for (var i = 0; i < jsonObjectNetworks.length; i++) {
+
+ networkList.append({
+ number: jsonObjectNetworks[i].Number,
+ name: jsonObjectNetworks[i].ESSID,
+ strength: jsonObjectNetworks[i].Strength,
+ serviceState: jsonObjectNetworks[i].State,
+ security: jsonObjectNetworks[i].Security,
+ address: jsonObjectNetworks[i].IPAddress
+ })
+ console.log(jsonObjectNetworks[i].Number,
+ jsonObjectNetworks[i].ESSID,
+ jsonObjectNetworks[i].Strength,
+ jsonObjectNetworks[i].State,
+ jsonObjectNetworks[i].Security,
+ jsonObjectNetworks[i].IPAddress)
+ }
+ })
+ }
+ }
+ }
+
+ Rectangle {
+ id: buttonScan
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.margins: 80
+ width: buttonScanText.width + 10
+ height: buttonScanText.height + 10
+ border.width: mouseArea.pressed ? 2 : 1
+ //radius: 5
+ //antialiasing: true
+ //color: "black"
+ color: "#222"
+ border.color: "white"
+
+ Text {
+ id: buttonScanText
+ anchors.centerIn: parent
+ text: "SCAN"
+ color: "white"
+ font.pixelSize: 40
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+
+ onClicked: {
+ log.text = ""
+ console.log("\n")
+
+ request(wifiAPIpath + 'scan', function (o) {
+
+ // log the json response
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ }
+ }
+ }
+
+ function request(url, callback) {
+ var xhr = new XMLHttpRequest()
+ xhr.onreadystatechange = (function (myxhr) {
+
+ return function () {
+
+ if (xhr.readyState == 4 && xhr.status == 200)
+ callback(myxhr)
+ }
+ })(xhr)
+ xhr.open('GET', url, false)
+ xhr.send('')
+ }
+
+ /* function signalStrength(strength) {
+ if (strength < 30)
+ return "poor"
+ else if (strength >= 30 && strength < 50)
+ return "fair"
+ else if (strength >= 50 && strength < 70)
+ return "good"
+ else
+ return "excellent" }*/
+ function securityType(security) {
+
+ // if ((security === "[ psk ]") || (security === "[ psk wps ]"))
+ // return "secured"
+ // else
+ // return "unsecured"
+ if (security === "Open")
+ return "unsecured"
+ else
+ return "secured"
+ }
+
+ Component {
+ id: wifiDevice
+
+ Rectangle {
+ height: 150
+ width: parent.width
+ color: "#222"
+
+ Image {
+ anchors.top: parent.top
+ anchors.topMargin: 7
+ anchors.left: parent.left
+ width: 70
+ height: 50
+ id: icon
+ source: {
+ if (securityType(security) === "unsecured") {
+ if (strength < 30)
+ source = "components/images/wifi1.png"
+ else if (strength >= 30 && strength < 50)
+ source = "components/images/wifi2.png"
+ else if (strength >= 50 && strength < 70)
+ source = "components/images/wifi3.png"
+ else
+ source = "components/images/wifi4.png"
+ } else {
+ if (strength < 30)
+ source = "components/images/wifi1-lock.png"
+ else if (strength >= 30 && strength < 50)
+ source = "components/images/wifi2-lock.png"
+ else if (strength >= 50 && strength < 70)
+ source = "components/images/wifi3-lock.png"
+ else
+ source = "components/images/wifi4-lock.png"
+ }
+ }
+ }
+
+ Column {
+ anchors.left: icon.right
+ anchors.leftMargin: 10
+ Text {
+ text: name
+ font.pointSize: 20
+ font.bold: {
+ if ((serviceState === "ready")
+ || serviceState === "online")
+ font.bold = true
+ else
+ font.bold = false
+ }
+
+ color: {
+ if ((serviceState === "ready")
+ || serviceState === "online")
+ color = "#00ff00"
+ else
+ color = "#ffffff"
+ }
+ }
+
+ Text {
+ //text: serviceState + ", RSSI: " + strength + security
+ /* text: {
+ if ((serviceState === "ready") || serviceState === "online")
+ text = "signal " + signalStrength(strength) + ", " + "connected" + ", " + address
+ else
+ text = "signal " + signalStrength(strength) + ", " + securityType(security) + " network" + ", " + serviceState
+ }*/
+ visible: ((serviceState === "ready")
+ || serviceState === "online") ? true : false
+ text: "connected, " + address
+ font.pointSize: 18
+ color: "#ffffff"
+ font.italic: true
+ }
+ }
+
+ Button {
+ id: connectButton
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+
+ width: 250
+
+ //text: ""
+
+ //anchors.rightMargin: 40
+ //buttonText: "Connect"
+ // style: ButtonStyle {
+ // label: Text {
+ // text: control.text
+ // color: "blue"
+ // text: control.text
+ // }
+ //}
+
+ // buttonText: {
+
+ // if ((serviceState === "ready") || serviceState === "online")
+ // buttonText = "Forget"
+ // else
+ // buttonText = "Connect"}
+ MouseArea {
+ anchors.fill: parent
+
+ Text {
+ anchors.fill: parent
+ id: buttonTextLabel
+ font.pixelSize: 15
+ font.bold: true
+ color: "black"
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: {
+ if ((serviceState === "ready")
+ || serviceState === "online")
+ text = "Forget"
+ else
+ text = "Connect"
+ }
+ }
+
+ onClicked: {
+
+ //connectButton.border.color = "steelblue"
+ if ((serviceState === "ready")
+ || serviceState === "online") {
+
+ //means we are connected
+ console.log("Disconnecting from", index, " ,", name)
+ request(wifiAPIpath + 'disconnect?network=' + index,
+ function (o) {
+
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ } else {
+ console.log("Conect to", index, " ,", name)
+
+ //passwordDialog.open()
+ request(wifiAPIpath + 'connect?network=' + index,
+ function (o) {
+
+ // log the json response
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ }
+ }
+ }
+ }
+
+ Button {
+ id: passwordButton
+ anchors.top: parent.top
+ anchors.right: parent.right
+ width: 40
+ visible: (securityType(security) === "unsecured") ? false : true
+
+ //anchors.rightMargin: connectButton.width + 5
+ //buttonText: "Connect"
+ text: {
+ "Key" //or some icon?
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: {
+
+ //connectButton.border.color = "steelblue"
+ passwordInputText.visible = true
+ connectButton.visible = false
+ passwordValidateButton.visible = true
+
+ System.showKeyboard = visible
+
+ //passwordInputText.o
+ periodicRefresh.stop()
+
+ var passkey = passwordInputText.text.valueOf()
+
+ //var passkey = 'randompassword'
+ console.log("Disconnecting from", index, " ,", name)
+ }
+ }
+ }
+
+ Button {
+ id: passwordValidateButton
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.rightMargin: connectButton.width + 5
+ width: 40
+ visible: false
+
+ //anchors.rightMargin: connectButton.width + 5
+ //buttonText: "Connect"
+ text: {
+ "ok" //or some icon?
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: {
+ //passwordInputText = ""
+ var passkey = passwordInputText.text.valueOf()
+ console.log("Validating", passkey)
+ System.showKeyboard = false
+
+ console.log("Passkey is", passkey)
+ request(wifiAPIpath + 'security?passkey=' + passkey,
+ function (o) {
+
+ //showRequestInfo(o.responseText)
+ console.log(o.responseText)
+ })
+ passwordValidateButton.visible = false
+ passwordInputText.visible = false
+ connectButton.visible = true
+
+ keyboard.currentString = ""
+
+ periodicRefresh.start()
+ }
+ }
+ }
+
+ TextInput {
+ id: passwordInputText
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+
+ font.pointSize: 15
+ color: "#ffffff"
+
+ width: connectButton.width
+ visible: false
+ text: keyboard.currentString
+ }
+ }
+ }
+
+ ListView {
+ width: parent.width
+ anchors.top: parent.top
+ anchors.topMargin: 70
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 150
+ model: networkList //WifiList {}
+ delegate: wifiDevice
+ clip: true
+ }
+
+ //Timer for periodic refresh; this is BAD solution, need to figure out how to subscribe for events
+ Timer {
+ id: periodicRefresh
+ interval: 5000 // 5seconds
+ onTriggered: {
+
+ networkList.clear()
+
+ request(wifiAPIpath + 'scan_result', function (o) {
+
+ // log the json response
+ console.log(o.responseText)
+
+ // translate response into object
+ var jsonObject = eval('(' + o.responseText + ')')
+
+ var jsonObjectNetworks = eval('(' + JSON.stringify(
+ jsonObject.response) + ')')
+
+ console.log("WiFi list refreshed")
+
+ //console.log(jsonObject.response)
+ for (var i = 0; i < jsonObjectNetworks.length; i++) {
+
+ networkList.append({
+ number: jsonObjectNetworks[i].Number,
+ name: jsonObjectNetworks[i].ESSID,
+ strength: jsonObjectNetworks[i].Strength,
+ serviceState: jsonObjectNetworks[i].State,
+ security: jsonObjectNetworks[i].Security,
+ address: jsonObjectNetworks[i].IPAddress
+ })
+ // console.log(jsonObjectNetworks[i].Number,
+ // jsonObjectNetworks[i].ESSID,
+ // jsonObjectNetworks[i].Strength,
+ // jsonObjectNetworks[i].State,
+ // jsonObjectNetworks[i].Security)
+ }
+ })
+
+ start()
+ }
+ }
+
+ Keyboard {
+ id: keyboard
+ y: System.showKeyboard ? parent.height - height : parent.height
+ width: parent.width
+ }
+}