</option>
<option id="gnu.cpp.compiler.option.include.paths.1578788940" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/Utils/inc}""/>
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/SystemSettingsManager/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/AppControl/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/ConvList/Controller/inc}""/>
</option>
<option id="gnu.cpp.compiler.option.include.paths.2132319922" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/Utils/inc}""/>
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/SystemSettingsManager/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/AppControl/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/ConvList/Controller/inc}""/>
#include file
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}
${CMAKE_CURRENT_SOURCE_DIR}/inc/
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Common/SystemSettingsManager/inc/
${CMAKE_CURRENT_SOURCE_DIR}/src/Common/AppControl/inc/
${CMAKE_CURRENT_SOURCE_DIR}/src/Common/ContactManager/inc/
${CMAKE_CURRENT_SOURCE_DIR}/src/Common/Controller/inc/
#include "PopupManager.h"
#include "ContactManager.h"
#include "ThumbnailMaker.h"
+#include "SystemSettingsManager.h"
#include <memory>
namespace Msg
ThumbnailMaker &getThumbnailMaker();
const ThumbnailMaker &getThumbnailMaker() const;
+ SystemSettingsManager &getSysSettingsManager();
+ const SystemSettingsManager &getSysSettingsManager() const;
+
void exit();
protected:
ContactManager *m_pContactManager;
PopupManager *m_pPopupManager;
ThumbnailMaker *m_pThumbnailMaker;
+ SystemSettingsManager *m_pSysSettingsManager;
};
}
: m_pContactManager(nullptr)
, m_pPopupManager(nullptr)
, m_pThumbnailMaker(nullptr)
+ , m_pSysSettingsManager(nullptr)
{
int serviceResult = m_Engine.openService();
if(serviceResult != MESSAGES_ERROR_NONE)
delete m_pThumbnailMaker;
delete m_pContactManager;
delete m_pPopupManager;
+ delete m_pSysSettingsManager;
}
bool App::init()
{
+ getSysSettingsManager();
getContactManager();
getMsgEngine();
getThumbnailMaker();
return const_cast<App*>(this)->getThumbnailMaker();
}
+SystemSettingsManager &App::getSysSettingsManager()
+{
+ if(!m_pSysSettingsManager)
+ m_pSysSettingsManager = new SystemSettingsManager;
+ return *m_pSysSettingsManager;
+}
+
+const SystemSettingsManager &App::getSysSettingsManager() const
+{
+ return const_cast<App*>(this)->getSysSettingsManager();
+}
+
void App::exit()
{
terminate();
--- /dev/null
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __SystemSettingsManager_h__
+#define __SystemSettingsManager_h__
+
+#include <vector>
+
+namespace Msg
+{
+ class ISystemSettingsManager;
+
+ class SystemSettingsManager
+ {
+ public:
+ SystemSettingsManager();
+
+ void addListener(ISystemSettingsManager &l);
+ void removeListener(ISystemSettingsManager&l);
+
+ private:
+ SystemSettingsManager(SystemSettingsManager&) = delete;
+ SystemSettingsManager &operator =(const SystemSettingsManager&) = delete;
+
+ void onTimeFormatChanged();
+
+ private:
+ std::vector<ISystemSettingsManager*> m_Listeners;
+ };
+
+ class ISystemSettingsManager
+ {
+ public:
+ virtual ~ISystemSettingsManager() {}
+
+ virtual void onTimeFormatChanged() {};
+ };
+}
+
+#endif /* __SystemSettingsManager_h__ */
--- /dev/null
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SystemSettingsManager.h"
+
+#include <algorithm>
+#include <system_settings.h>
+
+using namespace Msg;
+
+
+#define CALLBACK(method) [](system_settings_key_e key, void *user_data) \
+{ \
+ static_cast<SystemSettingsManager*>(user_data)->method(); \
+}
+
+SystemSettingsManager::SystemSettingsManager()
+{
+ system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, CALLBACK(onTimeFormatChanged), this);
+}
+
+void SystemSettingsManager::addListener(ISystemSettingsManager &l)
+{
+ auto it = std::find(m_Listeners.begin(), m_Listeners.end(), &l);
+ if(it == m_Listeners.end())
+ m_Listeners.push_back(&l);
+}
+
+void SystemSettingsManager::removeListener(ISystemSettingsManager&l)
+{
+ auto it = std::find(m_Listeners.begin(), m_Listeners.end(), &l);
+ if(it != m_Listeners.end())
+ m_Listeners.erase(it);
+}
+
+void SystemSettingsManager::onTimeFormatChanged()
+{
+ for(ISystemSettingsManager *it : m_Listeners)
+ {
+ it->onTimeFormatChanged();
+ }
+}
{ \
static_cast<ClassName*>(data)->method(obj, emission, source); \
}
+
#endif /* CallBackAssist_h_ */
#include "ContactManager.h"
#include "DateLineViewItem.h"
#include "WorkingDir.h"
+
#include <unordered_map>
+#include <unordered_set>
namespace Msg
{
, private IListViewListener
, private IConvListItemListener
, private IContactManagerListener
+ , private ISystemSettingsManager
{
public:
enum Mode
private:
typedef std::unordered_map<MsgId::Type, ConvListItem*> ConvListItemMap;
- typedef std::unordered_map<std::string, DateLineViewItem*> DateLineItemMap;
+ typedef std::unordered_set<std::string> DateLineItemSet;
private:
void create(Evas_Object *parent);
// SelectAll callback:
void onSelectAllChanged(Evas_Object *obj, void *eventInfo);
+ // ISystemSettingsManager:
+ virtual void onTimeFormatChanged();
+
private:
Mode m_Mode;
MsgEngine &m_MsgEngine;
ConvSelectAll *m_pSelectAll;
ListView *m_pList;
ConvListItemMap m_ConvListItemMap;
- DateLineItemMap m_DateLineItemMap;
+ DateLineItemSet m_DateLineItemSet;
IConvListListener *m_pListner;
App &m_App;
WorkingDirRef m_WorkingDir;
void setListener(IConvListItemListener *l);
void updateStatus();
+ void updateTime();
protected:
// ConvListViewItem:
Message::NetworkStatus m_NetworkStatus;
Message::Type m_Type;
time_t m_Time;
+ std::string m_TimeStr;
BubbleEntity m_BubbleEntity;
const ThumbnailMaker::ThumbId &m_ThumbId;
};
, m_pSelectAll(nullptr)
, m_pList(nullptr)
, m_ConvListItemMap()
- , m_DateLineItemMap()
+ , m_DateLineItemSet()
, m_pListner(nullptr)
, m_App(app)
, m_WorkingDir(workingDir)
{
m_MsgEngine.getStorage().removeListener(*this);
m_App.getContactManager().removeListener(*this);
+ m_App.getSysSettingsManager().removeListener(*this);
}
void ConvList::setListener(IConvListListener *l)
showSelectAllMode(m_Mode == SelectMode);
m_App.getContactManager().addListener(*this);
+ m_App.getSysSettingsManager().addListener(*this);
}
Evas_Object *ConvList::createSelectAll(Evas_Object *parent)
int convListLen = convList->getLength();
int reserveSize = convListLen <= minMessagesBulk/2 ? minMessagesBulk : convListLen + additionalMessagesBulk;
m_ConvListItemMap.reserve(reserveSize);
- m_DateLineItemMap.reserve(reserveSize);
+ m_DateLineItemSet.reserve(reserveSize);
for(int i = 0; i < convListLen; ++i)
{
if(needDelDateLine)
{
- m_DateLineItemMap.erase(prev->getDateLine());
+ m_DateLineItemSet.erase(prev->getDateLine());
m_pList->deleteItem(*prev);
}
}
void ConvList::dateLineAddIfNec(ConvListItem *item)
{
std::string dateStr = TimeUtils::makeBubbleDateLineString(item->getRawTime());
- auto it = m_DateLineItemMap.find(dateStr);
- if (it == m_DateLineItemMap.end())
+ auto it = m_DateLineItemSet.find(dateStr);
+ if (it == m_DateLineItemSet.end())
{
DateLineViewItem *dateLine = new DateLineViewItem(dateStr);
- m_DateLineItemMap[dateStr] = dateLine;
+ m_DateLineItemSet.insert(dateStr);
m_pList->appendItem(*dateLine);
}
}
{
m_pList->clear();
m_ConvListItemMap.clear();
- m_DateLineItemMap.clear();
+ m_DateLineItemSet.clear();
}
void ConvList::deleteSelectedItems()
updateOwnerThumbId();
m_pList->updateRealizedItems();
}
+
+void ConvList::onTimeFormatChanged()
+{
+ MSG_LOG("");
+ auto items = m_pList->getItems<ConvListItem>();
+ for(ConvListItem *item : items)
+ {
+ item->updateTime();
+ }
+ m_pList->updateRealizedItems();
+}
#include "MediaType.h"
#include "MediaUtils.h"
#include <notification_status.h>
+#include "TimeUtils.h"
using namespace Msg;
update();
}
+void ConvListItem::updateTime()
+{
+ m_TimeStr.clear();
+}
+
ConvListViewItem::ConvItemType ConvListItem::getConvItemType(const MsgConversationItem &item)
{
ConvItemType type = ConvItemType::Sent;
std::string ConvListItem::getTime()
{
- return TimeUtils::makeBubbleTimeString(m_Time);
+ if(m_TimeStr.empty())
+ m_TimeStr = TimeUtils::makeBubbleTimeString(m_Time);
+ return m_TimeStr;
}
MsgId ConvListItem::getMsgId() const
BaseThreadListItem(App &app);
virtual ~BaseThreadListItem();
- protected:
void updateThumbnailAndName(const MsgAddressList &addressList, bool decorateName);
void updateThumbnailAndName(const MsgThreadItem &threadItem, bool decorateName);
void updateName(const MsgAddress &address, int addressesCount, bool decorateName);
void updateName(const ContactPersonAddress &address, int addressesCount, bool decorateName);
void updateName(const std::string &address, int addressesCount, bool decorateName);
void updateTime(time_t time);
+ void updateTime();
void updateMessage(const MsgThreadItem &threadItem);
void updateMessage(const std::string &msg);
+ protected:
// ThreadListViewItem:
virtual std::string getName();
virtual std::string getMessage();
std::string m_Name;
std::string m_Message;
std::string m_Time;
+ time_t m_RawTime;
};
}
#include "ListView.h"
#include "MsgStorage.h"
#include "ContactManager.h"
+#include "SystemSettingsManager.h"
namespace Msg
{
, private IMsgStorageListener
, private IListViewListener
, private IContactManagerListener
+ , private ISystemSettingsManager
{
public:
ThreadList(Evas_Object *parent, App &app);
virtual void onListItemSelected(ListItem &listItem);
virtual void onListItemChecked(ListItem &listItem);
+ // ISystemSettingsManager:
+ virtual void onTimeFormatChanged();
+
private:
void showSelectAllItem(bool show, bool resetCheck = true);
void checkAllItems(bool check);
: public ListView
, private IListViewListener
, private IContactManagerListener
+ , private ISystemSettingsManager
{
public:
ThreadSearchList(Evas_Object *parent, App &app);
// IContactManagerListener:
virtual void onContactChanged();
+ // ISystemSettingsManager:
+ virtual void onTimeFormatChanged();
+
void search();
private:
BaseThreadListItem::BaseThreadListItem(App &app)
: m_App(app)
, m_ThumbId(m_App.getThumbnailMaker().getThumbId(ThumbnailMaker::SingleThumb))
+ , m_RawTime()
{
}
void BaseThreadListItem::updateTime(time_t time)
{
+ m_RawTime = time;
m_Time = TimeUtils::makeThreadTimeString(time);
}
+void BaseThreadListItem::updateTime()
+{
+ m_Time = TimeUtils::makeThreadTimeString(m_RawTime);
+}
+
std::string BaseThreadListItem::getName()
{
return m_Name;
ListView::setMode(ELM_LIST_COMPRESS);
m_App.getMsgEngine().getStorage().addListener(*this);
m_App.getContactManager().addListener(*this);
+ m_App.getSysSettingsManager().addListener(*this);
updateList();
}
{
m_App.getMsgEngine().getStorage().removeListener(*this);
m_App.getContactManager().removeListener(*this);
+ m_App.getSysSettingsManager().removeListener(*this);
}
void ThreadList::setListener(IThreadListListener *l)
else if(SelectAllListItem *it = dynamic_cast<SelectAllListItem*>(&listItem))
checkHandler(*it);
}
+
+void ThreadList::onTimeFormatChanged()
+{
+ MSG_LOG("");
+ auto items = ListView::getItems<BaseThreadListItem>();
+ for(BaseThreadListItem *item : items)
+ {
+ item->updateTime();
+ }
+
+ ListView::updateRealizedItems();
+}
#include "MsgEngine.h"
#include "Logger.h"
+
using namespace Msg;
ThreadSearchList::ThreadSearchList(Evas_Object *parent, App &app)
setMode(ELM_LIST_COMPRESS);
ListView::setListener(this);
m_App.getContactManager().addListener(*this);
+ m_App.getSysSettingsManager().addListener(*this);
}
ThreadSearchList::~ThreadSearchList()
{
cancelSearch();
m_App.getContactManager().removeListener(*this);
+ m_App.getSysSettingsManager().removeListener(*this);
}
void ThreadSearchList::setListener(IThreadSearchListListener *l)
{
search();
}
+
+void ThreadSearchList::onTimeFormatChanged()
+{
+ MSG_LOG("");
+ auto items = ListView::getItems<BaseThreadListItem>();
+ for(BaseThreadListItem *item : items)
+ {
+ item->updateTime();
+ }
+
+ ListView::updateRealizedItems();
+}