[DCM-1064] Fix the network status event issue.
authorJaemin Ahn <j.m.ahn@samsung.com>
Mon, 25 Mar 2013 11:05:00 +0000 (20:05 +0900)
committerJaemin Ahn <j.m.ahn@samsung.com>
Mon, 25 Mar 2013 11:05:00 +0000 (20:05 +0900)
Change-Id: I8f52dd7fe0ee388815d38fdc074226598246f4ca
Signed-off-by: Jaemin Ahn <j.m.ahn@samsung.com>
src/FTel_NetworkManagerImpl.cpp
src/FTel_NetworkManagerImpl.h

index 45b596a..b0a2afe 100755 (executable)
@@ -57,6 +57,9 @@ _NetworkManagerImpl::_NetworkManagerImpl(void)
     , __pNetworkSettingEvent(null)
     , __pTelephonyServiceProxy(null)
     , __pSettingListener(null)
+       , __isCallServiceAvailable(false)
+       , __isDataServiceAvailable(false)
+       , __isRoaming(false)
 {
 }
 
@@ -121,6 +124,10 @@ _NetworkManagerImpl::Construct(ITelephonyNetworkEventListener* pListener)
 
     __pConnectionHandle = move(pConnectionHandle);
 
+    __isCallServiceAvailable = IsServiceAvailable();
+    __isDataServiceAvailable = IsDataAvailable();
+    __isRoaming = IsRoaming();
+
     return E_SUCCESS;
 }
 
@@ -343,7 +350,7 @@ _NetworkManagerImpl::OnRoamingStateChangedCallback(bool isRoaming, void* pUserDa
        SysLog(NID_TEL, "The callback has called and the roaming state is %s", isRoaming ? "True" : "False");
     _NetworkManagerImpl* pNetworkManagerImpl = static_cast <_NetworkManagerImpl*>(pUserData);
 
-    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged(_NETWORK_EVENT_ROAMING, isRoaming);
+    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged();
 
     return;
 }
@@ -355,13 +362,7 @@ _NetworkManagerImpl::OnCallServiceStateChangedCallback(network_info_service_stat
 
     _NetworkManagerImpl* pNetworkManagerImpl = static_cast <_NetworkManagerImpl*>(pUserData);
 
-    bool isAvailable = false;
-    if (serviceState == NETWORK_INFO_SERVICE_STATE_IN_SERVICE)
-    {
-        isAvailable = true;
-    }
-
-    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged(_NETWORK_EVENT_CALL, isAvailable);
+    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged();
 
     return;
 }
