TizenRefApp-6898 Integrate new Compose Attachments to conversation-list 37/84237/1
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Wed, 17 Aug 2016 12:19:17 +0000 (15:19 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Wed, 17 Aug 2016 12:19:17 +0000 (15:19 +0300)
Change-Id: Ibabfa0e978858a2ea62252121ca433ee06de2d7b
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
21 files changed:
res/edje/conv_list_bubble.edc
src/Common/AppControl/inc/FileViewer.h
src/Common/AppControl/src/FileViewer.cpp
src/Conversation/ConvList/Controller/inc/ComposeListItem.h
src/Conversation/ConvList/Controller/inc/ConvList.h
src/Conversation/ConvList/Controller/inc/ConvListItem.h
src/Conversation/ConvList/Controller/src/ComposeListItem.cpp
src/Conversation/ConvList/Controller/src/ConvList.cpp
src/Conversation/ConvList/Controller/src/ConvListItem.cpp
src/Conversation/ConvList/View/inc/BubbleBgViewItem.h
src/Conversation/ConvList/View/inc/BubbleVideoViewItem.h
src/Conversation/ConvList/View/inc/ComposeListViewItem.h
src/Conversation/ConvList/View/src/BubbleBgViewItem.cpp
src/Conversation/ConvList/View/src/BubbleImageViewItem.cpp
src/Conversation/ConvList/View/src/BubbleVideoViewItem.cpp
src/Conversation/ConvList/View/src/ComposeListViewItem.cpp
src/Conversation/Main/Controller/inc/Conversation.h
src/Conversation/Main/Controller/src/Conversation.cpp
src/MsgThread/Controller/src/MsgThread.cpp
src/Viewer/Controller/inc/SmilPage.h
src/Viewer/Controller/src/SmilPage.cpp

index e0df0f1..74cbb84 100644 (file)
@@ -443,6 +443,17 @@ collections {
                    rel2 { to_x: "pad.right"; to_y: "pad.bottom";  relative: 0.0 0.0; }
                }
            }
