diff options
-rw-r--r-- | app/Dialer.qml | 12 | ||||
-rw-r--r-- | app/api/Telephony.qml | 5 | ||||
-rw-r--r-- | telephony-binding/gdbus/ofono_voicecall.c | 7 | ||||
-rw-r--r-- | telephony-binding/gdbus/ofono_voicecall.h | 1 | ||||
-rw-r--r-- | telephony-binding/telephony-binding.c | 16 |
5 files changed, 38 insertions, 3 deletions
diff --git a/app/Dialer.qml b/app/Dialer.qml index 5dc800a..99610fd 100644 --- a/app/Dialer.qml +++ b/app/Dialer.qml @@ -143,11 +143,12 @@ Item { Layout.alignment: Qt.AlignHCenter onImage: './images/HMI_Phone_Hangup.svg' offImage: './images/HMI_Phone_Call.svg' - opacity: number.text.length > 0 ? 1 : 0.25 + property var active: (number.text.length > 0) || (telephony.callStatus == "incoming") + opacity: active ? 1 : 0.25 onCheckedChanged: { if (checked) { - if (number.text.length === 0) { + if (!active) { callButton.checked = false return } @@ -156,7 +157,12 @@ Item { if (contact.name === '') contact.name = 'Unknown' history.insert(0, contact) - telephony.dial(number.text) + if (telephony.callStatus == "incoming") { + telephony.answer() + ringtone.active = false; + } else { + telephony.dial(number.text) + } } else { name.text = '' number.text = '' diff --git a/app/api/Telephony.qml b/app/api/Telephony.qml index 721a51a..b42af4f 100644 --- a/app/api/Telephony.qml +++ b/app/api/Telephony.qml @@ -92,6 +92,11 @@ WebSocket { sendSocketMesage("dial", parameterJson) } + function answer() { + var parameterJson = 'None' + sendSocketMesage("answer", parameterJson) + } + function hangup() { var parameterJson = 'None' sendSocketMesage("hangup", parameterJson) diff --git a/telephony-binding/gdbus/ofono_voicecall.c b/telephony-binding/gdbus/ofono_voicecall.c index b602c89..de6db2f 100644 --- a/telephony-binding/gdbus/ofono_voicecall.c +++ b/telephony-binding/gdbus/ofono_voicecall.c @@ -34,3 +34,10 @@ void ofono_voicecall_hangup(OrgOfonoVoiceCall *voice_call) org_ofono_voice_call_call_hangup_sync(voice_call, NULL, &error); } + +void ofono_voicecall_answer(OrgOfonoVoiceCall *voice_call) +{ + GError *error = NULL; + + org_ofono_voice_call_call_answer_sync(voice_call, NULL, &error); +} diff --git a/telephony-binding/gdbus/ofono_voicecall.h b/telephony-binding/gdbus/ofono_voicecall.h index 0e33dd5..6405d1b 100644 --- a/telephony-binding/gdbus/ofono_voicecall.h +++ b/telephony-binding/gdbus/ofono_voicecall.h @@ -20,4 +20,5 @@ OrgOfonoVoiceCall *ofono_voicecall_new(gchar *); void ofono_voicecall_free(OrgOfonoVoiceCall *); +void ofono_voicecall_answer(OrgOfonoVoiceCall *); void ofono_voicecall_hangup(OrgOfonoVoiceCall *); diff --git a/telephony-binding/telephony-binding.c b/telephony-binding/telephony-binding.c index 134432c..00115d2 100644 --- a/telephony-binding/telephony-binding.c +++ b/telephony-binding/telephony-binding.c @@ -70,6 +70,16 @@ static void hangup(struct afb_req request) } } +static void answer(struct afb_req request) +{ + if (incoming_call) { + DEBUG(interface, "Answer voice call\n"); + voice_call = incoming_call; + ofono_voicecall_answer(voice_call); + } else { + ERROR(interface, "Answer: no incoming call"); + } +} static void incoming_call_cb(OrgOfonoVoiceCallManager *manager, gchar *op, gchar *clip) { @@ -147,6 +157,12 @@ static const struct afb_verb_desc_v1 verbs[]= { .callback = hangup, .info = "Hangup phone" }, + { + .name = "answer", + .session = AFB_SESSION_NONE, + .callback = answer, + .info = "Answer phone" + }, {NULL} }; |