From 8736b02f3e9ffb1de8495eccf1e82a593ef935ab Mon Sep 17 00:00:00 2001 From: Jaemin Ahn Date: Mon, 25 Mar 2013 20:05:00 +0900 Subject: [PATCH] [DCM-1064] Fix the network status event issue. Change-Id: I8f52dd7fe0ee388815d38fdc074226598246f4ca Signed-off-by: Jaemin Ahn --- src/FTel_NetworkManagerImpl.cpp | 135 +++++++++++++++++++++++----------------- src/FTel_NetworkManagerImpl.h | 37 +++++------ 2 files changed, 93 insertions(+), 79 deletions(-) diff --git a/src/FTel_NetworkManagerImpl.cpp b/src/FTel_NetworkManagerImpl.cpp index 45b596a..b0a2afe 100755 --- a/src/FTel_NetworkManagerImpl.cpp +++ b/src/FTel_NetworkManagerImpl.cpp @@ -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) diff --git a/src/FTel_NetworkManagerImpl.h b/src/FTel_NetworkManagerImpl.h index 900ec51..2cd490c 100644 --- a/src/FTel_NetworkManagerImpl.h +++ b/src/FTel_NetworkManagerImpl.h @@ -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 -- 2.7.4