+            part {
+               name: "swl.gesture";
+               type: SWALLOW;
+               scale: 1;
+               repeat_events: 1;
+               description {
+                  state: "default";
+                  rel1.to: "bg";
+                  rel2.to: "bg";
+               }
+           }
        }
        programs {
            program { name: "pressed";
index 831db71..42dbb89 100644 (file)
@@ -25,13 +25,14 @@ namespace Msg
     class FileViewer
     {
         public:
-            FileViewer();
-            ~FileViewer();
+            static FileViewer &getInst();
 
             static bool launch(const std::string &file);
             bool launchWithCopy(const std::string &file);
 
         private:
+            FileViewer();
+            ~FileViewer();
             FileViewer(const FileViewer&) = delete;
             FileViewer& operator=(const FileViewer&) = delete;
 
index c7d6cbc..ea10084 100644 (file)
@@ -34,6 +34,12 @@ FileViewer::~FileViewer()
         FileUtils::remove(m_FilePath);
 }
 
+FileViewer &FileViewer::getInst()
+{
+    static FileViewer inst;
+    return inst;
+}
+
 bool FileViewer::launch(const std::string &file)
 {
     bool res = false;
index f7d9c78..5d99bbe 100644 (file)
@@ -36,6 +36,7 @@ namespace Msg
             ComposeListItem(BubbleEntityFactory &entityFactory);
             virtual ~ComposeListItem();
 
+            std::list<std::string> getAttachments() const;
             void addAttachment(const std::string &filePath);
             void setListener(IComposeListItemListener *l);
 
@@ -49,6 +50,8 @@ namespace Msg
             virtual void onAction(BubbleViewItem &item);
             virtual void onDelClicked(BubbleViewItem &item);
 
+            void deleteEntity(BubbleEntity &entity);
+
         private:
             IComposeListItemListener *m_pListener;
             std::list<BubbleEntity*> m_BubbleEntityList;
index 947739b..0ce799d 100644 (file)
@@ -92,9 +92,9 @@ namespace Msg
             void navigateTo(MsgId msgId);
 
             /**
-             * @brief Navigate to last message
+             * @brief Navigate to bottom
              */
-            void navigateToLastMsg();
+            void navigateToBottom();
 
             /**
              * @brief Deletes selected items in SelectMode
@@ -183,7 +183,6 @@ namespace Msg
             DateLineItemSet m_DateLineItemSet;
             IConvListListener *m_pListener;
             App &m_App;
-            FileViewer m_FileViewer;
             ThumbId m_RecipThumbId;
             std::string m_SearchWord;
             BubbleEntityFactory m_BubbleEntityFactory;
@@ -198,7 +197,7 @@ namespace Msg
             /**
              * @brief called when all messages has been deleted from current thread
              */
-            virtual void onAllItemsDeleted(ConvList &list) {};
+            virtual void onAllConvItemsDeleted(ConvList &list) {};
             virtual void onSlideShow(MsgId id) {};
             virtual void onEditDraftMsg(MsgId id) {};
             virtual void onForwardMsg(MsgId id) {};
index 52671bf..14bb004 100644 (file)
@@ -53,7 +53,6 @@ namespace Msg
              */
             ConvListItem(const MsgConversationItem &item,
                          App &app,
-                         FileViewer &fileViewer,
                          BubbleEntityFactory &bubbleEntityFactory,
                          const std::string &searchWord,
                          const ThumbId &thumbId = invalidThumbId);
@@ -124,7 +123,6 @@ namespace Msg
             IConvListItemListener *m_pListener;
             App &m_App;
             WorkingDirRef m_WorkingDir;
-            FileViewer &m_FileViewer;
             MsgId m_MsgId;
             bool m_IsDraft;
             Message::NetworkStatus m_NetworkStatus;
index a3e3fbb..50210c7 100644 (file)
@@ -20,6 +20,7 @@
 #include "TimeUtils.h"
 #include "BubbleItemContainer.h"
 #include "ListView.h"
+#include "FileViewer.h"
 
 // Bubble items:
 #include "BubbleImageEntity.h"
@@ -29,6 +30,8 @@
 #include "BubbleCalEventEntity.h"
 #include "BubbleContactEntity.h"
 
+#include <algorithm>
+
 using namespace Msg;
 
 ComposeListItem::ComposeListItem(BubbleEntityFactory &entityFactory)
@@ -40,7 +43,11 @@ ComposeListItem::ComposeListItem(BubbleEntityFactory &entityFactory)
 
 ComposeListItem::~ComposeListItem()
 {
-
+    for(BubbleEntity *entity : m_BubbleEntityList)
+    {
+        delete entity;
+    }
+    m_BubbleEntityList.clear();
 }
 
 void ComposeListItem::addAttachment(const std::string &filePath)
@@ -51,15 +58,25 @@ void ComposeListItem::addAttachment(const std::string &filePath)
         if(entity)
         {
             m_BubbleEntityList.push_back(entity);
-            update();
+            updateBubblePart();
             getOwner()->showItem(*this, ELM_GENLIST_ITEM_SCROLLTO_BOTTOM);
         }
     }
 }
 
-void ComposeListItem::setListener(IComposeListItemListener *l)
+std::list<std::string> ComposeListItem::getAttachments() const
 {
+    std::list<std::string> res;
+    for(BubbleEntity *entity : m_BubbleEntityList)
+    {
+        res.push_back(entity->getFilePath());
+    }
+    return res;
+}
 
+void ComposeListItem::setListener(IComposeListItemListener *l)
+{
+    m_pListener = l;
 }
 
 Evas_Object *ComposeListItem::getBubbleContent()
@@ -90,12 +107,26 @@ std::string ComposeListItem::getMsgType()
     return msg("IDS_MSGF_BODY_MMS");
 }
 
-void ComposeListItem::onAction(BubbleViewItem &item)
+void ComposeListItem::deleteEntity(BubbleEntity &entity)
 {
+    auto it = std::find(m_BubbleEntityList.begin(), m_BubbleEntityList.end(), &entity);
+    if(it != m_BubbleEntityList.end())
+    {
+        std::string filePath = entity.getFilePath();
+        delete *it;
+        m_BubbleEntityList.erase(it);
+        updateBubblePart();
+        if(m_pListener)
+            m_pListener->onAttachmentDeleted(filePath);
+    }
+}
 
