TizenRefApp-8367 Bind conversation title(address) with contact 70/125070/3
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 13 Apr 2017 13:29:10 +0000 (16:29 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 14 Apr 2017 12:08:41 +0000 (05:08 -0700)
Update MoreOption
Implement hide of reply button if recipient is not valid.

Change-Id: I301f7211074c537f34bf321cf53d19e23355b84d
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/Recipient/src/Recipient.cpp
src/Common/View/inc/MoreOption.h
src/Common/View/src/MoreOption.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 6ffb8c57b97a44833082306af47d1dba6b6040c9..db27ca37bb48648ff6ca9116f60dfa92a9a9b3ee 100644 (file)
@@ -112,8 +112,13 @@ Recipient Recipient::getByThreadId(ThreadId id)
     if (id.isValid()) {
         MsgAddressListRef list = App::getInst().getMsgEngine().getStorage().getAddressList(id);
         if (list && !list->isEmpty()) {
-            const MsgAddress &addrr = list->at(0);
-            res.setAddress(addrr.getAddress());
+            std::string firstAddress = list->at(0).getAddress();
+            res.setAddress(firstAddress);
+            ContactAddressRef contactAddress = App::getInst().getContactManager().getContactAddress(firstAddress);
+            if (contactAddress)
+                res.setDispName(contactAddress->getDispName());
+            if (res.getDispName().empty())
+                res.setDispName(firstAddress);
         }
     }
     return res;
index d8c3d45f677e2ebdb1c124a122762ff8d9840f4b..ee036f94d9d3fa1393b4ca249004b642b9f5ea31 100644 (file)
@@ -44,15 +44,38 @@ namespace Msg {
                                          MoreOptionCb cb,
                                          void *userData);
 
+            Eext_Object_Item *prependItem(const TText &mainText,
+                                          Evas_Object *icon,
+                                          MoreOptionCb cb,
+                                          void *userData);
+
+            Eext_Object_Item *prependItem(const TText &mainText,
+                                          const std::string &imgGroupName,
+                                          MoreOptionCb cb,
+                                          void *userData);
+
+            void removeItem(Eext_Object_Item *item);
             void setDirection(Eext_More_Option_Direction direction);
             void setOpened(bool opened);
             bool getOpened() const;
+            void addOpenedCb(Evas_Smart_Cb cb, void *data);
+            void addClosedCb(Evas_Smart_Cb cb, void *data);
 
         private:
             void onItemClicked(Evas_Object *obj, void *event);
             void onItemSelected(Evas_Object *obj, void *event);
-            void onOpened(Evas_Object *obj, void *event);
-            void onClosed(Evas_Object *obj, void *event);
+
+            void prepareItem(Eext_Object_Item *item,
+                             const TText &mainText,
+                             Evas_Object *icon,
+                             MoreOptionCb cb,
+                             void *userData);
+
+            void prepareItem(Eext_Object_Item *item,
+                             const TText &mainText,
+                             const std::string &imgGroupName,
+                             MoreOptionCb cb,
+                             void *userData);
 
             struct ItemData {
                  MoreOptionCb cb;
index ee4a7451648a911c2e0bee3ea02397a3a0405942..f29016572be95049cb4b56bbde4f4ce06f56f531 100644 (file)
@@ -24,8 +24,6 @@ using namespace Msg;
 MoreOption::MoreOption(Evas_Object *parent)
 {
     setEo(eext_more_option_add(parent));
-    addSmartCb("more,option,opened", makeCbFirst(&MoreOption::onOpened), this);
-    addSmartCb("more,option,closed", makeCbFirst(&MoreOption::onClosed), this);
     addSmartCb("item,selected", makeCbFirst(&MoreOption::onItemSelected), this);
     addSmartCb("item,clicked", makeCbFirst(&MoreOption::onItemClicked), this);
 }
@@ -34,15 +32,41 @@ MoreOption::~MoreOption()
 {
 }
 
+void MoreOption::prepareItem(Eext_Object_Item *item,
+                             const TText &mainText,
+                             Evas_Object *icon,
+                             MoreOptionCb cb,
+                             void *userData)
+{
+    m_ItemMap[item] = {cb, userData};
+    eext_more_option_item_part_content_set(item, "item,icon", icon);
+
+    if (mainText.isTranslatable())
+        eext_more_option_item_domain_translatable_part_text_set(item, "selector,main_text", mainText.getDomain(), mainText.getMsg());
+    else
+        eext_more_option_item_part_text_set(item, "selector,main_text", mainText.getMsg());
+}
+
+void MoreOption::prepareItem(Eext_Object_Item *item,
+                             const TText &mainText,
+                             const std::string &imgGroupName,
+                             MoreOptionCb cb,
+                             void *userData)
+{
+    Evas_Object *icon = elm_image_add(getEo());
+    static const std::string imagesPath = PathUtils::getResourcePath(IMAGES_EDJ_PATH);
+    elm_image_file_set(icon, imagesPath.c_str(), imgGroupName.c_str());
+    prepareItem(item, mainText, icon, cb, userData);
+}
+
 Eext_Object_Item *MoreOption::appendItem(const TText &mainText,
                                          const std::string &imgGroupName,
                                          MoreOptionCb cb,
                                          void *userData)
 {
-    Evas_Object *icon = elm_image_add(getEo());
-    static const std::string imagesPath = PathUtils::getResourcePath(IMAGES_EDJ_PATH);
-    elm_image_file_set(icon, imagesPath.c_str(), imgGroupName.c_str());
-    return appendItem(mainText, icon, cb, userData);
+    auto *item = eext_more_option_item_append(getEo());
+    prepareItem(item, mainText, imgGroupName, cb, userData);
+    return item;
 }
 
 Eext_Object_Item *MoreOption::appendItem(const TText &mainText,
@@ -50,18 +74,39 @@ Eext_Object_Item *MoreOption::appendItem(const TText &mainText,
                                          MoreOptionCb cb,
                                          void *userData)
 {
-    Eext_Object_Item *item = eext_more_option_item_append(getEo());
-    m_ItemMap[item] = {cb, userData};
-    eext_more_option_item_part_content_set(item, "item,icon", icon);
+    auto *item = eext_more_option_item_append(getEo());
+    prepareItem(item, mainText, icon, cb, userData);
+    return item;
+}
 
-    if (mainText.isTranslatable())
-        eext_more_option_item_domain_translatable_part_text_set(item, "selector,main_text", mainText.getDomain(), mainText.getMsg());
-    else
-        eext_more_option_item_part_text_set(item, "selector,main_text", mainText.getMsg());
+Eext_Object_Item *MoreOption::prependItem(const TText &mainText,
+                                          Evas_Object *icon,
+                                          MoreOptionCb cb,
+                                          void *userData)
+{
+    auto *item = eext_more_option_item_prepend(getEo());
+    prepareItem(item, mainText, icon, cb, userData);
+    return item;
+}
 
+Eext_Object_Item *MoreOption::prependItem(const TText &mainText,
+                                          const std::string &imgGroupName,
+                                          MoreOptionCb cb,
+                                          void *userData)
+{
+    auto *item = eext_more_option_item_prepend(getEo());
+    prepareItem(item, mainText, imgGroupName, cb, userData);
     return item;
 }
 
+void MoreOption::removeItem(Eext_Object_Item *item)
+{
+    if (item) {
+        m_ItemMap.erase(item);
+        eext_more_option_item_del(item);
+    }
+}
+
 void MoreOption::setDirection(Eext_More_Option_Direction direction)
 {
     eext_more_option_direction_set(getEo(), direction);
@@ -77,6 +122,16 @@ bool MoreOption::getOpened() const
     return eext_more_option_opened_get(getEo());
 }
 
+void MoreOption::addOpenedCb(Evas_Smart_Cb cb, void *data)
+{
+    addSmartCb("more,option,opened", cb, data);
+}
+
+void MoreOption::addClosedCb(Evas_Smart_Cb cb, void *data)
+{
+    addSmartCb("more,option,closed", cb, data);
+}
+
 void MoreOption::onItemClicked(Evas_Object *obj, void *event)
 {
     MSG_LOG("");
@@ -92,13 +147,4 @@ void MoreOption::onItemSelected(Evas_Object *obj, void *event)
     MSG_LOG("");
 }
 
-void MoreOption::onOpened(Evas_Object *obj, void *event)
-{
-    MSG_LOG("");
-}
-
-void MoreOption::onClosed(Evas_Object *obj, void *event)
-{
-    MSG_LOG("");
-}
 
index 9c4b41c8a738debf52b181a9aa7f3535edae92df..e37b0cdfcb34d0af0eebacab7ebb0dfb03994bc8 100644 (file)
 #include "AppControlDefault.h"
 #include "ConvList.h"
 #include "WorkingDir.h"
+#include "MoreOption.h"
 
 namespace Msg
 {
     class DefaultLayout;
-    class MoreOption;
     class BottomButton;
     class SelectButton;
     class CtxPopupItem;
@@ -81,6 +81,24 @@ namespace Msg
             void onReplyButtonClicked(ConvList &list) override;
 
         private:
+            enum MorOptionItemType{
+                MorOptionReply,
+                MorOptionCall,
+                MorOptionLocation,
+                MorOptionRecip,
+                MorOptionBlock,
+                MorOptionUnblock,
+                MorOptionDelete,
+                MorOptionMax
+            };
+
+            struct MoreOptionItemInfo {
+                Eext_Object_Item *item;
+                const char *strId;
+                const char *icon;
+                MoreOptionCb cb;
+            };
+
             void prepareWorkingDir();
             void prepareLayout();
             void prepareMoreOption();
@@ -89,6 +107,9 @@ namespace Msg
             void showSelectPopup();
             void updateDeleteViews();
             void reply();
+            void updateMoreOption();
+            void prepedItem(MorOptionItemType itemType);
+            void removeItem(MorOptionItemType itemType);
 
             void setMode(Mode mode);
             void setDeleteMode(bool value);
@@ -103,6 +124,7 @@ namespace Msg
             BottomButton *m_pDeleteButton;
             SelectButton *m_pSelectButton;
             WorkingDirRef m_WorkingDir;
+            MoreOptionItemInfo m_MoreOptionItemsInfo[MorOptionMax];
     };
 }
 
index df064f2a5e13add8600cfc7a218d5a988318f5ed..461369c94ca63e219dc66de5cecacdb94d46f139 100644 (file)
@@ -22,6 +22,8 @@
 #include "WorkingDir.h"
 #include "BubbleEntityFactory.h"
 #include "ConvListItem.h"
+#include "MsgAddress.h"
+#include "Recipient.h"
 
 #include <unordered_map>
 #include <unordered_set>
@@ -49,6 +51,7 @@ namespace Msg {
             bool deleteCheckedItems();
             void navigateToBottom();
             bool isEmpty() const;
+            const Recipient &getRecip() const;
 
         private:
             typedef std::unordered_map<MsgId::Type, ConvListItem*> ConvListItemMap;
@@ -81,6 +84,7 @@ namespace Msg {
         private:
             bool m_IsDeleteMode;
             ThreadId m_ThreadId;
+            Recipient m_Recip;
             IConvListListener *m_pListener;
             PaddingListViewItem *m_pBottomPadItem;
             ConvReplyListItem *m_pReplyItem;
index e154e8d2ec946d957303094bac8e76f9ec249325..d352c0defaa1823de1bdb3f6bd9a6bdd521eeecd 100644 (file)
@@ -36,6 +36,7 @@ ConvFrame::ConvFrame(NaviFrameController &parent)
     , m_pMoreOption(nullptr)
     , m_pDeleteButton(nullptr)
     , m_pSelectButton(nullptr)
+    , m_MoreOptionItemsInfo {}
 {
     prepareWorkingDir();
     prepareLayout();
@@ -124,13 +125,26 @@ void ConvFrame::prepareMoreOption()
     if (!m_pMoreOption) {
         m_pMoreOption = new MoreOption(*m_pLayout);
         m_pMoreOption->setDirection(EEXT_MORE_OPTION_DIRECTION_RIGHT);
-        m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_REPLY_ABB"), REPLY_MORE_ICON, makeCbLast(&ConvFrame::onReplyClicked), this);
-        m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_CALL_ABB"), CALL_MORE_ICON , makeCbLast(&ConvFrame::onCallClicked), this);
-        m_pMoreOption->appendItem(msgt("WDS_MAPS_OPT_SEND_MY_LOCATION_ABB"), SHARE_LOC_MORE_ICON, makeCbLast(&ConvFrame::onSendMyLocationClicked), this);
-        m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_RECIPIENTS_ABB"), RECIP_MORE_ICON, makeCbLast(&ConvFrame::onRecipientsClicked), this);
-        m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_BLOCK_NUMBER_ABB"), ADD_TO_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onBlockNumberClicked), this);
-        m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_DELETE_ABB"), DELETEG_MORE_ICON, makeCbLast(&ConvFrame::onDeleteClicked), this);
         m_pLayout->setMoreOption(*m_pMoreOption);
+
+        // Prepare ItemsInfo:
+        m_MoreOptionItemsInfo[MorOptionReply] =
+            {nullptr, "WDS_MSG_OPT_REPLY_ABB", REPLY_MORE_ICON, makeCbLast(&ConvFrame::onReplyClicked)};
+        m_MoreOptionItemsInfo[MorOptionCall] =
+            {nullptr, "WDS_MSG_OPT_CALL_ABB", CALL_MORE_ICON, makeCbLast(&ConvFrame::onCallClicked)};
+        m_MoreOptionItemsInfo[MorOptionLocation] =
+            {nullptr, "WDS_MAPS_OPT_SEND_MY_LOCATION_ABB", SHARE_LOC_MORE_ICON, makeCbLast(&ConvFrame::onSendMyLocationClicked)};
+        m_MoreOptionItemsInfo[MorOptionRecip] =
+            {nullptr, "WDS_MSG_OPT_RECIPIENTS_ABB", RECIP_MORE_ICON, makeCbLast(&ConvFrame::onRecipientsClicked)};
+        m_MoreOptionItemsInfo[MorOptionBlock] =
+            {nullptr, "WDS_MSG_OPT_BLOCK_NUMBER_ABB", ADD_TO_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onBlockNumberClicked)};
+        m_MoreOptionItemsInfo[MorOptionUnblock] =
+            {nullptr, "WDS_MSG_OPT_UNBLOCK_NUMBER_ABB", REM_FROM_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onUnblockNumberClicked)};
+        m_MoreOptionItemsInfo[MorOptionDelete] =
+            {nullptr, "WDS_MSG_OPT_DELETE_ABB", DELETEG_MORE_ICON, makeCbLast(&ConvFrame::onDeleteClicked)};
+
+        prepedItem(MorOptionDelete);
+        prepedItem(MorOptionRecip);
     }
 }
 
@@ -159,11 +173,28 @@ void ConvFrame::prepareList()
     }
 }
 
