summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzheng_wenlong <wenlong_zheng@nexty-ele.com>2019-04-08 18:43:05 +0900
committerzheng_wenlong <wenlong_zheng@nexty-ele.com>2019-04-10 09:59:55 +0900
commit238076ffff13356c620a7834e25537d4a41e97a6 (patch)
tree73a1a1c9cebc6da145d7baaac1eaec7329ec4f2a
Add demo3 settings source code for cluster mode. [Patch Set 2] Update LICENSE file. Change-Id: I586a211bb55e5017de62e36edd0bbba6968de1b8 BUG-AGL: SPEC-2261 Signed-off-by: zheng_wenlong <wenlong_zheng@nexty-ele.com>
-rw-r--r--.gitignore3
-rw-r--r--.gitreview6
-rw-r--r--LICENSE204
-rw-r--r--app/SettingPage.qml65
-rw-r--r--app/Settings.qml78
-rw-r--r--app/SettingsLauncher.qml83
-rw-r--r--app/app.pri12
-rw-r--r--app/app.pro19
-rw-r--r--app/bluetooth/Bluetooth.qml435
-rw-r--r--app/bluetooth/bluetooth.qrc8
-rw-r--r--app/bluetooth/images/HMI_Pair_Button.svg43
-rw-r--r--app/bluetooth/images/HMI_Paired_Button.svg43
-rw-r--r--app/bluetooth/images/HMI_Settings_BluetoothIcon.svg55
-rw-r--r--app/datetime/DateEdit.qml122
-rw-r--r--app/datetime/DateTime.qml50
-rw-r--r--app/datetime/EditSeparator.qml40
-rw-r--r--app/datetime/TimeEdit.qml86
-rw-r--r--app/datetime/datetime.qrc14
-rw-r--r--app/datetime/images/HMI_Settings_TimeDate_Arrow_DividingLine.svg24
-rw-r--r--app/datetime/images/HMI_Settings_TimeDate_Arrow_Down.svg29
-rw-r--r--app/datetime/images/HMI_Settings_TimeDate_Arrow_Up.svg29
-rw-r--r--app/datetime/images/HMI_Settings_TimeDate_Button_Cancel.svg39
-rw-r--r--app/datetime/images/HMI_Settings_TimeDate_Button_Set.svg39
-rw-r--r--app/datetime/images/HMI_Settings_TimeIcon.svg59
-rw-r--r--app/example/Example.qml114
-rw-r--r--app/example/example.qrc6
-rw-r--r--app/example/images/HMI_Settings_Example.svg72
-rw-r--r--app/images/HMI_Settings_DividingLine.svg58
-rw-r--r--app/images/HMI_Settings_X.svg72
-rw-r--r--app/images/images.qrc6
-rw-r--r--app/main.cpp147
-rw-r--r--app/settings.qrc7
-rw-r--r--app/version/Version.qml78
-rw-r--r--app/version/images/agl_slide_0.pngbin0 -> 1759918 bytes
-rw-r--r--app/version/images/icon.svg182
-rw-r--r--app/version/version.qrc7
-rw-r--r--app/wifi/Wifi.qml175
-rw-r--r--app/wifi/images/HMI_Settings_WifiIcon.svg61
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_1Bar.svg71
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_2Bars.svg71
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_3Bars.svg71
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Full.svg70
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Locked_1Bar.svg78
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Locked_2Bars.svg78
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Locked_3Bars.svg78
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Locked_Full.svg77
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_Locked_NoBars.svg79
-rw-r--r--app/wifi/images/HMI_Settings_Wifi_NoBars.svg70
-rw-r--r--app/wifi/wifi.qrc16
-rw-r--r--package/config.xml20
-rw-r--r--package/icon.svg283
-rw-r--r--package/package.pro21
-rw-r--r--settings.pro3
53 files changed, 3656 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..684dcbc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+build
+*.pro.user
+app/config.tests
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..dbb1919
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,6 @@
+[gerrit]
+host=gerrit.automotivelinux.org
+port=29418
+project=apps/demo3-settings
+defaultbranch=master
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b3201ab
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don`t include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/app/SettingPage.qml b/app/SettingPage.qml
new file mode 100644
index 0000000..c8072de
--- /dev/null
+++ b/app/SettingPage.qml
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (c) 2019 TOYOTA MOTOR CORPORATION
+ *
+ * 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+
+Page {
+ id: root
+ readonly property bool isSetting: true
+ property string icon
+ property bool checkable: false
+ property bool checked: false
+ function done() {
+ parent.pop()
+ }
+
+ function setStatusIcon(index, icon) {
+ dbus.setStatusIcon(index, icon)
+ }
+
+ Connections {
+ target: root
+ onCheckedChanged: {
+ checkedSwitch.checked = checked
+ }
+ }
+
+ Row {
+ anchors.right: parent.right
+ anchors.rightMargin: 100
+ anchors.bottom: parent.top
+ anchors.bottomMargin: 10
+ spacing: 20
+
+ Switch {
+ id: checkedSwitch
+ visible: root.checkable
+ onCheckedChanged: root.checked = checked
+ }
+
+ ImageButton {
+ id: back
+ anchors.bottom: parent.bottom
+ offImage: '../images/HMI_Settings_X.svg'
+ onClicked: root.done()
+ }
+ }
+
+}
diff --git a/app/Settings.qml b/app/Settings.qml
new file mode 100644
index 0000000..9369066
--- /dev/null
+++ b/app/Settings.qml
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+
+import 'datetime'
+import 'bluetooth'
+import 'wifi'
+import 'example'
+import 'version'
+
+ApplicationWindow {
+ id: root
+ width: container.width * container.scale
+ height: container.height * container.scale
+
+ onVisibleChanged: {
+ if (!visible)
+ stack.pop(settings)
+ }
+
+ Item {
+ id: container
+ anchors.centerIn: parent
+ width: 1920
+ height: 720
+ scale: screenInfo.scale_factor()
+
+ StackView {
+ id: stack
+ anchors.fill: parent
+ initialItem: settings
+
+ SettingsLauncher {
+ id: settings
+ onLaunch: {
+ stack.push(app)
+ }
+
+ Component.onCompleted: {
+ for (var a in stack.children) {
+ var app = stack.children[a]
+ if (!app.isSetting) continue
+ settingsModel.append({'icon': app.icon, 'title': app.title, 'checkable': app.checkable, 'app': app})
+ app.visible = false
+ }
+ }
+
+ model: ListModel { id: settingsModel }
+ }
+
+ DateTime {}
+
+ Bluetooth {}
+
+ Wifi {}
+
+// Example {}
+
+ Version {}
+ }
+}
+}
diff --git a/app/SettingsLauncher.qml b/app/SettingsLauncher.qml
new file mode 100644
index 0000000..c62627a
--- /dev/null
+++ b/app/SettingsLauncher.qml
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (c) 2019 TOYOTA MOTOR CORPORATION
+ *
+ * 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+
+Page {
+ id: root
+ title: 'Settings'
+ property alias model: view.model
+ signal launch(var app)
+ signal toggled(var app, bool on)
+
+ ListView {
+ id: view
+ anchors.fill: parent
+ anchors.margins: root.width * 0.075
+ clip: true
+
+ delegate: MouseArea {
+ id: delegate
+ width: ListView.view.width
+ height: width / 15
+ RowLayout {
+ anchors.fill: parent
+ Item {
+ Layout.preferredWidth: 100
+ Layout.preferredHeight: 100
+ Image {
+ anchors.fill: parent
+ source: model.icon
+ }
+ }
+ Label {
+ Layout.fillWidth: true
+ text: model.title.toUpperCase()
+ color: '#00ADDC'
+ }
+ Switch {
+ id: checkedSwitch
+ visible: model.checkable
+ onCheckedChanged: model.app.checked = checked
+ }
+ Connections {
+ target: model.app
+ onCheckableChanged: {
+ checkedSwitch.visible = model.app.checkable
+ }
+ onCheckedChanged: {
+ checkedSwitch.checked = model.app.checked
+ }
+ }
+
+ Component.onCompleted: {
+ checkedSwitch.checked = model.app.checked
+ }
+ }
+ Image {
+ source: '../images/HMI_Settings_DividingLine.svg'
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ visible: model.index > 0
+ }
+
+ onClicked: launch(model.app)
+ }
+ }
+}
diff --git a/app/app.pri b/app/app.pri
new file mode 100644
index 0000000..014646f
--- /dev/null
+++ b/app/app.pri
@@ -0,0 +1,12 @@
+TEMPLATE = app
+
+load(configure)
+qtCompileTest(libhomescreen)
+
+config_libhomescreen {
+ CONFIG += link_pkgconfig
+ PKGCONFIG += homescreen
+ DEFINES += HAVE_LIBHOMESCREEN
+}
+
+DESTDIR = $${OUT_PWD}/../package/root/bin
diff --git a/app/app.pro b/app/app.pro
new file mode 100644
index 0000000..df45be1
--- /dev/null
+++ b/app/app.pro
@@ -0,0 +1,19 @@
+TARGET = settings
+QT = quickcontrols2 websockets dbus
+
+SOURCES = main.cpp
+
+CONFIG += link_pkgconfig
+PKGCONFIG += libhomescreen qlibwindowmanager qtappfw
+
+RESOURCES += \
+ settings.qrc \
+ images/images.qrc \
+ datetime/datetime.qrc \
+ wifi/wifi.qrc \
+ bluetooth/bluetooth.qrc \
+ example/example.qrc \
+ version/version.qrc
+
+
+include(app.pri)
diff --git a/app/bluetooth/Bluetooth.qml b/app/bluetooth/Bluetooth.qml
new file mode 100644
index 0000000..7a63e84
--- /dev/null
+++ b/app/bluetooth/Bluetooth.qml
@@ -0,0 +1,435 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import QtWebSockets 1.0
+import '..'
+
+SettingPage {
+ id: root
+ icon: '/bluetooth/images/HMI_Settings_BluetoothIcon.svg'
+ title: 'Bluetooth'
+ checkable: true
+ readonly property bool isBluetooth: true
+ property int pairedDeviceCount: 0
+
+ Connections {
+ target: bluetooth
+ onRequestConfirmationEvent: {
+ bluetooth.send_confirmation()
+ }
+
+ onDeviceAddedEvent: {
+ if (data.Paired === "True") {
+ pairedDeviceList.append({
+ deviceAddress: data.Address,
+ deviceName: data.Name,
+ devicePairable: data.Paired,
+ deviceConnect: data.Connected,
+ connectAVP: data.AVPConnected,
+ connectHFP: data.HFPConnected,
+ textToShow: ""
+ })
+ pairedDeviceCount = pairedDeviceCount + 1
+ } else {
+ btDeviceList.append({
+ deviceAddress: data.Address,
+ deviceName: data.Name,
+ devicePairable: data.Paired,
+ deviceConnect: data.Connected,
+ connectAVP: data.AVPConnected,
+ connectHFP: data.HFPConnected,
+ textToShow: ""
+ })
+ }
+ }
+
+ onDeviceRemovedEvent: {
+ if (findDevice(data.Address) >= 0) {
+ btDeviceList.remove(findDevice(data.Address))
+ } else if(findPairDevice(data.Address) >= 0) {
+ pairedDeviceList.remove(findPairDevice(data.Address))
+ pairedDeviceCount = pairedDeviceCount - 1
+ }
+ }
+
+ onDeviceUpdatedEvent: {
+ updateDeviceAttribute(data)
+ }
+
+ onDeviceListEvent: {
+ for (var i = 0; i < data.list.length; i++) {
+ var value = data.list[i]
+ if (value.Paired==="True") {
+ if(findPairDevice(value.Address) == -1) {
+ pairedDeviceList.append({
+ deviceAddress: value.Address,
+ deviceName: value.Name,
+ devicePairable:value.Paired,
+ deviceConnect: value.Connected,
+ connectAVP: value.AVPConnected,
+ connectHFP: value.HFPConnected,
+ textToShow: ""
+ })
+ pairedDeviceCount = pairedDeviceCount + 1
+ }
+ }
+ else
+ if (findDevice(value.Address) == -1) {
+ btDeviceList.append({
+ deviceAddress: value.Address,
+ deviceName: value.Name,
+ devicePairable:value.Paired,
+ deviceConnect: value.Connected,
+ connectAVP: value.AVPConnected,
+ connectHFP: value.HFPConnected,
+ textToShow: ""
+ })
+ }
+ }
+ }
+
+ onPowerChanged: {
+ root.checked = bluetooth.power
+ }
+ }
+
+ Text {
+ id: log
+ anchors.fill: parent
+ anchors.margins: 10
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ onCheckedChanged: {
+ console.log("Bluetooth set to", checked)
+
+ pairedDeviceCount = 0
+ bluetooth.power = checked;
+ bluetooth.discoverable = checked;
+
+ if (checked == true) {
+ bluetooth.start_discovery()
+ } else {
+ btDeviceList.clear()
+ pairedDeviceList.clear()
+ bluetooth.stop_discovery()
+ }
+ }
+
+ ListModel {
+ id: pairedDeviceList
+ }
+ ListModel {
+ id: btDeviceList
+ }
+
+
+ Rectangle {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.margins: 80
+ width: buttonScan.width + 10
+ height: buttonScan.height + 10
+ color: "#222"
+ border.color: "white"
+
+ Button {
+ id: buttonScan
+ anchors.centerIn: parent
+ width: 100
+ text: bluetooth.discoverable ? "STOP" :"SEARCH"
+
+ MouseArea {
+ //id: mouseArea
+ anchors.fill: parent
+
+ onClicked: {
+ if (bluetooth.discoverable === false && bluetooth.power === true) {
+ bluetooth.start_discovery()
+ bluetooth.discoverable = true;
+ } else {
+ bluetooth.stop_discovery()
+ bluetooth.discoverable = false;
+ }
+ }
+ }
+ }
+ }
+
+ Component {
+ id:blueToothDevice
+ Rectangle {
+ height: 120
+ width: parent.width
+ color: "transparent"
+ MouseArea {
+ anchors.fill: parent
+ Column {
+ anchors.left: parent.left
+ anchors.leftMargin: 80
+ TextMetrics {
+ id: textMetrics
+ font.family: "Arial"
+ elide: Text.ElideRight
+ elideWidth: 140
+ text: deviceName
+ }
+ Text {
+ id: btName
+ text: textMetrics.elidedText
+ color: '#66FF99'
+ font.pixelSize: 48
+ }
+ Text {
+ id: btStatus
+ property string connectionState:""
+ text: {
+ if ((devicePairable === "True")
+ && (deviceConnect === "True")
+ && (connectAVP === "True")
+ && (connectHFP === "False"))
+ text = " AV Connection, "
+ else if ((devicePairable === "True")
+ && (deviceConnect === "True")
+ && (connectHFP === "True")
+ && (connectAVP === "False"))
+ text = " Handsfree Connection, "
+ else if ((devicePairable === "True")
+ && (deviceConnect === "True")
+ && (connectHFP === "True")
+ && (connectAVP === "True"))
+ text = " Handsfree & AV Connection, "
+ else
+ text = connectionState
+
+ text = deviceAddress + text
+ }
+ font.pixelSize: 18
+ color: "#ffffff"
+ font.italic: true
+ }
+ Text {
+ id: btPairable
+ text: devicePairable
+ visible: false
+ }
+ Text {
+ id: btConnectstatus
+ text: deviceConnect
+ visible: false
+ }
+ }
+ Button {
+ id: removeButton
+ anchors.top:parent.top
+ anchors.topMargin: 15
+ //anchors.horizontalCenter: btName.horizontalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 100
+
+ text: "Remove"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ bluetooth.remove_device(deviceAddress);
+ if (findDevice(deviceAddress) != -1) {
+ btDeviceList.remove(findDevice(deviceAddress))
+ } else if (findPairDevice(deviceAddress) != -1) {
+ pairedDeviceList.remove(findPairDevice(deviceAddress))
+ pairedDeviceCount = pairedDeviceCount - 1
+ }
+ }
+ }
+ }
+
+ Button {
+ id: connectButton
+ anchors.top:parent.top
+ anchors.topMargin: 15
+ anchors.right: removeButton.left
+ anchors.rightMargin: 10
+
+ text: (deviceConnect == "True") ? "Disconnect" : ((btPairable.text == "True") ? "Connect" : "Pair")
+ // only when HFP or AVP is connected, button will be shown as Disconnect
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ if (connectButton.text == "Pair"){
+ connectButton.text = "Connect"
+ bluetooth.pair(deviceAddress)
+ btPairable.text = "True"
+ }
+ else if (connectButton.text == "Connect"){
+ connectButton.text = "Disconnect"
+ bluetooth.connect(deviceAddress)
+ }
+ else if (connectButton.text == "Disconnect"){
+ bluetooth.disconnect(deviceAddress)
+ connectButton.text = "Connect"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ Text {
+ id: pairedlabel
+ width: parent.width
+ anchors.top: parent.top
+ anchors.topMargin: 50
+ anchors.left: parent.left
+ anchors.leftMargin: 80
+ height: 80
+ color:'grey'
+ font.pixelSize: 30
+ text:{
+ if (bluetooth.power == true && pairedDeviceCount != 0)
+ "LIST OF PAIRED DEVICES"
+ else
+ ""
+ }
+ }
+ ListView{
+ id: pairedListView
+ width: parent.width
+ anchors.top: pairedlabel.bottom
+ anchors.bottom: pairedlabel.bottom
+ anchors.bottomMargin: (-120*pairedDeviceCount)
+ model: pairedDeviceList
+ delegate: blueToothDevice
+ clip: true
+ }
+ Image {
+ anchors.bottom: pairedListView.bottom
+ anchors.left: parent.left
+ anchors.leftMargin: 80
+ height: 5
+ source: (bluetooth.power === true && pairedDeviceCount != 0) ? '../images/HMI_Settings_DividingLine.svg':''
+ }
+ Text {
+ id: detectedlabel
+ width: parent.width
+ anchors.top: pairedListView.bottom
+ anchors.topMargin: (pairedDeviceCount != 0) ? 80:-80
+ anchors.left: parent.left
+ anchors.leftMargin: 80
+ height: 80
+ color:'grey'
+ font.pixelSize: 30
+ text: {
+ if (bluetooth.power === true)
+ "LIST OF DETECTED DEVICES"
+ else
+ ""
+ }
+ }
+ ListView {
+ id:listView2
+ width: parent.width
+ anchors.top: detectedlabel.bottom
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 150
+ model: btDeviceList
+ delegate: blueToothDevice
+ clip: true
+ }
+
+ function findDevice(address) {
+ for (var i = 0; i < btDeviceList.count; i++) {
+ if (address === btDeviceList.get(i).deviceAddress)
+ return i
+ }
+ return -1
+ }
+ function findPairDevice(address){
+ for (var i = 0; i < pairedDeviceList.count; i++) {
+ if (address === pairedDeviceList.get(i).deviceAddress)
+ return i
+ }
+ return -1
+ }
+
+ function updateDeviceAttribute(data){
+ var text = ""
+ for (var i = 0; i < btDeviceList.count; i++) {
+ if (data.Address === btDeviceList.get(i).deviceAddress){
+ btDeviceList.get(i).devicePairable = data.Paired
+ if (data.Paired === "True")
+ {
+ pairedDeviceList.append({
+ deviceAddress: btDeviceList.get(i).deviceAddress,
+ deviceName: btDeviceList.get(i).deviceName,
+ devicePairable:btDeviceList.get(i).devicePairable,
+ deviceConnect: btDeviceList.get(i).deviceConnect,
+ connectAVP: btDeviceList.get(i).connectAVP,
+ connectHFP: btDeviceList.get(i).connectHFP,
+ textToShow: ""
+ })
+ pairedDeviceCount = pairedDeviceCount + 1
+ btDeviceList.remove(i, 1)
+ }
+ else{
+ text=deviceConnectionAttribute(data)
+ btDeviceList.set(i, {
+ textToShow: " " + text
+ })
+
+ btDeviceList.get(i).deviceConnect = data.Connected
+ console.log(data.Connected)
+ }
+
+ }
+ }
+ for (var i = 0; i < pairedDeviceList.count; i++) {
+ if(data.Address === pairedDeviceList.get(i).deviceAddress){
+ pairedDeviceList.get(i).devicePairable = data.Paired
+
+ text=deviceConnectionAttribute(data)
+ pairedDeviceList.set(i, { textToShow: " " + text })
+
+ pairedDeviceList.get(i).deviceConnect = data.Connected
+ }
+ }
+ }
+
+ function deviceConnectionAttribute(data){
+ var text = ""
+ if ((data.Paired === "True")
+ && (data.Connected === "True")
+ && (data.AVPConnected === "True")
+ && (data.HFPConnected === "False"))
+ text = "AV Connection, "
+ else if ((data.Paired === "True")
+ && (data.Connected === "True")
+ && (data.HFPConnected === "True")
+ && (data.AVPConnected === "False"))
+ text = "Handsfree Connection, "
+ else if ((data.Paired === "True")
+ && (data.Connected === "True")
+ && (data.HFPConnected === "True")
+ && (data.AVPConnected === "True")) {
+ console.log("all connected!!")
+ text = ", Handsfree & AV Connection"}
+ else
+ text = ""
+ return text
+ }
+}
diff --git a/app/bluetooth/bluetooth.qrc b/app/bluetooth/bluetooth.qrc
new file mode 100644
index 0000000..bc8b70a
--- /dev/null
+++ b/app/bluetooth/bluetooth.qrc
@@ -0,0 +1,8 @@
+<RCC>
+ <qresource prefix="/bluetooth">
+ <file>Bluetooth.qml</file>
+ <file>images/HMI_Pair_Button.svg</file>
+ <file>images/HMI_Paired_Button.svg</file>
+ <file>images/HMI_Settings_BluetoothIcon.svg</file>
+ </qresource>
+</RCC>
diff --git a/app/bluetooth/images/HMI_Pair_Button.svg b/app/bluetooth/images/HMI_Pair_Button.svg
new file mode 100644
index 0000000..9d3f626
--- /dev/null
+++ b/app/bluetooth/images/HMI_Pair_Button.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 151 51"
+ style="enable-background:new 0 0 151 51;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
+ .st1{opacity:0.3;fill:url(#SVGID_2_);}
+ .st2{fill:#FFFFFF;}
+ .st3{font-family:'Roboto-Regular';}
+ .st4{font-size:19.7348px;}
+ .st5{letter-spacing:3;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="24.7258" y1="75.9063" x2="126.2742" y2="-24.9063">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.5" class="st0" width="150" height="50"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-25.8746" y1="126.14" x2="190.2191" y2="-88.3878">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.5" class="st1" width="150" height="50"/>
+ <g>
+ <text transform="matrix(1 0 0 1 46.5699 33.9046)" class="st2 st3 st4 st5">Pair</text>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/bluetooth/images/HMI_Paired_Button.svg b/app/bluetooth/images/HMI_Paired_Button.svg
new file mode 100644
index 0000000..6e1f57a
--- /dev/null
+++ b/app/bluetooth/images/HMI_Paired_Button.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 151 51"
+ style="enable-background:new 0 0 151 51;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
+ .st1{opacity:0.84;fill:url(#SVGID_2_);}
+ .st2{fill:#27232B;}
+ .st3{font-family:'Roboto-Regular';}
+ .st4{font-size:19.7348px;}
+ .st5{letter-spacing:2.9;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="24.7258" y1="75.9063" x2="126.2742" y2="-24.9063">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.5" class="st0" width="150" height="50"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-25.8746" y1="126.14" x2="190.2191" y2="-88.3878">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.5" class="st1" width="150" height="50"/>
+ <g>
+ <text transform="matrix(1.0252 0 0 1 33.1099 33.9038)" class="st2 st3 st4 st5">PairED</text>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/bluetooth/images/HMI_Settings_BluetoothIcon.svg b/app/bluetooth/images/HMI_Settings_BluetoothIcon.svg
new file mode 100644
index 0000000..d41de2a
--- /dev/null
+++ b/app/bluetooth/images/HMI_Settings_BluetoothIcon.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 100 100"
+ style="enable-background:new 0 0 100 100;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_BluetoothIcon.svg"><metadata
+ id="metadata16"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs14" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview12"
+ showgrid="false"
+ inkscape:zoom="2.36"
+ inkscape:cx="-130.29661"
+ inkscape:cy="50"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="Bluetooth_Icon"><path
+ class="st0"
+ d="M48.3,86.9V53.4L30.9,69.7l-1.4-1.5l18.8-17.6v-0.2L27.9,36.4l1.1-1.6L48.3,48v-35l23.6,18.2l-20.3,19 l20.5,14.1L48.3,86.9z M50.3,51.8v30.5l18.6-17.6L50.3,51.8z M50.3,17.1v31.6l18.5-17.3L50.3,17.1z"
+ id="path10" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/datetime/DateEdit.qml b/app/datetime/DateEdit.qml
new file mode 100644
index 0000000..f9f75fd
--- /dev/null
+++ b/app/datetime/DateEdit.qml
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+
+GridLayout {
+ id: root
+ flow: GridLayout.TopToBottom
+ rows: 3
+
+ property int year: yearControl.model[yearControl.currentIndex]
+ property int month: monthControl.currentIndex + 1
+ property int day: dayControl.currentIndex + 1
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: monthControl.currentIndex++
+ }
+ Tumbler {
+ id: monthControl
+ implicitWidth: 200
+ model: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
+ onCurrentIndexChanged: dayControl.regenerateModel()
+
+ EditSeparator { anchors.fill: parent }
+ }
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: monthControl.currentIndex--
+ }
+
+ Item { width: 10; height: 10 }
+ Label { text: ':' }
+ Item { width: 10; height: 10 }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: dayControl.currentIndex++
+ }
+
+ Tumbler {
+ id: dayControl
+ model: ListModel{
+ id: monthModel
+ }
+ Component.onCompleted: regenerateModel()
+ function regenerateModel() {
+ var eom = 0
+ var y = yearControl.model[yearControl.currentIndex]
+ var m = monthControl.currentIndex + 1
+ switch (m) {
+ case 2:
+ eom = 28 + parseInt(1 / (y % 4 + 1)) - parseInt(1 - 1 / (y % 100 + 1)) + parseInt(1 / (y % 400 + 1))
+ break
+ case 4:
+ case 6:
+ case 9:
+ case 11:
+ eom = 30
+ break
+ default:
+ eom = 31
+ break
+ }
+ while (monthModel.count < eom)
+ monthModel.append({modelData: monthModel.count + 1})
+ while (monthModel.count > eom)
+ monthModel.remove(monthModel.count - 1, 1)
+ }
+ EditSeparator { anchors.fill: parent }
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: dayControl.currentIndex--
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: yearControl.currentIndex++
+ }
+
+ Tumbler {
+ id: yearControl
+ Component.onCompleted: {
+ var arr = new Array
+ for (var i = 2010; i < 2050; i++) {
+ arr.push(i)
+ }
+ yearControl.model = arr
+ }
+ onCurrentIndexChanged: dayControl.regenerateModel()
+ EditSeparator { anchors.fill: parent }
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: yearControl.currentIndex--
+ }
+}
diff --git a/app/datetime/DateTime.qml b/app/datetime/DateTime.qml
new file mode 100644
index 0000000..5030b1e
--- /dev/null
+++ b/app/datetime/DateTime.qml
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+import '..'
+
+SettingPage {
+ id: root
+ icon: '/datetime/images/HMI_Settings_TimeIcon.svg'
+ title: 'Date & Time'
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.margins: 100
+ Label { text: 'Date'}
+ DateEdit {}
+ Image {
+ source: '../images/HMI_Settings_DividingLine.svg'
+ }
+ Label { text: 'Time'}
+ TimeEdit {}
+ RowLayout {
+ anchors.right: parent.right
+ Button {
+ text: 'OK'
+ highlighted: true
+ onClicked: root.done()
+ }
+ }
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/app/datetime/EditSeparator.qml b/app/datetime/EditSeparator.qml
new file mode 100644
index 0000000..e833b52
--- /dev/null
+++ b/app/datetime/EditSeparator.qml
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+
+ColumnLayout {
+ anchors.fill: parent
+ z: -1
+ Item {
+ Layout.fillHeight: true
+ Layout.preferredHeight: 1
+ }
+ Repeater {
+ model: 2
+ Image {
+ Layout.fillHeight: true
+ Layout.preferredHeight: 2
+ Layout.alignment: Layout.Center
+ source: './images/HMI_Settings_TimeDate_Arrow_DividingLine.svg'
+ }
+ }
+ Item {
+ Layout.fillHeight: true
+ Layout.preferredHeight: 1
+ }
+}
diff --git a/app/datetime/TimeEdit.qml b/app/datetime/TimeEdit.qml
new file mode 100644
index 0000000..69a049b
--- /dev/null
+++ b/app/datetime/TimeEdit.qml
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+
+GridLayout {
+ id: root
+ flow: GridLayout.TopToBottom
+ rows: 3
+
+ property int hour: hourControl.currentIndex
+ property int minutes: minutesControl.currentIndex
+ property string ampm: ampmControl.model[ampmControl.currentIndex]
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: hourControl.currentIndex++
+ }
+ Tumbler {
+ id: hourControl
+ model: 12
+ EditSeparator { anchors.fill: parent }
+ }
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: hourControl.currentIndex--
+ }
+
+ Item { width: 10; height: 10 }
+ Label { text: ':' }
+ Item { width: 10; height: 10 }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: minutesControl.currentIndex++
+ }
+
+ Tumbler {
+ id: minutesControl
+ model: 60
+ EditSeparator { anchors.fill: parent }
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: minutesControl.currentIndex--
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg'
+ onClicked: ampmControl.currentIndex++
+ }
+
+ Tumbler {
+ id: ampmControl
+ model: ['AM', 'PM', 'AM', 'PM']
+ EditSeparator { anchors.fill: parent }
+ }
+
+ ImageButton {
+ Layout.alignment: Layout.Center
+ offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg'
+ onClicked: ampmControl.currentIndex--
+ }
+}
diff --git a/app/datetime/datetime.qrc b/app/datetime/datetime.qrc
new file mode 100644
index 0000000..c60c626
--- /dev/null
+++ b/app/datetime/datetime.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/datetime">
+ <file>DateEdit.qml</file>
+ <file>DateTime.qml</file>
+ <file>TimeEdit.qml</file>
+ <file>EditSeparator.qml</file>
+ <file>images/HMI_Settings_TimeDate_Arrow_DividingLine.svg</file>
+ <file>images/HMI_Settings_TimeDate_Arrow_Down.svg</file>
+ <file>images/HMI_Settings_TimeDate_Arrow_Up.svg</file>
+ <file>images/HMI_Settings_TimeDate_Button_Cancel.svg</file>
+ <file>images/HMI_Settings_TimeDate_Button_Set.svg</file>
+ <file>images/HMI_Settings_TimeIcon.svg</file>
+ </qresource>
+</RCC>
diff --git a/app/datetime/images/HMI_Settings_TimeDate_Arrow_DividingLine.svg b/app/datetime/images/HMI_Settings_TimeDate_Arrow_DividingLine.svg
new file mode 100644
index 0000000..f311d6a
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeDate_Arrow_DividingLine.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 93 20"
+ style="enable-background:new 0 0 93 20;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#0DF9FF;stroke-miterlimit:10;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <line class="st0" x1="0.3" y1="10" x2="92.7" y2="10"/>
+ </g>
+</switch>
+</svg>
diff --git a/app/datetime/images/HMI_Settings_TimeDate_Arrow_Down.svg b/app/datetime/images/HMI_Settings_TimeDate_Arrow_Down.svg
new file mode 100644
index 0000000..18ae1f5
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeDate_Arrow_Down.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 90 70"
+ style="enable-background:new 0 0 90 70;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#0DF9FF;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g id="previous_11_">
+ <g>
+ <path class="st0" d="M61.9,23.6c0,0-16.9,16.5-16.9,16.5c0,0-16.8-16.5-16.8-16.5c-0.1,0-4.3,2.1-4.3,2.1L45,46.4l21.1-20.7
+ C66.1,25.7,61.8,23.6,61.9,23.6z"/>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/datetime/images/HMI_Settings_TimeDate_Arrow_Up.svg b/app/datetime/images/HMI_Settings_TimeDate_Arrow_Up.svg
new file mode 100644
index 0000000..7eba43d
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeDate_Arrow_Up.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 90 70"
+ style="enable-background:new 0 0 90 70;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#0DF9FF;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g id="previous_11_">
+ <g>
+ <path class="st0" d="M45,23.6L23.9,44.3c0,0,4.2,2.1,4.3,2.1c0,0,16.8-16.5,16.8-16.5c0,0,16.9,16.5,16.9,16.5
+ c0,0,4.2-2.1,4.2-2.1L45,23.6z"/>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/datetime/images/HMI_Settings_TimeDate_Button_Cancel.svg b/app/datetime/images/HMI_Settings_TimeDate_Button_Cancel.svg
new file mode 100644
index 0000000..14a7edc
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeDate_Button_Cancel.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 151 51"
+ style="enable-background:new 0 0 151 51;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#0DF9FF;stroke-miterlimit:10;}
+ .st1{opacity:0.3;fill:url(#SVGID_1_);stroke:#0DF9FF;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+ .st3{font-family:'Roboto-Regular';}
+ .st4{font-size:20px;}
+ .st5{letter-spacing:3;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g>
+ <rect x="0.5" y="0.5" class="st0" width="150" height="50"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-25.8746" y1="126.14" x2="190.2191" y2="-88.3878">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.5" class="st1" width="150" height="50"/>
+ <g>
+ <text transform="matrix(1 0 0 1 29.5984 34.017)" class="st2 st3 st4 st5">CANCEL</text>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/datetime/images/HMI_Settings_TimeDate_Button_Set.svg b/app/datetime/images/HMI_Settings_TimeDate_Button_Set.svg
new file mode 100644
index 0000000..e258e1e
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeDate_Button_Set.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+ <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+ <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+ <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+ <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+ <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+ <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 151 51"
+ style="enable-background:new 0 0 151 51;" xml:space="preserve">
+<style type="text/css">
+ .st0{opacity:0.84;fill:url(#SVGID_1_);}
+ .st1{fill:none;stroke:#0DF9FF;stroke-miterlimit:10;}
+ .st2{fill:#27232B;}
+ .st3{font-family:'Roboto-Regular';}
+ .st4{font-size:20px;}
+ .st5{letter-spacing:3;}
+</style>
+<switch>
+ <g i:extraneous="self">
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-25.8746" y1="125.9981" x2="190.2191" y2="-88.5298">
+ <stop offset="0" style="stop-color:#00ADDC"/>
+ <stop offset="1" style="stop-color:#6BFBFF"/>
+ </linearGradient>
+ <rect x="0.5" y="0.4" class="st0" width="150" height="50"/>
+ <rect x="0.5" y="0.4" class="st1" width="150" height="50"/>
+ <g>
+ <text transform="matrix(1 0 0 1 53.2699 33.8749)" class="st2 st3 st4 st5">SET</text>
+ </g>
+ </g>
+ </g>
+</switch>
+</svg>
diff --git a/app/datetime/images/HMI_Settings_TimeIcon.svg b/app/datetime/images/HMI_Settings_TimeIcon.svg
new file mode 100644
index 0000000..d4b2ef6
--- /dev/null
+++ b/app/datetime/images/HMI_Settings_TimeIcon.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 100 100"
+ style="enable-background:new 0 0 100 100;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_TimeIcon.svg"><metadata
+ id="metadata21"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs19" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview17"
+ showgrid="false"
+ inkscape:zoom="2.36"
+ inkscape:cx="-145.55085"
+ inkscape:cy="50"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><g
+ id="g11"><path
+ class="st0"
+ d="M50,81.2c-17.3,0-31.4-14-31.4-31.2c0-1.3,0.1-2.7,0.3-4l1.9,0.2c-0.2,1.3-0.2,2.5-0.2,3.8 c0,16.2,13.2,29.3,29.5,29.3S79.5,66.2,79.5,50c0-16.2-13.2-29.3-29.5-29.3c-7.2,0-14.1,2.6-19.5,7.3l-1.2-1.4 c5.7-5,13.1-7.8,20.7-7.8c17.3,0,31.4,14,31.4,31.2C81.4,67.2,67.3,81.2,50,81.2z"
+ id="path13" /></g><polygon
+ class="st0"
+ points="51,49.8 51,33.7 49,33.7 49,51.7 50,51.7 51,51.7 60,51.7 60,49.8 "
+ id="polygon15" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/example/Example.qml b/app/example/Example.qml
new file mode 100644
index 0000000..283b76b
--- /dev/null
+++ b/app/example/Example.qml
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+import '..'
+
+SettingPage {
+ id: root
+ icon: '/example/images/HMI_Settings_Example.svg'
+ title: 'Example'
+ checkable: true
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.margins: 100
+ RowLayout {
+ spacing: 20
+ Button {
+ text: 'Wifi'
+ highlighted: true
+ property int index: 0
+ property var icons: ['HMI_Status_Wifi_NoBars-01', 'HMI_Status_Wifi_1Bar-01', 'HMI_Status_Wifi_2Bars-01', 'HMI_Status_Wifi_3Bars-01', 'HMI_Status_Wifi_Full-01']
+ onClicked: {
+ index = (index + 1) % icons.length
+ setStatusIcon(0, 'qrc:/images/Status/%1.png'.arg(icons[index]))
+ }
+ }
+ Button {
+ text: 'Bluetooth'
+ property int index: 0
+ property var icons: ['HMI_Status_Bluetooth_Inactive-01', 'HMI_Status_Bluetooth_On-01']
+ onClicked: {
+ index = (index + 1) % icons.length
+ setStatusIcon(1, 'qrc:/images/Status/%1.png'.arg(icons[index]))
+ }
+ }
+ Button {
+ text: 'Signal'
+ property int index: 0
+ property var icons: ['HMI_Status_Signal_NoBars-01', 'HMI_Status_Signal_1Bars-01', 'HMI_Status_Signal_2Bars-01', 'HMI_Status_Signal_3Bars-01', 'HMI_Status_Signal_4Bars-01', 'HMI_Status_Signal_Full-01']
+ onClicked: {
+ index = (index + 1) % icons.length
+ setStatusIcon(2, 'qrc:/images/Status/%1.png'.arg(icons[index]))
+ }
+ }
+ }
+
+ Image {
+ source: '../images/HMI_Settings_DividingLine.svg'
+ }
+
+ ListView {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ clip: true
+ model: 10
+ delegate: MouseArea {
+ width: ListView.view.width
+ height: 110
+ RowLayout {
+ anchors.fill: parent
+ anchors.margins: 5
+ spacing: 30
+ Image {
+ source: './images/HMI_Settings_Example.svg'
+ }
+
+ ColumnLayout {
+ Label {
+ id: title
+ Layout.fillWidth: true
+ text: 'Title'
+ font.pixelSize: 48
+ }
+ Label {
+ id: subtitle
+ Layout.fillWidth: true
+ text: 'Subtitle'
+ color: '#66FF99'
+ font.pixelSize: 24
+ }
+ }
+
+ Button {
+ text: 'Go'
+ }
+ }
+
+ Image {
+ source: '../images/HMI_Settings_DividingLine.svg'
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ visible: model.index > 0
+ }
+ }
+ }
+ }
+}
diff --git a/app/example/example.qrc b/app/example/example.qrc
new file mode 100644
index 0000000..5739f8e
--- /dev/null
+++ b/app/example/example.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/example">
+ <file>Example.qml</file>
+ <file>images/HMI_Settings_Example.svg</file>
+ </qresource>
+</RCC>
diff --git a/app/example/images/HMI_Settings_Example.svg b/app/example/images/HMI_Settings_Example.svg
new file mode 100644
index 0000000..5ad9479
--- /dev/null
+++ b/app/example/images/HMI_Settings_Example.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;#38;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 45 45"
+ style="enable-background:new 0 0 45 45;"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_ContactScreen_X-01.svg"><metadata
+ id="metadata66"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs64" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview62"
+ showgrid="false"
+ inkscape:zoom="5.2444444"
+ inkscape:cx="-132.61653"
+ inkscape:cy="22.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" /><style
+ type="text/css"
+ id="style4">
+ .st0{fill:none;stroke:#FFFFFF;stroke-miterlimit:10;}
+ .st1{display:none;}
+ .st2{display:inline;opacity:0.15;fill:url(#SVGID_1_);}
+ .st3{display:inline;opacity:0.35;fill:url(#SVGID_2_);}
+ .st4{display:inline;}
+ .st5{opacity:0.15;fill:url(#SVGID_3_);}
+ .st6{opacity:0.15;fill:url(#SVGID_4_);stroke:url(#SVGID_5_);stroke-miterlimit:10;}
+ .st7{fill:url(#SVGID_6_);}
+</style><switch
+ id="switch6"><g
+ i:extraneous="self"
+ id="g8"><g
+ id="Inactive"><g
+ id="g11"><line
+ class="st0"
+ x1="44.8"
+ y1="44.8"
+ x2="0.2"
+ y2="0.2"
+ id="line13" /><line
+ class="st0"
+ x1="45"
+ y1="0"
+ x2="0"
+ y2="45"
+ id="line15" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Settings_DividingLine.svg b/app/images/HMI_Settings_DividingLine.svg
new file mode 100644
index 0000000..d63589c
--- /dev/null
+++ b/app/images/HMI_Settings_DividingLine.svg
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 932.8 1"
+ style="enable-background:new 0 0 932.8 1;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_DividingLine.svg"><metadata
+ id="metadata18"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs16" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview14"
+ showgrid="false"
+ inkscape:zoom="0.72041167"
+ inkscape:cx="-116.6"
+ inkscape:cy="0.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{opacity:0.302;}
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#A8A8A8;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="Divider_2_"
+ class="st0"><g
+ id="g10"><polygon
+ class="st1"
+ points="719.7,0 0,0 0,1 932.8,1 "
+ id="polygon12" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Settings_X.svg b/app/images/HMI_Settings_X.svg
new file mode 100644
index 0000000..5ad9479
--- /dev/null
+++ b/app/images/HMI_Settings_X.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;#38;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 45 45"
+ style="enable-background:new 0 0 45 45;"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_ContactScreen_X-01.svg"><metadata
+ id="metadata66"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs64" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview62"
+ showgrid="false"
+ inkscape:zoom="5.2444444"
+ inkscape:cx="-132.61653"
+ inkscape:cy="22.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" /><style
+ type="text/css"
+ id="style4">
+ .st0{fill:none;stroke:#FFFFFF;stroke-miterlimit:10;}
+ .st1{display:none;}
+ .st2{display:inline;opacity:0.15;fill:url(#SVGID_1_);}
+ .st3{display:inline;opacity:0.35;fill:url(#SVGID_2_);}
+ .st4{display:inline;}
+ .st5{opacity:0.15;fill:url(#SVGID_3_);}
+ .st6{opacity:0.15;fill:url(#SVGID_4_);stroke:url(#SVGID_5_);stroke-miterlimit:10;}
+ .st7{fill:url(#SVGID_6_);}
+</style><switch
+ id="switch6"><g
+ i:extraneous="self"
+ id="g8"><g
+ id="Inactive"><g
+ id="g11"><line
+ class="st0"
+ x1="44.8"
+ y1="44.8"
+ x2="0.2"
+ y2="0.2"
+ id="line13" /><line
+ class="st0"
+ x1="45"
+ y1="0"
+ x2="0"
+ y2="45"
+ id="line15" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/images.qrc b/app/images/images.qrc
new file mode 100644
index 0000000..0bb2c0d
--- /dev/null
+++ b/app/images/images.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/images">
+ <file>HMI_Settings_DividingLine.svg</file>
+ <file>HMI_Settings_X.svg</file>
+ </qresource>
+</RCC>
diff --git a/app/main.cpp b/app/main.cpp
new file mode 100644
index 0000000..026f932
--- /dev/null
+++ b/app/main.cpp
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2017 Konsulko Group
+ *
+ * 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.
+ */
+
+#include <QtCore/QDebug>
+#include <QtCore/QCommandLineParser>
+#include <QtCore/QUrlQuery>
+#include <QtCore/QFile>
+#include <QtDBus/QDBusInterface>
+#include <QtDBus/QDBusReply>
+#include <QtGui/QGuiApplication>
+#include <QtQml/QQmlApplicationEngine>
+#include <QtQml/QQmlContext>
+#include <QtQuickControls2/QQuickStyle>
+#include <QQuickWindow>
+#include <libhomescreen.hpp>
+#include <bluetooth.h>
+#include <network.h>
+#include <qlibwindowmanager.h>
+
+class DBus : public QObject
+{
+ Q_OBJECT
+public:
+ DBus(QObject *parent = nullptr)
+ : QObject(parent)
+ , interface("org.agl.homescreen", "/StatusBar", "org.agl.statusbar", QDBusConnection::sessionBus())
+ {}
+
+ Q_INVOKABLE void setStatusIcon(int index, const QString &url) {
+ interface.call("setStatusIcon", index, url);
+ }
+
+private:
+ QDBusInterface interface;
+};
+
+int main(int argc, char *argv[])
+{
+ QString myname = QString("Settings");
+
+ QGuiApplication app(argc, argv);
+ app.setApplicationName(myname);
+ app.setApplicationVersion(QStringLiteral("0.1.0"));
+ app.setOrganizationDomain(QStringLiteral("automotivelinux.org"));
+ app.setOrganizationName(QStringLiteral("AutomotiveGradeLinux"));
+
+ QQuickStyle::setStyle("AGL");
+
+ QCommandLineParser parser;
+ parser.addPositionalArgument("port", app.translate("main", "port for binding"));
+ parser.addPositionalArgument("secret", app.translate("main", "secret for binding"));
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.process(app);
+ QStringList positionalArguments = parser.positionalArguments();
+
+ QQmlApplicationEngine engine;
+ if (positionalArguments.length() != 2) {
+ exit(EXIT_FAILURE);
+ }
+ int port = positionalArguments.takeFirst().toInt();
+ QString secret = positionalArguments.takeFirst();
+ QUrlQuery query;
+ query.addQueryItem(QStringLiteral("token"), secret);
+
+ QUrl bindingAddressWS;
+ bindingAddressWS.setScheme(QStringLiteral("ws"));
+ bindingAddressWS.setHost(QStringLiteral("localhost"));
+ bindingAddressWS.setPort(port);
+ bindingAddressWS.setPath(QStringLiteral("/api"));
+ bindingAddressWS.setQuery(query);
+ QQmlContext *context = engine.rootContext();
+ context->setContextProperty(QStringLiteral("bindingAddressWS"), bindingAddressWS);
+ context->setContextProperty("network", new Network(bindingAddressWS, context));
+
+ std::string token = secret.toStdString();
+ LibHomeScreen* hs = new LibHomeScreen();
+ QLibWindowmanager* qwm = new QLibWindowmanager();
+
+ // WindowManager
+ if(qwm->init(port,secret) != 0) {
+ exit(EXIT_FAILURE);
+ }
+ AGLScreenInfo screenInfo(qwm->get_scale_factor());
+ // Request a surface as described in layers.json windowmanager’s file
+ if(qwm->requestSurface(myname) != 0) {
+ exit(EXIT_FAILURE);
+ }
+ // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs
+ qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwm, myname](json_object *object) {
+ fprintf(stderr, "Surface got syncDraw!\n");
+ qwm->endDraw(myname);
+ });
+
+ // HomeScreen
+ hs->init(port, token.c_str());
+ // Set the event handler for Event_TapShortcut which will activate the surface for windowmanager
+ hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){
+ qwm->activateSurface(myname);
+ });
+
+ QFile version("/proc/version");
+ if (version.open(QFile::ReadOnly)) {
+ QStringList data = QString::fromLocal8Bit(version.readAll()).split(QLatin1Char(' '));
+ engine.rootContext()->setContextProperty("kernel", data.at(2));
+ version.close();
+ } else {
+ qWarning() << version.errorString();
+ }
+
+ QFile aglversion("/etc/os-release");
+ if (aglversion.open(QFile::ReadOnly)) {
+ QStringList data = QString::fromLocal8Bit(aglversion.readAll()).split(QLatin1Char('\n'));
+ QStringList data2 = data.at(2).split(QLatin1Char('"'));
+ engine.rootContext()->setContextProperty("ucb", data2.at(1));
+ aglversion.close();
+ } else {
+ qWarning() << aglversion.errorString();
+ }
+
+ DBus dbus;
+ engine.rootContext()->setContextProperty("dbus", &dbus);
+ engine.rootContext()->setContextProperty("bluetooth", new Bluetooth(bindingAddressWS));
+ engine.rootContext()->setContextProperty(QStringLiteral("screenInfo"), &screenInfo);
+ engine.load(QUrl(QStringLiteral("qrc:/Settings.qml")));
+ QObject *root = engine.rootObjects().first();
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
+ QObject::connect(window, SIGNAL(frameSwapped()), qwm, SLOT(slotActivateSurface()));
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/app/settings.qrc b/app/settings.qrc
new file mode 100644
index 0000000..189f441
--- /dev/null
+++ b/app/settings.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Settings.qml</file>
+ <file>SettingsLauncher.qml</file>
+ <file>SettingPage.qml</file>
+ </qresource>
+</RCC>
diff --git a/app/version/Version.qml b/app/version/Version.qml
new file mode 100644
index 0000000..8d47ad5
--- /dev/null
+++ b/app/version/Version.qml
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2016 The Qt Company 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Window 2.2
+import AGL.Demo.Controls 1.0
+import '..'
+
+SettingPage {
+ id: root
+ icon: '/version/images/icon.svg'
+ title: 'Version Info'
+
+ ColumnLayout {
+ id: container
+ anchors.fill: parent
+ anchors.margins: 100
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredHeight: 500
+ text: 'Automotive\nGrade Linux'
+ font.pixelSize: 128
+ horizontalAlignment: Label.AlignHCenter
+ verticalAlignment: Label.AlignVCenter
+ clip: true
+ Image {
+ anchors.centerIn: parent
+ source: './images/agl_slide_0.png'
+ z: -1
+ opacity: 0.5
+ }
+ }
+
+ GridLayout {
+ columns: 2
+ rowSpacing: 20
+ columnSpacing: 20
+ Label {
+ text: 'AGL:'
+ font.pixelSize: 48
+ }
+ Label {
+ text: ucb
+ font.pixelSize: 48
+ Layout.fillWidth: true
+ }
+ Label {
+ text: 'Kernel:'
+ font.pixelSize: 48
+ }
+ Label {
+ text: kernel
+ font.pixelSize: 48
+ Layout.fillWidth: true
+ }
+ }
+
+ Item {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ }
+ }
+}
diff --git a/app/version/images/agl_slide_0.png b/app/version/images/agl_slide_0.png
new file mode 100644
index 0000000..6fd062d
--- /dev/null
+++ b/app/version/images/agl_slide_0.png
Binary files differ
diff --git a/app/version/images/icon.svg b/app/version/images/icon.svg
new file mode 100644
index 0000000..97758e9
--- /dev/null
+++ b/app/version/images/icon.svg
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 215 215"
+ style="enable-background:new 0 0 215 215;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="icon.svg"><metadata
+ id="metadata83"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs81" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview79"
+ showgrid="false"
+ inkscape:zoom="1.0976744"
+ inkscape:cx="-373.06144"
+ inkscape:cy="107.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#8BC53F;}
+ .st1{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><path
+ class="st0"
+ d="M113.3,150.3h4.2v15.3h9.5v3.8h-13.7V150.3z"
+ id="path11" /><path
+ class="st0"
+ d="M130.4,150.3h4.2v19.1h-4.2V150.3z"
+ id="path13" /><path
+ class="st0"
+ d="M139.4,150.3h3.9l9,11.8v-11.8h4.2v19.1h-3.6l-9.3-12.2v12.2h-4.2V150.3z"
+ id="path15" /><path
+ class="st0"
+ d="M168.9,169.7c-2.6,0-4.6-0.7-6.1-2.1c-1.5-1.4-2.2-3.5-2.2-6.4v-10.9h4.2v10.8c0,1.6,0.4,2.7,1.1,3.5 c0.7,0.8,1.7,1.2,3,1.2c1.3,0,2.3-0.4,3-1.1c0.7-0.8,1.1-1.9,1.1-3.4v-11h4.2v10.8c0,1.5-0.2,2.7-0.6,3.8c-0.4,1.1-1,2-1.7,2.7 c-0.7,0.7-1.6,1.3-2.7,1.6C171.4,169.5,170.2,169.7,168.9,169.7z"
+ id="path17" /><path
+ class="st0"
+ d="M186.8,159.7l-6.4-9.4h4.9l4,6.2l4-6.2h4.8l-6.4,9.3l6.7,9.8h-4.9l-4.3-6.6l-4.3,6.6h-4.8L186.8,159.7z"
+ id="path19" /><path
+ class="st1"
+ d="M24.1,126.9h2l8.4,18.6h-2.2l-2.2-4.9H20l-2.2,4.9h-2.1L24.1,126.9z M29.2,138.7l-4.2-9.4l-4.2,9.4H29.2z"
+ id="path21" /><path
+ class="st1"
+ d="M37.2,137.7V127h2.1v10.6c0,4,2.1,6.2,5.6,6.2c3.4,0,5.6-2.1,5.6-6.1V127h2.1v10.6c0,5.4-3.1,8.2-7.7,8.2 C40.3,145.7,37.2,142.9,37.2,137.7z"
+ id="path23" /><path
+ class="st1"
+ d="M62.4,128.9h-6.2V127h14.5v1.9h-6.2v16.5h-2.1V128.9z"
+ id="path25" /><path
+ class="st1"
+ d="M72.5,136.3L72.5,136.3c0-5.1,3.8-9.6,9.4-9.6c5.6,0,9.4,4.4,9.4,9.5c0,0,0,0,0,0.1c0,5.1-3.8,9.5-9.4,9.5 C76.3,145.8,72.5,141.4,72.5,136.3z M89.2,136.3L89.2,136.3c0-4.2-3.1-7.7-7.3-7.7c-4.2,0-7.2,3.4-7.2,7.6v0.1 c0,4.2,3.1,7.6,7.3,7.6C86.1,143.8,89.2,140.5,89.2,136.3z"
+ id="path27" /><path
+ class="st1"
+ d="M95.7,127h2.1l6.7,10.1l6.7-10.1h2.1v18.5h-2.1v-15l-6.7,9.9h-0.1l-6.7-9.9v14.9h-2V127z"
+ id="path29" /><path
+ class="st1"
+ d="M144.7,128.9h-6.2V127H153v1.9h-6.2v16.5h-2.1V128.9z"
+ id="path31" /><path
+ class="st1"
+ d="M157.1,127h2.1v18.5h-2.1V127z"
+ id="path33" /><path
+ class="st1"
+ d="M163,127h2.3l6.6,15.9l6.6-15.9h2.2l-7.9,18.6h-1.8L163,127z"
+ id="path35" /><path
+ class="st1"
+ d="M184.3,127h13.3v1.9h-11.3v6.3h10.1v1.9h-10.1v6.5h11.4v1.9h-13.5V127z"
+ id="path37" /><rect
+ x="105.1"
+ y="55.1"
+ class="st1"
+ width="3.8"
+ height="16.8"
+ id="rect39" /><rect
+ x="68.8"
+ y="69.6"
+ transform="matrix(0.707 -0.7072 0.7072 0.707 -34.4212 72.8166)"
+ class="st1"
+ width="3.8"
+ height="16.8"
+ id="rect41" /><rect
+ x="154.6"
+ y="104.5"
+ class="st1"
+ width="16.8"
+ height="3.8"
+ id="rect43" /><rect
+ x="46.9"
+ y="104.5"
+ class="st1"
+ width="16.8"
+ height="3.8"
+ id="rect45" /><path
+ class="st1"
+ d="M43.2,113.9c2.1-34.7,31-62.4,66.2-62.4c35.2,0,64.2,27.6,66.2,62.4h6.4c-2.1-38.3-33.8-68.8-72.6-68.8 s-70.5,30.5-72.6,68.8H43.2z"
+ id="path47" /><circle
+ class="st0"
+ cx="107"
+ cy="114.9"
+ r="6.7"
+ id="circle49" /><rect
+ x="106.6"
+ y="88.5"
+ transform="matrix(0.7071 -0.7071 0.7071 0.7071 -25.0917 120.249)"
+ class="st0"
+ width="52"
+ height="3.8"
+ id="rect51" /><rect
+ x="86.4"
+ y="78"
+ class="st0"
+ width="9.2"
+ height="9.2"
+ id="rect53" /><rect
+ x="97.1"
+ y="78"
+ class="st0"
+ width="9.2"
+ height="9.2"
+ id="rect55" /><rect
+ x="107.8"
+ y="78"
+ class="st0"
+ width="9.2"
+ height="9.2"
+ id="rect57" /><rect
+ x="118.4"
+ y="78"
+ class="st0"
+ width="9.2"
+ height="9.2"
+ id="rect59" /><g
+ id="g61"><path
+ class="st1"
+ d="M34.6,153.7l-1.5,1.4c-1.1-1-2.2-1.8-3.5-2.4c-1.3-0.5-2.5-0.8-3.7-0.8c-1.5,0-2.9,0.4-4.2,1.1 c-1.3,0.7-2.4,1.7-3.1,3c-0.7,1.2-1.1,2.6-1.1,4c0,1.4,0.4,2.8,1.1,4.1c0.8,1.3,1.8,2.3,3.2,3c1.3,0.7,2.8,1.1,4.4,1.1 c1.9,0,3.6-0.5,4.9-1.6c1.3-1.1,2.1-2.5,2.4-4.3h-6v-1.8h8.2c0,2.9-0.9,5.2-2.6,7c-1.7,1.7-4,2.6-6.9,2.6 c-3.5,0-6.3-1.2-8.3-3.6c-1.6-1.8-2.4-4-2.4-6.4c0-1.8,0.5-3.5,1.4-5c0.9-1.5,2.1-2.8,3.7-3.6c1.6-0.9,3.3-1.3,5.3-1.3 c1.6,0,3.1,0.3,4.5,0.9C31.9,151.5,33.3,152.4,34.6,153.7z"
+ id="path63" /><path
+ class="st1"
+ d="M39.4,150.5h3.8c2.1,0,3.5,0.1,4.3,0.3c1.1,0.3,2,0.8,2.7,1.7c0.7,0.8,1.1,1.9,1.1,3.1c0,1-0.2,1.9-0.7,2.7 c-0.5,0.8-1.2,1.4-2.1,1.8c-0.9,0.4-2.1,0.6-3.7,0.6l6.8,8.8h-2.3l-6.8-8.8h-1.1v8.8h-1.9V150.5z M41.3,152.3v6.4l3.3,0 c1.3,0,2.2-0.1,2.8-0.4c0.6-0.2,1.1-0.6,1.4-1.2c0.3-0.5,0.5-1.1,0.5-1.8c0-0.6-0.2-1.2-0.5-1.7s-0.8-0.9-1.4-1.1 c-0.6-0.2-1.5-0.3-2.8-0.3H41.3z"
+ id="path65" /><path
+ class="st1"
+ d="M63.1,150.5l8.8,18.9h-2l-3-6.2h-8.2l-2.9,6.2h-2.1l8.9-18.9H63.1z M62.8,154.5l-3.2,6.9H66L62.8,154.5z"
+ id="path67" /><path
+ class="st1"
+ d="M74.8,169.4v-18.9h3.9c2.8,0,4.9,0.2,6.2,0.7c1.8,0.6,3.3,1.8,4.3,3.3c1,1.6,1.6,3.5,1.6,5.7 c0,1.9-0.4,3.6-1.2,5c-0.8,1.4-1.9,2.5-3.2,3.2c-1.3,0.7-3.1,1-5.5,1H74.8z M76.6,167.6h2.2c2.6,0,4.4-0.2,5.4-0.5 c1.4-0.5,2.5-1.3,3.4-2.5c0.8-1.2,1.2-2.7,1.2-4.4c0-1.8-0.4-3.4-1.3-4.7c-0.9-1.3-2.1-2.2-3.7-2.7c-1.2-0.4-3.1-0.5-5.9-0.5 h-1.3V167.6z"
+ id="path69" /><path
+ class="st1"
+ d="M94.5,150.5h10.9v1.9h-9v5.9h8.9v1.9h-8.9v7.4h8.9v1.9H94.5V150.5z"
+ id="path71" /></g><g
+ id="g73"><polygon
+ class="st1"
+ points="120.9,141.8 120.9,134.4 117.2,134.4 117.2,145.4 128.2,145.4 128.2,141.8 "
+ id="polygon75" /><polygon
+ class="st1"
+ points="135.6,127 117.2,127 117.2,132.6 120.9,132.6 120.9,130.7 131.9,130.7 131.9,141.8 130.1,141.8 130.1,145.4 135.6,145.4 "
+ id="polygon77" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/version/version.qrc b/app/version/version.qrc
new file mode 100644
index 0000000..0453cc0
--- /dev/null
+++ b/app/version/version.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/version">
+ <file>Version.qml</file>
+ <file>images/icon.svg</file>
+ <file>images/agl_slide_0.png</file>
+ </qresource>
+</RCC>
diff --git a/app/wifi/Wifi.qml b/app/wifi/Wifi.qml
new file mode 100644
index 0000000..85e8b60
--- /dev/null
+++ b/app/wifi/Wifi.qml
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2018 Konsulko Group
+ *
+ * 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.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+import ".."
+
+SettingPage {
+ id: root
+ icon: '/wifi/images/HMI_Settings_WifiIcon.svg'
+ title: 'Wifi'
+ checkable: true
+ checked: network.wifiEnabled
+ readonly property bool isWifi: true
+
+ onCheckedChanged: {
+ network.power(checked)
+ }
+
+ Component {
+ id: wifiDevice
+ MouseArea {
+ height: 120
+ width: ListView.view.width
+ Image {
+ anchors.left: parent.left
+ id: icon
+ source: {
+ var svg
+ if (strength < 30)
+ svg = "1Bar"
+ else if (strength < 50)
+ svg = "2Bars"
+ else if (strength < 70)
+ svg = "3Bars"
+ else
+ svg = "Full"
+ if (security === "Open") {
+ return 'images/HMI_Settings_Wifi_%1.svg'.arg(svg)
+ } else {
+ return 'images/HMI_Settings_Wifi_Locked_%1.svg'.arg(svg)
+ }
+ }
+ }
+ Column {
+ anchors.left: icon.right
+ anchors.leftMargin: 5
+ Label {
+ id: networkNameText
+ text: ssid
+ color: '#66FF99'
+ font.pixelSize: 48
+ font.bold: sstate === "ready"
+ || sstate === "online"
+ }
+ Label {
+ visible: sstate === "ready"
+ || sstate === "online"
+ text: "connected, " + address
+ font.pixelSize: 18
+ color: "white"
+ }
+ }
+
+ onClicked: {
+ if ((sstate === "ready") || sstate === "online") {
+ console.log("Disconnecting from ", ssid, " (", service, ")")
+ networkNameText.font.italic = 1
+ network.disconnect(service)
+ } else {
+ console.log("Connecting to ", ssid, " (", service, ")")
+ networkNameText.font.italic = 1
+ network.connect(service)
+ }
+ }
+
+ Image {
+ source: '../images/HMI_Settings_DividingLine.svg'
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: -15
+ visible: model.index > 0
+ }
+ }
+ }
+
+ ListView {
+ id: view
+ anchors.fill: parent
+ anchors.margins: 100
+ model: WifiNetworkModel
+ delegate: wifiDevice
+ clip: true
+ }
+
+ MouseArea {
+ id: dialog
+ anchors.fill: parent
+ visible: false
+ z: 1
+ onVisibleChanged: {
+ if (visible) {
+ password.forceActiveFocus()
+ } else {
+ password.text = ''
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+ Item {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.preferredHeight: 1
+ Rectangle {
+ anchors.fill: parent
+ color: 'black'
+ opacity: 0.5
+ }
+ RowLayout {
+ anchors.centerIn: parent
+ TextField {
+ id: password
+ property int reqid: 0
+ placeholderText: 'Password'
+ }
+ Button {
+ text: 'Connect'
+ highlighted: true
+ onClicked: {
+ network.input(password.reqid, password.text)
+ dialog.visible = false
+ }
+ }
+ Button {
+ text: 'Cancel'
+ onClicked: dialog.visible = false
+ }
+ }
+ }
+
+ Keyboard {
+ id: keyboard
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.preferredHeight: 1
+ target: activeFocusControl
+ }
+ }
+ }
+
+ Connections {
+ target: network
+ onInputRequest: {
+ password.reqid = id
+ dialog.visible = true
+ }
+ }
+}
diff --git a/app/wifi/images/HMI_Settings_WifiIcon.svg b/app/wifi/images/HMI_Settings_WifiIcon.svg
new file mode 100644
index 0000000..4314729
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_WifiIcon.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 100 100"
+ style="enable-background:new 0 0 100 100;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_WifiIcon.svg"><metadata
+ id="metadata20"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs18" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview16"
+ showgrid="false"
+ inkscape:zoom="2.36"
+ inkscape:cx="-191.52542"
+ inkscape:cy="50"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="Wifi_Icon"><path
+ class="st0"
+ d="M49.6,32.8c10.8-0.2,21.2,4.3,31,13.4l1.6-1.6C72,35,61,30.2,49.6,30.5c-15.2,0.4-26.9,9.4-31.8,13.9 l1.6,1.6C24.1,41.7,35.4,33.1,49.6,32.8z"
+ id="path10" /><path
+ class="st0"
+ d="M29,55.8l1.6,1.6c2.9-2.7,10.1-8.2,19.1-8.4c6.9-0.2,13.4,2.7,19.6,8.5L71,56c-6.7-6.3-13.9-9.4-21.3-9.2 C39.7,47,32.1,52.9,29,55.8z"
+ id="path12" /><path
+ class="st0"
+ d="M49.8,63.5c-4.7,0.1-8.2,3.3-9,4.2l1.6,1.6c0.7-0.7,3.6-3.4,7.5-3.5c2.6,0,5.3,1.2,7.7,3.7l1.6-1.6 C56.3,64.9,53.2,63.5,49.8,63.5z"
+ id="path14" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_1Bar.svg b/app/wifi/images/HMI_Settings_Wifi_1Bar.svg
new file mode 100644
index 0000000..e692c69
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_1Bar.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 80 80"
+ style="enable-background:new 0 0 80 80;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_1Bar.svg"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs27" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="2.95"
+ inkscape:cx="-129.15254"
+ inkscape:cy="40"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="64.2"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st1"
+ d="M7.9,39.8c7.7-8.3,18.9-13.6,31.4-13.6c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8c-9.1-11.2-23.1-18.3-38.9-18.3 C25,19.1,12,25.1,3,34.6L7.9,39.8z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st1"
+ d="M17.1,49.3c5.3-6.2,13.3-10.2,22.2-10.2c9.8,0,18.4,4.8,23.7,12l5.3-4.8c-6.6-8.6-17.1-14.2-29-14.2 c-10.9,0-20.6,4.7-27.2,12L17.1,49.3z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st1"
+ d="M27.1,59.8c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9c-3.8-5.9-10.6-9.8-18.3-9.8 c-7.1,0-13.3,3.3-17.3,8.4L27.1,59.8z"
+ id="path23" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_2Bars.svg b/app/wifi/images/HMI_Settings_Wifi_2Bars.svg
new file mode 100644
index 0000000..f7cf642
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_2Bars.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 80 80"
+ style="enable-background:new 0 0 80 80;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_2Bars.svg"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs27" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="2.95"
+ inkscape:cx="-131.86441"
+ inkscape:cy="40"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="64.2"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st1"
+ d="M7.9,39.8c7.7-8.3,18.9-13.6,31.4-13.6c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8c-9.1-11.2-23.1-18.3-38.9-18.3 C25,19.1,12,25.1,3,34.6L7.9,39.8z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st1"
+ d="M17.1,49.3c5.3-6.2,13.3-10.2,22.2-10.2c9.8,0,18.4,4.8,23.7,12l5.3-4.8c-6.6-8.6-17.1-14.2-29-14.2 c-10.9,0-20.6,4.7-27.2,12L17.1,49.3z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st0"
+ d="M27.1,59.8c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9c-3.8-5.9-10.6-9.8-18.3-9.8 c-7.1,0-13.3,3.3-17.3,8.4L27.1,59.8z"
+ id="path23" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_3Bars.svg b/app/wifi/images/HMI_Settings_Wifi_3Bars.svg
new file mode 100644
index 0000000..8a26f3f
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_3Bars.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 80 80"
+ style="enable-background:new 0 0 80 80;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_3Bars.svg"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs27" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="2.95"
+ inkscape:cx="-135.76271"
+ inkscape:cy="40"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="64.2"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st1"
+ d="M7.9,39.8c7.7-8.3,18.9-13.6,31.4-13.6c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8c-9.1-11.2-23.1-18.3-38.9-18.3 C25,19.1,12,25.1,3,34.6L7.9,39.8z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st0"
+ d="M17.1,49.3c5.3-6.2,13.3-10.2,22.2-10.2c9.8,0,18.4,4.8,23.7,12l5.3-4.8c-6.6-8.6-17.1-14.2-29-14.2 c-10.9,0-20.6,4.7-27.2,12L17.1,49.3z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st0"
+ d="M27.1,59.8c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9c-3.8-5.9-10.6-9.8-18.3-9.8 c-7.1,0-13.3,3.3-17.3,8.4L27.1,59.8z"
+ id="path23" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Full.svg b/app/wifi/images/HMI_Settings_Wifi_Full.svg
new file mode 100644
index 0000000..9ad1869
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Full.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 80 80"
+ style="enable-background:new 0 0 80 80;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Full.svg"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs27" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="2.95"
+ inkscape:cx="-164.40678"
+ inkscape:cy="40"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="64.2"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st0"
+ d="M7.9,39.8c7.7-8.3,18.9-13.6,31.4-13.6c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8c-9.1-11.2-23.1-18.3-38.9-18.3 C25,19.1,12,25.1,3,34.6L7.9,39.8z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st0"
+ d="M17.1,49.3c5.3-6.2,13.3-10.2,22.2-10.2c9.8,0,18.4,4.8,23.7,12l5.3-4.8c-6.6-8.6-17.1-14.2-29-14.2 c-10.9,0-20.6,4.7-27.2,12L17.1,49.3z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st0"
+ d="M27.1,59.8c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9c-3.8-5.9-10.6-9.8-18.3-9.8 c-7.1,0-13.3,3.3-17.3,8.4L27.1,59.8z"
+ id="path23" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Locked_1Bar.svg b/app/wifi/images/HMI_Settings_Wifi_Locked_1Bar.svg
new file mode 100644
index 0000000..5da957f
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Locked_1Bar.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 90 90"
+ style="enable-background:new 0 0 90 90;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Locked_1Bar.svg"><metadata
+ id="metadata35"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs33" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview31"
+ showgrid="false"
+ inkscape:zoom="2.6222222"
+ inkscape:cx="-164.74576"
+ inkscape:cy="45"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="69"
+ rx="5.2"
+ ry="5"
+ id="ellipse9" /><g
+ id="g11"><path
+ class="st1"
+ d="M7.9,44.6C15.7,36.3,26.9,31,39.3,31c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8C69.1,31.2,55.1,24,39.3,24 C25,24,12,29.9,3,39.4L7.9,44.6z"
+ id="path13" /></g><g
+ id="g15"><path
+ class="st1"
+ d="M17.1,54.2C22.4,48,30.4,44,39.3,44c9.8,0,18.4,4.8,23.7,12l5.3-4.8C61.8,42.6,51.2,37,39.3,37 c-10.9,0-20.6,4.7-27.2,12L17.1,54.2z"
+ id="path17" /></g><g
+ id="g19"><path
+ class="st1"
+ d="M27.1,64.7c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9C53.8,54.9,47,51,39.3,51 c-7.1,0-13.3,3.3-17.3,8.4L27.1,64.7z"
+ id="path21" /></g><g
+ id="g23"><path
+ class="st0"
+ d="M87.9,74H75.4c-0.7,0-1.2-0.6-1.2-1.2v-6.6h2V72h10.9v-9H75.4c0.1,0,0.1,0,0.2,0h-1.4v-0.7 c0-0.7,0.6-1.2,1.2-1.2h12.4c0.7,0,1.2,0.6,1.2,1.2v10.5C89.1,73.4,88.5,74,87.9,74z"
+ id="path25" /></g><g
+ id="g27"><path
+ class="st0"
+ d="M87.2,60h-2v-3.5c0-1.9-1.6-3.5-3.5-3.5s-3.5,1.6-3.5,3.5V60h-2v-3.5c0-3,2.5-5.5,5.5-5.5s5.5,2.5,5.5,5.5 V60z"
+ id="path29" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Locked_2Bars.svg b/app/wifi/images/HMI_Settings_Wifi_Locked_2Bars.svg
new file mode 100644
index 0000000..7f180aa
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Locked_2Bars.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 90 90"
+ style="enable-background:new 0 0 90 90;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Locked_2Bars.svg"><metadata
+ id="metadata35"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs33" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview31"
+ showgrid="false"
+ inkscape:zoom="2.6222222"
+ inkscape:cx="-135.38136"
+ inkscape:cy="45"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="69"
+ rx="5.2"
+ ry="5"
+ id="ellipse9" /><g
+ id="g11"><path
+ class="st1"
+ d="M7.9,44.6C15.7,36.3,26.9,31,39.3,31c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8C69.1,31.2,55.1,24,39.3,24 C25,24,12,29.9,3,39.4L7.9,44.6z"
+ id="path13" /></g><g
+ id="g15"><path
+ class="st1"
+ d="M17.1,54.2C22.4,48,30.4,44,39.3,44c9.8,0,18.4,4.8,23.7,12l5.3-4.8C61.8,42.6,51.2,37,39.3,37 c-10.9,0-20.6,4.7-27.2,12L17.1,54.2z"
+ id="path17" /></g><g
+ id="g19"><path
+ class="st0"
+ d="M27.1,64.7c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9C53.8,54.9,47,51,39.3,51 c-7.1,0-13.3,3.3-17.3,8.4L27.1,64.7z"
+ id="path21" /></g><g
+ id="g23"><path
+ class="st0"
+ d="M87.9,74H75.4c-0.7,0-1.2-0.6-1.2-1.2v-6.6h2V72h10.9v-9H75.4c0.1,0,0.1,0,0.2,0h-1.4v-0.7 c0-0.7,0.6-1.2,1.2-1.2h12.4c0.7,0,1.2,0.6,1.2,1.2v10.5C89.1,73.4,88.5,74,87.9,74z"
+ id="path25" /></g><g
+ id="g27"><path
+ class="st0"
+ d="M87.2,60h-2v-3.5c0-1.9-1.6-3.5-3.5-3.5s-3.5,1.6-3.5,3.5V60h-2v-3.5c0-3,2.5-5.5,5.5-5.5s5.5,2.5,5.5,5.5 V60z"
+ id="path29" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Locked_3Bars.svg b/app/wifi/images/HMI_Settings_Wifi_Locked_3Bars.svg
new file mode 100644
index 0000000..276c758
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Locked_3Bars.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 90 90"
+ style="enable-background:new 0 0 90 90;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Locked_3Bars.svg"><metadata
+ id="metadata35"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs33" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview31"
+ showgrid="false"
+ inkscape:zoom="2.6222222"
+ inkscape:cx="-125.65678"
+ inkscape:cy="45"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="69"
+ rx="5.2"
+ ry="5"
+ id="ellipse9" /><g
+ id="g11"><path
+ class="st1"
+ d="M7.9,44.6C15.7,36.3,26.9,31,39.3,31c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8C69.1,31.2,55.1,24,39.3,24 C25,24,12,29.9,3,39.4L7.9,44.6z"
+ id="path13" /></g><g
+ id="g15"><path
+ class="st0"
+ d="M17.1,54.2C22.4,48,30.4,44,39.3,44c9.8,0,18.4,4.8,23.7,12l5.3-4.8C61.8,42.6,51.2,37,39.3,37 c-10.9,0-20.6,4.7-27.2,12L17.1,54.2z"
+ id="path17" /></g><g
+ id="g19"><path
+ class="st0"
+ d="M27.1,64.7c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9C53.8,54.9,47,51,39.3,51 c-7.1,0-13.3,3.3-17.3,8.4L27.1,64.7z"
+ id="path21" /></g><g
+ id="g23"><path
+ class="st0"
+ d="M87.9,74H75.4c-0.7,0-1.2-0.6-1.2-1.2v-6.6h2V72h10.9v-9H75.4c0.1,0,0.1,0,0.2,0h-1.4v-0.7 c0-0.7,0.6-1.2,1.2-1.2h12.4c0.7,0,1.2,0.6,1.2,1.2v10.5C89.1,73.4,88.5,74,87.9,74z"
+ id="path25" /></g><g
+ id="g27"><path
+ class="st0"
+ d="M87.2,60h-2v-3.5c0-1.9-1.6-3.5-3.5-3.5s-3.5,1.6-3.5,3.5V60h-2v-3.5c0-3,2.5-5.5,5.5-5.5s5.5,2.5,5.5,5.5 V60z"
+ id="path29" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Locked_Full.svg b/app/wifi/images/HMI_Settings_Wifi_Locked_Full.svg
new file mode 100644
index 0000000..9058511
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Locked_Full.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 90 90"
+ style="enable-background:new 0 0 90 90;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Locked_Full.svg"><metadata
+ id="metadata35"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs33" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview31"
+ showgrid="false"
+ inkscape:zoom="2.6222222"
+ inkscape:cx="-130.80508"
+ inkscape:cy="45"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="69"
+ rx="5.2"
+ ry="5"
+ id="ellipse9" /><g
+ id="g11"><path
+ class="st0"
+ d="M7.9,44.6C15.7,36.3,26.9,31,39.3,31c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8C69.1,31.2,55.1,24,39.3,24 C25,24,12,29.9,3,39.4L7.9,44.6z"
+ id="path13" /></g><g
+ id="g15"><path
+ class="st0"
+ d="M17.1,54.2C22.4,48,30.4,44,39.3,44c9.8,0,18.4,4.8,23.7,12l5.3-4.8C61.8,42.6,51.2,37,39.3,37 c-10.9,0-20.6,4.7-27.2,12L17.1,54.2z"
+ id="path17" /></g><g
+ id="g19"><path
+ class="st0"
+ d="M27.1,64.7c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9C53.8,54.9,47,51,39.3,51 c-7.1,0-13.3,3.3-17.3,8.4L27.1,64.7z"
+ id="path21" /></g><g
+ id="g23"><path
+ class="st0"
+ d="M87.9,74H75.4c-0.7,0-1.2-0.6-1.2-1.2v-6.6h2V72h10.9v-9H75.4c0.1,0,0.1,0,0.2,0h-1.4v-0.7 c0-0.7,0.6-1.2,1.2-1.2h12.4c0.7,0,1.2,0.6,1.2,1.2v10.5C89.1,73.4,88.5,74,87.9,74z"
+ id="path25" /></g><g
+ id="g27"><path
+ class="st0"
+ d="M87.2,60h-2v-3.5c0-1.9-1.6-3.5-3.5-3.5s-3.5,1.6-3.5,3.5V60h-2v-3.5c0-3,2.5-5.5,5.5-5.5s5.5,2.5,5.5,5.5 V60z"
+ id="path29" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_Locked_NoBars.svg b/app/wifi/images/HMI_Settings_Wifi_Locked_NoBars.svg
new file mode 100644
index 0000000..6f389c6
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_Locked_NoBars.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 90 90"
+ style="enable-background:new 0 0 90 90;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_Locked_NoBars.svg"><metadata
+ id="metadata39"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs37" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview35"
+ showgrid="false"
+ inkscape:zoom="2.6222222"
+ inkscape:cx="-110.21186"
+ inkscape:cy="45"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="69"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st0"
+ d="M7.9,44.6C15.7,36.3,26.9,31,39.3,31c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8C69.1,31.2,55.1,24,39.3,24 C25,24,12,29.9,3,39.4L7.9,44.6z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st0"
+ d="M17.1,54.2C22.4,48,30.4,44,39.3,44c9.8,0,18.4,4.8,23.7,12l5.3-4.8C61.8,42.6,51.2,37,39.3,37 c-10.9,0-20.6,4.7-27.2,12L17.1,54.2z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st0"
+ d="M27.1,64.7c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9C53.8,54.9,47,51,39.3,51 c-7.1,0-13.3,3.3-17.3,8.4L27.1,64.7z"
+ id="path23" /></g></g><g
+ id="g25"><g
+ id="g27"><path
+ class="st0"
+ d="M87.9,74H75.4c-0.7,0-1.2-0.6-1.2-1.2v-6.6h2V72h10.9v-9H75.4c0.1,0,0.1,0,0.2,0h-1.4v-0.7 c0-0.7,0.6-1.2,1.2-1.2h12.4c0.7,0,1.2,0.6,1.2,1.2v10.5C89.1,73.4,88.5,74,87.9,74z"
+ id="path29" /></g><g
+ id="g31"><path
+ class="st0"
+ d="M87.2,60h-2v-3.5c0-1.9-1.6-3.5-3.5-3.5s-3.5,1.6-3.5,3.5V60h-2v-3.5c0-3,2.5-5.5,5.5-5.5s5.5,2.5,5.5,5.5 V60z"
+ id="path33" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/images/HMI_Settings_Wifi_NoBars.svg b/app/wifi/images/HMI_Settings_Wifi_NoBars.svg
new file mode 100644
index 0000000..e23fc1d
--- /dev/null
+++ b/app/wifi/images/HMI_Settings_Wifi_NoBars.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 80 80"
+ style="enable-background:new 0 0 80 80;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Settings_Wifi_NoBars.svg"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs27" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="2.95"
+ inkscape:cx="-152.20339"
+ inkscape:cy="40"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#545157;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><ellipse
+ class="st0"
+ cx="39.3"
+ cy="64.2"
+ rx="5.2"
+ ry="5"
+ id="ellipse11" /><g
+ id="g13"><path
+ class="st0"
+ d="M7.9,39.8c7.7-8.3,18.9-13.6,31.4-13.6c13.7,0,25.8,6.3,33.5,16.1l5.3-4.8c-9.1-11.2-23.1-18.3-38.9-18.3 C25,19.1,12,25.1,3,34.6L7.9,39.8z"
+ id="path15" /></g><g
+ id="g17"><path
+ class="st0"
+ d="M17.1,49.3c5.3-6.2,13.3-10.2,22.2-10.2c9.8,0,18.4,4.8,23.7,12l5.3-4.8c-6.6-8.6-17.1-14.2-29-14.2 c-10.9,0-20.6,4.7-27.2,12L17.1,49.3z"
+ id="path19" /></g><g
+ id="g21"><path
+ class="st0"
+ d="M27.1,59.8c2.6-4,7.1-6.6,12.2-6.6c5.6,0,10.5,3.1,12.9,7.7l5.4-4.9c-3.8-5.9-10.6-9.8-18.3-9.8 c-7.1,0-13.3,3.3-17.3,8.4L27.1,59.8z"
+ id="path23" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/wifi/wifi.qrc b/app/wifi/wifi.qrc
new file mode 100644
index 0000000..063088a
--- /dev/null
+++ b/app/wifi/wifi.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/wifi">
+ <file>Wifi.qml</file>
+ <file>images/HMI_Settings_Wifi_1Bar.svg</file>
+ <file>images/HMI_Settings_Wifi_2Bars.svg</file>
+ <file>images/HMI_Settings_Wifi_3Bars.svg</file>
+ <file>images/HMI_Settings_Wifi_Full.svg</file>
+ <file>images/HMI_Settings_Wifi_Locked_1Bar.svg</file>
+ <file>images/HMI_Settings_Wifi_Locked_2Bars.svg</file>
+ <file>images/HMI_Settings_Wifi_Locked_3Bars.svg</file>
+ <file>images/HMI_Settings_Wifi_Locked_Full.svg</file>
+ <file>images/HMI_Settings_Wifi_Locked_NoBars.svg</file>
+ <file>images/HMI_Settings_Wifi_NoBars.svg</file>
+ <file>images/HMI_Settings_WifiIcon.svg</file>
+ </qresource>
+</RCC>
diff --git a/package/config.xml b/package/config.xml
new file mode 100644
index 0000000..4ca6eaa
--- /dev/null
+++ b/package/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="settings" version="0.1">
+ <name>Settings</name>
+ <icon src="icon.svg"/>
+ <content src="bin/settings" type="application/vnd.agl.native"/>
+ <description>This is the settings application for date &amp; time, wifi and bluetooth</description>
+ <author>Tasuku Suzuki &lt;tasuku.suzuki@qt.io&gt;</author>
+ <license>APL 2.0</license>
+ <feature name="urn:AGL:widget:required-api">
+ <param name="windowmanager" value="ws" />
+ <param name="homescreen" value="ws" />
+ <param name="network-manager" value="ws" />
+ <param name="Bluetooth-Manager" value="ws" />
+ </feature>
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission::public:no-htdocs" value="required" />
+ </feature>
+</widget>
+
+
diff --git a/package/icon.svg b/package/icon.svg
new file mode 100644
index 0000000..6628784
--- /dev/null
+++ b/package/icon.svg
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 320 320"
+ style="enable-background:new 0 0 320 320;"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="icon.svg"><metadata
+ id="metadata1292"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs1290" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview1288"
+ showgrid="false"
+ inkscape:zoom="0.7375"
+ inkscape:cx="-697.62712"
+ inkscape:cy="160"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" /><style
+ type="text/css"
+ id="style4">
+ .st0{display:none;}
+ .st1{display:inline;}
+ .st2{opacity:0.4;fill:url(#SVGID_1_);}
+ .st3{fill:url(#SVGID_2_);}
+ .st4{fill:#FFFFFF;}
+ .st5{font-family:'Roboto-Regular';}
+ .st6{font-size:25px;}
+ .st7{letter-spacing:6;}
+ .st8{fill:url(#SVGID_3_);}
+ .st9{fill:url(#SVGID_4_);}
+ .st10{fill:url(#SVGID_5_);}
+ .st11{fill:url(#SVGID_6_);}
+ .st12{fill:url(#SVGID_7_);}
+ .st13{fill:url(#SVGID_8_);}
+ .st14{fill:url(#SVGID_9_);}
+ .st15{fill:url(#SVGID_10_);}
+ .st16{fill:url(#SVGID_11_);}
+ .st17{fill:url(#SVGID_12_);}
+ .st18{fill:url(#SVGID_13_);}
+ .st19{fill:url(#SVGID_14_);}
+ .st20{fill:url(#SVGID_15_);}
+ .st21{fill:url(#SVGID_16_);}
+ .st22{fill:url(#SVGID_17_);}
+ .st23{fill:url(#SVGID_18_);}
+ .st24{opacity:0.29;}
+ .st25{fill:url(#SVGID_19_);}
+ .st26{fill:url(#SVGID_20_);}
+ .st27{fill:url(#SVGID_21_);}
+ .st28{fill:url(#SVGID_22_);}
+ .st29{fill:url(#SVGID_23_);}
+ .st30{fill:url(#SVGID_24_);}
+ .st31{fill:url(#SVGID_25_);}
+ .st32{fill:url(#SVGID_26_);}
+ .st33{fill:url(#SVGID_27_);}
+ .st34{fill:url(#SVGID_28_);}
+ .st35{fill:url(#SVGID_29_);}
+ .st36{fill:url(#SVGID_30_);}
+ .st37{fill:url(#SVGID_31_);}
+ .st38{fill:url(#SVGID_32_);}
+ .st39{fill:url(#SVGID_33_);}
+ .st40{fill:url(#SVGID_34_);}
+ .st41{fill:url(#SVGID_35_);}
+ .st42{fill:url(#SVGID_36_);}
+ .st43{opacity:0.4;fill:url(#SVGID_37_);}
+ .st44{fill:url(#SVGID_38_);}
+ .st45{fill:url(#SVGID_39_);}
+ .st46{fill:url(#SVGID_40_);}
+ .st47{fill:url(#SVGID_41_);}
+ .st48{fill:url(#SVGID_42_);}
+ .st49{fill:url(#SVGID_43_);}
+ .st50{fill:url(#SVGID_44_);}
+ .st51{display:inline;opacity:0.29;}
+ .st52{display:inline;fill:url(#SVGID_45_);}
+ .st53{display:inline;fill:url(#SVGID_46_);}
+ .st54{display:inline;fill:#FFFFFF;}
+ .st55{display:inline;fill:url(#SVGID_47_);}
+ .st56{display:inline;fill:url(#SVGID_48_);}
+ .st57{display:inline;fill:url(#SVGID_49_);}
+ .st58{display:inline;fill:url(#SVGID_50_);}
+ .st59{display:inline;fill:url(#SVGID_51_);}
+ .st60{display:inline;fill:url(#SVGID_52_);}
+ .st61{opacity:0.4;fill:url(#SVGID_53_);}
+ .st62{fill:url(#SVGID_54_);}
+ .st63{fill:url(#SVGID_55_);}
+ .st64{fill:url(#SVGID_56_);}
+ .st65{fill:url(#SVGID_57_);}
+ .st66{fill:url(#SVGID_58_);}
+ .st67{opacity:0.4;fill:url(#SVGID_59_);}
+ .st68{fill:url(#SVGID_60_);}
+ .st69{fill:url(#SVGID_61_);}
+ .st70{fill:url(#SVGID_62_);}
+ .st71{fill:url(#SVGID_63_);}
+ .st72{fill:url(#SVGID_64_);}
+ .st73{fill:url(#SVGID_65_);}
+ .st74{fill:url(#SVGID_66_);}
+ .st75{fill:url(#SVGID_67_);}
+ .st76{fill:url(#SVGID_68_);}
+ .st77{fill:url(#SVGID_69_);}
+ .st78{fill:url(#SVGID_70_);}
+ .st79{fill:url(#SVGID_71_);}
+ .st80{fill:url(#SVGID_72_);}
+ .st81{fill:url(#SVGID_73_);}
+ .st82{fill:url(#SVGID_74_);}
+ .st83{fill:url(#SVGID_75_);}
+ .st84{fill:url(#SVGID_76_);}
+ .st85{fill:url(#SVGID_77_);}
+ .st86{fill:url(#SVGID_78_);}
+ .st87{fill:url(#SVGID_79_);}
+ .st88{fill:url(#SVGID_80_);}
+ .st89{fill:url(#SVGID_81_);}
+ .st90{fill:url(#SVGID_82_);}
+ .st91{fill:url(#SVGID_83_);}
+ .st92{fill:url(#SVGID_84_);}
+ .st93{fill:url(#SVGID_85_);}
+ .st94{fill:url(#SVGID_86_);}
+ .st95{opacity:0.4;fill:url(#SVGID_87_);}
+ .st96{fill:url(#SVGID_88_);}
+ .st97{fill:url(#SVGID_89_);}
+ .st98{fill:url(#SVGID_90_);}
+ .st99{display:inline;fill:url(#SVGID_91_);}
+ .st100{display:inline;fill:url(#SVGID_92_);}
+ .st101{fill:url(#SVGID_93_);}
+ .st102{fill:url(#SVGID_94_);}
+ .st103{opacity:0.4;fill:url(#SVGID_95_);}
+ .st104{fill:url(#SVGID_96_);}
+ .st105{fill:url(#SVGID_97_);}
+ .st106{fill:url(#SVGID_98_);}
+ .st107{fill:url(#SVGID_99_);}
+ .st108{fill:url(#SVGID_100_);}
+ .st109{fill:url(#SVGID_101_);}
+ .st110{display:inline;fill:url(#SVGID_102_);}
+ .st111{display:inline;fill:url(#SVGID_103_);}
+ .st112{fill:url(#SVGID_104_);}
+ .st113{fill:url(#SVGID_105_);}
+ .st114{fill:url(#SVGID_106_);}
+ .st115{fill:url(#SVGID_107_);}
+ .st116{fill:url(#SVGID_108_);}
+ .st117{opacity:0.4;fill:url(#SVGID_109_);}
+ .st118{fill:url(#SVGID_110_);}
+ .st119{fill:url(#SVGID_111_);}
+ .st120{fill:url(#SVGID_112_);}
+ .st121{fill:url(#SVGID_113_);}
+ .st122{fill:url(#SVGID_114_);}
+ .st123{opacity:0.4;fill:url(#SVGID_115_);}
+ .st124{fill:url(#SVGID_116_);}
+ .st125{fill:url(#SVGID_117_);}
+ .st126{fill:url(#SVGID_118_);}
+ .st127{fill:url(#SVGID_119_);}
+ .st128{fill:url(#SVGID_120_);}
+ .st129{fill:url(#SVGID_121_);}
+ .st130{fill:url(#SVGID_122_);}
+</style><switch
+ id="switch6"><g
+ i:extraneous="self"
+ id="g8"><g
+ id="Settings_Active"><circle
+ class="st24"
+ cx="159.7"
+ cy="133.4"
+ r="101.9"
+ id="circle1230" /><linearGradient
+ id="SVGID_119_"
+ gradientUnits="userSpaceOnUse"
+ x1="115.9317"
+ y1="254.1836"
+ x2="256.3852"
+ y2="-133.5267"><stop
+ offset="0"
+ style="stop-color:#8BC53F"
+ id="stop1233" /><stop
+ offset="2.015080e-02"
+ style="stop-color:#7CCB56;stop-opacity:0.9678"
+ id="stop1235" /><stop
+ offset="6.089833e-02"
+ style="stop-color:#62D67D;stop-opacity:0.9028"
+ id="stop1237" /><stop
+ offset="0.1057"
+ style="stop-color:#4BDFA0;stop-opacity:0.8312"
+ id="stop1239" /><stop
+ offset="0.1543"
+ style="stop-color:#38E7BE;stop-opacity:0.7537"
+ id="stop1241" /><stop
+ offset="0.2077"
+ style="stop-color:#28EED6;stop-opacity:0.6684"
+ id="stop1243" /><stop
+ offset="0.2681"
+ style="stop-color:#1CF3E8;stop-opacity:0.572"
+ id="stop1245" /><stop
+ offset="0.3394"
+ style="stop-color:#13F6F5;stop-opacity:0.4581"
+ id="stop1247" /><stop
+ offset="0.4323"
+ style="stop-color:#0EF8FD;stop-opacity:0.3098"
+ id="stop1249" /><stop
+ offset="0.6264"
+ style="stop-color:#0DF9FF;stop-opacity:0"
+ id="stop1251" /></linearGradient><circle
+ class="st127"
+ cx="159.7"
+ cy="133.4"
+ r="101.9"
+ id="circle1253" /><linearGradient
+ id="SVGID_120_"
+ gradientUnits="userSpaceOnUse"
+ x1="4.0481"
+ y1="287.9492"
+ x2="320.4859"
+ y2="-15.4029"
+ gradientTransform="matrix(1 5.464556e-03 -5.464556e-03 1 -2.0192 -3.0212)"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1256" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1258" /></linearGradient><path
+ class="st128"
+ d="M160,238.8c-0.2,0-0.4,0-0.6,0c-58-0.3-104.9-47.7-104.6-105.7C55.2,75.3,102.3,28.5,160,28.5 c0.2,0,0.4,0,0.6,0c58,0.3,104.9,47.7,104.6,105.7l0,0C264.8,192,217.7,238.8,160,238.8z M160,32.2 c-55.7,0-101.2,45.2-101.5,100.9c-0.3,55.9,45,101.7,100.9,102c0.2,0,0.4,0,0.6,0c55.7,0,101.2-45.2,101.5-100.9 c0.3-55.9-45-101.7-100.9-102C160.4,32.2,160.2,32.2,160,32.2z"
+ id="path1260" /><g
+ id="g1262"><text
+ transform="matrix(1 0 0 1 75.4379 284.7129)"
+ class="st4 st5 st6 st7"
+ id="text1264">SETTINGS</text>
+<g
+ id="g1266"><g
+ id="g1268"><g
+ id="g1270"><linearGradient
+ id="SVGID_121_"
+ gradientUnits="userSpaceOnUse"
+ x1="79.1804"
+ y1="226.0817"
+ x2="282.752"
+ y2="-4.8609"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1273" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1275" /></linearGradient><path
+ class="st129"
+ d="M159.9,163.9c-16.3,0-29.5-13.2-29.5-29.4s13.2-29.4,29.5-29.4v3.9c-14.1,0-25.5,11.4-25.5,25.5 c0,14,11.5,25.5,25.5,25.5c14.1,0,25.6-11.4,25.6-25.5h3.9C189.4,150.7,176.2,163.9,159.9,163.9z"
+ id="path1277" /></g><g
+ id="g1279"><linearGradient
+ id="SVGID_122_"
+ gradientUnits="userSpaceOnUse"
+ x1="79.2457"
+ y1="226.1393"
+ x2="282.8174"
+ y2="-4.8033"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1282" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1284" /></linearGradient><path
+ class="st130"
+ d="M171.7,197.4h-23.4c-2.2,0-4-1.8-4-3.9V181c-2-0.7-4-1.5-6-2.5l-8.8,8.8c-1.5,1.5-4,1.5-5.6-0.1 l-16.6-16.6c-1.6-1.6-1.6-4.1-0.1-5.6l8.7-8.7c-1-2-1.8-4-2.5-6.1h-12.3c-2.2,0-3.9-1.8-3.9-4v-23.4c0-2.2,1.8-4,3.9-4h12.3 c0.9-2.6,1.9-5.1,3.2-7.4l3.5,1.8c-1.4,2.6-2.5,5.3-3.4,8.1l-0.4,1.4h-15.2l0,23.5l15.2,0.1l0.4,1.4c0.9,2.8,2,5.5,3.4,8 l0.7,1.3L110,167.8l16.6,16.6l10.9-10.8l1.3,0.7c2.6,1.4,5.2,2.5,8,3.3l1.4,0.4v15.4l23.5,0l0.1-15.4l1.4-0.4 c2.7-0.8,5.4-1.9,7.9-3.3l1.3-0.7l10.9,10.9l16.6-16.6l-10.8-11l0.7-1.3c1.4-2.6,2.5-5.2,3.3-7.9l0.4-1.4h15.4l0-23.5 l-15.3-0.1l-0.4-1.4c-0.8-2.8-1.9-5.5-3.3-8l-0.7-1.3l10.8-10.8l-16.6-16.6l-10.8,10.7l-1.3-0.7c-2.6-1.4-5.3-2.5-8.1-3.4 l-1.4-0.4V75.6l-23.5,0l-0.1,15.1l-1.4,0.4c-2.8,0.9-5.6,2-8.1,3.4l-1.3,0.7l-10.7-10.7L107.2,104c-1.5-1.5-1.5-4,0.1-5.6 l16.5-16.5c0.8-0.8,1.8-1.3,2.9-1.2c1,0,2,0.4,2.7,1.1l8.7,8.6c2-1,4-1.8,6.2-2.5V75.6c0-2.2,1.8-3.9,4-3.9h23.4 c2.2,0,4,1.8,4,3.9v12.3c2.1,0.7,4.1,1.6,6.1,2.5l8.7-8.7c0.7-0.7,1.7-1.1,2.7-1.1h0c1.1,0,2.1,0.4,2.9,1.2l16.6,16.6 c0.8,0.8,1.2,1.8,1.2,2.9c0,1-0.4,2-1.1,2.7l-8.8,8.8c1,2,1.8,4,2.5,6h12.4c2.2,0,3.9,1.8,3.9,4v23.4c0,2.2-1.8,4-3.9,4 h-12.5c-0.7,2-1.5,4-2.5,6l8.9,8.9c1.5,1.5,1.5,4-0.1,5.6l-16.6,16.6c-0.8,0.8-1.8,1.2-2.9,1.2h0c-1,0-2-0.4-2.7-1.1 l-8.9-8.9c-1.9,1-3.9,1.8-5.9,2.5v12.5C175.7,195.6,173.9,197.4,171.7,197.4z"
+ id="path1286" /></g></g></g></g></g></g></switch></svg> \ No newline at end of file
diff --git a/package/package.pro b/package/package.pro
new file mode 100644
index 0000000..125a378
--- /dev/null
+++ b/package/package.pro
@@ -0,0 +1,21 @@
+
+DISTFILES = icon.svg config.xml
+
+!equals($$_PRO_FILE_PWD_, $$OUT_PWD) {
+ copy_icon.target = $$OUT_PWD/root/icon.svg
+ copy_icon.depends = $$_PRO_FILE_PWD_/icon.svg
+ copy_icon.commands = $(COPY_FILE) \"$$replace(copy_icon.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_icon.target, /, $$QMAKE_DIR_SEP)\"
+ QMAKE_EXTRA_TARGETS += copy_icon
+ PRE_TARGETDEPS += $$copy_icon.target
+
+ copy_config.target = $$OUT_PWD/root/config.xml
+ copy_config.depends = $$_PRO_FILE_PWD_/config.xml
+ copy_config.commands = $(COPY_FILE) \"$$replace(copy_config.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_config.target, /, $$QMAKE_DIR_SEP)\"
+ QMAKE_EXTRA_TARGETS += copy_config
+ PRE_TARGETDEPS += $$copy_config.target
+}
+
+wgt.target = package
+wgt.commands = wgtpkg-pack -f -o settings.wgt root
+
+QMAKE_EXTRA_TARGETS += wgt
diff --git a/settings.pro b/settings.pro
new file mode 100644
index 0000000..579a952
--- /dev/null
+++ b/settings.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = app package
+package.depends += app