Fix data roaming setting 54/19654/1
authorDongchul Lim <dc7.lim@samsung.com>
Fri, 11 Apr 2014 09:36:05 +0000 (18:36 +0900)
committerDongchul Lim <dc7.lim@samsung.com>
Thu, 17 Apr 2014 04:02:22 +0000 (13:02 +0900)
Change-Id: I26b0f99b3d6601cd89f135bbfcd558acac6937b3

src/modem.c
src/service.c
src/tcore-interface.c

index 0be6025..279a19e 100644 (file)
@@ -199,7 +199,7 @@ static void __ps_modem_get_ps_setting_from_storage(PsModem *object)
 
        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);
 
index 3136d54..1c6e48d 100644 (file)
@@ -127,18 +127,23 @@ static gboolean __ps_service_check_connection_option(gpointer object, gpointer c
 {
        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) ",
@@ -655,13 +660,15 @@ gpointer _ps_service_return_default_context(gpointer object)
        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);
@@ -900,6 +907,7 @@ TcorePsState _ps_service_check_cellular_state(gpointer object)
        }
 
        state = _ps_modem_get_data_roaming_allowed(service->p_modem);
+
        if (service->roaming && !state) {
                dbg("DATA ROAMING OFF");
                return TCORE_PS_STATE_ROAMING_OFF;
index 9a58b46..0247d66 100644 (file)
@@ -172,17 +172,43 @@ static TcoreHookReturn __on_hook_net_register(TcorePlugin *plugin,
        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);