modem = (PsModem *) object;
key_3g_enable = _ps_master_get_storage_value_bool(modem->p_master, STORAGE_KEY_DATA_ENABLE);
- key_roaming_allowed = _ps_master_get_storage_value_bool(modem->p_master, STORAGE_KEY_SVC_ROAM);
+ key_roaming_allowed = _ps_master_get_storage_value_bool(modem->p_master, STORAGE_KEY_SETAPPL_STATE_DATA_ROAMING);
_ps_modem_set_data_allowed(modem, key_3g_enable);
{
gboolean b_connect = TRUE;
gboolean power, sim, data, flight;
-
-
PsService *service = object;
power = _ps_modem_get_power(service->p_modem);
- sim = _ps_modem_get_sim_init(service->p_modem);
- data = _ps_modem_get_data_allowed(service->p_modem);
- flight = _ps_modem_get_flght_mode(service->p_modem);
b_connect &= power;
+
+ sim = _ps_modem_get_sim_init(service->p_modem);
b_connect &= sim;
+
+ data = _ps_modem_get_data_allowed(service->p_modem);
b_connect &= data;
+
+ if (service->roaming)
+ b_connect &= _ps_modem_get_data_roaming_allowed(service->p_modem);
+
+ flight = _ps_modem_get_flght_mode(service->p_modem);
b_connect &= !flight;
+
b_connect &= !service->restricted;
dbg("power(%d), sim init(%d), data allowed(%d), flight mode(%d) ",
return NULL;
}
-gboolean _ps_service_processing_network_event(gpointer object, gboolean ps_attached, gboolean roaming)
+gboolean _ps_service_processing_network_event(gpointer object,
+ gboolean ps_attached, gboolean roaming)
{
PsService *service = object;
tcore_check_return_value(service != NULL, FALSE);
_ps_service_set_ps_attached(service, ps_attached);
_ps_update_cellular_state_key(service);
+
if (service->roaming != roaming) {
gboolean roaming_allowed = FALSE;
_ps_service_set_roaming(service, roaming);
}
state = _ps_modem_get_data_roaming_allowed(service->p_modem);
+
if (service->roaming && !state) {
dbg("DATA ROAMING OFF");
return TCORE_PS_STATE_ROAMING_OFF;
gpointer service = user_data;
gboolean ps_attached = FALSE;
TelNetworkRegStatusInfo *registration_status;
+ gboolean roaming_status = FALSE;
dbg("network register event called");
tcore_check_return_value(service != NULL, TCORE_HOOK_RETURN_STOP_PROPAGATION);
registration_status = (TelNetworkRegStatusInfo *)data;
- if (registration_status->ps_status == TEL_NETWORK_REG_STATUS_REGISTERED ||
- registration_status->ps_status == TEL_NETWORK_REG_STATUS_ROAMING)
+ switch (registration_status->ps_status) {
+ case TEL_NETWORK_REG_STATUS_ROAMING:
+ roaming_status = TRUE;
+ case TEL_NETWORK_REG_STATUS_REGISTERED: /* FALLTHROUGH */
ps_attached = TRUE;
+ break;
+ case TEL_NETWORK_REG_STATUS_DENIED: /* FALLTHROUGH */
+ case TEL_NETWORK_REG_STATUS_SEARCHING: /* FALLTHROUGH */
+ case TEL_NETWORK_REG_STATUS_UNKNOWN: /* FALLTHROUGH */
+ case TEL_NETWORK_REG_STATUS_UNREGISTERED: /* FALLTHROUGH */
+ default:
+ dbg("Network PS Status: [%d]", registration_status->ps_status);
+ break;
+ }
+
+ /*
+ * Roaming status infered from CS Status is also applicable
+ * if PS Status doesn't communicate the same.
+ */
+ if (!roaming_status
+ && (registration_status->cs_status
+ == TEL_NETWORK_REG_STATUS_ROAMING))
+ roaming_status = TRUE;
+
+ /* Set Roaming Status */
+ _ps_modem_set_roaming(_ps_service_ref_modem(service), roaming_status);
- _ps_service_processing_network_event(service, ps_attached, registration_status->ps_status);
+ /* Process Network Registration event */
+ _ps_service_processing_network_event(service, ps_attached, roaming_status);
+ /* Set AcT */
dbg("act(%d)", registration_status->act);
_ps_service_set_access_technology(service, registration_status->act);