if (id.isValid()) {
MsgAddressListRef list = App::getInst().getMsgEngine().getStorage().getAddressList(id);
if (list && !list->isEmpty()) {
- const MsgAddress &addrr = list->at(0);
- res.setAddress(addrr.getAddress());
+ std::string firstAddress = list->at(0).getAddress();
+ res.setAddress(firstAddress);
+ ContactAddressRef contactAddress = App::getInst().getContactManager().getContactAddress(firstAddress);
+ if (contactAddress)
+ res.setDispName(contactAddress->getDispName());
+ if (res.getDispName().empty())
+ res.setDispName(firstAddress);
}
}
return res;
MoreOptionCb cb,
void *userData);
+ Eext_Object_Item *prependItem(const TText &mainText,
+ Evas_Object *icon,
+ MoreOptionCb cb,
+ void *userData);
+
+ Eext_Object_Item *prependItem(const TText &mainText,
+ const std::string &imgGroupName,
+ MoreOptionCb cb,
+ void *userData);
+
+ void removeItem(Eext_Object_Item *item);
void setDirection(Eext_More_Option_Direction direction);
void setOpened(bool opened);
bool getOpened() const;
+ void addOpenedCb(Evas_Smart_Cb cb, void *data);
+ void addClosedCb(Evas_Smart_Cb cb, void *data);
private:
void onItemClicked(Evas_Object *obj, void *event);
void onItemSelected(Evas_Object *obj, void *event);
- void onOpened(Evas_Object *obj, void *event);
- void onClosed(Evas_Object *obj, void *event);
+
+ void prepareItem(Eext_Object_Item *item,
+ const TText &mainText,
+ Evas_Object *icon,
+ MoreOptionCb cb,
+ void *userData);
+
+ void prepareItem(Eext_Object_Item *item,
+ const TText &mainText,
+ const std::string &imgGroupName,
+ MoreOptionCb cb,
+ void *userData);
struct ItemData {
MoreOptionCb cb;
MoreOption::MoreOption(Evas_Object *parent)
{
setEo(eext_more_option_add(parent));
- addSmartCb("more,option,opened", makeCbFirst(&MoreOption::onOpened), this);
- addSmartCb("more,option,closed", makeCbFirst(&MoreOption::onClosed), this);
addSmartCb("item,selected", makeCbFirst(&MoreOption::onItemSelected), this);
addSmartCb("item,clicked", makeCbFirst(&MoreOption::onItemClicked), this);
}
{
}
+void MoreOption::prepareItem(Eext_Object_Item *item,
+ const TText &mainText,
+ Evas_Object *icon,
+ MoreOptionCb cb,
+ void *userData)
+{
+ m_ItemMap[item] = {cb, userData};
+ eext_more_option_item_part_content_set(item, "item,icon", icon);
+
+ if (mainText.isTranslatable())
+ eext_more_option_item_domain_translatable_part_text_set(item, "selector,main_text", mainText.getDomain(), mainText.getMsg());
+ else
+ eext_more_option_item_part_text_set(item, "selector,main_text", mainText.getMsg());
+}
+
+void MoreOption::prepareItem(Eext_Object_Item *item,
+ const TText &mainText,
+ const std::string &imgGroupName,
+ MoreOptionCb cb,
+ void *userData)
+{
+ Evas_Object *icon = elm_image_add(getEo());
+ static const std::string imagesPath = PathUtils::getResourcePath(IMAGES_EDJ_PATH);
+ elm_image_file_set(icon, imagesPath.c_str(), imgGroupName.c_str());
+ prepareItem(item, mainText, icon, cb, userData);
+}
+
Eext_Object_Item *MoreOption::appendItem(const TText &mainText,
const std::string &imgGroupName,
MoreOptionCb cb,
void *userData)
{
- Evas_Object *icon = elm_image_add(getEo());
- static const std::string imagesPath = PathUtils::getResourcePath(IMAGES_EDJ_PATH);
- elm_image_file_set(icon, imagesPath.c_str(), imgGroupName.c_str());
- return appendItem(mainText, icon, cb, userData);
+ auto *item = eext_more_option_item_append(getEo());
+ prepareItem(item, mainText, imgGroupName, cb, userData);
+ return item;
}
Eext_Object_Item *MoreOption::appendItem(const TText &mainText,
MoreOptionCb cb,
void *userData)
{
- Eext_Object_Item *item = eext_more_option_item_append(getEo());
- m_ItemMap[item] = {cb, userData};
- eext_more_option_item_part_content_set(item, "item,icon", icon);
+ auto *item = eext_more_option_item_append(getEo());
+ prepareItem(item, mainText, icon, cb, userData);
+ return item;
+}
- if (mainText.isTranslatable())
- eext_more_option_item_domain_translatable_part_text_set(item, "selector,main_text", mainText.getDomain(), mainText.getMsg());
- else
- eext_more_option_item_part_text_set(item, "selector,main_text", mainText.getMsg());
+Eext_Object_Item *MoreOption::prependItem(const TText &mainText,
+ Evas_Object *icon,
+ MoreOptionCb cb,
+ void *userData)
+{
+ auto *item = eext_more_option_item_prepend(getEo());
+ prepareItem(item, mainText, icon, cb, userData);
+ return item;
+}
+Eext_Object_Item *MoreOption::prependItem(const TText &mainText,
+ const std::string &imgGroupName,
+ MoreOptionCb cb,
+ void *userData)
+{
+ auto *item = eext_more_option_item_prepend(getEo());
+ prepareItem(item, mainText, imgGroupName, cb, userData);
return item;
}
+void MoreOption::removeItem(Eext_Object_Item *item)
+{
+ if (item) {
+ m_ItemMap.erase(item);
+ eext_more_option_item_del(item);
+ }
+}
+
void MoreOption::setDirection(Eext_More_Option_Direction direction)
{
eext_more_option_direction_set(getEo(), direction);
return eext_more_option_opened_get(getEo());
}
+void MoreOption::addOpenedCb(Evas_Smart_Cb cb, void *data)
+{
+ addSmartCb("more,option,opened", cb, data);
+}
+
+void MoreOption::addClosedCb(Evas_Smart_Cb cb, void *data)
+{
+ addSmartCb("more,option,closed", cb, data);
+}
+
void MoreOption::onItemClicked(Evas_Object *obj, void *event)
{
MSG_LOG("");
MSG_LOG("");
}
-void MoreOption::onOpened(Evas_Object *obj, void *event)
-{
- MSG_LOG("");
-}
-
-void MoreOption::onClosed(Evas_Object *obj, void *event)
-{
- MSG_LOG("");
-}
#include "AppControlDefault.h"
#include "ConvList.h"
#include "WorkingDir.h"
+#include "MoreOption.h"
namespace Msg
{
class DefaultLayout;
- class MoreOption;
class BottomButton;
class SelectButton;
class CtxPopupItem;
void onReplyButtonClicked(ConvList &list) override;
private:
+ enum MorOptionItemType{
+ MorOptionReply,
+ MorOptionCall,
+ MorOptionLocation,
+ MorOptionRecip,
+ MorOptionBlock,
+ MorOptionUnblock,
+ MorOptionDelete,
+ MorOptionMax
+ };
+
+ struct MoreOptionItemInfo {
+ Eext_Object_Item *item;
+ const char *strId;
+ const char *icon;
+ MoreOptionCb cb;
+ };
+
void prepareWorkingDir();
void prepareLayout();
void prepareMoreOption();
void showSelectPopup();
void updateDeleteViews();
void reply();
+ void updateMoreOption();
+ void prepedItem(MorOptionItemType itemType);
+ void removeItem(MorOptionItemType itemType);
void setMode(Mode mode);
void setDeleteMode(bool value);
BottomButton *m_pDeleteButton;
SelectButton *m_pSelectButton;
WorkingDirRef m_WorkingDir;
+ MoreOptionItemInfo m_MoreOptionItemsInfo[MorOptionMax];
};
}
#include "WorkingDir.h"
#include "BubbleEntityFactory.h"
#include "ConvListItem.h"
+#include "MsgAddress.h"
+#include "Recipient.h"
#include <unordered_map>
#include <unordered_set>
bool deleteCheckedItems();
void navigateToBottom();
bool isEmpty() const;
+ const Recipient &getRecip() const;
private:
typedef std::unordered_map<MsgId::Type, ConvListItem*> ConvListItemMap;
private:
bool m_IsDeleteMode;
ThreadId m_ThreadId;
+ Recipient m_Recip;
IConvListListener *m_pListener;
PaddingListViewItem *m_pBottomPadItem;
ConvReplyListItem *m_pReplyItem;
, m_pMoreOption(nullptr)
, m_pDeleteButton(nullptr)
, m_pSelectButton(nullptr)
+ , m_MoreOptionItemsInfo {}
{
prepareWorkingDir();
prepareLayout();
if (!m_pMoreOption) {
m_pMoreOption = new MoreOption(*m_pLayout);
m_pMoreOption->setDirection(EEXT_MORE_OPTION_DIRECTION_RIGHT);
- m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_REPLY_ABB"), REPLY_MORE_ICON, makeCbLast(&ConvFrame::onReplyClicked), this);
- m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_CALL_ABB"), CALL_MORE_ICON , makeCbLast(&ConvFrame::onCallClicked), this);
- m_pMoreOption->appendItem(msgt("WDS_MAPS_OPT_SEND_MY_LOCATION_ABB"), SHARE_LOC_MORE_ICON, makeCbLast(&ConvFrame::onSendMyLocationClicked), this);
- m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_RECIPIENTS_ABB"), RECIP_MORE_ICON, makeCbLast(&ConvFrame::onRecipientsClicked), this);
- m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_BLOCK_NUMBER_ABB"), ADD_TO_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onBlockNumberClicked), this);
- m_pMoreOption->appendItem(msgt("WDS_MSG_OPT_DELETE_ABB"), DELETEG_MORE_ICON, makeCbLast(&ConvFrame::onDeleteClicked), this);
m_pLayout->setMoreOption(*m_pMoreOption);
+
+ // Prepare ItemsInfo:
+ m_MoreOptionItemsInfo[MorOptionReply] =
+ {nullptr, "WDS_MSG_OPT_REPLY_ABB", REPLY_MORE_ICON, makeCbLast(&ConvFrame::onReplyClicked)};
+ m_MoreOptionItemsInfo[MorOptionCall] =
+ {nullptr, "WDS_MSG_OPT_CALL_ABB", CALL_MORE_ICON, makeCbLast(&ConvFrame::onCallClicked)};
+ m_MoreOptionItemsInfo[MorOptionLocation] =
+ {nullptr, "WDS_MAPS_OPT_SEND_MY_LOCATION_ABB", SHARE_LOC_MORE_ICON, makeCbLast(&ConvFrame::onSendMyLocationClicked)};
+ m_MoreOptionItemsInfo[MorOptionRecip] =
+ {nullptr, "WDS_MSG_OPT_RECIPIENTS_ABB", RECIP_MORE_ICON, makeCbLast(&ConvFrame::onRecipientsClicked)};
+ m_MoreOptionItemsInfo[MorOptionBlock] =
+ {nullptr, "WDS_MSG_OPT_BLOCK_NUMBER_ABB", ADD_TO_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onBlockNumberClicked)};
+ m_MoreOptionItemsInfo[MorOptionUnblock] =
+ {nullptr, "WDS_MSG_OPT_UNBLOCK_NUMBER_ABB", REM_FROM_SPAM_MORE_ICON, makeCbLast(&ConvFrame::onUnblockNumberClicked)};
+ m_MoreOptionItemsInfo[MorOptionDelete] =
+ {nullptr, "WDS_MSG_OPT_DELETE_ABB", DELETEG_MORE_ICON, makeCbLast(&ConvFrame::onDeleteClicked)};
+
+ prepedItem(MorOptionDelete);
+ prepedItem(MorOptionRecip);
}
}
}
}
+void ConvFrame::prepedItem(MorOptionItemType itemType)
+{
+ MoreOptionItemInfo &info = m_MoreOptionItemsInfo[itemType];
+ if (!info.item)
+ info.item = m_pMoreOption->prependItem(msgt(info.strId), info.icon, info.cb, this);
+}
+
+void ConvFrame::removeItem(MorOptionItemType itemType)
+{
+ MoreOptionItemInfo &info = m_MoreOptionItemsInfo[itemType];
+ if (info.item) {
+ m_pMoreOption->removeItem(info.item);
+ info.item = nullptr;
+ }
+}
+
void ConvFrame::setThreadId(ThreadId id)
{
m_ThreadId = id;
m_pList->setThreadId(id);
m_pList->navigateToBottom();
+ updateMoreOption();
}
void ConvFrame::showSelectPopup()
void ConvFrame::reply()
{
- Recipient recip = Recipient::getByThreadId(m_ThreadId);
- auto *frame = new MsgBodyFrame(getParent(), recip);
+ auto *frame = new MsgBodyFrame(getParent(), m_pList->getRecip());
getParent().push(*frame);
}
+void ConvFrame::updateMoreOption()
+{
+ bool isValid = m_pList->getRecip().isValid();
+ if (isValid) {
+ prepedItem(MorOptionLocation);
+ prepedItem(MorOptionCall);
+ prepedItem(MorOptionReply);
+
+ } else {
+ removeItem(MorOptionReply);
+ removeItem(MorOptionCall);
+ removeItem(MorOptionLocation);
+ }
+}
+
void ConvFrame::showNumberBlockUnblockPopup(bool isBlocked)
{
const char *text = isBlocked ? "WDS_LOGS_TPOP_CALLS_MSGS_TO_GEAR_NUMBER_FROM_THIS_NUMBER_ARE_BLOCKED_ABB"
#include "ConvDateLineListItem.h"
#include "TimeUtils.h"
#include "BubbleEntityFactory.h"
+#include "MsgUtils.h"
+#include "ContactManager.h"
+#include "Recipient.h"
using namespace Msg;
return getItemsCount<ConvListItem>() == 0;
}
+const Recipient &ConvList::getRecip() const
+{
+ return m_Recip;
+}
+
void ConvList::updateTitle()
{
- MsgAddressListRef list = getMsgStorage().getAddressList(m_ThreadId);
- if (list && !list->isEmpty() && m_pTitleItem) {
- m_pTitleItem->setTitle(list->at(0).getAddress(), false);
- // TODO: Find address in contacts
- }
+ m_pTitleItem->setTitle(m_Recip.getDispName(), false);
}
void ConvList::clear()
}
// Reply item:
- m_pReplyItem = new ConvReplyListItem;
- ListView::appendItem(*m_pReplyItem);
+ if (m_Recip.isValid()) {
+ m_pReplyItem = new ConvReplyListItem;
+ ListView::appendItem(*m_pReplyItem);
+ }
// Bottom padding:
m_pBottomPadItem = new PaddingListViewItem;
{
if (m_ThreadId != id) {
m_ThreadId = id;
+ m_Recip = Recipient::getByThreadId(m_ThreadId);
fillList();
updateTitle();
markAsRead();