<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Settings/Controller/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Settings/View/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/MsgThread/Controller/inc}""/>
- <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Viewer/Controller/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/Controller/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/Controller/inc}""/>
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.1744989046" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
<builder buildPath="${workspace_loc:/message}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.447633213" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
<tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.416294632" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
- <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.797108911" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+ <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.797108911" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
<option id="gnu.cpp.compiler.option.optimization.level.2096657891" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
<option defaultValue="gnu.cpp.compiler.debugging.level.none" id="sbi.gnu.cpp.compiler.option.debugging.level.core.1966892429" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
<option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.846171109" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
<option id="sbi.gnu.cpp.compiler.option.1121164022" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
- <listOptionValue builtIn="false" value="wearable-4.0-emulator.core.private_llvm37.i386.core.app"/>
+ <listOptionValue builtIn="false" value="wearable-4.0-emulator.core.private_gcc49.i386.core.app"/>
</option>
<option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.615341266" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
<listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Composer/Controller/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/MsgThread/View/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Settings/Controller/inc}""/>
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Settings/View/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/MsgThread/Controller/inc}""/>
- <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Viewer/Controller/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/Controller/inc}""/>
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/Controller/inc}""/>
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Conversation/View/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/AppControl/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/ContactManager/inc}""/>
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Common/MsgEngine/inc}""/>
<option id="gnu.cpp.compiler.option.other.other.645149247" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -Wno-extern-c-compat" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1209285457" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
- <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1771050593" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+ <tool command="i386-linux-gnueabi-gcc" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1771050593" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.286717071" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option defaultValue="gnu.c.debugging.level.default" id="sbi.gnu.c.compiler.option.debugging.level.core.938868913" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
<option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1186238797" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
<option id="sbi.gnu.c.compiler.option.970496727" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
- <listOptionValue builtIn="false" value="wearable-4.0-emulator.core.private_llvm37.i386.core.app"/>
+ <listOptionValue builtIn="false" value="wearable-4.0-emulator.core.private_gcc49.i386.core.app"/>
</option>
<option id="sbi.gnu.c.compiler.option.frameworks_inc.core.304744111" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
<listOptionValue builtIn="false" value=""${SBI_SYSROOT}/usr/include/libxml2""/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1663389392" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.2058545702" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
- <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.338516224" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+ <tool command="i386-linux-gnueabi-g++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.338516224" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
<option defaultValue="false" id="sbi.gnu.cpp.linker.option.shared_flag.core.76498641" name="Linker.Shared" superClass="sbi.gnu.cpp.linker.option.shared_flag.core" valueType="boolean"/>
<option defaultValue="false" id="sbi.gnu.cpp.linker.option.noundefined.core.599077886" name="Report unresolved symbol references (-Wl,--no-undefined)" superClass="sbi.gnu.cpp.linker.option.noundefined.core" valueType="boolean"/>
<option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.1195784918" name="Tizen-Frameworks-Other-Lflags" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
profile = wearable-4.0
# C/CPP Sources
-USER_SRCS = src/Common/MsgEngine/src/MsgThreadItem.cpp src/Common/Utils/src/VCalendarParser.cpp src/Common/MsgEngine/src/dummy/MsgStorageDummy.cpp src/Composer/View/src/ContactListViewItem.cpp src/Conversation/Controller/src/ConvFrame.cpp src/Common/MsgEngine/src/dummy/MessageDummy.cpp src/Common/MsgEngine/src/private/MsgAddressPrivate.cpp src/MainApp/MainApp.cpp src/Conversation/View/src/BubbleIconTextLayoutItem.cpp src/Common/MsgEngine/src/private/MsgReportPrivate.cpp src/Conversation/View/src/BubbleTextViewItem.cpp src/Composer/Controller/src/ContactFrame.cpp src/Common/Utils/src/MediaPlayer.cpp src/Conversation/Controller/src/BubbleVideoEntity.cpp src/Common/View/src/ListItem.cpp src/Common/MsgEngine/src/dummy/MsgConvMediaDummy.cpp src/Composer/Controller/src/MsgInputSelector.cpp src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp src/Common/Utils/src/MediaPlayerProvider.cpp src/Conversation/View/src/BubbleViewItem.cpp src/Conversation/Controller/src/BubbleContactEntity.cpp src/Common/View/src/MoreOption.cpp src/Common/AppControl/src/SettingsLauncher.cpp src/Common/MsgEngine/src/Message.cpp src/Conversation/View/src/BubbleItemContainer.cpp src/Common/AppControl/src/AppControlDefault.cpp src/Common/View/src/ListView.cpp src/Common/MsgEngine/src/MessageMms.cpp src/Common/MsgEngine/src/private/MsgConvMediaPrivate.cpp src/Common/MsgEngine/src/MsgTransport.cpp src/Composer/Controller/src/SendingOptionsFrame.cpp src/Common/ContactManager/src/ContactRecord.cpp src/Common/MsgEngine/src/private/MsgSentStatusPrivate.cpp src/Common/Utils/src/WorkingDir.cpp src/Common/View/src/BasePopup.cpp src/Settings/Controller/src/BlockedMsgListItem.cpp src/Common/Utils/src/FileUtils.cpp src/Settings/Controller/src/SettingsFrame.cpp src/Conversation/View/src/BubbleImageViewItem.cpp src/Settings/View/src/BlockedMsgListViewItem.cpp src/Conversation/View/src/BubbleSubjectViewItem.cpp src/Common/MsgEngine/src/MessageSMS.cpp src/Settings/Controller/src/SettingsBlockListFrame.cpp src/Common/MsgEngine/src/private/MessagePrivate.cpp src/Conversation/Controller/src/ConvList.cpp src/Common/View/src/InputLayout.cpp src/Common/View/src/MbeRecipientsView.cpp src/MsgThread/Controller/src/ThreadListItem.cpp src/Common/View/src/Entry.cpp src/Common/View/src/Popup.cpp src/Common/ContactManager/src/ContactVCardParser.cpp src/Viewer/Controller/src/Viewer.cpp src/Conversation/Controller/src/ConvListItem.cpp src/Common/AppControl/src/AppControlCompose.cpp src/Common/MsgEngine/src/MsgUtils.cpp src/Common/Recipient/src/Recipient.cpp src/Common/Utils/src/PhoneNumberUtils.cpp src/Common/MsgEngine/src/private/MessageSMSPrivate.cpp src/Conversation/View/src/ConvReplyListItem.cpp src/Common/View/src/ToastPopup.cpp src/Common/View/src/View.cpp src/Common/MsgEngine/src/private/MsgConversationItemPrivate.cpp src/Common/Controller/src/FrameController.cpp src/Common/AppControl/src/AppControlCommand.cpp src/Composer/View/src/MsgBodyView.cpp src/Common/MsgEngine/src/dummy/MsgAddressDummy.cpp src/Conversation/Controller/src/BubbleSubjectEntity.cpp src/Common/MsgEngine/src/dummy/MsgComposerDummy.cpp src/Common/MsgEngine/src/private/MsgThreadItemPrivate.cpp src/Common/View/src/StandardPopup.cpp src/Common/MsgEngine/src/MsgEngine.cpp src/Common/AppControl/src/AppControlParser.cpp src/Common/AppControl/src/ContactPicker.cpp src/Common/View/src/NaviFrameView.cpp src/Common/AppControl/src/FileViewer.cpp src/Conversation/View/src/ConvDateLineListItem.cpp src/Common/MsgEngine/src/dummy/MsgPageDummy.cpp src/Common/Utils/src/PathUtils.cpp src/Common/View/src/CtxPopup.cpp src/Common/AppControl/src/VoiceCall.cpp src/Common/MsgEngine/src/MsgSettings.cpp src/Common/MsgEngine/src/dummy/MsgConversationItemDummy.cpp src/Common/ContactManager/src/ContactVCardGenerator.cpp src/Common/AppControl/src/AppControlLauncher.cpp src/Common/Utils/src/LoggerImpl.cpp src/Common/ContactManager/src/ContactManager.cpp src/Common/View/src/SelectButton.cpp src/Conversation/Controller/src/BubbleEntityFactory.cpp src/Settings/View/src/BlockedNumberListViewItem.cpp src/Common/MsgEngine/src/private/MsgAttachmentPrivate.cpp src/Settings/View/src/SettingsMenuListItem.cpp src/Common/View/src/ViewItem.cpp src/Common/MsgEngine/src/private/MsgMediaPrivate.cpp src/Conversation/Controller/src/BubbleAudioEntity.cpp src/Common/Controller/src/InputFrame.cpp src/Conversation/View/src/BubbleAudioViewItem.cpp src/Composer/View/src/RecipFieldView.cpp src/Common/AppControl/src/Share.cpp src/MsgThread/Controller/src/MsgThreadFrame.cpp src/Common/View/src/StandardWindow.cpp src/Common/MsgEngine/src/MsgConversationItem.cpp src/Common/MsgEngine/src/dummy/MsgUtilsDummy.cpp src/Common/View/src/LineListViewItem.cpp src/Composer/View/src/AlwaysSendAsTextListViewItem.cpp src/Common/MsgEngine/src/private/MessageMmsPrivate.cpp src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp src/Common/MsgEngine/src/dummy/MsgMediaDummy.cpp src/Common/View/src/DefaultLayout.cpp src/Composer/Controller/src/RecipFrame.cpp src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp src/Common/MsgEngine/src/dummy/MsgSettingsDummy.cpp src/Common/View/src/PopupListItem.cpp src/Common/MsgEngine/src/dummy/MsgAttachmentDummy.cpp src/Common/MsgEngine/src/dummy/MessageSMSDummy.cpp src/Common/View/src/BottomButton.cpp src/Common/Controller/src/NaviFrameController.cpp src/Common/MsgEngine/src/dummy/MsgTransportDummy.cpp src/MsgThread/Controller/src/ThreadList.cpp src/Common/Utils/src/TextDecorator.cpp src/Common/MsgEngine/src/dummy/MessageMmsDummy.cpp src/Common/MsgEngine/src/MsgStorage.cpp src/Common/View/src/SelectAllListItem.cpp src/Common/AppControl/src/AppControlHandle.cpp src/Common/AppControl/src/ContactViewer.cpp src/Conversation/View/src/ConvListViewItem.cpp src/Common/Utils/src/ThumbnailMaker.cpp src/Common/View/src/NaviFrameItem.cpp src/Composer/Controller/src/MsgBodyFrame.cpp src/Common/View/src/PopupList.cpp src/Settings/View/src/SettingsBlockedMsgDetailView.cpp src/Common/Controller/src/App.cpp src/Common/View/src/PopupAttachmentListItem.cpp src/Common/MsgEngine/src/private/MsgComposerPrivate.cpp src/Common/Utils/src/MediaUtils.cpp src/Common/MsgEngine/src/dummy/MsgThreadItemDummy.cpp src/Composer/View/src/SendingOptionListViewItem.cpp src/Common/View/src/TitleListItem.cpp src/Common/Utils/src/TimeUtils.cpp src/Conversation/Controller/src/BubbleCalEventEntity.cpp src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp src/Composer/Controller/src/RecipInputFrame.cpp src/Common/View/src/IconTextPopup.cpp src/MainApp/main.cpp src/Settings/Controller/src/BlockedNumberListItem.cpp src/Common/View/src/NoContentLayout.cpp src/Common/SystemSettingsManager/src/SystemSettingsManager.cpp src/Common/MsgEngine/src/dummy/MsgReportDummy.cpp src/Composer/Controller/src/ContactListItem.cpp src/Common/MsgEngine/src/MsgPage.cpp src/Common/AppControl/src/ContactEditor.cpp src/Common/AppControl/src/InputSelector.cpp src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp src/Common/View/src/PopupManager.cpp src/MsgThread/View/src/ThreadComposeListViewItem.cpp src/Common/MsgEngine/src/private/MsgStoragePrivate.cpp src/Common/View/src/SearchBar.cpp src/MsgThread/View/src/ThreadListViewItem.cpp src/Common/MsgEngine/src/private/MsgPagePrivate.cpp src/Common/AppControl/src/AppControlUtils.cpp
+USER_SRCS = src/Common/MsgEngine/src/MsgThreadItem.cpp src/Common/Utils/src/VCalendarParser.cpp src/Common/MsgEngine/src/dummy/MsgStorageDummy.cpp src/Composer/View/src/ContactListViewItem.cpp src/Conversation/Controller/src/ConvFrame.cpp src/Common/MsgEngine/src/dummy/MessageDummy.cpp src/Common/MsgEngine/src/private/MsgAddressPrivate.cpp src/MainApp/MainApp.cpp src/Conversation/View/src/BubbleIconTextLayoutItem.cpp src/Common/MsgEngine/src/private/MsgReportPrivate.cpp src/Conversation/View/src/BubbleTextViewItem.cpp src/Composer/Controller/src/ContactFrame.cpp src/Common/Utils/src/MediaPlayer.cpp src/Conversation/Controller/src/BubbleVideoEntity.cpp src/Common/View/src/ListItem.cpp src/Common/MsgEngine/src/dummy/MsgConvMediaDummy.cpp src/Composer/Controller/src/MsgInputSelector.cpp src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp src/Common/Utils/src/MediaPlayerProvider.cpp src/Conversation/View/src/BubbleViewItem.cpp src/Conversation/Controller/src/BubbleContactEntity.cpp src/Common/View/src/MoreOption.cpp src/Common/AppControl/src/SettingsLauncher.cpp src/Common/MsgEngine/src/Message.cpp src/Conversation/View/src/BubbleItemContainer.cpp src/Common/AppControl/src/AppControlDefault.cpp src/Common/View/src/ListView.cpp src/Common/MsgEngine/src/MessageMms.cpp src/Common/MsgEngine/src/private/MsgConvMediaPrivate.cpp src/Common/MsgEngine/src/MsgTransport.cpp src/Composer/Controller/src/SendingOptionsFrame.cpp src/Common/ContactManager/src/ContactRecord.cpp src/Common/MsgEngine/src/private/MsgSentStatusPrivate.cpp src/Common/Utils/src/WorkingDir.cpp src/Common/View/src/BasePopup.cpp src/Settings/Controller/src/BlockedMsgListItem.cpp src/Common/Utils/src/FileUtils.cpp src/Settings/Controller/src/SettingsFrame.cpp src/Conversation/View/src/BubbleImageViewItem.cpp src/Settings/View/src/BlockedMsgListViewItem.cpp src/Conversation/View/src/BubbleSubjectViewItem.cpp src/Common/MsgEngine/src/MessageSMS.cpp src/Settings/Controller/src/SettingsBlockListFrame.cpp src/Common/MsgEngine/src/private/MessagePrivate.cpp src/Conversation/Controller/src/ConvList.cpp src/Common/View/src/InputLayout.cpp src/Common/View/src/MbeRecipientsView.cpp src/MsgThread/Controller/src/ThreadListItem.cpp src/Common/View/src/Entry.cpp src/Common/View/src/Popup.cpp src/Common/ContactManager/src/ContactVCardParser.cpp src/Conversation/Controller/src/ConvListItem.cpp src/Common/AppControl/src/AppControlCompose.cpp src/Common/MsgEngine/src/MsgUtils.cpp src/Common/Recipient/src/Recipient.cpp src/Common/Utils/src/PhoneNumberUtils.cpp src/Common/MsgEngine/src/private/MessageSMSPrivate.cpp src/Conversation/View/src/ConvReplyListItem.cpp src/Common/View/src/ToastPopup.cpp src/Common/View/src/View.cpp src/Common/MsgEngine/src/private/MsgConversationItemPrivate.cpp src/Common/Controller/src/FrameController.cpp src/Common/AppControl/src/AppControlCommand.cpp src/Composer/View/src/MsgBodyView.cpp src/Common/MsgEngine/src/dummy/MsgAddressDummy.cpp src/Conversation/Controller/src/BubbleSubjectEntity.cpp src/Common/MsgEngine/src/dummy/MsgComposerDummy.cpp src/Common/MsgEngine/src/private/MsgThreadItemPrivate.cpp src/Common/View/src/StandardPopup.cpp src/Common/MsgEngine/src/MsgEngine.cpp src/Common/AppControl/src/AppControlParser.cpp src/Common/AppControl/src/ContactPicker.cpp src/Common/View/src/NaviFrameView.cpp src/Common/AppControl/src/FileViewer.cpp src/Conversation/View/src/ConvDateLineListItem.cpp src/Common/MsgEngine/src/dummy/MsgPageDummy.cpp src/Common/Utils/src/PathUtils.cpp src/Common/View/src/CtxPopup.cpp src/Common/AppControl/src/VoiceCall.cpp src/Common/MsgEngine/src/MsgSettings.cpp src/Common/MsgEngine/src/dummy/MsgConversationItemDummy.cpp src/Common/ContactManager/src/ContactVCardGenerator.cpp src/Common/AppControl/src/AppControlLauncher.cpp src/Common/Utils/src/LoggerImpl.cpp src/Common/ContactManager/src/ContactManager.cpp src/Common/View/src/SelectButton.cpp src/Conversation/Controller/src/BubbleEntityFactory.cpp src/Settings/View/src/BlockedNumberListViewItem.cpp src/Common/MsgEngine/src/private/MsgAttachmentPrivate.cpp src/Settings/View/src/SettingsMenuListItem.cpp src/Common/View/src/ViewItem.cpp src/Common/MsgEngine/src/private/MsgMediaPrivate.cpp src/Conversation/Controller/src/BubbleAudioEntity.cpp src/Composer/Controller/src/Composer.cpp src/Common/Controller/src/InputFrame.cpp src/Conversation/View/src/BubbleAudioViewItem.cpp src/Composer/View/src/RecipFieldView.cpp src/Common/AppControl/src/Share.cpp src/MsgThread/Controller/src/MsgThreadFrame.cpp src/Common/View/src/StandardWindow.cpp src/Common/MsgEngine/src/MsgConversationItem.cpp src/Common/MsgEngine/src/dummy/MsgUtilsDummy.cpp src/Common/View/src/LineListViewItem.cpp src/Composer/View/src/AlwaysSendAsTextListViewItem.cpp src/Common/MsgEngine/src/private/MessageMmsPrivate.cpp src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp src/Common/MsgEngine/src/dummy/MsgMediaDummy.cpp src/Common/View/src/DefaultLayout.cpp src/Composer/Controller/src/RecipFrame.cpp src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp src/Common/MsgEngine/src/dummy/MsgSettingsDummy.cpp src/Common/View/src/PopupListItem.cpp src/Common/MsgEngine/src/dummy/MsgAttachmentDummy.cpp src/Common/MsgEngine/src/dummy/MessageSMSDummy.cpp src/Common/View/src/BottomButton.cpp src/Common/Controller/src/NaviFrameController.cpp src/Common/MsgEngine/src/dummy/MsgTransportDummy.cpp src/MsgThread/Controller/src/ThreadList.cpp src/Common/Utils/src/TextDecorator.cpp src/Common/MsgEngine/src/dummy/MessageMmsDummy.cpp src/Common/MsgEngine/src/MsgStorage.cpp src/Common/View/src/SelectAllListItem.cpp src/Common/AppControl/src/AppControlHandle.cpp src/Common/AppControl/src/ContactViewer.cpp src/Conversation/View/src/ConvListViewItem.cpp src/Common/Utils/src/ThumbnailMaker.cpp src/Common/View/src/NaviFrameItem.cpp src/Composer/Controller/src/MsgBodyFrame.cpp src/Common/View/src/PopupList.cpp src/Settings/View/src/SettingsBlockedMsgDetailView.cpp src/Common/Controller/src/App.cpp src/Common/View/src/PopupAttachmentListItem.cpp src/Common/MsgEngine/src/private/MsgComposerPrivate.cpp src/Common/Utils/src/MediaUtils.cpp src/Common/MsgEngine/src/dummy/MsgThreadItemDummy.cpp src/Composer/View/src/SendingOptionListViewItem.cpp src/Common/View/src/TitleListItem.cpp src/Common/Utils/src/TimeUtils.cpp src/Conversation/Controller/src/BubbleCalEventEntity.cpp src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp src/Composer/Controller/src/RecipInputFrame.cpp src/Common/View/src/IconTextPopup.cpp src/MainApp/main.cpp src/Settings/Controller/src/BlockedNumberListItem.cpp src/Common/View/src/NoContentLayout.cpp src/Common/SystemSettingsManager/src/SystemSettingsManager.cpp src/Common/MsgEngine/src/dummy/MsgReportDummy.cpp src/Composer/Controller/src/ContactListItem.cpp src/Common/MsgEngine/src/MsgPage.cpp src/Common/AppControl/src/ContactEditor.cpp src/Common/AppControl/src/InputSelector.cpp src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp src/Common/View/src/PopupManager.cpp src/MsgThread/View/src/ThreadComposeListViewItem.cpp src/Common/MsgEngine/src/private/MsgStoragePrivate.cpp src/Common/View/src/SearchBar.cpp src/MsgThread/View/src/ThreadListViewItem.cpp src/Common/MsgEngine/src/private/MsgPagePrivate.cpp src/Common/AppControl/src/AppControlUtils.cpp
# EDC Sources
USER_EDCS =
USER_C_INC_DIRS =
USER_INC_FILES =
## C++ Compiler
-USER_CPP_INC_DIRS = src/Conversation/Controller/inc src/Conversation/View/inc src/Common/Recipient/inc src/Composer/View/inc src/Composer/Controller/inc src/MsgThread/View/inc src/Settings/Controller/inc src/Settings/View/inc src/MsgThread/Controller/inc src/Viewer/Controller/inc inc src/Common/Controller/inc src/Conversation/Controller/inc src/Conversation/View/inc src/Common/AppControl/inc src/Common/ContactManager/inc src/Common/MsgEngine/inc src/Common/SystemSettingsManager/inc src/Common/Utils/inc src/Common/View/inc
+USER_CPP_INC_DIRS = src/Conversation/Controller/inc src/Conversation/View/inc src/Common/Recipient/inc src/Composer/View/inc src/Composer/Controller/inc src/MsgThread/View/inc src/Settings/Controller/inc src/Settings/View/inc src/MsgThread/Controller/inc inc src/Common/Controller/inc src/Conversation/Controller/inc src/Conversation/View/inc src/Common/AppControl/inc src/Common/ContactManager/inc src/Common/MsgEngine/inc src/Common/SystemSettingsManager/inc src/Common/Utils/inc src/Common/View/inc
USER_CPP_INC_FILES =
USER_INC_DIRS = $(USER_C_INC_DIRS) $(USER_CPP_INC_DIRS)
*/
operator app_control_h();
+ bool isGroupMode() const;
void setOperation(const char *operation);
void setUri(const char *uri);
void setLaunchMode(app_control_launch_mode_e mode);
+ void addExtraData(const char *key, const char *data);
+ void removeExtraData(const char *key);
protected:
virtual void onReply(app_control_h request, app_control_h reply, app_control_result_e result) {};
+ AppControlLauncher &getLauncher();
+
AppControlHandle(const AppControlHandle&) = delete;
AppControlHandle& operator=(AppControlHandle) = delete;
friend class AppControlHandle;
public:
- static AppControlLauncher &getInst();
+ AppControlLauncher();
+ ~AppControlLauncher();
/**
*@brief Launch application by AppControlHandle
*/
bool isLaunchInProgress() const;
+ AppControlHandle *getHandle() const;
+
private:
- AppControlLauncher();
- ~AppControlLauncher();
AppControlLauncher(const AppControlLauncher&) = delete;
AppControlLauncher& operator=(const AppControlLauncher&) = delete;
class InputSelector
: public AppControlHandle {
+ public:
+ enum InputType {
+ VoiceType,
+ EmoticonType,
+ KeyboardType
+ };
+
public:
InputSelector();
virtual ~InputSelector();
void setListener(IInputSelectorListener *l);
+ void setText(const std::string &text);
+ bool launch(InputType type);
+ bool launch();
protected:
virtual void onKeyboardReply(const std::string &text) {};
virtual void onEmoticonReply(const std::string &emoticon) {};
virtual void onTerminate() {};
+ void clear();
+
private:
void onReply(app_control_h request, app_control_h reply, app_control_result_e result) override;
#include "AppControlHandle.h"
#include "AppControlLauncher.h"
+#include "App.h"
using namespace Msg;
bool AppControlHandle::launch()
{
- return AppControlLauncher::getInst().launch(*this);
+ return App::getInst().getLauncher().launch(*this);
}
void AppControlHandle::terminate()
{
- if (m_Handle && AppControlLauncher::getInst().m_pHandle == this)
- AppControlLauncher::getInst().terminate();
+ if (m_Handle && App::getInst().getLauncher().m_pHandle == this)
+ App::getInst().getLauncher().terminate();
+}
+
+bool AppControlHandle::isGroupMode() const
+{
+ app_control_launch_mode_e mode = APP_CONTROL_LAUNCH_MODE_SINGLE;
+ app_control_get_launch_mode(m_Handle, &mode);
+ return mode == APP_CONTROL_LAUNCH_MODE_GROUP;
}
void AppControlHandle::setOperation(const char *operation)
{
app_control_set_launch_mode(m_Handle, mode);
}
+
+void AppControlHandle::addExtraData(const char *key, const char *data)
+{
+ app_control_add_extra_data(m_Handle, key, data);
+}
+
+void AppControlHandle::removeExtraData(const char *key)
+{
+ app_control_remove_extra_data(m_Handle, key);
+}
+
+AppControlLauncher &AppControlHandle::getLauncher()
+{
+ return App::getInst().getLauncher();
+}
ecore_timer_del(m_pTimer);
}
-AppControlLauncher &AppControlLauncher::getInst()
-{
- static AppControlLauncher inst;
- return inst;
-}
-
bool AppControlLauncher::launch(AppControlHandle &handle)
{
if (isLaunchInProgress() || !handle)
}
}
+AppControlHandle *AppControlLauncher::getHandle() const
+{
+ return m_pHandle;
+}
+
{
app_control_set_operation(m_Handle, operation);
app_control_add_extra_data(m_Handle, addressType, address.c_str());
- return AppControlLauncher::getInst().launch(*this);
+ return AppControlHandle::launch();
}
}
app_control_add_extra_data(m_Handle, APP_CONTROL_DATA_TYPE, typePhone.c_str());
- res = AppControlLauncher::getInst().launch(*this);
+ res = AppControlHandle::launch();
}
return res;
app_control_set_mime(m_Handle, mime.c_str());
app_control_add_extra_data(m_Handle, APP_CONTROL_DATA_TYPE, toStr(address.getOwnerType()));
app_control_add_extra_data(m_Handle, APP_CONTROL_DATA_ID, std::to_string(id).c_str());
- return AppControlLauncher::getInst().launch(*this);
+ return AppControlHandle::launch();
}
bool ContactViewer::launch()
{
clear();
app_control_set_app_id(m_Handle, contactsAppId);
- return AppControlLauncher::getInst().launch(*this);
+ return AppControlHandle::launch();
}
bool ContactViewer::launch(const std::string &address)
bool FileViewer::launch(const std::string &file)
{
- if (AppControlLauncher::getInst().isLaunchInProgress())
+ if (getLauncher().isLaunchInProgress())
return false;
bool res = false;
app_control_set_mime(m_Handle, mime.c_str());
std::string uri = "file://" + file;
app_control_set_uri(m_Handle, uri.c_str());
- res = AppControlLauncher::getInst().launch(*this);
+ res = AppControlHandle::launch();
}
return res;
{
bool res = false;
- if (!AppControlLauncher::getInst().isLaunchInProgress()) {
+ if (!getLauncher().isLaunchInProgress()) {
// Remove previous file (correct only for APP_CONTROL_LAUNCH_MODE_GROUP)
if (!m_FilePath.empty())
FileUtils::remove(m_FilePath);
m_pListener = l;
}
+void InputSelector::setText(const std::string &text)
+{
+ addExtraData(APP_CONTROL_DATA_INPUT_DEFAULT_TEXT, text.c_str());
+}
+
+void InputSelector::clear()
+{
+ removeExtraData(APP_CONTROL_DATA_INPUT_TYPE);
+ removeExtraData(APP_CONTROL_DATA_INPUT_DEFAULT_TEXT);
+}
+
+bool InputSelector::launch(InputType type)
+{
+ terminate();
+
+ const char *inputStr = nullptr;
+ switch (type) {
+ case VoiceType:
+ inputStr = "input_voice";
+ break;
+ case EmoticonType:
+ inputStr = "input_emoticon";
+ break;
+ case KeyboardType:
+ inputStr = "input_keyboard";
+ break;
+ }
+ if (inputStr)
+ addExtraData(APP_CONTROL_DATA_INPUT_TYPE, inputStr);
+
+ return AppControlHandle::launch();
+}
+
+bool InputSelector::launch()
+{
+ terminate();
+ return AppControlHandle::launch();
+}
+
void InputSelector::onReply(app_control_h request, app_control_h reply, app_control_result_e result)
{
MSG_LOG("result = ", result);
onTerminate();
if (m_pListener)
m_pListener->onTerminate(*this);
+ clear();
}
}
}
bool SettingsLauncher::launchConnections()
{
int res = false;
- if (AppControlLauncher::getInst().isLaunchInProgress())
+ if (getLauncher().isLaunchInProgress())
return res;
if (m_Handle) {
app_control_set_app_id(m_Handle, "org.tizen.watch-setting");
app_control_add_extra_data(m_Handle, "launch-type", "connections");
- res = AppControlLauncher::getInst().launch(*this);
+ res = AppControlHandle::launch();
}
return res;
}
bool Share::launch(const std::list<std::string> &files)
{
- if (files.empty() || AppControlLauncher::getInst().isLaunchInProgress())
+ if (files.empty() || getLauncher().isLaunchInProgress())
return false;
addFiles(files);
app_control_set_operation(m_Handle, APP_CONTROL_OPERATION_MULTI_SHARE);
app_control_add_extra_data_array(m_Handle, APP_CONTROL_DATA_PATH, nativePaths.data(), nativePaths.size());
- return AppControlLauncher::getInst().launch(*this);
+ return getLauncher().launch(*this);
}
bool Share::launch(const std::string &text)
{
- if (text.empty() || AppControlLauncher::getInst().isLaunchInProgress())
+ if (text.empty() || getLauncher().isLaunchInProgress())
return false;
app_control_set_operation(m_Handle, APP_CONTROL_OPERATION_SHARE_TEXT);
app_control_add_extra_data(m_Handle, APP_CONTROL_DATA_TEXT, text.c_str());
- return AppControlLauncher::getInst().launch(*this);
+ return AppControlHandle::launch();
}
class ContactManager;
class ThumbnailMaker;
class SystemSettingsManager;
+ class AppControlLauncher;
+ class MsgInputSelector;
class App {
public:
NaviFrameController &getNavigation();
const NaviFrameController &getNavigation() const;
+ AppControlLauncher &getLauncher();
+ const AppControlLauncher &getLauncher() const;
+
protected:
App();
~App();
SystemSettingsManager *m_pSysSettingsManager;
std::list<IAppListener*> m_Listeners;
NaviFrameController *m_pNaviFrame;
+ AppControlLauncher *m_pLauncher;
bool m_IsPause;
bool m_IsTerminating;
bool m_NeedToCloseApp;
#define FrameController_h_
#include "NaviFrameItem.h"
-#include "NaviFrameController.h"
#include <list>
#include <memory>
namespace Msg {
+
class NaviFrameController;
class FrameController
#include "AppControlDefault.h"
#include "AppControlSettings.h"
#include "MsgInputSelector.h"
+#include "FrameController.h"
+#include "PopupManager.h"
#include "App.h"
#include <memory>
namespace Msg {
+
class FrameController;
+ class MsgInputSelector;
class NaviFrameController
: public NaviFrameView
, private IAppListener
- , private IInputSelectorListener {
+ , private IInputSelectorListener
+ , private IPopupManagerListener {
public:
NaviFrameController(App &app);
*/
void popGroup(FrameController &frame);
+ /**
+ * @brief Pops frames by GroupType.
+ * @param[in] frame with group items for pop
+ */
+ void popGroup(FrameController::GroupType type);
+
/**
* @brief Executes app control command of default type.
*/
T *findTopFrame() const;
FrameController *getTopFrame() const;
+ MsgInputSelector &getInputSelector();
+ bool isEmpty() const;
+
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);
void onBeforeDelete(View &view) override;
// App:
- virtual void onAppPause() override;
- virtual void onAppResume() override;
+ void onAppPause() override;
+ void onAppResume() override;
// IInputSelectorListener:
void onTerminate(InputSelector &sender) override;
+ // IPopupManagerListener:
+ void onPop(BasePopup &popup) override;
+ void onPush(BasePopup &popup) override;
+
private:
std::unique_ptr<MsgInputSelector> m_InputSelector;
};
#include "SystemSettingsManager.h"
#include "PopupManager.h"
#include "ThumbnailMaker.h"
+#include "AppControlLauncher.h"
#include <assert.h>
#include <stdlib.h>
, m_pThumbnailMaker(nullptr)
, m_pSysSettingsManager(nullptr)
, m_pNaviFrame(nullptr)
+ , m_pLauncher(nullptr)
, m_IsPause(true)
, m_IsTerminating(false)
, m_NeedToCloseApp(true)
delete m_pContactManager;
delete m_pPopupManager;
delete m_pSysSettingsManager;
+ delete m_pLauncher;
if (this == appInstance)
appInstance = nullptr;
}
return const_cast<App*>(this)->getNavigation();
}
+AppControlLauncher &App::getLauncher()
+{
+ if (!m_pLauncher)
+ m_pLauncher = new AppControlLauncher;
+ return *m_pLauncher;
+}
+
+const AppControlLauncher &App::getLauncher() const
+{
+ return const_cast<App*>(this)->getLauncher();
+}
+
void App::addListener(IAppListener &l)
{
auto found = std::find(m_Listeners.begin(), m_Listeners.end(), &l);
app_control_launch_mode_e mode = APP_CONTROL_LAUNCH_MODE_SINGLE;
app_control_get_launch_mode(appControl, &mode);
- m_NeedToCloseApp = (mode == APP_CONTROL_LAUNCH_MODE_GROUP);
+ m_NeedToCloseApp = mode == APP_CONTROL_LAUNCH_MODE_GROUP;
switch (cmd->getOperationType()) {
case AppControlCommand::OpDefault:
*/
#include "InputFrame.h"
+#include "NaviFrameController.h"
using namespace Msg;
#include "MsgEngine.h"
#include "Callback.h"
#include "ToastPopup.h"
-#include "MsgBodyFrame.h"
#include "RecipFrame.h"
#include <memory>
: NaviFrameView(app.getWindow())
{
App::getInst().addListener(*this);
+ App::getInst().getPopupManager().addListener(*this);
addHwButtonEvent(EEXT_CALLBACK_BACK, makeCbFirst(&NaviFrameController::onHwBackButtonClicked), this);
}
void NaviFrameController::pop(FrameController &frame)
{
- if (isLastFrame() || isEmpty())
+ if (isLastFrame() && App::getInst().getPopupManager().isEmpty())
App::getInst().exit();
else {
App::getInst().getPopupManager().pop(&frame);
}
}
+void NaviFrameController::popGroup(FrameController::GroupType type)
+{
+ auto items = getItems();
+ for (NaviFrameItem * item: items) {
+ auto *frame = dynamic_cast<FrameController*>(item);
+ if (frame && frame->getGroupType() == type)
+ pop(*frame);
+ }
+}
+
void NaviFrameController::destroy()
{
NaviFrameView::destroy();
if (msg) {
auto *conv = findTopFrame<ConvFrame>(); // Check if conversation is open
if (conv) {
- AppControlLauncher::getInst().terminate();
+ App::getInst().getLauncher().terminate();
promote(*conv);
conv->execCmd(cmd);
} else if (type == AppControlDefault::ViewType || type == AppControlDefault::ReplyType || isUnreadNotificationSingle(type)) {
- AppControlLauncher::getInst().terminate();
+ App::getInst().getLauncher().terminate();
conv = new ConvFrame(*this);
push(*conv);
conv->execCmd(cmd);
if (!prepare(*cmd))
return;
- AppControlLauncher::getInst().terminate();
+ App::getInst().getLauncher().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);
- }
+ getInputSelector().reset();
+ getInputSelector().execCmd(cmd);
};
}
if (!prepare(*cmd))
return;
- AppControlLauncher::getInst().terminate();
+ App::getInst().getLauncher().terminate();
auto *frame = findTopFrame<SettingsFrame>();
if (frame) {
promote(*frame);
return static_cast<FrameController*>(NaviFrameView::getTopFrame());
}
-bool NaviFrameController::isUnreadNotificationSingle(AppControlDefault::DefaultType type) const
+MsgInputSelector &NaviFrameController::getInputSelector()
{
- return type == AppControlDefault::NotificationType && App::getInst().getMsgEngine().getStorage().getUnreadThreadCount() == 1;
+ if (!m_InputSelector) {
+ m_InputSelector.reset(new MsgInputSelector);
+ m_InputSelector->setListener(this);
+ }
+ return *m_InputSelector;
+}
+
+bool NaviFrameController::isEmpty() const
+{
+ return NaviFrameView::isEmpty() &&
+ App::getInst().getPopupManager().isEmpty();
}
-bool NaviFrameController::launchInputSelector()
+bool NaviFrameController::isUnreadNotificationSingle(AppControlDefault::DefaultType type) const
{
- m_InputSelector.reset(new MsgInputSelector);
- m_InputSelector->setListener(this);
- return m_InputSelector->launch();
+ return type == AppControlDefault::NotificationType && App::getInst().getMsgEngine().getStorage().getUnreadThreadCount() == 1;
}
void NaviFrameController::onHwBackButtonClicked(Evas_Object *obj, void *event_info)
{
NaviFrameView::onBeforeDelete(view);
App::getInst().removeListener(*this);
+ App::getInst().getPopupManager().removeListener(*this);
+ m_InputSelector.reset();
}
void NaviFrameController::onTerminate(InputSelector &sender)
App::getInst().exit();
}
+void NaviFrameController::onPop(BasePopup &popup)
+{
+ MSG_LOG("");
+ if (isEmpty())
+ App::getInst().exit();
+}
+
+void NaviFrameController::onPush(BasePopup &popup)
+{
+ MSG_LOG("");
+}
+
* param[in] maxSize Maximum size in bytes. (Warning! limitation, maxSize must be >= 4)
* return list of splitted string.
*/
- std::list<std::string> splitUtf8String(const std::string &str, int maxSize);
+ std::list<std::string> splitUtf8String(const std::string &str, unsigned maxSize);
};
}
return std::to_string(sizeKb) + " " + (std::string)msg("IDS_MSGF_BODY_MSGSIZE_KB");
}
-std::list<std::string> splitUtf8String(const std::string &str, const int maxSize)
+std::list<std::string> splitUtf8String(const std::string &str, const unsigned maxSize)
{
if (str.empty() || maxSize < 3)
return {};
class Recipient {
public:
- Recipient(std::string address, std::string dispName);
+ Recipient(std::string address, std::string dispName = {});
Recipient();
~Recipient();
const std::string &Recipient::getDispName() const
{
- return m_DispName;
+ return m_DispName.empty() ? m_Address : m_DispName;
}
void Recipient::setAddress(std::string address)
#include "BasePopup.h"
#include <efl_extension.h>
+#include <list>
namespace Msg {
class Window;
+ class IPopupManagerListener;
/**
* @brief A global instance that manages context popups and regular popups lifecycle in context of one window.
PopupManager(PopupManager&) = delete;
PopupManager &operator=(PopupManager&) = delete;
+ void addListener(IPopupManagerListener &listener);
+ void removeListener(IPopupManagerListener &listener);
+
/**
* @brief Gets window-context.
* @return window-context.
void pop(BasePopup *popup, bool anim = true);
void push(BasePopup &popup, void *id = nullptr);
BasePopup *getTop() const;
+ bool isEmpty() const;
/**
* @brief Process pause event
BasePopup *m_pPopup;
Window &m_Window;
void *m_pPopupId;
+ std::list<IPopupManagerListener*> m_Listeners;
+ };
+
+ class IPopupManagerListener {
+ public:
+ virtual ~IPopupManagerListener() {}
+ virtual void onPop(BasePopup &popup) {};
+ virtual void onPush(BasePopup &popup) {};
};
}
#include "Callback.h"
#include <efl_extension.h>
+#include <algorithm>
using namespace Msg;
return m_Window;
}
+void PopupManager::addListener(IPopupManagerListener &listener)
+{
+ auto found = std::find(m_Listeners.begin(), m_Listeners.end(), &listener);
+ if (found == m_Listeners.end())
+ m_Listeners.push_back(&listener);
+}
+
+void PopupManager::removeListener(IPopupManagerListener &listener)
+{
+ auto found = std::find(m_Listeners.begin(), m_Listeners.end(), &listener);
+ if (found != m_Listeners.end())
+ m_Listeners.erase(found);
+}
+
PopupManager::~PopupManager()
{
}
void PopupManager::destroyPopup(bool anim)
{
if (m_pPopup) {
- anim ? m_pPopup->dismiss() : m_pPopup->destroy();
+ auto *popup = m_pPopup;
m_pPopup = nullptr;
+ m_pPopupId = nullptr;
+
+ for (auto *l : m_Listeners)
+ l->onPop(*popup);
+
+ anim ? popup->dismiss() : popup->View::destroy();
}
- m_pPopupId = nullptr;
}
void PopupManager::push(BasePopup &popup, void *id)
popup.addHwButtonEvent(EEXT_CALLBACK_BACK, makeCbFirst(&PopupManager::onHwBackButtonClicked), this);
m_pPopup = &popup;
m_pPopupId = id;
+
+ for (auto *l : m_Listeners)
+ l->onPush(popup);
}
}
return m_pPopup;
}
+bool PopupManager::isEmpty() const
+{
+ return !getTop();
+}
+
void PopupManager::onHwBackButtonClicked(Evas_Object *obj, void *eventInfo)
{
MSG_LOG("");
--- /dev/null
+/*
+ * 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 Composer_h_
+#define Composer_h_
+
+#include "MsgTransport.h"
+#include "MessageMms.h"
+#include "MessageSMS.h"
+#include "Recipient.h"
+#include "SettingsLauncher.h"
+#include "WorkingDir.h"
+#include "AppControlCompose.h"
+#include "View.h"
+
+#include <set>
+#include <string>
+#include <list>
+
+namespace Msg {
+
+ class IComposerListener;
+ class IconTextPopup;
+ class Popup;
+
+ class Composer
+ : private IMsgTransportListener {
+
+ public:
+ Composer();
+ virtual ~Composer();
+
+ void setListener(IComposerListener *l);
+ void setRecip(Recipient recip);
+ const Recipient &getRecip() const;
+ void setText(std::string text);
+ bool addFile(const std::string &file);
+ ThreadId send();
+ ThreadId getThreadId() const;
+ void reset();
+ void clear();
+
+ private:
+ struct SendInfo {
+ SendInfo ();
+ void reset();
+ std::vector<MessageRef> msgs;
+ std::set<RequestId> requestIdSet;
+ Message::NetworkStatus status;
+ ThreadId threadId;
+ bool inProgress;
+ };
+
+ // IMsgTransportListener:
+ void onMsgTransportSentStatus(const MsgSentStatus &status) override;
+
+ bool checkBeforeSend(Message::Type type);
+ std::vector<MessageRef> createMessage();
+ void requestSendMessage();
+ void sendMessage();
+ bool readAddress(MessageRef msg);
+ void handleSendResult(MsgTransport::SendResult result);
+
+ void setText(MessageRef msg, const std::string &text);
+ void setText(MessageSMS &msg, const std::string &text);
+ void setText(MessageMms &msg, const std::string &text);
+
+ // Popup:
+ void showMaxCharactersPopup();
+ void showNoSimCardPopup();
+ void showDisableFlightModePopup();
+ void showMobileNetworkSettingsPopup();
+ void showSendingProgressPopup();
+ void showUnableDataRoamingPopup();
+ void showSentWhenServiceBecomesAvailablePopup();
+ void showMmsTextLimitExceededPopup();
+
+ // Popup callbacks:
+ void onSendingPopupDestroy(Evas *e, Evas_Object *obj, void *event_info);
+ void onSendingPopupBackButtonPressed(Evas_Object *obj, void *event_info);
+ void onTurnOffFlightModeClicked(Popup &popup);
+ void onAllowTransmissionTextClicked(Popup &popup);
+ void onEnableDataRoamingClicked(Popup &popup);
+ void onMobileNetworkSettingsClicked(Popup &popup);
+
+ private:
+ Recipient m_Recip;
+ std::string m_Text;
+ std::list<std::string> m_Files;
+ IconTextPopup *m_pSendingPopup;
+ MsgTextMetric m_TextMetric;
+ SendInfo m_SendInfo;
+ WorkingDirRef m_WorkingDir;
+ SettingsLauncher m_SettingsLauncher;
+ IComposerListener *m_pListener;
+ };
+
+ class IComposerListener {
+ public:
+ virtual ~IComposerListener() {}
+ virtual void onSendFinished(Composer &composer, Message::NetworkStatus status) {};
+ virtual void onCloseSendPopup(Composer &composer) {};
+ };
+}
+
+#endif /* Composer_h_ */
class IContactFrameListener;
class PaddingListViewItem;
+
class ContactFrame
: public FrameController
, private IListViewListener
#include "FrameController.h"
#include "MsgBodyView.h"
-#include "MsgTransport.h"
-#include "Recipient.h"
-#include "MsgStorage.h"
-#include "ContactManager.h"
-#include "WorkingDir.h"
-#include "SettingsLauncher.h"
-
-#include <set>
+#include "MsgTypes.h"
namespace Msg {
- class MsgEngine;
+ class IMsgBodyFrameListener;
class DefaultLayout;
- class IconTextPopup;
class Popup;
class MsgBodyFrame
: public FrameController
- , private IMsgBodyViewListener
- , private IMsgTransportListener
- , private IContactManagerListener {
+ , private IMsgBodyViewListener {
public:
MsgBodyFrame(NaviFrameController &parent);
virtual ~MsgBodyFrame();
- bool execCmd(const AppControlComposeRef &cmd);
- void setCloseAfterSentFlag(bool flag = true);
- void setRecip(const Recipient &recip);
void setText(const std::string &text);
+ std::string getText() const;
+ std::string getRawText() const;
+ void setListener(IMsgBodyFrameListener *l);
private:
// NaviFrameItem:
// Hw buttons:
void onHwBackButtonPreessed(Evas_Object *obj, void *event);
- private:
- struct SendInfo {
- SendInfo ();
- void reset();
- std::vector<MessageRef> msgs;
- std::set<RequestId> reqtIdSet;
- Message::NetworkStatus status;
- ThreadId threadId;
- bool inProgress;
- };
-
void prepareLayout();
void prepareBody();
void updateTextCounter();
- std::vector<MessageRef> createMessage();
- void sendMessage();
- void requestSendMessage();
- void resetSendInfo();
- MsgEngine &getMsgEngine();
- bool checkBeforeSend(Message::Type type);
- void handleSendResult(MsgTransport::SendResult result);
- void afterSentHandler();
- void setText(MessageRef msg, const std::string &text);
- void setText(MessageSMS &msg, const std::string &text);
- void setText(MessageMms &msg, const std::string &text);
- bool readAddress(MessageRef msg);
// Popup:
void showMaxCharactersPopup();
- void showNoSimCardPopup();
- void showDisableFlightModePopup();
- void showSendingProgressPopup();
- void showSentWhenServiceBecomesAvailablePopup();
- void showMobileNetworkSettingsPopup();
- void showMmsTextLimitExceededPopup();
- void showUnableDataRoamingPopup();
void showDiscardMsgPopup();
- // Popup callback:
- void onSendingPopupDestroy(Evas *e, Evas_Object *obj, void *event_info);
- void onSendingPopupBackButtonPressed(Evas_Object *obj, void *event_info);
- void onTurnOffFlightModeClicked(Popup &popup);
- void onAllowTransmissionTextLClicked(Popup &popup);
- void onEnableDataRoamingClicked(Popup &popup);
- void onMobileNetworkSettingsClicked(Popup &popup);
void onDiscardMsgClicked(Popup &popup);
// Entry cb:
void onEntryChanged(Evas_Object *obj, void *event);
+ void onEntryPress(Evas_Object *obj, void *event);
void onEntryActivated(Evas_Object *obj, void *event);
void onEntryFilter(Evas_Object *obj, char **text);
// IMsgBodyViewListener:
void onSendButtonClicked() override;
- // IMsgTransportListener:
- void onMsgTransportSentStatus(const MsgSentStatus &status) override;
-
private:
DefaultLayout *m_pLayout;
MsgBodyView *m_pBody;
- IconTextPopup *m_pSendingPopup;
MsgTextMetric m_TextMetric;
- Recipient m_Recip;
- SendInfo m_SendInfo;
- bool m_CloseAfterSent;
- WorkingDirRef m_WorkingDir;
- SettingsLauncher m_SettingsLauncher;
+ IMsgBodyFrameListener *m_pListener;
+ };
+
+ class IMsgBodyFrameListener {
+ public:
+ virtual ~IMsgBodyFrameListener() {}
+ virtual void onDestroy(MsgBodyFrame &frame) {};
+ virtual void onSendRequest(MsgBodyFrame &frame) {};
+ virtual void onPress(MsgBodyFrame &frame) {};
};
}
+
#endif /* MsgBodyFrame_h_ */
#include "InputSelector.h"
#include "Recipient.h"
#include "AppControlCompose.h"
+#include "Composer.h"
+#include "MsgBodyFrame.h"
+#include "MsgTypes.h"
namespace Msg {
class FrameController;
+ class NaviFrameController;
class MsgInputSelector
- : public InputSelector {
+ : public InputSelector
+ , private IComposerListener
+ , private IMsgBodyFrameListener {
public:
- MsgInputSelector(FrameController *parent = nullptr);
+ MsgInputSelector();
virtual ~MsgInputSelector();
void setRecip(Recipient recip);
bool execCmd(const AppControlComposeRef &cmd);
+ void reset();
protected:
void onTemplateReply(const std::string &text) override;
void onEmoticonReply(const std::string &emoticon) override;
private:
- void navigateToMsgBody(const std::string &text);
+ NaviFrameController &getNavigation();
+ void showMsgBody(const std::string &text);
+ void navigateToConv(ThreadId threadId);
+ void send();
+
+ // IComposerListener:
+ void onSendFinished(Composer &composer, Message::NetworkStatus status) override;
+ void onCloseSendPopup(Composer &composer) override;
+
+ // IMsgBodyFrameListener:
+ void onDestroy(MsgBodyFrame &frame) override;
+ void onSendRequest(MsgBodyFrame &frame) override;
+ void onPress(MsgBodyFrame &frame) override;
private:
- FrameController *m_pParent;
- Recipient m_Recip;
- AppControlComposeRef m_ComposeCmd;
+ Composer m_Composer;
+ MsgBodyFrame *m_pMsgBodyFrame;
+ bool m_CloseAfterSent;
};
}
#include "ContactPicker.h"
#include "ContactManager.h"
#include "AppControlCompose.h"
-#include "MsgInputSelector.h"
namespace Msg {
void setRecip(Recipient recip);
void setRecip(std::string address);
void clearRecip();
- void navigateToMsgBody();
+ void navigateToMsgInput();
private:
DefaultLayout *m_pBaseLayout;
Recipient m_Recip;
ContactPicker m_ContactPicker;
AppControlComposeRef m_ComposeCmd;
- MsgInputSelector m_InputSelector;
};
}
--- /dev/null
+/*
+ * 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 "Composer.h"
+#include "App.h"
+#include "MsgEngine.h"
+#include "MsgUtils.h"
+#include "Message.h"
+#include "SystemSettingsManager.h"
+#include "Callback.h"
+#include "IconTextPopup.h"
+#include "ToastPopup.h"
+
+using namespace Msg;
+
+Composer::SendInfo::SendInfo()
+ : requestIdSet()
+ , status(Message::NS_Unknown)
+ , threadId()
+ , inProgress(false)
+{
+}
+
+void Composer::SendInfo::reset()
+{
+ msgs.clear();
+ inProgress = false;
+ requestIdSet.clear();
+ status = Message::NS_Unknown;
+ threadId.reset();
+}
+
+Composer::Composer()
+ : m_pSendingPopup(nullptr)
+ , m_TextMetric()
+ , m_WorkingDir(std::make_shared<WorkingDir>())
+ , m_pListener(nullptr)
+{
+ App::getInst().getMsgEngine().getTransport().addListener(*this);
+}
+
+Composer::~Composer()
+{
+ MSG_LOG("");
+ if (m_pSendingPopup)
+ m_pSendingPopup->destroy();
+ App::getInst().getMsgEngine().getTransport().removeListener(*this);
+}
+
+void Composer::setListener(IComposerListener *l)
+{
+ m_pListener = l;
+}
+
+void Composer::setRecip(Recipient recip)
+{
+ m_Recip = std::move(recip);;
+}
+
+const Recipient &Composer::getRecip() const
+{
+ return m_Recip;
+}
+
+void Composer::setText(std::string text)
+{
+ m_Text = std::move(text);
+}
+
+bool Composer::addFile(const std::string &file)
+{
+ std::string newFilePath = m_WorkingDir->addFile(file);
+ bool isValid = !newFilePath.empty();
+ if (isValid)
+ m_Files.push_back(std::move(newFilePath));
+ return isValid;
+}
+
+ThreadId Composer::send()
+{
+ reset();
+ requestSendMessage();
+ return getThreadId();
+}
+
+ThreadId Composer::getThreadId() const
+{
+ return m_SendInfo.threadId;
+}
+
+void Composer::reset()
+{
+ m_SendInfo.reset();
+ // TODO: check popups
+}
+
+void Composer::clear()
+{
+ m_Recip.clear();
+ m_Text.clear();
+ m_Files.clear();
+}
+
+bool Composer::readAddress(MessageRef msg)
+{
+ if(m_Recip.isValid() && msg) {
+ MsgAddress &msgAddr = msg->addAddress();
+ msgAddr.setAddress(m_Recip.getAddress());
+ msgAddr.setRecipientType(MsgAddress::To);
+ msgAddr.setAddressType(MsgAddress::Phone);
+ return true;
+ }
+
+ return false;
+}
+
+void Composer::setText(MessageRef msg, const std::string &text)
+{
+ if (msg && !text.empty()) {
+ if (auto *sms = dynamic_cast<MessageSMS*>(msg.get()))
+ setText(*sms, text);
+ else if (auto *mms = dynamic_cast<MessageMms*>(msg.get()))
+ setText(*mms, text);
+ }
+}
+
+void Composer::setText(MessageSMS &msg, const std::string &text)
+{
+ msg.setText(text);
+}
+
+void Composer::setText(MessageMms &msg, const std::string &text)
+{
+ static const int defaultPageDuration = 5000; // msec
+ std::string filePath = m_WorkingDir->addTextFile(text);
+ if (!filePath.empty()) {
+ MsgPage &page = msg.addPage();
+ page.setPageDuration(defaultPageDuration);
+ page.addMedia().setFilePath(filePath);
+ }
+}
+
+bool Composer::checkBeforeSend(Message::Type type)
+{
+ auto &settings = App::getInst().getSysSettingsManager();
+
+ if (!settings.isSimInserted()) {
+ showNoSimCardPopup();
+ return false;
+ }
+
+ if (settings.isFlightModeEnabled()) {
+ showDisableFlightModePopup();
+ return false;
+ }
+
+ if (MsgUtils::isMms(type)) {
+ if (!settings.isMobileDataEnabled()) {
+ showMobileNetworkSettingsPopup();
+ return false;
+ }
+
+ if (settings.isRoaming() && !settings.isRoamingDataEnabled()) {
+ showUnableDataRoamingPopup();
+ return false;
+ }
+ }
+
+ return true;
+}
+
+std::vector<MessageRef> Composer::createMessage()
+{
+ auto &msgEngine = App::getInst().getMsgEngine();
+
+ std::vector<MessageRef> msgList;
+ const int maxMsgSize = msgEngine.getSettings().getMaxMmsSize();
+
+ if (maxMsgSize <= 0) {
+ MSG_LOG_ERROR("getMaxMmsSize() returns 0");
+ return {};
+ }
+
+ auto textList = MsgUtils::splitUtf8String(m_Text, maxMsgSize);
+
+ for (auto &&text : textList) {
+ MsgTextMetric metric;
+ msgEngine.getComposer().calculateTextMetric(m_Text, metric);
+ Message::Type type = metric.isMms ? Message::MT_MMS : Message::MT_SMS;
+ auto msg = msgEngine.getComposer().createMessage(type);
+ if (readAddress(msg)) {
+ setText(msg, text);
+ msgList.push_back(msg);
+ }
+ }
+
+ return msgList;
+}
+
+void Composer::requestSendMessage()
+{
+ m_SendInfo.reset();
+
+ m_SendInfo.msgs = createMessage();
+ if (m_SendInfo.msgs.empty())
+ return;
+
+ if (!checkBeforeSend(m_SendInfo.msgs [0]->getType()))
+ return;
+
+ sendMessage();
+}
+
+void Composer::sendMessage()
+{
+ MsgTransport::SendResult sendRes = MsgTransport::SendFail;
+ MessageRef lastSentMsg;
+
+ for (MessageRef msg : m_SendInfo.msgs) {
+ lastSentMsg = msg;
+ RequestId reqId;
+ sendRes = App::getInst().getMsgEngine().getTransport().sendMessage(msg, &m_SendInfo.threadId, &reqId);
+
+ MSG_LOG("Send result = ", sendRes);
+ MSG_LOG("Request id = ", reqId);
+
+ if (sendRes != MsgTransport::SendSuccess)
+ break;
+
+ m_SendInfo.inProgress = true;
+ m_SendInfo.requestIdSet.insert(reqId);
+ }
+
+ if (sendRes == MsgTransport::SendSuccess && m_SendInfo.threadId.isValid()) {
+ showSendingProgressPopup();
+ } else {
+ handleSendResult(sendRes);
+ }
+}
+
+void Composer::handleSendResult( MsgTransport::SendResult result)
+{
+ // TODO: impl.
+}
+
+void Composer::showMaxCharactersPopup()
+{
+ ToastPopup::toast(msgt("WDS_WIFI_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"));
+}
+
+void Composer::showNoSimCardPopup()
+{
+ ToastPopup::toast(msgt("IDS_MSGF_POP_SIM_NOT_INSERTED"), FAIL_ICON);
+}
+
+void Composer::showDisableFlightModePopup()
+{
+ auto *popup = new StandardPopup(StandardPopup::buttons2Style);
+ popup->setText(msgt("WDS_MSG_POP_UNABLE_TO_SEND_MESSAGE_TURN_OFF_FLIGHT_MODE"));
+ popup->addLeftButton(CANCEL_BUTTON_POPUP);
+ popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&Composer::onTurnOffFlightModeClicked), this);
+ popup->show();
+}
+
+void Composer::showMobileNetworkSettingsPopup()
+{
+ auto *popup = new StandardPopup(StandardPopup::buttons2Style);
+ popup->setText(msgt("WDS_MSG_POP_UNABLE_TO_SEND_MESSAGE_CHANGE_YOUR_MOBILE_NETWORKS_SETTING"));
+ popup->addLeftButton(CANCEL_BUTTON_POPUP);
+ popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&Composer::onMobileNetworkSettingsClicked), this);
+ popup->show();
+}
+
+void Composer::showSendingProgressPopup()
+{
+ if (!m_pSendingPopup) {
+ m_pSendingPopup = new IconTextPopup;
+ m_pSendingPopup->setDismissByBackButtonFlag(false);
+ m_pSendingPopup->addEventCb(EVAS_CALLBACK_DEL, makeCbFirst(&Composer::onSendingPopupDestroy), this);
+ m_pSendingPopup->addHwButtonEvent(EEXT_CALLBACK_BACK, makeCbFirst(&Composer::onSendingPopupBackButtonPressed), this);
+ m_pSendingPopup->setIcon(IconTextPopup::ProgressIcon);
+ m_pSendingPopup->setText(msgt("IDS_MSG_BODY_SENDING_ING_M_STATUS_ABB"));
+ m_pSendingPopup->show();
+ }
+}
+
+void Composer::showMmsTextLimitExceededPopup()
+{
+ auto *popup = new StandardPopup(StandardPopup::buttons2Style);
+ // TODO: remove later
+ int numberOfCharacters = App::getInst().getMsgEngine().getSettings().getMaxMmsSize();
+ int numberOfMmsMsg = 2;
+
+ std::string popupMessage = msgArgs("WDS_MSG_BODY_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_EXCEEDED", numberOfCharacters);
+ popupMessage += "<br>";
+ popupMessage += msgArgs("WDS_MSG_BODY_MESSAGE_WILL_BE_SENT_AS_PD_MMS_MESSAGES_AND_1_SMS_MESSAGE", numberOfMmsMsg);
+
+ popup->setText(popupMessage);
+ popup->addLeftButton(CANCEL_BUTTON_POPUP);
+ popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&Composer::onAllowTransmissionTextClicked), this);
+ popup->show();
+}
+
+void Composer::showUnableDataRoamingPopup()
+{
+ auto *popup = new StandardPopup(StandardPopup::buttons2Style);
+ popup->setText(msgt("WDS_MSG_BODY_UNABLE_TO_SEND_MMS_ENABLE_DATA_ROAMING"));
+ popup->addLeftButton(CANCEL_BUTTON_POPUP);
+ popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&Composer::onEnableDataRoamingClicked), this);
+ popup->show();
+}
+
+void Composer::showSentWhenServiceBecomesAvailablePopup()
+{
+ auto *popup = new StandardPopup(StandardPopup::buttons1Style);
+ popup->setText(msgt("WDS_MSG_BODY_UNABLE_TO_SEND_MESSAGE_IT_WILL_BE_SENT_WHEN_SERVICE_BECOMES_AVAILABLE"));
+ popup->addBottomButton(msgt("WDS_MSG_ACBUTTON_OK_ABB"));
+ popup->show();
+}
+
+void Composer::onMsgTransportSentStatus(const MsgSentStatus &status)
+{
+ MSG_LOG("");
+ RequestId id = status.getId();
+ Message::NetworkStatus networkStatus = status.getNetworkStatus();
+
+ MSG_LOG("Id = ", id);
+ MSG_LOG("Network status = ", networkStatus);
+
+ auto reqIdIt = m_SendInfo.requestIdSet.find(id);
+ bool reqFound = reqIdIt != m_SendInfo.requestIdSet.end();
+
+ // Skip unknown request
+ if (!reqFound)
+ return;
+
+ if (networkStatus == Message::NS_Sending)
+ return;
+
+ m_SendInfo.requestIdSet.erase(reqIdIt);
+ bool isLast = m_SendInfo.requestIdSet.empty();
+
+ if (networkStatus == Message::NS_Send_Fail)
+ m_SendInfo.status = Message::NS_Send_Fail;
+ else if (networkStatus == Message::NS_Send_Pending && m_SendInfo.status != Message::NS_Send_Fail)
+ m_SendInfo.status = Message::NS_Send_Pending;
+ else if (m_SendInfo.status == Message::NS_Unknown)
+ m_SendInfo.status = networkStatus;
+
+ if (isLast || m_SendInfo.status == Message::NS_Send_Fail) {
+
+ m_SendInfo.inProgress = false;
+ m_SendInfo.requestIdSet.clear();
+
+ if (m_SendInfo.status == Message::NS_Send_Success) {
+ m_pSendingPopup->setIcon(IconTextPopup::CheckIcon);
+ m_pSendingPopup->setText(msgt("WDS_WNOTI_TPOP_SENT_ABB"));
+ m_pSendingPopup->setTimeOut();
+ } else if (m_SendInfo.status == Message::NS_Send_Fail) {
+ m_pSendingPopup->setIcon(IconTextPopup::FailedIcon);
+ m_pSendingPopup->setText(msgt("WDS_MSG_TPOP_SENDING_FAILED_ABB"));
+ m_pSendingPopup->setTimeOut();
+ } else if (m_SendInfo.status != Message::NS_Send_Pending) {
+ m_pSendingPopup->destroy();
+ showSentWhenServiceBecomesAvailablePopup();
+ }
+
+ if (m_pListener)
+ m_pListener->onSendFinished(*this, m_SendInfo.status);
+ }
+}
+
+void Composer::onSendingPopupDestroy(Evas *e, Evas_Object *obj, void *event_info)
+{
+ MSG_LOG("");
+ m_pSendingPopup = nullptr;
+ if (m_pListener)
+ m_pListener->onCloseSendPopup(*this);
+}
+
+void Composer::onSendingPopupBackButtonPressed(Evas_Object *obj, void *event_info)
+{
+ MSG_LOG("");
+ if (m_pSendingPopup)
+ m_pSendingPopup->destroy();
+
+ if (m_SendInfo.inProgress)
+ m_SendInfo.reset();
+}
+
+void Composer::onTurnOffFlightModeClicked(Popup &popup)
+{
+ MSG_LOG("");
+ m_SettingsLauncher.launchConnections();
+ popup.destroy();
+}
+
+void Composer::onAllowTransmissionTextClicked(Popup &popup)
+{
+ MSG_LOG("");
+ popup.destroy();
+}
+
+void Composer::onMobileNetworkSettingsClicked(Popup &popup)
+{
+ MSG_LOG("");
+ popup.destroy();
+ // TODO: run network settings
+}
+
+void Composer::onEnableDataRoamingClicked(Popup &popup)
+{
+ MSG_LOG("");
+ popup.destroy();
+ // TODO: run network settings
+}
+
#include "ContactListItem.h"
#include "App.h"
#include "Window.h"
+#include "NaviFrameController.h"
using namespace Msg;
#include "ConvFrame.h"
#include "MsgUtils.h"
#include "MessageMms.h"
+#include "App.h"
+#include "NaviFrameController.h"
using namespace Msg;
-MsgBodyFrame::SendInfo::SendInfo()
- : reqtIdSet()
- , status(Message::NS_Unknown)
- , threadId()
- , inProgress(false)
-{
-}
-
-void MsgBodyFrame::SendInfo::reset()
-{
- msgs.clear();
- inProgress = false;
- reqtIdSet.clear();
- status = Message::NS_Unknown;
- threadId.reset();
-}
-
MsgBodyFrame::MsgBodyFrame(NaviFrameController &parent)
: FrameController(parent, ComposerGroup)
, m_pLayout(nullptr)
, m_pBody(nullptr)
- , m_pSendingPopup(nullptr)
, m_TextMetric()
- , m_CloseAfterSent(false)
- , m_WorkingDir(std::make_shared<WorkingDir>())
+ , m_pListener(nullptr)
{
MSG_LOG("");
prepareLayout();
prepareBody();
- getMsgEngine().getTransport().addListener(*this);
}
MsgBodyFrame::~MsgBodyFrame()
{
- MSG_LOG("");
- if (m_pSendingPopup)
- m_pSendingPopup->destroy();
- getMsgEngine().getTransport().removeListener(*this);
-}
-
-void MsgBodyFrame::setRecip(const Recipient &recip)
-{
- m_Recip = recip;
+ if (m_pListener)
+ m_pListener->onDestroy(*this);
}
void MsgBodyFrame::setText(const std::string &text)
m_pBody->getEntry().setCursorPosToEnd();
}
+std::string MsgBodyFrame::getText() const
+{
+ return m_pBody->getEntry().getText();
+}
+
+std::string MsgBodyFrame::getRawText() const
+{
+ const char *text = m_pBody->getEntry().getEntry();
+ return text ? text : "";
+}
+
+void MsgBodyFrame::setListener(IMsgBodyFrameListener *l)
+{
+ m_pListener = l;
+}
+
void MsgBodyFrame::prepareLayout()
{
if (!m_pLayout) {
if (!m_pBody) {
m_pBody = new MsgBodyView(*m_pLayout);
m_pBody->setListener(this);
+ m_pBody->getEntry().enabledInputPanel(false);
m_pBody->getEntry().addChangedCb(makeCbFirst(&MsgBodyFrame::onEntryChanged), this);
m_pBody->getEntry().addMarkupFilterCb(makeCbFirst(&MsgBodyFrame::onEntryFilter), this);
m_pBody->getEntry().addActivatedCb(makeCbFirst(&MsgBodyFrame::onEntryActivated), this);
+ m_pBody->getEntry().addSmartCb("press", makeCbFirst(&MsgBodyFrame::onEntryPress), this);
m_pLayout->setContent(*m_pBody);
updateTextCounter();
}
}
-void MsgBodyFrame::setCloseAfterSentFlag(bool flag)
-{
- m_CloseAfterSent = flag;
-}
-
-bool MsgBodyFrame::execCmd(const AppControlComposeRef &cmd)
-{
- if (!cmd)
- return false;
-
- m_CloseAfterSent = true;
- auto &recips = cmd->getRecipientList();
- if (!recips.empty())
- m_Recip.setAddress(recips.front());
- else
- m_Recip.clear();
- setText(cmd->getMessageText());
-
- return true;
-}
-
void MsgBodyFrame::updateTextCounter()
{
const std::string &text = m_pBody->getEntry().getText();
- getMsgEngine().getComposer().calculateTextMetric(text, m_TextMetric);
+ App::getInst().getMsgEngine().getComposer().calculateTextMetric(text, m_TextMetric);
m_TextMetric.isMms ?
m_pBody->setCounter(msgt("WDS_MSG_SBODY_MMS_ABB")) :
m_pBody->disabledSendButton(text.empty());
}
-void MsgBodyFrame::handleSendResult( MsgTransport::SendResult result)
-{
- // TODO: impl.
-}
-
-bool MsgBodyFrame::checkBeforeSend(Message::Type type)
-{
- auto &settings = App::getInst().getSysSettingsManager();
-
- if (!settings.isSimInserted()) {
- showNoSimCardPopup();
- return false;
- }
-
- if (settings.isFlightModeEnabled()) {
- showDisableFlightModePopup();
- return false;
- }
-
- if (MsgUtils::isMms(type)) {
- if (!settings.isMobileDataEnabled()) {
- showMobileNetworkSettingsPopup();
- return false;
- }
-
- if (settings.isRoaming() && !settings.isRoamingDataEnabled()) {
- showUnableDataRoamingPopup();
- return false;
- }
- }
-
- return true;
-}
-
-bool MsgBodyFrame::readAddress(MessageRef msg)
-{
- if(m_Recip.isValid() && msg) {
- MsgAddress &msgAddr = msg->addAddress();
- msgAddr.setAddress(m_Recip.getAddress());
- msgAddr.setRecipientType(MsgAddress::To);
- msgAddr.setAddressType(MsgAddress::Phone);
- return true;
- }
-
- return false;
-}
-
-MsgEngine &MsgBodyFrame::getMsgEngine()
-{
- return App::getInst().getMsgEngine();
-}
-
-void MsgBodyFrame::setText(MessageRef msg, const std::string &text)
-{
- if (msg && !text.empty()) {
- if (auto *sms = dynamic_cast<MessageSMS*>(msg.get()))
- setText(*sms, text);
- else if (auto *mms = dynamic_cast<MessageMms*>(msg.get()))
- setText(*mms, text);
- }
-}
-
-void MsgBodyFrame::setText(MessageSMS &msg, const std::string &text)
-{
- msg.setText(text);
-}
-
-void MsgBodyFrame::setText(MessageMms &msg, const std::string &text)
-{
- static const int defaultPageDuration = 5000; // msec
- std::string filePath = m_WorkingDir->addTextFile(text);
- if (!filePath.empty()) {
- MsgPage &page = msg.addPage();
- page.setPageDuration(defaultPageDuration);
- page.addMedia().setFilePath(filePath);
- }
-}
-
-std::vector<MessageRef> MsgBodyFrame::createMessage()
-{
- const std::string &text = m_pBody->getEntry().getText();
-
- std::vector<MessageRef> msgList;
- const int maxMsgSize = getMsgEngine().getSettings().getMaxMmsSize();
-
- if (maxMsgSize <= 0) {
- MSG_LOG_ERROR("getMaxMmsSize() returns 0");
- return {};
- }
-
- auto textList = MsgUtils::splitUtf8String(text, maxMsgSize);
-
- for (auto &&text : textList) {
- MsgTextMetric metric;
- getMsgEngine().getComposer().calculateTextMetric(text, metric);
- Message::Type type = metric.isMms ? Message::MT_MMS : Message::MT_SMS;
- auto msg = getMsgEngine().getComposer().createMessage(type);
- if (readAddress(msg)) {
- setText(msg, text);
- msgList.push_back(msg);
- }
- }
-
- return msgList;
-}
-
-void MsgBodyFrame::requestSendMessage()
-{
- m_SendInfo.reset();
-
- m_SendInfo.msgs = createMessage();
- if (m_SendInfo.msgs.empty())
- return;
-
- if (!checkBeforeSend(m_SendInfo.msgs [0]->getType()))
- return;
-
- sendMessage();
-}
-
-void MsgBodyFrame::sendMessage()
-{
- MsgTransport::SendResult sendRes = MsgTransport::SendFail;
- MessageRef lastSentMsg;
-
- for (MessageRef msg : m_SendInfo.msgs) {
- lastSentMsg = msg;
- RequestId reqId;
- sendRes = getMsgEngine().getTransport().sendMessage(msg, &m_SendInfo.threadId, &reqId);
-
- MSG_LOG("Send result = ", sendRes);
- MSG_LOG("Request id = ", reqId);
-
- if (sendRes != MsgTransport::SendSuccess)
- break;
-
- m_SendInfo.inProgress = true;
- m_SendInfo.reqtIdSet.insert(reqId);
- }
-
- if (sendRes == MsgTransport::SendSuccess && m_SendInfo.threadId.isValid()) {
- m_pBody->getEntry().clear();
- showSendingProgressPopup();
- } else {
- handleSendResult(sendRes);
- }
-}
-
-void MsgBodyFrame::afterSentHandler()
-{
- if (!m_CloseAfterSent && m_SendInfo.threadId.isValid() && !App::getInst().isTerminating()) {
- auto *conv = getParent().findTopFrame<ConvFrame>();
- if (!conv) {
- conv = new ConvFrame(getParent());
- conv->setThreadId(m_SendInfo.threadId);
- getParent().push(*conv);
- } else {
- conv->setThreadId(m_SendInfo.threadId);
- getParent().promote(*conv);
- }
- }
- m_SendInfo.reset();
-
- if (!m_pSendingPopup)
- getParent().popGroup(*this);
-}
-
void MsgBodyFrame::showMaxCharactersPopup()
{
ToastPopup::toast(msgt("WDS_WIFI_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"));
}
-void MsgBodyFrame::showNoSimCardPopup()
-{
- ToastPopup::toast(msgt("IDS_MSGF_POP_SIM_NOT_INSERTED"), FAIL_ICON);
-}
-
-void MsgBodyFrame::showDisableFlightModePopup()
-{
- auto *popup = new StandardPopup(StandardPopup::buttons2Style);
- popup->setText(msgt("WDS_MSG_POP_UNABLE_TO_SEND_MESSAGE_TURN_OFF_FLIGHT_MODE"));
- popup->addLeftButton(CANCEL_BUTTON_POPUP);
- popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&MsgBodyFrame::onTurnOffFlightModeClicked), this);
- popup->show();
-}
-
-void MsgBodyFrame::showMobileNetworkSettingsPopup()
-{
- auto *popup = new StandardPopup(StandardPopup::buttons2Style);
- popup->setText(msgt("WDS_MSG_POP_UNABLE_TO_SEND_MESSAGE_CHANGE_YOUR_MOBILE_NETWORKS_SETTING"));
- popup->addLeftButton(CANCEL_BUTTON_POPUP);
- popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&MsgBodyFrame::onMobileNetworkSettingsClicked), this);
- popup->show();
-}
-
-void MsgBodyFrame::showSendingProgressPopup()
-{
- if (!m_pSendingPopup) {
- m_pSendingPopup = new IconTextPopup;
- m_pSendingPopup->setDismissByBackButtonFlag(false);
- m_pSendingPopup->addEventCb(EVAS_CALLBACK_DEL, makeCbFirst(&MsgBodyFrame::onSendingPopupDestroy), this);
- m_pSendingPopup->addHwButtonEvent(EEXT_CALLBACK_BACK, makeCbFirst(&MsgBodyFrame::onSendingPopupBackButtonPressed), this);
- m_pSendingPopup->setIcon(IconTextPopup::ProgressIcon);
- m_pSendingPopup->setText(msgt("IDS_MSG_BODY_SENDING_ING_M_STATUS_ABB"));
- m_pSendingPopup->show();
- m_pBody->getEntry().showInputPanel(false);
- }
-}
-
-void MsgBodyFrame::showSentWhenServiceBecomesAvailablePopup()
-{
- auto *popup = new StandardPopup(StandardPopup::buttons1Style);
- popup->setText(msgt("WDS_MSG_BODY_UNABLE_TO_SEND_MESSAGE_IT_WILL_BE_SENT_WHEN_SERVICE_BECOMES_AVAILABLE"));
- popup->addBottomButton(msgt("WDS_MSG_ACBUTTON_OK_ABB"));
- popup->show();
-}
-
-void MsgBodyFrame::showMmsTextLimitExceededPopup()
-{
- auto *popup = new StandardPopup(StandardPopup::buttons2Style);
- // TODO: remove later
- int numberOfCharacters = getMsgEngine().getSettings().getMaxMmsSize();
- int numberOfMmsMsg = 2;
-
- std::string popupMessage = msgArgs("WDS_MSG_BODY_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_EXCEEDED", numberOfCharacters);
- popupMessage += "<br>";
- popupMessage += msgArgs("WDS_MSG_BODY_MESSAGE_WILL_BE_SENT_AS_PD_MMS_MESSAGES_AND_1_SMS_MESSAGE", numberOfMmsMsg);
-
- popup->setText(popupMessage);
- popup->addLeftButton(CANCEL_BUTTON_POPUP);
- popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&MsgBodyFrame::onAllowTransmissionTextLClicked), this);
- popup->show();
-}
-
-void MsgBodyFrame::showUnableDataRoamingPopup()
-{
- auto *popup = new StandardPopup(StandardPopup::buttons2Style);
- popup->setText(msgt("WDS_MSG_BODY_UNABLE_TO_SEND_MMS_ENABLE_DATA_ROAMING"));
- popup->addLeftButton(CANCEL_BUTTON_POPUP);
- popup->addRightButton(OK_BUTTON_POPUP, makeCbLast(&MsgBodyFrame::onEnableDataRoamingClicked), this);
- popup->show();
-}
-
void MsgBodyFrame::showDiscardMsgPopup()
{
auto *popup = new StandardPopup(StandardPopup::buttons2Style);
popup->show();
}
-void MsgBodyFrame::onSendingPopupDestroy(Evas *e, Evas_Object *obj, void *event_info)
-{
- MSG_LOG("");
- m_pSendingPopup = nullptr;
- getParent().popGroup(*this);
-}
-
-void MsgBodyFrame::onSendingPopupBackButtonPressed(Evas_Object *obj, void *event_info)
-{
- MSG_LOG("");
- if (m_pSendingPopup)
- m_pSendingPopup->destroy();
-
- if (m_SendInfo.inProgress)
- m_SendInfo.reset();
-}
-
-void MsgBodyFrame::onTurnOffFlightModeClicked(Popup &popup)
-{
- MSG_LOG("");
- m_SettingsLauncher.launchConnections();
- popup.destroy();
-}
-
-void MsgBodyFrame::onAllowTransmissionTextLClicked(Popup &popup)
-{
- MSG_LOG("");
- popup.destroy();
-}
-
-void MsgBodyFrame::onEnableDataRoamingClicked(Popup &popup)
-{
- MSG_LOG("");
- popup.destroy();
- // TODO: run network settings
-}
-
-void MsgBodyFrame::onMobileNetworkSettingsClicked(Popup &popup)
-{
- MSG_LOG("");
- popup.destroy();
- // TODO: run network settings
-}
-
void MsgBodyFrame::onDiscardMsgClicked(Popup &popup)
{
MSG_LOG("");
updateTextCounter();
}
+void MsgBodyFrame::onEntryPress(Evas_Object *obj, void *event)
+{
+ MSG_LOG("");
+ if (m_pListener)
+ m_pListener->onPress(*this);
+}
+
void MsgBodyFrame::onEntryActivated(Evas_Object *obj, void *event)
{
MSG_LOG("");
- requestSendMessage();
+ if (m_pListener)
+ m_pListener->onSendRequest(*this);
}
void MsgBodyFrame::onSendButtonClicked()
{
MSG_LOG("");
- requestSendMessage();
+ if (m_pListener)
+ m_pListener->onSendRequest(*this);
}
void MsgBodyFrame::onEntryFilter(Evas_Object *obj, char **text)
}
}
-void MsgBodyFrame::onMsgTransportSentStatus(const MsgSentStatus &status)
-{
- RequestId id = status.getId();
- Message::NetworkStatus networkStatus = status.getNetworkStatus();
-
- MSG_LOG("Id = ", id);
- MSG_LOG("Network status = ", networkStatus);
-
- auto reqIdIt = m_SendInfo.reqtIdSet.find(id);
- bool reqFound = reqIdIt != m_SendInfo.reqtIdSet.end();
-
- // Skip unknown request
- if (!reqFound)
- return;
-
- if (networkStatus == Message::NS_Sending)
- return;
-
- m_SendInfo.reqtIdSet.erase(reqIdIt);
- bool isLast = m_SendInfo.reqtIdSet.empty();
-
- if (networkStatus == Message::NS_Send_Fail)
- m_SendInfo.status = Message::NS_Send_Fail;
- else if (networkStatus == Message::NS_Send_Pending && m_SendInfo.status != Message::NS_Send_Fail)
- m_SendInfo.status = Message::NS_Send_Pending;
- else if (m_SendInfo.status == Message::NS_Unknown)
- m_SendInfo.status = networkStatus;
-
- if (isLast || m_SendInfo.status == Message::NS_Send_Fail) {
-
- m_SendInfo.inProgress = false;
- m_SendInfo.reqtIdSet.clear();
-
- if (m_SendInfo.status == Message::NS_Send_Success) {
- m_pSendingPopup->setIcon(IconTextPopup::CheckIcon);
- m_pSendingPopup->setText(msgt("WDS_WNOTI_TPOP_SENT_ABB"));
- m_pSendingPopup->setTimeOut();
- } else if (m_SendInfo.status == Message::NS_Send_Fail) {
- m_pSendingPopup->setIcon(IconTextPopup::FailedIcon);
- m_pSendingPopup->setText(msgt("WDS_MSG_TPOP_SENDING_FAILED_ABB"));
- m_pSendingPopup->setTimeOut();
- } else if (m_SendInfo.status != Message::NS_Send_Pending) {
- m_pSendingPopup->destroy();
- showSentWhenServiceBecomesAvailablePopup();
- }
-
- afterSentHandler();
- }
-}
#include "MsgInputSelector.h"
-#include "MsgBodyFrame.h"
#include "NaviFrameController.h"
+#include "ConvFrame.h"
#include "App.h"
#include "Logger.h"
using namespace Msg;
-MsgInputSelector::MsgInputSelector(FrameController *parent)
- : m_pParent(parent)
+MsgInputSelector::MsgInputSelector()
+ : m_pMsgBodyFrame(nullptr)
+ , m_CloseAfterSent(false)
{
+ MSG_LOG("");
+ m_Composer.setListener(this);
}
MsgInputSelector::~MsgInputSelector()
{
+ MSG_LOG("");
+ m_Composer.setListener(nullptr);
+ reset();
}
-void MsgInputSelector::onKeyboardReply(const std::string &text)
+NaviFrameController &MsgInputSelector::getNavigation()
{
- MSG_LOG("");
- navigateToMsgBody(text);
+ return App::getInst().getNavigation();
}
-void MsgInputSelector::onTemplateReply(const std::string &text)
+void MsgInputSelector::showMsgBody(const std::string &text)
+{
+ NaviFrameController &navi = getNavigation();
+ if (m_pMsgBodyFrame) {
+ navi.promote(*m_pMsgBodyFrame);
+ } else {
+ m_pMsgBodyFrame = new MsgBodyFrame(navi);
+ m_pMsgBodyFrame->setListener(this);
+ navi.push(*m_pMsgBodyFrame);
+ }
+
+ m_pMsgBodyFrame->setText(text);
+}
+
+void MsgInputSelector::setRecip(Recipient recip)
+{
+ m_Composer.setRecip(recip);
+}
+
+bool MsgInputSelector::execCmd(const AppControlComposeRef &cmd)
+{
+ if (!cmd)
+ return false;
+
+ reset();
+ m_CloseAfterSent = true;
+
+ auto &recips = cmd->getRecipientList();
+ if (recips.empty())
+ m_Composer.setRecip({});
+ else
+ m_Composer.setRecip(recips.front());
+
+ std::string text = cmd->getMessageText();
+ bool isEmpty = text.empty();
+ InputSelector::setText(text);
+ m_Composer.setText(std::move(text));
+ if (isEmpty)
+ return launch();
+ else
+ return launch(KeyboardType);
+}
+
+void MsgInputSelector::reset()
+{
+ m_CloseAfterSent = false;
+ m_Composer.reset();
+ m_Composer.clear();
+ if (m_pMsgBodyFrame) {
+ m_pMsgBodyFrame->setListener(this);
+ m_pMsgBodyFrame->pop();
+ m_pMsgBodyFrame = nullptr;
+ }
+}
+
+void MsgInputSelector::navigateToConv(ThreadId threadId)
+{
+ NaviFrameController &navi = getNavigation();
+ auto *frame = navi.findTopFrame<ConvFrame>();
+
+ if (frame) {
+ navi.promote(*frame);
+ } else {
+ frame = new ConvFrame(navi);
+ navi.push(*frame);
+ }
+
+ frame->setThreadId(threadId);
+}
+
+void MsgInputSelector::send()
+{
+ ThreadId id = m_Composer.send();
+ if (id.isValid()) {
+ if (m_CloseAfterSent)
+ getNavigation().popGroup(FrameController::ComposerGroup);
+ else
+ navigateToConv(id);
+ }
+}
+
+void MsgInputSelector::onSendFinished(Composer &composer, Message::NetworkStatus status)
{
MSG_LOG("");
- navigateToMsgBody(text);
}
-void MsgInputSelector::onVoiceReply(const std::string &text, const std::list<std::string> &filePath)
+void MsgInputSelector::onCloseSendPopup(Composer &composer)
{
MSG_LOG("");
- navigateToMsgBody(text);
+ getNavigation().popGroup(FrameController::ComposerGroup);
}
-void MsgInputSelector::onEmoticonReply(const std::string &emoticon)
+void MsgInputSelector::onDestroy(MsgBodyFrame &frame)
{
MSG_LOG("");
- navigateToMsgBody(emoticon);
+ m_pMsgBodyFrame = nullptr;
}
-void MsgInputSelector::navigateToMsgBody(const std::string &text)
+void MsgInputSelector::onSendRequest(MsgBodyFrame &frame)
{
- 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);
+ MSG_LOG("");
+ m_Composer.setText(frame.getText());
+ send();
}
-void MsgInputSelector::setRecip(Recipient recip)
+void MsgInputSelector::onPress(MsgBodyFrame &frame)
{
- m_Recip = std::move(recip);
+ setText(frame.getRawText());
+ launch(KeyboardType);
}
-bool MsgInputSelector::execCmd(const AppControlComposeRef &cmd)
+void MsgInputSelector::onKeyboardReply(const std::string &text)
{
- if (!cmd)
- return false;
+ MSG_LOG("");
+ showMsgBody(text);
+}
- m_ComposeCmd = cmd;
- m_Recip.clear();
+void MsgInputSelector::onTemplateReply(const std::string &text)
+{
+ MSG_LOG("");
+ m_Composer.setText(text);
+ send();
+}
- auto &recips = cmd->getRecipientList();
- if (!recips.empty())
- m_Recip = Recipient::getByAddress(recips.front());
+void MsgInputSelector::onEmoticonReply(const std::string &emoticon)
+{
+ MSG_LOG("");
+ m_Composer.setText(emoticon);
+ send();
+}
- return true;
+void MsgInputSelector::onVoiceReply(const std::string &text, const std::list<std::string> &filePath)
+{
+ MSG_LOG("");
+ m_Composer.setText(text);
+ send();
}
* limitations under the License.
*/
-#include "MsgBodyFrame.h"
#include "RecipFrame.h"
#include "Callback.h"
#include "RecipInputFrame.h"
#include "BottomButton.h"
#include "RecipLayout.h"
#include "ToastPopup.h"
+#include "App.h"
+#include "NaviFrameController.h"
using namespace Msg;
, m_pNextButton(nullptr)
, m_pRecipField(nullptr)
, m_pInputFrame(nullptr)
- , m_InputSelector(this)
{
MSG_LOG("");
bool RecipFrame::execCmd(const AppControlComposeRef &cmd)
{
+ m_ComposeCmd = cmd;
+
if (!cmd)
return false;
- m_ComposeCmd = cmd;
-
auto &recips = cmd->getRecipientList();
if (!recips.empty())
setRecip(recips.front());
}
}
-void RecipFrame::navigateToMsgBody()
+void RecipFrame::navigateToMsgInput()
{
- 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();
- }
+ MsgInputSelector &inputSelector = getParent().getInputSelector();
+ inputSelector.reset();
+
+ if (m_ComposeCmd)
+ inputSelector.execCmd(m_ComposeCmd);
+ else
+ inputSelector.launch();
+
+ inputSelector.setRecip(m_Recip);
}
void RecipFrame::onAttached(ViewItem &item)
{
MSG_LOG("");
if (m_Recip.isValid())
- navigateToMsgBody();
+ navigateToMsgInput();
else
ToastPopup::toast(msgt("IDS_MSG_HEADER_INVALID_RECIPIENT_ABB"));
}
#include "ToastPopup.h"
#include "PopupManager.h"
#include "ContactFrame.h"
+#include "NaviFrameController.h"
#include <Eina.h>
#include "TitleListItem.h"
#include "Logger.h"
#include "LangUtils.h"
+#include "App.h"
+#include "NaviFrameController.h"
+
#include <functional>
using namespace Msg;
#include "WorkingDir.h"
#include "MoreOption.h"
#include "ContactViewer.h"
-#include "MsgInputSelector.h"
namespace Msg
{
class ConvFrame
: public FrameController
, private IConvListListener {
+
public:
ConvFrame(NaviFrameController &parent);
virtual ~ConvFrame();
WorkingDirRef m_WorkingDir;
MoreOptionItemInfo m_MoreOptionItemsInfo[MorOptionMax];
ContactViewer m_ContactViewer;
- MsgInputSelector m_InputSelector;
};
}
#include "IconTextPopup.h"
#include "Recipient.h"
#include "VoiceCall.h"
+#include "NaviFrameController.h"
using namespace Msg;
void ConvFrame::reply()
{
- m_InputSelector.setRecip(m_pList->getRecip());
- m_InputSelector.launch();
+ MsgInputSelector &inputSelector = getParent().getInputSelector();
+ inputSelector.reset();
+ inputSelector.setRecip(m_pList->getRecip());
+ inputSelector.launch();
}
void ConvFrame::updateMoreOption()
#include "BottomButton.h"
#include "SelectButton.h"
#include "MoreOption.h"
+#include "NaviFrameController.h"
using namespace Msg;
#include "BlockedMsgListItem.h"
#include "NoContentLayout.h"
#include "SettingsBlockedMsgDetailFrame.h"
+#include "App.h"
+#include "NaviFrameController.h"
using namespace Msg;
#include "DefaultLayout.h"
#include "MoreOption.h"
#include "IconTextPopup.h"
+#include "NaviFrameController.h"
using namespace Msg;
#include "Window.h"
#include "Logger.h"
#include "LangUtils.h"
+#include "NaviFrameController.h"
#include <functional>
using namespace Msg;
#include "TitleListItem.h"
#include "ListView.h"
#include "SettingsBlockListFrame.h"
+#include "NaviFrameController.h"
using namespace Msg;