From a03351d2b22d865c8ffac980e39970c58be2ed98 Mon Sep 17 00:00:00 2001 From: Denis Dolzhenko Date: Mon, 10 Jul 2017 16:40:39 +0300 Subject: [PATCH] TizenRefApp-8796 Integrate MsgInputSelector (part I) Change-Id: I165cce1a98cac653b15a0ad831b561409375d150 Signed-off-by: Denis Dolzhenko --- src/Common/AppControl/inc/AppControlUtils.h | 12 +-- src/Common/AppControl/inc/InputSelector.h | 19 +++- .../AppControl/src/AppControlCompose.cpp | 12 +-- src/Common/AppControl/src/AppControlUtils.cpp | 52 +++++----- src/Common/AppControl/src/ContactPicker.cpp | 5 +- src/Common/AppControl/src/InputSelector.cpp | 24 ++++- src/Common/Controller/inc/FrameController.h | 11 ++- src/Common/Controller/inc/InputFrame.h | 2 +- .../Controller/inc/NaviFrameController.h | 15 ++- src/Common/Controller/src/FrameController.cpp | 8 +- src/Common/Controller/src/InputFrame.cpp | 4 +- .../Controller/src/NaviFrameController.cpp | 94 +++++++++++-------- src/Common/Recipient/inc/Recipient.h | 2 +- src/Common/Recipient/src/Recipient.cpp | 2 +- .../Controller/inc/MsgInputSelector.h | 14 ++- src/Composer/Controller/inc/RecipFrame.h | 3 + src/Composer/Controller/src/ContactFrame.cpp | 2 +- src/Composer/Controller/src/MsgBodyFrame.cpp | 2 +- .../Controller/src/MsgInputSelector.cpp | 35 ++++++- src/Composer/Controller/src/RecipFrame.cpp | 36 ++++--- .../Controller/src/RecipInputFrame.cpp | 2 +- .../Controller/src/SendingOptionsFrame.cpp | 2 +- src/Conversation/Controller/inc/ConvFrame.h | 2 + src/Conversation/Controller/src/ConvFrame.cpp | 8 +- .../Controller/src/MsgThreadFrame.cpp | 2 +- .../Controller/src/SettingsBlockListFrame.cpp | 2 +- .../src/SettingsBlockedMsgDetailFrame.cpp | 2 +- src/Settings/Controller/src/SettingsFrame.cpp | 2 +- .../src/SettingsMenuBlockListFrame.cpp | 2 +- src/Viewer/Controller/inc/Viewer.h | 39 -------- src/Viewer/Controller/src/Viewer.cpp | 33 ------- 31 files changed, 250 insertions(+), 200 deletions(-) delete mode 100644 src/Viewer/Controller/inc/Viewer.h delete mode 100644 src/Viewer/Controller/src/Viewer.cpp diff --git a/src/Common/AppControl/inc/AppControlUtils.h b/src/Common/AppControl/inc/AppControlUtils.h index f008aea..016317e 100644 --- a/src/Common/AppControl/inc/AppControlUtils.h +++ b/src/Common/AppControl/inc/AppControlUtils.h @@ -22,31 +22,31 @@ #include namespace Msg { - struct AppControlUtils { + namespace AppControlUtils { /** *@brief Gets a single string from given app-control handle by a key specified */ - static std::string getExtraData(app_control_h handle, const std::string &key); + std::string getExtraData(app_control_h handle, const std::string &key); /** *@brief Gets a string-array from given app-control handle by a key specified */ - static void getExtraDataArray(app_control_h handle, const std::string &key, std::list &outArray); + std::list getExtraDataArray(app_control_h handle, const std::string &key); /** *@brief Gets a single int number from given app-control handle by a key specified. */ - static int getExtraDataInt(app_control_h handle, const std::string &key); + int getExtraDataInt(app_control_h handle, const std::string &key); /** *@brief Gets an int-array from given app-control handle by a key specified. */ - static void getExtraDataIntArray(app_control_h handle, const std::string &key, std::list &outArray); + std::list getExtraDataIntArray(app_control_h handle, const std::string &key); /** *@brief Gets a single mime type string from given app-control handle. */ - static std::string getMimeType(app_control_h handle); + std::string getMimeType(app_control_h handle); }; } diff --git a/src/Common/AppControl/inc/InputSelector.h b/src/Common/AppControl/inc/InputSelector.h index 653dec3..52eff55 100644 --- a/src/Common/AppControl/inc/InputSelector.h +++ b/src/Common/AppControl/inc/InputSelector.h @@ -19,7 +19,12 @@ #include "AppControlLauncher.h" +#include +#include + namespace Msg { + class IInputSelectorListener; + class InputSelector : public AppControlHandle { @@ -27,14 +32,26 @@ namespace Msg { InputSelector(); virtual ~InputSelector(); + void setListener(IInputSelectorListener *l); + protected: virtual void onKeyboardReply(const std::string &text) {}; - virtual void onVoiceReply(const std::string &text, const std::string &filePath) {}; + virtual void onTemplateReply(const std::string &text) {}; + virtual void onVoiceReply(const std::string &text, const std::list &filePath) {}; virtual void onEmoticonReply(const std::string &emoticon) {}; + virtual void onTerminate() {}; private: void onReply(app_control_h request, app_control_h reply, app_control_result_e result) override; + private: + IInputSelectorListener *m_pListener; + }; + + class IInputSelectorListener { + public: + virtual ~IInputSelectorListener() {} + virtual void onTerminate(InputSelector &) {}; }; } diff --git a/src/Common/AppControl/src/AppControlCompose.cpp b/src/Common/AppControl/src/AppControlCompose.cpp index 2b23028..b13447d 100644 --- a/src/Common/AppControl/src/AppControlCompose.cpp +++ b/src/Common/AppControl/src/AppControlCompose.cpp @@ -80,7 +80,7 @@ AppControlCompose::~AppControlCompose() void AppControlCompose::readRecipients(app_control_h handle) { if (m_RecipientList.empty()) - AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_TO, m_RecipientList); + m_RecipientList = AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_TO); if (m_RecipientList.empty()) { std::string recip = AppControlUtils::getExtraData(handle, APP_CONTROL_DATA_TO); @@ -95,7 +95,7 @@ void AppControlCompose::createComposeOp(app_control_h handle) readRecipients(handle); m_MessageText = AppControlUtils::getExtraData(handle, APP_CONTROL_DATA_TEXT); m_Subject = AppControlUtils::getExtraData(handle, APP_CONTROL_DATA_SUBJECT); - AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH, m_FileList); + m_FileList = AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH); } void AppControlCompose::createShareOp(app_control_h handle) @@ -121,15 +121,13 @@ void AppControlCompose::createShareOp(app_control_h handle) void AppControlCompose::createMultiShareOp(app_control_h handle) { if (mimeContact == AppControlUtils::getMimeType(handle)) { - std::list contactsList; - AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_ID, contactsList); + auto contactsList = AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_ID); for (auto it : contactsList) m_VcfInfo.contactsIdList.push_back(atoi(it.c_str())); } - AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH, m_FileList); + m_FileList = AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH); parseUriShare(handle); - } void AppControlCompose::createShareTextOp(app_control_h handle) @@ -137,7 +135,7 @@ void AppControlCompose::createShareTextOp(app_control_h handle) parseUriShare(handle); m_MessageText = AppControlUtils::getExtraData(handle, APP_CONTROL_DATA_TEXT); m_Subject = AppControlUtils::getExtraData(handle, APP_CONTROL_DATA_SUBJECT); - AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH, m_FileList); + m_FileList = AppControlUtils::getExtraDataArray(handle, APP_CONTROL_DATA_PATH); } AppControlCompose::OpComposeType AppControlCompose::getComposeType() const diff --git a/src/Common/AppControl/src/AppControlUtils.cpp b/src/Common/AppControl/src/AppControlUtils.cpp index 54a0ca2..88ffbf3 100644 --- a/src/Common/AppControl/src/AppControlUtils.cpp +++ b/src/Common/AppControl/src/AppControlUtils.cpp @@ -16,9 +16,10 @@ #include "AppControlUtils.h" -using namespace Msg; +namespace Msg { +namespace AppControlUtils { -std::string AppControlUtils::getExtraData(app_control_h handle, const std::string &key) +std::string getExtraData(app_control_h handle, const std::string &key) { std::string res; char *val = nullptr; @@ -33,67 +34,68 @@ std::string AppControlUtils::getExtraData(app_control_h handle, const std::strin return res; } -void AppControlUtils::getExtraDataArray(app_control_h handle, const std::string &key, std::list &outArray) +std::list getExtraDataArray(app_control_h handle, const std::string &key) { + std::list res; + int arrayLength = 0; char **pArrayVal = nullptr; - if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data_array(handle, key.c_str(), &pArrayVal, &arrayLength)) - { - for (int i = 0; i < arrayLength; ++i) - { - outArray.push_back(pArrayVal[i]); + if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data_array(handle, key.c_str(), &pArrayVal, &arrayLength)) { + for (int i = 0; i < arrayLength; ++i) { + res.push_back(pArrayVal[i]); free(pArrayVal[i]); } free(pArrayVal); } + + return res; } -int AppControlUtils::getExtraDataInt(app_control_h handle, const std::string &key) +int getExtraDataInt(app_control_h handle, const std::string &key) { char *val = nullptr; int parsed = 0; - if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data(handle, key.c_str(), &val) && val) - { + if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data(handle, key.c_str(), &val) && val) { parsed = atoi(val); free(val); } return parsed; } -void AppControlUtils::getExtraDataIntArray(app_control_h handle, const std::string &key, std::list &outArray) +std::list getExtraDataIntArray(app_control_h handle, const std::string &key) { + std::list res; int arrayLength = 0; char **pArrayVal = nullptr; - if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data_array(handle, key.c_str(), &pArrayVal, &arrayLength) - && pArrayVal) - { + if (APP_CONTROL_ERROR_NONE == app_control_get_extra_data_array(handle, key.c_str(), &pArrayVal, &arrayLength) && pArrayVal) { std::string::size_type sz; - for (int i = 0; i < arrayLength; ++i) - { - if (pArrayVal[i]) - { + for (int i = 0; i < arrayLength; ++i) { + if (pArrayVal[i]) { std::string s(pArrayVal[i] ? pArrayVal[i] : ""); free(pArrayVal[i]); int parsed = std::stoi(s, &sz); - if (sz == s.length()) - { - outArray.push_back(parsed); + if (sz == s.length()) { + res.push_back(parsed); } } } free(pArrayVal); } + + return res; } -std::string AppControlUtils::getMimeType(app_control_h handle) +std::string getMimeType(app_control_h handle) { char *mime = nullptr; std::string result; app_control_get_mime(handle, &mime); - if (mime) - { + if (mime) { result = mime; free(mime); } return result; } + +} // AppControlUtils +} // Msg diff --git a/src/Common/AppControl/src/ContactPicker.cpp b/src/Common/AppControl/src/ContactPicker.cpp index 5807a5e..307a25c 100644 --- a/src/Common/AppControl/src/ContactPicker.cpp +++ b/src/Common/AppControl/src/ContactPicker.cpp @@ -61,11 +61,8 @@ bool ContactPicker::launch(size_t howManyToPick) void ContactPicker::onReply(app_control_h request, app_control_h reply, app_control_result_e result) { if (result == APP_CONTROL_RESULT_SUCCEEDED) { - std::list addressIds; std::list result; - - AppControlUtils::getExtraDataIntArray(reply, APP_CONTROL_DATA_SELECTED, addressIds); - + auto addressIds = AppControlUtils::getExtraDataIntArray(reply, APP_CONTROL_DATA_SELECTED); for (int id : addressIds) result.push_back({IContactPickerListener::PhoneType, id}); diff --git a/src/Common/AppControl/src/InputSelector.cpp b/src/Common/AppControl/src/InputSelector.cpp index eb8bd84..3cf368f 100644 --- a/src/Common/AppControl/src/InputSelector.cpp +++ b/src/Common/AppControl/src/InputSelector.cpp @@ -20,6 +20,7 @@ using namespace Msg; InputSelector::InputSelector() + : m_pListener(nullptr) { setOperation(APP_CONTROL_OPERATION_GET_INPUT); } @@ -28,6 +29,11 @@ InputSelector::~InputSelector() { } +void InputSelector::setListener(IInputSelectorListener *l) +{ + m_pListener = l; +} + void InputSelector::onReply(app_control_h request, app_control_h reply, app_control_result_e result) { MSG_LOG("result = ", result); @@ -39,12 +45,20 @@ void InputSelector::onReply(app_control_h request, app_control_h reply, app_cont MSG_LOG("replyType = ", replyType); - if(replyType == "keyboard") + if(replyType == "keyboard") { onKeyboardReply(text); - else if (replyType == "emoticon") - onEmoticonReply(text); - else if (replyType == "voice") - onVoiceReply(text, ""); + } else if (replyType == "emoticon") { + onEmoticonReply(text); + } else if (replyType == "voice") { + auto fileList = AppControlUtils::getExtraDataArray(reply, APP_CONTROL_DATA_PATH); + onVoiceReply(text, fileList); + } if (replyType == "template") { + onTemplateReply(text); + } else { + onTerminate(); + if (m_pListener) + m_pListener->onTerminate(*this); + } } } diff --git a/src/Common/Controller/inc/FrameController.h b/src/Common/Controller/inc/FrameController.h index 2307353..5f6e756 100644 --- a/src/Common/Controller/inc/FrameController.h +++ b/src/Common/Controller/inc/FrameController.h @@ -32,8 +32,15 @@ namespace Msg { public: typedef std::list GroupList; + enum GroupType { + ComposerGroup, + MsgThreadGroup, + ConvGroup, + SettingsGroup + }; + public: - FrameController(NaviFrameController &parent); + FrameController(NaviFrameController &parent, GroupType groupType); virtual ~FrameController(); NaviFrameController &getParent(); @@ -41,6 +48,7 @@ namespace Msg { void addToGroup(FrameController &frame); void removeFromGroup(); const GroupList &getGroupList() const; + GroupType getGroupType() const; void pause(); void resume(); @@ -57,6 +65,7 @@ namespace Msg { private: bool m_IsPause; std::shared_ptr m_GroupList; + GroupType m_GroupType; }; } diff --git a/src/Common/Controller/inc/InputFrame.h b/src/Common/Controller/inc/InputFrame.h index fb9879a..78c0889 100644 --- a/src/Common/Controller/inc/InputFrame.h +++ b/src/Common/Controller/inc/InputFrame.h @@ -25,7 +25,7 @@ namespace Msg { : public FrameController { public: - InputFrame(NaviFrameController &parent); + InputFrame(NaviFrameController &parent, GroupType groupType); virtual ~InputFrame(); Entry &getEntry(); diff --git a/src/Common/Controller/inc/NaviFrameController.h b/src/Common/Controller/inc/NaviFrameController.h index 4978c32..ac34534 100644 --- a/src/Common/Controller/inc/NaviFrameController.h +++ b/src/Common/Controller/inc/NaviFrameController.h @@ -22,14 +22,19 @@ #include "AppControlCompose.h" #include "AppControlDefault.h" #include "AppControlSettings.h" +#include "MsgInputSelector.h" #include "App.h" +#include + namespace Msg { class FrameController; class NaviFrameController : public NaviFrameView - , private IAppListener { + , private IAppListener + , private IInputSelectorListener { + public: NaviFrameController(App &app); virtual ~NaviFrameController(); @@ -73,8 +78,8 @@ namespace Msg { private: bool prepare(const AppControlCommand &cmd); void registerHWButtonEvent(); - bool isUnreadNotificationSingle(AppControlDefault::DefaultType type) const; + bool launchInputSelector(); // H/W buttons: void onHwBackButtonClicked(Evas_Object *obj, void *event_info); @@ -87,6 +92,12 @@ namespace Msg { // App: virtual void onAppPause() override; virtual void onAppResume() override; + + // IInputSelectorListener: + void onTerminate(InputSelector &sender) override; + + private: + std::unique_ptr m_InputSelector; }; } diff --git a/src/Common/Controller/src/FrameController.cpp b/src/Common/Controller/src/FrameController.cpp index 5c11398..0dbd3cb 100644 --- a/src/Common/Controller/src/FrameController.cpp +++ b/src/Common/Controller/src/FrameController.cpp @@ -23,9 +23,10 @@ using namespace Msg; -FrameController::FrameController(NaviFrameController &parent) +FrameController::FrameController(NaviFrameController &parent, GroupType groupType) : NaviFrameItem(parent) , m_IsPause(true) + , m_GroupType(groupType) { newGroup(); } @@ -102,3 +103,8 @@ const FrameController::GroupList &FrameController::getGroupList() const return list; } } + +FrameController::GroupType FrameController::getGroupType() const +{ + return m_GroupType; +} diff --git a/src/Common/Controller/src/InputFrame.cpp b/src/Common/Controller/src/InputFrame.cpp index c7770c1..4775ed6 100644 --- a/src/Common/Controller/src/InputFrame.cpp +++ b/src/Common/Controller/src/InputFrame.cpp @@ -18,8 +18,8 @@ using namespace Msg; -InputFrame::InputFrame(NaviFrameController &parent) - : FrameController(parent) +InputFrame::InputFrame(NaviFrameController &parent, GroupType groupType) + : FrameController(parent, groupType) , m_pLayout(nullptr) , m_pEntry(nullptr) { diff --git a/src/Common/Controller/src/NaviFrameController.cpp b/src/Common/Controller/src/NaviFrameController.cpp index 51415e7..6387d77 100644 --- a/src/Common/Controller/src/NaviFrameController.cpp +++ b/src/Common/Controller/src/NaviFrameController.cpp @@ -90,26 +90,27 @@ bool NaviFrameController::prepare(const AppControlCommand &cmd) void NaviFrameController::execCmd(const AppControlDefaultRef &cmd) { - if (prepare(*cmd)) { - AppControlDefault::DefaultType type = cmd->getDefaultType(); - auto *thread = findTopFrame(); // Check if thread is open - if (!thread) - insertToBottom(*new MsgThreadFrame(*this)); // Push thread list to the bottom - - if (type != AppControlDefault::MainType) { - MessageRef msg = App::getInst().getMsgEngine().getStorage().getMessage(cmd->getMessageId()); //To avoid opening conversation if MsgId is invalid - if (msg) { - auto *conv = findTopFrame(); // Check if conversation is open - if (conv) { - AppControlLauncher::getInst().terminate(); - promote(*conv); - conv->execCmd(cmd); - } else if (type == AppControlDefault::ViewType || type == AppControlDefault::ReplyType || isUnreadNotificationSingle(type)) { - AppControlLauncher::getInst().terminate(); - conv = new ConvFrame(*this); - push(*conv); - conv->execCmd(cmd); - } + if (!prepare(*cmd)) + return; + + AppControlDefault::DefaultType type = cmd->getDefaultType(); + auto *thread = findTopFrame(); // Check if thread is open + if (!thread) + insertToBottom(*new MsgThreadFrame(*this)); // Push thread list to the bottom + + if (type != AppControlDefault::MainType) { + MessageRef msg = App::getInst().getMsgEngine().getStorage().getMessage(cmd->getMessageId()); //To avoid opening conversation if MsgId is invalid + if (msg) { + auto *conv = findTopFrame(); // Check if conversation is open + if (conv) { + AppControlLauncher::getInst().terminate(); + promote(*conv); + conv->execCmd(cmd); + } else if (type == AppControlDefault::ViewType || type == AppControlDefault::ReplyType || isUnreadNotificationSingle(type)) { + AppControlLauncher::getInst().terminate(); + conv = new ConvFrame(*this); + push(*conv); + conv->execCmd(cmd); } } } @@ -117,31 +118,37 @@ void NaviFrameController::execCmd(const AppControlDefaultRef &cmd) void NaviFrameController::execCmd(const AppControlComposeRef &cmd) { - if (prepare(*cmd)) { - AppControlLauncher::getInst().terminate(); - if (cmd->getRecipientList().empty()) { - auto *frame = new RecipFrame(*this); - push(*frame); - frame->execCmd(cmd); + if (!prepare(*cmd)) + return; + + AppControlLauncher::getInst().terminate(); + if (cmd->getRecipientList().empty()) { + auto *frame = new RecipFrame(*this); + push(*frame); + frame->execCmd(cmd); + } else { + if (cmd->getMessageText().empty()) { + launchInputSelector(); } else { auto *frame = new MsgBodyFrame(*this); push(*frame); frame->execCmd(cmd); - }; - } + } + }; } void NaviFrameController::execCmd(const AppControlSettingsRef &cmd) { - if (prepare(*cmd)) { - AppControlLauncher::getInst().terminate(); - auto *frame = findTopFrame(); - if (frame) { - promote(*frame); - } else { - auto *frame = new SettingsFrame(*this); - push(*frame); - } + if (!prepare(*cmd)) + return; + + AppControlLauncher::getInst().terminate(); + auto *frame = findTopFrame(); + if (frame) { + promote(*frame); + } else { + auto *frame = new SettingsFrame(*this); + push(*frame); } } @@ -167,6 +174,13 @@ bool NaviFrameController::isUnreadNotificationSingle(AppControlDefault::DefaultT return type == AppControlDefault::NotificationType && App::getInst().getMsgEngine().getStorage().getUnreadThreadCount() == 1; } +bool NaviFrameController::launchInputSelector() +{ + m_InputSelector.reset(new MsgInputSelector); + m_InputSelector->setListener(this); + return m_InputSelector->launch(); +} + void NaviFrameController::onHwBackButtonClicked(Evas_Object *obj, void *event_info) { auto *top = getTopFrame(); @@ -203,3 +217,9 @@ void NaviFrameController::onBeforeDelete(View &view) App::getInst().removeListener(*this); } +void NaviFrameController::onTerminate(InputSelector &sender) +{ + if (isEmpty()) + App::getInst().exit(); +} + diff --git a/src/Common/Recipient/inc/Recipient.h b/src/Common/Recipient/inc/Recipient.h index efc728a..8fb86c9 100644 --- a/src/Common/Recipient/inc/Recipient.h +++ b/src/Common/Recipient/inc/Recipient.h @@ -72,7 +72,7 @@ namespace Msg { * @param id valid contact id * @return recipient */ - static Recipient getByContactPresonNmberId(int id); + static Recipient getByContactPersonNmberId(int id); private: std::string m_Address; diff --git a/src/Common/Recipient/src/Recipient.cpp b/src/Common/Recipient/src/Recipient.cpp index b2f09d6..5528f23 100644 --- a/src/Common/Recipient/src/Recipient.cpp +++ b/src/Common/Recipient/src/Recipient.cpp @@ -195,7 +195,7 @@ Recipient Recipient::getByThreadId(ThreadId id) return res; } -Recipient Recipient::getByContactPresonNmberId(int id) +Recipient Recipient::getByContactPersonNmberId(int id) { Recipient res; auto rec = App::getInst().getContactManager().getContactPersonNumber(id); diff --git a/src/Composer/Controller/inc/MsgInputSelector.h b/src/Composer/Controller/inc/MsgInputSelector.h index fd1d821..90d2cdb 100644 --- a/src/Composer/Controller/inc/MsgInputSelector.h +++ b/src/Composer/Controller/inc/MsgInputSelector.h @@ -18,6 +18,8 @@ #define MsgInputSelector_h_ #include "InputSelector.h" +#include "Recipient.h" +#include "AppControlCompose.h" namespace Msg { @@ -27,19 +29,25 @@ namespace Msg { : public InputSelector { public: - MsgInputSelector(FrameController &parent); + MsgInputSelector(FrameController *parent = nullptr); virtual ~MsgInputSelector(); + void setRecip(Recipient recip); + bool execCmd(const AppControlComposeRef &cmd); + protected: + void onTemplateReply(const std::string &text) override; void onKeyboardReply(const std::string &text) override; - void onVoiceReply(const std::string &text, const std::string &filePath) override; + void onVoiceReply(const std::string &text, const std::list &filePath) override; void onEmoticonReply(const std::string &emoticon) override; private: void navigateToMsgBody(const std::string &text); private: - FrameController &m_Parent; + FrameController *m_pParent; + Recipient m_Recip; + AppControlComposeRef m_ComposeCmd; }; } diff --git a/src/Composer/Controller/inc/RecipFrame.h b/src/Composer/Controller/inc/RecipFrame.h index 6d167b7..2d236cf 100644 --- a/src/Composer/Controller/inc/RecipFrame.h +++ b/src/Composer/Controller/inc/RecipFrame.h @@ -23,6 +23,7 @@ #include "ContactPicker.h" #include "ContactManager.h" #include "AppControlCompose.h" +#include "MsgInputSelector.h" namespace Msg { @@ -78,6 +79,7 @@ namespace Msg { void setRecip(Recipient recip); void setRecip(std::string address); void clearRecip(); + void navigateToMsgBody(); private: DefaultLayout *m_pBaseLayout; @@ -88,6 +90,7 @@ namespace Msg { Recipient m_Recip; ContactPicker m_ContactPicker; AppControlComposeRef m_ComposeCmd; + MsgInputSelector m_InputSelector; }; } diff --git a/src/Composer/Controller/src/ContactFrame.cpp b/src/Composer/Controller/src/ContactFrame.cpp index 16325a0..882bb30 100644 --- a/src/Composer/Controller/src/ContactFrame.cpp +++ b/src/Composer/Controller/src/ContactFrame.cpp @@ -24,7 +24,7 @@ using namespace Msg; ContactFrame::ContactFrame(NaviFrameController &parent, std::list recips, std::string searchWord) - : FrameController(parent) + : FrameController(parent, ComposerGroup) , m_pList(nullptr) , m_pListener(nullptr) , m_SearchWord(std::move(searchWord)) diff --git a/src/Composer/Controller/src/MsgBodyFrame.cpp b/src/Composer/Controller/src/MsgBodyFrame.cpp index 516b44b..c9e62b4 100644 --- a/src/Composer/Controller/src/MsgBodyFrame.cpp +++ b/src/Composer/Controller/src/MsgBodyFrame.cpp @@ -48,7 +48,7 @@ void MsgBodyFrame::SendInfo::reset() } MsgBodyFrame::MsgBodyFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, ComposerGroup) , m_pLayout(nullptr) , m_pBody(nullptr) , m_pSendingPopup(nullptr) diff --git a/src/Composer/Controller/src/MsgInputSelector.cpp b/src/Composer/Controller/src/MsgInputSelector.cpp index d1ea565..dd9b950 100644 --- a/src/Composer/Controller/src/MsgInputSelector.cpp +++ b/src/Composer/Controller/src/MsgInputSelector.cpp @@ -23,8 +23,8 @@ using namespace Msg; -MsgInputSelector::MsgInputSelector(FrameController &parent) - : m_Parent(parent) +MsgInputSelector::MsgInputSelector(FrameController *parent) + : m_pParent(parent) { } @@ -38,7 +38,13 @@ void MsgInputSelector::onKeyboardReply(const std::string &text) navigateToMsgBody(text); } -void MsgInputSelector::onVoiceReply(const std::string &text, const std::string &filePath) +void MsgInputSelector::onTemplateReply(const std::string &text) +{ + MSG_LOG(""); + navigateToMsgBody(text); +} + +void MsgInputSelector::onVoiceReply(const std::string &text, const std::list &filePath) { MSG_LOG(""); navigateToMsgBody(text); @@ -54,6 +60,29 @@ void MsgInputSelector::navigateToMsgBody(const std::string &text) { NaviFrameController &navi = App::getInst().getNavigation(); auto *frame = new MsgBodyFrame(navi); + if (m_pParent && m_pParent->getGroupType() == FrameController::ComposerGroup) + m_pParent->addToGroup(*frame); frame->setText(text); + frame->setRecip(m_Recip); navi.push(*frame); } + +void MsgInputSelector::setRecip(Recipient recip) +{ + m_Recip = std::move(recip); +} + +bool MsgInputSelector::execCmd(const AppControlComposeRef &cmd) +{ + if (!cmd) + return false; + + m_ComposeCmd = cmd; + m_Recip.clear(); + + auto &recips = cmd->getRecipientList(); + if (!recips.empty()) + m_Recip = Recipient::getByAddress(recips.front()); + + return true; +} diff --git a/src/Composer/Controller/src/RecipFrame.cpp b/src/Composer/Controller/src/RecipFrame.cpp index e624016..4d88d61 100644 --- a/src/Composer/Controller/src/RecipFrame.cpp +++ b/src/Composer/Controller/src/RecipFrame.cpp @@ -26,12 +26,13 @@ using namespace Msg; RecipFrame::RecipFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, ComposerGroup) , m_pBaseLayout(nullptr) , m_pLayout(nullptr) , m_pNextButton(nullptr) , m_pRecipField(nullptr) , m_pInputFrame(nullptr) + , m_InputSelector(this) { MSG_LOG(""); @@ -141,6 +142,21 @@ void RecipFrame::showInputFrame() } } +void RecipFrame::navigateToMsgBody() +{ + if (m_ComposeCmd) { + auto *frame = new MsgBodyFrame(getParent()); + frame->setRecip(m_Recip); + frame->setText(m_ComposeCmd->getMessageText()); + frame->setCloseAfterSentFlag(); + addToGroup(*frame); + getParent().push(*frame); + } else { + m_InputSelector.setRecip(m_Recip); + m_InputSelector.launch(); + } +} + void RecipFrame::onAttached(ViewItem &item) { MSG_LOG(""); @@ -157,18 +173,10 @@ void RecipFrame::onHwBackButtonPreessed(Evas_Object *obj, void *event_info) void RecipFrame::onNextButtonClicked(Evas_Object *obj, void *event) { MSG_LOG(""); - if (m_Recip.isValid()) { - auto *frame = new MsgBodyFrame(getParent()); - frame->setRecip(m_Recip); - if (m_ComposeCmd) { - frame->setText(m_ComposeCmd->getMessageText()); - frame->setCloseAfterSentFlag(); - } - addToGroup(*frame); - getParent().push(*frame); - } else { + if (m_Recip.isValid()) + navigateToMsgBody(); + else ToastPopup::toast(msgt("IDS_MSG_HEADER_INVALID_RECIPIENT_ABB")); - } } void RecipFrame::onFieldClicked(RecipFieldView &obj) @@ -208,14 +216,14 @@ void RecipFrame::onContactsPicked(const std::list &numberIdList) MSG_LOG("", numberIdList.size()); MSG_LOG("", numberIdList.front().id); MSG_LOG("", numberIdList.front().type); - auto rec = Recipient::getByContactPresonNmberId(numberIdList.front().id); + auto rec = Recipient::getByContactPersonNmberId(numberIdList.front().id); MSG_LOG("", rec.getAddress()); MSG_LOG("", rec.getDispName()); if (!numberIdList.empty() && numberIdList.front().type == IContactPickerListener::PhoneType) - setRecip(Recipient::getByContactPresonNmberId(numberIdList.front().id)); + setRecip(Recipient::getByContactPersonNmberId(numberIdList.front().id)); } void RecipFrame::onContactChanged() diff --git a/src/Composer/Controller/src/RecipInputFrame.cpp b/src/Composer/Controller/src/RecipInputFrame.cpp index 98f0e62..d7bef49 100644 --- a/src/Composer/Controller/src/RecipInputFrame.cpp +++ b/src/Composer/Controller/src/RecipInputFrame.cpp @@ -52,7 +52,7 @@ namespace { } RecipInputFrame::RecipInputFrame(NaviFrameController &parent, const Recipient &recip) - : InputFrame(parent) + : InputFrame(parent, ComposerGroup) , m_pSearchBar(nullptr) , m_pTimer(nullptr) , m_Recip(recip) diff --git a/src/Composer/Controller/src/SendingOptionsFrame.cpp b/src/Composer/Controller/src/SendingOptionsFrame.cpp index 04774fe..3e1b5e9 100644 --- a/src/Composer/Controller/src/SendingOptionsFrame.cpp +++ b/src/Composer/Controller/src/SendingOptionsFrame.cpp @@ -24,7 +24,7 @@ using namespace Msg; SendingOptionsFrame::SendingOptionsFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, ComposerGroup) , m_pList(nullptr) , m_pSendingOptionItem(nullptr) , m_pSendAsTextItem(nullptr) diff --git a/src/Conversation/Controller/inc/ConvFrame.h b/src/Conversation/Controller/inc/ConvFrame.h index f654b03..a37ee46 100644 --- a/src/Conversation/Controller/inc/ConvFrame.h +++ b/src/Conversation/Controller/inc/ConvFrame.h @@ -24,6 +24,7 @@ #include "WorkingDir.h" #include "MoreOption.h" #include "ContactViewer.h" +#include "MsgInputSelector.h" namespace Msg { @@ -127,6 +128,7 @@ namespace Msg WorkingDirRef m_WorkingDir; MoreOptionItemInfo m_MoreOptionItemsInfo[MorOptionMax]; ContactViewer m_ContactViewer; + MsgInputSelector m_InputSelector; }; } diff --git a/src/Conversation/Controller/src/ConvFrame.cpp b/src/Conversation/Controller/src/ConvFrame.cpp index d17b06b..0ced4cb 100644 --- a/src/Conversation/Controller/src/ConvFrame.cpp +++ b/src/Conversation/Controller/src/ConvFrame.cpp @@ -22,14 +22,13 @@ #include "SelectCtxPopup.h" #include "ToastPopup.h" #include "IconTextPopup.h" -#include "MsgBodyFrame.h" #include "Recipient.h" #include "VoiceCall.h" using namespace Msg; ConvFrame::ConvFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, ConvGroup) , m_Mode(InitMode) , m_ThreadId() , m_pLayout(nullptr) @@ -226,9 +225,8 @@ void ConvFrame::updateDeleteViews() void ConvFrame::reply() { - auto *frame = new MsgBodyFrame(getParent()); - frame->setRecip(m_pList->getRecip()); - getParent().push(*frame); + m_InputSelector.setRecip(m_pList->getRecip()); + m_InputSelector.launch(); } void ConvFrame::updateMoreOption() diff --git a/src/MsgThread/Controller/src/MsgThreadFrame.cpp b/src/MsgThread/Controller/src/MsgThreadFrame.cpp index f758730..1e0eb5b 100644 --- a/src/MsgThread/Controller/src/MsgThreadFrame.cpp +++ b/src/MsgThread/Controller/src/MsgThreadFrame.cpp @@ -36,7 +36,7 @@ using namespace Msg; MsgThreadFrame::MsgThreadFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, MsgThreadGroup) , m_pLayout(nullptr) , m_pMoreOption(nullptr) , m_pDeleteButton(nullptr) diff --git a/src/Settings/Controller/src/SettingsBlockListFrame.cpp b/src/Settings/Controller/src/SettingsBlockListFrame.cpp index 01e126e..6f429d8 100644 --- a/src/Settings/Controller/src/SettingsBlockListFrame.cpp +++ b/src/Settings/Controller/src/SettingsBlockListFrame.cpp @@ -32,7 +32,7 @@ using namespace Msg; SettingsBlockListFrame::SettingsBlockListFrame(NaviFrameController &parent, BlockListType type) - : FrameController(parent) + : FrameController(parent, SettingsGroup) , m_BlockListType(type) , m_IsSelectMode(false) , m_pLayout(nullptr) diff --git a/src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp b/src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp index 5aeec8a..9f6824a 100644 --- a/src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp +++ b/src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp @@ -23,7 +23,7 @@ using namespace Msg; SettingsBlockedMsgDetailFrame::SettingsBlockedMsgDetailFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, SettingsGroup) , m_pLayout(nullptr) , m_pMoreOption(nullptr) { diff --git a/src/Settings/Controller/src/SettingsFrame.cpp b/src/Settings/Controller/src/SettingsFrame.cpp index 112ecee..b46c477 100644 --- a/src/Settings/Controller/src/SettingsFrame.cpp +++ b/src/Settings/Controller/src/SettingsFrame.cpp @@ -29,7 +29,7 @@ using namespace Msg; SettingsFrame::SettingsFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, SettingsGroup) , m_pList(nullptr) , m_pAudioItem(nullptr) , m_pBlockListItem(nullptr) diff --git a/src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp b/src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp index 30dbcfa..64b19a3 100644 --- a/src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp +++ b/src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp @@ -28,7 +28,7 @@ using namespace Msg; SettingsMenuBlockListFrame::SettingsMenuBlockListFrame(NaviFrameController &parent) - : FrameController(parent) + : FrameController(parent, SettingsGroup) , m_pList(nullptr) { preapareList(); diff --git a/src/Viewer/Controller/inc/Viewer.h b/src/Viewer/Controller/inc/Viewer.h deleted file mode 100644 index 75ae4b1..0000000 --- a/src/Viewer/Controller/inc/Viewer.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2016 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * 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 ViewerFrame_h_ -#define ViewerFrame_h_ - -#include "FrameController.h" - -namespace Msg -{ - class NaviFrameController; - - class Viewer - : public FrameController - { - public: - Viewer(NaviFrameController &parent, MsgId id); - virtual ~Viewer(); - - private: - // NaviFrameItem: - void onAttached(ViewItem &item) override; - }; -} - -#endif /* ViewerFrame_h_ */ diff --git a/src/Viewer/Controller/src/Viewer.cpp b/src/Viewer/Controller/src/Viewer.cpp deleted file mode 100644 index 89dc3d9..0000000 --- a/src/Viewer/Controller/src/Viewer.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2016 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * 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 "Viewer.h" - -using namespace Msg; - -Viewer::Viewer(NaviFrameController &parent, MsgId id) - : FrameController(parent) -{ -} - -Viewer::~Viewer() -{ -} - -void Viewer::onAttached(ViewItem &item) -{ - FrameController::onAttached(item); -} -- 2.34.1