@@ -369,59 +370,46 @@ _NetworkManagerImpl::OnCallServiceStateChangedCallback(network_info_service_stat
 void
 _NetworkManagerImpl::OnDataServiceStateChangedCallback(connection_type_e type, void* pUserData)
 {
-    if (type != CONNECTION_TYPE_CELLULAR)
-    {
-        SysLog(NID_TEL, "The connection type %d can be ignored", type);
-        return;
-    }
+    SysLog(NID_TEL, "The callback has called and the connection state is %d", type);
 
     _NetworkManagerImpl* pNetworkManagerImpl = static_cast <_NetworkManagerImpl*>(pUserData);
-    bool isAvailable = false;
-
-    // Get the isDataServiceAvailable
-    connection_cellular_state_e dataServiceState = CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE;
-    int err = connection_get_cellular_state(pNetworkManagerImpl->__pConnectionHandle.get(), &dataServiceState);
-    SysLog(NID_TEL, "The return value of connection_get_cellular_state() is 0x%x", err);
-    SysTryReturnVoidResult(NID_TEL, err == CONNECTION_ERROR_NONE, E_SYSTEM, "[%s] A system error has occurred. Failed to get the data service status.", GetErrorMessage(E_SYSTEM));
-
-    if (dataServiceState == CONNECTION_CELLULAR_STATE_AVAILABLE || dataServiceState == CONNECTION_CELLULAR_STATE_CONNECTED)
-    {
-        isAvailable = true;
-    }
 
-    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged(_NETWORK_EVENT_DATA, isAvailable);
+    pNetworkManagerImpl->OnTelephonyNetworkStatusChanged();
 
     return;
 }
 
 void
-_NetworkManagerImpl::OnTelephonyNetworkStatusChanged(_NetworkEventType type, bool data)
+_NetworkManagerImpl::OnTelephonyNetworkStatusChanged(void)
 {
-       SysLog(NID_TEL, "The listener has called with %s state", GetStringOfNetworkEventType(type));
+       bool isCallServiceAvailable = false;
+       bool isDataServiceAvailable = false;
+       bool isRoaming = false;
 
-    result r = E_SUCCESS;
     NetworkStatus networkStatus;
-    r = GetNetworkStatus(networkStatus);
-    SysTryReturnVoidResult(NID_TEL, r == E_SUCCESS, r, "[%s] Failed to get network status", GetErrorMessage(r));
 
-    switch (type)
-    {
-    case _NETWORK_EVENT_CALL:
-        _NetworkStatusImpl::GetInstance(networkStatus)->SetIsCallServiceAvailable(data);
-        break;
+    isCallServiceAvailable = IsServiceAvailable();
+    isDataServiceAvailable = IsDataAvailable();
+    isRoaming = IsRoaming();
 
-    case _NETWORK_EVENT_DATA:
-        _NetworkStatusImpl::GetInstance(networkStatus)->SetIsDataServiceAvailable(data);
-        break;
+    SysLog(NID_TEL, "The network status Call[%d]->[%d] Data[%d]->[%d] Roaming[%d]->[%d]",
+               __isCallServiceAvailable, isCallServiceAvailable, __isDataServiceAvailable,
+               isDataServiceAvailable, __isRoaming, isRoaming);
 
-    case _NETWORK_EVENT_ROAMING:
-        _NetworkStatusImpl::GetInstance(networkStatus)->SetIsRoaming(data);
-        break;
+    if ((__isCallServiceAvailable == isCallServiceAvailable) &&
+       (__isDataServiceAvailable == isDataServiceAvailable) &&
+       (__isRoaming == isRoaming))
+    {
+       return;
+    }
 
-    default:
-        break;
+    __isCallServiceAvailable = isCallServiceAvailable;
+    __isDataServiceAvailable = isDataServiceAvailable;
+    __isRoaming = isRoaming;
 
-    }
+    _NetworkStatusImpl::GetInstance(networkStatus)->SetIsCallServiceAvailable(isCallServiceAvailable);
+    _NetworkStatusImpl::GetInstance(networkStatus)->SetIsDataServiceAvailable(isDataServiceAvailable);
+    _NetworkStatusImpl::GetInstance(networkStatus)->SetIsRoaming(isRoaming);
 
     _NetworkManagerEventArg* pEventArg = new (std::nothrow)_NetworkManagerEventArg(networkStatus);
     SysTryReturnVoidResult(NID_TEL, pEventArg != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
@@ -429,6 +417,41 @@ _NetworkManagerImpl::OnTelephonyNetworkStatusChanged(_NetworkEventType type, boo
 }
 
 bool
+_NetworkManagerImpl::IsDataAvailable(void)
+{
+    int err = NETWORK_INFO_ERROR_NONE;
+    connection_cellular_state_e dataServiceState = CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE;
+    bool isDataAvailable = false;
+
+    err = connection_get_cellular_state(__pConnectionHandle.get(), &dataServiceState);
+
+    SysLog(NID_TEL, "The return value of connection_get_cellular_state() is 0x%x and the dataServiceState is %d", err, dataServiceState);
+
+    if (dataServiceState == CONNECTION_CELLULAR_STATE_AVAILABLE || dataServiceState == CONNECTION_CELLULAR_STATE_CONNECTED)
+    {
+       isDataAvailable = true;
+    }
+    else
+    {
+       isDataAvailable = false;
+    }
+
+    return isDataAvailable;
+}
+
+bool
+_NetworkManagerImpl::IsRoaming(void)
+{
+    int err = NETWORK_INFO_ERROR_NONE;
+    bool isRoaming = false;
+
+    err = network_info_is_roaming(&isRoaming);
+    SysLog(NID_TEL, "The return value of network_info_is_roaming() is 0x%x and the roming state is %s", err, isRoaming ? "True" : "False");
+
+    return isRoaming;
+}
+
+bool
 _NetworkManagerImpl::IsServiceAvailable(bool checkEmergency /* = false */)
 {
     bool isAvailable = false;
@@ -468,17 +491,17 @@ _NetworkManagerImpl::IsNetworkAvailable(void)
     return !isFlightModeEnabled;
 }
 
-const char*
-_NetworkManagerImpl::GetStringOfNetworkEventType(_NetworkEventType type) const
-{
-    static const char* pStateStr[] =
-    {
-        "CallServiceAvailable",
-        "DataServiceAvailable ",
-        "Roaming"
-    };
-    return pStateStr[type];
-}
+//const char*
+//_NetworkManagerImpl::GetStringOfNetworkEventType(_NetworkEventType type) const
+//{
+//    static const char* pStateStr[] =
+//    {
+//        "CallServiceAvailable",
+//        "DataServiceAvailable ",
+//        "Roaming"
+//    };
+//    return pStateStr[type];
+//}
 
 _NetworkManagerImpl*
 _NetworkManagerImpl::GetInstance(NetworkManager& networkManager)
index 900ec51..2cd490c 100644 (file)
@@ -53,17 +53,6 @@ class _TelephonyIpcProxy;
 class _NetworkManagerImpl
        : public Tizen::Base::Object
 {
-       /**
-     * @enum _NetworkEventType
-     * Defines the network event type.
-     */
-       enum _NetworkEventType
-       {
-           _NETWORK_EVENT_CALL,
-           _NETWORK_EVENT_DATA,
-           _NETWORK_EVENT_ROAMING
-       };
-
 public:
        /**
      * This is the default constructor for this class.
@@ -126,6 +115,15 @@ public:
 
     void OnTelephonyNetworkSearchCompleted(Tizen::Base::String message, result r);
 
+    /**
+     * Checks the network state of the data network service.
+     */
+       bool IsDataAvailable(void);
+
+    /**
+     * Checks the data roaming is on or off.
+     */
+       bool IsRoaming(void);
 
     /**
      * Checks the network state of the telephony service.
@@ -188,18 +186,7 @@ private:
      */
        _NetworkManagerImpl(const _NetworkManagerImpl& rhs);
 
-       /**
-     * Gets the string of network event type.
-     *
-     * @param[in]   type    The value of _NetworkEventType
-     */
-       const char* GetStringOfNetworkEventType(_NetworkEventType type) const;
-
-       /**
-     * Notifies when the status of the telephony network is changed.
-     */
-       void OnTelephonyNetworkStatusChanged(_NetworkEventType type, bool data);
-
+       void OnTelephonyNetworkStatusChanged(void);
 
        Tizen::Base::Collection::IList* ParsingMessageN(const Tizen::Base::String& message);
 
@@ -224,6 +211,10 @@ private:
     _TelephonyIpcProxy* __pTelephonyServiceProxy;
     ITelephonyNetworkSettingListener* __pSettingListener;
 
+       bool __isCallServiceAvailable;
+       bool __isDataServiceAvailable;
+       bool __isRoaming;
+
 }; // _NetworkManagerImpl
 
 }} // Tizen::Telephony