TizenRefApp-8796 Integrate MsgInputSelector to messages app (part II) 72/138772/3
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 13 Jul 2017 13:18:52 +0000 (16:18 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 14 Jul 2017 10:04:26 +0000 (13:04 +0300)
Change-Id: I8df9d3311cc99dd3f971b2fcf1d72219b3f9af4d
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
45 files changed:
.cproject
project_def.prop
src/Common/AppControl/inc/AppControlHandle.h
src/Common/AppControl/inc/AppControlLauncher.h
src/Common/AppControl/inc/InputSelector.h
src/Common/AppControl/src/AppControlHandle.cpp
src/Common/AppControl/src/AppControlLauncher.cpp
src/Common/AppControl/src/ContactEditor.cpp
src/Common/AppControl/src/ContactPicker.cpp
src/Common/AppControl/src/ContactViewer.cpp
src/Common/AppControl/src/FileViewer.cpp
src/Common/AppControl/src/InputSelector.cpp
src/Common/AppControl/src/SettingsLauncher.cpp
src/Common/AppControl/src/Share.cpp
src/Common/Controller/inc/App.h
src/Common/Controller/inc/FrameController.h
src/Common/Controller/inc/NaviFrameController.h
src/Common/Controller/src/App.cpp
src/Common/Controller/src/InputFrame.cpp
src/Common/Controller/src/NaviFrameController.cpp
src/Common/MsgEngine/inc/MsgUtils.h
src/Common/MsgEngine/src/MsgUtils.cpp
src/Common/Recipient/inc/Recipient.h
src/Common/Recipient/src/Recipient.cpp
src/Common/View/inc/PopupManager.h
src/Common/View/src/PopupManager.cpp
src/Composer/Controller/inc/Composer.h [new file with mode: 0644]
src/Composer/Controller/inc/ContactFrame.h
src/Composer/Controller/inc/MsgBodyFrame.h
src/Composer/Controller/inc/MsgInputSelector.h
src/Composer/Controller/inc/RecipFrame.h
src/Composer/Controller/src/Composer.cpp [new file with mode: 0644]
src/Composer/Controller/src/ContactFrame.cpp
src/Composer/Controller/src/MsgBodyFrame.cpp
src/Composer/Controller/src/MsgInputSelector.cpp
src/Composer/Controller/src/RecipFrame.cpp
src/Composer/Controller/src/RecipInputFrame.cpp
src/Composer/Controller/src/SendingOptionsFrame.cpp
src/Conversation/Controller/inc/ConvFrame.h
src/Conversation/Controller/src/ConvFrame.cpp
src/MsgThread/Controller/src/MsgThreadFrame.cpp
src/Settings/Controller/src/SettingsBlockListFrame.cpp
src/Settings/Controller/src/SettingsBlockedMsgDetailFrame.cpp
src/Settings/Controller/src/SettingsFrame.cpp
src/Settings/Controller/src/SettingsMenuBlockListFrame.cpp

index c9ae29987c677a24cd83a263ac6c59a6944a3120..b41b1c4c143a8f19ad1bd6ca3fa131851bb11a8d 100644 (file)
--- a/.cproject
+++ b/.cproject
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Settings/Controller/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Settings/View/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/MsgThread/Controller/inc}&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Viewer/Controller/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common/Controller/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Conversation/Controller/inc}&quot;"/>
                                                        <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="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Composer/Controller/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/MsgThread/View/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Settings/Controller/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Settings/View/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/MsgThread/Controller/inc}&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Viewer/Controller/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common/Controller/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Conversation/Controller/inc}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Conversation/View/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common/AppControl/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common/ContactManager/inc}&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common/MsgEngine/inc}&quot;"/>
                                                                <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="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                <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">
index 0d0c6613e951085a2158e775d8545ed554b3bc07..6175970c600a601afda87fa66c11596d9041917e 100644 (file)
@@ -9,7 +9,7 @@ type = app
 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 =  