+void ComposeListItem::onAction(BubbleViewItem &item)
+{
+    FileViewer::launch(item.getEntity().getFilePath());
 }
 
 void ComposeListItem::onDelClicked(BubbleViewItem &item)
 {
-
+    deleteEntity(item.getEntity());
 }
index 841bc4e..61080cb 100644 (file)
@@ -39,7 +39,6 @@ ConvList::ConvList(Evas_Object *parent, App &app, WorkingDirRef workingDir)
     , m_DateLineItemSet()
     , m_pListener(nullptr)
     , m_App(app)
-    , m_FileViewer()
     , m_RecipThumbId(m_App.getThumbnailMaker().getThumbId(ThumbnailMaker::SingleThumb))
     , m_SearchWord()
     , m_BubbleEntityFactory(app, workingDir)
@@ -169,7 +168,7 @@ void ConvList::navigateTo(MsgId msgId)
         m_pList->showItem(*item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
 }
 
-void ConvList::navigateToLastMsg()
+void ConvList::navigateToBottom()
 {
     ListItem *item = m_pList->getLastItem();
     if(item)
@@ -185,9 +184,9 @@ ConvListItem *ConvList::getItem(MsgId msgId) const
 void ConvList::appendItem(const MsgConversationItem &item)
 {
     if(item.getDirection() == Message::MD_Received)
-        appendItem(new ConvListItem(item, m_App, m_FileViewer, m_BubbleEntityFactory, m_SearchWord, m_RecipThumbId));
+        appendItem(new ConvListItem(item, m_App, m_BubbleEntityFactory, m_SearchWord, m_RecipThumbId));
     else
-        appendItem(new ConvListItem(item, m_App, m_FileViewer, m_BubbleEntityFactory, m_SearchWord));
+        appendItem(new ConvListItem(item, m_App, m_BubbleEntityFactory, m_SearchWord));
 }
 
 void ConvList::appendItem(ConvListItem *item)
@@ -221,8 +220,8 @@ bool ConvList::deleteItems(const MsgIdList &idList)
         }
     }
 
-    if(m_pListener && m_pList->isEmpty())
-        m_pListener->onAllItemsDeleted(*this);
+    if(m_pListener && m_ConvListItemMap.empty())
+        m_pListener->onAllConvItemsDeleted(*this);
 
     return res;
 }
@@ -397,7 +396,7 @@ void ConvList::onMsgStorageInsert(const MsgIdList &msgIdList)
         }
     }
     if(inserted)
-        navigateToLastMsg();
+        navigateToBottom(); // TODO: navigate to last inserted message or to compose item ?
 }
 
 void ConvList::onMsgStorageDelete(const MsgIdList &msgIdList)
index 5e0d248..4137e87 100644 (file)
@@ -61,14 +61,12 @@ namespace
 
 ConvListItem::ConvListItem(const MsgConversationItem &item,
                            App &app,
-                           FileViewer &fileViewer,
                            BubbleEntityFactory &bubbleEntityFactory,
                            const std::string &searchWord,
                            const ThumbId &thumbId)
     : ConvListViewItem(getConvItemType(item))
     , m_pListener(nullptr)
     , m_App(app)
-    , m_FileViewer(fileViewer)
     , m_MsgId(item.getMsgId())
     , m_IsDraft(item.isDraft())
     , m_NetworkStatus(item.getNetworkStatus())
@@ -385,7 +383,7 @@ void ConvListItem::onAction(BubbleViewItem &item)
         {
             const std::string &filePath = item.getEntity().getFilePath();
             if(!filePath.empty())
-                m_FileViewer.launchWithCopy(filePath);
+                FileViewer::getInst().launchWithCopy(filePath);
             break;
         }
     }
index 422652d..d558e7a 100644 (file)
@@ -49,6 +49,9 @@ namespace Msg
             void applyColor(Evas_Object *obj) const;
 
         private:
