aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2019-09-23 10:40:06 +0200
committerAleksander Morgado <aleksander@aleksander.es>2019-10-17 08:31:46 +0000
commited3a1264af3bce088eb377553826c5b222330694 (patch)
tree822f149d81938957f713582b6d7ff66261a321ca /src
parent00a39cd060ef882211ffd36ab5d4cf79144c2c92 (diff)
iface-modem-voice: call list setup during initialization
We're going to allow emergency calls at any point, so prepare the call list handling logic during initialization, not when the modem is first enabled.
Diffstat (limited to 'src')
-rw-r--r--src/mm-iface-modem-voice.c101
1 files changed, 50 insertions, 51 deletions
diff --git a/src/mm-iface-modem-voice.c b/src/mm-iface-modem-voice.c
index 30c9abe7..6153b745 100644
--- a/src/mm-iface-modem-voice.c
+++ b/src/mm-iface-modem-voice.c
@@ -2605,11 +2605,6 @@ interface_disabling_step (GTask *task)
ctx->step++;
case DISABLING_STEP_LAST:
- /* Clear CALL list */
- g_object_set (self,
- MM_IFACE_MODEM_VOICE_CALL_LIST, NULL,
- NULL);
-
/* We are done without errors! */
g_task_return_boolean (task, TRUE);
g_object_unref (task);
@@ -2739,55 +2734,12 @@ interface_enabling_step (GTask *task)
ctx = g_task_get_task_data (task);
switch (ctx->step) {
- case ENABLING_STEP_FIRST: {
- MMCallList *list;
-
- list = mm_call_list_new (MM_BASE_MODEM (self));
- g_object_set (self,
- MM_IFACE_MODEM_VOICE_CALL_LIST, list,
- NULL);
-
- /* Connect to list's signals */
- g_signal_connect (list,
- MM_CALL_ADDED,
- G_CALLBACK (call_added),
- ctx->skeleton);
- g_signal_connect (list,
- MM_CALL_DELETED,
- G_CALLBACK (call_deleted),
- ctx->skeleton);
-
- /* Setup monitoring for in-call event handling */
- g_signal_connect (list,
- MM_CALL_ADDED,
- G_CALLBACK (setup_in_call_event_handling),
- self);
-
- /* Unless we're told not to, setup call list polling logic */
- if (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->load_call_list &&
- MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->load_call_list_finish) {
- gboolean periodic_call_list_check_disabled = FALSE;
-
- g_object_get (self,
- MM_IFACE_MODEM_VOICE_PERIODIC_CALL_LIST_CHECK_DISABLED, &periodic_call_list_check_disabled,
- NULL);
- if (!periodic_call_list_check_disabled) {
- mm_dbg ("periodic call list polling will be used if supported");
- g_signal_connect (list,
- MM_CALL_ADDED,
- G_CALLBACK (setup_call_list_polling),
- self);
- }
- }
-
- g_object_unref (list);
-
+ case ENABLING_STEP_FIRST:
/* Fall down to next step */
ctx->step++;
- }
case ENABLING_STEP_SETUP_UNSOLICITED_EVENTS:
- /* Allow setting up unsolicited events */
+ /* Allow setting up unsolicited events to get notified of incoming calls */
if (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->setup_unsolicited_events &&
MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->setup_unsolicited_events_finish) {
MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->setup_unsolicited_events (
@@ -2800,7 +2752,7 @@ interface_enabling_step (GTask *task)
ctx->step++;
case ENABLING_STEP_ENABLE_UNSOLICITED_EVENTS:
- /* Allow setting up unsolicited events */
+ /* Allow setting up unsolicited events to get notified of incoming calls */
if (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->enable_unsolicited_events &&
MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->enable_unsolicited_events_finish) {
MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->enable_unsolicited_events (
@@ -2861,6 +2813,7 @@ typedef enum {
INITIALIZATION_STEP_FIRST,
INITIALIZATION_STEP_CHECK_SUPPORT,
INITIALIZATION_STEP_FAIL_IF_UNSUPPORTED,
+ INITIALIZATION_STEP_SETUP_CALL_LIST,
INITIALIZATION_STEP_LAST
} InitializationStep;
@@ -2973,6 +2926,52 @@ interface_initialization_step (GTask *task)
/* Fall down to next step */
ctx->step++;
+ case INITIALIZATION_STEP_SETUP_CALL_LIST: {
+ MMCallList *list;
+
+ list = mm_call_list_new (MM_BASE_MODEM (self));
+ g_object_set (self,
+ MM_IFACE_MODEM_VOICE_CALL_LIST, list,
+ NULL);
+
+ /* Connect to list's signals */
+ g_signal_connect (list,
+ MM_CALL_ADDED,
+ G_CALLBACK (call_added),
+ ctx->skeleton);
+ g_signal_connect (list,
+ MM_CALL_DELETED,
+ G_CALLBACK (call_deleted),
+ ctx->skeleton);
+
+ /* Setup monitoring for in-call event handling */
+ g_signal_connect (list,
+ MM_CALL_ADDED,
+ G_CALLBACK (setup_in_call_event_handling),
+ self);
+
+ /* Unless we're told not to, setup call list polling logic */
+ if (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->load_call_list &&
+ MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->load_call_list_finish) {
+ gboolean periodic_call_list_check_disabled = FALSE;
+
+ g_object_get (self,
+ MM_IFACE_MODEM_VOICE_PERIODIC_CALL_LIST_CHECK_DISABLED, &periodic_call_list_check_disabled,
+ NULL);
+ if (!periodic_call_list_check_disabled) {
+ mm_dbg ("periodic call list polling will be used if supported");
+ g_signal_connect (list,
+ MM_CALL_ADDED,
+ G_CALLBACK (setup_call_list_polling),
+ self);
+ }
+ }
+ g_object_unref (list);
+
+ /* Fall down to next step */
+ ctx->step++;
+ }
+
case INITIALIZATION_STEP_LAST:
/* Setup all method handlers */
g_object_connect (ctx->skeleton,