@@ -36,7 +36,7 @@ USER_OBJS =
 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)
index a8fb00abfdb2ab3937434fe46963036a53079d03..853ea02cf2d55b002b60cf5f0d083d739d2a8f55 100644 (file)
@@ -47,13 +47,18 @@ namespace Msg {
              */
             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;
 
index 8fa3075f98b7d1f926352344a5dc9db3e10029c3..d4391ff31a25799aa31a95433f598ac5fd2f69ef 100644 (file)
@@ -27,7 +27,8 @@ namespace Msg {
         friend class AppControlHandle;
 
         public:
-            static AppControlLauncher &getInst();
+            AppControlLauncher();
+            ~AppControlLauncher();
 
             /**
              *@brief Launch application by AppControlHandle
@@ -47,9 +48,9 @@ namespace Msg {
              */
             bool isLaunchInProgress() const;
 
+            AppControlHandle *getHandle() const;
+
         private:
-            AppControlLauncher();
-            ~AppControlLauncher();
             AppControlLauncher(const AppControlLauncher&) = delete;
             AppControlLauncher& operator=(const AppControlLauncher&) = delete;
 
index 52eff552e9b0b86f30c7572cbb4b3d49e9869e3d..672ae08f8feb777ee013c0f16e42cd3c44240edf 100644 (file)
@@ -28,11 +28,21 @@ namespace Msg {
     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) {};
@@ -41,6 +51,8 @@ namespace Msg {
             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;
 
index 9a6167aa9f6f6a3026d9d19ca824f6798a7885ec..f9b770309ea7e15bf44bed105c61225764d26336 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "AppControlHandle.h"
 #include "AppControlLauncher.h"
+#include "App.h"
 
 using namespace Msg;
 
@@ -42,13 +43,20 @@ AppControlHandle::operator app_control_h()
 
 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)
@@ -65,3 +73,18 @@ void AppControlHandle::setLaunchMode(app_control_launch_mode_e mode)
 {
     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();
+}
index 740eb433ec462658d5c7911b6114575962d69a1b..66b4a8deadcb6318a9a1ad6f0c5c99542d3eda78 100644 (file)
@@ -33,12 +33,6 @@ AppControlLauncher::~AppControlLauncher()
         ecore_timer_del(m_pTimer);
 }
 
-AppControlLauncher &AppControlLauncher::getInst()
-{
-    static AppControlLauncher inst;
-    return inst;
-}
-
 bool AppControlLauncher::launch(AppControlHandle &handle)
 {
     if (isLaunchInProgress() || !handle)
@@ -89,4 +83,9 @@ void AppControlLauncher::onReply(app_control_h request, app_control_h reply, app
     }
 }
 
+AppControlHandle *AppControlLauncher::getHandle() const
+{
+    return m_pHandle;
+}
+
 
index 374bb0223c9430e681bdcaa8f192fc0dae9becd4..3453712f638b7a18f10931fcea260f9f470441e2 100644 (file)
@@ -62,5 +62,5 @@ bool ContactEditor::launch(const std::string &address, const char *operation, co
 {
     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();
 }
index 307a25cdbe0fb7fdb72e96b710e6ce1a06a28ed1..244ba1322d19836c6630c164d8de7081e5470f8f 100644 (file)
@@ -52,7 +52,7 @@ bool ContactPicker::launch(size_t howManyToPick)
         }
 
         app_control_add_extra_data(m_Handle, APP_CONTROL_DATA_TYPE, typePhone.c_str());
-        res = AppControlLauncher::getInst().launch(*this);
+        res = AppControlHandle::launch();
     }
 
     return res;
index 7d63070e0f58bd557306e70f6669cb6ec1afc55f..09e90c5f646faa2510a3c88a8897b1d727f686b4 100644 (file)
@@ -51,14 +51,14 @@ bool ContactViewer::launch(const ContactAddress &address)
     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)
