S1-15867
authorshivakumar jagalur matt <shiva.jm@samsung.com>
Thu, 26 Sep 2013 10:58:02 +0000 (16:28 +0530)
committershivakumar jagalur matt <shiva.jm@samsung.com>
Thu, 26 Sep 2013 10:58:02 +0000 (16:28 +0530)
Change-Id: I7beb2e615f1c0b5475fc6c2ac2575b9824e6e478
Signed-off-by: shivakumar jagalur matt <shiva.jm@samsung.com>
src/FMsg_SmsManagerImpl.cpp
src/FMsg_SmsMmsCallbackHandler.cpp
src/FMsg_SmsMmsCallbackHandler.h

index dda6f69..715f671 100644 (file)
@@ -284,8 +284,7 @@ _SmsManagerImpl::AddSmsMessageEventListener(const ISmsMessageEventListener& even
        r = __pSmsReceiveEvent->AddListener(eventListener, true);
        SysTryCatch(NID_MSG, r == E_SUCCESS, , r, "Failed to add a listener");
 
-       err = msg_reg_sms_message_callback(__msgHandle, &_SmsMmsCallbackHandler::IncomingSmsMessageCallback, 0, (void*)
-                                               __pSmsReceiveEvent);
+       err = _SmsMmsCallbackHandler::GetInstance()->RegisterIncomingMessageCallback(__pSmsReceiveEvent);
 
        r = ConvertException(err);
        SysTryCatch(NID_MSG, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[%s] Failed to register for incoming sms callback.", GetErrorMessage(r));
index fd3b1bd..00050c5 100644 (file)
@@ -53,6 +53,8 @@ _SmsMmsCallbackHandler::_SmsMmsCallbackHandler(void)
        : __msgHandle(0)
        , __callbackRegistered(false)
        , __incomingSmsCallbackRegistered(true)
+    , __incomingCallbackRegistered(false)
+    , __pSmsIncomingEvent(null)
 {
 }
 
@@ -204,6 +206,22 @@ _SmsMmsCallbackHandler::RegisterMessageCallback()
 }
 
 int
+_SmsMmsCallbackHandler::RegisterIncomingMessageCallback(Tizen::Base::Object* pSmsIncomingEvent)
+{
+    int err = MSG_SUCCESS;
+
+    __pSmsIncomingEvent = pSmsIncomingEvent;
+
+    if (__msgHandle && !__incomingCallbackRegistered)
+    {
+            err = msg_reg_sms_message_callback(__msgHandle, &_SmsMmsCallbackHandler::IncomingSmsMessageCallback, 0, null);
+            __incomingCallbackRegistered = true;
+    }
+
+    return err;
+}
+
+int
 _SmsMmsCallbackHandler::CloseMessageHandle()
 {
        int err = MSG_SUCCESS;
@@ -404,7 +422,7 @@ _SmsMmsCallbackHandler::SentMessageStatusCallback(msg_handle_t hMsgHandle, msg_s
 void
 _SmsMmsCallbackHandler::IncomingSmsMessageCallback(msg_handle_t hMsgHandle, msg_struct_t newMsg, void* pUserParam)
 {
-       _SmsEvent* pSmsEvent = static_cast <_SmsEvent*>(pUserParam);
+       _SmsEvent* pSmsEvent = static_cast <_SmsEvent*>(_SmsMmsCallbackHandler::GetInstance()->__pSmsIncomingEvent);
        _SmsEventArg* pSmsEventArg = null;
 
        int msgSize = 0;
index 06a2b9a..8eb687a 100644 (file)
@@ -138,6 +138,18 @@ public:
        */
        result GetAndRemoveFromMessageMap(int reqId, _MessageType& msgType, Tizen::Base::Object** pEvent);
 
+  /**
+    * Registers the Message call back for incoming SMS operation.
+    *
+    * @since                        3.0
+    * @return       An error codea
+    * @param[in]    pSmsIncomingEvent               message Event
+    * @exception    MSG_SUCCESS                     The method was successful.
+    * @exception    MSG_ERR_NULL_POINTER            Input parameter is NULL.
+    * @exception    MSG_ERR_MEMORY_ERROR            Memory error.
+    */
+    int RegisterIncomingMessageCallback(Tizen::Base::Object* pSmsIncomingEvent);
+
        // for SMS and MMS sent status
        static void SentMessageStatusCallback(msg_handle_t hMsgHandle, msg_struct_t msgStatus, void* pUserParam);
 
@@ -172,6 +184,8 @@ private:
        msg_handle_t __msgHandle;
        bool   __callbackRegistered;
        bool   __incomingSmsCallbackRegistered;
+    bool __incomingCallbackRegistered;
+    Tizen::Base::Object* __pSmsIncomingEvent;
        Tizen::Base::Collection::MultiHashMap __messageMap;
        Tizen::Base::Runtime::Mutex  __msgMutex;
        static bool __destroyed;