+            Evas_Object *createGestureRect(Evas_Object *parent);
+
+        private:
             BgType m_BgType;
     };
 }
index 9f8fe8f..9ebae15 100644 (file)
@@ -30,7 +30,7 @@ namespace Msg
             virtual ~BubbleVideoViewItem();
 
         private:
-            Evas_Object *createLayout(Evas_Object *parent, const std::string &path);
+            Evas_Object *createIamge(Evas_Object *parent, const std::string &path);
     };
 }
 
index 4f3fe44..0cc1c48 100644 (file)
@@ -34,6 +34,8 @@ namespace Msg
             virtual std::string getTime() = 0;
             virtual std::string getMsgType() = 0;
 
+            void updateBubblePart();
+
         private:
             virtual std::string getText(ListItem &item, const char *part);
             virtual Evas_Object *getContent(ListItem &item, const char *part);
index 47c0fb1..b0897cc 100644 (file)
@@ -47,8 +47,9 @@ BubbleBgViewItem::BubbleBgViewItem(BubbleEntity &entity, Evas_Object *parent, Bg
     }
 
     setEo(addLayout(parent, CONV_LIST_BUBBLE_EDJ_PATH, group));
+    View::setContent(createGestureRect(getEo()), "swl.gesture");
     evas_object_size_hint_align_set(getEo(), 1.0, EVAS_HINT_FILL);
-    attachGestureTapLayer(getEo(), getEo());
+
 }
 
 BubbleBgViewItem::~BubbleBgViewItem()
@@ -99,3 +100,12 @@ void BubbleBgViewItem::applyColor(Evas_Object *obj) const
 {
     applyColor(obj, m_BgType);
 }
+
+Evas_Object *BubbleBgViewItem::createGestureRect(Evas_Object *parent)
+{
+    Evas *e = evas_object_rectangle_add(evas_object_evas_get(parent));
+    Evas_Object *rect = evas_object_rectangle_add(e);
+    evas_object_color_set(rect, 0, 0, 0, 0);
+    attachGestureTapLayer(parent, rect);
+    return rect;
+}
index 181d065..96e328d 100644 (file)
@@ -24,9 +24,9 @@ BubbleImageViewItem::BubbleImageViewItem(BubbleEntity &entity, Evas_Object *pare
     : BubbleViewItem(entity)
 {
     setEo(addLayout(parent, CONV_LIST_BUBBLE_EDJ_PATH, "conv/list/image_item"));
-    attachGestureTapLayer(getEo(), getEo());
     Evas_Object *img = createImage(parent, imagePath);
     setContent(img, "content");
+    attachGestureTapLayer(getEo(), img);
 }
 
 BubbleImageViewItem::~BubbleImageViewItem()
index f4570ab..9176be2 100644 (file)
@@ -23,9 +23,11 @@ using namespace Msg;
 BubbleVideoViewItem::BubbleVideoViewItem(BubbleEntity &entity, Evas_Object *parent, const std::string &imagePath)
     : BubbleViewItem(entity)
 {
-    Evas_Object *layout = createLayout(parent, imagePath);
+    Evas_Object *layout = addLayout(parent, CONV_LIST_BUBBLE_EDJ_PATH, "conv/list/video_item");
     setEo(layout);
-    attachGestureTapLayer(layout, layout);
+    Evas_Object *image = createIamge(layout, imagePath);
+    attachGestureTapLayer(layout, image);
+    setContent(image, "content");
     show();
 }
 
@@ -33,10 +35,9 @@ BubbleVideoViewItem::~BubbleVideoViewItem()
 {
 }
 
-Evas_Object *BubbleVideoViewItem::createLayout(Evas_Object *parent, const std::string &path)
+Evas_Object *BubbleVideoViewItem::createIamge(Evas_Object *parent, const std::string &path)
 {
-    Evas_Object *layout = addLayout(parent, CONV_LIST_BUBBLE_EDJ_PATH, "conv/list/video_item");
-    Evas_Object *image = elm_image_add(layout);
+    Evas_Object *image = elm_image_add(parent);
     elm_image_file_set(image, path.c_str(), nullptr);
     int imageWidth = 0;
     int imageHeight = 0;
@@ -49,7 +50,5 @@ Evas_Object *BubbleVideoViewItem::createLayout(Evas_Object *parent, const std::s
     }
     evas_object_size_hint_min_set(image, imageWidth, imageHeight);
     evas_object_show(image);
-
-    elm_object_part_content_set(layout, "content", image);
-    return layout;
+    return image;
 }
index 99d589d..c0301ec 100644 (file)
@@ -59,3 +59,7 @@ Evas_Object *ComposeListViewItem::getContent(ListItem &item, const char *part)
     return nullptr;
 }
 