index 219c54b9146fdd1316efaede73491fbae9a27597..24cb6e8b45c1bd3898939054bf7bd7ee0d670e02 100644 (file)
@@ -34,7 +34,7 @@ FileViewer::~FileViewer()
 
 bool FileViewer::launch(const std::string &file)
 {
-    if (AppControlLauncher::getInst().isLaunchInProgress())
+    if (getLauncher().isLaunchInProgress())
         return false;
 
     bool res = false;
@@ -50,7 +50,7 @@ bool FileViewer::launch(const std::string &file)
         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;
@@ -60,7 +60,7 @@ bool FileViewer::launchWithCopy(const std::string &file)
 {
     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);
index 3cf368f22bd47907cbdf3a0ca080a37d7c3136cf..347af06c9d08540c2adf8c6460206460e0461685 100644 (file)
@@ -34,6 +34,45 @@ void InputSelector::setListener(IInputSelectorListener *l)
     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);
@@ -58,6 +97,7 @@ void InputSelector::onReply(app_control_h request, app_control_h reply, app_cont
              onTerminate();
              if (m_pListener)
                  m_pListener->onTerminate(*this);
+             clear();
          }
     }
 }
index 9549e633a0f9d492c4eff571fdb11b4e633ebf68..59c074ae8fc58a4b6bf4ceeed90c03094e8a0bb0 100644 (file)
@@ -21,13 +21,13 @@ using namespace Msg;
 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;
 }
