void removeListener(IAppListener &l);
bool isPause() const;
+ void updateActiveNotifPolicy();
+
protected:
bool init();
void pause();
#include "Logger.h"
#include "ContactManager.h"
#include "PathUtils.h"
+#include "MsgEngine.h"
+#include "MsgSettings.h"
#include <algorithm>
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);
+}
#ifndef __MsgSettings_h__
#define __MsgSettings_h__
+#include "MsgTypes.h"
+
#include <string>
#include <vector>
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();
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<IMsgSettingsListener *> MsgSettingsListeners;
, m_SmsSendOpt()
, m_MmsSendOpt()
, m_MmsRecvOpt()
+ , m_pActiveNotifJob(nullptr)
+ , m_ActiveNotifValue(0)
{
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);
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
+ );
+ }
+}
#define __MsgSettingsPrivate_h__
#include "MsgSettings.h"
+
+#include <Ecore.h>
#include <msg_types.h>
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;
msg_struct_t m_SmsSendOpt;
msg_struct_t m_MmsSendOpt;
msg_struct_t m_MmsRecvOpt;
+ Ecore_Job *m_pActiveNotifJob;
+ int m_ActiveNotifValue;
};
}
};
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;
+}
#include "MsgMedia.h"
#include "MsgReport.h"
#include "MsgUtils.h"
+#include "MsgSettings.h"
#include <msg_storage.h>
#include <msg_types.h>
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);
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
*/
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()
void setBodyFocus();
void setRecipEntryFocus();
void resetMsgThread();
+ void updateActiveNotifPolicy();
void showMainPopup();
void showNoRecipPopup();
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);
m_pRecipPanel->update(m_ThreadId);
if(m_pConvList)
- m_pConvList->setThreadId(m_ThreadId, searchWord);
+ m_pConvList->setThreadId(id, searchWord);
markAsRead();
+ updateActiveNotifPolicy();
checkAndSetMsgType(true);
}
id = getMsgEngine().getStorage().getThreadId(recips);
m_pConvList->setThreadId(id);
+ updateActiveNotifPolicy();
m_pConvList->navigateToBottom();
}
}
void Conversation::onPause()
{
MSG_LOG("");
+ updateActiveNotifPolicy();
}
void Conversation::onResume()
{
MSG_LOG("");
+ updateActiveNotifPolicy();
}
void Conversation::onHwBackButtonClicked()
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,