Fixed: 1. convert msg to mms 2. calculate mms text size 49/66149/1 accepted/tizen/mobile/20160418.012444 submit/tizen/20160415.151531 submit/tizen/20160419.061619
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 15 Apr 2016 11:03:17 +0000 (14:03 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 15 Apr 2016 11:03:17 +0000 (14:03 +0300)
Change-Id: Ic61bcb218a2e8d8692d76f32abde19e0c003fb88
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/MsgEngine/inc/MsgStorage.h
src/Common/MsgEngine/inc/MsgTypes.h
src/Common/MsgEngine/src/MsgStorage.cpp
src/Conversation/Body/Controller/inc/Body.h
src/Conversation/Body/Controller/inc/Page.h
src/Conversation/Body/Controller/src/Body.cpp
src/Conversation/Body/Controller/src/Page.cpp
src/Conversation/Main/Controller/src/Conversation.cpp

index 2a49c6b..acf7a80 100644 (file)
@@ -54,6 +54,7 @@ namespace Msg
             virtual MsgThreadListRef searchThread(const std::string &word) = 0;
             virtual void setReadStatus(ThreadId id) = 0;
             virtual int getUnreadThreadCount() const = 0;
+            bool hasEmail(ThreadId id);
 
             // Message:
             virtual MessageSMSListRef getSimMsgList() = 0;
index 033c5e1..704b7cd 100644 (file)
@@ -85,8 +85,8 @@ namespace Msg
 
         unsigned charsLeft;     // Only for SMS
         unsigned segmentsCount; // Only for SMS
-        unsigned bytes;         // SMS or MMS
-        bool isMms;             // SMS or MMS
+        unsigned bytes;         // Only for SMS
+        bool isMms;
     };
 
     inline MsgTextMetric::MsgTextMetric()
index ec0eba3..6c6569f 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "MsgStorage.h"
 #include "Logger.h"
+#include "MsgUtils.h"
 #include <algorithm>
 
 using namespace Msg;
@@ -46,3 +47,23 @@ void MsgStorage::removeListener(IMsgStorageListener &listener)
         m_Listeners.erase(itr);
     }
 }
+
+bool MsgStorage::hasEmail(ThreadId id)
+{
+    if(!id.isValid())
+        return false;
+
+    const MsgAddressListRef addressList = getAddressList(id);
+    if(addressList)
+    {
+        for(int i = 0; i < addressList->getLength(); ++i)
+        {
+            const MsgAddress &msgAddr = addressList->at(i);
+            if(msgAddr.getAddressType() == MsgAddress::Email)
+                return true;
+            else if(MsgUtils::isValidEmail(msgAddr.getAddress()))
+                return true;
+        }
+    }
+    return false;
+}
index cd0b7f8..65352a5 100644 (file)
@@ -51,6 +51,7 @@ namespace Msg
             bool addMedia(const std::string &filePath);
 
             bool isMms();
+            void setMmsRecipFlag(bool value);
             const MsgTextMetric &getTextMetric();
             long long getMsgSize();
             int getAttachmentsCountTotal() const;
@@ -99,6 +100,7 @@ namespace Msg
             Ecore_Idler *m_pOnChangedIdler;
             bool m_TooLargePopupShow;
             bool m_TooMuchAttachedPopupShow;
+            bool m_MmsRecipFlag;
     };
 
     class IBodyListener
index 48ea211..b526b7a 100644 (file)
@@ -66,6 +66,7 @@ namespace Msg
             Body &m_Body;
             MsgTextMetric m_MsgMetric;
             WorkingDirRef m_WorkingDir;
+            int m_Utf8TextSize;
     };
 }
 
index 768fdb5..242aee1 100644 (file)
@@ -70,6 +70,7 @@ Body::Body(App &app, WorkingDirRef workingDir)
     , m_pOnChangedIdler(nullptr)
     , m_TooLargePopupShow(false)
     , m_TooMuchAttachedPopupShow(false)
+    , m_MmsRecipFlag(false)
 {
 }
 
@@ -186,6 +187,9 @@ bool Body::addMedia(const std::string &filePath)
 
 bool Body::isMms()
 {
+    if(m_MmsRecipFlag)
+        return true;
+
     auto pages = getPages();
 
     if(pages.size() > 1)
@@ -203,6 +207,11 @@ bool Body::isMms()
     return false;
 }
 
+void Body::setMmsRecipFlag(bool value)
+{
+    m_MmsRecipFlag = value;
+}
+
 const MsgTextMetric &Body::getTextMetric()
 {
     return static_cast<Page&>(getDefaultPage()).getTextMetric();
index 2760b62..01b095d 100644 (file)
@@ -38,6 +38,7 @@ Page::Page(Body &parent, WorkingDirRef workingDir)
     , m_Body(parent)
     , m_MsgMetric()
     , m_WorkingDir(workingDir)
+    , m_Utf8TextSize(0)
 {
 }
 
@@ -59,6 +60,7 @@ void Page::updateMsgMetricIfNeeded()
         if(item->hasChanged())
         {
             std::string text = item->getPlainUtf8Text();
+            m_Utf8TextSize = text.length();
             MsgEngine::calculateTextMetric(text, m_MsgMetric);
             item->resetChangedFlag();
         }
@@ -84,8 +86,7 @@ long long Page::getSize()
         }
     }
     updateMsgMetricIfNeeded();
-    totalSize += m_MsgMetric.bytes;
-
+    totalSize += m_Body.isMms() ? m_Utf8TextSize : m_MsgMetric.bytes;
     return totalSize;
 }
 
index d695c46..a19823c 100644 (file)
@@ -237,7 +237,10 @@ void Conversation::setThreadId(ThreadId id, const std::string &searchWord)
 {
     m_ThreadId = id;
     setMode(m_ThreadId.isValid() ? ConversationMode : NewMessageMode);
+
     m_pBody->clear();
+    m_pBody->setMmsRecipFlag( getMsgEngine().getStorage().hasEmail(m_ThreadId));
+
     if(m_pRecipPanel)
     {
         m_pRecipPanel->clear();
@@ -245,7 +248,9 @@ void Conversation::setThreadId(ThreadId id, const std::string &searchWord)
     }
     if(m_pConvList)
         m_pConvList->setThreadId(m_ThreadId, searchWord);
+
     markAsRead();
+    checkAndSetMsgType();
 }
 
 void Conversation::setListener(IConversationListener *listener)
@@ -497,7 +502,6 @@ void Conversation::saveDraftMsg()
     if(!isBodyEmpty())
     {
         MessageRef msg = getMsgEngine().getComposer().createMessage(m_IsMms ? Message::MT_MMS : Message::MT_SMS);
-
         if(msg)
         {
             read(*msg);
@@ -535,6 +539,7 @@ void Conversation::notifyConvertMsgType()
 void Conversation::convertMsgTypeHandler()
 {
     MSG_LOG("Is MMS: ", m_IsMms);
+    updateMsgInputPanel();
     notifyConvertMsgType();
 }
 
@@ -664,6 +669,7 @@ void Conversation::onEntryFocusChanged(ConvRecipientsPanel &panel)
 void Conversation::onMbeChanged(ConvRecipientsPanel &panel)
 {
     MSG_LOG("");
+    m_pBody->setMmsRecipFlag(m_pRecipPanel->isMms());
     checkAndSetMsgType();
 }