TizenRefApp-7088 Convert to SMS/MMS works wrong in some cases 89/87089/3
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Tue, 6 Sep 2016 08:49:19 +0000 (11:49 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Wed, 7 Sep 2016 10:36:58 +0000 (13:36 +0300)
Change-Id: I1d041d92e61c0d6c549026de42aa69de0e1aeef4
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Conversation/Body/Controller/inc/Body.h
src/Conversation/Body/Controller/src/Body.cpp
src/Conversation/Main/Controller/inc/Conversation.h
src/Conversation/Main/Controller/src/Conversation.cpp

index 2ea4fa47793bbd31c4368ecfc4bf4f9d4a704383..9f8a5d650247603b05d57f567dc241317d6d0209 100644 (file)
@@ -112,7 +112,7 @@ namespace Msg
             IBodyListener *m_pListener;
             App &m_App;
             WorkingDirRef m_WorkingDir;
-            Ecore_Idler *m_pOnChangedIdler;
+            Ecore_Job *m_pOnChangedJob;
             bool m_TooLargePopupShow;
             bool m_TooMuchAttachedPopupShow;
             bool m_ResizingPopupShow;
index a2ecafb736b910bfb16c3984c4f0677cac5a297c..de8db681d9a60316c134e6145468192307bc47d3 100644 (file)
@@ -43,7 +43,7 @@ Body::Body(Evas_Object *parent, App &app, WorkingDirRef workingDir, ConvList &co
     , m_pListener(nullptr)
     , m_App(app)
     , m_WorkingDir(workingDir)
-    , m_pOnChangedIdler(nullptr)
+    , m_pOnChangedJob(nullptr)
     , m_TooLargePopupShow(false)
     , m_TooMuchAttachedPopupShow(false)
     , m_ResizingPopupShow(false)
@@ -60,10 +60,10 @@ Body::Body(Evas_Object *parent, App &app, WorkingDirRef workingDir, ConvList &co
 
 Body::~Body()
 {
-    if(m_pOnChangedIdler)
+    if(m_pOnChangedJob)
     {
-        ecore_idler_del(m_pOnChangedIdler);
-        m_pOnChangedIdler = nullptr;
+        ecore_job_del(m_pOnChangedJob);
+        m_pOnChangedJob = nullptr;
     }
 }
 
@@ -487,17 +487,16 @@ std::string Body::createVcfFile(const AppControlComposeRef &cmd)
 
 void Body::notifyContentChanged()
 {
-    if(!m_pOnChangedIdler)
+    if(!m_pOnChangedJob)
     {
-        m_pOnChangedIdler = ecore_idler_add
+        m_pOnChangedJob = ecore_job_add
         (
-            [](void *data)->Eina_Bool
+            [](void *data)
             {
                 Body *self =(Body*)data;
+                self->m_pOnChangedJob = nullptr;
                 if(self->m_pListener)
                     self->m_pListener->onChanged(*self);
-                self->m_pOnChangedIdler = nullptr;
-                return false; // Delete idler
             },
             this
         );
index 684ebdf210156374d9830ddf2d349e861954e60c..c9115587192bdb9b3316ffa0539ace631ba6c5ad 100644 (file)
@@ -169,10 +169,11 @@ namespace Msg
             bool isBodyEmpty() const;
             void notifyConvertMsgType();
             void convertMsgTypeHandler();
-            void checkAndSetMsgType();
+            void checkAndSetMsgType(bool force = false);
             void navigateToSlideShow(MsgId id);
             void setBodyFocus();
             void setRecipEntryFocus();
+            void resetMsgThread();
 
             void showMainPopup();
             void showNoRecipPopup();
index b647ddf5a0e38524a7bb23a1ffdf36e845efa048..98ed4726e5c3ae60ba0241b62825dc588069803c 100644 (file)
@@ -278,7 +278,19 @@ void Conversation::setThreadId(ThreadId id, const std::string &searchWord)
         m_pConvList->setThreadId(m_ThreadId, searchWord);
 
     markAsRead();
-    checkAndSetMsgType();
+    checkAndSetMsgType(true);
+}
+
+void Conversation::resetMsgThread()
+{
+    m_IsMms = false;
+    m_DispIsMms = false;
+    if(m_NnotifyConvertMsgTypeIdler)
+    {
+        ecore_idler_del(m_NnotifyConvertMsgTypeIdler);
+        m_NnotifyConvertMsgTypeIdler = nullptr;
+    }
+    setThreadId(ThreadId());
 }
 
 void Conversation::setListener(IConversationListener *listener)
@@ -291,7 +303,7 @@ void Conversation::forwardMsg(MsgId id)
     MessageRef msg = getMsgEngine().getStorage().getMessage(id);
     if(msg)
     {
-        setThreadId(ThreadId());
+        resetMsgThread();
         if(m_pBody)
             m_pBody->write(*msg);
         m_pRecipPanel->setEntryFocus(true);
@@ -530,6 +542,7 @@ void Conversation::sendMessage()
 
     if(sendRes == MsgTransport::SendSuccess && m_ThreadId.isValid())
     {
+        m_DispIsMms = false; // Skip "Convert to SMS" after sent message with MMS body.
         setThreadId(m_ThreadId);
         m_pMsgInputPanel->disabledButton(MessageInputPanel::SendButtonId, true);
         m_pBody->clear();
@@ -583,7 +596,7 @@ void Conversation::editDraftMsg(MsgId id)
 void Conversation::createNewMsgThread()
 {
     MsgAddressListRef addressList = getAddressList();
-    setThreadId(ThreadId());
+    resetMsgThread();
     if(m_pRecipPanel)
         m_pRecipPanel->update(addressList);
 }
@@ -620,19 +633,16 @@ void Conversation::convertMsgTypeHandler()
     notifyConvertMsgType();
 }
 
-void Conversation::checkAndSetMsgType()
+void Conversation::checkAndSetMsgType(bool force)
 {
     // Body:
-    if(!m_pBody)
-        return;
-
-    bool isMms = m_pBody->isMms();
+    bool isMms = m_pBody ? m_pBody->isMms() : false;
 
     // Recipients:
     if(!isMms && m_pRecipPanel && !m_pRecipPanel->isMbeEmpty())
         isMms = m_pRecipPanel->isMms();
 
-    if(isMms != m_IsMms)
+    if(force || isMms != m_IsMms)
     {
         m_IsMms = isMms;
         convertMsgTypeHandler();