summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/Settings.qml3
-rw-r--r--app/app.pro4
-rw-r--r--app/main.cpp2
-rw-r--r--app/voice/ConfigDialog.qml235
-rw-r--r--app/voice/Voice.qml150
-rw-r--r--app/voice/images/HMI_Settings_VoiceIcon.svg151
-rw-r--r--app/voice/voice.qrc7
-rw-r--r--package/config.xml1
8 files changed, 551 insertions, 2 deletions
diff --git a/app/Settings.qml b/app/Settings.qml
index 47d5eb2..2fc560c 100644
--- a/app/Settings.qml
+++ b/app/Settings.qml
@@ -23,6 +23,7 @@ import 'bluetooth'
import 'wifi'
import 'wired'
import 'version'
+import 'voice'
ApplicationWindow {
id: root
@@ -73,6 +74,8 @@ ApplicationWindow {
Wired {}
Version {}
+
+ Voice {}
}
}
}
diff --git a/app/app.pro b/app/app.pro
index 1d06003..c26e44b 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -13,7 +13,7 @@ RESOURCES += \
wifi/wifi.qrc \
wired/wired.qrc \
bluetooth/bluetooth.qrc \
- version/version.qrc
-
+ version/version.qrc \
+ voice/voice.qrc
include(app.pri)
diff --git a/app/main.cpp b/app/main.cpp
index c610cef..b46029c 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -28,6 +28,7 @@
#include <bluetooth.h>
#include <network.h>
#include <qlibwindowmanager.h>
+#include <voice.h>
int main(int argc, char *argv[])
{
@@ -115,6 +116,7 @@ int main(int argc, char *argv[])
}
engine.rootContext()->setContextProperty("bluetooth", new Bluetooth(bindingAddressWS, context));
+ engine.rootContext()->setContextProperty("voice", new Voice(bindingAddressWS, context));
engine.rootContext()->setContextProperty(QStringLiteral("screenInfo"), &screenInfo);
engine.load(QUrl(QStringLiteral("qrc:/Settings.qml")));
QObject *root = engine.rootObjects().first();
diff --git a/app/voice/ConfigDialog.qml b/app/voice/ConfigDialog.qml
new file mode 100644
index 0000000..b04a792
--- /dev/null
+++ b/app/voice/ConfigDialog.qml
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2019 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.11
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 1.3
+import AGL.Demo.Controls 1.0
+
+
+Dialog {
+ id: root
+ property alias xpos: root.x
+ property alias ypos: root.y
+ property alias maxpwidth: root.width
+ property alias maxpheight: root.height
+
+ property string thisAgentName: undefined
+ property string thisAgentId: undefined
+ property string thisAgentWuW: undefined
+ property string thisAgentAuthState: undefined
+ property string thisAgentConnState: undefined
+ property string thisAgentDialogState: undefined
+ property string thisAgentLoginUrl: undefined
+ property string thisAgentLoginCode: undefined
+ property bool tokenValid: false
+ property bool agentActive: false
+
+ signal requestNewToken(string thisAgentId)
+
+ visible: false
+ z: 1
+ focus: true
+ modal: false
+ footer: DialogButtonBox {
+ Button { text: "CLOSE"
+ DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
+ }
+ Button { text: "UPDATE"
+ DialogButtonBox.buttonRole: DialogButtonBox.ResetRole
+ }
+ background: Rectangle {
+ border.color : '#00ADDC'
+ color: '#848286'
+ }
+ }
+
+ background: Rectangle {
+ border.color : '#00ADDC'
+ color: 'transparent'
+ }
+
+ onReset: refreshToken()
+ function refreshToken() {
+ root.requestNewToken(thisAgentId);
+ }
+
+ Item {
+ id: container
+ anchors.centerIn: parent
+ anchors.fill: parent
+ ColumnLayout {
+ anchors.fill: parent
+ RowLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignLeft
+ spacing: 32
+ visible: true
+ Label {
+ id: voiceLabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Voice Agent:"
+ Layout.preferredWidth: 200
+ }
+ Label {
+ id: idLabel
+ font.pixelSize: 28
+ color: '#66FF99'
+ text: thisAgentId
+ }
+ }
+ RowLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignLeft
+ spacing: 32
+ visible: true
+ Label {
+ id: namelabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Assistant Name:"
+ Layout.preferredWidth: 200
+ }
+ Label {
+ id: aNamelabel
+ font.pixelSize: 28
+ color: '#66FF99'
+ text: thisAgentName
+ }
+ }
+ RowLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignLeft
+ spacing: 32
+ visible: true
+ Label {
+ id: wuwlabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Wake Up Word:"
+ Layout.preferredWidth: 200
+ }
+ Label {
+ id: thiswuwlabel
+ font.pixelSize: 28
+ color: '#66FF99'
+ text: thisAgentWuW
+ }
+ }
+ RowLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignHCenter
+ spacing: 16
+ visible: true
+ ColumnLayout {
+ Layout.fillWidth: true
+ Label {
+ id: authLabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Authorization status:"
+ }
+ Label {
+ id: connlabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Connection status:"
+ }
+ Label {
+ id: dialogLabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Dialog status:"
+ }
+ }
+ ColumnLayout {
+ Layout.fillWidth: true
+ Label {
+ id: authsLabel
+ font.pixelSize: 28
+ color: (thisAgentAuthState == "UNITIALIZED")? 'red' : '#66FF99'
+ text: thisAgentAuthState
+ }
+ Label {
+ id: connslabel
+ font.pixelSize: 28
+ color: (thisAgentConnState == "DISCONNECTED")? 'red' : '#0DF9FF'
+ text: thisAgentConnState
+ }
+ Label {
+ id: dialogsLabel
+ font.pixelSize: 28
+ color: (thisAgentDialogState == "MICROPHONEOFF")? 'red' : '#0DF9FF'
+ text: thisAgentDialogState
+ }
+ }
+ }
+ RowLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignHCenter
+ spacing: 16
+ visible: true
+ ColumnLayout {
+ Layout.fillWidth: true
+ Label {
+ id: loginurlLabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Login url:"
+ }
+ Label {
+ id: logincodeLabel
+ font.pixelSize: 28
+ color: '#080C0F'
+ text: "Login code:"
+ }
+ }
+ ColumnLayout {
+ Layout.fillWidth: true
+ Label {
+ id: urlLabel
+ font.pixelSize: 28
+ color: root.tokenValid? '#848286':'#0DF9FF'
+ text: thisAgentLoginUrl
+ }
+ Label {
+ id: codeLabel
+ font.pixelSize: 28
+ color: root.tokenValid? '#848286':'#0DF9FF'
+ text: thisAgentLoginCode
+ }
+ }
+ }
+ Label {
+ font.pixelSize: 18
+ visible: root.tokenValid
+ text: "You can use the supplied login data to enable "+thisAgentName+"."
+ }
+ Label {
+ font.pixelSize: 18
+ visible: !root.tokenValid
+ text: "The current login data is not valid. Press 'UPDATE' to refresh."
+ }
+ }
+ }
+}
diff --git a/app/voice/Voice.qml b/app/voice/Voice.qml
new file mode 100644
index 0000000..b316132
--- /dev/null
+++ b/app/voice/Voice.qml
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2019 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.11
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.4
+import AGL.Demo.Controls 1.0
+import ".."
+
+SettingPage {
+ id: root
+ icon: '/voice/images/HMI_Settings_VoiceIcon.svg'
+ title: 'Voice'
+ readonly property bool isVoice: true
+
+ Rectangle {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.top
+ anchors.margins: 80
+ width: 110
+ color: "#222"
+ border.color: "white"
+
+ Button {
+ id: buttonScan
+ anchors.centerIn: parent
+ anchors.margins: 10
+ text: enabled? "SCAN" : "PROCESSING"
+ visible: true
+ enabled: true
+
+ Timer {
+ id: scanAnimationTimer
+ interval: 3000
+ running: false
+ repeat: false
+ onTriggered: {
+ buttonScan.enabled = true
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: {
+ voice.scan()
+ buttonScan.enabled = false
+ scanAnimationTimer.start()
+ }
+ }
+ }
+ }
+
+ Component {
+ id: voiceAgent
+ MouseArea {
+ height: 120
+ width: ListView.view.width
+ Column {
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ id: agentId
+ Label {
+ id: agentIdText
+ text: id
+ color: '#66FF99'
+ font.pixelSize: 38
+ font.bold: active === "active"
+ }
+ }
+ Column {
+ anchors.left: agentId.right
+ anchors.leftMargin: 100
+ id: agentName
+ Label {
+ id: agentNameText
+ text: name
+ color: '#66FF99'
+ font.pixelSize: 38
+ font.bold: active === "active"
+ }
+ }
+ Column {
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ Button {
+ visible: active === "active"
+ font.pixelSize: 18
+ text: "DETAILS"
+ onClicked: {
+ agentdata.tokenValid = Qt.binding(function() { return (usrauth[2] === "expired")? false : true })
+ agentdata.agentActive = Qt.binding(function() { return (active === "active")? true: false })
+ agentdata.open()
+ }
+
+ ConfigDialog {
+ id: agentdata
+ parent: Overlay.overlay
+ maxpwidth: 744
+ maxpheight: 744
+ xpos: (parent.width - maxpwidth)/2
+ ypos: (parent.height - maxpheight)
+ thisAgentName: name
+ thisAgentId: id
+ thisAgentWuW: wuw
+ thisAgentAuthState: authstate
+ thisAgentConnState: connstate
+ thisAgentDialogState: dialogstate
+ thisAgentLoginUrl: usrauth[0]
+ thisAgentLoginCode: usrauth[1]
+
+ onRequestNewToken: {
+ voice.getCBLpair(id);
+ }
+ }
+ }
+ }
+
+ 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: VoiceAgentModel
+ delegate: voiceAgent
+ clip: true
+ }
+}
diff --git a/app/voice/images/HMI_Settings_VoiceIcon.svg b/app/voice/images/HMI_Settings_VoiceIcon.svg
new file mode 100644
index 0000000..edc87a7
--- /dev/null
+++ b/app/voice/images/HMI_Settings_VoiceIcon.svg
@@ -0,0 +1,151 @@
+<?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:ns0="&amp;#38;#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:xlink="http://www.w3.org/1999/xlink"
+ 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.92.4 (unknown)"
+ sodipodi:docname="HMI_Settings_VoiceIcon.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"><symbol
+ id="CommunicationLink"><title
+ id="title9930">Communication Link</title><desc
+ id="desc9932">Transcommunication link.</desc><path
+ d="m 65,25 0,60 20,-20 0,60"
+ style="fill:none;stroke-width:2"
+ id="path9934" /></symbol><symbol
+ id="Connector"><title
+ id="title9909">Connector</title><desc
+ id="desc9911">Exit to or entry from another part of chart.</desc><circle
+ cx="75"
+ cy="75"
+ r="20"
+ style="stroke-width:2"
+ id="circle9913" /></symbol><symbol
+ id="MagneticTape"><title
+ id="title9830">Magnetic Tape</title><desc
+ id="desc9832">Magnetic tape storage</desc><circle
+ cx="75"
+ cy="75"
+ r="40"
+ style="stroke-width:2"
+ id="circle9834" /><path
+ d="m 75,115 40,0"
+ style="stroke-width:2"
+ id="path9836" /></symbol></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1853"
+ inkscape:window-height="1145"
+ id="namedview16"
+ showgrid="false"
+ inkscape:zoom="2.36"
+ inkscape:cx="-109.74576"
+ inkscape:cy="50"
+ inkscape:window-x="67"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1"
+ inkscape:snap-text-baseline="true" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+</style><switch
+ id="switch5"
+ transform="matrix(0,0.56574372,-0.57641502,0,88.324883,33.229197)"><g
+ ns0:extraneous="self"
+ id="g7"><g
+ id="Wifi_Icon"><path
+ class="st0"
+ d="m 49.6,32.8 c 10.8,-0.2 21.2,4.3 31,13.4 l 1.6,-1.6 C 72,35 61,30.2 49.6,30.5 34.4,30.9 22.7,39.9 17.8,44.4 l 1.6,1.6 c 4.7,-4.3 16,-12.9 30.2,-13.2 z"
+ id="path10"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" /><path
+ class="st0"
+ d="m 29,55.8 1.6,1.6 c 2.9,-2.7 10.1,-8.2 19.1,-8.4 6.9,-0.2 13.4,2.7 19.6,8.5 L 71,56 C 64.3,49.7 57.1,46.6 49.7,46.8 39.7,47 32.1,52.9 29,55.8 Z"
+ id="path12"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" /><path
+ class="st0"
+ d="m 49.8,63.5 c -4.7,0.1 -8.2,3.3 -9,4.2 l 1.6,1.6 c 0.7,-0.7 3.6,-3.4 7.5,-3.5 2.6,0 5.3,1.2 7.7,3.7 l 1.6,-1.6 c -2.9,-3 -6,-4.4 -9.4,-4.4 z"
+ id="path14"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" /></g></g></switch><path
+ style="fill:none"
+ id="path5225"
+ d="M 8.1860187,53.118056 C 7.9703975,50.541587 7.493591,47.999332 7.1519746,45.438887 6.7407211,42.965153 6.4221499,40.482093 6.2491503,37.980559 6.1330427,36.418293 6.1789087,34.851503 6.0023065,33.294322 5.9002972,32.472077 5.761593,31.654855 5.7015255,30.828017 5.6554512,29.917996 5.6825124,29.006285 5.686799,28.095617 5.6780582,26.64811 5.6826641,25.207011 5.8134216,23.764908 6.0582015,22.171895 6.2731171,20.574196 6.5428765,18.98507 6.8237445,17.655635 7.0677339,16.315862 7.4768847,15.018431 7.7104162,14.322745 7.9530839,13.676731 8.6299512,13.287204 14.501513,9.9082155 12.695965,10.628918 15.90588,9.4646217 19.458992,8.3280731 23.085737,7.442252 26.6986,6.5200878 c 2.151703,-0.4063341 4.183211,-1.4804334 6.363189,-1.7589783 0.897932,-0.1147326 1.298629,-0.011232 2.174248,0.097794 1.852329,0.3792485 3.636295,1.1678732 5.323045,2.0166162 1.350742,0.5955636 2.653871,1.2830422 3.968071,1.9522725 0.956685,0.610079 1.804514,1.4004878 2.624816,2.1823948 0.948111,0.983066 1.862026,2.003167 2.757821,3.035383 0.656471,0.730292 1.320834,1.443049 1.839535,2.280118 0.384308,0.527542 0.710582,1.091459 1.111546,1.607287 0.395319,0.597314 0.682338,1.25926 1.073466,1.858897 0.55726,0.616019 0.89149,1.365877 1.306613,2.072596 0.384159,0.626591 0.453798,1.33486 0.501875,2.051177 0.03774,0.84548 0.03043,1.69216 0.02841,2.538246 0.0035,0.693275 0.0028,1.386567 0.003,2.079847 -0.0026,0.644818 1.78e-4,1.289588 -0.0027,1.934413 0.0056,0.667985 -4.82e-4,1.33601 -0.0029,2.004001 0.0084,0.686716 -0.0024,1.373464 0.0034,2.060181 0.0011,0.714685 -0.0029,1.429367 -0.0047,2.144049 -0.0064,0.704667 0.0061,1.40927 0.0079,2.113907 0.0011,0.518225 4.25e-4,1.036499 0.0053,1.554708 -0.0091,0.510046 0.01497,1.020328 -0.02392,1.529125 -0.132028,0.457616 -0.222628,0.940697 -0.416788,1.3767 -0.186692,0.476674 -0.490605,0.883161 -0.678536,1.358248 -0.227606,0.355822 -0.369182,0.756426 -0.571478,1.124607 -0.282205,0.281102 -0.301543,0.670174 -0.464467,1.009803 -0.201596,0.432244 -0.498488,0.800628 -0.694263,1.234855 -0.278643,0.446739 -0.39963,0.954733 -0.483873,1.46754 -0.06438,0.576969 -0.03737,1.152969 -0.160693,1.722178 -0.141854,0.569271 -0.229906,1.14733 -0.290469,1.730043 -0.003,0.499389 -0.08111,1.010845 -0.01658,1.508615 0.09019,0.308069 0.268203,0.637103 0.54129,0.820335 0.400749,0.03147 0.7053,0.282742 1.070318,0.410173 0.403219,0.27607 0.719527,0.64704 1.055264,0.996437 0.422707,0.484016 0.565862,1.058841 0.655246,1.677885 0.01101,0.524347 -0.101969,1.091209 -0.340202,1.561579 -0.202111,0.393532 -0.515304,0.731066 -0.841182,1.029401 -0.395096,0.295421 -0.787523,0.571065 -1.142998,0.916841 -0.431838,0.614192 -0.669862,1.337859 -1.038942,1.991607 -0.386963,0.543488 -0.772704,1.085875 -1.174589,1.618274 -1.742189,2.270016 -2.677288,1.525507 -6.319725,4.170622 -1.623902,1.179267 3.475087,-2.008651 5.21263,-3.012977 -0.444883,0.2688 -0.78167,0.66896 -1.190878,0.983434 -0.458444,0.337664 -0.917528,0.672387 -1.346474,1.047356 -0.370803,0.319398 -0.748567,0.637734 -1.168764,0.893248 -0.622384,0.46474 -1.2451,0.929314 -1.887603,1.366694 -2.460122,1.908887 -5.319394,3.139923 -8.100728,4.457021 -1.234317,0.583927 -2.476789,0.529322 -3.804172,0.461994 -2.241697,-0.12864 -4.486117,-0.193448 -6.731145,-0.219829 -1.497026,-0.213573 -3.024119,-0.596211 -4.327172,-1.387405 -0.506821,-0.403131 -0.259874,-0.212125 -0.739766,-0.574405 0,0 5.311447,-3.35265 5.311447,-3.35265 v 0 c 0.453798,0.351238 0.224702,0.179426 0.687231,0.515514 1.24674,0.694552 2.660102,1.058795 4.077561,1.175462 2.247975,0.0681 4.496127,0.130206 6.743562,0.215265 1.297656,0.0038 2.514332,-0.121136 3.685217,-0.728731 0.502697,-0.223194 0.993727,-0.457577 1.484789,-0.70503 0.160311,-0.08078 0.637377,-0.32987 0.482823,-0.238555 -4.552904,2.690002 -6.746047,3.788226 -4.608412,2.708666 0.585549,-0.496254 1.285165,-0.849412 1.851571,-1.372012 0.24153,-0.202261 0.541309,-0.312883 0.782748,-0.510763 0.07097,-0.05817 0.115421,-0.145093 0.188424,-0.200684 0.06895,-0.0525 0.154149,-0.07925 0.231224,-0.118876 0.423522,-0.395169 0.848636,-0.788579 1.336084,-1.105733 0.419551,-0.305758 0.819802,-0.601008 1.163636,-0.997755 1.860227,-1.089292 3.674198,-2.261732 5.58068,-3.267875 1.775379,-0.936954 -3.45557,2.044138 -5.186956,3.060088 -0.06567,0.03854 0.127526,-0.08333 0.189458,-0.127634 0.26031,-0.186212 0.416842,-0.429399 0.60166,-0.689217 0.478632,-0.459737 0.805831,-1.030486 1.195614,-1.564363 0.527789,-0.550988 0.740021,-1.308599 1.02582,-2.001201 0.265506,-0.456526 0.623858,-0.788678 1.061063,-1.059514 0.365638,-0.237233 0.619311,-0.51992 0.957153,-0.785841 0.06796,-0.123559 0.181055,-0.2191 0.245483,-0.344537 0.136546,-0.265844 0.09625,-0.619982 0.268556,-0.877609 -0.0449,-0.48982 -0.103326,-0.946301 -0.45561,-1.320856 -0.278755,-0.288004 -0.556559,-0.607998 -0.926339,-0.778054 -0.397984,-0.195228 -0.835114,-0.305428 -1.187378,-0.584352 -0.316127,-0.330058 -0.596792,-0.69874 -0.72607,-1.143399 -0.168871,-0.542833 -0.04765,-1.128846 -0.05907,-1.691547 0.01727,-0.612463 0.107498,-1.220462 0.253351,-1.815714 0.03889,-0.180906 0.118961,-0.352379 0.147141,-0.535259 0.05658,-0.367172 -0.03908,-0.760921 0.02751,-1.129698 0.04847,-0.573845 0.155717,-1.146876 0.377953,-1.680601 0.256463,-0.387432 0.355335,-0.865281 0.704749,-1.202725 0.05119,-0.108017 0.152262,-0.187747 0.201335,-0.296741 0.111513,-0.247671 -0.01464,-0.589279 0.22629,-0.787209 0.259266,-0.336741 0.384157,-0.715518 0.609416,-1.073091 0.162738,-0.240171 0.18145,-0.489177 0.320512,-0.739494 0.0076,-0.01371 0.267736,-0.367385 0.275356,-0.380356 0.03782,-0.06439 0.06227,-0.135748 0.09341,-0.203622 0.05844,-0.13073 0.161531,-0.239137 0.214693,-0.372102 0.11096,-0.27752 0.08096,-0.623975 0.260563,-0.882585 0.184147,-0.434331 0.03474,-0.948527 0.07745,-1.410912 0.0048,-0.519994 0.0042,-1.040052 0.0053,-1.560062 0.0019,-0.707331 0.01425,-1.414629 0.0079,-2.121991 -0.0018,-0.713077 -0.0059,-1.426154 -0.0047,-2.139233 0.0058,-0.687875 -0.005,-1.375779 0.0034,-2.063652 -0.0025,-0.667 -0.0086,-1.334033 -0.003,-2.001026 -0.0028,-0.644475 -3.7e-5,-1.288888 -0.0013,-1.933359 0.0021,-0.69647 0.0049,-1.392987 0.01385,-2.089408 0.0026,-0.833747 0.0099,-1.667821 -0.01621,-2.501289 -0.03062,-0.620598 -0.05072,-1.242255 -0.371661,-1.793743 C 49.395885,24.301652 49.056374,23.570949 48.509294,22.96287 48.128148,22.376549 47.82193,21.746096 47.445548,21.158255 47.032532,20.623819 46.706004,20.035072 46.31668,19.484049 45.818735,18.676319 45.175591,17.984776 44.551238,17.274059 43.681016,16.252175 42.806387,15.226917 41.846231,14.2887 41.03837,13.559092 40.22463,12.806819 39.276801,12.262187 38.007178,11.551488 36.716097,10.884634 35.390474,10.28299 33.736499,9.4990487 32.024306,8.7150302 30.202158,8.4442769 29.876492,8.4239624 29.551403,8.3773026 29.22516,8.3833332 c -2.444497,0.045187 -4.905242,1.3516906 -7.288638,1.7813558 -3.650421,0.926779 -7.314552,1.840354 -10.869417,3.094058 -2.8533014,1.154891 -1.012413,0.476369 3.378326,-2.229777 0.184856,-0.113932 -0.401718,0.167552 -0.591145,0.273711 -0.454642,0.254789 -0.32568,0.203362 -0.51565,0.647835 -0.06011,0.140644 -0.126832,0.278371 -0.190248,0.417556 -0.49638,1.249961 -0.702409,2.583135 -1.014281,3.886473 -0.271934,1.576571 -0.484833,3.15996 -0.758247,4.736717 -0.118432,1.421434 -0.164324,2.839173 -0.119482,4.266383 0.0046,0.891825 0.01515,1.783812 0.04206,2.675265 0.04086,0.824885 0.137067,1.644861 0.236542,2.464489 0.173419,1.579118 0.134322,3.161066 0.196151,4.747384 0.134623,2.499423 0.410051,4.985256 0.810564,7.456686 0.343603,2.543932 0.796189,5.071876 1.204816,7.605428 0,0 -5.5604903,2.911159 -5.5604903,2.911159 z"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none"
+ id="path5227"
+ d="m 24.485013,44.66292 c 1.359909,-0.82284 2.520233,-1.904259 3.62995,-3.031218 0.677715,-0.712758 0.35662,-0.369753 0.964652,-1.027735 0,0 5.759358,-2.410173 5.759358,-2.410173 v 0 c -0.630626,0.674203 -0.300589,0.322706 -0.990485,1.054136 -1.084555,1.12558 -2.17328,2.296542 -3.522213,3.107721 0,0 -5.841262,2.307269 -5.841262,2.307269 z"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke-width:1.38337505"
+ id="path5229"
+ d="m 13.458322,29.690015 c 2.561575,-1.722524 5.192379,-3.055439 7.799819,-4.506591 1.667405,-1.110112 3.080853,-1.969808 4.835155,-1.022021 0.470137,0.253999 1.673682,1.246314 2.132631,1.613436 1.545355,1.092565 2.760099,3.177951 4.087998,4.93834 0.996277,1.544921 1.69777,3.635137 2.463728,5.574231 0.649106,1.878032 1.424323,3.570049 2.163422,5.316728 0.476674,1.495824 0.857344,3.09934 1.271452,4.661461 0.422975,1.84617 0.847858,3.687992 1.16792,5.610185 0.201079,0.997694 0.108777,2.026328 -0.03392,3.023611 0,0 -5.695669,5.241074 -5.695669,5.241074 v 0 c 0.08649,-0.831594 0.345152,-1.64666 0.207613,-2.495528 -0.261799,-1.884664 -0.663213,-3.668152 -1.083394,-5.44151 -0.402366,-1.491811 -0.793688,-2.994917 -1.239441,-4.441788 -0.69417,-1.81302 -1.460379,-3.518374 -2.122323,-5.377391 -0.729428,-1.850463 -1.412693,-3.828511 -2.385734,-5.252083 -1.241499,-1.812147 -2.435068,-3.739635 -3.925517,-4.798984 -0.623543,-0.476916 -1.386003,-1.121649 -2.049441,-1.383898 -1.598517,-0.631876 -3.107366,0.457549 -4.615322,1.342787 -2.662367,1.469107 -5.339066,2.883111 -7.932442,4.762582 0,0 4.953462,-7.364641 4.953462,-7.364641 z"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke-width:2.21237707"
+ id="path5239"
+ sodipodi:type="arc"
+ sodipodi:cx="32.427959"
+ sodipodi:cy="41.441784"
+ sodipodi:rx="10.46186"
+ sodipodi:ry="6.0740414"
+ sodipodi:start="0"
+ sodipodi:end="4.3327517"
+ d="m 42.889819,41.441784 a 10.46186,6.0740414 0 0 1 -9.141486,6.025472 10.46186,6.0740414 0 0 1 -11.448949,-4.504543 10.46186,6.0740414 0 0 1 6.251582,-7.162493 l 3.876993,5.641564 z" /><path
+ style="display:inline;fill:none"
+ id="path5241"
+ sodipodi:type="arc"
+ sodipodi:cx="17.09322"
+ sodipodi:cy="28.508474"
+ sodipodi:rx="3.6016948"
+ sodipodi:ry="5.5084743"
+ sodipodi:start="0"
+ sodipodi:end="4.332745"
+ d="m 20.694915,28.508474 a 3.6016948,5.5084743 0 0 1 -3.147124,5.464426 3.6016948,5.5084743 0 0 1 -3.941523,-4.08509 3.6016948,5.5084743 0 0 1 2.1522,-6.495588 l 1.334752,5.116252 z" /><use
+ id="use12005"
+ style="fill:#ffffff;stroke:#ffffff;fill-opacity:1"
+ xlink:href="#CommunicationLink"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%"
+ transform="matrix(-0.52556122,0,0,0.57327377,73.752319,3.3411719)" /><use
+ id="use12047"
+ style="fill:none;stroke:#ffffff"
+ xlink:href="#Connector"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%"
+ transform="matrix(1.7438377,0,0,1.8645613,-79.21155,-91.630241)" /><use
+ id="use13420"
+ style="fill:#ffffff;stroke:#000000"
+ xlink:href="#MagneticTape"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%"
+ transform="matrix(0.05946552,0,0,0.06476213,27.854011,23.265534)" /></svg> \ No newline at end of file
diff --git a/app/voice/voice.qrc b/app/voice/voice.qrc
new file mode 100644
index 0000000..8b05e91
--- /dev/null
+++ b/app/voice/voice.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/voice">
+ <file>Voice.qml</file>
+ <file>ConfigDialog.qml</file>
+ <file>images/HMI_Settings_VoiceIcon.svg</file>
+ </qresource>
+</RCC>
diff --git a/package/config.xml b/package/config.xml
index f7f2c1b..2c251d0 100644
--- a/package/config.xml
+++ b/package/config.xml
@@ -11,6 +11,7 @@
<param name="homescreen" value="ws" />
<param name="network-manager" value="ws" />
<param name="Bluetooth-Manager" value="ws" />
+ <param name="vshl-core" value="ws" />
</feature>
<feature name="urn:AGL:widget:required-permission">
<param name="urn:AGL:permission::public:no-htdocs" value="required" />