+void ConvFrame::prepedItem(MorOptionItemType itemType)
+{
+    MoreOptionItemInfo &info = m_MoreOptionItemsInfo[itemType];
+    if (!info.item)
+        info.item = m_pMoreOption->prependItem(msgt(info.strId), info.icon, info.cb, this);
+}
+
+void ConvFrame::removeItem(MorOptionItemType itemType)
+{
+    MoreOptionItemInfo &info = m_MoreOptionItemsInfo[itemType];
+    if (info.item) {
+        m_pMoreOption->removeItem(info.item);
+        info.item = nullptr;
+    }
+}
+
 void ConvFrame::setThreadId(ThreadId id)
 {
     m_ThreadId = id;
     m_pList->setThreadId(id);
     m_pList->navigateToBottom();
+    updateMoreOption();
 }
 
 void ConvFrame::showSelectPopup()
@@ -194,11 +225,25 @@ void ConvFrame::updateDeleteViews()
 
 void ConvFrame::reply()
 {
-    Recipient recip = Recipient::getByThreadId(m_ThreadId);
-    auto *frame = new MsgBodyFrame(getParent(), recip);
+    auto *frame = new MsgBodyFrame(getParent(), m_pList->getRecip());
     getParent().push(*frame);
 }
 
+void ConvFrame::updateMoreOption()
+{
+    bool isValid = m_pList->getRecip().isValid();
+    if (isValid) {
+        prepedItem(MorOptionLocation);
+        prepedItem(MorOptionCall);
+        prepedItem(MorOptionReply);
+
+    } else {
+        removeItem(MorOptionReply);
+        removeItem(MorOptionCall);
+        removeItem(MorOptionLocation);
+    }
+}
+
 void ConvFrame::showNumberBlockUnblockPopup(bool isBlocked)
 {
     const char *text = isBlocked ? "WDS_LOGS_TPOP_CALLS_MSGS_TO_GEAR_NUMBER_FROM_THIS_NUMBER_ARE_BLOCKED_ABB"
index 61448fed0bb806e9da71ef0cf33d179172eadf66..789a40061dc611a236d7a5e8bd0b07d709bb9124 100644 (file)
@@ -25,6 +25,9 @@
 #include "ConvDateLineListItem.h"
 #include "TimeUtils.h"
 #include "BubbleEntityFactory.h"
+#include "MsgUtils.h"
+#include "ContactManager.h"
+#include "Recipient.h"
 
 using namespace Msg;
 
@@ -102,13 +105,14 @@ bool ConvList::isEmpty() const
     return getItemsCount<ConvListItem>() == 0;
 }
 
