voice: add voice agents settings page 83/23183/1 8.99.2 icefish/8.99.2 icefish_8.99.2
authorRaquel Medina <raquel.medina@konsulko.com>
Tue, 3 Dec 2019 22:36:35 +0000 (23:36 +0100)
committerRaquel Medina <raquel.medina@konsulko.com>
Wed, 4 Dec 2019 14:57:48 +0000 (15:57 +0100)
Bug-AGL: SPEC-2981
Signed-off-by: Raquel Medina <raquel.medina@konsulko.com>
Change-Id: I8eb6ae44db10039197da406446b5057ae9cb3b50

app/Settings.qml
app/app.pro
app/main.cpp
app/voice/ConfigDialog.qml [new file with mode: 0644]
app/voice/Voice.qml [new file with mode: 0644]
app/voice/images/HMI_Settings_VoiceIcon.svg [new file with mode: 0644]
app/voice/voice.qrc [new file with mode: 0644]
package/config.xml

index 47d5eb2..2fc560c 100644 (file)
@@ -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 {}
     }
 }
 }
index 1d06003..c26e44b 100644 (file)
@@ -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)
index c610cef..b46029c 100644 (file)
@@ -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 (file)
index 0000000..b04a792
--- /dev/null
@@ -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 (file)
index 0000000..b316132
--- /dev/null
@@ -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 (file)
index 0000000..edc87a7
--- /dev/null
@@ -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 (file)
index 0000000..8b05e91
--- /dev/null
@@ -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>
index f7f2c1b..2c251d0 100644 (file)
@@ -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" />