From 18d6588bc66ba3870bd5f574a81ec5c0909ab828 Mon Sep 17 00:00:00 2001 From: Denis Dolzhenko Date: Fri, 9 Sep 2016 14:39:08 +0300 Subject: [PATCH] TizenRefApp-6633 Active notification displayed when Messages app launched (part I) Change-Id: I7b71a253f6c1c90762f7b0e588f1f6bcea6c68be Signed-off-by: Denis Dolzhenko --- src/Common/Controller/inc/App.h | 2 ++ src/Common/Controller/src/App.cpp | 10 ++++++ src/Common/MsgEngine/inc/MsgSettings.h | 12 +++++++ .../MsgEngine/src/private/MsgSettingsPrivate.cpp | 38 ++++++++++++++++++++++ .../MsgEngine/src/private/MsgSettingsPrivate.h | 8 +++++ .../MsgEngine/src/private/MsgUtilsPrivate.cpp | 14 ++++++++ src/Common/MsgEngine/src/private/MsgUtilsPrivate.h | 2 ++ .../ConvList/Controller/inc/ConvList.h | 8 ++++- .../ConvList/Controller/src/ConvList.cpp | 16 +++++---- .../Main/Controller/inc/Conversation.h | 1 + .../Main/Controller/src/Conversation.cpp | 16 ++++++++- .../Controller/src/ConvRecipientsPanel.cpp | 9 ++--- 12 files changed, 121 insertions(+), 15 deletions(-) diff --git a/src/Common/Controller/inc/App.h b/src/Common/Controller/inc/App.h index 15d4131..575a664 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 3f84581..f9bfcd2 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 5c5f3f9..47e22a4 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 @@ -28,6 +30,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 8302c8f..c3cc17d 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 b4ab132..521099a 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 4b65c1c..0e2e310 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 23ad2d1..866a2b8 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 6cfc588..661d541 100644 --- a/src/Conversation/ConvList/Controller/inc/ConvList.h +++ b/src/Conversation/ConvList/Controller/inc/ConvList.h @@ -80,12 +80,18 @@ 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 09b2f7e..d18e843 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 e7e7908..3c84ef8 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 ea84c93..3b378ba 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 182b270..307a288 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, -- 2.7.4