TSAM-9327 Don't focus to search result and display text after tap message from search... 82/93682/3
authorOleksander Kostenko <o.kostenko@samsung.com>
Tue, 25 Oct 2016 09:20:30 +0000 (12:20 +0300)
committerOleksander Kostenko <o.kostenko@samsung.com>
Wed, 26 Oct 2016 08:21:01 +0000 (11:21 +0300)
Change-Id: I2fde2337a1b6f79c3d6c8517f2497901fa472c99
Signed-off-by: Oleksander Kostenko <o.kostenko@samsung.com>
src/Conversation/ConvList/Controller/inc/ConvList.h
src/Conversation/ConvList/Controller/src/ConvList.cpp
src/Conversation/ConvList/View/inc/ComposeListViewItem.h
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

index ef71a71bf8908109a811217a08c935479f476c5d..f95715ead500aa50db38c9e11119ce1be4e24679 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <unordered_map>
 #include <unordered_set>
+#include <functional>
 
 namespace Msg
 {
@@ -83,7 +84,7 @@ namespace Msg
              * @brief Sets thread id
              * @param[in] thread id
              */
-            void setThreadId(ThreadId id,const std::string &searchWord = std::string());
+            void setThreadId(ThreadId id, const char *searchWord = nullptr);
 
             /**
              * @brief Gets thread id
@@ -138,6 +139,8 @@ namespace Msg
              */
             std::vector<ConvListItem*> getConvItems() const;
 
+            void setBodyFocusCb(std::function<bool()> bodyFocusFunc);
+
         private:
             typedef std::unordered_map<MsgId::Type, ConvListItem*> ConvListItemMap;
             typedef std::unordered_set<std::string> DateLineItemSet;
@@ -204,6 +207,7 @@ namespace Msg
             std::string m_SearchWord;
             BubbleEntityFactory m_BubbleEntityFactory;
             ComposeListItem *m_pComposeItem;
+            std::function<bool()> m_BodyFocusFunc;
     };
 
     class IConvListListener
index 2cd5305ea7b384cd87e1d40b72d89bbde10c70a4..f96586d5a4549135010b681896df667b3c976bdc 100644 (file)
@@ -44,6 +44,7 @@ ConvList::ConvList(Evas_Object *parent, App &app, WorkingDirRef workingDir)
     , m_SearchWord()
     , m_BubbleEntityFactory(app, workingDir)
     , m_pComposeItem(nullptr)
+    , m_BodyFocusFunc()
 {
     create(parent);
 }
@@ -138,7 +139,7 @@ void ConvList::fill()
     }
 }
 
-void ConvList::setThreadId(ThreadId id, const std::string &searchWord)
+void ConvList::setThreadId(ThreadId id, const char *searchWord)
 {
     bool fillList = false;
 
@@ -149,7 +150,7 @@ void ConvList::setThreadId(ThreadId id, const std::string &searchWord)
         updateRecipThumbId();
     }
 