index 4385add9eccb95779ef594fdc01de1d077f36962..2f5ac390152b40daa02e5c3e3f24440c0c0902e3 100644 (file)
@@ -53,7 +53,7 @@ void Share::addFiles(const std::list<std::string> &files)
 
 bool Share::launch(const std::list<std::string> &files)
 {
-    if (files.empty() || AppControlLauncher::getInst().isLaunchInProgress())
+    if (files.empty() || getLauncher().isLaunchInProgress())
         return false;
 
     addFiles(files);
@@ -66,16 +66,16 @@ bool Share::launch(const std::list<std::string> &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();
 }
 
index fe271fb44f4666cea69ddf0e8106843ef38f8f9a..3a20b4376d93daf4da31d3e1d47e035a0de0b5d8 100644 (file)
@@ -31,6 +31,8 @@ namespace Msg {
     class ContactManager;
     class ThumbnailMaker;
     class SystemSettingsManager;
+    class AppControlLauncher;
+    class MsgInputSelector;
 
     class App {
         public:
@@ -64,6 +66,9 @@ namespace Msg {
             NaviFrameController &getNavigation();
             const NaviFrameController &getNavigation() const;
 
+            AppControlLauncher &getLauncher();
+            const AppControlLauncher &getLauncher() const;
+
         protected:
             App();
             ~App();
@@ -90,6 +95,7 @@ namespace Msg {
             SystemSettingsManager *m_pSysSettingsManager;
             std::list<IAppListener*> m_Listeners;
             NaviFrameController *m_pNaviFrame;
+            AppControlLauncher *m_pLauncher;
             bool m_IsPause;
             bool m_IsTerminating;
             bool m_NeedToCloseApp;
index 5f6e7561140c26ba73ef630e70b41b48f98aa523..5eb97703d2ea57b87656d738a173049eccb689b9 100644 (file)
 #define FrameController_h_
 
 #include "NaviFrameItem.h"
-#include "NaviFrameController.h"
 
 #include <list>
 #include <memory>
 
 namespace Msg {
+
     class NaviFrameController;
 
     class FrameController
index ac34534ca8928f186580af2a5ad04811ce91af3d..c287279c7fcd24fc276d43f1e8774b1ccd64db68 100644 (file)
 #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);
@@ -51,6 +56,12 @@ namespace Msg {
              */
             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.
              */
@@ -75,11 +86,13 @@ namespace Msg {
             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);
@@ -90,12 +103,16 @@ namespace Msg {
             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;
     };
index 8a2416642f5354ec1f76dfdcc36be6d6b91cd57c..43b3effe08a6ccb0dd36aac10b22fbf4c0779843 100644 (file)
@@ -32,6 +32,7 @@
 #include "SystemSettingsManager.h"
 #include "PopupManager.h"
 #include "ThumbnailMaker.h"
+#include "AppControlLauncher.h"
 
 #include <assert.h>
 #include <stdlib.h>
@@ -55,6 +56,7 @@ App::App()
     , m_pThumbnailMaker(nullptr)
     , m_pSysSettingsManager(nullptr)
     , m_pNaviFrame(nullptr)
+    , m_pLauncher(nullptr)
     , m_IsPause(true)
     , m_IsTerminating(false)
     , m_NeedToCloseApp(true)
@@ -70,6 +72,7 @@ App::~App()
     delete m_pContactManager;
     delete m_pPopupManager;
     delete m_pSysSettingsManager;
+    delete m_pLauncher;
     if (this == appInstance)
         appInstance = nullptr;
 }
@@ -211,6 +214,18 @@ const NaviFrameController &App::getNavigation() const
     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);
@@ -315,7 +330,7 @@ void App::onAppControl(app_control_h appControl)
 
     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:
index 4775ed6e539505ffbf34d77116ea1b778cfaf2a0..ae7852655566f07a94c914c28d1590db0f93b62b 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include "InputFrame.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
index 6387d7771a0bf4bf7d799ef14d71ebb001683a5b..16e7a5ba9540c4e86384c8efb824c68ecbaa828f 100644 (file)
@@ -26,7 +26,6 @@
 #include "MsgEngine.h"
 #include "Callback.h"
 #include "ToastPopup.h"
-#include "MsgBodyFrame.h"
 #include "RecipFrame.h"
 
 #include <memory>
@@ -38,6 +37,7 @@ NaviFrameController::NaviFrameController(App &app)
     : NaviFrameView(app.getWindow())
 {
     App::getInst().addListener(*this);
+    App::getInst().getPopupManager().addListener(*this);
     addHwButtonEvent(EEXT_CALLBACK_BACK, makeCbFirst(&NaviFrameController::onHwBackButtonClicked), this);
 }
 
@@ -48,7 +48,7 @@ NaviFrameController::~NaviFrameController()
 
 void NaviFrameController::pop(FrameController &frame)
 {
-    if (isLastFrame() || isEmpty())
+    if (isLastFrame() && App::getInst().getPopupManager().isEmpty())
         App::getInst().exit();
     else {
         App::getInst().getPopupManager().pop(&frame);
@@ -71,6 +71,16 @@ void NaviFrameController::popGroup(FrameController &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();
@@ -103,11 +113,11 @@ void NaviFrameController::execCmd(const AppControlDefaultRef &cmd)
         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);
@@ -121,19 +131,14 @@ void NaviFrameController::execCmd(const AppControlComposeRef &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);
     };
 }
 
@@ -142,7 +147,7 @@ void NaviFrameController::execCmd(const AppControlSettingsRef &cmd)
     if (!prepare(*cmd))
         return;
 
-    AppControlLauncher::getInst().terminate();
+    App::getInst().getLauncher().terminate();
     auto *frame = findTopFrame<SettingsFrame>();
     if (frame) {
         promote(*frame);
@@ -169,16 +174,24 @@ FrameController *NaviFrameController::getTopFrame() const
     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)
@@ -215,6 +228,8 @@ void NaviFrameController::onBeforeDelete(View &view)
 {
     NaviFrameView::onBeforeDelete(view);
     App::getInst().removeListener(*this);
+    App::getInst().getPopupManager().removeListener(*this);
+    m_InputSelector.reset();
 }
 
 void NaviFrameController::onTerminate(InputSelector &sender)
@@ -223,3 +238,15 @@ 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("");
+}
+
index 57754e5ccc5de3818a468dfdb7adb5d3470bcda0..fed466938385c0537ba613ebd2259fb1900edeab 100644 (file)
@@ -50,7 +50,7 @@ namespace Msg {
              * 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);
 
     };
 }
index dd86771d3238e45b5748de835a30c52eae2ded3e..9e6362eb069d9389d89920c44ede891f3ee78693 100644 (file)
@@ -158,7 +158,7 @@ std::string makeKbStr(long long bytes)
     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 {};
index 8fb86c961ed4b6ac740cfd561aa664bdfee1f1ed..3ac42476b300ef3970ba8976f08c995fd238c3ab 100644 (file)
@@ -26,7 +26,7 @@ namespace Msg {
     class Recipient {
 
         public:
-            Recipient(std::string address, std::string dispName);
+            Recipient(std::string address, std::string dispName = {});
             Recipient();
             ~Recipient();
 
index 5528f23b8ac090dac481a805ade5b36d0ff8361b..646a06f42ea27ec0a1ed19fb6d1643ef921e832b 100644 (file)
@@ -123,7 +123,7 @@ const std::string &Recipient::getAddress() const
 
 const std::string &Recipient::getDispName() const
 {
-    return m_DispName;
+    return m_DispName.empty() ? m_Address : m_DispName;
 }
 
 void Recipient::setAddress(std::string address)
index 9977c56dee0fce48aab79508e079448a016ad297..770476a0eaf99341d416845356dfdd27a7e45ba2 100644 (file)
 #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.
@@ -40,6 +42,9 @@ namespace Msg {
             PopupManager(PopupManager&) = delete;
             PopupManager &operator=(PopupManager&) = delete;
 
+            void addListener(IPopupManagerListener &listener);
+            void removeListener(IPopupManagerListener &listener);
+
             /**
              * @brief Gets window-context.
              * @return window-context.
@@ -50,6 +55,7 @@ namespace Msg {
             void pop(BasePopup *popup, bool anim = true);
             void push(BasePopup &popup, void *id = nullptr);
             BasePopup *getTop() const;
+            bool isEmpty() const;
 
             /**
              * @brief Process pause event
@@ -64,6 +70,14 @@ namespace Msg {
             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) {};
     };
 }
 
index 2816cb3181de68d11e936fd5e2e141eb5cc4dabf..dfef547d55385a518c50b413954e83fb0fc9e7fb 100644 (file)
@@ -19,6 +19,7 @@
 #include "Callback.h"
 
 #include <efl_extension.h>
+#include <algorithm>
 
 using namespace Msg;
 
@@ -34,6 +35,20 @@ Window &PopupManager::getWindow() const
     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()
 {
 }
@@ -53,10 +68,15 @@ void PopupManager::pop(BasePopup *popup, bool anim)
 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)
@@ -66,6 +86,9 @@ 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);
     }
 }
 
@@ -74,6 +97,11 @@ BasePopup *PopupManager::getTop() const
     return m_pPopup;
 }
 
+bool PopupManager::isEmpty() const
+{
+    return !getTop();
+}
+
 void PopupManager::onHwBackButtonClicked(Evas_Object *obj, void *eventInfo)
 {
     MSG_LOG("");
diff --git a/src/Composer/Controller/inc/Composer.h b/src/Composer/Controller/inc/Composer.h
new file mode 100644 (file)
index 0000000..24159c3
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * 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_ */
index 5cdcd20993abf12e78688a6fbae4c6a468385142..71823ad97ca74a9565e84f87f6b739b3e30a3ee5 100644 (file)
@@ -28,6 +28,7 @@ namespace Msg {
     class IContactFrameListener;
     class PaddingListViewItem;
 
+
     class ContactFrame
         : public FrameController
         , private IListViewListener
index 9aa46281c56ca7ee9501513d69b1b2ed63723368..9acba6b0763a1c9370c44d787bec36c0385f15ad 100644 (file)
 
 #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:
@@ -57,75 +47,40 @@ namespace Msg {
             // 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_ */
index 90d2cdbf85eade2bc994da2ad03e379e77b32567..4e6aa8105f354b417e4529b5ba61bdc45a9069c4 100644 (file)
 #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;
@@ -42,12 +49,24 @@ namespace Msg {
             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;
     };
 }
 
index 2d236cf22199cef28c4eb8763e12f1f8adc9fbb5..3cd74843531459605110fc74615525bbae905de3 100644 (file)
@@ -23,7 +23,6 @@
 #include "ContactPicker.h"
 #include "ContactManager.h"
 #include "AppControlCompose.h"
-#include "MsgInputSelector.h"
 
 namespace Msg {
 
@@ -79,7 +78,7 @@ namespace Msg {
             void setRecip(Recipient recip);
             void setRecip(std::string address);
             void clearRecip();
-            void navigateToMsgBody();
+            void navigateToMsgInput();
 
         private:
             DefaultLayout *m_pBaseLayout;
@@ -90,7 +89,6 @@ namespace Msg {
             Recipient m_Recip;
             ContactPicker m_ContactPicker;
             AppControlComposeRef m_ComposeCmd;
-            MsgInputSelector m_InputSelector;
     };
 }
 
diff --git a/src/Composer/Controller/src/Composer.cpp b/src/Composer/Controller/src/Composer.cpp
new file mode 100644 (file)
index 0000000..f573f18
--- /dev/null
@@ -0,0 +1,430 @@
+/*
+ * 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
+}
+
index 882bb301794e19132507fc9df77006e6418ed111..cd64e2d7043b17cd71172f2f33aaa18833deb7a1 100644 (file)
@@ -20,6 +20,7 @@
 #include "ContactListItem.h"
 #include "App.h"
 #include "Window.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
index c9e62b4dda5b2d6b960769c34281478912f53648..bad521d8b7438ac2d87bbc109d7480de06c2989f 100644 (file)
 #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)
@@ -81,6 +56,22 @@ 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) {
@@ -94,39 +85,20 @@ void MsgBodyFrame::prepareBody()
     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")) :
@@ -136,249 +108,11 @@ void MsgBodyFrame::updateTextCounter()
     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);
@@ -389,50 +123,6 @@ void MsgBodyFrame::showDiscardMsgPopup()
     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("");
@@ -462,16 +152,25 @@ void  MsgBodyFrame::onEntryChanged(Evas_Object *obj, void *event)
     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)
@@ -485,52 +184,3 @@ 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();
-    }
-}
index dd9b9505a1632bc33efc91d0cac6adcf7349e18a..8c7a61ab67aff70455c964d259622a78b7170e38 100644 (file)
 
 
 #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();
 }
index 4d88d6172a37c89f916745f2238b887e6333e6dd..d88659cce845921f044d497acb664425ccc612e4 100644 (file)
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-#include "MsgBodyFrame.h"
 #include "RecipFrame.h"
 #include "Callback.h"
 #include "RecipInputFrame.h"
@@ -22,6 +21,8 @@
 #include "BottomButton.h"
 #include "RecipLayout.h"
 #include "ToastPopup.h"
+#include "App.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
@@ -32,7 +33,6 @@ RecipFrame::RecipFrame(NaviFrameController &parent)
     , m_pNextButton(nullptr)
     , m_pRecipField(nullptr)
     , m_pInputFrame(nullptr)
-    , m_InputSelector(this)
 {
     MSG_LOG("");
 
@@ -49,11 +49,11 @@ RecipFrame::RecipFrame(NaviFrameController &parent)
 
 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());
@@ -142,19 +142,17 @@ void RecipFrame::showInputFrame()
     }
 }
 
-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)
@@ -174,7 +172,7 @@ void RecipFrame::onNextButtonClicked(Evas_Object *obj, void *event)
 {
     MSG_LOG("");
     if (m_Recip.isValid())
-        navigateToMsgBody();
+        navigateToMsgInput();
     else
         ToastPopup::toast(msgt("IDS_MSG_HEADER_INVALID_RECIPIENT_ABB"));
 }
index d7bef49228fbec67b602b12755180f65589f23da..442f9113d0692ef082156df176a2c3e4c4047e3f 100644 (file)
@@ -22,6 +22,7 @@
 #include "ToastPopup.h"
 #include "PopupManager.h"
 #include "ContactFrame.h"
+#include "NaviFrameController.h"
 
 #include <Eina.h>
 
index 3e1b5e970ab0c9c12b04fa988385c370dc7ae379..db5d190ca5d0289a6b8aa94662ec2bae8734d43d 100644 (file)
@@ -19,6 +19,9 @@
 #include "TitleListItem.h"
 #include "Logger.h"
 #include "LangUtils.h"
+#include "App.h"
+#include "NaviFrameController.h"
+
 #include <functional>
 
 using namespace Msg;
index a37ee465665a85cb3b6d54b74bbece9ad09709bf..adf6856fed05716b659dd9b535792568f458a7d4 100644 (file)
@@ -24,7 +24,6 @@
 #include "WorkingDir.h"
 #include "MoreOption.h"
 #include "ContactViewer.h"
-#include "MsgInputSelector.h"
 
 namespace Msg
 {
@@ -36,6 +35,7 @@ namespace Msg
     class ConvFrame
         : public FrameController
         , private IConvListListener {
+
         public:
             ConvFrame(NaviFrameController &parent);
             virtual ~ConvFrame();
@@ -128,7 +128,6 @@ namespace Msg
             WorkingDirRef m_WorkingDir;
             MoreOptionItemInfo m_MoreOptionItemsInfo[MorOptionMax];
             ContactViewer m_ContactViewer;
-            MsgInputSelector m_InputSelector;
     };
 }
 
index 0ced4cb52f84f815c97ced908f671e515bb97440..b15f9d87009faadcb610e34a903df5d47b9bd65c 100644 (file)
@@ -24,6 +24,7 @@
 #include "IconTextPopup.h"
 #include "Recipient.h"
 #include "VoiceCall.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
@@ -225,8 +226,10 @@ void ConvFrame::updateDeleteViews()
 
 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()
index 1e0eb5bac6704a38771a6e1d273a18c10836563b..46090556291b407340360f8c0600529b2cfc00e9 100644 (file)
@@ -32,6 +32,7 @@
 #include "BottomButton.h"
 #include "SelectButton.h"
 #include "MoreOption.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
index 6f429d80f9e5b4ca8925c547b937cb8f6392ff08..ea9c81ca4081ad5780f24528c86dfd0749e0dffe 100644 (file)
@@ -28,6 +28,8 @@
 #include "BlockedMsgListItem.h"
 #include "NoContentLayout.h"
 #include "SettingsBlockedMsgDetailFrame.h"
+#include "App.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
index 9f6824acfcc2ad9429c33a00a7d517618943a4ae..c77d0bffc6a30dcddec5de6d969cc0fefa0c82c0 100644 (file)
@@ -19,6 +19,7 @@
 #include "DefaultLayout.h"
 #include "MoreOption.h"
 #include "IconTextPopup.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;
 
index b46c477eaa5c4e03d89cc8d89815dabe013dc2b1..d10832ff2326fcd677bf78a1c4e7ae108365b9fa 100644 (file)
@@ -24,6 +24,7 @@
 #include "Window.h"
 #include "Logger.h"
 #include "LangUtils.h"
+#include "NaviFrameController.h"
 #include <functional>
 
 using namespace Msg;
index 64b19a320dc96d1c2ce7387550ddda66053e3648..45450409ba5160745e1503dbaed2fdc54d76d851 100644 (file)
@@ -24,6 +24,7 @@
 #include "TitleListItem.h"
 #include "ListView.h"
 #include "SettingsBlockListFrame.h"
+#include "NaviFrameController.h"
 
 using namespace Msg;