TizenRefApp-9014 Fix unread messages counter 77/142277/2 submit/tizen/20170803.142151
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 3 Aug 2017 08:22:15 +0000 (11:22 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 3 Aug 2017 09:58:26 +0000 (12:58 +0300)
Add isSpam() method to Message model.

Change-Id: I1644b0c845287e130d379a51a71140e8e01c17ed
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
17 files changed:
src/Common/Controller/inc/NaviFrameController.h
src/Common/Controller/src/NaviFrameController.cpp
src/Common/MsgEngine/inc/Message.h
src/Common/MsgEngine/inc/MsgConversationItem.h
src/Common/MsgEngine/src/dummy/MessageDummy.cpp
src/Common/MsgEngine/src/dummy/MessageDummy.h
src/Common/MsgEngine/src/dummy/MsgConversationItemDummy.cpp
src/Common/MsgEngine/src/dummy/MsgConversationItemDummy.h
src/Common/MsgEngine/src/private/MessagePrivate.cpp
src/Common/MsgEngine/src/private/MessagePrivate.h
src/Common/MsgEngine/src/private/MsgConversationItemPrivate.cpp
src/Common/MsgEngine/src/private/MsgConversationItemPrivate.h
src/Common/MsgEngine/src/private/MsgStoragePrivate.cpp
src/Conversation/Controller/inc/ConvFrame.h
src/Conversation/Controller/inc/ConvList.h
src/Conversation/Controller/src/ConvFrame.cpp
src/Conversation/Controller/src/ConvList.cpp

index 6ff0abe75060af09294bce62ab2a0964fe56fc17..f3e42c56e896d0040dbded0d7fd226c17ed6c15f 100644 (file)
@@ -122,6 +122,18 @@ namespace Msg {
                        std::unique_ptr<ConnectivityChecker> m_ConnectivityChecker;
                        Ecore_Job *m_pExitJob;
        };
+
+       template<typename T>
+       inline T *NaviFrameController::findTopFrame() const
+       {
+               auto items = getItems();
+               for (auto item = items.rbegin(); item != items.rend(); ++item) {
+                       T *frame = dynamic_cast<T*>(*item);
+                       if (frame)
+                               return frame;
+               }
+               return nullptr;
+       }
 }
 
 #endif /* NaviFrameController_h_ */
index f162e2f380e1fcc16a1c195bc886fbe427dfadcb..cac8de2ad6bfc1d26d52258d76d96f8b8bc0e995 100644 (file)
@@ -129,10 +129,14 @@ void NaviFrameController::execCmd(const AppControlDefaultRef &cmd)
                return;
 
        AppControlDefault::DefaultType type = cmd->getDefaultType();
+
+       MSG_LOG("getDefaultType: ", type);
        auto *thread = findTopFrame<MsgThreadFrame>(); // Check if thread is open
        if (!thread)
                insertToBottom(*new MsgThreadFrame(*this)); // Push thread list to the bottom
 
+       // TODO: Temporarily disabled
+       /*
        if (type != AppControlDefault::MainType) {
                MessageRef msg = App::getInst().getMsgEngine().getStorage().getMessage(cmd->getMessageId()); //To avoid opening conversation if MsgId is invalid
                if (msg) {
@@ -149,6 +153,7 @@ void NaviFrameController::execCmd(const AppControlDefaultRef &cmd)
                        }
                }
        }
+       */
 }
 
 void NaviFrameController::execCmd(const AppControlComposeRef &cmd)
@@ -185,18 +190,6 @@ void NaviFrameController::execCmd(const AppControlSettingsRef &cmd)
        }
 }
 
-template<typename T>
-T *NaviFrameController::findTopFrame() const
-{
-       auto items = getItems();
-       for (auto item = items.rbegin(); item != items.rend(); ++item) {
-               T *frame = dynamic_cast<T*>(*item);
-               if (frame)
-                       return frame;
-       }
-       return nullptr;
-}
-
 FrameController *NaviFrameController::getTopFrame() const
 {
        return static_cast<FrameController*>(NaviFrameView::getTopFrame());
index da01df48f716dd9982b980eb3c8c2c5c992ea618..97d01ea5493cc5ad167ee22860f1b71716680fe1 100644 (file)
@@ -185,6 +185,18 @@ namespace Msg {
                         * @return true in case of restriction, false otherwise.
                         */
                        virtual bool isRestrictedByDpm() const = 0;
+
+                       /**
+                        * @brief Checks whether message is draft or not.
+                        * @return true if message is draft, false otherwise.
+                        */
+                       virtual bool isDraft() const = 0;
+
+                       /**
+                        * @brief Checks whether is spam or not.
+                        * @return true if message is spam, false otherwise.
+                        */
+                       virtual bool isSpam() const = 0;
        };
 }
 
