From 2b0be55608770b5b00ebbed3388134a640f5f69f Mon Sep 17 00:00:00 2001 From: Mohammed Sadiq Date: Wed, 22 Sep 2021 11:40:36 +0530 Subject: [PATCH 1/4] wwan: Track apn list updates --- panels/wwan/cc-wwan-data.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c index c101485370..1891046097 100644 --- a/panels/wwan/cc-wwan-data.c +++ b/panels/wwan/cc-wwan-data.c @@ -90,6 +90,7 @@ struct _CcWwanData gint priority; gboolean data_enabled; /* autoconnect enabled */ gboolean home_only; /* Data roaming */ + gboolean apn_list_updated; /* APN list updated from mobile-provider-info */ }; G_DEFINE_TYPE (CcWwanData, cc_wwan_data, G_TYPE_OBJECT) @@ -277,7 +278,7 @@ wwan_data_update_apn_list_db (CcWwanData *self) g_autoptr(GError) error = NULL; guint i = 0; - if (!self->sim || !self->operator_code) + if (!self->sim || !self->operator_code || self->apn_list_updated) return; if (!self->apn_list) @@ -299,6 +300,8 @@ wwan_data_update_apn_list_db (CcWwanData *self) if (self->apn_provider) apn_methods = nma_mobile_provider_get_methods (self->apn_provider); + self->apn_list_updated = TRUE; + for (l = apn_methods; l; l = l->next, i++) { g_autoptr(CcWwanDataApn) apn = NULL; -- GitLab From 282d3ac89918cfb154357adb7d5469f02303f1f5 Mon Sep 17 00:00:00 2001 From: Mohammed Sadiq Date: Wed, 22 Sep 2021 11:53:11 +0530 Subject: [PATCH 2/4] wwan: Update apn list only if device is available Otherwise APN list from mobile-provider-info may not be properly loaded --- panels/wwan/cc-wwan-data.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c index 1891046097..36017eec3b 100644 --- a/panels/wwan/cc-wwan-data.c +++ b/panels/wwan/cc-wwan-data.c @@ -329,7 +329,8 @@ wwan_data_update_apn_list (CcWwanData *self) const GPtrArray *nm_connections; guint i; - if (self->apn_list || !self->sim) + if (self->apn_list || !self->sim || !self->nm_device || + nm_device_get_state (self->nm_device) <= NM_DEVICE_STATE_UNAVAILABLE) return; if (!self->apn_list) -- GitLab From df61045330572ca6202731d6b7d1f49fbdbe8b4e Mon Sep 17 00:00:00 2001 From: Mohammed Sadiq Date: Wed, 22 Sep 2021 12:02:16 +0530 Subject: [PATCH 3/4] wwan: Set apn access method before adding to list So that accessing APN details returns the right values when they are inquired immediately after they are added to the list. --- panels/wwan/cc-wwan-data.c | 1 + 1 file changed, 1 insertion(+) diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c index 36017eec3b..48a7269d5c 100644 --- a/panels/wwan/cc-wwan-data.c +++ b/panels/wwan/cc-wwan-data.c @@ -316,6 +316,7 @@ wwan_data_update_apn_list_db (CcWwanData *self) if (!apn) { apn = cc_wwan_data_apn_new (); + apn->access_method = l->data; g_list_store_insert (self->apn_list, i, apn); } -- GitLab From c24e3a9ac545c63f92cde01fa6226ed201f5f594 Mon Sep 17 00:00:00 2001 From: Mohammed Sadiq Date: Wed, 22 Sep 2021 12:03:39 +0530 Subject: [PATCH 4/4] wwan: Update operator code when 3gpp operator code changes And update APN list if they are not populated yet Fixes #1468 --- panels/wwan/cc-wwan-data.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c index 48a7269d5c..fffff99bb5 100644 --- a/panels/wwan/cc-wwan-data.c +++ b/panels/wwan/cc-wwan-data.c @@ -385,6 +385,25 @@ wwan_device_state_changed_cb (CcWwanData *self) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ENABLED]); } +static void +wwan_device_3gpp_operator_code_changd_cb (CcWwanData *self) +{ + MMModem3gpp *modem_3gpp; + + modem_3gpp = mm_object_peek_modem_3gpp (self->mm_object); + + if (!self->operator_code) + { + self->operator_code = mm_modem_3gpp_dup_operator_code (modem_3gpp); + + if (self->operator_code) + { + wwan_data_update_apn_list (self); + wwan_data_update_apn_list_db (self); + } + } +} + static void cc_wwan_data_get_property (GObject *object, guint prop_id, @@ -511,7 +530,12 @@ cc_wwan_data_new (MMObject *mm_object, modem_3gpp = mm_object_peek_modem_3gpp (mm_object); if (modem_3gpp) - self->operator_code = mm_modem_3gpp_dup_operator_code (modem_3gpp); + { + g_signal_connect_object (modem_3gpp, "notify::operator-code", + G_CALLBACK (wwan_device_3gpp_operator_code_changd_cb), + self, G_CONNECT_SWAPPED); + wwan_device_3gpp_operator_code_changd_cb (self); + } } if (self->active_connection) -- GitLab