From: Denis Dolzhenko Date: Fri, 9 Sep 2016 11:39:08 +0000 (+0300) Subject: TizenRefApp-6633 Active notification displayed when Messages app launched (part I) X-Git-Tag: submit/tizen/20160916.133943^2~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=18d6588bc66ba3870bd5f574a81ec5c0909ab828;p=profile%2Fmobile%2Fapps%2Fnative%2Fmessage.git TizenRefApp-6633 Active notification displayed when Messages app launched (part I) Change-Id: I7b71a253f6c1c90762f7b0e588f1f6bcea6c68be Signed-off-by: Denis Dolzhenko --- diff --git a/src/Common/Controller/inc/App.h b/src/Common/Controller/inc/App.h index 15d41316..575a664a 100644 --- a/src/Common/Controller/inc/App.h +++ b/src/Common/Controller/inc/App.h @@ -61,6 +61,8 @@ namespace Msg void removeListener(IAppListener &l); bool isPause() const; + void updateActiveNotifPolicy(); + protected: bool init(); void pause(); diff --git a/src/Common/Controller/src/App.cpp b/src/Common/Controller/src/App.cpp index 3f845814..f9bfcd20 100644 --- a/src/Common/Controller/src/App.cpp +++ b/src/Common/Controller/src/App.cpp @@ -20,6 +20,8 @@ #include "Logger.h" #include "ContactManager.h" #include "PathUtils.h" +#include "MsgEngine.h" +#include "MsgSettings.h" #include @@ -160,11 +162,19 @@ void App::pause() m_IsPause = true; for(IAppListener *l : m_Listeners) l->onAppPause(); + updateActiveNotifPolicy(); } void App::resume() { m_IsPause = false; + updateActiveNotifPolicy(); for(IAppListener *l : m_Listeners) l->onAppResume(); } + +void App::updateActiveNotifPolicy() +{ + MsgSettings::ActiveNotifPolicy policy = isPause() ? MsgSettings::AppBackgroundPolicy :MsgSettings::AppForegroundPolicy; + getMsgEngine().getSettings().setActiveNotifPolicy(policy); +} diff --git a/src/Common/MsgEngine/inc/MsgSettings.h b/src/Common/MsgEngine/inc/MsgSettings.h index 5c5f3f95..47e22a4e 100644 --- a/src/Common/MsgEngine/inc/MsgSettings.h +++ b/src/Common/MsgEngine/inc/MsgSettings.h @@ -18,6 +18,8 @@ #ifndef __MsgSettings_h__ #define __MsgSettings_h__ +#include "MsgTypes.h" + #include #include @@ -27,6 +29,13 @@ namespace Msg class MsgSettings { + public: + enum ActiveNotifPolicy + { + AppBackgroundPolicy, // App is not running or on background. + AppForegroundPolicy // App is running and on foreground, but not in conversation. + }; + public: MsgSettings(); virtual ~MsgSettings(); @@ -70,6 +79,9 @@ namespace Msg virtual void setMmsAutoRetrRoaming(bool value) = 0; virtual bool getMmsAutoRetrRoaming() const = 0; + virtual void setActiveNotifPolicy(ActiveNotifPolicy type) = 0; + virtual void setActiveNotifPolicy(ThreadId id) = 0; + protected: typedef std::vector MsgSettingsListeners; diff --git a/src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp b/src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp index 8302c8f0..c3cc17d0 100644 --- a/src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp +++ b/src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp @@ -38,6 +38,8 @@ MsgSettingsPrivate::MsgSettingsPrivate(msg_handle_t serviceHandle) , m_SmsSendOpt() , m_MmsSendOpt() , m_MmsRecvOpt() + , m_pActiveNotifJob(nullptr) + , m_ActiveNotifValue(0) { init(); } @@ -64,6 +66,13 @@ void MsgSettingsPrivate::init() void MsgSettingsPrivate::finit() { + if(m_pActiveNotifJob) + { + ecore_job_del(m_pActiveNotifJob); + m_pActiveNotifJob= nullptr; + // TODO: apply m_ActiveNotifValue when API will be ready + MSG_LOG("ActiveNotifValue = ", m_ActiveNotifValue); + } msg_release_struct(&m_MmsRecvOpt); msg_release_struct(&m_MmsSendOpt); msg_release_struct(&m_SmsSendOpt); @@ -269,3 +278,32 @@ bool MsgSettingsPrivate::getMmsAutoRetrRoaming() const return res; } +void MsgSettingsPrivate::setActiveNotifPolicy(ActiveNotifPolicy type) +{ + int value = MsgUtilsPrivate::activeNotifPolicyToNative(type); + addJobSetActiveNotifPolicy(value); +} + +void MsgSettingsPrivate::setActiveNotifPolicy(ThreadId id) +{ + addJobSetActiveNotifPolicy(id); +} + +void MsgSettingsPrivate::addJobSetActiveNotifPolicy(int value) +{ + m_ActiveNotifValue = value; + if(!m_pActiveNotifJob) + { + m_pActiveNotifJob = ecore_job_add + ( + [](void *data) + { + auto *self =(MsgSettingsPrivate*)data; + self->m_pActiveNotifJob = nullptr; + // TODO: apply m_ActiveNotifValue when API will be ready + MSG_LOG("ActiveNotifValue = ", self->m_ActiveNotifValue); + }, + this + ); + } +} diff --git a/src/Common/MsgEngine/src/private/MsgSettingsPrivate.h b/src/Common/MsgEngine/src/private/MsgSettingsPrivate.h index b4ab1326..521099a4 100644 --- a/src/Common/MsgEngine/src/private/MsgSettingsPrivate.h +++ b/src/Common/MsgEngine/src/private/MsgSettingsPrivate.h @@ -18,6 +18,8 @@ #define __MsgSettingsPrivate_h__ #include "MsgSettings.h" + +#include #include namespace Msg @@ -64,9 +66,13 @@ namespace Msg virtual void setMmsAutoRetrRoaming(bool value); virtual bool getMmsAutoRetrRoaming() const; + virtual void setActiveNotifPolicy(ActiveNotifPolicy type); + virtual void setActiveNotifPolicy(ThreadId id); + private: void init(); void finit(); + void addJobSetActiveNotifPolicy(int value); private: msg_handle_t m_ServiceHandle; @@ -74,6 +80,8 @@ namespace Msg msg_struct_t m_SmsSendOpt; msg_struct_t m_MmsSendOpt; msg_struct_t m_MmsRecvOpt; + Ecore_Job *m_pActiveNotifJob; + int m_ActiveNotifValue; }; } diff --git a/src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp b/src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp index 4b65c1c5..0e2e310f 100644 --- a/src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp +++ b/src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp @@ -301,3 +301,17 @@ Message::NetworkStatus MsgUtilsPrivate::nativeToNetworkStatus(int status) }; return Message::NS_Unknown; } + +int MsgUtilsPrivate::activeNotifPolicyToNative(MsgSettings::ActiveNotifPolicy policy) +{ + switch(policy) + { + case MsgSettings::AppBackgroundPolicy: + return -1; + case MsgSettings::AppForegroundPolicy: + return 0; + default: + assert(false); + } + return 0; +} diff --git a/src/Common/MsgEngine/src/private/MsgUtilsPrivate.h b/src/Common/MsgEngine/src/private/MsgUtilsPrivate.h index 23ad2d12..866a2b83 100644 --- a/src/Common/MsgEngine/src/private/MsgUtilsPrivate.h +++ b/src/Common/MsgEngine/src/private/MsgUtilsPrivate.h @@ -21,6 +21,7 @@ #include "MsgMedia.h" #include "MsgReport.h" #include "MsgUtils.h" +#include "MsgSettings.h" #include #include @@ -47,6 +48,7 @@ namespace Msg static MsgMedia::Type nativeToSmilType(int type); static int smilTypeToNative(MsgMedia::Type type); static Message::NetworkStatus nativeToNetworkStatus(int status); + static int activeNotifPolicyToNative(MsgSettings::ActiveNotifPolicy policy); static std::string getStr(msg_struct_t msgStruct, int field, int maxStrLen); static int setStr(msg_struct_t msgStruct, int field, const std::string &text); diff --git a/src/Conversation/ConvList/Controller/inc/ConvList.h b/src/Conversation/ConvList/Controller/inc/ConvList.h index 6cfc5883..661d541b 100644 --- a/src/Conversation/ConvList/Controller/inc/ConvList.h +++ b/src/Conversation/ConvList/Controller/inc/ConvList.h @@ -80,11 +80,17 @@ namespace Msg Mode getMode() const; /** - * @brief Sets valid thread id + * @brief Sets thread id * @param[in] thread id */ void setThreadId(ThreadId id,const std::string &searchWord = std::string()); + /** + * @brief Gets thread id + * @return thread id + */ + ThreadId getThreadId() const; + /** * @brief Navigate to message * @param[in] msgId message id to navigate diff --git a/src/Conversation/ConvList/Controller/src/ConvList.cpp b/src/Conversation/ConvList/Controller/src/ConvList.cpp index 09b2f7e8..d18e8438 100644 --- a/src/Conversation/ConvList/Controller/src/ConvList.cpp +++ b/src/Conversation/ConvList/Controller/src/ConvList.cpp @@ -134,13 +134,15 @@ void ConvList::fill() void ConvList::setThreadId(ThreadId id, const std::string &searchWord) { - if(m_ThreadId != id || m_SearchWord != searchWord) - { - m_ThreadId = id; - m_SearchWord = searchWord; - updateRecipThumbId(); - fill(); - } + m_ThreadId = id; + m_SearchWord = searchWord; + updateRecipThumbId(); + fill(); +} + +ThreadId ConvList::getThreadId() const +{ + return m_ThreadId; } void ConvList::updateRecipThumbId() diff --git a/src/Conversation/Main/Controller/inc/Conversation.h b/src/Conversation/Main/Controller/inc/Conversation.h index e7e7908f..3c84ef84 100644 --- a/src/Conversation/Main/Controller/inc/Conversation.h +++ b/src/Conversation/Main/Controller/inc/Conversation.h @@ -176,6 +176,7 @@ namespace Msg void setBodyFocus(); void setRecipEntryFocus(); void resetMsgThread(); + void updateActiveNotifPolicy(); void showMainPopup(); void showNoRecipPopup(); diff --git a/src/Conversation/Main/Controller/src/Conversation.cpp b/src/Conversation/Main/Controller/src/Conversation.cpp index ea84c937..3b378ba4 100644 --- a/src/Conversation/Main/Controller/src/Conversation.cpp +++ b/src/Conversation/Main/Controller/src/Conversation.cpp @@ -258,8 +258,18 @@ void Conversation::navigateToBottom() m_pConvList->navigateToBottom(); } +void Conversation::updateActiveNotifPolicy() +{ + ThreadId threadId = m_pConvList ? m_pConvList->getThreadId() : ThreadId(); + if(isPause() || !threadId.isValid()) + getApp().updateActiveNotifPolicy(); + else + getMsgEngine().getSettings().setActiveNotifPolicy(threadId); +} + void Conversation::setThreadId(ThreadId id, const std::string &searchWord) { + MSG_LOG("Thread id = ", id); m_ThreadId = id; if(id.isValid()) m_AddressList = getMsgEngine().getStorage().getAddressList(id); @@ -275,9 +285,10 @@ void Conversation::setThreadId(ThreadId id, const std::string &searchWord) m_pRecipPanel->update(m_ThreadId); if(m_pConvList) - m_pConvList->setThreadId(m_ThreadId, searchWord); + m_pConvList->setThreadId(id, searchWord); markAsRead(); + updateActiveNotifPolicy(); checkAndSetMsgType(true); } @@ -818,6 +829,7 @@ void Conversation::onMbeChanged(ConvRecipientsPanel &panel) id = getMsgEngine().getStorage().getThreadId(recips); m_pConvList->setThreadId(id); + updateActiveNotifPolicy(); m_pConvList->navigateToBottom(); } } @@ -957,11 +969,13 @@ void Conversation::onTransitionFinished(NaviFrameItem &item) void Conversation::onPause() { MSG_LOG(""); + updateActiveNotifPolicy(); } void Conversation::onResume() { MSG_LOG(""); + updateActiveNotifPolicy(); } void Conversation::onHwBackButtonClicked() diff --git a/src/Conversation/Recipients/Controller/src/ConvRecipientsPanel.cpp b/src/Conversation/Recipients/Controller/src/ConvRecipientsPanel.cpp index 182b270b..307a288f 100644 --- a/src/Conversation/Recipients/Controller/src/ConvRecipientsPanel.cpp +++ b/src/Conversation/Recipients/Controller/src/ConvRecipientsPanel.cpp @@ -140,12 +140,9 @@ void ConvRecipientsPanel::update(const MsgAddressList &addressList) void ConvRecipientsPanel::update(const ThreadId &threadId) { - if(m_ThreadId != threadId) - { - clear(); - m_ThreadId = threadId; - m_pMbe->update(threadId); - } + clear(); + m_ThreadId = threadId; + m_pMbe->update(threadId); } MbeRecipients::AppendItemStatus ConvRecipientsPanel::appendItem(const std::string &address,