-    if(searchWord != m_SearchWord)
+    if(searchWord && strcmp(searchWord, m_SearchWord.c_str()))
     {
         fillList = true;
         m_SearchWord = searchWord;
@@ -197,7 +198,19 @@ void ConvList::navigateToBottom()
 {
     ListItem *item = m_pList->getLastItem();
     if(item)
-        m_pList->showItem(*item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+    {
+        ComposeListViewItem *composeItem = dynamic_cast<ComposeListViewItem *>(item);
+        if(composeItem && composeItem->isVisible())
+        {
+            m_pList->showItem(*item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+        }
+        else
+        {
+            item = m_pList->getPrevItem(*item);
+            if(item)
+                m_pList->showItem(*item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+        }
+    }
 }
 
 ConvListItem *ConvList::getItem(MsgId msgId) const
@@ -377,6 +390,11 @@ std::vector<ConvListItem*> ConvList::getConvItems() const
     return m_pList->getItems<ConvListItem>();
 }
 
+void ConvList::setBodyFocusCb(std::function<bool()> bodyFocusFunc)
+{
+    m_BodyFocusFunc = std::move(bodyFocusFunc);
+}
+
 void ConvList::onListItemLongPressed(ListItem &listItem)
 {
     ConvListItem *item = dynamic_cast<ConvListItem*>(&listItem);
@@ -512,5 +530,8 @@ void ConvList::onLanguageChanged()
 
 void ConvList::onListResized(Evas_Object *obj, void *eventInfo)
 {
-    navigateToBottom();
+    MSG_LOG("");
+    if(m_BodyFocusFunc && m_BodyFocusFunc())
+        navigateToBottom();
 }
+
index f93368645fb9f987562713a8faa0da31b00de34e..23a798b7dafd2ef6b0932bc153ef12d2eeb0f4c7 100644 (file)
@@ -31,6 +31,7 @@ namespace Msg
 
             void show(bool show);
             void navigate();
+            bool isVisible() const;
 
         protected:
             virtual Evas_Object *getBubbleContent() = 0;
index e90ebb13e7c00f7d7ab8630938b9776bd89e3364..72ba8b849cf6111b6b0ca096ff54d789cb1988e0 100644 (file)
@@ -75,6 +75,11 @@ void ComposeListViewItem::navigate()
     getOwner()->showItem(*this, ELM_GENLIST_ITEM_SCROLLTO_BOTTOM);
 }
 
+bool ComposeListViewItem::isVisible() const
+{
+    return m_Visibility;
+}
+
 void ComposeListViewItem::show(bool show)
 {
     m_Visibility = show;
index eda566de14a043cb599c7c0b2102ed7b867e3ccd..fda743788e3d5cac4a81843d00d4e13fb9e38211 100644 (file)
@@ -67,7 +67,7 @@ namespace Msg
             void navigateToBottom();
             void execCmd(const AppControlComposeRef &cmd);
             void execCmd(const AppControlDefaultRef &cmd);
-            void setThreadId(ThreadId id, const std::string &searchWord = std::string(), bool updateConvList = true, bool updateRecipPanel = true);
+            void setThreadId(ThreadId id, const char *searchWord = nullptr, bool updateConvList = true, bool updateRecipPanel = true);
             void setListener(IConversationListener *listener);
             void forwardMsg(MsgId id);
 
@@ -176,6 +176,7 @@ namespace Msg
             void checkAndSetMsgType(bool force = false);
             void navigateToSlideShow(MsgId id);
             void setBodyFocus();
+            bool getBodyFocus() const;
             void setRecipEntryFocus();
             void resetMsgThread(bool updateConvList = true, bool updateRecipPanel = true);
             void updateActiveNotifPolicy();
index de3aa040dd0e24587eba9fd450a1891c1e0a552c..6289dee5206b971c5999abb3dac013e849977ed5 100644 (file)
@@ -81,7 +81,10 @@ Conversation::~Conversation()
     if(m_pContactsList)
         m_pContactsList->setListener(nullptr);
     if(m_pConvList)
+    {
         m_pConvList->setListener(nullptr);
+        m_pConvList->setBodyFocusCb(nullptr);
+    }
     m_AttachPanel.setListener(nullptr);
     if(m_NnotifyConvertMsgTypeIdler)
     {
@@ -268,7 +271,7 @@ void Conversation::updateActiveNotifPolicy()
         getMsgEngine().getSettings().setActiveNotifPolicy(threadId);
 }
 
-void Conversation::setThreadId(ThreadId id, const std::string &searchWord, bool updateConvList, bool updateRecipPanel)
+void Conversation::setThreadId(ThreadId id, const char *searchWord, bool updateConvList, bool updateRecipPanel)
 {
     MSG_LOG("Thread id = ", id);
     m_ThreadId = id;
@@ -413,6 +416,7 @@ void Conversation::showConvList(bool show)
         if(!m_pConvList)
         {
             m_pConvList = new ConvList(*m_pLayout, getApp(), m_WorkingDir);
+            m_pConvList->setBodyFocusCb(std::bind(&Conversation::getBodyFocus, this));
             m_pConvList->setListener(this);
             m_pConvList->show();
             m_pLayout->setConvList(*m_pConvList);
@@ -824,6 +828,11 @@ void Conversation::setBodyFocus()
     }
 }
 
+bool Conversation::getBodyFocus() const
+{
+    return m_pBody ? m_pBody->getFocus() : false;
+}
+
 void Conversation::setRecipEntryFocus()
 {
     if(getOwner().getTransitionStatus())
index ee55d646e5c25c58ba51c23098d3aab3538016f1..114ad2bc59304547631583f9b9269e54029b51d1 100644 (file)
@@ -132,7 +132,7 @@ void MsgThread::navigateToSettings()
 void MsgThread::navigateToConversation(ThreadId threadId, MsgId msgId, const std::string &searchWord)
 {
     Conversation *frame = new Conversation(getParent());
-    frame->setThreadId(threadId, searchWord);
+    frame->setThreadId(threadId, searchWord.c_str());
     if(msgId.isValid())
         frame->navigateTo(msgId);
     else