+const Recipient &ConvList::getRecip() const
+{
+    return m_Recip;
+}
+
 void ConvList::updateTitle()
 {
-    MsgAddressListRef list = getMsgStorage().getAddressList(m_ThreadId);
-    if (list && !list->isEmpty() && m_pTitleItem) {
-        m_pTitleItem->setTitle(list->at(0).getAddress(), false);
-        // TODO: Find address in contacts
-    }
+    m_pTitleItem->setTitle(m_Recip.getDispName(), false);
 }
 
 void ConvList::clear()
@@ -138,8 +142,10 @@ void ConvList::fillList()
     }
 
     // Reply item:
-    m_pReplyItem = new ConvReplyListItem;
-    ListView::appendItem(*m_pReplyItem);
+    if (m_Recip.isValid()) {
+        m_pReplyItem = new ConvReplyListItem;
+        ListView::appendItem(*m_pReplyItem);
+    }
 
     // Bottom padding:
     m_pBottomPadItem = new PaddingListViewItem;
@@ -241,6 +247,7 @@ void ConvList::setThreadId(ThreadId id)
 {
     if (m_ThreadId != id) {
         m_ThreadId = id;
+        m_Recip = Recipient::getByThreadId(m_ThreadId);
         fillList();
         updateTitle();
         markAsRead();