From: Oleksander Kostenko Date: Tue, 25 Oct 2016 09:20:30 +0000 (+0300) Subject: TSAM-9327 Don't focus to search result and display text after tap message from search... X-Git-Tag: submit/tizen/20161031.123956~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=59f7c1512a3acff1f5676c04fd92b8224236e1fc;p=profile%2Fmobile%2Fapps%2Fnative%2Fmessage.git TSAM-9327 Don't focus to search result and display text after tap message from search result screen Change-Id: I2fde2337a1b6f79c3d6c8517f2497901fa472c99 Signed-off-by: Oleksander Kostenko --- diff --git a/src/Conversation/ConvList/Controller/inc/ConvList.h b/src/Conversation/ConvList/Controller/inc/ConvList.h index ef71a71b..f95715ea 100644 --- a/src/Conversation/ConvList/Controller/inc/ConvList.h +++ b/src/Conversation/ConvList/Controller/inc/ConvList.h @@ -30,6 +30,7 @@ #include #include +#include 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 getConvItems() const; + void setBodyFocusCb(std::function bodyFocusFunc); + private: typedef std::unordered_map ConvListItemMap; typedef std::unordered_set DateLineItemSet; @@ -204,6 +207,7 @@ namespace Msg std::string m_SearchWord; BubbleEntityFactory m_BubbleEntityFactory; ComposeListItem *m_pComposeItem; + std::function m_BodyFocusFunc; }; class IConvListListener diff --git a/src/Conversation/ConvList/Controller/src/ConvList.cpp b/src/Conversation/ConvList/Controller/src/ConvList.cpp index 2cd5305e..f96586d5 100644 --- a/src/Conversation/ConvList/Controller/src/ConvList.cpp +++ b/src/Conversation/ConvList/Controller/src/ConvList.cpp @@ -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(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 ConvList::getConvItems() const return m_pList->getItems(); } +void ConvList::setBodyFocusCb(std::function bodyFocusFunc) +{ + m_BodyFocusFunc = std::move(bodyFocusFunc); +} + void ConvList::onListItemLongPressed(ListItem &listItem) { ConvListItem *item = dynamic_cast(&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(); } + diff --git a/src/Conversation/ConvList/View/inc/ComposeListViewItem.h b/src/Conversation/ConvList/View/inc/ComposeListViewItem.h index f9336864..23a798b7 100644 --- a/src/Conversation/ConvList/View/inc/ComposeListViewItem.h +++ b/src/Conversation/ConvList/View/inc/ComposeListViewItem.h @@ -31,6 +31,7 @@ namespace Msg void show(bool show); void navigate(); + bool isVisible() const; protected: virtual Evas_Object *getBubbleContent() = 0; diff --git a/src/Conversation/ConvList/View/src/ComposeListViewItem.cpp b/src/Conversation/ConvList/View/src/ComposeListViewItem.cpp index e90ebb13..72ba8b84 100644 --- a/src/Conversation/ConvList/View/src/ComposeListViewItem.cpp +++ b/src/Conversation/ConvList/View/src/ComposeListViewItem.cpp @@ -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; diff --git a/src/Conversation/Main/Controller/inc/Conversation.h b/src/Conversation/Main/Controller/inc/Conversation.h index eda566de..fda74378 100644 --- a/src/Conversation/Main/Controller/inc/Conversation.h +++ b/src/Conversation/Main/Controller/inc/Conversation.h @@ -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(); diff --git a/src/Conversation/Main/Controller/src/Conversation.cpp b/src/Conversation/Main/Controller/src/Conversation.cpp index de3aa040..6289dee5 100644 --- a/src/Conversation/Main/Controller/src/Conversation.cpp +++ b/src/Conversation/Main/Controller/src/Conversation.cpp @@ -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()) diff --git a/src/MsgThread/Controller/src/MsgThread.cpp b/src/MsgThread/Controller/src/MsgThread.cpp index ee55d646..114ad2bc 100644 --- a/src/MsgThread/Controller/src/MsgThread.cpp +++ b/src/MsgThread/Controller/src/MsgThread.cpp @@ -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