+void ComposeListViewItem::updateBubblePart()
+{
+    updateFields(bubbleContentPart, ELM_GENLIST_ITEM_FIELD_CONTENT);
+}
index 594a433..f0861fe 100644 (file)
@@ -63,7 +63,7 @@ namespace Msg
             virtual ~Conversation();
 
             void navigateTo(MsgId msgId);
-            void navigateToLastMsg();
+            void navigateToBottom();
             void execCmd(const AppControlComposeRef &cmd);
             void execCmd(const AppControlDefaultRef &cmd);
             void setThreadId(ThreadId id, const std::string &searchWord = std::string());
@@ -126,7 +126,7 @@ namespace Msg
             void onViewContactDetailsItemPressed(PopupListItem &item);
 
             // IConvListListener:
-            virtual void onAllItemsDeleted(ConvList &list);
+            virtual void onAllConvItemsDeleted(ConvList &list);
             virtual void onEditDraftMsg(MsgId id);
             virtual void onForwardMsg(MsgId id);
             virtual void onSlideShow(MsgId id);
index 4b522b6..5dbef26 100644 (file)
@@ -231,9 +231,9 @@ void Conversation::navigateTo(MsgId msgId)
     m_pConvList->navigateTo(msgId);
 }
 
-void Conversation::navigateToLastMsg()
+void Conversation::navigateToBottom()
 {
-    m_pConvList->navigateToLastMsg();
+    m_pConvList->navigateToBottom();
 }
 
 void Conversation::setThreadId(ThreadId id, const std::string &searchWord)
@@ -765,7 +765,7 @@ void Conversation::onMbeChanged(ConvRecipientsPanel &panel)
             id = getMsgEngine().getStorage().getThreadId(recips);
 
         m_pConvList->setThreadId(id);
-        m_pConvList->navigateToLastMsg();
+        m_pConvList->navigateToBottom();
     }
 }
 
@@ -1130,7 +1130,7 @@ void Conversation::onViewContactDetailsItemPressed(PopupListItem &item)
     ContactViewer::launch(id, ownerType);
 }
 
-void Conversation::onAllItemsDeleted(ConvList &list)
+void Conversation::onAllConvItemsDeleted(ConvList &list)
 {
     MSG_LOG("");
     if(m_Mode != NewMessageMode)
index d9d0e84..ae3f2bc 100644 (file)
@@ -115,7 +115,7 @@ void MsgThread::navigateToConversation(ThreadId threadId, MsgId msgId, const std
     if(msgId.isValid())
         frame->navigateTo(msgId);
     else
-        frame->navigateToLastMsg();
+        frame->navigateToBottom();
     getParent().push(*frame);
 }
 
index f939637..f9d49b0 100644 (file)
@@ -77,7 +77,6 @@ namespace Msg
             bool m_HasAudio;
             SmilImageItemView *m_pImageItem;
             std::list<std::string> m_Attachments;
-            FileViewer m_FileViewer;
             bool m_HasInvalidMedia;
     };
 }
index 4ab3721..42b0f32 100644 (file)
@@ -275,7 +275,7 @@ void SmilPage::buildAttachment(const MsgAttachment& attachment)
 void SmilPage::onItemClicked(SmilAttachmentItemView &item)
 {
     MSG_LOG("");
-    m_FileViewer.launchWithCopy(item.getFilePath());
+    FileViewer::getInst().launchWithCopy(item.getFilePath());
 }
 
 void SmilPage::onSaveButtonClicked(SmilAttachmentItemView &item)