diff options
author | Matt Porter <mporter@konsulko.com> | 2017-05-18 22:43:27 -0400 |
---|---|---|
committer | Matt Porter <mporter@konsulko.com> | 2017-05-19 10:01:02 -0400 |
commit | 91520f0839b47641162b2f4ba5e788f6a602b4e4 (patch) | |
tree | 47864b1e5d5c3ff1e5145a34bb4dbd4206af75f2 /telephony-binding/gdbus/ofono_voicecallmanager.c | |
parent | ed2a6d1359b7967d56172c0a37660181722a2019 (diff) |
Add telephony binding event support and UI call status notification
Add supports for incoming call, dialing call, and terminated call events
in the telephony binding. The phone UI is enhanced to make use of these
telephony binding events to display a notifications of phone call
status. These include generate a ring tone and displaying incoming phone
number information, outgoing phone number being dialed, and halt of the
ring tone and clearing of the notification space when a call is
terminated.
AGL-Bug: SPEC-598
Change-Id: Ied610b70c2e6edb1f631decd417cdbd39746a558
Signed-off-by: Matt Porter <mporter@konsulko.com>
Diffstat (limited to 'telephony-binding/gdbus/ofono_voicecallmanager.c')
-rw-r--r-- | telephony-binding/gdbus/ofono_voicecallmanager.c | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/telephony-binding/gdbus/ofono_voicecallmanager.c b/telephony-binding/gdbus/ofono_voicecallmanager.c index 2beadc0..aab4f69 100644 --- a/telephony-binding/gdbus/ofono_voicecallmanager.c +++ b/telephony-binding/gdbus/ofono_voicecallmanager.c @@ -14,9 +14,10 @@ * limitations under the License. */ +#define _GNU_SOURCE + #include <string.h> -#define _GNU_SOURCE #include <afb/afb-binding.h> #include "ofono_voicecallmanager_interface.h" @@ -30,26 +31,38 @@ static void call_added(OrgOfonoVoiceCallManager *manager, GVariantIter *iter; gchar *key; GVariant *value; - const gchar *state, *clip = NULL; + const gchar *state, *cl = NULL; g_variant_get(properties, "a{sv}", &iter); while (g_variant_iter_loop(iter, "{sv}", &key, &value)) { - if (!strcmp(key, "State")) + if (!strcmp(key, "State")) { state = g_variant_get_string(value, NULL); - else if (!strcmp(key, "LineIdentification")) { - clip = g_variant_get_string(value, NULL); + } else if (!strcmp(key, "LineIdentification")) { + cl = g_variant_get_string(value, NULL); } } if (!strcmp(state, "incoming")) { - g_signal_emit_by_name(manager, "incoming-call", op, clip ? clip : ""); + g_signal_emit_by_name(manager, "incoming-call", op, cl ? cl : ""); + } else if (!strcmp(state, "dialing")) { + g_signal_emit_by_name(manager, "dialing-call", op, cl ? cl : ""); } } +static void call_removed(OrgOfonoVoiceCallManager *manager, + gchar *op, + GVariant *properties) +{ + g_signal_emit_by_name(manager, "terminated-call", op); +} + + const OrgOfonoVoiceCallManager *ofono_voicecallmanager_init(const struct afb_binding_interface *iface, const gchar *op, - void (*incoming_call)(OrgOfonoVoiceCallManager *manager,gchar *)) + void (*incoming_call)(OrgOfonoVoiceCallManager *manager,gchar *,gchar *), + void (*dialing_call)(OrgOfonoVoiceCallManager *manager,gchar *,gchar *), + void (*terminated_call)(OrgOfonoVoiceCallManager *manager,gchar *)) { interface = iface; @@ -69,14 +82,49 @@ const OrgOfonoVoiceCallManager G_TYPE_STRING, G_TYPE_STRING); + g_signal_new("dialing-call", + G_TYPE_OBJECT, + G_SIGNAL_RUN_LAST, + 0, + NULL, + NULL, + g_cclosure_marshal_generic, + G_TYPE_NONE, + 2, + G_TYPE_STRING, + G_TYPE_STRING); + + g_signal_new("terminated-call", + G_TYPE_OBJECT, + G_SIGNAL_RUN_LAST, + 0, + NULL, + NULL, + g_cclosure_marshal_generic, + G_TYPE_NONE, + 1, + G_TYPE_STRING); + if (g_signal_connect(G_OBJECT(manager), "incoming-call", G_CALLBACK(incoming_call), NULL) <= 0) { - ERROR(interface, "Failed to connect to signal call-added\n"); + ERROR(interface, "Failed to connect to signal incoming-call\n"); + } + + if (g_signal_connect(G_OBJECT(manager), "dialing-call", G_CALLBACK(dialing_call), NULL) <= 0) { + ERROR(interface, "Failed to connect to signal dialing-call\n"); + } + + if (g_signal_connect(G_OBJECT(manager), "terminated-call", G_CALLBACK(terminated_call), NULL) <= 0) { + ERROR(interface, "Failed to connect to signal terminated-call\n"); } if (g_signal_connect(manager, "call-added", G_CALLBACK(call_added), NULL) <= 0) { ERROR(interface, "Failed to connect to signal call-added\n"); } + if (g_signal_connect(manager, "call-removed", G_CALLBACK(call_removed), NULL) <= 0) { + ERROR(interface, "Failed to connect to signal call-removed\n"); + } + return manager; } |