summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Porter <mporter@konsulko.com>2017-11-08 11:12:52 -0500
committerMatt Porter <mporter@konsulko.com>2017-11-09 09:31:45 -0500
commitf9cbfb636f6dce351f26e6b86dcb0080a32cd18d (patch)
treeeb54dc65836144a2317362447cfc7c756f3eaaeb
parent05861567c962cea3216a2c46227366639fa70525 (diff)
Convert phone app to use libqtappfw's Telephony support
Remove the QML/Javascript websocket and appfw message handling code. This is replaced with libqtappfw's Telephony class which handles all Telephony API binding communication in a separate thread. Bug-AGL: SPEC-1079 Change-Id: I06b352eaf4925fc144c59f8d8f689180376a1f35 Signed-off-by: Matt Porter <mporter@konsulko.com>
-rw-r--r--app/Dialer.qml41
-rw-r--r--app/api/Telephony.qml111
-rw-r--r--app/app.pro5
-rw-r--r--app/main.cpp5
-rw-r--r--app/phone.qrc1
5 files changed, 30 insertions, 133 deletions
diff --git a/app/Dialer.qml b/app/Dialer.qml
index be13ec5..f4a3272 100644
--- a/app/Dialer.qml
+++ b/app/Dialer.qml
@@ -1,5 +1,6 @@
/*
* 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.
@@ -20,7 +21,6 @@ import QtQuick.Controls 2.0
import QtMultimedia 5.5
import AGL.Demo.Controls 1.0
import 'models'
-import 'api' as API
Item {
id: root
@@ -42,32 +42,33 @@ Item {
interval: 1000
repeat: true
property var startTime
- onTriggered: callStatusLabel.text = getElapsedTimeString(startTime)
+ onTriggered: callStateLabel.text = getElapsedTimeString(startTime)
}
- API.Telephony {
- id: telephony
- url: bindingAddress
- property string callStatus: "disconnected"
- property string callClipColp: ""
+ Connections {
+ target: telephony
- onCallStatusChanged: {
- if (callStatus == "incoming") {
- ringtone.active = true
+ onConnectedChanged: {
+ // FIXME: keep dialpad inactive until connected
+ }
+
+ onCallStateChanged: {
+ if (telephony.callState == "incoming") {
rejectButton.active = true
- callStatusLabel.text = "Incoming call from " + callClipColp
- } else if (callStatus == "dialing") {
- callStatusLabel.text = "Dialing " + callClipColp
- } else if (callStatus == "active") {
+ ringtone.active = true
+ callStateLabel.text = "Incoming call from " + telephony.callClip
+ } else if (telephony.callState == "dialing") {
+ callStateLabel.text = "Dialing " + telephony.callColp
+ } else if (telephony.callState == "active") {
rejectButton.active = false
callTimer.startTime = getTime()
callTimer.restart()
- } else if (callStatus == "disconnected") {
- ringtone.active = false
+ } else if (telephony.callState == "disconnected") {
rejectButton.active = false
callButton.checked = false
callTimer.stop()
- callStatusLabel.text = ""
+ ringtone.active = false
+ callStateLabel.text = ""
}
}
}
@@ -161,7 +162,7 @@ Item {
}
Label {
- id: callStatusLabel
+ id: callStateLabel
Layout.alignment: Qt.AlignHCenter
text: ""
}
@@ -171,7 +172,7 @@ Item {
Layout.alignment: Qt.AlignHCenter
onImage: './images/HMI_Phone_Hangup.svg'
offImage: './images/HMI_Phone_Call.svg'
- property var active: (number.text.length > 0) || (telephony.callStatus == "incoming") || (telephony.callStatus == "active")
+ property var active: (number.text.length > 0) || (telephony.callState == "incoming") || (telephony.callState == "active")
opacity: active ? 1 : 0.25
onCheckedChanged: {
@@ -185,7 +186,7 @@ Item {
if (contact.name === '')
contact.name = 'Unknown'
history.insert(0, contact)
- if (telephony.callStatus == "incoming") {
+ if (telephony.callState == "incoming") {
telephony.answer()
ringtone.active = false;
} else {
diff --git a/app/api/Telephony.qml b/app/api/Telephony.qml
deleted file mode 100644
index 2db2d0b..0000000
--- a/app/api/Telephony.qml
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.
- */
-
-import QtQuick 2.6
-import QtWebSockets 1.0
-
-WebSocket {
- id: root
- active: true
- url: bindingAddress
-
- property string statusString: "waiting..."
- property string apiString: "telephony"
- property var verbs: []
- property string payloadLength: "9999"
-
- readonly property var msgid: {
- "call": 2,
- "retok": 3,
- "reterr": 4,
- "event": 5
- }
-
- onTextMessageReceived: {
- var json = JSON.parse(message)
- var request = json[2].request
- var response = json[2].response
- switch (json[0]) {
- case msgid.call:
- break
- case msgid.retok:
- root.statusString = request.status
- var verb = verbs.shift()
- if (verb == "dial") {
- console.debug("Dial response")
- } else if (verb == "hangup") {
- console.debug("Hangup response")
- }
- break
- case msgid.reterr:
- root.statusString = "Bad return value, binding probably not installed"
- break
- case msgid.event:
- var payload = JSON.parse(JSON.stringify(json[2]))
- var event = payload.event
- var data = payload.data
- console.debug("event: " + event)
- if (event == "telephony/incomingCall") {
- callClipColp = data.clip
- callStatus = "incoming"
- } else if (event == "telephony/dialingCall") {
- callClipColp = data.colp
- callStatus = "dialing"
- } else if (event == "telephony/terminatedCall") {
- callStatus = "disconnected"
- } else if (event == "telephony/callStateChanged") {
- callStatus = data.state
- }
- break
- }
- }
-
- onStatusChanged: {
- switch (status) {
- case WebSocket.Open:
- sendSocketMessage("subscribe", { value: "callStateChanged" })
- sendSocketMessage("subscribe", { value: "dialingCall" })
- sendSocketMessage("subscribe", { value: "incomingCall" })
- sendSocketMessage("subscribe", { value: "terminatedCall" })
- break
- case WebSocket.Error:
- root.statusString = "WebSocket error: " + root.errorString
- break
- }
- }
-
- function sendSocketMessage(verb, parameter) {
- var requestJson = [ msgid.call, payloadLength, apiString + '/' + verb, parameter ]
- verbs.push(verb)
- sendTextMessage(JSON.stringify(requestJson))
- }
-
- function dial(number) {
- var parameterJson = { value: number }
- sendSocketMessage("dial", parameterJson)
- }
-
- function answer() {
- var parameterJson = 'None'
- sendSocketMessage("answer", parameterJson)
- }
-
- function hangup() {
- var parameterJson = 'None'
- sendSocketMessage("hangup", parameterJson)
- }
-}
diff --git a/app/app.pro b/app/app.pro
index cc400a9..979c9f6 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -1,10 +1,13 @@
TARGET = phone
-QT = quickcontrols2
+QT = quickcontrols2 websockets
SOURCES = main.cpp
SUBDIRS = telephony-binding
+CONFIG += link_pkgconfig
+PKGCONFIG += qtappfw
+
RESOURCES += \
phone.qrc \
images/images.qrc \
diff --git a/app/main.cpp b/app/main.cpp
index 0fe4bf1..c0f9d5f 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -1,5 +1,6 @@
/*
* 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.
@@ -26,6 +27,8 @@
#include <libhomescreen.hpp>
#endif
+#include <telephony.h>
+
int main(int argc, char *argv[])
{
#ifdef HAVE_LIBHOMESCREEN
@@ -63,6 +66,8 @@ int main(int argc, char *argv[])
bindingAddress.setQuery(query);
QQmlContext *context = engine.rootContext();
context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress);
+ Telephony *telephony = new Telephony(bindingAddress);
+ context->setContextProperty("telephony", telephony);
}
engine.load(QUrl(QStringLiteral("qrc:/Phone.qml")));
diff --git a/app/phone.qrc b/app/phone.qrc
index fccf1c8..50b3140 100644
--- a/app/phone.qrc
+++ b/app/phone.qrc
@@ -2,7 +2,6 @@
<qresource prefix="/">
<file>Phone.qml</file>
<file>Dialer.qml</file>
- <file>api/Telephony.qml</file>
<file>models/CallHistoryModel.qml</file>
<file>models/ContactsModel.qml</file>
<file>models/qmldir</file>