index 74ffb52200fa779a58c1d6ed29d501747189ee24..0d0a7c7ce60b75e514a22f02df8a947a2aeedf98 100644 (file)
@@ -91,6 +91,12 @@ namespace Msg {
                         */
                        virtual bool isDraft() const = 0;
 
+                       /**
+                        * @brief Checks whether conversation-item is related to spam message or not.
+                        * @return true if message is spam, false otherwise.
+                        */
+                       virtual bool isSpam() const = 0;
+
                        /**
                         * @brief Checks whether conversation-item is related to read message or not.
                         * @return true if message is read, false otherwise.
index 29e598f11b97e3163c2a3982b70ec2509833dee5..28c9705e8371bd6ea00a684d00ff8964bb413546 100644 (file)
@@ -144,3 +144,13 @@ bool MessageDummy::isRestrictedByDpm() const
 {
        return false;
 }
+
+bool MessageDummy::isDraft() const
+{
+       return false;
+}
+
+bool MessageDummy::isSpam() const
+{
+       return false;
+}
index c8e82e6df3c4f92e3e3a94b5fd4c2c3efa810b36..e7061f7f87520781c10352ecb99708a6d050b239 100644 (file)
@@ -50,6 +50,8 @@ namespace Msg
                        virtual Message::MessageStorageType getMessageStorageType() const;
                        virtual bool isMms() const;
                        virtual bool isRestrictedByDpm() const;
+                       virtual bool isDraft() const;
+                       virtual bool isSpam() const;
 
                        void setId(MsgId id);
                        virtual void commit();
index ef4e73e612c78e32f3854d98d04cb2db891023eb..506c1d2a2dbc9462fa3400cd74ef238cda061297 100644 (file)
@@ -92,6 +92,11 @@ bool MsgConversationItemDummy::isDraft() const
        return false;
 }
 
+bool MsgConversationItemDummy::isSpam() const
+{
+       return false;
+}
+
 bool MsgConversationItemDummy::isRead() const
 {
        return true;
index 9e811489c02a127846a0388771bffcc9a63e470f..47982ceb196ff788e4beba147e19b70ef8e5f31d 100644 (file)
@@ -43,6 +43,7 @@ namespace Msg
                        virtual Message::Type getType() const;
                        virtual Message::NetworkStatus getNetworkStatus() const;
                        virtual bool isDraft() const;
+                       virtual bool isSpam() const;
                        virtual bool isRead() const;
                        virtual int getPagesCount() const;
                        virtual int getAttachCount() const;
index ac1b4d9a2d549419fd27a24e3608794468739702..471f8b10c662e380662de110111e439311c9651d 100644 (file)
@@ -174,7 +174,21 @@ bool MessagePrivate::isMms() const
 
 bool MessagePrivate::isRestrictedByDpm() const
 {
-       bool restricted = false;
-       msg_get_bool_value(m_MsgStruct, MSG_MESSAGE_DPM_RESTRICTED_BOOL, &restricted);
-       return restricted;
+       bool res = false;
+       msg_get_bool_value(m_MsgStruct, MSG_MESSAGE_FOLDER_ID_INT, &res);
+       return res;
+}
+
+bool MessagePrivate::isDraft() const
+{
+       int folder = 0;
+       msg_get_int_value(m_MsgStruct, MSG_CONV_MSG_FOLDER_ID_INT, &folder);
+       return folder == MSG_DRAFT_ID;
+}
+
+bool MessagePrivate::isSpam() const
+{
+       int folder = 0;
+       msg_get_int_value(m_MsgStruct, MSG_CONV_MSG_FOLDER_ID_INT, &folder);
+       return folder == MSG_SPAMBOX_ID;
 }
index 9c2bf6c007e5697f2b1a50cd071cc5ab4945a940..04b48ad15bf15fc1417994df36bb1163ab41f3c8 100644 (file)
@@ -49,6 +49,8 @@ namespace Msg {
                        virtual Message::MessageStorageType getMessageStorageType() const;
                        virtual bool isMms() const;
                        virtual bool isRestrictedByDpm() const;
+                       virtual bool isDraft() const;
+                       virtual bool isSpam() const;
 
                        void setId(MsgId id);
                        void set(msg_struct_t msgStruct);
index 879cf887d512baae9cf778706841230d910d858f..5ba21dde4a730dafa264798637617f01c33d3ff4 100644 (file)
@@ -89,7 +89,14 @@ bool MsgConversationItemPrivate::isDraft() const
 {
        int folder = 0;
        msg_get_int_value(m_MsgStruct, MSG_CONV_MSG_FOLDER_ID_INT, &folder);
-       return (folder == MSG_DRAFT_ID);
+       return folder == MSG_DRAFT_ID;
+}
+
+bool MsgConversationItemPrivate::isSpam() const
+{
+       int folder = 0;
+       msg_get_int_value(m_MsgStruct, MSG_CONV_MSG_FOLDER_ID_INT, &folder);
+       return folder == MSG_SPAMBOX_ID;
 }
 
 bool MsgConversationItemPrivate::isRead() const
index 52226c3ae80dabf0e0e57e01027667561dafab07..2af348dff62899d9d6532259e9aa8eb9505dc21f 100644 (file)
@@ -43,6 +43,7 @@ namespace Msg {
                        virtual Message::Type getType() const;
                        virtual Message::NetworkStatus getNetworkStatus() const;
                        virtual bool isDraft() const;
+                       virtual bool isSpam() const;
                        virtual bool isRead() const;
                        virtual int getPagesCount() const;
                        virtual int getAttachCount() const;
index 1d63ff0ecd8a31e304cd6c64ab07db58862d9cc5..ee942a8d33ba78989dfe6de5961d287f41ec530a 100644 (file)
@@ -101,7 +101,6 @@ MsgStoragePrivate::~MsgStoragePrivate()
 {
 }
 
-
 MsgThreadListRef MsgStoragePrivate::getThreadList()
 {
        MsgThreadListRef res;
index ee945cf9b2ff32deca5a2982fe3c9e4d17cef6cf..3c140313bc10ee971c281f39e613b09bc1df0c54 100644 (file)
@@ -50,8 +50,10 @@ namespace Msg
                        };
 
                private:
-                       // NaviFrameItem:
+                       // Frame:
                        void onAttached(ViewItem &item) override;
+                       void onPause() override;
+                       void onResume() override;
 
                        // HW button:
                        void onHwBackButtonPreessed(Evas_Object *obj, void *event);
index 8e5193a659865dc80b573b4cdbea249b730faaf8..2b034bf549a43ddf7048f05d90b956ba57eabe62 100644 (file)
@@ -58,6 +58,7 @@ namespace Msg {
                        void navigateToBottom();
                        bool isEmpty() const;
                        const Recipient &getRecip() const;
+                       void markAsRead();
 
                private:
                        typedef std::unordered_map<MsgId::Type, ConvListItem*> ConvListItemMap;
@@ -94,7 +95,6 @@ namespace Msg {
                        ConvListItem *insertItem(const MsgConversationItem &item);
                        void demoteItem(ConvListItem &item); // move down existing item
                        void clear();
-                       void markAsRead();
                        void resendMsg(ConvListItem &listItem);
 
                private:
index bee46a6f31c1f0df65a932bed4e61cd780ad433e..7896f68afbd88e18f04c4b1bbe17e6721a9e1581 100644 (file)
@@ -291,6 +291,18 @@ void ConvFrame::onAttached(ViewItem &item)
        setContent(*m_pLayout);
 }
 
+void ConvFrame::onPause()
+{
+       MSG_LOG("");
+}
+
+void ConvFrame::onResume()
+{
+       MSG_LOG("");
+       if (m_pList)
+               m_pList->markAsRead();
+}
+
 void ConvFrame::onHwBackButtonPreessed(Evas_Object *obj, void *event)
 {
        MSG_LOG("");
index 61e2e215bf4bdee8e28e9959c78140748bb5056b..be4f473c98a55d8e299449e065e6cac41a2839e6 100644 (file)
@@ -28,6 +28,7 @@
 #include "ContactManager.h"
 #include "Recipient.h"
 #include "TimeUtils.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
@@ -289,7 +290,9 @@ void ConvList::setThreadId(ThreadId id)
 
 void ConvList::markAsRead()
 {
-       if (m_ThreadId.isValid())
+       auto topFrame = App::getInst().getNavigation().getTopFrame();
+       bool isActive = topFrame && !topFrame->isPause();
+       if (m_ThreadId.isValid() && isActive)
                getMsgStorage().setReadStatus(m_ThreadId);
 }
 
@@ -363,7 +366,7 @@ void ConvList::onMsgStorageInsert(const MsgIdList &msgIdList)
                        continue;
 
                MessageRef msg = getMsgStorage().getMessage(msgId);
-               if (msg && msg->getThreadId() == m_ThreadId && msg->getMessageStorageType() != Message::MS_Sim) {
+               if (msg && msg->getThreadId() == m_ThreadId) {
                        MsgConversationItemRef item = getMsgStorage().getConversationItem(msgId);
                        if (item)
                                lastInsertedItem = insertItem(*item);